Ir para conteúdo
  • Cadastre-se

(Resolvido)[Quest] Estátuas Vivas


Ir para solução Resolvido por Adriano SwaTT,

Posts Recomendados

Olá galera da Tk, tive uma ideia meio louca para uma quest que dá vida a estátuas   :O

Sem mais delongas, vamos a quest. 

Bom, a quest é constituída por uma sala com uma alavanca, que é rodeada por estátuas, ao puxar esta alavanca as estátuas "ganhariam" vida  :O .

Imagem da quest em sí:

azRa97I.png

Minha ideia está nesta imagem, como vocês podem notar o outfit do meu char é igual as estátuas  :hum: 

 

Eis que surge o meu pedido:

Um script que ao puxar a alavanca ou passar pelo tile antes da alavanca (o que for mais fácil de fazer) as estátuas virassem monstros (qualquer um, eu mudo a outifit), e depois que todos fossem mortos um portal surgisse no tile central.

ID das estátuas: 

3705 (Virada para o \/ Sul )
3706 ( Leste >)
3707 ( Norte /\)
3708 ( Oeste <) 


ID da Outfit: (345)

Ot Versão 8.6  :bleh: 

 

 

Agradeço dês de já!  :wow:

Editado por eviltox (veja o histórico de edições)

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

Fazendo...

Lembre-se de criar o monstro com esta outfit já.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

Ok, estarei aguardando. 

 

obs: o monstro já está pronto :D

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites
  • Solução

Desculpe a demora, tive visitas em casa...

Enfim, testei e funcionou perfeitamente.

 

A tag em movements.xml será:

<movevent type="StepIn" actionid="12129" event="script" value="SurvivalStatues.lua"/>

 

SurvivalStatues.lua, na pasta Movements/scripts:

local monster = 'Lizard Sentinel' -- Nome do Monstro que Aparecerá
local gstrg = 12130 -- Não precisa mexer
local effct = 38 -- Efeito nas státuas ao se transformarem
local tempo = 15 -- em segundos para checar se pode reativar as estatuas
local pos = {
[1] = {{x=992, y=1050, z=7}, 3707}, -- Posição, ID da Estátua
[2] = {{x=990, y=1048, z=7}, 3706},
[3] = {{x=990, y=1046, z=7}, 3706},
[4] = {{x=990, y=1044, z=7}, 3706},
[5] = {{x=993, y=1041, z=7}, 3705},
[6] = {{x=997, y=1041, z=7}, 3705},
[7] = {{x=1000, y=1044, z=7}, 3708},
[8] = {{x=1000, y=1046, z=7}, 3708},
[9] = {{x=1000, y=1048, z=7}, 3708},
[10] = {{x=997, y=1050, z=7}, 3707}
}
----------- FIM DAS CONFIGURAÇÕES -----------

function onStepIn(cid, item, position, fromPosition)
    
    if isPlayer(cid) then
        if getGlobalStorageValue(gstrg) < 1 then
        
            for x = 1, #pos do
                doRemoveItem(getTileItemById(pos[x][1], pos[x][2]).uid)
                doSendMagicEffect(pos[x][1], effct)
                doCreateMonster(monster, pos[x][1])
            end
            addEvent(ReAddStatues, tempo * 1000)
            setGlobalStorageValue(gstrg, 1)
        else
            doPlayerSendCancel(cid, "Missão em andamento.")
        end
    end

return true
end

function ReAddStatues()
    if getGlobalStorageValue(gstrg) == 2 then
        for i = 1, #pos do
            doCreateItem(pos[i][2], 1, pos[i][1])
        end
        setGlobalStorageValue(gstrg, 0)
    else
        addEvent(ReAddStatues, tempo * 1000)
    end    
    return true
end

 

Agora vamos em CreatureScripts.xml e registre a tag abaixo:

<event type="kill" name="FinalBattle_Kill" event="script" value="SurvivalStatues.lua"/>

 

E em login.lua, registre a tag abaixo, junto com as do gênero:

registerCreatureEvent(cid, "FinalBattle_Kill")

 

E agora crie o arquivo SurvivalStatues.lua na mesma pasta:

local gstrg = 12130 -- Não precisa mexer
local tempo = 10 -- Tempo em Segundos que o teleport ficará ativo
local posarea = {{x=988, y=1040, z=7}, {x=1004, y=1050, z=7}} -- Área inicial e final da Sala do Evento
local tp = {1387, {x=995, y=1048, z=7}, {x=995, y=1052, z=7}} -- ID, PosCreate, PosDestino
local msgfinal = "Meus parabéns, você completou a missão." -- Mensagem Ao Concluir
local monsters = {"Lizard Sentinel"} -- que serão criados na missão
----------------- FIM DAS CONFIGURAÇÕES -----------------

function onKill(cid, target, lastHit)
    if isMonster(target) then
        if isInArray(monsters, getCreatureName(target)) then
            if getCreatureFinalBattle() > 0 then
                doSendAnimatedText(getThingPos(cid), "restam "..getCreatureFinalBattle()..".", 100)
            else
                doCreateTeleport(tp[1], tp[3], tp[2])
                doPlayerSendTextMessage(cid, 4, msgfinal)
                setGlobalStorageValue(gstrg, 2)
                doSendAnimatedText(getThingPos(cid), "Parabéns.", 205)
                
                addEvent(function ()
                    doRemoveItem(getTileItemById(tp[2], tp[1]).uid)
                end, tempo * 1000)
                
            end
        end
    end
return true
end

function getCreatureFinalBattle()  -- Função que Criei para Checar Se Há Monsters na Área (Ignorando Players e Summons)
local mtab = {}
    for xx = posarea[1].x, posarea[2].x do
        for yy = posarea[1].y, posarea[2].y do
            get_top = getTopCreature({x=xx, y=yy, z=7}).uid
            if get_top > 0 then
                if isMonster(get_top) and not isPlayer(getCreatureMaster(get_top)) then
                    table.insert(mtab, get_top)
                end
            end
        end
    end
local ret1 = #mtab - 1
return ret1
end

 

Lembre-se de configurar tudo no início dos scripts.

 

Volte para dizer como foi.

Boa sorte.

Editado por Adriano SwaTT (veja o histórico de edições)

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

#Edite

 

Então, funcinou perfeitamente, só tem um probleminha, quando você mata qualquer lizard, o portal se abre e diz que você completou a missão '-'

 

Uma pergunta:

local posarea = {{x=10879, y=993, z=7}, {x=1088, y=1000, z=7}} -- Área inicial e final da Sala do Evento

Essas seriam as bordas Cima esquerda e baixo direita né?

Editado por eviltox (veja o histórico de edições)

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

Sim, mas confira se está certo, porque na sua primeira coordenada, X está com 5 números e na segunda apenas 4, cheque se está correto.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

Foi um erro meu kkk, então, tem esses dois bugs:

Quando mata qualquer lizard o portal se abre e diz missão completa( ao invez de só aparecer ao matar todos os 8) 

O script não encerra após aparecer a mensagem e nem ao matar todos os lizards ( aparece missão em andamento, mesmo com outro char) 

Editado por eviltox (veja o histórico de edições)

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

Arrumou o script, as coordenadas do posarea está tudo correto?

Reiniciou o servidor ao arrumar? Pois como se trata de creaturescripts, nem sempre ocorre efeito quando apenas da /reload.

 

Boa sorte.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

Sim, arrumei tudo e deu tudo certo, muito obrigado.  :D

 

Obs: Estou sem Rep+ hoje, amanhã te dou os reps merecidos  :bleh:

 

#Edite 

 

Print: 

5V9sW9B.png

Editado por eviltox (veja o histórico de edições)

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

Que bom que funcionou, fiz com bastante dedicação...

Só que fiz para 10 monsters, porque vi aqueles que estão atrás do GOD também, você removeu do script?

 

Enfim...

Faça bom aproveito.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

Também reputei,porque esse script ficou caprichado,parabéns merecia até um fixo no forum !

Cheguei a pensar nisso..

Vou ver se posto ele sim, claro que se o dono do tópico não ligar, pois fiz especialmente ao pedido do mesmo.

 

Obrigado pelo rep+ e por comentar.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

mt bom script adriano, mas tenho um pequeno desafio pra você se não se importar.. faz um algoritmo que cheque o id da estatua e vire o monstro pra direção que a estátua está virada, assim vai ficar mais real qnd todos os monstros nascerem. 

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

mt bom script adriano, mas tenho um pequeno desafio pra você se não se importar.. faz um algoritmo que cheque o id da estatua e vire o monstro pra direção que a estátua está virada, assim vai ficar mais real qnd todos os monstros nascerem. 

Acho que consigo, só não fiz porque se fosse player que as "ativassem" elas iriam se virar automaticamente em direção ao mesmo em questão de milésimos de segundos...

Mas havia pensado em fazer isso. :)

Editado por Adriano SwaTT (veja o histórico de edições)

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

Eu pensei em pedir isso, mas achei que seria muito mais complicado e lembrei que os monstros iriam virar assim que fosse ativado, através do target. Seja como for, se for rolar uma edição com esse novo algoritmo, vai ficar show  :rolleyes:

Editado por eviltox (veja o histórico de edições)

                                                                                                230x230.jpg

 

Link para o post
Compartilhar em outros sites

Estou um pouco ocupado, trabalhos à entregar ainda hoje..

Aí não posso garantir, mas vou pensar com carinho se faço. :)

Editado por Adriano SwaTT (veja o histórico de edições)

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

O lobão e sua osadia... kkkkk

 

Nas configurações de SurvivalStatues.lua, na pasta Movements/scripts:

local estatuas = {
[id] = 0, --ID DA ESTÁTUA VIRADA AO NORTE
[id] = 2, --ID DA ESTÁTUA VIRADA AO SUL
[id] = 1, --ID DA ESTÁTUA VIRADA AO LESTE
[id] = 3 --ID DA ESTÁTUA VIRADA AO OESTE
}

 

Agora, aí vai a função:

function RotateStatues()
local mtab = {}
    for xx = posarea[1].x, posarea[2].x do
        for yy = posarea[1].y, posarea[2].y do
            get_top = getTopCreature({x=xx, y=yy, z=7}).uid
            if get_top > 0 then
                if isMonster(get_top) and not isPlayer(getCreatureMaster(get_top)) then
                    addEvent(doCreatureSetLookDirection, 200, get_top, estatuas[get_top])
                end
            end
        end
    end
return estatuas[get_top] --CASO QUEIRA SABER O LADO QUE A ESTÁTUA VAI VIRAR FORA DA FUNÇÃO
end

 

(Não testei)

Editado por david0703 (veja o histórico de edições)

Atenciosamente, David Araujo

Meu Conteúdo

 

Fui útil? Gostou? 
Faça uma doação.

 
 
 

"É errando que se erra."

"Gambiarras resolvem instantemente, porém podem complicar em problemas futuros."

"Cada dia vivido é um aprendizado."

Link para o post
Compartilhar em outros sites

muito bom amigo, mas se me permite comentar: vc está usando posarea sem ter colocado isso como parametro e isso limita a função a ficar dentro do callback;
Outra coisa, a graça de um algoritmo é a matemática haha, olha só:

NORTH = 0
EAST = 1
SOUTH = 2
WEST = 3




3705 (Virada para o \/ Sul )
3706 ( Leste >)
3707 ( Norte /\)
3708 ( Oeste <) 

É isso que a gente tá querendo juntar, oque dá pra gente tirar de informação dessas duas coisas?

Bem, a gente sabe que um numero X - 3707 tem que dar 0 pra retornar o norte, logo usaremos 3707 como número X;
Com isso temos o seguinte:
3707 - 3705 = sul (deu certo)
3707 - 3706 = leste (deu certo)
3707 - 3707 = norte (deu certo)
3707 - 3708 = -1 (deu errado).

Então pra arrumar isso a gente pode dizer pro código que a partir de agora -1 vai significar 3, e aí corrigimos o problema x).

Uma forma bem simples de fazer isso é usando if ou operador ternário;

local dir = (3707 - id) >= 0 and (3707 - id) or 3

Sendo id a variavel que vai me indicar o id da estátua que eu to pegando, tendo em vista que eu já tenho esse valor na tabela do adriano e poderia facilmente pegá-lo tb dentro do for que roda as estátuas.

Seu método iria funcionar, mas é bom ver outros modos e pontos de vista pra gente aprender mais :D

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

Sim, o código que vc colocou deixa o script bem menor e profissional.... sem falar que dá aquele toquinho de dificuldade pra ser editado por leigos  :wow:

Atenciosamente, David Araujo

Meu Conteúdo

 

Fui útil? Gostou? 
Faça uma doação.

 
 
 

"É errando que se erra."

"Gambiarras resolvem instantemente, porém podem complicar em problemas futuros."

"Cada dia vivido é um aprendizado."

Link para o post
Compartilhar em outros sites

não precisa necessariamente fazer do meu jeito auheuha aqui não tem certo e errado (contanto que funcione), são apenas versões diferentes de como solucionar um mesmo problema. Mas é sempre bom exercitar lógica ^^
Dependendo da situação, seu jeito seria bem melhor que o meu (pra caso o cara queira editar o sistema e usar algo que tenha estátuas com ids que não sigam esse padrão das versões mais antigas) mas pra esse caso em específico, da maneira que eu coloquei economizaria linhas e facilitaria pra quem iria ler o script. Os leigos não teriam mais que mexer ali, viraria uma parte central do sistema (Core) e as edições necessárias seriam feitas num config externo. Foi só uma idéia, mas gostei que vc participou do desafio haha

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo