Bom, vamos lá.
Não consegui fazer de um jeito "automático", demorei por isso.
Só consegui fazer automático com o storage para todos os pokémons. Espero que fazer "manualmente" não te atrapalhe tanto.
Para cada Giant pokémon, um novo arquivo e uma nova tag deve ser criada em actions.
O ID do item invisível/baú deve ser diferente também.
Lembrando que pelo jeito que eu fiz, você deve criar um item novo. Se não fizer, ao clicar em um item com o mesmo ID que este, você receberá a recompensa.
globalevents/scripts
nome_arquivo.lua
Este vai fazer o monstro aparecer.
function onThink(cid, interval, lastExecution)
local bosses = {
[1] = {name = "Giant Primeape", times = 3, pos = {[1] = {x=1050, y=1054, z=7}, [2] = {x=1051, y=1054, z=7}, [3] = {x=1052, y=1054, z=7}}},
[2] = {name = "Giant Wigglytuff", times = 1, pos = {[1] = {x=1045, y=1053, z=7}}},
-- [um numero maior que o de cima] = nome do monstro, quantas vezes ele vai spawnar (deve ser igual ao numero de posições), posições que ele vai spawnar.
}
local boss = math.random (#bosses)
for i = 1, bosses[boss].times do
doSummonCreature(bosses[boss].name, bosses[boss].pos[i])
end
doBroadcastMessage("Um World Boss acaba de aparecer!")
return true
end
globalevents/scripts
nome_arquivo.lua
Este vai fazer o monstro desaparecer.
function onThink(cid, interval, lastExecution)
local from1 = {x = 1046, y = 1048, z = 7} -- canto superior esquerdo da área que irá spawnar o Giant.
local to1 = {x = 1055, y = 1059, z = 7} -- canto inferior direito da área que irá spawnar o Giant.
for x = from1.x, to1.x do
for y = from1.y, to1.y do
for z = from1.z, to1.z do
local pos = {x = x, y = y, z = z, stackpos = 253}
local monsterTile = getThingfromPos(pos).uid
if isMonster(monsterTile) and getCreatureName (monsterTile) == "Giant Primeape" then
doRemoveCreature(monsterTile)
end
end
end
end
doBroadcastMessage ("O World Boss sumiu!")
return true
end
XML:
<globalevent name="spawnWorldBoss" interval="14400" script="nome_arquivo.lua"/>
<globalevent name="removeWorldBoss" interval="3600" script="nome_arquivo.lua"/>
creaturescripts/scripts
nome_arquivo.lua
local bosses = {
[1] = {name = "Giant Primeape", item = 12163, storage = 6151321},
[2] = {name = "Giant Wigglytuff", item = 12170, storage = 6151322},
-- [um número mais que o de cima] = {nome do monstro, ID do item, storage para verificar se o player matou o monstro. O storage deve ser diferente dos demais, recomendo ser 1 número maior que o de cima},
-- lembre-se de colocar a vírgula no final.
}
local timeToRemove = 60 -- tempo em segundos para remover o item invisível/baú.
local effect = 27 -- efeito que vai sair do player ao matar o pokémon.
local function doCreateItemWithDelay (item, position)
doCreateItem(item, 1, position)
return true
end
local function doRemoveItemWithDelay (item, position)
local tileItem = getTileItemById(position, item).uid
if tileItem ~= 0 then
doRemoveItem(tileItem, 1)
end
return true
end
function onKill(cid, target)
for i = 1, #bosses do
if isInArray(bosses[i].name, getCreatureName(target)) then
if getPlayerStorageValue (cid, bosses[i].storage) ~= 1 then
doPlayerSendTextMessage (cid, 19, "Agora você pode pegar a sua recompensa!")
doSendMagicEffect (getThingPos (cid), effect)
setPlayerStorageValue (cid, bosses[i].storage, 1)
end
addEvent(doCreateItemWithDelay, 1, bosses[i].item, getCreaturePosition(target))
addEvent(doRemoveItemWithDelay, timeToRemove * 1000, bosses[i].item, getCreaturePosition(target))
end
end
return true
end
XML:
<event type="kill" name="worldBoss" event="script" value="nome_arquivo.lua"/>
Registre o evento em login.lua.
registerCreatureEvent(cid, "worldBoss")
actions/scripts
nome_arquivo.lua
local config = {
item = 2160, -- ID do item que será adicionado.
qnt = 5, -- quantidade de itens que será adicionado.
timeOut = 4, -- tempo em horas para poder pegar o prêmio deste pokémon novamente.
exhausted = 102548, -- esse é o storage do exhausted, um monstro sempre tem que ser diferente do outro. Recomendo colocar um número maior.
storage = 6151321, -- storage para verificar se o jogador matou o monstro. Deve ser o mesmo do creaturescripts, para cada monstro.
effect = 28, -- efeito que vai sair em cima do player ao dar use no item.
}
local function timeToCheckIfKillMonster (cid, storage)
setPlayerStorageValue (cid, storage, -1)
return
end
function onUse(cid, item, frompos, item2, topos)
if getPlayerStorageValue (cid, config.storage) == 1 then
if getPlayerStorageValue (cid, config.exhausted) < os.time() then
doPlayerAddItem (cid, config.item, config.qnt)
doPlayerSendTextMessage (cid, 19, "Parabéns! Você derrotou o Giant Primeape!")
doSendMagicEffect (getThingPos(cid), config.effect)
setPlayerStorageValue (cid, config.exhausted, config.timeOut * 60 * 60 + os.time())
addEvent(timeToCheckIfKillMonster, config.timeOut * 1000 * 60 * 60 , cid, config.storage)
else
doPlayerSendTextMessage (cid, 19, "Você só poderá receber o prêmio do Giant Primeape em algumas horas.")
end
else
doPlayerSendTextMessage (cid, 19, "Você não derrotou o Giant Primeape.")
end
return true
end
XML:
<action itemid="ID_DO_ITEM_QUE_SERÁ_DROPADO_NA_POSIÇÃO_DO_MONSTRO" event="script" value="nome_arquivo.lua"/>
OBS: No XML do globalevents, o interval é em segundos. 14400 = 4 horas em segundos, 3600 = 1 hora em segundos.
OBS2: No script que remove o monstro, caso queira adicionar mais áreas, você deve criar uma nova variável, ficando assim:
local from1, from2, from3 = posição do canto superior esquerdo da área (from1), posição do canto superior esquerdo da área (from2), posição do canto superior esquerdo da (from3)
local to1, to2, to3 = posição do canto inferior direito da área (to1), posição do canto inferior direito da área (t2), posição do canto inferior direito da área (to3)
Exemplo:
local from1, from2, from3 = {x = 1046, y = 1048, z = 7}, {x = 1046, y = 1048, z = 7}, {x = 1030, y = 1032, z = 7}
local to1, to2, to3 = {x = 1055, y = 1059, z = 7}, {x = 1055, y = 1059, z = 7}, {x = 1020, y = 1025, z = 7}
Lembre-se: sempre separado por vírgulas.
E também, criar um novo bloco de for, copiando o de cima e trocando apenas o número do from/to e o nome do monstro, exemplo:
for x = from1.x, to1.x do
for y = from1.y, to1.y do
for z = from1.z, to1.z do
local pos = {x = x, y = y, z = z, stackpos = 253}
local monsterTile = getThingfromPos(pos).uid
if isMonster(monsterTile) and getCreatureName (monsterTile) == "Giant Primeape" then
doRemoveCreature(monsterTile)
end
end
end
end
for x = from2.x, to2.x do
for y = from2.y, to2.y do
for z = from2.z, to2.z do
local pos = {x = x, y = y, z = z, stackpos = 253}
local monsterTile = getThingfromPos(pos).uid
if isMonster(monsterTile) and getCreatureName (monsterTile) == "Giant Wigglytuff" then
doRemoveCreature(monsterTile)
end
end
end
end
for x = from3.x, to3.x do
for y = from3.y, to3.y do
for z = from3.z, to3.z do
local pos = {x = x, y = y, z = z, stackpos = 253}
local monsterTile = getThingfromPos(pos).uid
if isMonster(monsterTile) and getCreatureName (monsterTile) == "Giant Scyther" then
doRemoveCreature(monsterTile)
end
end
end
end
Espero que tenha entendido. =)
Para remover os pokémons automaticamente, adaptei um script de Jamison Collins/IagoNp.