:XTibia_smile:ArenaUp System :XTibia_smile:
Ola pessoal venho por meio deste tópico disponibilizar um sistema de arenaup que eu meu amigo desenvolveu!
O sistema funciona da seguinte maneira:
"!arenaup enter,<monster>" -> Player entra na arena, apartir disto será sumonado 9 monstros a cada 5 segundos
Condições:
Necessario item e level minimo para entrar.
O player fica dentro da arena no maximo 1h configuravel.
Caso morrer a arena é limpa e setada como livre.
Player so pode entrar na arena com algum montro preselecionado configuravel.
"!arenaup leave" -> Player sai da arena.
Instalação do Script
Explicações das variaveis na lib, configurações do script tb na lib
Em data/lib crie um arquivo chamado ArenaLib.lua e coloque isso dentro:
-- posini = sqm superior esquerdo da arena
-- posfim = sqm inferior direito da arena
-- center = posição central da arena
arenasLib = {
{posini = {x=235,y=46,z=15},posfim = {x=241,y=52,z=15}, center = {x=238,y=49,z=15}, ocupado = 0},
{posini = {x=243,y=46,z=15},posfim = {x=249,y=52,z=15}, center = {x=246,y=49,z=15}, ocupado = 0},
{posini = {x=251,y=46,z=15},posfim = {x=257,y=52,z=15}, center = {x=254,y=49,z=15}, ocupado = 0},
{posini = {x=259,y=46,z=15},posfim = {x=265,y=52,z=15}, center = {x=262,y=49,z=15}, ocupado = 0},
{posini = {x=267,y=46,z=15},posfim = {x=273,y=52,z=15}, center = {x=270,y=49,z=15}, ocupado = 0},
{posini = {x=275,y=46,z=15},posfim = {x=281,y=52,z=15}, center = {x=278,y=49,z=15}, ocupado = 0},
{posini = {x=283,y=46,z=15},posfim = {x=289,y=52,z=15}, center = {x=286,y=49,z=15}, ocupado = 0},
{posini = {x=291,y=46,z=15},posfim = {x=297,y=52,z=15}, center = {x=294,y=49,z=15}, ocupado = 0},
{posini = {x=299,y=46,z=15},posfim = {x=305,y=52,z=15}, center = {x=302,y=49,z=15}, ocupado = 0},
{posini = {x=307,y=46,z=15},posfim = {x=313,y=52,z=15}, center = {x=310,y=49,z=15}, ocupado = 0},
{posini = {x=235,y=54,z=15},posfim = {x=241,y=60,z=15}, center = {x=238,y=57,z=15}, ocupado = 0},
{posini = {x=243,y=54,z=15},posfim = {x=249,y=60,z=15}, center = {x=246,y=57,z=15}, ocupado = 0},
{posini = {x=251,y=54,z=15},posfim = {x=257,y=60,z=15}, center = {x=254,y=57,z=15}, ocupado = 0},
{posini = {x=259,y=54,z=15},posfim = {x=265,y=60,z=15}, center = {x=262,y=57,z=15}, ocupado = 0},
{posini = {x=267,y=54,z=15},posfim = {x=273,y=60,z=15}, center = {x=270,y=57,z=15}, ocupado = 0},
{posini = {x=275,y=54,z=15},posfim = {x=281,y=60,z=15}, center = {x=278,y=57,z=15}, ocupado = 0},
{posini = {x=283,y=54,z=15},posfim = {x=289,y=60,z=15}, center = {x=286,y=57,z=15}, ocupado = 0},
{posini = {x=291,y=54,z=15},posfim = {x=297,y=60,z=15}, center = {x=294,y=57,z=15}, ocupado = 0},
{posini = {x=299,y=54,z=15},posfim = {x=305,y=60,z=15}, center = {x=302,y=57,z=15}, ocupado = 0},
{posini = {x=307,y=54,z=15},posfim = {x=313,y=60,z=15}, center = {x=310,y=57,z=15}, ocupado = 0}
}
-- monstros disponiveis para a arena, serão mostrados quando usar !arenaup monsters
arenaMonsters = {
"Demon",
"Dragon Lord",
"Frost Dragon",
"Dark Torturer",
"Fury",
"Behemoth",
"Destroyer",
"Draken Warmaster",
"Draken Elite",
"Draken Abomination",
"Draken Spellweaver",
"Warlock",
"Wyrm",
"Hydra",
"Medusa",
"Serpent Spawn",
"Giant Spider",
"Hellfire Fighter",
"Infernalist",
"Lizard Chosen",
"Grim Reaper",
"Nightmare",
"Hellhound",
"Undead Dragon",
"Sea Serpent",
"Defiler",
"Ghastly Dragon",
"Juggernaut"
}
-- configurações
arenaConfig = {
lvlmin = 200, -- level minimo para entrar na arena
item_id = 6536, -- item q o player precisa ter para poder entrar na arena
tempo = 60, -- tempo em minutos que o player pode ficar upando na arena
temple = {x=161,y=53,z=7} -- posição do templo da ciadade principal do server
}
----------------------------- Não mexa abaixo a menos que saiba o que esta fazendo ------------------------------
arenaStorages = {
arena = 96353,
tempo = 96354
}
function limparArena(posInicial,posFinal)
for i = posInicial.x, posFinal.x do
for j = posInicial.y, posFinal.y do
creature = getThingFromPos({x=i,y=j,z=15,stackpos=253})
if isMonster(creature.uid) then
doRemoveCreature(creature.uid)
end
doCleanTile({x=i,y=j,z=15})
end
end
end
function arenaSummon(cid, monster, arena)
if getPlayerStorageValue(cid, arenaStorages.tempo) < os.time() then
doTeleportThing(cid,arenaConfig.temple)
doSendMagicEffect(getThingFromPos(cid),10)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Seu tempo se esgotou!")
setPlayerStorageValue(cid,arenaStorages.arena,0)
end
cont = 0
for i = arenasLib[arena].posini.x, arenasLib[arena].posfim.x do
for j = arenasLib[arena].posini.y, arenasLib[arena].posfim.y do
creature = getThingFromPos({x=i,y=j,z=15,stackpos=253})
if isPlayer(creature.uid) then
cont = cont +1
end
end
end
if cont ~= 0 then
for i = 0 , 8 do
px = math.random(arenasLib[arena].posini.x,arenasLib[arena].posfim.x)
py = math.random(arenasLib[arena].posini.y,arenasLib[arena].posfim.y)
pz = 15
if getTopCreature({x=px,y=py,z=pz,stackpos=253}).uid > 0 then
else
doCreateMonster(monster, {x=px,y=py,z=pz})
end
end
addEvent(arenaSummon,5000,cid,monster,arena)
else
arenasLib[arena].ocupado = 0
limparArena(arenasLib[arena].posini,arenasLib[arena].posfim)
end
end
Em creaturescripts.xml:
<event type="PrepareDeath" name="arenaup" script="arenaup.lua"/>
Em creaturescripts/script/login.lua abaixo de function onLogin(cid) coloque:
registerCreatureEvent(cid, "arenaup")
Na mesma pasta cria um arquivo chamado arenaup.lua e coloque:
function onPrepareDeath(cid, lastHitKiller, mostDamageKiller)
if getPlayerStorageValue(cid,arenaStorages.arena) ~= 0 then
setPlayerStorageValue(cid,arenaStorages.arena,0)
end
return true
end
Em talkactions.xml coloque:
<talkaction words="!arenaup" event="script" value="arenaup.lua"/>
em talkactions/scripts crie um arquivo arenaup.lua e coloque dentro:
function onSay(cid, words, param, channel)
if(param == '') then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "*** Arena Up Configuracoes ***.")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Para saber os possiveis monstros para se cacar na arena up diga !arenaup monsters.")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Para entrar na arena diga !arenaup enter,<monster> eh preciso 1 jalapeno pepper para poder entrar.")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Para sair da arena diga !arenaup leave ou entao vc sera kikado apos uma hora de hunt dentro da arena")
return true
end
if(param == "monsters") then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Monstros disponiveis:")
msg = ""
for a,b in ipairs(arenaMonsters) do
if a == 1 then
msg = b
else
msg = msg .. ", " .. b
end
end
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, msg)
end
local t = string.explode(param, ",")
if (t[1] == 'enter') then
if getPlayerLevel(cid) > arenaConfig.lvlmin then
if getTilePzInfo(getCreaturePosition(cid)) == true then
for a,b in ipairs(arenaMonsters) do
if string.lower(t[2]) == string.lower(b) then
pass = true
break
else
pass = false
end
end
if pass == true then
if doPlayerRemoveItem(cid, arenaConfig.item_id, 1) then
for a,b in ipairs(arenasLib) do
if b.ocupado == 0 then
setPlayerStorageValue(cid,arenaStorages.arena,a)
doTeleportThing(cid, b.center)
doSendMagicEffect(getThingPos(cid),10)
setPlayerStorageValue(cid,arenaStorages.tempo,(os.time() + (arenaConfig.tempo * 60)))
b.ocupado = 1
arenaSummon(cid,t[2],a)
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Bem vindo a arena up bom up!")
break
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Todas as arenas estao cheias!")
end
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce precisa de um countess sorrow's frozen tear para poder entrar na arena.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Monstro invalido.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Eh necessario estar em uma area PZ.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Necessario level 200 para upar na arena.")
end
end
if (t[1] == 'leave') then
if getPlayerStorageValue(cid,arenaStorages.arena) ~= 0 then
doTeleportThing(cid,arenaConfig.temple)
doSendMagicEffect(getThingPos(cid),10)
sto = getPlayerStorageValue(cid,arenaStorages.arena)
arenasLib[sto].ocupado = 0
limparArena(arenasLib[sto].posini,arenasLib[sto].posfim)
setPlayerStorageValue(cid,arenaStorages.arena,0)
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce precisa estar na arenaup para usar este comando.")
end
end
end
Após feito isso o script esta instalado!