177 lines
6.2 KiB
Lua
177 lines
6.2 KiB
Lua
-----------------------------------
|
|
-- Common Requires
|
|
-----------------------------------
|
|
require('modules/module_utils')
|
|
require('scripts/globals/npc_util')
|
|
-----------------------------------
|
|
-- ID Requires
|
|
-----------------------------------
|
|
local dragonsAeryID = zones[xi.zone.DRAGONS_AERY]
|
|
local valleySorrowsID = zones[xi.zone.VALLEY_OF_SORROWS]
|
|
local behemothDomID = zones[xi.zone.BEHEMOTHS_DOMINION]
|
|
|
|
-----------------------------------
|
|
-- Module definition
|
|
-----------------------------------
|
|
-- This module attempts to mix both era and retail styles for Land Kings.
|
|
-- It allows NQ Kings to retain their era timed rotation while allowing HQ Kings to be poped from their QMs. For Uncle Teo.
|
|
-- It comes along a ToD perpetuation/retainment system, for server crashes, since this NMs were usually contested by endgame LSs.
|
|
local hnmSystem = Module:new('custom_HNM_System')
|
|
|
|
-----------------------------------
|
|
-- Module enable/disable
|
|
-----------------------------------
|
|
-- Do not use along era_HNM_System module. Choose one or the other.
|
|
hnmSystem:setEnabled(false)
|
|
|
|
-----------------------------------
|
|
-- Dragon's Aery: Fafnir, Nidhogg
|
|
-----------------------------------
|
|
hnmSystem:addOverride('xi.zones.Dragons_Aery.Zone.onInitialize', function(zone)
|
|
super(zone)
|
|
|
|
local hnmPopTime = GetServerVariable('[HNM]Fafnir') -- Time the NM will spawn at.
|
|
local currentTime = GetSystemTime()
|
|
|
|
-- First-time setup.
|
|
if hnmPopTime == 0 then
|
|
hnmPopTime = currentTime + math.randomInt(1, 48) * 1800
|
|
|
|
SetServerVariable('[HNM]Fafnir', hnmPopTime) -- Save pop time.
|
|
end
|
|
|
|
xi.mob.updateNMSpawnPoint(dragonsAeryID.mob.FAFNIR)
|
|
|
|
-- Spawn mob or set spawn time.
|
|
if hnmPopTime <= currentTime then
|
|
SpawnMob(dragonsAeryID.mob.FAFNIR)
|
|
else
|
|
GetMobByID(dragonsAeryID.mob.FAFNIR):setRespawnTime(hnmPopTime - currentTime)
|
|
end
|
|
end)
|
|
|
|
hnmSystem:addOverride('xi.zones.Dragons_Aery.mobs.Fafnir.onMobDespawn', function(mob)
|
|
super(mob)
|
|
|
|
-- Server Variable work.
|
|
local randomPopTime = 75600 + math.randomInt(0, 6) * 1800
|
|
|
|
SetServerVariable('[HNM]Fafnir', GetSystemTime() + randomPopTime) -- Save next pop time.
|
|
|
|
-- Set spawn time and position.
|
|
GetMobByID(dragonsAeryID.mob.FAFNIR):setRespawnTime(randomPopTime)
|
|
xi.mob.updateNMSpawnPoint(dragonsAeryID.mob.FAFNIR)
|
|
end)
|
|
|
|
hnmSystem:addOverride('xi.zones.Dragons_Aery.npcs.qm0.onTrade', function(player, npc, trade)
|
|
if
|
|
not GetMobByID(dragonsAeryID.mob.FAFNIR):isSpawned() and
|
|
not GetMobByID(dragonsAeryID.mob.NIDHOGG):isSpawned() and
|
|
npcUtil.tradeHasExactly(trade, xi.item.CUP_OF_SWEET_TEA) and
|
|
npcUtil.popFromQM(player, npc, dragonsAeryID.mob.NIDHOGG)
|
|
then
|
|
player:confirmTrade()
|
|
end
|
|
end)
|
|
|
|
-----------------------------------
|
|
-- Valley of Sorrows: Adamantoise, Aspidochelone
|
|
-----------------------------------
|
|
hnmSystem:addOverride('xi.zones.Valley_of_Sorrows.Zone.onInitialize', function(zone)
|
|
super(zone)
|
|
|
|
local hnmPopTime = GetServerVariable('[HNM]Adamantoise') -- Time the NM will spawn at.
|
|
local currentTime = GetSystemTime()
|
|
|
|
-- First-time setup.
|
|
if hnmPopTime == 0 then
|
|
hnmPopTime = currentTime + math.randomInt(1, 48) * 1800
|
|
|
|
SetServerVariable('[HNM]Adamantoise', hnmPopTime) -- Save pop time.
|
|
end
|
|
|
|
xi.mob.updateNMSpawnPoint(valleySorrowsID.mob.ADAMANTOISE)
|
|
|
|
-- Spawn mob or set spawn time.
|
|
if hnmPopTime <= currentTime then
|
|
SpawnMob(valleySorrowsID.mob.ADAMANTOISE)
|
|
else
|
|
GetMobByID(valleySorrowsID.mob.ADAMANTOISE):setRespawnTime(hnmPopTime - currentTime)
|
|
end
|
|
end)
|
|
|
|
hnmSystem:addOverride('xi.zones.Valley_of_Sorrows.mobs.Adamantoise.onMobDespawn', function(mob)
|
|
super(mob)
|
|
|
|
-- Server Variable work.
|
|
local randomPopTime = 75600 + math.randomInt(0, 6) * 1800
|
|
|
|
SetServerVariable('[HNM]Adamantoise', GetSystemTime() + randomPopTime) -- Save next pop time.
|
|
|
|
-- Set spawn time and position.
|
|
GetMobByID(valleySorrowsID.mob.ADAMANTOISE):setRespawnTime(randomPopTime)
|
|
xi.mob.updateNMSpawnPoint(valleySorrowsID.mob.ADAMANTOISE)
|
|
end)
|
|
|
|
hnmSystem:addOverride('xi.zones.Valley_of_Sorrows.npcs.qm1.onTrade', function(player, npc, trade)
|
|
if
|
|
not GetMobByID(valleySorrowsID.mob.ADAMANTOISE):isSpawned() and
|
|
not GetMobByID(valleySorrowsID.mob.ASPIDOCHELONE):isSpawned() and
|
|
npcUtil.tradeHasExactly(trade, xi.item.CLUMP_OF_RED_PONDWEED) and
|
|
npcUtil.popFromQM(player, npc, valleySorrowsID.mob.ASPIDOCHELONE)
|
|
then
|
|
player:confirmTrade()
|
|
end
|
|
end)
|
|
|
|
-----------------------------------
|
|
-- Behemoth's Dominion: Behemoth, King Behemoth
|
|
-----------------------------------
|
|
hnmSystem:addOverride('xi.zones.Behemoths_Dominion.Zone.onInitialize', function(zone)
|
|
super(zone)
|
|
|
|
local hnmPopTime = GetServerVariable('[HNM]Behemoth') -- Time the NM will spawn at.
|
|
local currentTime = GetSystemTime()
|
|
|
|
-- First-time setup.
|
|
if hnmPopTime == 0 then
|
|
hnmPopTime = currentTime + math.randomInt(1, 48) * 1800
|
|
|
|
SetServerVariable('[HNM]Behemoth', hnmPopTime) -- Save pop time.
|
|
end
|
|
|
|
xi.mob.updateNMSpawnPoint(behemothDomID.mob.BEHEMOTH)
|
|
|
|
-- Spawn mob or set spawn time.
|
|
if hnmPopTime <= currentTime then
|
|
SpawnMob(behemothDomID.mob.BEHEMOTH)
|
|
else
|
|
GetMobByID(behemothDomID.mob.BEHEMOTH):setRespawnTime(hnmPopTime - currentTime)
|
|
end
|
|
end)
|
|
|
|
hnmSystem:addOverride('xi.zones.Behemoths_Dominion.mobs.Behemoth.onMobDespawn', function(mob)
|
|
super(mob)
|
|
|
|
-- Server Variable work.
|
|
local randomPopTime = 75600 + math.randomInt(0, 6) * 1800
|
|
|
|
SetServerVariable('[HNM]Behemoth', GetSystemTime() + randomPopTime) -- Save next pop time.
|
|
|
|
-- Set spawn time and position.
|
|
GetMobByID(behemothDomID.mob.BEHEMOTH):setRespawnTime(randomPopTime)
|
|
xi.mob.updateNMSpawnPoint(behemothDomID.mob.BEHEMOTH)
|
|
end)
|
|
|
|
hnmSystem:addOverride('xi.zones.Behemoths_Dominion.npcs.qm2.onTrade', function(player, npc, trade)
|
|
if
|
|
not GetMobByID(behemothDomID.mob.BEHEMOTH):isSpawned() and
|
|
not GetMobByID(behemothDomID.mob.KING_BEHEMOTH):isSpawned() and
|
|
npcUtil.tradeHasExactly(trade, xi.item.SAVORY_SHANK) and
|
|
npcUtil.popFromQM(player, npc, behemothDomID.mob.KING_BEHEMOTH)
|
|
then
|
|
player:confirmTrade()
|
|
end
|
|
end)
|
|
|
|
return hnmSystem
|