From 77203bca4c7d127c1f748cb676622477cbab3528 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Sat, 16 Sep 2017 13:19:10 -0400 Subject: [PATCH] Fixed multiparams not being returned on CallClientFunction(). Was due to bad merge. Added Jorge's scripts. --- .../npc/populace/PopulaceBlackMarketeer.lua | 188 +++++- .../npc/populace/PopulaceCompanyOfficer.lua | 77 +++ .../npc/populace/PopulaceCompanyShop.lua | 546 ++++++++++++++++++ .../npc/populace/PopulaceCompanyWarp.lua | 110 +++- .../npc/populace/PopulaceLinkshellManager.lua | 5 + data/scripts/global.lua | 3 +- 6 files changed, 905 insertions(+), 24 deletions(-) create mode 100644 data/scripts/base/chara/npc/populace/PopulaceCompanyOfficer.lua create mode 100644 data/scripts/base/chara/npc/populace/PopulaceCompanyShop.lua diff --git a/data/scripts/base/chara/npc/populace/PopulaceBlackMarketeer.lua b/data/scripts/base/chara/npc/populace/PopulaceBlackMarketeer.lua index 2015e023..9a3a30db 100644 --- a/data/scripts/base/chara/npc/populace/PopulaceBlackMarketeer.lua +++ b/data/scripts/base/chara/npc/populace/PopulaceBlackMarketeer.lua @@ -4,34 +4,190 @@ PopulaceBlackMarketeer Script Functions: -eventTalkWelcome(player) - Start Text -eventSellItemAsk(player, ?, ?) -eventAskMainMenu(player, index) - Shows -eventTalkBye(player) - Says bye text -eventTalkStepBreak() - Ends talk +eventTalkWelcome(player) - Start Text +eventSellItemAsk(player, itemName, tradePrice) - Requires GC Affiliation. Trade menu for Commemorative Coin +eventAskMainMenu(player, index) - Shows menu prompt to purchase with gil or with GC seals +eventTalkBye(player) - Says bye text +eventTalkStepBreak() - Ends talk, NPC turns to face original position -eventSealShopMenuOpen() - -eventSealShopMenuAsk() - -eventSealShopMenuClose() - -eventGilShopMenuOpen() - -eventGilShopMenuAsk() - -eventGilShopMenuClose() - +eventSealShopMenuOpen() - Opens menu for purchasing with grand company seals +eventSealShopMenuAsk() - Returns two values, one that seems to always be true, and an index of purchased item +eventSealShopMenuClose() - Closes seal menu +eventGilShopMenuOpen() - Opens menu for purchasing with gil +eventGilShopMenuAsk() - Returns two values, one that seems to always be true, and an index of purchased item +eventGilShopMenuClose() - Closes gil menu + +Class applies to only three NPCs +Actorclass Id - 1500293 : Momoroon, Limsa Lominsa +Actorclass Id - 1500294 : Gagaroon, Gridania +Actorclass Id - 1500295 : Lalaroon, Ul'dah --]] require ("global") +shopInfo = { -- [ index ] = { itemId, gilPrice, sealPrice, city, itemCategory } +[1001] = {3020202, 100, 10000, 1, 1}, +[1002] = {3020509, 400, 40000, 1, 1}, +[1003] = {3020510, 400, 40000, 1, 1}, +[1004] = {3020504, 1000, 100000, 1, 1}, +[1005] = {3020505, 1000, 100000, 1, 1}, +[1101] = {9040018, 1500, 150000, 1, 2}, +[1102] = {9010025, 2000, 200000, 1, 2}, +[1301] = {2001014, 4000, 400000, 1, 4}, +[2001] = {3020203, 100, 10000, 2, 1}, +[2002] = {3020509, 400, 40000, 2, 1}, +[2003] = {3020510, 400, 40000, 2, 1}, +[2004] = {3020504, 1000, 100000, 2, 1}, +[2005] = {3020505, 1000, 100000, 2, 1}, +[2101] = {9040018, 1500, 150000, 2, 2}, +[2102] = {9010025, 2000, 200000, 2, 2}, +[2301] = {2001015, 4000, 400000, 2, 4}, +[3001] = {3020204, 100, 10000, 3, 1}, +[3002] = {3020509, 400, 40000, 3, 1}, +[3003] = {3020510, 400, 40000, 3, 1}, +[3004] = {3020504, 1000, 100000, 3, 1}, +[3005] = {3020505, 1000, 100000, 3, 1}, +[3101] = {9040018, 1500, 150000, 3, 2}, +[3102] = {9010025, 2000, 200000, 3, 2}, +[3301] = {2001016, 4000, 400000, 3, 4}, +} + function init(npc) return false, false, 0, 0; end function onEventStarted(player, npc, triggerName) - + + commemorativeCoin = 10011251; + commemorativeCoinValue = 25000; + gilCurrency = 1000001; + playerGC = player.gcCurrent + playerGCSeal = 1000200 + playerGC; + callClientFunction(player, "eventTalkWelcome", player); - currancyType = callClientFunction(player, "eventAskMainMenu", player); - callClientFunction(player, "eventSealShopMenuAsk", player); - - + if player:GetInventory(INVENTORY_NORMAL):HasItem(commemorativeCoin) and playerGC > 0 then + -- Checks for player having a commemorative coin, show window trade option if so. + coinChoice = callClientFunction(player, "eventSellItemAsk", player, commemorativeCoin, commemorativeCoinValue); + if coinChoice == 1 then + currencyType = callClientFunction(player, "eventAskMainMenu", player); + elseif coinChoice == 2 then + -- You trade for . + player:SendGameMessage(player, GetWorldMaster(), 25071, MESSAGE_TYPE_SYSTEM, commemorativeCoin, 1, playerGCSeal, 1, 1, commemorativeCoinValue); + player:GetInventory(INVENTORY_NORMAL):RemoveItem(commemorativeCoin, 1); + player:getInventory(INVENTORY_CURRENCY):addItem(playerGCSeal, 25000, 1) + -- TODO: Add handling for checking GC seals limit and not going over it + end + else + -- If no grand company alignment, go straight to the shop that uses gil, otherwise show gc seal option. + if playerGC == 0 then + processGilShop(player); + else + currencyType = callClientFunction(player, "eventAskMainMenu", player); + if currencyType == 1 then + processGilShop(player); + elseif currencyType == 2 then + processSealShop(player); + end + end + end + + callClientFunction(player, "eventTalkBye", player); + callClientFunction(player, "eventTalkStepBreak", player); player:EndEvent(); +end + + +function processGilShop(player) + + callClientFunction(player, "eventGilShopMenuOpen", player); + + while (true) do + unk1, buyResult = callClientFunction(player, "eventGilShopMenuAsk", player); + printf(unk1); + if (buyResult == 0 or buyResult == -1) then + callClientFunction(player, "eventGilShopMenuClose", player); + break; + else + if shopInfo[buyResult] == nil then + -- Prevent server crash from someone trying to buy a non-existent item via packet injection. + break; + else + -- TODO: Add handling to check you're on the right NPC to prevent packet injecting a purchase from anything in the list + if shopInfo[buyResult][5] == 4 then + location = INVENTORY_KEYITEMS; + else + location = INVENTORY_NORMAL; + end + + purchaseItem(player, shopInfo[buyResult][1], 1, 1, shopInfo[buyResult][3], gilCurrency, location); + end + end + end +end + + +function processSealShop(player) + + callClientFunction(player, "eventSealShopMenuOpen", player); + + while (true) do + unk1, buyResult = callClientFunction(player, "eventSealShopMenuAsk", player); + + if (buyResult == 0 or buyResult == -1) then + callClientFunction(player, "eventSealShopMenuClose", player); + break; + else + if shopInfo[buyResult] == nil then + -- Prevent server crash from someone trying to buy a non-existent item via packet injection. + break; + else + -- TODO: Add handling to check you're on the right NPC to prevent packet injecting a purchase from anything in the list + if shopInfo[buyResult][5] == 4 then + location = INVENTORY_KEYITEMS; + else + location = INVENTORY_NORMAL; + end + + purchaseItem(player, shopInfo[buyResult][1], 1, 1, shopInfo[buyResult][2], playerGCSeal, location); + end + end + end +end + +function purchaseItem(player, itemId, quantity, quality, price, currency, location) + + local worldMaster = GetWorldMaster(); + local cost = quantity * price; + local gItemData = GetItemGamedata(itemId); + local isUnique = gItemData.isRare; + + if player:GetInventory(location):HasItem(itemId) and isUnique then + -- You cannot have more than one in your possession at any given time. + player:SendGameMessage(player, worldMaster, 40279, MESSAGE_TYPE_SYSTEM, itemId, quality); + return; + end + + if (not player:GetInventory(location):IsFull() or player:GetInventory(location):IsSpaceForAdd(itemId, quantity)) then + if player:GetInventory(INVENTORY_CURRENCY):HasItem(currency, cost) then + player:GetInventory(INVENTORY_CURRENCY):removeItem(currency, cost) + player:GetInventory(location):AddItem(itemId, quantity, quality); + if currency == 1000001 then + -- You purchase for gil. + player:SendGameMessage(player, worldMaster, 25061, MESSAGE_TYPE_SYSTEM, itemId, quality, quantity, cost); + elseif currency == 1000201 or currency == 1000202 or currency == 1000203 then + -- You exchange for . + player:SendGameMessage(player, GetWorldMaster(), 25275, MESSAGE_TYPE_SYSTEM, itemId, quality, quantity, price, player.gcCurrent); + + end + else + -- You do not have enough gil. (Should never see this aside from packet injection, since client prevents buying if not enough currency) + player:SendGameMessage(player, worldMaster, 25065, MESSAGE_TYPE_SYSTEM); + end + else + -- Your inventory is full. + player:SendGameMessage(player, worldMaster, 60022, MESSAGE_TYPE_SYSTEM); + end + return end \ No newline at end of file diff --git a/data/scripts/base/chara/npc/populace/PopulaceCompanyOfficer.lua b/data/scripts/base/chara/npc/populace/PopulaceCompanyOfficer.lua new file mode 100644 index 00000000..9197354e --- /dev/null +++ b/data/scripts/base/chara/npc/populace/PopulaceCompanyOfficer.lua @@ -0,0 +1,77 @@ +--[[ + +PopulaceCompanyOfficer Script + +xtx_gcRank for GC Rank values + +Functions: + +eventTalkWelcome() - Welcome dialog +eventTalkWelcomeQuest() - Same as Welcome dialog? +eventTalkPreJoin() - Dialog for starting GC rank? +eventTalkExclusive() - Dialog to play when you're not of that GC? +eventTalkJoinedOnly() - Reads like chat-end dialog for your GC. +eventTalkJoined(gcRank, gcRank, isCanAfford, isShowPromotion) - Menu to ask about/for promotion + +eventDoRankUp(gcRank, gcRank) - Plays rank-up animation and opens GC window. +eventRankUpDone(???, ???) - Has your character do the GC salute? Values seem to do nothing? +eventRankCategoryUpBefore(gcRank) - 11/21/31 - Mentions which GC quest you need to clear to continue promotion +eventRankCategoryUpAfter() - Follow-up dialog after ranking up +eventTalkQuestUncomplete() - Quest prerequisite dialog for ranking up to Second Lieutenant (1.23b rank cap) +eventTalkFestival() - Foundation Day 2011 event dialog. Server needs to reward 1000 GC seals after. +eventTalkFestival2() - Foundation Day 2011 event dialog. Seems to reward more seals, unsure how many. +eventTalkFestival2012(value) - Foundation Day 2012 event dialog. Rewards amount of seals dictated by value, retail used 5000. + +eventTalkStepBreak() - Resets NPC target/facing +--]] + +require ("global") + +function init(npc) + return false, false, 0, 0; +end + +gcOfficer = { +[1500199] = 1, -- Limsa Officer +[1500200] = 2, -- Grid Officer +[1500198] = 3, -- Flame Officer +} + +function onEventStarted(player, npc, triggerName) + + playerGC = player.gcCurrent; + playerGCSeal = 1000200 + playerGC; + playerCurrentRank = 13; + playerRankUpCost = 1500; + playerNextRank = 15; + currentRankCap = 31; -- Second Lieutenant + npcId = npc:GetActorClassId(); + + if playerGC == gcOfficer[npcId] then + callClientFunction(player, "eventTalkWelcome"); + if playerCurrentRank < currentRankCap then + if player:GetInventory(INVENTORY_CURRENCY):HasItem(playerGCSeal, playerRankUpCost) then + -- Show Promotion window, allow paying + local choice = callClientFunction(player, "eventTalkJoined", playerCurrentRank, playerNextRank, true, true); + + -- If promotion accepted + if choice == 1 then + callClientFunction(player, "eventDoRankUp", playerNextRank, playerNextRank); + -- TODO: Table GC info or get it in source/sql. Handle actual upgrade of GC rank/seal cap/cost/etc. + end + + else + -- Show Promotion window, show dialog you can't afford promotion + callClientFunction(player, "eventTalkJoined", playerCurrentRank, playerNextRank, false, true); + end + else + callClientFunction(player, "eventTalkJoined", playerCurrentRank, playerNextRank); + end + + callClientFunction(player, "eventTalkJoinedOnly"); + else + callClientFunction(player, "eventTalkExclusive"); + end + callClientFunction(player, "eventTalkStepBreak"); + player:endEvent(); +end \ No newline at end of file diff --git a/data/scripts/base/chara/npc/populace/PopulaceCompanyShop.lua b/data/scripts/base/chara/npc/populace/PopulaceCompanyShop.lua new file mode 100644 index 00000000..d82765c4 --- /dev/null +++ b/data/scripts/base/chara/npc/populace/PopulaceCompanyShop.lua @@ -0,0 +1,546 @@ +--[[ + +PopulaceCompanyShop Script + + +Functions: + +eventTalkStepCantUse() -- When player tries to buy from another GC's shop +eventTalkPreJoin() -- Dialog for the shop +eventTalkPreJoinQuest() -- Tutorial dialog for the shop? +eventTalkJoined(???) -- Dialog for the shop, they salute. Orphaned parameter? + +eventTalkFestival() -- Festival Day Event Dialog +eventTalkFestival2() -- Festival Day Event Follow-up Dialog + +eventTalkMainMenu(???, ???) -- Shop menu for picking GC items +eventShopMenuOpen() -- Sets up shop menu. Calls getSpecialEventWork, value 8 shows GC firework & 11 a Patriot's Choker +eventShopMenuAsk() -- Opens up the shop menu. +eventShopMenuClose() + +eventGuideChocoboWhistle(???) -- Tutorial dialog after purchasing Chocobo issuance slip. Orphaned parameter? +eventGuideTownTransport(index) -- Tutorial dialog after purchasing an aetherpass. Index is item ID. +eventAskChocoboCustomize(index, price) -- Chocobo Barding purchase dialog. Index is item ID. +eventChocoboCustomize() -- Follow-up dialog if you purchase Chocobo Barding. + +getGrandCompanyNumber() -- Returns GC value of the NPC +getShopItemStartIndex(index) -- Gets starting index value based on GC shop +getShopItemEndIndex(index) -- Gets ending index value based on GC shop +getShopSellingItemMax(???) -- +getShopSellingItemDetail(player, ???, ???) + +eventTalkStepBreak() -- Returns NPC to their starting direction +--]] + +require ("global") + +function init(npc) + return false, false, 0, 0; +end + +gcOfficer = { +[1500202] = 1, -- Limsa Shop +[1500203] = 2, -- Grid Shop +[1500201] = 3, -- Flame Shop +} + +shopInfo = { -- [index] = { itemID, itemQuality, itemQuantity, itemCost gcRank, city, special, itemCategory } +[100001] = {3010403, 1, 10, 20, 0, 1, 0, 1}, +[100002] = {3010402, 1, 10, 30, 0, 1, 0, 1}, +[100003] = {3020202, 1, 1, 50, 0, 1, 0, 1}, +[100004] = {3020406, 1, 20, 10, 0, 1, 0, 1}, +[100005] = {3020403, 1, 10, 15, 0, 1, 0, 1}, +[100006] = {3020402, 1, 5, 60, 0, 1, 0, 1}, +[100007] = {3020404, 1, 5, 100, 0, 1, 0, 1}, +[100008] = {3020528, 1, 5, 50, 0, 1, 0, 1}, +[100009] = {3020516, 1, 5, 50, 0, 1, 0, 1}, +[100010] = {3020411, 1, 1, 15, 0, 1, 0, 1}, +[100011] = {3020412, 1, 1, 200, 0, 1, 0, 1}, +[100012] = {3020509, 1, 1, 200, 0, 1, 0, 1}, +[100013] = {3020510, 1, 1, 200, 0, 1, 0, 1}, +[100014] = {10013001, 1, 20, 5, 0, 1, 0, 1}, +[100015] = {10013002, 1, 20, 25, 0, 1, 0, 1}, +[100016] = {10013003, 1, 20, 45, 0, 1, 0, 1}, +[100017] = {10013004, 1, 20, 100, 0, 1, 0, 1}, +[100018] = {10013005, 1, 20, 150, 0, 1, 0, 1}, +[100019] = {3910402, 1, 99, 85, 0, 1, 0, 1}, +[100020] = {3910103, 1, 99, 120, 0, 1, 0, 1}, +[100021] = {3910203, 1, 99, 120, 0, 1, 0, 1}, +[100022] = {3910305, 1, 99, 85, 0, 1, 0, 1}, +[100023] = {3920004, 1, 999, 50, 0, 1, 0, 1}, +[100024] = {3920006, 1, 999, 70, 0, 1, 0, 1}, +[100025] = {3920003, 1, 999, 115, 0, 1, 0, 1}, +[100026] = {3910005, 1, 99, 75, 0, 1, 0, 1}, +[100027] = {3910006, 1, 99, 90, 0, 1, 0, 1}, +[100028] = {3940011, 1, 20, 20, 0, 1, 0, 1}, +[100029] = {3940010, 1, 20, 30, 0, 1, 0, 1}, +[100030] = {3020504, 1, 1, 400, 15, 1, 0, 1}, +[100031] = {3020505, 1, 1, 400, 15, 1, 0, 1}, +[100032] = {3020506, 1, 1, 300, 31, 1, 0, 1}, +[101001] = {4040010, 1, 1, 500, 0, 1, 0, 2}, +[101002] = {4040110, 1, 1, 1000, 0, 1, 0, 2}, +[101003] = {4040205, 1, 1, 1400, 0, 1, 0, 2}, +[101004] = {4040305, 1, 1, 3000, 0, 1, 0, 2}, +[101005] = {4040204, 1, 1, 4000, 0, 1, 0, 2}, +[101006] = {4080304, 1, 1, 950, 0, 1, 0, 2}, +[101007] = {4080211, 1, 1, 1000, 0, 1, 0, 2}, +[101008] = {4080106, 1, 1, 2000, 0, 1, 0, 2}, +[101009] = {4080303, 1, 1, 4000, 0, 1, 0, 2}, +[101010] = {5020010, 1, 1, 900, 0, 1, 0, 2}, +[101011] = {5020209, 1, 1, 1000, 0, 1, 0, 2}, +[101012] = {5020213, 1, 1, 1600, 0, 1, 0, 2}, +[101013] = {5020305, 1, 1, 4000, 0, 1, 0, 2}, +[101014] = {8030350, 1, 1, 750, 0, 1, 0, 2}, +[101015] = {8030447, 1, 1, 750, 0, 1, 0, 2}, +[101016] = {8031223, 1, 1, 750, 0, 1, 0, 2}, +[101017] = {8032008, 1, 1, 750, 0, 1, 0, 2}, +[101018] = {9050029, 1, 1, 900, 0, 1, 0, 2}, +[101019] = {9050044, 1, 1, 1900, 0, 1, 0, 2}, +[101020] = {9040032, 1, 1, 950, 0, 1, 0, 2}, +[101021] = {9040025, 1, 1, 1500, 0, 1, 0, 2}, +[101022] = {8013201, 1, 1, 1000, 11, 1, 0, 2}, +[101023] = {8032601, 1, 1, 1000, 11, 1, 0, 2}, +[101024] = {8071301, 1, 1, 1000, 11, 1, 0, 2}, +[101025] = {8081701, 1, 1, 1000, 11, 1, 0, 2}, +[101026] = {8050620, 1, 1, 1200, 11, 1, 0, 2}, +[101027] = {8050243, 1, 1, 1200, 11, 1, 0, 2}, +[101028] = {8050344, 1, 1, 1200, 11, 1, 0, 2}, +[101029] = {8050028, 1, 1, 1200, 11, 1, 0, 2}, +[101030] = {8090706, 1, 1, 1200, 11, 1, 0, 2}, +[101031] = {4030205, 1, 1, 2500, 13, 1, 0, 2}, +[101032] = {4020306, 1, 1, 2500, 13, 1, 0, 2}, +[101033] = {4040014, 1, 1, 2500, 13, 1, 0, 2}, +[101034] = {4080408, 1, 1, 2500, 13, 1, 0, 2}, +[101035] = {4070310, 1, 1, 2500, 13, 1, 0, 2}, +[101036] = {5030307, 1, 1, 2500, 13, 1, 0, 2}, +[101037] = {5020112, 1, 1, 2500, 13, 1, 0, 2}, +[101038] = {4100205, 1, 1, 2000, 13, 1, 0, 2}, +[101039] = {8011609, 1, 1, 3000, 15, 1, 0, 2}, +[101040] = {8032311, 1, 1, 3000, 15, 1, 0, 2}, +[101041] = {8071017, 1, 1, 3000, 15, 1, 0, 2}, +[101042] = {8050132, 1, 1, 3000, 15, 1, 0, 2}, +[101043] = {8081123, 1, 1, 3000, 15, 1, 0, 2}, +[101044] = {4030117, 1, 1, 4500, 17, 1, 0, 2}, +[101045] = {4020210, 1, 1, 4500, 17, 1, 0, 2}, +[101046] = {4040406, 1, 1, 4500, 17, 1, 0, 2}, +[101047] = {4080107, 1, 1, 4500, 17, 1, 0, 2}, +[101048] = {4070108, 1, 1, 4500, 17, 1, 0, 2}, +[101049] = {5030111, 1, 1, 4500, 17, 1, 0, 2}, +[101050] = {5020013, 1, 1, 4500, 17, 1, 0, 2}, +[101051] = {4100405, 1, 1, 4000, 17, 1, 0, 2}, +[101052] = {8011610, 1, 1, 5000, 21, 1, 0, 2}, +[101053] = {8032312, 1, 1, 5000, 21, 1, 0, 2}, +[101054] = {8071018, 1, 1, 5000, 21, 1, 0, 2}, +[101055] = {8050133, 1, 1, 5000, 21, 1, 0, 2}, +[101056] = {8050769, 1, 1, 5000, 21, 1, 0, 2}, +[101057] = {8081124, 1, 1, 5000, 21, 1, 0, 2}, +[101058] = {8080565, 1, 1, 5000, 21, 1, 0, 2}, +[101059] = {8090609, 1, 1, 5000, 21, 1, 0, 2}, +[101060] = {9050021, 1, 1, 1000, 21, 1, 0, 2}, +[101061] = {9050022, 1, 1, 1000, 21, 1, 0, 2}, +[101062] = {9010025, 1, 1, 1000, 21, 1, 0, 2}, +[101063] = {4100804, 1, 1, 5500, 23, 1, 0, 2}, +[101064] = {8013614, 1, 1, 5500, 23, 1, 0, 2}, +[101065] = {8032820, 1, 1, 5500, 23, 1, 0, 2}, +[101066] = {8051516, 1, 1, 5500, 23, 1, 0, 2}, +[101067] = {8071520, 1, 1, 5500, 23, 1, 0, 2}, +[101068] = {9030060, 1, 1, 5500, 23, 1, 0, 2}, +[101069] = {9050067, 1, 1, 5500, 23, 1, 0, 2}, +[101070] = {8013615, 1, 1, 6000, 25, 1, 0, 2}, +[101071] = {8013616, 1, 1, 6000, 25, 1, 0, 2}, +[101072] = {8032821, 1, 1, 6000, 25, 1, 0, 2}, +[101073] = {8071521, 1, 1, 6000, 25, 1, 0, 2}, +[101074] = {8081914, 1, 1, 6000, 25, 1, 0, 2}, +[101075] = {9040065, 1, 1, 6000, 25, 1, 0, 2}, +[101076] = {9010061, 1, 1, 6000, 25, 1, 0, 2}, +[101077] = {4100805, 1, 1, 6500, 27, 1, 0, 2}, +[101078] = {4020408, 1, 1, 6500, 27, 1, 0, 2}, +[101079] = {4040508, 1, 1, 6500, 27, 1, 0, 2}, +[101080] = {4080508, 1, 1, 6500, 27, 1, 0, 2}, +[101081] = {4070408, 1, 1, 6500, 27, 1, 0, 2}, +[101082] = {5030408, 1, 1, 6500, 27, 1, 0, 2}, +[101083] = {5020408, 1, 1, 6500, 27, 1, 0, 2}, +[101084] = {4030604, 1, 1, 25000, 31, 1, 0, 2}, +[101085] = {4020404, 1, 1, 25000, 31, 1, 0, 2}, +[101086] = {4040504, 1, 1, 25000, 31, 1, 0, 2}, +[101087] = {4080504, 1, 1, 25000, 31, 1, 0, 2}, +[101088] = {4070404, 1, 1, 25000, 31, 1, 0, 2}, +[101089] = {5030404, 1, 1, 25000, 31, 1, 0, 2}, +[101090] = {5020404, 1, 1, 25000, 31, 1, 0, 2}, +[101091] = {8013204, 1, 1, 6000, 31, 1, 0, 2}, +[101092] = {8032604, 1, 1, 6000, 31, 1, 0, 2}, +[101093] = {8071304, 1, 1, 6000, 31, 1, 0, 2}, +[101094] = {8081704, 1, 1, 6000, 31, 1, 0, 2}, +[102001] = {3020601, 1, 20, 5, 0, 1, 8, 3}, +[102002] = {9040018, 1, 1, 1000, 11, 1, 11, 3}, +[103001] = {2001004, 1, 1, 3000, 11, 1, 0, 4}, +[103002] = {2001014, 1, 1, 3000, 15, 1, 0, 4}, +[103003] = {2001017, 1, 1, 2000, 21, 1, 0, 4}, +[103004] = {2001018, 1, 1, 3000, 21, 1, 0, 4}, +[103005] = {2001019, 1, 1, 4000, 21, 1, 0, 4}, +[103006] = {2001026, 1, 1, 25000, 27, 1, 0, 4}, +[200001] = {3010403, 1, 10, 20, 0, 2, 0, 1}, +[200002] = {3010402, 1, 10, 30, 0, 2, 0, 1}, +[200003] = {3020203, 1, 1, 50, 0, 2, 0, 1}, +[200004] = {3020406, 1, 20, 10, 0, 2, 0, 1}, +[200005] = {3020403, 1, 10, 15, 0, 2, 0, 1}, +[200006] = {3020402, 1, 5, 60, 0, 2, 0, 1}, +[200007] = {3020404, 1, 5, 100, 0, 2, 0, 1}, +[200008] = {3020528, 1, 5, 50, 0, 2, 0, 1}, +[200009] = {3020516, 1, 5, 50, 0, 2, 0, 1}, +[200010] = {3020411, 1, 1, 15, 0, 2, 0, 1}, +[200011] = {3020412, 1, 1, 200, 0, 2, 0, 1}, +[200012] = {3020509, 1, 1, 200, 0, 2, 0, 1}, +[200013] = {3020510, 1, 1, 200, 0, 2, 0, 1}, +[200014] = {10013001, 1, 20, 5, 0, 2, 0, 1}, +[200015] = {10013002, 1, 20, 25, 0, 2, 0, 1}, +[200016] = {10013003, 1, 20, 45, 0, 2, 0, 1}, +[200017] = {10013004, 1, 20, 100, 0, 2, 0, 1}, +[200018] = {10013005, 1, 20, 150, 0, 2, 0, 1}, +[200019] = {3910402, 1, 99, 85, 0, 2, 0, 1}, +[200020] = {3910103, 1, 99, 120, 0, 2, 0, 1}, +[200021] = {3910203, 1, 99, 120, 0, 2, 0, 1}, +[200022] = {3910305, 1, 99, 85, 0, 2, 0, 1}, +[200023] = {3920004, 1, 999, 50, 0, 2, 0, 1}, +[200024] = {3920006, 1, 999, 70, 0, 2, 0, 1}, +[200025] = {3920003, 1, 999, 115, 0, 2, 0, 1}, +[200026] = {3910005, 1, 99, 75, 0, 2, 0, 1}, +[200027] = {3910006, 1, 99, 90, 0, 2, 0, 1}, +[200028] = {3940011, 1, 20, 20, 0, 2, 0, 1}, +[200029] = {3940010, 1, 20, 30, 0, 2, 0, 1}, +[200030] = {3020504, 1, 1, 400, 15, 2, 0, 1}, +[200031] = {3020505, 1, 1, 400, 15, 2, 0, 1}, +[200032] = {3020506, 1, 1, 300, 31, 2, 0, 1}, +[201001] = {5030107, 1, 1, 350, 0, 2, 0, 2}, +[201002] = {5030207, 1, 1, 750, 0, 2, 0, 2}, +[201003] = {5030206, 1, 1, 1000, 0, 2, 0, 2}, +[201004] = {5030029, 1, 1, 1500, 0, 2, 0, 2}, +[201005] = {5030031, 1, 1, 2400, 0, 2, 0, 2}, +[201006] = {5030209, 1, 1, 3000, 0, 2, 0, 2}, +[201007] = {5030028, 1, 1, 4000, 0, 2, 0, 2}, +[201008] = {4020109, 1, 1, 800, 0, 2, 0, 2}, +[201009] = {4020106, 1, 1, 1000, 0, 2, 0, 2}, +[201010] = {4020008, 1, 1, 2200, 0, 2, 0, 2}, +[201011] = {4020305, 1, 1, 4000, 0, 2, 0, 2}, +[201012] = {4100005, 1, 1, 1000, 0, 2, 0, 2}, +[201013] = {4100109, 1, 1, 4000, 0, 2, 0, 2}, +[201014] = {8030035, 1, 1, 750, 0, 2, 0, 2}, +[201015] = {8030919, 1, 1, 750, 0, 2, 0, 2}, +[201016] = {8031821, 1, 1, 750, 0, 2, 0, 2}, +[201017] = {8032220, 1, 1, 750, 0, 2, 0, 2}, +[201018] = {9050029, 1, 1, 900, 0, 2, 0, 2}, +[201019] = {9050044, 1, 1, 1900, 0, 2, 0, 2}, +[201020] = {9040035, 1, 1, 950, 0, 2, 0, 2}, +[201021] = {9040025, 1, 1, 1500, 0, 2, 0, 2}, +[201022] = {8013202, 1, 1, 1000, 11, 2, 0, 2}, +[201023] = {8032602, 1, 1, 1000, 11, 2, 0, 2}, +[201024] = {8071302, 1, 1, 1000, 11, 2, 0, 2}, +[201025] = {8081702, 1, 1, 1000, 11, 2, 0, 2}, +[201026] = {8050148, 1, 1, 1200, 11, 2, 0, 2}, +[201027] = {8050244, 1, 1, 1200, 11, 2, 0, 2}, +[201028] = {8051222, 1, 1, 1200, 11, 2, 0, 2}, +[201029] = {8050029, 1, 1, 1200, 11, 2, 0, 2}, +[201030] = {8090707, 1, 1, 1200, 11, 2, 0, 2}, +[201031] = {4030710, 1, 1, 2500, 13, 2, 0, 2}, +[201032] = {4020211, 1, 1, 2500, 13, 2, 0, 2}, +[201033] = {4040407, 1, 1, 2500, 13, 2, 0, 2}, +[201034] = {4080213, 1, 1, 2500, 13, 2, 0, 2}, +[201035] = {4070215, 1, 1, 2500, 13, 2, 0, 2}, +[201036] = {5030113, 1, 1, 2500, 13, 2, 0, 2}, +[201037] = {5020014, 1, 1, 2500, 13, 2, 0, 2}, +[201038] = {4100608, 1, 1, 2000, 13, 2, 0, 2}, +[201039] = {8010566, 1, 1, 3000, 15, 2, 0, 2}, +[201040] = {8030625, 1, 1, 3000, 15, 2, 0, 2}, +[201041] = {8070724, 1, 1, 3000, 15, 2, 0, 2}, +[201042] = {8050618, 1, 1, 3000, 15, 2, 0, 2}, +[201043] = {8080715, 1, 1, 3000, 15, 2, 0, 2}, +[201044] = {4030016, 1, 1, 4500, 17, 2, 0, 2}, +[201045] = {4020012, 1, 1, 4500, 17, 2, 0, 2}, +[201046] = {4040111, 1, 1, 4500, 17, 2, 0, 2}, +[201047] = {4080010, 1, 1, 4500, 17, 2, 0, 2}, +[201048] = {4070013, 1, 1, 4500, 17, 2, 0, 2}, +[201049] = {5030308, 1, 1, 4500, 17, 2, 0, 2}, +[201050] = {5020113, 1, 1, 4500, 17, 2, 0, 2}, +[201051] = {4100507, 1, 1, 4000, 17, 2, 0, 2}, +[201052] = {8010567, 1, 1, 5000, 21, 2, 0, 2}, +[201053] = {8030626, 1, 1, 5000, 21, 2, 0, 2}, +[201054] = {8070725, 1, 1, 5000, 21, 2, 0, 2}, +[201055] = {8050619, 1, 1, 5000, 21, 2, 0, 2}, +[201056] = {8050768, 1, 1, 5000, 21, 2, 0, 2}, +[201057] = {8080716, 1, 1, 5000, 21, 2, 0, 2}, +[201058] = {8080564, 1, 1, 5000, 21, 2, 0, 2}, +[201059] = {8090506, 1, 1, 5000, 21, 2, 0, 2}, +[201060] = {9050025, 1, 1, 1000, 21, 2, 0, 2}, +[201061] = {9050026, 1, 1, 1000, 21, 2, 0, 2}, +[201062] = {9010025, 1, 1, 1000, 21, 2, 0, 2}, +[201063] = {4100806, 1, 1, 5500, 23, 2, 0, 2}, +[201064] = {8013617, 1, 1, 5500, 23, 2, 0, 2}, +[201065] = {8032822, 1, 1, 5500, 23, 2, 0, 2}, +[201066] = {8051517, 1, 1, 5500, 23, 2, 0, 2}, +[201067] = {8071522, 1, 1, 5500, 23, 2, 0, 2}, +[201068] = {9030061, 1, 1, 5500, 23, 2, 0, 2}, +[201069] = {9050068, 1, 1, 5500, 23, 2, 0, 2}, +[201070] = {8013618, 1, 1, 6000, 25, 2, 0, 2}, +[201071] = {8013619, 1, 1, 6000, 25, 2, 0, 2}, +[201072] = {8032823, 1, 1, 6000, 25, 2, 0, 2}, +[201073] = {8071523, 1, 1, 6000, 25, 2, 0, 2}, +[201074] = {8081915, 1, 1, 6000, 25, 2, 0, 2}, +[201075] = {9040066, 1, 1, 6000, 25, 2, 0, 2}, +[201076] = {9010062, 1, 1, 6000, 25, 2, 0, 2}, +[201077] = {4100807, 1, 1, 6500, 27, 2, 0, 2}, +[201078] = {4020409, 1, 1, 6500, 27, 2, 0, 2}, +[201079] = {4040509, 1, 1, 6500, 27, 2, 0, 2}, +[201080] = {4080509, 1, 1, 6500, 27, 2, 0, 2}, +[201081] = {4070409, 1, 1, 6500, 27, 2, 0, 2}, +[201082] = {5030409, 1, 1, 6500, 27, 2, 0, 2}, +[201083] = {5020409, 1, 1, 6500, 27, 2, 0, 2}, +[201084] = {4030605, 1, 1, 25000, 31, 2, 0, 2}, +[201085] = {4020405, 1, 1, 25000, 31, 2, 0, 2}, +[201086] = {4040505, 1, 1, 25000, 31, 2, 0, 2}, +[201087] = {4080505, 1, 1, 25000, 31, 2, 0, 2}, +[201088] = {4070405, 1, 1, 25000, 31, 2, 0, 2}, +[201089] = {5030405, 1, 1, 25000, 31, 2, 0, 2}, +[201090] = {5020405, 1, 1, 25000, 31, 2, 0, 2}, +[201091] = {8013205, 1, 1, 6000, 31, 2, 0, 2}, +[201092] = {8032605, 1, 1, 6000, 31, 2, 0, 2}, +[201093] = {8071305, 1, 1, 6000, 31, 2, 0, 2}, +[201094] = {8081705, 1, 1, 6000, 31, 2, 0, 2}, +[202001] = {3020603, 1, 20, 5, 0, 2, 8, 3}, +[202002] = {9040018, 1, 1, 1000, 11, 2, 11, 3}, +[203001] = {2001005, 1, 1, 3000, 11, 2, 0, 4}, +[203002] = {2001015, 1, 1, 3000, 15, 2, 0, 4}, +[203003] = {2001020, 1, 1, 2000, 21, 2, 0, 4}, +[203004] = {2001021, 1, 1, 3000, 21, 2, 0, 4}, +[203005] = {2001022, 1, 1, 4000, 21, 2, 0, 4}, +[203006] = {2001026, 1, 1, 25000, 27, 2, 0, 4}, +[300001] = {3010403, 1, 10, 20, 0, 3, 0, 1}, +[300002] = {3010402, 1, 10, 30, 0, 3, 0, 1}, +[300003] = {3020204, 1, 1, 50, 0, 3, 0, 1}, +[300004] = {3020406, 1, 20, 10, 0, 3, 0, 1}, +[300005] = {3020403, 1, 10, 15, 0, 3, 0, 1}, +[300006] = {3020402, 1, 5, 60, 0, 3, 0, 1}, +[300007] = {3020404, 1, 5, 100, 0, 3, 0, 1}, +[300008] = {3020528, 1, 5, 50, 0, 3, 0, 1}, +[300009] = {3020516, 1, 5, 50, 0, 3, 0, 1}, +[300010] = {3020411, 1, 1, 15, 0, 3, 0, 1}, +[300011] = {3020412, 1, 1, 200, 0, 3, 0, 1}, +[300012] = {3020509, 1, 1, 200, 0, 3, 0, 1}, +[300013] = {3020510, 1, 1, 200, 0, 3, 0, 1}, +[300014] = {10013001, 1, 20, 5, 0, 3, 0, 1}, +[300015] = {10013002, 1, 20, 25, 0, 3, 0, 1}, +[300016] = {10013003, 1, 20, 45, 0, 3, 0, 1}, +[300017] = {10013004, 1, 20, 100, 0, 3, 0, 1}, +[300018] = {10013005, 1, 20, 150, 0, 3, 0, 1}, +[300019] = {3910402, 1, 99, 85, 0, 3, 0, 1}, +[300020] = {3910103, 1, 99, 120, 0, 3, 0, 1}, +[300021] = {3910203, 1, 99, 120, 0, 3, 0, 1}, +[300022] = {3910305, 1, 99, 85, 0, 3, 0, 1}, +[300023] = {3920004, 1, 999, 50, 0, 3, 0, 1}, +[300024] = {3920006, 1, 999, 70, 0, 3, 0, 1}, +[300025] = {3920003, 1, 999, 115, 0, 3, 0, 1}, +[300026] = {3910005, 1, 99, 75, 0, 3, 0, 1}, +[300027] = {3910006, 1, 99, 90, 0, 3, 0, 1}, +[300028] = {3940011, 1, 20, 20, 0, 3, 0, 1}, +[300029] = {3940010, 1, 20, 30, 0, 3, 0, 1}, +[300030] = {3020504, 1, 1, 400, 15, 3, 0, 1}, +[300031] = {3020505, 1, 1, 400, 15, 3, 0, 1}, +[300032] = {3020506, 1, 1, 300, 31, 3, 0, 1}, +[301001] = {4030006, 1, 1, 400, 0, 3, 0, 2}, +[301002] = {4030015, 1, 1, 1000, 0, 3, 0, 2}, +[301003] = {4030405, 1, 1, 1600, 0, 3, 0, 2}, +[301004] = {4030506, 1, 1, 3200, 0, 3, 0, 2}, +[301005] = {4030505, 1, 1, 4000, 0, 3, 0, 2}, +[301006] = {4070011, 1, 1, 550, 0, 3, 0, 2}, +[301007] = {4070105, 1, 1, 1000, 0, 3, 0, 2}, +[301008] = {4070212, 1, 1, 1500, 0, 3, 0, 2}, +[301009] = {4070211, 1, 1, 4000, 0, 3, 0, 2}, +[301010] = {4100710, 1, 1, 450, 0, 3, 0, 2}, +[301011] = {4100403, 1, 1, 1000, 0, 3, 0, 2}, +[301012] = {4100404, 1, 1, 1900, 0, 3, 0, 2}, +[301013] = {4100306, 1, 1, 4000, 0, 3, 0, 2}, +[301014] = {8030248, 1, 1, 750, 0, 3, 0, 2}, +[301015] = {8030548, 1, 1, 750, 0, 3, 0, 2}, +[301016] = {8031021, 1, 1, 750, 0, 3, 0, 2}, +[301017] = {8031513, 1, 1, 750, 0, 3, 0, 2}, +[301018] = {9050029, 1, 1, 900, 0, 3, 0, 2}, +[301019] = {9050044, 1, 1, 1900, 0, 3, 0, 2}, +[301020] = {9040036, 1, 1, 950, 0, 3, 0, 2}, +[301021] = {9040025, 1, 1, 1500, 0, 3, 0, 2}, +[301022] = {8013203, 1, 1, 1000, 11, 3, 0, 2}, +[301023] = {8032603, 1, 1, 1000, 11, 3, 0, 2}, +[301024] = {8071303, 1, 1, 1000, 11, 3, 0, 2}, +[301025] = {8081703, 1, 1, 1000, 11, 3, 0, 2}, +[301026] = {8050520, 1, 1, 1200, 11, 3, 0, 2}, +[301027] = {8051024, 1, 1, 1200, 11, 3, 0, 2}, +[301028] = {8050345, 1, 1, 1200, 11, 3, 0, 2}, +[301029] = {8050449, 1, 1, 1200, 11, 3, 0, 2}, +[301030] = {8090708, 1, 1, 1200, 11, 3, 0, 2}, +[301031] = {4030305, 1, 1, 2500, 13, 3, 0, 2}, +[301032] = {4020011, 1, 1, 2500, 13, 3, 0, 2}, +[301033] = {4040208, 1, 1, 2500, 13, 3, 0, 2}, +[301034] = {4080306, 1, 1, 2500, 13, 3, 0, 2}, +[301035] = {4070012, 1, 1, 2500, 13, 3, 0, 2}, +[301036] = {5030037, 1, 1, 2500, 13, 3, 0, 2}, +[301037] = {5020217, 1, 1, 2500, 13, 3, 0, 2}, +[301038] = {4100112, 1, 1, 2000, 13, 3, 0, 2}, +[301039] = {8011522, 1, 1, 3000, 15, 3, 0, 2}, +[301040] = {8030744, 1, 1, 3000, 15, 3, 0, 2}, +[301041] = {8070361, 1, 1, 3000, 15, 3, 0, 2}, +[301042] = {8050766, 1, 1, 3000, 15, 3, 0, 2}, +[301043] = {8080562, 1, 1, 3000, 15, 3, 0, 2}, +[301044] = {4030408, 1, 1, 4500, 17, 3, 0, 2}, +[301045] = {4020113, 1, 1, 4500, 17, 3, 0, 2}, +[301046] = {4040306, 1, 1, 4500, 17, 3, 0, 2}, +[301047] = {4080409, 1, 1, 4500, 17, 3, 0, 2}, +[301048] = {4070311, 1, 1, 4500, 17, 3, 0, 2}, +[301049] = {5030210, 1, 1, 4500, 17, 3, 0, 2}, +[301050] = {5020307, 1, 1, 4500, 17, 3, 0, 2}, +[301051] = {4100712, 1, 1, 4000, 17, 3, 0, 2}, +[301052] = {8011523, 1, 1, 5000, 21, 3, 0, 2}, +[301053] = {8030745, 1, 1, 5000, 21, 3, 0, 2}, +[301054] = {8070362, 1, 1, 5000, 21, 3, 0, 2}, +[301055] = {8050811, 1, 1, 5000, 21, 3, 0, 2}, +[301056] = {8050767, 1, 1, 5000, 21, 3, 0, 2}, +[301057] = {8080015, 1, 1, 5000, 21, 3, 0, 2}, +[301058] = {8080563, 1, 1, 5000, 21, 3, 0, 2}, +[301059] = {8090709, 1, 1, 5000, 21, 3, 0, 2}, +[301060] = {9050023, 1, 1, 1000, 21, 3, 0, 2}, +[301061] = {9050024, 1, 1, 1000, 21, 3, 0, 2}, +[301062] = {9010025, 1, 1, 1000, 21, 3, 0, 2}, +[301063] = {4100808, 1, 1, 5500, 23, 3, 0, 2}, +[301064] = {8013620, 1, 1, 5500, 23, 3, 0, 2}, +[301065] = {8032824, 1, 1, 5500, 23, 3, 0, 2}, +[301066] = {8051518, 1, 1, 5500, 23, 3, 0, 2}, +[301067] = {8071524, 1, 1, 5500, 23, 3, 0, 2}, +[301068] = {9030062, 1, 1, 5500, 23, 3, 0, 2}, +[301069] = {9050069, 1, 1, 5500, 23, 3, 0, 2}, +[301070] = {8013621, 1, 1, 6000, 25, 3, 0, 2}, +[301071] = {8013622, 1, 1, 6000, 25, 3, 0, 2}, +[301072] = {8032825, 1, 1, 6000, 25, 3, 0, 2}, +[301073] = {8071525, 1, 1, 6000, 25, 3, 0, 2}, +[301074] = {8081916, 1, 1, 6000, 25, 3, 0, 2}, +[301075] = {9040067, 1, 1, 6000, 25, 3, 0, 2}, +[301076] = {9010063, 1, 1, 6000, 25, 3, 0, 2}, +[301077] = {4100809, 1, 1, 6500, 27, 3, 0, 2}, +[301078] = {4020410, 1, 1, 6500, 27, 3, 0, 2}, +[301079] = {4040510, 1, 1, 6500, 27, 3, 0, 2}, +[301080] = {4080510, 1, 1, 6500, 27, 3, 0, 2}, +[301081] = {4070410, 1, 1, 6500, 27, 3, 0, 2}, +[301082] = {5030410, 1, 1, 6500, 27, 3, 0, 2}, +[301083] = {5020410, 1, 1, 6500, 27, 3, 0, 2}, +[301084] = {4030606, 1, 1, 25000, 31, 3, 0, 2}, +[301085] = {4020406, 1, 1, 25000, 31, 3, 0, 2}, +[301086] = {4040506, 1, 1, 25000, 31, 3, 0, 2}, +[301087] = {4080506, 1, 1, 25000, 31, 3, 0, 2}, +[301088] = {4070406, 1, 1, 25000, 31, 3, 0, 2}, +[301089] = {5030406, 1, 1, 25000, 31, 3, 0, 2}, +[301090] = {5020406, 1, 1, 25000, 31, 3, 0, 2}, +[301091] = {8013206, 1, 1, 6000, 31, 3, 0, 2}, +[301092] = {8032606, 1, 1, 6000, 31, 3, 0, 2}, +[301093] = {8071306, 1, 1, 6000, 31, 3, 0, 2}, +[301094] = {8081706, 1, 1, 6000, 31, 3, 0, 2}, +[302001] = {3020602, 1, 20, 5, 0, 3, 8, 3}, +[302002] = {9040018, 1, 1, 1000, 11, 3, 11, 3}, +[303001] = {2001006, 1, 1, 3000, 11, 3, 0, 4}, +[303002] = {2001016, 1, 1, 3000, 15, 3, 0, 4}, +[303003] = {2001023, 1, 1, 2000, 21, 3, 0, 4}, +[303004] = {2001024, 1, 1, 3000, 21, 3, 0, 4}, +[303005] = {2001025, 1, 1, 4000, 21, 3, 0, 4}, +[303006] = {2001026, 1, 1, 25000, 27, 3, 0, 4}, +} + +function onEventStarted(player, npc, triggerName) + skipGCcheck = 1; -- 0 No, 1 Yes + playerGC = player.gcCurrent; + playerGCSeal = 1000200 + playerGC; + playerCurrentRank = 13; + npcId = npc:GetActorClassId(); + + if (playerGC == gcOfficer[npcId] or skipGCcheck == 1) then + callClientFunction(player, "eventTalkPreJoin"); + --player:SendMessage(0x20, "", "[Info]: Client takes awhile to load GC shops"); + while (true) do + + eventTalkChoice = callClientFunction(player, "eventTalkMainMenu", 8, 11); + --player:SendMessage(0x20, "", "eventTalkMainMenu: " .. tostring(eventTalkChoice)); + + if (eventTalkChoice == 1) then + t1, t2, t3 = callClientFunction(player, "eventShopMenuOpen"); + + --player:SendMessage(0x20, "", "eventShopMenuOpen: " .. tostring(t1) .. ", ".. tostring(t2) .. ", ".. tostring(t3)); + + while (true) do + -- TODO: ADD RANK CHECK, CITY CHECK, AND RANGE CHECK + + buyResult, buyIndex = callClientFunction(player, "eventShopMenuAsk"); + + if (buyIndex == -1) then + callClientFunction(player, "eventShopMenuClose"); + break; + else + -- [index] = { itemID, itemQuality, itemQuantity, itemCost gcRank, city, special, itemCategory } + if (shopInfo[buyIndex][8] == 4) then + location = INVENTORY_KEYITEMS; + else + location = INVENTORY_NORMAL; + end + end + + purchaseItem(player, shopInfo[buyIndex][1], shopInfo[buyIndex][3], shopInfo[buyIndex][2], shopInfo[buyIndex][4], playerGCSeal, location); + end + + --player:SendMessage(0x20, "", "Player picked an item at gcSealShopIndex " .. tostring(buyResult) .. ", ".. tostring(buyIndex)); + + elseif (eventTalkChoice == -1) then + break; + end + end + else + callClientFunction(player, "eventTalkStepCantUse"); + end + callClientFunction(player, "eventTalkStepBreak"); + player:endEvent(); +end + + +function purchaseItem(player, itemId, quantity, quality, price, currency, location) + + local worldMaster = GetWorldMaster(); + local cost = quantity * price; + local gItemData = GetItemGamedata(itemId); + local isUnique = gItemData.isRare; + + if player:GetInventory(location):HasItem(itemId) and isUnique then + -- You cannot have more than one in your possession at any given time. + player:SendGameMessage(player, worldMaster, 40279, MESSAGE_TYPE_SYSTEM, itemId, quality); + return; + end + + if (not player:GetInventory(location):IsFull() or player:GetInventory(location):IsSpaceForAdd(itemId, quantity)) then + if player:GetInventory(INVENTORY_CURRENCY):HasItem(currency, cost) then + player:GetInventory(INVENTORY_CURRENCY):removeItem(currency, cost) + player:GetInventory(location):AddItem(itemId, quantity, quality); + if currency == 1000001 then + -- You purchase for gil. + player:SendGameMessage(player, worldMaster, 25061, MESSAGE_TYPE_SYSTEM, itemId, quality, quantity, cost); + elseif currency == 1000201 or currency == 1000202 or currency == 1000203 then + -- You exchange for . + player:SendGameMessage(player, GetWorldMaster(), 25275, MESSAGE_TYPE_SYSTEM, itemId, quality, quantity, price, player.gcCurrent); + + end + else + -- You do not have enough gil. (Should never see this aside from packet injection, since client prevents buying if not enough currency) + player:SendGameMessage(player, worldMaster, 25065, MESSAGE_TYPE_SYSTEM); + end + else + -- Your inventory is full. + player:SendGameMessage(player, worldMaster, 60022, MESSAGE_TYPE_SYSTEM); + end + return +end + + + + + + diff --git a/data/scripts/base/chara/npc/populace/PopulaceCompanyWarp.lua b/data/scripts/base/chara/npc/populace/PopulaceCompanyWarp.lua index 0b37b92f..9a5481b9 100644 --- a/data/scripts/base/chara/npc/populace/PopulaceCompanyWarp.lua +++ b/data/scripts/base/chara/npc/populace/PopulaceCompanyWarp.lua @@ -5,20 +5,118 @@ PopulaceCompanyWarp Script Functions: eventTalkWelcome(player) - Start Text -eventAskMainMenu(player, index) - Shows teleport menu +eventAskMainMenu(player, index) - Shows teleport menu, hides the teleport location at index value to prevent warping to the spot you're at eventAfterWarpOtherZone(player) - Fades out for warp eventTalkStepBreak() - Ends talk --]] require ("global") +warpNpc = +{ --[actorId] = {warpIndex, cityId} -- ()s around name indicate missing NPC + Aethernet + [1500321] = {1, 1}, -- (Storm Private Gardner) + [1500331] = {2, 1}, -- (Storm Private Rich) + [1500323] = {3, 1}, -- (Storm Private Potter) + [1500330] = {4, 1}, -- (Storm Private Hunt) + [1500322] = {5, 1}, -- (Storm Private Abel) + [1500332] = {6, 1}, -- (Storm Private Stone) + [1500339] = {7, 1}, -- (Storm Private Holt) + [1500324] = {1, 2}, -- serpent_private_white + [1500334] = {2, 2}, -- serpent_private_hill + [1500326] = {3, 2}, -- serpent_private_carver + [1500333] = {4, 2}, -- serpent_private_stone + [1500325] = {5, 2}, -- serpent_private_holmes + [1500335] = {6, 2}, -- serpent_private_kirk + [1500327] = {1, 3}, -- flame_private_newton + [1500337] = {2, 3}, -- (Flame Private Tanner) + [1500329] = {3, 3}, -- (Flame Private Morning) + [1500336] = {4, 3}, -- (Flame Private Covey) + [1500328] = {5, 3}, -- flame_private_allen + [1500338] = {6, 3}, -- (Flame Private Yar) +} + +aethernet = +{ + { -- 1: Limsa + {zone = 230, x = -424.140, y = 42.000, z = 371.988, r = -2.472}, -- 1 - Aetheryte Plaza + {zone = 133, x = -439.744, y = 40.000, z = 234.376, r = 0.287}, -- 2 - Drowning Wench + {zone = 230, x = -498.131, y = 43.622, z = 60.818, r = 0.254}, -- 3 - The Bismarck + {zone = 230, x = -759.331, y = 12.000, z = 239.413, r = -0.869}, -- 4 - Ferry Docks + {zone = 230, x = -623.582, y = 4.000, z = 369.318, r = 1.736}, -- 5 - Fisherman's Bottom + {zone = 230, x = -525.536, y = 18.000, z = 173.735, r = 3.082}, -- 6 - The Octant + {zone = 133, x = -231.711, y = 12.000, z = 193.573, r = -0.786}, -- 7 - Procession of Terns + {zone = 128, x = -20.783, y = 42.214, z = 146.946, r = 2.046}, -- 8 - Zephyr Gate + }, + { -- 2: Gridania + {zone = 206, x = -107.878, y = 17.524, z = -1343.871, r = 0.657}, -- 1 - Aetheryte Plaza + {zone = 155, x = 96.868, y = 3.480, z = -1211.040, r = 2.582}, -- 2 - Carline Canopy + {zone = 206, x = 86.942, y = 19.789, z = -1420.891, r = 2.965}, -- 3 - Atelier Fen-Yil + {zone = 206, x = -84.621, y = 19.061, z = -1502.665, r = 0.756}, -- 4 - Whistling Miller + {zone = 206, x = 205.101, y = 9.526, z = -1245.405, r = -1.749}, -- 5 - Quiver's Hold + {zone = 206, x = 160.578, y = 25.061, z = -1556.662, r = 1.896}, -- 6 - Wailing Barracks + {zone = 150, x = 318.838, y = 4.036, z = -992.071, r = -0.307}, -- 7 - Mistalle Bridges + {zone = 206, x = -192.167, y = 4.466, z = -1061.777, r = -0.026}, -- 8 - Berlends Bridges + }, + { -- 3: Ul'dah + {zone = 175, x = -190.574, y = 190.000, z = 18.086, r = 2.190}, -- 1 - Aetheryte Plaza + {zone = 175, x = -36.513, y = 192.000, z = 37.130, r = -0.490}, -- 2 - Quicksand + {zone = 209, x = -192.971, y = 230.000, z = 209.348, r = 2.860}, -- 3 - Frondale's Phrontistery + {zone = 209, x = -60.243, y = 200.000, z = 257.718, r = -1.276}, -- 4 - Onyx Lane + {zone = 209, x = -147.633, y = 198.000, z = 160.064, r = -1.600}, -- 5 - Gold Court + {zone = 209, x = -263.776, y = 202.000, z = 206.699, r = -3.135}, -- 6 - Arrzaneth Ossuary + {zone = 170, x = -29.721, y = 182.635, z = -76.313, r = 2.625}, -- 7 - Gate of Nald + {zone = 170, x = 129.957, y = 183.862, z = 220.719, r = 1.515}, -- 8 - Gate of Thal + } +} + + + function init(npc) return false, false, 0, 0; end function onEventStarted(player, npc, triggerName) - - callClientFunction(player, "eventAskMainMenu", player, 1); - - player:EndEvent(); -end \ No newline at end of file + local passLimsa = 2001014; + local passGrid = 2001015; + local passUldah = 2001016; + passCheck = 1; -- 0 = Check player for Aetherpass keyitem. 1 = Ignore it. + + npcId = npc:GetActorClassId(); + city = warpNpc[npcId][2]; + + + if city == 1 then + if player:GetInventory(INVENTORY_KEYITEMS):HasItem(passLimsa) then + passCheck = 1; + else + if passCheck == 0 then callClientFunction(player, "eventTalkWelcome", player); end + end; + elseif city == 2 then + if player:GetInventory(INVENTORY_KEYITEMS):HasItem(passGrid) then + passCheck = 1; + else + if passCheck == 0 then callClientFunction(player, "eventTalkWelcome", player); end + end; + elseif city == 3 then + if player:GetInventory(INVENTORY_KEYITEMS):HasItem(passUldah) then + passCheck = 1; + else + if passCheck == 0 then callClientFunction(player, "eventTalkWelcome", player); end + end + end + + if passCheck == 1 then + choice = callClientFunction(player, "eventAskMainMenu", player, warpNpc[npcId][1]); + + if choice == 0 then + --callClientFunction(player, "playereventTalkStepBreak"); + player:EndEvent(); + else + -- callClientFunction(player, "eventAfterWarpOtherZone", player); -- Commented out for now to prevent double fade-to-black for warp + player:EndEvent(); + GetWorldManager():DoZoneChange(player, aethernet[city][choice].zone, nil, 0, 15, aethernet[city][choice].x, aethernet[city][choice].y, aethernet[city][choice].z, aethernet[city][choice].r); + end + end + + player:EndEvent(); +end diff --git a/data/scripts/base/chara/npc/populace/PopulaceLinkshellManager.lua b/data/scripts/base/chara/npc/populace/PopulaceLinkshellManager.lua index f0702f9c..094772c7 100644 --- a/data/scripts/base/chara/npc/populace/PopulaceLinkshellManager.lua +++ b/data/scripts/base/chara/npc/populace/PopulaceLinkshellManager.lua @@ -39,6 +39,11 @@ function onEventStarted(player, npc, triggerName) --Create if (result == 3) then + + player:SendMessage(0x20, "", "" .. tostring(lsName)); + player:SendMessage(0x20, "", "" .. tostring(crestId)); + player:SendMessage(0x20, "", "" .. tostring(command)); + createLinkshell(lsName, crestId); callClientFunction(player, "eventTalkStepMakeupDone"); --Modify diff --git a/data/scripts/global.lua b/data/scripts/global.lua index 1d2e68da..af933ad2 100644 --- a/data/scripts/global.lua +++ b/data/scripts/global.lua @@ -78,8 +78,7 @@ end function callClientFunction(player, functionName, ...) player:RunEventFunction(functionName, ...); - result = coroutine.yield("_WAIT_EVENT", player); - return result; + return coroutine.yield("_WAIT_EVENT", player); end function wait(seconds)