Ir para conteúdo

dmartins89

Campones
  • Total de itens

    10
  • Registro em

  • Última visita

Histórico de Reputação

  1. Upvote
    dmartins89 deu reputação a drakylucas em Arena Sobrevivencia Event System   
    Bom, esse sistema é requisitado por muitos donos de servidores..
    sempre quando pedem as pessoas fazem e enviam por PM, por ser meio dificil...
     
    Essa é minha versão desse sistema
    Créditos 90% Draky Lucas (eu)
    10% Vodkart (uma função que utilizei e me explicou como funcionaria o sistema, q os players nao sabem explica direito kk)
     
    O que ele é?
    o GM do servidor digita /arena X, onde o X é o numero de jogadores necessarios para o evento começar..
    supondo que o GM digitou /arena 5:
    o evento criaria um teleport na posição configurada;
    esperaria 5 players entrarem nesse teleport (não contando os GM's.. também configuravel);
    assim que o 5º player entrasse, o evento esperaria um delay (configuravel) e sumonaria os bixos de cada level do evento (monstros e leveis configuraveis), e assim que criasse os monstros, contaria o mesmo delay varias veses para ir avançando de nivel (e criando mais monstros), os que sobreviverem ao ultimo nivel (configuravel) ganham premios (configuraveis). Não se morre no evento e não se adquire loot dos monstros, mas ganha exp dos monstros também!
    [SIM, É CONFUSO DE ENTENDER.. COLOQUE NO SERVIDOR E VEJA VOCÊ MESMO]
     
    TESTADO COM The Lost Server 8.6
    (Caso dê erro de storage, é pq não sei se no TFS/Baiak tem as funçoes setStorage com esse nome, mas me avise que eu arrumo a versão TFS/BAIAK)
     

    Instalando o sistema:


    Mapa:
     

     
    Script:
    na pasta onde fica o executavel do server, há uma pasta chamada Mods, entre nela e crie um arquivo chamado arena.xml e nele coloque isso:
    [PS: Editado 01:39 - 14/07/2012 por correção de um erro ortográfico do forum que comeu um parenteses do script]

    <?xml version="1.0" encoding="UTF-8"?> <mod name="Arena" version="1.0" author="DrakyLucas" contact="XTibia" enabled="yes"> <config name="arena_config"><![CDATA[ config = { delay = 60, -- tempo de um level para o outro posicaoPlayer = {x = 37,y = 96,z = 7}, -- posição q o player vai cair dps de entra no TP posicaoArena = {{x = 35,y = 94,z = 7},{x = 42,y = 99,z = 7}}, premio = { {2160,70}, {2152,50}, }, -- ID, Quantidade... só aceita de 1 a 100 por vez, e você pode adicionar quantos itens quiser. storage = 15444, -- não mecha.. posicaoTp = {x = 37, y = 91, z = 7}, -- posicao que o teleporte vai aparecer acesso = 3, -- acesso minimo para ser ignorado pelo evento, e o mesmo acesso para poder inicializa-lo } -- você pode adicionar quantos leveis desejar -- [NumeroDoLevel] = {{"Nome",Quantidade},{"Nome",Quantidade},{"Nome",Quantidade},{"Nome",Quantidade},{"Nome",Quantidade}}, leveis = { [1] = {{"Dragon",5}}, [2] = {{"Dragon",5},{"Dragon Lord",2}}, [3] = {{"Dragon Lord",5}}, [4] = {{"Demodras",2},{"Demon",1}}, [5] = {{"Demon",5},{"Orshabaal",1},{"Ferumbras",1}}, } function abrirTeleport(n) doItemSetAttribute(doCreateItem(1387, config.posicaoTp), "aid", 2941) -- cria o tp e deixa aid 2941 doBroadcastMessage("O Evento arena vai começar! teleport foi aberto e faltam ".. n .. " pessoas para o evento iniciar!") doSetStorage(config.storage, n) end function fecharTPeAguardarEvento() doRemoveItem(getTileItemById(config.posicaoTp, 1387).uid,100) doBroadcastMessage("O evento ja concluio " .. #getPlayersInArena() .. " players e começará em " .. config.delay .. " segundos!") addEvent(evento,config.delay*1000,1) end function HaveCreatureArena(area, remove, clean) -- função do Vodkart for x = area[1].x - 1, area[2].x + 1 do for y = area[1].y - 1, area[2].y + 1 do local pos = {x=x, y=y, z=area[1].z} local m = getTopCreature(pos).uid if remove ~= false and m ~= 0 and isMonster(m) then doRemoveCreature(m) end if clean ~= false then doCleanTile(pos, false) end end end end function resetEvento() doSetStorage(config.storage, -1) end function criarMonstros(lv) local monstro = leveis[lv] local area = {config.posicaoArena[1],config.posicaoArena[2]} for i = 1,#monstro do for k=1,monstro[i][2]do pos = {x=math.random(area[1].x,area[2].x), y=math.random(area[1].y,area[2].y), z=area[1].z} monstrinho = doCreateMonster(monstro[i][1], pos) registerCreatureEvent(monstrinho, "removerCorpse") end end end function evento(i) if #getPlayersInArena() == 0 then doBroadcastMessage("Ninguem sobreviveu a arena =/") doBroadcastMessage("EVENTO TERMINADO!") HaveCreatureArena({config.posicaoArena[1],config.posicaoArena[2]}, true, true) -- remove monstros, itens da arena resetEvento() return true end if i == (#leveis +1) then HaveCreatureArena({config.posicaoArena[1],config.posicaoArena[2]}, true, true) doBroadcastMessage("Evento finalizado, " .. #getPlayersInArena() .. " sobreviveram ao evento!") for _, pid in ipairs(getPlayersInArena()) do doPlayerSendTextMessage(pid,22,"Parabens, você sobreviveu ao evento!") addItens(pid) doTeleportThing(pid,getTownTemplePosition(getPlayerTown(pid))) end resetEvento() return true end for _, pid in ipairs(getPlayersInArena()) do doPlayerSendTextMessage(pid,22,"GoGo Nivel " .. i .. " !!!") end criarMonstros(i) addEvent(evento,config.delay*1000,i+1) end function addItens(pid) for i=1,#config.premio do doPlayerAddItem(pid,config.premio[i][1],config.premio[i][2]) end doPlayerSendTextMessage(pid,22,"Parabens, voce recebeu seus premios!") end function getPlayersInArena() local t = {} for _, pid in pairs(getPlayersOnline()) do if getPlayerAccess(pid) < config.acesso then if isInRange(getCreaturePosition(pid), config.posicaoArena[1], config.posicaoArena[2]) then table.insert(t, pid) end end end return t end ]]></config> <talkaction words="/arena" event="buffer"><![CDATA[ domodlib('arena_config') if getPlayerAccess(cid) < config.acesso then return doPlayerSendCancel(cid,"Voce nao tem acesso para esse comando") end if tonumber(param) ~= nil then -- se o parametro é numerico if tonumber(param) > 0 then doSetStorage(config.storage, param) abrirTeleport(param) end else doPlayerSendTextMessage(cid,19,"Digite /arena e um numero.. \n exemplo: \n/arena 5") end ]]></talkaction> <movevent type="StepIn" actionid="2941" event="script"><![CDATA[ domodlib('arena_config') if getPlayerAccess(cid) > config.acesso then doTeleportThing(cid, config.posicaoPlayer) return false end -- GM nao conta doSetStorage(config.storage,getStorage(config.storage) - 1) doTeleportThing(cid, config.posicaoPlayer) registerCreatureEvent(cid, "naoAtacarPlayer") registerCreatureEvent(cid, "morrerNaArena") if getStorage(config.storage) <= 0 then fecharTPeAguardarEvento() end return true ]]></movevent> <event type="login" name="VerSeTaNaArenaEExpulsa" event="script"><![CDATA[ domodlib('arena_config') if isInRange(getCreaturePosition(cid), config.posicaoArena[1], config.posicaoArena[2]) then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) end return true ]]></event> <event type="combat" name="naoAtacarPlayer" event="script"><![CDATA[ domodlib('arena_config') if isPlayer(cid) and isPlayer(target) then if isInRange(getPlayerPosition(cid), config.posicaoArena[1], config.posicaoArena[2]) and isInRange(getPlayerPosition(target), config.posicaoArena[1], config.posicaoArena[2]) then doPlayerSendCancel(cid, "Nao ataque seus amigos.") return false end end return true ]]></event> <event type="death" name="removerCorpse" event="script"><![CDATA[ domodlib('arena_config') doCreatureSay(cid,"Ninguem terá meu loot! Buaahahahha",1) pos = getCreaturePosition(cid) addEvent(doCleanTile,1,pos, false) return true ]]></event> <event type="statschange" name="morrerNaArena" event="script"><![CDATA[ domodlib('arena_config') if isInRange(getPlayerPosition(cid), config.posicaoArena[1], config.posicaoArena[2]) then if type == STATSCHANGE_HEALTHLOSS then if isPlayer(cid) then if value >= getCreatureHealth(cid) then doTeleportThing(cid,getTownTemplePosition(getPlayerTown(cid))) doPlayerSendTextMessage(pid,22,"Você morreu na arena =/.. veja pelo lado positivo, você nao perdeu nada!") doCreatureAddHealth(cid,getCreatureMaxHealth(cid) - getCreatureHealth(cid)) return false end end end end return true ]]></event> </mod>
     
     
     
     
    pronto, sistema adicionado.. agora vamos configurar:
    Tempo entre cada level
    Posição que está em branco na foto
    Posições que estão em azul na foto
    Premios (copie e cole como está, mude valores, adicione mais itens.. não há um limite de premios)
    Posição que o TP aparecerá para os players entrarem no event
    Acesso minimo para dar /arena X
    Monstros de cada Level (Obs: você pode adicionar quantos leveis desejar para o evento)
     
     
     
    Possiveis Erros:
     
    caso dê erro citado por algumas pessoas no forum (logo abaixo)
     
    é porque vocês utilizam uma distro diferente da minha e incompativel com UTF-8 então mudem

    <?xml version="1.0" encoding="UTF-8"?>
    por

    <?xml version="1.0" encoding="ISO-8859-1"?>
     
    e tudo deverá funcionar.
    Correção do erro feita pelo usuario KUNGLOW
    obrigado pela atenção
     
     
     

    Obrigado
    .. EXCLUSIVO XTIBIA

  2. Upvote
    dmartins89 deu reputação a roriscrave em [Encerrado] Npc que repara o "Exp ring" error   
    tenta esse:
     

    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, 'job')) then selfSay('For repair you ring say {ring} or {experience}.', cid) end --------------------------------------------------------- if(msgcontains(msg, 'ring') or msgcontains(msg, 'experience')) then selfSay('Do you want to repair your experience ring for 50000 gold coins?', cid) talkState[talkUser] = 1 elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then if(getPlayerItemCount(cid, 2122) <= 0) then selfSay('You dont have any ring.', cid) else if(doPlayerRemoveMoney(cid, 50000) == TRUE) then doPlayerRemoveItem(cid, 2122, 1) doPlayerAddItem(cid, 7697, 1) selfSay('Here you are.)', cid) else selfSay('Sorry, you dont have gold.', cid) end end return true end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...