Postado Junho 15, 2015 10 anos ArenaUp System Ola pessoal venho por meio deste topico disponibilizar um sistema de arenaup que eu desenvolvi para meu server! 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! Editado Junho 15, 2015 10 anos por Kolisium (veja o histórico de edições)
Postado Junho 17, 2015 10 anos Tópico aprovado e movido a área correta, obrigado por compartilhar. Você recebeu um REP pela contribuição. ➥ Regras | Seções OTServ | Seções BOT
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.