Ir para conteúdo
  • Cadastre-se

(Resolvido)Arena Que Só Pode Haver Um Player Por Vez. Ajude-me e Torne Meu Projeto Mais Perto De Ser Inaugurado


Ir para solução Resolvido por Wise,

Posts Recomendados

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

 

  Citar

 

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
Mostrar mais  

 

 

ESSE ENTRA NO TP PARA SAIR DA ARENA EM MOVEMENTS

  Citar

 

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
Mostrar mais  

 

 

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:

  Citar

 

if player dead for monstertal then

setGlobalStorageValue(55554, -1)

Mostrar mais  

 é 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.

Link para o post
Compartilhar em outros sites
  • Respostas 35
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

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 alavanca (action script): -- Coded by Suicide local tab = {     boss = "Infernatil", -- "Monster Name"     storages = {27771, 27772}, -- {globalstorage, storage}     apos = {x=1882, y=2080, z=14}, -- pos x, y, z que o player será teleportado ao puxar a alavanca     rangex = {x=123, y=456, z=7}, -

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 == toPos.z and true or false end function isEven(arg) return arg % 2 == 0 and true or false end Edit: essas funções fazem parte de uma lib nova que to fazendo pra postar em breve, não era pra elas terem vazado tão cedo e por isso não tão da maneira correta como deveriam mas em todo caso eu confio no e

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

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%
 

Link para o post
Compartilhar em outros sites

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:

  Citar

 

function onLogout(cid)

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

 e em creaturescripts . xml adicionei 

 

  Citar

 

 

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

 

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!

Link para o post
Compartilhar em outros sites
  Em 12/11/2014 em 02:50, maiconmnt disse:
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
Mostrar mais  
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%
 

Link para o post
Compartilhar em outros sites
  Em 12/11/2014 em 02:50, maiconmnt disse:

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!

Expand   Mostrar mais  

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

 

  Mostrar conteúdo oculto
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:

  Mostrar conteúdo oculto

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

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.

  • Conteúdo Similar

    • Por 10victory10
      Ola amigos! Bem... eu tou com um grave problema no meu Arena Svargrond Quest!
       
      Obs.: Não vou sacanear quem me ajudar! Eu logarei todos os dias pra reputa-lo até alcançar os 15 dias!
       
       - O problema é que eu até consigo comprar a permissão pelo NPC Halvar e passo pela porta, mas quando entro no teleport de Action ID: 42300 o personagem apenas fica em cima do teleport e aparece a seguinte mensagem de erro no distro:
       

       
       Obs.: Se eu sumonar uma das criaturas da primeira room da arena eu consigo fazer toda a quest, pegar o prêmio e o goblet!
       
       - Ou seja, o problema está apenas no teleport de Action ID: 42300 (Teleport responsável para iniciar a arena).
       
      - E como o erro aponta para o arquivo arenaroom.lua lá vai ele:
       



       
      |
      |
      '--> Distro: TFS 0.3.7.0. [9.60].
       
       
       - Eu já chequei e os 3 teleports para iniciar a arena estão com o Action ID: 42300! O que pode ser então?
  • Estatísticas dos Fóruns

    96842
    Tópicos
    519603
    Posts



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo