Ir para conteúdo

Featured Replies

Postado

Ola amigos do tibiaking, é o seguinte...

estou precisando de ajuda para fazer algo aqui em um projeto que estou desenvolvendo.

Comecei a aprender lua esses dias e sei bem o basicão, mas pelo pouco que vi até agora já consegui adaptar vários scripts e fazer algumas coisas bem bacanas em meu server.

 

porém tem algo que não estou conseguindo de jeito nenhum, e nem estou encontrando um tutorial 100% funcional.

 

é simplesmente uma área em que tera um bosse e nessa área só pderá ir um player por vez. é uma especie de uma miniquest que tou preparando que para ganhar os itens o player precisa duelar x 1 com esse monstro e caso ele derrote o monstro ele ganha um item e é teleportado para o templo, ou ele vai para uma outra sala que tera o bau para pegar o item. 

 

esses detalhes não importam, pois eu consigo fazer algo nessa parte, meu problema maior é somente na questão de fazer com que nessa arena, ou nessa pequena área só possa ir um player por vez, seja através de uma alavanca, de um teleport ou de um npc tanto faz.

 

até tentei utilizar o script do evento fivequest do nosso amigo gabisa00, mas não obtive sucesso.  http://www.tibiaking.com/forum/topic/39375-evento-five-fase-quest/

 

Também encontrei um outro script que adiciona uma storage ao player quando ele puxa a alavanca e retira essa storage quando ele pisa no tp para sair da arena. assim libera a sala para outro player poder entrar.  vou postar aqui para voces verem, pois foi o mais perto que consegui chegar, depois relato o problema que ta ocorrendo nele. 

 

 

ESSE É QUANDO PUCHA A ALAVANCA EM ACTIONS

 

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

   
if getGlobalStorageValue(55554) == -1 then
doTeleportThing(cid, {x=1882, y=2080, z=14})
doSendMagicEffect(getThingPos(cid), 10)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Que comecem os Jogos!")
setGlobalStorageValue(55554, 1)
 
else
doPlayerSendTextMessage(cid, 22, "Existem Players Fazendo a Quest.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
 
return true
end

 

 

ESSE ENTRA NO TP PARA SAIR DA ARENA EM MOVEMENTS

 

function onStepIn(cid, item, fromPosition, itemEx, toPosition)

 
doTeleportThing(cid, {x=1645, y=3196, z=0})
doSendMagicEffect(getThingPos(cid), 10)
setGlobalStorageValue(55554, -1)
return true
end

 

 

Até que esse script tá cumprindo com boa parte do propósito, o problema é que se o player morrer na luta com o monstro não será possível que outro player entre, pois constará que há algum player dentro do local ainda já que ele não limpou a storage ao passar pelo tp de saida.

 

Outro problema também é caso o ot caia ou coisa do tipo, pois também dará conflito com o player que saiu da arena sem ter passado pelo tp que muda a storage.

 

 

pensei em adicionar algo nesse script que faça a mesma coisa que o tp de saida faz.

ou seja, algo que muda a storage do player quando ele morrer para determinado monstro.

algo assim:

 

if player dead for monstertal then

setGlobalStorageValue(55554, -1)

 é lógico que isso é apenas um exemplo para que vocês possam compreender melhor e ver se é possível traduzir isso para a linguagem e me ajudar com esse script.

 

Depois so faltaria encontrar uma solução para quando o server cair ou coisa do tiipo.

 

 

Bom é isso ai, espero ter sido o mais esclarecedor possível e que alguma boa alma possa me ajudar, pois essa será a pricnipal quest do meu ot. desenvolvi várias missões e outras quests que terminarão nessa, portanto espero poder resolver tal problema com a ajuda da galera aqui.

 

E é lógico além de levar meu rep +, pode ter certeza de que terá me feito muito feliz ^^

 

abração a todos

fiquem com Deus.

Resolvido por Wise

Ir para solução
  • Respostas 35
  • Visualizações 2.1k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Seguinte, remova todos os scripts relacionados a essa sua arena, pra evitar possíveis erros. Remova também o monstro da arena pelo RME, não vai ser necessário. Adicione esse script ao arquivo da sua

  • falha minha, aqui estão as funções que faltavam: só colocar elas no começo do script logo abaixo da tabela que deve funcionar perfeito function isOnSameFloor(fromPos, toPos) return fromPos.z == to

  • data/creaturescripts/scripts/Login.lua   tente adicionar isso antes do ultimo return true       if getGlobalStorageValue(cid, 55554) == 1 then         setGlobalStorageValue(cid, 55554, -1)     end

Postado

data/creaturescripts/scripts/Login.lua

 

tente adicionar isso antes do ultimo return true

 

    if getGlobalStorageValue(cid, 55554) == 1 then
        setGlobalStorageValue(cid, 55554, -1)
    end

www.pokemiw.com
24 Horas Online - 1º 2º 3º 4º 5º 6º 7º gerações 100%
 

Postado
  • Autor

opa então quase deu certo, o problema é que para que seja liberada a área e o outro player possa entrar o player que acabou de morrer precisa relogar no ot, do contrário ainda retornar a mensagem de que existe player fazendo a quest.

 

ai caso o player morra e resolva sair do ot continuará esse bug. 

 

mas toma seu rep ai por ter me ajudado até aqui.

 

se souber como corrigir esse erro agora ficarei mais grato ainda.


blz consegui resolver. 

fiz o seguinte

 

em vez de adicionar com login adicionei um script para logout. assim toda vez que o player morrer ou deslogar ele perde a storage.

 

criei um arquivo em creturescripts/scripts com o nome de logou.lua e adicionei isso:

 

function onLogout(cid)

 
 if getGlobalStorageValue(cid, 55554) == 1 then
        setGlobalStorageValue(cid, 55554, -1)
    end
 
return TRUE
end

 e em creaturescripts . xml adicionei 

 

 

 

<event type="logout" name="PlayerLogout" script="logout.lua"/>

 

Muito obrigado pela ajuda parceiro, sua ideia me deu uma outra ideia e um empurrão para encontrar a solução. Agora para ficar perfeito é so eu encontrar uma maneira de adicionar um certo tempo para esse player permanecer dentro dessa arena, evitando que ele largue seu char lá pelo resto da vida e outros players não possam fazer a quest.

 

mas tudo bem isso é o de menos, vou dar uma buscada aqui mo fórum.

Abração!

Postado
function onUse(cid, item, fromPosition, itemEx, toPosition)
 
local mins = 10 -- Minutos que ele ficará na sala
local temple = {x=160, y=54, z=7} -- Posiçao que ele irá ao ser teleportado para fora
 
function onSair(cid)
doTeleportThing(cid,temple)
setPlayerStorageValue(cid,55554,-1)
return true
end  
if getGlobalStorageValue(55554) == -1 then
doTeleportThing(cid, {x=1882, y=2080, z=14})
doPlayerSendTextMessage(cid,27,"Voce tem "..mins.." minuto para terminar arena. Que comecem os Jogos!")
addEvent(function() onSair(cid) end,mins*60*1000)
doSendMagicEffect(getThingPos(cid), 10)
setGlobalStorageValue(55554, 1)
 
else
doPlayerSendTextMessage(cid, 22, "Existem Players Fazendo a Quest.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
 
return true
end

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

www.pokemiw.com
24 Horas Online - 1º 2º 3º 4º 5º 6º 7º gerações 100%
 

Postado

opa então quase deu certo, o problema é que para que seja liberada a área e o outro player possa entrar o player que acabou de morrer precisa relogar no ot, do contrário ainda retornar a mensagem de que existe player fazendo a quest.

 

ai caso o player morra e resolva sair do ot continuará esse bug. 

 

mas toma seu rep ai por ter me ajudado até aqui.

 

se souber como corrigir esse erro agora ficarei mais grato ainda.

blz consegui resolver. 

fiz o seguinte

 

em vez de adicionar com login adicionei um script para logout. assim toda vez que o player morrer ou deslogar ele perde a storage.

 

criei um arquivo em creturescripts/scripts com o nome de logou.lua e adicionei isso:

 e em creaturescripts . xml adicionei 

 

 

Muito obrigado pela ajuda parceiro, sua ideia me deu uma outra ideia e um empurrão para encontrar a solução. Agora para ficar perfeito é so eu encontrar uma maneira de adicionar um certo tempo para esse player permanecer dentro dessa arena, evitando que ele largue seu char lá pelo resto da vida e outros players não possam fazer a quest.

 

mas tudo bem isso é o de menos, vou dar uma buscada aqui mo fórum.

Abração!

Meu caro, isso que você fez fará com que quando QUALQUER player deslogue outro possa entrar na arena. Faça o seguinte:

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
 
local mins = 10 -- Minutos que ele ficará na sala
local temple = {x=160, y=54, z=7} -- Posiçao que ele irá ao ser teleportado para fora
 
function onSair(cid)
doTeleportThing(cid,temple)
setGlobalStorageValue(55554, -1)
return true
end  
if getGlobalStorageValue(55554) == -1 then
doTeleportThing(cid, {x=1882, y=2080, z=14})
doPlayerSendTextMessage(cid,27,"Voce tem "..mins.." minuto para terminar arena. Que comecem os Jogos!")
addEvent(function() onSair(cid) end,mins*60*1000)
doSendMagicEffect(getThingPos(cid), 10)
setGlobalStorageValue(55554, 1)
setPlayerStorageValue(cid, 22038, 1)
 
else
doPlayerSendTextMessage(cid, 22, "Existem Players Fazendo a Quest.")
doSendMagicEffect(getCreaturePosition(cid), 2)
end
 
return true
end

E no script que você criou:

function onLogout(cid)

 
 if getGlobalStorageValue(cid, 55554) == 1 and getPlayerStorageValue(cid, 22038) == 1 then
then
        setGlobalStorageValue(cid, 55554, -1)
        setPlayerStorageValue(cid, 22038, 0)
    end
 
return TRUE
end

Isso deve ser o suficiente.

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

Não se esqueça de dar REP+ para quem te ajudou e caso seja a solução marcar como melhor resposta!

 

NÃO CLIQUE AQUI!

NEM AQUI!

________________________________________________________________________________________________________________________________________________________________________________________________________________________

 

A imaginação é mais importante que o conhecimento.” Albert Einstein

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo