Ir para conteúdo

War Arena System.


Posts Recomendados

Todos os scripts foram testados em um ot 8.6

 

Bem o script é auto-explicativo, e ainda tem um video do sistema, acho que nao preciso explicar o que faz ne?

 

AGORA EM MOD, MUITO MAIS PRATICO DE INSTALAR. SE FOR USAR O MOD VA ATE O FINAL DO POST, É EXATAMENTE IGUAL A VERSAO NORMAL, SO QUE MAIS PRATICO. FUNCIONA DO MESMO JEITO.

 

Video:

obs: Veja em fullscreen para ver melhor as msgs que retornam.

 

Vá em data/lib e adicione esse script.lua com o nome de WarArenaLib:

 -- [[ Area and Positions Infos ]] --
areaplayersteam = {
{1,1,1,1},
{1,1,1,1},
{1,1,1,1},
{1,1,1,1},
{1,1,1,1}
}
areateam1ext = {x=80, y=305, z=7} -- Ponta superior esquerda da area do time um
areateam2ext = {x=87, y=305, z=7} -- Ponta superior esquerda da area do time dois
leaderteam1pos = {x=83, y=307, z=7, stackpos=255} -- Posição do lider do time um (que puxara a alavanca)
leaderteam2pos = {x=87, y=307, z=7, stackpos=255} -- Posição do lider do time dois (que puxara a alavanca)
newplayersposteam1 = {x=67, y=300, z=7} -- Posição para onde os players do time um serao teleportados
newplayersposteam2 = {x=67, y=330, z=7} -- Posição para onde os players do time dois serao teleportados
team1leverpos = {x=84, y=307, z=7, stackpos=1} -- Posição da alavanca que o lider do time um puxara
team2leverpos = {x=86, y=307, z=7, stackpos=1} -- Posição da alavanca que o lider do time dois puxara
leverafter, leverbefore = 9825, 9826 -- Ids das alavancas antes de puxadas e depois, consecutivamente (9825 = antes; 9826 = depois)
posbenterteam1 = {x=78, y=307, z=7} -- Posiçao do sqm antes de entrar na arena do time 1
posbenterteam2 = {x=92, y=307, z=7} -- Posiçao do sqm antes de entrar na arena do time 2
backteampos = {x=77, y=307, z=7}

-- [[ Storage Infos ]] --
team1leverstorage = 123497 -- Storage que sera usado quando puxarem a alavanca do time 1
team2leverstorage = 123498 -- Storage que sera usado quando puxarem a alavanca do time 2
haveteaminarena = 123499 -- Storage que sera usado para ve se tem algum time lutando na arena
storageteam1death = 123500 -- Storage usado para ver quantos morreram do time 1
storageteam2death = 123501 -- Storage usado para ver quantos morreram do time 2
storageteam1 = 123502 -- Storage usado para ver quantas pessoas entraram na arena no time 1
storageteam2 = 123503 -- Storage usado para ver quantas pessoas entraram na arena no time 2
storageleader1 = 123504 -- Storage onde ficara guardado o uid do lider do time 1
storageleader2 = 123505 -- Storage onde ficara guardado o uid do lider do time 2
storageplayersteam1 = 123506 -- Storage que todos os players do team 1 iram ter.
storageplatersteam2 = 123507 -- Storage que todos os players do team 2 iram ter.

-- [[ Player Infos ]] --
needlevelarena = 20 -- Level que os outros jogadores sem ser o lider teram que ter.
leaderlevel = 4000 -- Level que o lider tera que ter.
onlyguildwars = true -- Se os membros de um time tem que ser da mesma guild do lider. (Nesse caso somente o lider da guild podera puxar a alavanca.)
needplayers = 2 -- Quantidade de players que cada time tem que ter.

-- [[ Functions ]] --

function getUidsFromArea(firstpos, area)
   local result = {}
   for i,x in pairs(area) do
       for s,z in pairs(x) do
           if isPlayer(getThingFromPos({x=firstpos.x+s-1, y=firstpos.y+i-1, z=firstpos.z, stackpos=255}).uid) then
               table.insert(result, getThingFromPos({x=firstpos.x+s-1, y=firstpos.y+i-1, z=firstpos.z, stackpos=255}).uid)
           end
       end
   end
   return result
end

function teleportUidsToPos(uids, pos)
   for i,x in pairs(uids) do
       doTeleportThing(x, pos)
   end
end

function isAllUidsSameGuild(uids, guildid)
   for i,x in pairs(uids) do
       if not (getPlayerGuildId(x) == guildid) then
           return false
       end
   end
   return true
end

function isAllUidsLevel(uids, level)
   for i,x in pairs(uids) do
       if not (getPlayerLevel(x) >= level) then
           return false
       end
   end
   return true
end

function haveQuantPlayersInArea(firstpos, area, quant)
   local result = 0
   for i,x in pairs(area) do
       for s,z in pairs(x) do
           if isPlayer(getThingFromPos({x=firstpos.x+s-1, y=firstpos.y+i-1, z=firstpos.z, stackpos=255}).uid) then
               result = result+1
           end
       end
   end
   return result >= quant
end  

function addStorageToUids(uids, storage, value)
   for i,x in pairs(uids) do
       setPlayerStorageValue(x, storage, value)
   end
end

function checkPoses(pos1, pos2)
   if pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z then
       return true
   end
   return false
end

function startArena()
   setGlobalStorageValue(storageleader1, getThingFromPos(leaderteam1pos).uid)
   setGlobalStorageValue(storageleader2, getThingFromPos(leaderteam2pos).uid)
   addStorageToUids(team1uids, storageplayersteam1, 1)
   addStorageToUids(team2uids, storageplayersteam2, 1)
   teleportUidsToPos(team1uids, newplayersposteam1)
   teleportUidsToPos(team2uids, newplayersposteam2)
   setGlobalStorageValue(storageteam1, #team1uids)
   registerCreatureEventUids(team1uids, "DeathTeam1")
   registerCreatureEventUids(team2uids, "DeathTeam2")
   setGlobalStorageValue(storageteam2, #team2uids)
   setGlobalStorageValue(haveteaminarena, 1)
   setGlobalStorageValue(team1leverstorage, 0)
   setGlobalStorageValue(team2leverstorage, 0)
   doTransformItem(getThingFromPos(team1leverpos).uid, leverafter)
   doTransformItem(getThingFromPos(team2leverpos).uid, leverafter)
end

function haveTeamInArena()
   return getGlobalStorageValue(haveteaminarena) == 1 and true or false
end

function isSqmFromArea(firstpos, area, sqmpos)
   for i,x in pairs(area) do
       for s,z in pairs(x) do
           if sqmpos.x == firstpos.x+s-1 and sqmpos.y == firstpos.y+i-1 and sqmpos.z == firstpos.z then
               return true
           end
       end
   end
return false
end

function registerCreatureEventUids(uids, event)
   for i,x in pairs(uids) do
       registerCreatureEvent(x, event)
   end
end

 

Agora vá em data/actions/scripts e adicione um script.lua com o nome de WarArenaLever:

function onUse(cid, item, fromPosition, itemEx, toPosition)
   team1uids = getUidsFromArea(areateam1ext, areaplayersteam)
   team2uids = getUidsFromArea(areateam2ext, areaplayersteam)
   if haveTeamInArena() then
       return doPlayerSendCancel(cid, "Already have a team in arena.")
   end
   if checkPoses(toPosition, team1leverpos) then
       if checkPoses(getCreaturePosition(cid), leaderteam1pos) then
           if getGlobalStorageValue(team1leverstorage) == 1 then
               setGlobalStorageValue(team1leverstorage, 0)
               return doTransformItem(getThingFromPos(team1leverpos).uid, leverafter)
           end
           if onlyguildwars and getPlayerGuildLevel(cid) < 3 then
               return doPlayerSendCancel(cid, "You need to be the leader of your guild.")
           end
           if onlyguildwars and not isAllUidsSameGuild(team1uids, getPlayerGuildId(cid)) then
               return doPlayerSendCancel(cid, "All of your team need to be in your guild.")
           end             
           if not isAllUidsLevel(team1uids, needlevelarena) then
               return doPlayerSendCancel(cid, "All of your team need to be level " .. needlevelarena .. " or more.")
           end
           if getPlayerLevel(cid) < leaderlevel then
               return doPlayerSendCancel(cid, "You, the leader of the team, need to be level " .. leaderlevel .. " or more.")
           end
           if not haveQuantPlayersInArea(areateam1ext, areaplayersteam, needplayers) then
               return doPlayerSendCancel(cid, "Your team need " .. tostring(needplayers) .. " players.")
           end

           setGlobalStorageValue(team1leverstorage, 1)
           doTransformItem(getThingFromPos(team1leverpos).uid, leverbefore)
           if getGlobalStorageValue(team2leverstorage) >= 1 then
               startArena()
           end
       else
           doPlayerSendCancel(cid, "You must be the leader of the team to pull the lever.")
       end
   elseif checkPoses(toPosition, team2leverpos) then
       if checkPoses(getCreaturePosition(cid), leaderteam2pos) then
           if getGlobalStorageValue(team2leverstorage) == 1 then
               setGlobalStorageValue(team2leverstorage, 0)
               return doTransformItem(getThingFromPos(team2leverpos).uid, leverafter)
           end
           if onlyguildwars and getPlayerGuildLevel(cid) < 3 then
               return doPlayerSendCancel(cid, "You need to be the leader of your guild.")
           end
           if onlyguildwars and not isAllUidsSameGuild(team2uids, getPlayerGuildId(cid)) then
               return doPlayerSendCancel(cid, "All of your team need to be in your guild.")
           end              
           if not isAllUidsLevel(team2uids, needlevelarena) then
               return doPlayerSendCancel(cid, "All of your team need to be level " .. needlevelarena .. " or more.")
           end
           if getPlayerLevel(cid) < leaderlevel then
               return doPlayerSendCancel(cid, "You, the leader of the team, need to be level " .. leaderlevel .. " or more.")
           end
           if not haveQuantPlayersInArea(areateam2ext, areaplayersteam, needplayers) then
               return doPlayerSendCancel(cid, "Your team need " .. tostring(needplayers) .. " players.")
           end

           setGlobalStorageValue(team2leverstorage, 1)
           doTransformItem(getThingFromPos(team2leverpos).uid, leverbefore) 
           if getGlobalStorageValue(team1leverstorage) >= 1 then
               startArena()
           end
       else
           doPlayerSendCancel(cid, "You must be the leader of the team to pull the lever.")
       end
   end
return TRUE
end

 

E em actions.xml bote essa linha:

<action actionid="12349" event="script" value="WarArenaLever.lua"/>

 

Agora vá em data/creaturescripts/scripts e adicione dois scripts.lua com esses nomes:

 

WarArenaDeathTeam1:

function onDeath(cid)
   setPlayerStorageValue(cid, storageplayersteam1, 0)   
   setGlobalStorageValue(storageteam1death, getGlobalStorageValue(storageteam1death) >= 0 and getGlobalStorageValue(storageteam1death)+1 or 1)
   if getGlobalStorageValue(storageteam1death) >= getGlobalStorageValue(storageteam1) then
       if onlyguildwars then
           doBroadcastMessage("The Team 2 won the war, guild " .. getPlayerGuildName(getGlobalStorageValue(storageleader2)) .. ".")
       else
           doBroadcastMessage("The Team 2 won the war, team leader name is " .. getCreatureName(getGlobalStorageValue(storageleader2)) .. ".")
       end
       setGlobalStorageValue(storageteam1death, 0)
       setGlobalStorageValue(storageteam2death, 0)
       setGlobalStorageValue(haveteaminarena, 0)
   end 
   return TRUE 
end

 

WarArenaDeathTeam2:

function onDeath(cid)    
   setPlayerStorageValue(cid, storageplayersteam2, 0)  
   setGlobalStorageValue(storageteam2death, getGlobalStorageValue(storageteam2death) >= 0 and getGlobalStorageValue(storageteam2death)+1 or 1)
   if getGlobalStorageValue(storageteam2death) >= getGlobalStorageValue(storageteam2) then
       if onlyguildwars then
           doBroadcastMessage("The Team 1 won the war, guild " .. getPlayerGuildName(getGlobalStorageValue(storageleader1)) .. ".")
       else
           doBroadcastMessage("The Team 1 won the war, team leader name is " .. getCreatureName(getGlobalStorageValue(storageleader1)) .. ".")
       end
       setGlobalStorageValue(storageteam1death, 0)
       setGlobalStorageValue(storageteam2death, 0)
       setGlobalStorageValue(haveteaminarena, 0)
   end
   return TRUE 
end

 

Agora abra o creaturescripts.xml e adicione essas linhas:

<event type="death" name="DeathTeam1" event="script" value="WarArenaDeathTeam1.lua"/> 
<event type="death" name="DeathTeam2" event="script" value="WarArenaDeathTeam2.lua"/> 

 

Agora vá em data/movements/scripts e adicione tres scripts.lua com esses nomes:

 

WarArenaMovement1:

function onStepOut(cid, item, position, fromPosition)
   local team = (fromPosition.x == leaderteam1pos.x and fromPosition.y == leaderteam1pos.y and fromPosition.z == leaderteam1pos.z) and "team1" or (fromPosition.x == leaderteam2pos.x and fromPosition.y == leaderteam2pos.y and fromPosition.z == leaderteam2pos.z) and "team2"
   if team == "team1" then
       if getGlobalStorageValue(team1leverstorage) == 1 then
           setGlobalStorageValue(team1leverstorage, 0)
           doTransformItem(getThingFromPos(team1leverpos).uid, leverafter)
       end
   elseif team == "team2" then
       if getGlobalStorageValue(team2leverstorage) == 1 then
           setGlobalStorageValue(team2leverstorage, 0)
           doTransformItem(getThingFromPos(team2leverpos).uid, leverafter)
       end 
   end
end

 

WarArenaMovement2:

function onStepIn(cid, item, position, fromPosition)
   local team = isSqmFromArea(areateam1ext, areaplayersteam, fromPosition) and "team1" or isSqmFromArea(areateam2ext, areaplayersteam, fromPosition) and "team2"
   if team == "team1" then
       if getGlobalStorageValue(team1leverstorage) == 1 then
           if not haveQuantPlayersInArea(areateam1ext, areaplayersteam, needplayers) then
               setGlobalStorageValue(team1leverstorage, 0)
               doTransformItem(getThingFromPos(team1leverpos).uid, leverafter)
           end
       end
   elseif team == "team2" then
       if getGlobalStorageValue(team2leverstorage) == 1 then
           if not haveQuantPlayersInArea(areateam2ext, areaplayersteam, needplayers) then
               setGlobalStorageValue(team2leverstorage, 0)
               doTransformItem(getThingFromPos(team2leverpos).uid, leverafter)
           end
       end
   end
   if getGlobalStorageValue(team1leverstorage) == 1 then
       if checkPoses(fromPosition, posbenterteam1) then
           doTeleportThing(cid, fromPosition)
           return doPlayerSendCancel(cid, "You can't enter now.")
       end
   elseif getGlobalStorageValue(team2leverstorage) == 1 then
       if checkPoses(fromPosition, posbenterteam2) then
           doTeleportThing(cid, fromPosition)
           return doPlayerSendCancel(cid, "You can't enter now.")
       end
   end            
end

 

WarArenaMovement3:

function onStepIn(cid, item, position, fromPosition)
   if getPlayerStorageValue(cid, storageplayersteam1) >= 1 then
       setPlayerStorageValue(cid, storageplayersteam1, 0)  
       doTeleportThing(cid, posbenterteam1)  
       setGlobalStorageValue(storageteam1death, getGlobalStorageValue(storageteam1death) >= 0 and getGlobalStorageValue(storageteam1death)+1 or 1)
       if getGlobalStorageValue(haveteaminarena) >=  1 then
           if getGlobalStorageValue(storageteam1death) >= getGlobalStorageValue(storageteam1) then
               if onlyguildwars then
                   doBroadcastMessage("The Team 2 won the war, guild " .. getPlayerGuildName(getGlobalStorageValue(storageleader2)) .. ".")
               else
                   doBroadcastMessage("The Team 2 won the war, team leader name is " .. getCreatureName(getGlobalStorageValue(storageleader2)) .. ".")
               end
               setGlobalStorageValue(storageteam1death, 0)
               setGlobalStorageValue(storageteam2death, 0)
               setGlobalStorageValue(haveteaminarena, 0)
           end 
       end
   elseif getPlayerStorageValue(cid, storageplayersteam2) >= 1 then
   setPlayerStorageValue(cid, storageplayersteam2, 0)  
       doTeleportThing(cid, posbenterteam2)
       setGlobalStorageValue(storageteam2death, getGlobalStorageValue(storageteam2death) >= 0 and getGlobalStorageValue(storageteam2death)+1 or 1)
       if getGlobalStorageValue(haveteaminarena) >=  1 then
           if getGlobalStorageValue(storageteam2death) >= getGlobalStorageValue(storageteam2) then
               if onlyguildwars then
                   doBroadcastMessage("The Team 1 won the war, guild " .. getPlayerGuildName(getGlobalStorageValue(storageleader1)) .. ".")
               else
                   doBroadcastMessage("The Team 1 won the war, team leader name is " .. getCreatureName(getGlobalStorageValue(storageleader1)) .. ".")
               end
               setGlobalStorageValue(storageteam1death, 0)
               setGlobalStorageValue(storageteam2death, 0)
               setGlobalStorageValue(haveteaminarena, 0)
           end
       end
   end
   return TRUE             
end

 

E adicione essas linhas em movements.xml:

    <movevent type="StepOut" actionid="12350" event="script" value="WarArenaMovement1.lua"/>
   <movevent type="StepIn" actionid="12351" event="script" value="WarArenaMovement2.lua"/>
   <movevent type="StepIn" actionid="12352" event="script" value="WarArenaMovement3.lua"/>

 

 

Pronto acabou rairiaria.

 

Adicionando os Actions IDS:

Nas 2 alavancas, adicione o actionid 12349.

Nos 2 sqms que os players vao estar antes de entrar na arena adicione o actionid 12351.

Nos 2 quadrados aonde os lideres irao ficar (na frente da alavanca) bote o actionid 12350.

No sqm de sair da arena bote o actionid 12352.

 

NA AREA DOS TIMES E NA ARENA, BOTE PELO MAP EDITOR PARA NAO PODER LOGAR. (Se voce nao fizer isso pode haver bugs.)

 

Bem, se voce souber ler o script da lib, vai saber configura-lo para seu otserver.

 

 

Versão MOD: (Abra o spoiler)

 

 

 

Vá na pasta mods e adicione um arquivo.xml com o nome de WarArenaSystem.xml e adicione isso:

<?xml version="1.0" encoding="UTF-8"?>
<mod name="WarArenaSystem" enabled="yes" author="MatheusMkalo" forum="XTibia.com">

<!-- WarArenaLib.lua -->
<config name="WarLib"><![CDATA[
-- [[ Area and Positions Infos ]] --
areaplayersteam = {
{1,1,1,1},
{1,1,1,1},
{1,1,1,1},
{1,1,1,1},
{1,1,1,1}
}
areateam1ext = {x=80, y=305, z=7} -- Ponta superior esquerda da area do time um
areateam2ext = {x=87, y=305, z=7} -- Ponta superior esquerda da area do time dois
leaderteam1pos = {x=83, y=307, z=7, stackpos=255} -- Posicao do lider do time um (que puxara a alavanca)
leaderteam2pos = {x=87, y=307, z=7, stackpos=255} -- Posicao do lider do time dois (que puxara a alavanca)
newplayersposteam1 = {x=67, y=300, z=7} -- Posicao para onde os players do time um serao teleportados
newplayersposteam2 = {x=67, y=330, z=7} -- Posicao para onde os players do time dois serao teleportados
team1leverpos = {x=84, y=307, z=7, stackpos=1} -- Posicao da alavanca que o lider do time um puxara
team2leverpos = {x=86, y=307, z=7, stackpos=1} -- Posicao da alavanca que o lider do time dois puxara
leverafter, leverbefore = 9825, 9826 -- Ids das alavancas antes de puxadas e depois, consecutivamente (9825 = antes; 9826 = depois)
posbenterteam1 = {x=78, y=307, z=7} -- Posicao do sqm antes de entrar na arena do time 1
posbenterteam2 = {x=92, y=307, z=7} -- Posicao do sqm antes de entrar na arena do time 2
backteampos = {x=77, y=307, z=7}

-- [[ Storage Infos ]] --
team1leverstorage = 123497 -- Storage que sera usado quando puxarem a alavanca do time 1
team2leverstorage = 123498 -- Storage que sera usado quando puxarem a alavanca do time 2
haveteaminarena = 123499 -- Storage que sera usado para ve se tem algum time lutando na arena
storageteam1death = 123500 -- Storage usado para ver quantos morreram do time 1
storageteam2death = 123501 -- Storage usado para ver quantos morreram do time 2
storageteam1 = 123502 -- Storage usado para ver quantas pessoas entraram na arena no time 1
storageteam2 = 123503 -- Storage usado para ver quantas pessoas entraram na arena no time 2
storageleader1 = 123504 -- Storage onde ficara guardado o uid do lider do time 1
storageleader2 = 123505 -- Storage onde ficara guardado o uid do lider do time 2
storageplayersteam1 = 123506 -- Storage que todos os players do team 1 iram ter.
storageplatersteam2 = 123507 -- Storage que todos os players do team 2 iram ter.

-- [[ Player Infos ]] --
needlevelarena = 20 -- Level que os outros jogadores sem ser o lider teram que ter.
leaderlevel = 4000 -- Level que o lider tera que ter.
onlyguildwars = true -- Se os membros de um time tem que ser da mesma guild do lider. (Nesse caso somente o lider da guild podera puxar a alavanca.)
needplayers = 2 -- Quantidade de players que cada time tem que ter.

-- [[ Functions ]] --

function getUidsFromArea(firstpos, area)
   local result = {}
   for i,x in pairs(area) do
       for s,z in pairs(x) do
           if isPlayer(getThingFromPos({x=firstpos.x+s-1, y=firstpos.y+i-1, z=firstpos.z, stackpos=255}).uid) then
               table.insert(result, getThingFromPos({x=firstpos.x+s-1, y=firstpos.y+i-1, z=firstpos.z, stackpos=255}).uid)
           end
       end
   end
   return result
end

function teleportUidsToPos(uids, pos)
   for i,x in pairs(uids) do
       doTeleportThing(x, pos)
   end
end

function isAllUidsSameGuild(uids, guildid)
   for i,x in pairs(uids) do
       if not (getPlayerGuildId(x) == guildid) then
           return false
       end
   end
   return true
end

function isAllUidsLevel(uids, level)
   for i,x in pairs(uids) do
       if not (getPlayerLevel(x) >= level) then
           return false
       end
   end
   return true
end

function haveQuantPlayersInArea(firstpos, area, quant)
   local result = 0
   for i,x in pairs(area) do
       for s,z in pairs(x) do
           if isPlayer(getThingFromPos({x=firstpos.x+s-1, y=firstpos.y+i-1, z=firstpos.z, stackpos=255}).uid) then
               result = result+1
           end
       end
   end
   return result >= quant
end  

function addStorageToUids(uids, storage, value)
   for i,x in pairs(uids) do
       setPlayerStorageValue(x, storage, value)
   end
end

function checkPoses(pos1, pos2)
   if pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z then
       return true
   end
   return false
end

function startArena()
   setGlobalStorageValue(storageleader1, getThingFromPos(leaderteam1pos).uid)
   setGlobalStorageValue(storageleader2, getThingFromPos(leaderteam2pos).uid)
   addStorageToUids(team1uids, storageplayersteam1, 1)
   addStorageToUids(team2uids, storageplayersteam2, 1)
   teleportUidsToPos(team1uids, newplayersposteam1)
   teleportUidsToPos(team2uids, newplayersposteam2)
   setGlobalStorageValue(storageteam1, #team1uids)
   registerCreatureEventUids(team1uids, "DeathTeam1")
   registerCreatureEventUids(team2uids, "DeathTeam2")
   setGlobalStorageValue(storageteam2, #team2uids)
   setGlobalStorageValue(haveteaminarena, 1)
   setGlobalStorageValue(team1leverstorage, 0)
   setGlobalStorageValue(team2leverstorage, 0)
   doTransformItem(getThingFromPos(team1leverpos).uid, leverafter)
   doTransformItem(getThingFromPos(team2leverpos).uid, leverafter)
end

function haveTeamInArena()
   return getGlobalStorageValue(haveteaminarena) == 1 and true or false
end

function isSqmFromArea(firstpos, area, sqmpos)
   for i,x in pairs(area) do
       for s,z in pairs(x) do
           if sqmpos.x == firstpos.x+s-1 and sqmpos.y == firstpos.y+i-1 and sqmpos.z == firstpos.z then
               return true
           end
       end
   end
return false
end

function registerCreatureEventUids(uids, event)
   for i,x in pairs(uids) do
       registerCreatureEvent(x, event)
   end
end
]]></config>

<!-- WarArenaLever.lua -->
<action actionid="12349" event="script"><![CDATA[
domodlib('WarLib')
   team1uids = getUidsFromArea(areateam1ext, areaplayersteam)
   team2uids = getUidsFromArea(areateam2ext, areaplayersteam)
   if haveTeamInArena() then
       return doPlayerSendCancel(cid, "Already have a team in arena.")
   end
   if checkPoses(toPosition, team1leverpos) then
       if checkPoses(getCreaturePosition(cid), leaderteam1pos) then
           if getGlobalStorageValue(team1leverstorage) == 1 then
               setGlobalStorageValue(team1leverstorage, 0)
               return doTransformItem(getThingFromPos(team1leverpos).uid, leverafter)
           end
           if onlyguildwars and getPlayerGuildLevel(cid) < 3 then
               return doPlayerSendCancel(cid, "You need to be the leader of your guild.")
           end
           if onlyguildwars and not isAllUidsSameGuild(team1uids, getPlayerGuildId(cid)) then
               return doPlayerSendCancel(cid, "All of your team need to be in your guild.")
           end             
           if not isAllUidsLevel(team1uids, needlevelarena) then
               return doPlayerSendCancel(cid, "All of your team need to be level " .. needlevelarena .. " or more.")
           end
           if getPlayerLevel(cid) < leaderlevel then
               return doPlayerSendCancel(cid, "You, the leader of the team, need to be level " .. leaderlevel .. " or more.")
           end
           if not haveQuantPlayersInArea(areateam1ext, areaplayersteam, needplayers) then
               return doPlayerSendCancel(cid, "Your team need " .. tostring(needplayers) .. " players.")
           end

           setGlobalStorageValue(team1leverstorage, 1)
           doTransformItem(getThingFromPos(team1leverpos).uid, leverbefore)
           if getGlobalStorageValue(team2leverstorage) >= 1 then
               startArena()
           end
       else
           doPlayerSendCancel(cid, "You must be the leader of the team to pull the lever.")
       end
   elseif checkPoses(toPosition, team2leverpos) then
       if checkPoses(getCreaturePosition(cid), leaderteam2pos) then
           if getGlobalStorageValue(team2leverstorage) == 1 then
               setGlobalStorageValue(team2leverstorage, 0)
               return doTransformItem(getThingFromPos(team2leverpos).uid, leverafter)
           end
           if onlyguildwars and getPlayerGuildLevel(cid) < 3 then
               return doPlayerSendCancel(cid, "You need to be the leader of your guild.")
           end
           if onlyguildwars and not isAllUidsSameGuild(team2uids, getPlayerGuildId(cid)) then
               return doPlayerSendCancel(cid, "All of your team need to be in your guild.")
           end              
           if not isAllUidsLevel(team2uids, needlevelarena) then
               return doPlayerSendCancel(cid, "All of your team need to be level " .. needlevelarena .. " or more.")
           end
           if getPlayerLevel(cid) < leaderlevel then
               return doPlayerSendCancel(cid, "You, the leader of the team, need to be level " .. leaderlevel .. " or more.")
           end
           if not haveQuantPlayersInArea(areateam2ext, areaplayersteam, needplayers) then
               return doPlayerSendCancel(cid, "Your team need " .. tostring(needplayers) .. " players.")
           end

           setGlobalStorageValue(team2leverstorage, 1)
           doTransformItem(getThingFromPos(team2leverpos).uid, leverbefore) 
           if getGlobalStorageValue(team1leverstorage) >= 1 then
               startArena()
           end
       else
           doPlayerSendCancel(cid, "You must be the leader of the team to pull the lever.")
       end
   end
return TRUE
]]></action>

<!-- WarArenaDeathTeam1.lua -->
<creaturescript type="death" name="DeathTeam1" event="script"><![CDATA[
domodlib('WarLib')
   setPlayerStorageValue(cid, storageplayersteam1, 0)   
   setGlobalStorageValue(storageteam1death, getGlobalStorageValue(storageteam1death) >= 0 and getGlobalStorageValue(storageteam1death)+1 or 1)
   if getGlobalStorageValue(storageteam1death) >= getGlobalStorageValue(storageteam1) then
       if onlyguildwars then
           doBroadcastMessage("The Team 2 won the war, guild " .. getPlayerGuildName(getGlobalStorageValue(storageleader2)) .. ".")
       else
           doBroadcastMessage("The Team 2 won the war, team leader name is " .. getCreatureName(getGlobalStorageValue(storageleader2)) .. ".")
       end
       setGlobalStorageValue(storageteam1death, 0)
       setGlobalStorageValue(storageteam2death, 0)
       setGlobalStorageValue(haveteaminarena, 0)
   end 
   return TRUE
]]></creaturescript>

<!-- WarArenaDeathTeam2.lua -->
<creaturescript type="death" name="DeathTeam2" event="script"><![CDATA[
domodlib('WarLib')
   setPlayerStorageValue(cid, storageplayersteam2, 0)  
   setGlobalStorageValue(storageteam2death, getGlobalStorageValue(storageteam2death) >= 0 and getGlobalStorageValue(storageteam2death)+1 or 1)
   if getGlobalStorageValue(storageteam2death) >= getGlobalStorageValue(storageteam2) then
       if onlyguildwars then
           doBroadcastMessage("The Team 1 won the war, guild " .. getPlayerGuildName(getGlobalStorageValue(storageleader1)) .. ".")
       else
           doBroadcastMessage("The Team 1 won the war, team leader name is " .. getCreatureName(getGlobalStorageValue(storageleader1)) .. ".")
       end
       setGlobalStorageValue(storageteam1death, 0)
       setGlobalStorageValue(storageteam2death, 0)
       setGlobalStorageValue(haveteaminarena, 0)
   end
   return TRUE
]]></creaturescript>

<!-- WarArenaMovement1.lua -->
<movevent type="StepOut" actionid="12350" event="script"><![CDATA[
domodlib('WarLib')
   local team = (fromPosition.x == leaderteam1pos.x and fromPosition.y == leaderteam1pos.y and fromPosition.z == leaderteam1pos.z) and "team1" or (fromPosition.x == leaderteam2pos.x and fromPosition.y == leaderteam2pos.y and fromPosition.z == leaderteam2pos.z) and "team2"
   if team == "team1" then
       if getGlobalStorageValue(team1leverstorage) == 1 then
           setGlobalStorageValue(team1leverstorage, 0)
           doTransformItem(getThingFromPos(team1leverpos).uid, leverafter)
       end
   elseif team == "team2" then
       if getGlobalStorageValue(team2leverstorage) == 1 then
           setGlobalStorageValue(team2leverstorage, 0)
           doTransformItem(getThingFromPos(team2leverpos).uid, leverafter)
       end 
   end
]]></movevent>

<!-- WarArenaMovement2.lua -->
<movevent type="StepIn" actionid="12351" event="script"><![CDATA[
domodlib('WarLib')
   local team = isSqmFromArea(areateam1ext, areaplayersteam, fromPosition) and "team1" or isSqmFromArea(areateam2ext, areaplayersteam, fromPosition) and "team2"
   if team == "team1" then
       if getGlobalStorageValue(team1leverstorage) == 1 then
           if not haveQuantPlayersInArea(areateam1ext, areaplayersteam, needplayers) then
               setGlobalStorageValue(team1leverstorage, 0)
               doTransformItem(getThingFromPos(team1leverpos).uid, leverafter)
           end
       end
   elseif team == "team2" then
       if getGlobalStorageValue(team2leverstorage) == 1 then
           if not haveQuantPlayersInArea(areateam2ext, areaplayersteam, needplayers) then
               setGlobalStorageValue(team2leverstorage, 0)
               doTransformItem(getThingFromPos(team2leverpos).uid, leverafter)
           end
       end
   end
   if getGlobalStorageValue(team1leverstorage) == 1 then
       if checkPoses(fromPosition, posbenterteam1) then
           doTeleportThing(cid, fromPosition)
           return doPlayerSendCancel(cid, "You can't enter now.")
       end
   elseif getGlobalStorageValue(team2leverstorage) == 1 then
       if checkPoses(fromPosition, posbenterteam2) then
           doTeleportThing(cid, fromPosition)
           return doPlayerSendCancel(cid, "You can't enter now.")
       end
   end
]]></movevent>

<!-- WarArenaMovement3.lua -->
<movevent type="StepIn" actionid="12352" event="script"><![CDATA[
domodlib('WarLib')
   if getPlayerStorageValue(cid, storageplayersteam1) >= 1 then
       setPlayerStorageValue(cid, storageplayersteam1, 0)  
       doTeleportThing(cid, posbenterteam1)  
       setGlobalStorageValue(storageteam1death, getGlobalStorageValue(storageteam1death) >= 0 and getGlobalStorageValue(storageteam1death)+1 or 1)
       if getGlobalStorageValue(haveteaminarena) >=  1 then
           if getGlobalStorageValue(storageteam1death) >= getGlobalStorageValue(storageteam1) then
               if onlyguildwars then
                   doBroadcastMessage("The Team 2 won the war, guild " .. getPlayerGuildName(getGlobalStorageValue(storageleader2)) .. ".")
               else
                   doBroadcastMessage("The Team 2 won the war, team leader name is " .. getCreatureName(getGlobalStorageValue(storageleader2)) .. ".")
               end
               setGlobalStorageValue(storageteam1death, 0)
               setGlobalStorageValue(storageteam2death, 0)
               setGlobalStorageValue(haveteaminarena, 0)
           end 
       end
   elseif getPlayerStorageValue(cid, storageplayersteam2) >= 1 then
   setPlayerStorageValue(cid, storageplayersteam2, 0)  
       doTeleportThing(cid, posbenterteam2)
       setGlobalStorageValue(storageteam2death, getGlobalStorageValue(storageteam2death) >= 0 and getGlobalStorageValue(storageteam2death)+1 or 1)
       if getGlobalStorageValue(haveteaminarena) >=  1 then
           if getGlobalStorageValue(storageteam2death) >= getGlobalStorageValue(storageteam2) then
               if onlyguildwars then
                   doBroadcastMessage("The Team 1 won the war, guild " .. getPlayerGuildName(getGlobalStorageValue(storageleader1)) .. ".")
               else
                   doBroadcastMessage("The Team 1 won the war, team leader name is " .. getCreatureName(getGlobalStorageValue(storageleader1)) .. ".")
               end
               setGlobalStorageValue(storageteam1death, 0)
               setGlobalStorageValue(storageteam2death, 0)
               setGlobalStorageValue(haveteaminarena, 0)
           end
       end
   end
   return TRUE
]]></movevent>
</mod> 

 

 

O modo de configurar é exatamente igual ao normal. Flws.

 

By MatheusMkalo

Editado por MatheusMkalo
Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...
  • 4 weeks later...
  • 2 months later...
×
×
  • Criar Novo...