In this event, players will have to fight their way to the top of a designated hill or area and hold their position against other players. The player who manages to hold their position for the longest time wins.
Code:
local KING_OF_THE_HILL_NPC_ENTRY = 60000
local KING_OF_THE_HILL_ZONE_ID = 0
local KING_OF_THE_HILL_AREA_ID = 0
local KING_OF_THE_HILL_DURATION = 300
local KING_OF_THE_HILL_REWARD_ITEM = 0
local kingOfTheHillActive = false
local kingOfTheHillPlayer = nil
local kingOfTheHillTimer = 0
local function KingOfTheHillUpdate()
if kingOfTheHillActive and kingOfTheHillPlayer then
kingOfTheHillTimer = kingOfTheHillTimer - 1
if kingOfTheHillTimer <= 0 then
kingOfTheHillPlayer:AddItem(KING_OF_THE_HILL_REWARD_ITEM, 1)
kingOfTheHillPlayer:SendBroadcastMessage("Congratulations! You have won the King of the Hill event!")
kingOfTheHillActive = false
kingOfTheHillPlayer = nil
end
end
end
local function KingOfTheHillOnAreaChange(event, player, newArea, newZone)
if not kingOfTheHillActive then return end
if newZone == KING_OF_THE_HILL_ZONE_ID and newArea == KING_OF_THE_HILL_AREA_ID then
if not kingOfTheHillPlayer or kingOfTheHillPlayer:GetGUIDLow() ~= player:GetGUIDLow() then
kingOfTheHillPlayer = player
kingOfTheHillTimer = KING_OF_THE_HILL_DURATION
player:SendBroadcastMessage("You are now the King of the Hill! Hold your position to win the event!")
end
end
end
local function KingOfTheHillOnGossipHello(event, player, creature)
if kingOfTheHillActive then
player:SendBroadcastMessage("The King of the Hill event is already in progress!")
else
kingOfTheHillActive = true
player:SendBroadcastMessage("The King of the Hill event has started! Get to the designated area and hold your position!")
end
player:GossipComplete()
end
RegisterCreatureGossipEvent(KING_OF_THE_HILL_NPC_ENTRY, 1, KingOfTheHillOnGossipHello)
RegisterPlayerEvent(27, KingOfTheHillOnAreaChange)
local function KingOfTheHillOnUpdate(event, delay)
KingOfTheHillUpdate()
end
RegisterServerEvent(0, KingOfTheHillOnUpdate)