Back to Home

ESO Lua File v100018

ingame/zo_loot/loot_shared.lua

[◄ back to folders ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
LOOT_MONEY_ICON = "EsoUI/Art/Icons/Item_Generic_CoinBag.dds"
LOOT_TELVAR_STONE_ICON = "EsoUI/Art/Icons/Icon_TelVarStone.dds"
LOOT_ALLIANCE_POINT_ICON = "EsoUI/Art/Icons/Icon_AlliancePoints.dds"
LOOT_EXPERIENCE_ICON = "EsoUI/Art/Icons/Icon_Experience.dds"
LOOT_GEMS_ICON = "EsoUI/Art/Icons/store_crownGem.dds"
LOOT_WRIT_VOUCHER_ICON = "EsoUI/Art/Icons/Icon_WritVoucher.dds"
ZO_LootScene = ZO_Scene:Subclass()
function ZO_LootScene:New(...)
    return ZO_Scene.New(self, ...)
end
function ZO_LootScene:OnRemovedFromQueue()
    EndLooting()
end
local ZO_Loot_Shared = ZO_Object:Subclass()
function ZO_Loot_Shared:New(...)
    local loot = ZO_Object.New(self)
    loot:Initialize(...)
    return loot
end
function ZO_Loot_Shared:Initialize(control)
    self.control = control
    local function UpdateLootWindow()
        local name, targetType, actionName, isOwned = GetLootTargetInfo()
        if name ~= "" then
            if targetType == INTERACT_TARGET_TYPE_ITEM then
                name = zo_strformat(SI_TOOLTIP_ITEM_NAME, name)
            elseif targetType == INTERACT_TARGET_TYPE_OBJECT then
                name = zo_strformat(SI_LOOT_OBJECT_NAME, name)
            elseif targetType == INTERACT_TARGET_TYPE_FIXTURE then
                name = zo_strformat(SI_TOOLTIP_FIXTURE_INSTANCE, name)
            end
        end
        SYSTEMS:GetObject("loot"):UpdateLootWindow(name, actionName, isOwned)
    end
    local function OnLootReceived(eventCode, receivedBy, objectName, stackCount, soundCategory, lootType, lootedBySelf, questIcon)
        if (not lootedBySelf) then 
            return 
        end
        -- Real item sound hooks are handled by the inventory.
        if(lootType == LOOT_TYPE_QUEST_ITEM) then
            if(soundCategory ~= ITEM_SOUND_CATEGORY_NONE) then
                PlayItemSound(soundCategory, ITEM_SOUND_ACTION_ACQUIRE)
            end
        end
    end
    local function CloseLootWindow() -- Called when C++ is telling us to close the window. Don't call CloseLoot.
        self:Hide()
        local CLOSE_LOOT_WINDOW = true
        ZO_PlayMonsterLootSound(CLOSE_LOOT_WINDOW)
    end
    local function LootItemFailed(eventCode, reason, itemName)
        if(reason == LOOT_ITEM_RESULT_INVENTORY_FULL or reason == LOOT_ITEM_RESULT_INVENTORY_FULL_LOOT_ALL) then
            TriggerTutorial(TUTORIAL_TRIGGER_INVENTORY_FULL)
        end
        ZO_Alert(UI_ALERT_CATEGORY_ERROR, SOUNDS.NEGATIVE_CLICK, zo_strformat(GetString("SI_LOOTITEMRESULT", reason), itemName))
    end
    local function OnPlayerDeath()
        EndInteraction(INTERACTION_LOOT)
    end
    local EvtMgr = GetEventManager()
    EvtMgr:RegisterForEvent("LOOT_SHARED", EVENT_LOOT_UPDATED, UpdateLootWindow)
    EvtMgr:RegisterForEvent("LOOT_SHARED", EVENT_LOOT_RECEIVED, OnLootReceived)
    EvtMgr:RegisterForEvent("LOOT_SHARED", EVENT_LOOT_CLOSED, CloseLootWindow)
    EvtMgr:RegisterForEvent("LOOT_SHARED", EVENT_LOOT_ITEM_FAILED, LootItemFailed)
    EvtMgr:RegisterForEvent("LOOT_SHARED", EVENT_PLAYER_DEAD, OnPlayerDeath)
end
function ZO_Loot_Shared:Hide()
    SYSTEMS:GetObject("loot"):Hide()
end
function ZO_Loot_Shared:LootAllItems()
    LootAll(SYSTEMS:GetObject("loot"):AreNonStolenItemsPresent())
end
--[[ Globals ]]--
LOOT_SHARED = ZO_Loot_Shared:New(control)
function ZO_PlayMonsterLootSound(isOpen)
    local isMonster = IsGameCameraInteractableUnitMonster()
    if isMonster then
        local audioModelType, audioModelMaterial, audioModelSize = GetGameCameraInteractableUnitAudioInfo()
        PlayLootSound(audioModelType, isOpen)
    end
end