mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	Fixed multiparams not being returned on CallClientFunction(). Was due to bad merge. Added Jorge's scripts.
This commit is contained in:
		| @@ -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 <itemQuantity1> <itemName1> <itemQuality1> for <itemQuantity2> <itemName2> <itemQuality2>. | ||||
|             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 <itemId> <quality> 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 <quantity> <itemId> <quality> for <cost> 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 <quantity> <GC seals> for <quantity> <itemId> <quality>. | ||||
|                 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 | ||||
| @@ -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 | ||||
							
								
								
									
										546
									
								
								data/scripts/base/chara/npc/populace/PopulaceCompanyShop.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										546
									
								
								data/scripts/base/chara/npc/populace/PopulaceCompanyShop.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -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 <itemId> <quality> 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 <quantity> <itemId> <quality> for <cost> 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 <quantity> <GC seals> for <quantity> <itemId> <quality>. | ||||
|                 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 | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -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 | ||||
|     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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user