[System] ArenaUp System

LuKk44S
em Scripting

LuKk44S

Tattos My Life
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 18/06/12Posts: 36Char no Tibia: Akira

: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! :plink:

                                                            Ajudei ? REP++ não custa nada !                   

 

 

                              sypl09.jpg

SamueLGuedes

Coordenador *-*
avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 18/05/11Posts: 1069Gênero: MasculinoChar no Tibia: Kyuzen

Poh, muito legal em, vou testar mais tarde xD

 

 

My Show-OFF

kaleudd

avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 15/06/15Posts: 729

ja vi algo pareçido com isso...

bfs102030

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 14/08/15Posts: 86

onde mudar o tempo em que sera sumonado os monsters e a quantidade de monsters?

 

tipo vc disse que a cada 5 segundos sera sumonado 9 monsters..

 

eu queria saber como aumentar ou diminuir esse 5 segundos ?

 

e tambem gostaria de saber se caso um player esteja na arena de hydra.

e outro player tentar usar o comando !arenaup dragon lord ele ira para a arena com dragon lords ?

ou enquanto o 1º player que ja estava na arena com hydras ficar la dentro o 2º player nao podera entrar?