Dice Arena
Esse evento foi postado para o Script de Terça, para ver os outros scripts de terça, clique aqui.
Como o evento funciona?
Um número configurado de jogadores deve permanecer em posições configuradas (Igual na annihilator). Quando todas as posições tiverem ocupadas, o primeiro jogador puxa a alavanca, levando todos para dentro da Arena. Dentro da arena, tem um dado que, quando usado, sorteia um monstro. Quando os jogadores matam o monstro, um loot cai no chão (Quanto menor o número do dado, mais forte será o monstro e melhor será o item que dropa).
- Se já tiver gente dentro da arena, outro time não poderá entrar.
- Uma vez dentro da arena, cada jogador só pode rodar o dado uma vez.
- Cada jogador só pode entrar na arena uma vez por dia (tempo configurável).
- Os monstros e loots são configuráveis.
Vídeo do evento
(obrigado ao por me ajudar a gravar)
Instalação
Lib
Crie diceArena.lua em data/lib e coloque:
-- Dice Arena Event criado por Killua, XTibia.com dice_cfg = { positions_ = {{x = 164, y = 17, z = 7}, {x = 164, y = 18, z = 7}}, arena_pos = {x = 501, y = 141, z = 7}, wait_ = 60*60*24, max_time = 1800, numbers = { [1] = {"Orshabaal", "Morgaroth", "Ferumbras"}, [2] = {"Demodras", "Juggernaut"}, [3] = {"Demon", "Behemoth"}, [4] = {"Dragon Lord", "Hydra"}, [5] = {"Dragon", "Cyclops"}, [6] = {"Rotworm", "Rat"} }, noob_item = {2158, 10}, pro_item = {2160, 5}, arena_frompos = {x = 491, y = 125, z = 7}, arena_topos = {x = 512, y = 144, z = 7} } function removeDiceMonsters() for x = dice_cfg.arena_frompos.x, dice_cfg.arena_topos.x do for y = dice_cfg.arena_frompos.y, dice_cfg.arena_topos.y do local area_ = {x = x, y = y, z = dice_cfg.arena_frompos.z} local creature = getTopCreature(area_) if isMonster(creature.uid) then doRemoveCreature(creature.uid) end end end end
Actions
Crie diceLever.lua em data/actions/scripts e coloque:
-- Dice Arena Event criado por Killua, XTibia.com function onUse(cid, item, fromPosition, itemEx, toPosition) local check = 0 local players = {} if item.actionid == 8733 then for i = 1, #dice_cfg.positions_ do if isPlayer(getTopCreature(dice_cfg.positions_[i]).uid) then check = check + 1 end end if check == #dice_cfg.positions_ then if getGlobalStorageValue(182221) == -1 then for j = 1, #dice_cfg.positions_ do table.insert(players, getTopCreature(dice_cfg.positions_[j]).uid) end for e = 1, #players do if getPlayerStorageValue(players[e], 181293) > os.time() then check = check- 1 end end if check == #dice_cfg.positions_ then for u = 1, #players do doTeleportThing(players[u], dice_cfg.arena_pos, false) doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945) doPlayerSendTextMessage(players[u], MESSAGE_STATUS_CONSOLE_BLUE, "Voce entrou na arena do dado! Teste sua sorte...") setGlobalStorageValue(182221, #dice_cfg.positions_ - 1) doPlayerSetStorageValue(players[u], 181293, os.time() + dice_cfg.wait_) addEvent(function() if isInArea(getThingPos(players[u]), dice_cfg.arena_frompos, dice_cfg.arena_topos) then doTeleportThing(players[u], getTownTemplePosition(getPlayerTown(players[u])), false) setGlobalStorageValue(182221, -1) removeDiceMonsters() end end, dice_cfg.max_time * 1000) end else doPlayerSendCancel(cid, "Alguem do seu time ja entrou na arena nos ultimos "..dice_cfg.wait_" segundos.") end else doPlayerSendCancel(cid, "Ja tem alguem dentro da arena, aguarde...") end else doPlayerSendCancel(cid, "Sao necessarios pelo menos "..#dice_cfg.positions_.." jogadores para entrar na arena.") end elseif item.uid == 8734 then if getPlayerStorageValue(cid, 281811) <= os.time() then doPlayerSetStorageValue(cid, 281811, os.time() + dice_cfg.wait_ - dice_cfg.wait_ / 3) local value = math.random(5792, 5797) doSendMagicEffect(fromPosition, CONST_ME_CRAPS) doTransformItem(item.uid, value) doCreatureSay(cid, getCreatureName(cid) .. " rolled a " .. value - 5791 .. ".", TALKTYPE_ORANGE_1) if dice_cfg.numbers[value - 5791] then local rand = math.random(1, #dice_cfg.numbers[value - 5791]) doCreateMonster(dice_cfg.numbers[value - 5791][rand], getClosestFreeTile(cid, fromPosition)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Voce criou um "..dice_cfg.numbers[value - 5791][rand].."! Um monstro de nivel " .. value - 5791 .. ", derrote-o para conseguir seu premio!") end else doPlayerSendCancel(cid, "Voce so podera usar o dado daqui a "..getPlayerStorageValue(cid, 281811) - os.time().." segundos.") end end return true end
Em actions.xml, coloque essas TAGs:
<action actionid="8733" script="diceLever.lua"/> <action uniqueid="8734" script="diceLever.lua"/>
Creaturescripts
Em data/creaturescripts/scripts crie diceKill.lua e coloque:
-- Dice Arena Event criado por Killua, XTibia.com local function getMonsterCategory(name) for index, names in pairs(dice_cfg.numbers) do if isInArray(names, ""..name.."") then return index end end end function onKill(cid, target, lastHit) if isMonster(target) and isPlayer(cid) then if isInArea(getThingPos(target), dice_cfg.arena_frompos, dice_cfg.arena_topos) then if getGlobalStorageValue(8181818) <= os.time() then setGlobalStorageValue(8181818, os.time() + 1) if getMonsterCategory(getCreatureName(target)) then if getMonsterCategory(getCreatureName(target)) > 2 then addEvent(doCreateItem, 200, dice_cfg.noob_item[1], math.random(1, dice_cfg.noob_item[2]), getThingPos(target)) elseif getMonsterCategory(getCreatureName(target)) == 2 then local chance = math.random(1,100) if chance <= 20 then addEvent(doCreateItem, 200, dice_cfg.pro_item[1], math.random(1, dice_cfg.pro_item[2]), getThingPos(target)) else addEvent(doCreateItem, 200, dice_cfg.noob_item[1], math.random(1, dice_cfg.noob_item[2]), getThingPos(target)) end elseif getMonsterCategory(getCreatureName(target)) == 1 then addEvent(doCreateItem, 200, dice_cfg.pro_item[1], math.random(1, dice_cfg.pro_item[2]), getThingPos(target)) end doSendMagicEffect(getThingPos(target), 38) doCreatureSay(target, "You have gained a special loot!", TALKTYPE_ORANGE_1) end end end end return true end function onLogin(cid) if isInArea(getThingPos(cid), dice_cfg.arena_frompos, dice_cfg.arena_topos) then doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) end registerCreatureEvent(cid, "diceKill") return true end
Em creaturescripts.xml, coloque essas TAGs:
<event type="kill" name="diceKill" event="script" value="diceKill.lua"/> <event type="login" name="diceLogin" event="script" value="diceKill.lua"/>
Movements
Em data/movements/scripts crie diceMove.lua e coloque:
-- Dice Arena Event criado por Killua, XTibia.com function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false) if getGlobalStorageValue(182221) == 0 then removeDiceMonsters() elseif getGlobalStorageValue(182221) > 0 then setGlobalStorageValue(182221, getGlobalStorageValue(182221) - 1) end return true end
Em movements.xml, coloque essa TAG:
<movevent type="StepIn" actionid="8730" event="script" value="diceMove.lua"/>
Globalevents
Em data/globalevents/scripts crie diceStart.lua e coloque:
function onStartup() setGlobalStorageValue(182221, -1) return true end
Em globalevents.xml, coloque essa TAG:
<globalevent name="diceStart" type="start" event="script" value="diceStart.lua"/>
dice_cfg = { positions_ = {{x = 164, y = 17, z = 7}, {x = 164, y = 18, z = 7}}, arena_pos = {x = 501, y = 141, z = 7}, wait_ = 60*60*24, max_time = 1800, numbers = { [1] = {"Orshabaal", "Morgaroth", "Ferumbras"}, [2] = {"Demodras", "Juggernaut"}, [3] = {"Demon", "Behemoth"}, [4] = {"Dragon Lord", "Hydra"}, [5] = {"Dragon", "Cyclops"}, [6] = {"Rotworm", "Rat"} }, noob_item = {2158, 10}, pro_item = {2160, 5}, arena_frompos = {x = 491, y = 125, z = 7}, arena_topos = {x = 512, y = 144, z = 7} }
Em positions_, coloque as posições que os jogadores devem ficar para poder puxar a alavanca (Pode por quantas quiser).
Em arena_pos, coloque a posição da arena (Pra onde os jogadores vão quando puxarem a alavanca).
Em wait_, coloque o tempo que o jogador deve esperar para entrar na arena novamente (em segundos). 60*60*24 = 1 dia, aconselho deixar assim.
Em max_time, coloque o tempo máximo que os jogadores podem permanecer na arena (em segundos (após esse tempo, eles serão teleportados para o templo)).
Em numbers, coloque o nome dos monstros que podem vir dependendo do número sorteado pelo dado (quanto menor o número, mais forte devem ser os monstros).
Em noob_item, coloque o {id, quantidade} do item que dropa dos monstros mais fracos/médios
Em pro_item, coloque o {id, quantidade} do item que pode dropar dos monstros mais fortes/médios
Em arena_frompos, coloque a posição do canto superior esquerdo da arena.
Em arena_topos, coloque a posição do canto inferior direito da arena.

