105 lines
3.6 KiB
Lua
105 lines
3.6 KiB
Lua
-----------------------------------
|
|
-- Alter Ego Extravaganza
|
|
-----------------------------------
|
|
require('scripts/globals/npc_util')
|
|
-----------------------------------
|
|
xi = xi or {}
|
|
xi.extravaganza = {}
|
|
|
|
---@enum xi.extravaganza.campaign
|
|
xi.extravaganza.campaign =
|
|
{
|
|
NONE = 0,
|
|
SUMMER_NY = 1,
|
|
SPRING_FALL = 2,
|
|
BOTH = 3,
|
|
}
|
|
|
|
---@return xi.extravaganza.campaign
|
|
xi.extravaganza.campaignActive = function()
|
|
-- Extravaganza NPCs are currently not present in the client. This function is disabled until
|
|
-- such a time that they are reintroduced, or confirmed to be permanently removed. If this changes,
|
|
-- return to using xi.settings.main.ENABLE_TRUST_ALTER_EGO_EXTRAVAGANZA
|
|
|
|
return xi.extravaganza.campaign.NONE
|
|
end
|
|
|
|
-----------------------------------
|
|
-- Determine Which Ciphers to Grant by NPC Name
|
|
-----------------------------------
|
|
|
|
xi.extravaganza.getShadowEraCiphers = function(npc)
|
|
local cipherNpcs =
|
|
{
|
|
['Shixo'] = { xi.item.CIPHER_OF_NOILLURIES_ALTER_EGO, xi.item.CIPHER_OF_LEONOYNES_ALTER_EGO },
|
|
['Shenni'] = { xi.item.CIPHER_OF_ELIVIRAS_ALTER_EGO, xi.item.CIPHER_OF_MAXIMILIANS_ALTER_EGO },
|
|
['Shuvo'] = { xi.item.CIPHER_OF_LHUS_ALTER_EGO, xi.item.CIPHER_OF_KAYEELS_ALTER_EGO },
|
|
}
|
|
return cipherNpcs[npc:getName()]
|
|
end
|
|
|
|
-----------------------------------
|
|
-- Check if Extravaganza is active, hide [S] vendors if inactive
|
|
-----------------------------------
|
|
|
|
xi.extravaganza.shadowEraHide = function(npcId)
|
|
if type(npcId) == 'number' then
|
|
local active = xi.extravaganza.campaignActive()
|
|
local npc = GetNPCByID(npcId)
|
|
if
|
|
(active == xi.extravaganza.campaign.NONE or
|
|
active == xi.extravaganza.campaign.SPRING_FALL) and
|
|
xi.settings.main.ENABLE_WOTG == 1 and
|
|
npc
|
|
then
|
|
npc:setStatus(xi.status.DISAPPEAR)
|
|
end
|
|
end
|
|
end
|
|
|
|
-----------------------------------
|
|
-- Check if Extravaganza is Active, set Ciphers, Launch CS
|
|
-----------------------------------
|
|
|
|
xi.extravaganza.shadowEraTrigger = function(player, npc, notes)
|
|
local active = xi.extravaganza.campaignActive()
|
|
if
|
|
active == xi.extravaganza.campaign.SUMMER_NY or
|
|
active == xi.extravaganza.campaign.BOTH
|
|
then
|
|
local cipherids = xi.extravaganza.getShadowEraCiphers(npc)
|
|
player:setLocalVar('ShadowCipher1', cipherids[1])
|
|
player:setLocalVar('ShadowCipher2', cipherids[2])
|
|
player:startEvent(7300, 0, notes, 6)
|
|
end
|
|
end
|
|
|
|
-----------------------------------
|
|
-- Pull Cipher IDs out of local vars between functions
|
|
-- Choose the right cipher depending on Menu Option
|
|
-----------------------------------
|
|
|
|
xi.extravaganza.shadowEraFinish = function(player, csid, option, npc)
|
|
local ID = zones[player:getZoneID()]
|
|
local notes = player:getCurrency('allied_notes')
|
|
local cipherid = { player:getLocalVar('ShadowCipher1'), player:getLocalVar('ShadowCipher2') }
|
|
local choice = 0
|
|
|
|
if csid == 7300 then -- All 3 Shadow Era Cipher vendors share the same CSID and options
|
|
if option == 65537 then -- First Cipher
|
|
choice = 1
|
|
elseif option == 131073 then -- Second Cipher
|
|
choice = 2
|
|
end
|
|
|
|
if option == 65537 or option == 131073 then
|
|
if notes >= 1000 then
|
|
if npcUtil.giveItem(player, cipherid[choice]) then
|
|
player:delCurrency('allied_notes', 1000)
|
|
end
|
|
elseif notes < 1000 then
|
|
player:messageSpecial(ID.text.NOT_ENOUGH_NOTES)
|
|
end
|
|
end
|
|
end
|
|
end
|