Skip to content

Boss Rewards

The OnMonsterDie hook fires when any monster dies. Use it to add custom rewards and announcements for boss kills.

Server-Wide Boss Kill Announcement

local BOSS_CLASSES = {
    [275] = "Kundun",
    [149] = "Golden Budge Dragon",
    [43]  = "Red Dragon",
}

local function OnMonsterDie(aIndex, bIndex)
    local monster = GetUser(aIndex)
    local killer = GetUser(bIndex)
    if monster == nil or killer == nil then return 0 end

    local bossName = BOSS_CLASSES[monster.Class]
    if bossName then
        GCNoticeSendToAll(0, killer.Name .. " has defeated " .. bossName .. "!")
        LogAdd(LOG_GREEN, "[Boss] " .. bossName .. " killed by " .. killer.Name)
    end

    return 0  -- Allow normal loot processing
end

BridgeFunctionAttach("OnMonsterDie", OnMonsterDie)

Boss Kill with Extra Rewards

local BOSS_REWARDS = {
    [275] = { zen = 1000000, item = GET_ITEM(14, 13), qty = 3 },  -- Kundun: 1M zen + 3 JoB
    [43]  = { zen = 500000,  item = GET_ITEM(14, 14), qty = 1 },  -- Red Dragon: 500k + 1 JoS
}

local function OnMonsterDie(aIndex, bIndex)
    local monster = GetUser(aIndex)
    local killer = GetUser(bIndex)
    if monster == nil or killer == nil then return 0 end

    local reward = BOSS_REWARDS[monster.Class]
    if reward == nil then return 0 end

    -- Give Zen reward
    gObjCharacterAddZen(killer, reward.zen, true)

    -- Give item rewards
    for i = 1, reward.qty do
        ItemGiveEx(bIndex, reward.item, 0, 0, 0, 0, 0, 0)
    end

    GCNoticeSend(bIndex, 1, "Boss reward: " .. reward.zen .. " Zen + " .. reward.qty .. " item(s)!")

    return 0
end

BridgeFunctionAttach("OnMonsterDie", OnMonsterDie)

Party Boss Rewards

local PARTY_BOSS_CLASS = 275  -- Kundun

local function OnMonsterDie(aIndex, bIndex)
    local monster = GetUser(aIndex)
    local killer = GetUser(bIndex)
    if monster == nil or killer == nil then return 0 end
    if monster.Class ~= PARTY_BOSS_CLASS then return 0 end

    -- If killer is in a party, reward all members
    if IsParty(killer) then
        for i = 0, 4 do
            local memberIdx = GetMemberIndex(killer, i)
            if memberIdx ~= -1 and gObjIsConnectedGP(memberIdx) then
                gObjCharacterAddZen(GetUser(memberIdx), 500000, true)
                GCNoticeSend(memberIdx, 1, "Party boss reward: 500,000 Zen!")
            end
        end
    else
        -- Solo kill: bigger reward
        gObjCharacterAddZen(killer, 1000000, true)
        GCNoticeSend(bIndex, 1, "Solo boss reward: 1,000,000 Zen!")
    end

    GCNoticeSendToAll(0, killer.Name .. " has defeated Kundun!")
    return 0
end

BridgeFunctionAttach("OnMonsterDie", OnMonsterDie)