Ir para conteúdo
  • Cadastre-se

(Resolvido)[Pedido] Sistema de Arena.


Ir para solução Resolvido por zipter98,

Posts Recomendados

Olá pessoal do TibiaKing :). To com uma ideia de script para Arena. Se alguém puder fazer script ficaria muito grato. A ideia seria o seguinte:

 

- Um Npc no qual sua função fosse: Teleportar o char para uma posição X mediante a um pagamento X, e apenas 1 player por vez dentro da arena, caso outro fosse entrar, o Npc reportava "Já tem alguém na arena, porfavor espere".

 

- Já no script a ideia seria: Um total de 8 bosses, quando o primeiro morrer aparece uma mensagem (colorida), dizendo : "daqui x segundos, outro boss irá aparecer", ai outro boss nascia e isso repetia até o ultimo boss. Já no ultimo boss assim que o player matasse abriria um Portal que levaria ele para uma posição (X) onde ele ganharia o premio. Apenas depois que o player passasse pelo portal ( e o portal fechasse) a vaga para o próximo player entrar na arena ficaria livre.

 

Obs: Caso essa parte "Apenas depois que o players passasse pelo portal ( e o portal fechasse) a vaga para o próximo players entrar na arena ficaria livre." Fique difícil para scriptar, poderia por para que o ultimo boss desse um item X, pois com esse item eu iria usar como "tickter" para entregar a outro NPC ou o mesmo NPC e ele teleportava o player para a sala no qual terá os prêmios.

 

 

Grato, desde já :)!.

Eu te Ajudei? Então solta aquele REP+ !!

Meus Tutoriais [Tutorial] Bug "Temple position is wrong" (MySql)

Outros:    [Meu Show OFF | Mapa próprio 8.6] 

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

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

OK. Eu fiz bem rapidamente o sistema aqui, talvez haja algum(s) erro(s). data/lib, crie um arquivo com extensão .lua e coloque o seguinte conteúdo: ARENA = {     WAVES = {         [1] = {"monster_n

Ah, isso explica. Você configurou errado. toPos nunca terá valores menores que fromPos.  Provavelmente você inverteu fromPos e toPos. E também deve ser por isso que algumas funções que usei anteriorm

OK. Refiz a parte que checa se a wave foi ou não completa. Tanto a maneira antiga quanto a nova funcionaram aqui. Espero que o mesmo aconteça no seu servidor. Troque sua lib por essa: ARENA = {    

Isso séria estilo uma survive ground?

Varias waves com variedades de monsters, cada wave que vai almentando vai caindo mais monsters fortes ex

Wave 1 = Rat

Wave 2 = Demon .. assim em diante, não é isso?

I helped you ? REP +.

 

Att: Abreu

Link para o post
Compartilhar em outros sites

Opa, tais chegando bem na minha ideia :D. Seria isso mesmo. Só que no caso acredito que iria por uns monstros Editados ( Maior HP e Maiores Atk ) para dar + emoção. Iria aparecendo monstros mais forte, conforme o nivel da arena subisse, assim, como você disse.

Eu te Ajudei? Então solta aquele REP+ !!

Meus Tutoriais [Tutorial] Bug "Temple position is wrong" (MySql)

Outros:    [Meu Show OFF | Mapa próprio 8.6] 

Link para o post
Compartilhar em outros sites

Irei fazer, mas preciso de um tempinho...

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

@Caronte

 

Esperarei o tempo que for necessário, sei que é bronca fazer. Mas só em saber que poderá ser feito já está Otimo :D!. Irei esperar ^^. Obrigado já adiantado  :laugh:

Eu te Ajudei? Então solta aquele REP+ !!

Meus Tutoriais [Tutorial] Bug "Temple position is wrong" (MySql)

Outros:    [Meu Show OFF | Mapa próprio 8.6] 

Link para o post
Compartilhar em outros sites

@Caronte

 

Esperarei o tempo que for necessário, sei que é bronca fazer. Mas só em saber que poderá ser feito já está Otimo :D!. Irei esperar ^^. Obrigado já adiantado  :laugh:

 

 

De nada, estou já desenvolvendo, na verdade, estava desenvolvendo antes do tópico para um outro fim, eu vou fazer do meu jeito, e depois darei uma editadazinha para ficar perfeito para você: :P

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

@Caronte

 

Tranquilo rapaz :D!. Se ficar superficialmente parecido com a ideia que postei ficará bacana! Mas, pode usar sua criatividade rsrsr... acredito que irá ficar massa!, já que é uma ideia fácil de se entender rsrsrs, a bronca é so scriptar :'( rsrsr..

Eu te Ajudei? Então solta aquele REP+ !!

Meus Tutoriais [Tutorial] Bug "Temple position is wrong" (MySql)

Outros:    [Meu Show OFF | Mapa próprio 8.6] 

Link para o post
Compartilhar em outros sites

Um por wave..

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Link para o post
Compartilhar em outros sites

Exato, um por wave. Seria um monstro que eu iria editar ( colocar + Hp e aumentar o atk).

Eu te Ajudei? Então solta aquele REP+ !!

Meus Tutoriais [Tutorial] Bug "Temple position is wrong" (MySql)

Outros:    [Meu Show OFF | Mapa próprio 8.6] 

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

OK. Eu fiz bem rapidamente o sistema aqui, talvez haja algum(s) erro(s).

data/lib, crie um arquivo com extensão .lua e coloque o seguinte conteúdo:

ARENA = {
    WAVES = {
        [1] = {"monster_name", {x = x, y = y, z = z}},     --{nome_do_monstro, {posição_que_vai_nascer}},
        [2] = {"monster_name", {x = x, y = y, z = z}},
        [3] = {"monster_name", {x = x, y = y, z = z}},
        [4] = {"monster_name", {x = x, y = y, z = z}},
        [5] = {"monster_name", {x = x, y = y, z = z}},
        [6] = {"monster_name", {x = x, y = y, z = z}},
        [7] = {"monster_name", {x = x, y = y, z = z}},
        [8] = {"monster_name", {x = x, y = y, z = z}},
    },
    NPC = {
        price = 2000,                                --Preço para entrar na arena.
        position = {x = x, y = y, z = z},            --Para onde o jogador será teleportado ao falar com o NPC.
    },
    TELEPORT = {
        tpId = 1387,                                 --ID do teleporte.
        tpPos = {x = x, y = y, z = z},               --Onde o teleporte será criado, ao matar o último boss.
        tpToPos = {x = x, y = y, z = z},             --Para onde o teleporte levará.
        aid = 1307,
    },
    STORAGES = {
        storage = 90181,
        wave_sto = 90182,
    },
    fromPos = {x = x, y = y, z = z},               --Coordenadas da posição superior esquerda da arena.
    toPos = {x = x, y = y, z = z},                 --Coordenadas da posição inferior direita da arena.
    delay = 15,                                    --Segundos para o boss aparecer.
    level = 100, --Level mínimo.
}
function doWave(cid, wave)
    if not isPlayer(cid) then
        return true
    elseif not ARENA.WAVES[wave] then
        return true
    elseif getPlayerStorageValue(cid, ARENA.STORAGES.storage) > -1 then
        return true
    end
    local monster = ARENA.WAVES[wave][1]
    local pos = ARENA.WAVES[wave][2]
    doPlayerSendTextMessage(cid, 27, "In "..ARENA.delay.." seconds, a boss will spawn. [Wave: "..wave.."]")
    addEvent(function()
        doCreateMonster(monster, pos)
    end, ARENA.delay * 1000)
end
function clearArena()
    for x = ARENA.fromPos.x, ARENA.toPos.x do
        for y = ARENA.fromPos.y, ARENA.toPos.y do
            for z = ARENA.fromPos.z, ARENA.toPos.z do
                local area = {x = x, y = y, z = z}
                local creature = getTopCreature(area).uid
                if isCreature(creature) then   
                    doRemoveCreature(creature)
                end
            end
        end
    end
end
Código do NPC:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
    if(not npcHandler:isFocused(cid)) then
        return false
    end
    local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
    if msgcontains(msg:lower(), "arena") or msgcontains(msg:lower(), "enter") then
        if getPlayerLevel(cid) < ARENA.level then
            selfSay("You do not have enough level ["..ARENA.level.."].", cid)
            talkState[talkUser] = 0
            return true
        elseif getGlobalStorageValue(1000) > -1 then
            selfSay("Someone is at the arena right now, please wait.", cid)
            talkState[talkUser] = 0
            return true
        elseif getPlayerStorageValue(cid, ARENA.STORAGES.storage) > -1 then
            selfSay("You already completed the arena.", cid)
            talkState[talkUser] = 0
            return true
        else
            selfSay("You really want enter in the arena? It will cost you {"..ARENA.NPC.price.."}.", cid)
            talkState[talkUser] = 1
            return true
        end
    elseif msgcontains(msg:lower(), "yes") and talkState[talkUser] == 1 then
        if doPlayerRemoveMoney(cid, ARENA.NPC.price) then
            selfSay("Good luck! ^.^", cid)
            doTeleportThing(cid, ARENA.NPC.position)
            setPlayerStorageValue(cid, ARENA.STORAGES.wave_sto, 1)
            setGlobalStorageValue(1000, 1)
            doWave(cid, 1)
            talkState[talkUser] = 0
            return true
        else
            selfSay("You do not have enough money.", cid)
            talkState[talkUser] = 0
            return true
        end
    elseif msgcontains(msg:lower(), "no") and talkState[talkUser] == 1 then
        selfSay("Ok, then...", cid)
        talkState[talkUser] = 0
        return true
    end       
    return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())    
data/creaturescripts/scripts, crie um arquivo com extensão .lua, nomeie-o killboss.lua, e coloque o seguinte conteúdo:
function onKill(cid, target)
    if isPlayer(cid) and getPlayerStorageValue(cid, ARENA.STORAGES.wave_sto) > -1 then
        local new_wave = getPlayerStorageValue(cid, ARENA.STORAGES.wave_sto) + 1
        if ARENA.WAVES[new_wave] then
            setPlayerStorageValue(cid, ARENA.STORAGES.wave_sto, new_wave)
            doWave(cid, new_wave)
        else
            local tp = doCreateTeleport(ARENA.TELEPORT.tpId, ARENA.TELEPORT.tpToPos, ARENA.TELEPORT.tpPos)
            doItemSetAttribute(tp, "aid", ARENA.TELEPORT.aid)
        end
    end
    return true
end
function onLogout(cid)
    if getTileInfo(getThingPos(cid)).protection and getPlayerStorageValue(cid, ARENA.STORAGES.wave_sto) > -1 then
        return setPlayerStorageValue(cid, ARENA.STORAGES.wave_sto, -1)
    end
    if getPlayerStorageValue(cid, ARENA.STORAGES.wave_sto) > -1 then
        doPlayerSendCancel(cid, "You can't logout now.") 
        return false
    end
    return true
end
function onPrepareDeath(cid)
    if getPlayerStorageValue(cid, ARENA.STORAGES.wave_sto) > -1  then
        setPlayerStorageValue(cid, ARENA.STORAGES.wave_sto, -1)
        setGlobalStorageValue(1000, -1)
        clearArena()
    end
    return true
end
Tags:
<event type="kill" name="killBoss" script="killboss.lua"/>
<event type="logout" name="arenaLogout" event="script" value="killboss.lua"/>
<event type="preparedeath" name="deathBoss" event="script" value="killboss.lua"/>

Não se esqueça de registrar o evento em login.lua:

registerCreatureEvent(cid, "killBoss")
registerCreatureEvent(cid, "deathBoss")
Já em data/movements/scripts, você novamente cria um arquivo com extensão .lua (nome do arquivo: tpremove.lua) e coloca o seguinte código:
function onStepIn(cid, item, position, fromPosition)
    if not isPlayer(cid) then
        return true
    end
    setPlayerStorageValue(cid, ARENA.STORAGES.storage, 1)
    setPlayerStorageValue(cid, ARENA.STORAGES.wave_sto, -1)
    setGlobalStorageValue(1000, -1)
    addEvent(function()
        if getTileItemById(position, ARENA.TELEPORT.tpId).uid > 0 then
            doRemoveItem(getTileItemById(position, ARENA.TELEPORT.tpId).uid, 1)
        end
    end, 50)
    return true
end
Tag:
<movevent type="StepIn" actionid="1307" event="script" value="tpremove.lua"/>
Editado por zipter98 (veja o histórico de edições)

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Cara independentemente , deixou meu Rep+ , seu esforço já é de grande importância. Irei testar e qualquer bronca te aviso. Vlw Brother.

 

Só uma duvida quando estava lendo seu script. Nessa parte:

 

 

 

toPos = {x = x, y = y, z = z},               --Coordenadas da posição superior esquerda da arena.
    fromPos = {x = x, y = y, z = z},             --Coordenadas da posição inferior direita da arena.

 

Não entendi bem, essa superior esquerda e direita :|

Eu te Ajudei? Então solta aquele REP+ !!

Meus Tutoriais [Tutorial] Bug "Temple position is wrong" (MySql)

Outros:    [Meu Show OFF | Mapa próprio 8.6] 

Link para o post
Compartilhar em outros sites

Antes de tudo, sua arena deve ser quadrada/retangular. As posições que devem ser configuradas, são, respectivamente, os cantos superior (cima) esquerdo (<) e inferior (baixo) direito (>).

Uma imagem demonstrativa:

2z754lv.png

Os círculos vermelhos representam as posições que mencionei.

Imagem retirada do tópico referente ao sistema Blood Castle.

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

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Opa, brother!. Configurei conforme suas instruções. Porém deu esses Erros na Distro:

 

 

21btd87.png

Eu te Ajudei? Então solta aquele REP+ !!

Meus Tutoriais [Tutorial] Bug "Temple position is wrong" (MySql)

Outros:    [Meu Show OFF | Mapa próprio 8.6] 

Link para o post
Compartilhar em outros sites

Nada rapaz, isso acontece rsrsr.. O erro da lib concertou, porém, quando falo "hi" pro Npc, aparece esse erro na Distro:

 

 

b8pwrp.png

Eu te Ajudei? Então solta aquele REP+ !!

Meus Tutoriais [Tutorial] Bug "Temple position is wrong" (MySql)

Outros:    [Meu Show OFF | Mapa próprio 8.6] 

Link para o post
Compartilhar em outros sites

Tranquilo rapaz :). Ta ai o xml :

 

 

<npc name="Guarda Jullius" script="data/npc/scripts/guarda.lua" walkinterval="2000" floorchange="0" access="5" level="1" maglevel="1">

<health now="150" max="150"/>
<look type="325" head="0" body="21" legs="60" feet="114" addons="3" corpse="2212"/>
<parameters>
<parameter key="message_greet" value="Ola |PLAYERNAME|. Voce deseja ir para {Arena}?." />
</parameters>
</npc>

 

Vlwzão pela força que tais dando  :D

Eu te Ajudei? Então solta aquele REP+ !!

Meus Tutoriais [Tutorial] Bug "Temple position is wrong" (MySql)

Outros:    [Meu Show OFF | Mapa próprio 8.6] 

Link para o post
Compartilhar em outros sites

Aparentemente, é problema do seu servidor mesmo. Se possível, poste um código funcional de algum NPC (um que não venda items pela 'janelinha') do seu servidor, para que eu possa reescrever o script do meu NPC.

PS: O arquivo que me refiro é um de extensão .lua, não XML.

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

não respondo pms solicitando suporte em programação/scripting

Link para o post
Compartilhar em outros sites

Aparentemente, é problema do seu servidor mesmo. Se possível, poste um código funcional de algum NPC (um que não venda items pela 'janelinha') do seu servidor, para que eu possa reescrever o script do meu NPC.

PS: O arquivo que me refiro é um de extensão .lua, não XML.

Eita rapaz, é vdd.. Hojé mudei minha distro para TFS 0.4. Fiquei o dia todo retirando os bugs. E agora me aparece esses dos "npc's" :\. Será pelo fato que é uma leitura diferente? (O engraçado que não apareceu na distro o erro, apenas agora quando falei "hi").

um .lua de um npc (sem ser vender):

 

local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end

function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end

function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end

function onThink() npcHandler:onThink() end

local node1 = keywordHandler:addKeyword({'promot'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Eu posso lhe conceder promotion por 20000 gold coins. Voce quer sua promotion?'})

node1:addChildKeyword({'yes'}, StdModule.promotePlayer, {npcHandler = npcHandler, cost = 20000, premium = true, level = 20, promotion = 1, text = 'Parabens! voce foi promovido.'})

node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Tudo bem, volte quando estiver pronto.', reset = true})

npcHandler:addModule(FocusModule:new())

Obs: Acredito que mesmo dando esse script não ira te ajudar, ja que a distro ta dando erro em outros npc's também :\.

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

Eu te Ajudei? Então solta aquele REP+ !!

Meus Tutoriais [Tutorial] Bug "Temple position is wrong" (MySql)

Outros:    [Meu Show OFF | Mapa próprio 8.6] 

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