mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	Updated Map Server namespace. Moved all other data folders (www and sql) to data folder. Renamed boot name to Project Meteor.
This commit is contained in:
		
							
								
								
									
										11
									
								
								Data/lobby_config.ini
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Data/lobby_config.ini
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| [General] | ||||
| server_ip=0.0.0.0 | ||||
| showtimestamp = true | ||||
|  | ||||
| [Database] | ||||
| worldid=1 | ||||
| host=127.0.0.1 | ||||
| port=3306 | ||||
| database=ffxiv_server | ||||
| username=root | ||||
| password= | ||||
							
								
								
									
										11
									
								
								Data/map_config.ini
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Data/map_config.ini
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| [General] | ||||
| server_ip=127.0.0.1 | ||||
| showtimestamp = true | ||||
|  | ||||
| [Database] | ||||
| worldid=1 | ||||
| host=127.0.0.1 | ||||
| port=3306 | ||||
| database=ffxiv_server | ||||
| username=root | ||||
| password= | ||||
							
								
								
									
										58
									
								
								Data/scripts/ability.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								Data/scripts/ability.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| -- todo: add enums for status effects in global.lua | ||||
| require("global") | ||||
| require("battleutils") | ||||
|  | ||||
| --[[ | ||||
|      statId - see BattleTemp.cs | ||||
|      modifier - Modifier.Intelligence, Modifier.Mind (see Modifier.cs) | ||||
|      multiplier -  | ||||
|   ]] | ||||
| function HandleHealingSkill(caster, target, skill, action, statId, modifierId, multiplier, baseAmount) | ||||
|     potency = potency or 1.0; | ||||
|     healAmount = baseAmount; | ||||
|      | ||||
|     -- todo: shit based on mnd | ||||
|     local mind = caster.GetMod(Modifier.Mind); | ||||
| end; | ||||
|  | ||||
| function HandleAttackSkill(caster, target, skill, action, statId, modifierId, multiplier, baseAmount) | ||||
|     -- todo: actually handle this | ||||
|     damage = baseAmount or math.random(1,10) * 10; | ||||
|      | ||||
|     return damage; | ||||
| end; | ||||
|  | ||||
| function HandleStoneskin(caster, target, skill, action, statId, modifierId, damage) | ||||
|     --[[ | ||||
|     if target.statusEffects.HasStatusEffect(StatusEffect.Stoneskin) then | ||||
|         -- todo: damage reduction | ||||
|         return true; | ||||
|     end; | ||||
|     ]] | ||||
|     return false; | ||||
| end; | ||||
|  | ||||
| --For abilities that inflict statuses, like aegis boon or taunt | ||||
| function onStatusAbilityFinish(caster, target, skill, action) | ||||
|     --action.CalcHitType(caster, target, skill); | ||||
|     action.DoAction(caster, target, skill); | ||||
|     action.TryStatus(caster, target, skill, false); | ||||
|  | ||||
|     return action.amount; | ||||
| end; | ||||
|  | ||||
| function onAttackAbilityFinish(caster, target, skill, action) | ||||
|     local damage = math.random(50, 150); | ||||
|     action.amount = damage; | ||||
|     action.DoAction(caster, target, skill); | ||||
|  | ||||
|     return action.amount; | ||||
| end; | ||||
|  | ||||
| function onHealAbilityFinish(caster, target, skill, action) | ||||
|     local amount = math.random(150, 250); | ||||
|     action.amount = amount; | ||||
|     action.DoAction(caster, target, skill); | ||||
|     action.TryStatus(caster, target, skill, true); | ||||
|     return action.amount; | ||||
| end; | ||||
							
								
								
									
										205
									
								
								Data/scripts/aetheryte.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										205
									
								
								Data/scripts/aetheryte.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,205 @@ | ||||
| --[[ | ||||
|  | ||||
| Aetheryte related info | ||||
|  | ||||
| --]] | ||||
|  | ||||
| aetheryteParentLinks = { | ||||
| 	--La Noscea | ||||
| 	[1280001] = nil, | ||||
| 	[1280002] = {1280007, 1280008, 1280009, 0, 0}, | ||||
| 	[1280003] = {1280010, 0, 0, 0, 0}, | ||||
| 	[1280004] = {1280011, 1280018, 0, 0, 0}, | ||||
| 	[1280005] = {1280020, 1280012, 1280013, 1280014, 0}, | ||||
| 	[1280006] = {1280015, 1280016, 1280017, 0, 0}, | ||||
| 	--Thanalan | ||||
| 	[1280031] = nil, | ||||
| 	[1280032] = {1280037, 1280038, 1280052, 0, 0}, | ||||
| 	[1280033] = {1280039, 1280040, 1280041, 0, 0}, | ||||
| 	[1280034] = {1280042, 1280043, 1280044, 1280054, 0}, | ||||
| 	[1280035] = {1280045, 1280046, 1280047, 0, 0}, | ||||
| 	[1280036] = {1280048, 1280049, 1280050, 0, 0}, | ||||
| 	--Black Shroud | ||||
| 	[1280061] = nil, | ||||
| 	[1280062] = {1280067, 1280068, 1280069, 1280083, 0}, | ||||
| 	[1280063] = {1280070, 1280071, 1280072, 0, 0}, | ||||
| 	[1280064] = {1280073, 1280074, 1280075, 1280082, 0}, | ||||
| 	[1280065] = {1280076, 1280077, 1280078, 0, 0}, | ||||
| 	[1280066] = {1280079, 1280080, 1280081, 0, 0}, | ||||
| 	--Coerthas | ||||
| 	[1280092] = {1280097, 1280098, 1280099, 0, 0}, | ||||
| 	[1280093] = {1280100, 1280101, 1280102, 0, 0}, | ||||
| 	[1280094] = {1280103, 1280104, 0, 0, 0}, | ||||
| 	[1280095] = {1280105, 1280106, 1280107, 0, 0}, | ||||
| 	[1280096] = {1280108, 1280109, 1280110, 0, 0}, | ||||
| 	--Mor Dhona | ||||
| 	[1280121] = {1280124, 1280125, 0, 0, 0}, | ||||
| 	[1280122] = {1280123, 0, 0, 0, 0} | ||||
| } | ||||
|  | ||||
| aetheryteChildLinks = { | ||||
| 	--La Noscea | ||||
| 	[1280007] = 1280002, | ||||
| 	[1280008] = 1280002, | ||||
| 	[1280009] = 1280002, | ||||
| 	[1280010] = 1280003, | ||||
| 	[1280011] = 1280004, | ||||
| 	[1280012] = 1280005, | ||||
| 	[1280013] = 1280005, | ||||
| 	[1280014] = 1280005, | ||||
| 	[1280015] = 1280006, | ||||
| 	[1280016] = 1280006, | ||||
| 	[1280017] = 1280006, | ||||
| 	[1280018] = 1280004, | ||||
| 	[1280020] = 1280005,	 | ||||
| 	--Thanalan | ||||
| 	[1280037] = 1280032, | ||||
| 	[1280038] = 1280032, | ||||
| 	[1280039] = 1280033, | ||||
| 	[1280040] = 1280033, | ||||
| 	[1280041] = 1280033, | ||||
| 	[1280042] = 1280034, | ||||
| 	[1280043] = 1280034, | ||||
| 	[1280044] = 1280034, | ||||
| 	[1280045] = 1280035, | ||||
| 	[1280046] = 1280035, | ||||
| 	[1280047] = 1280035, | ||||
| 	[1280048] = 1280036, | ||||
| 	[1280049] = 1280036, | ||||
| 	[1280050] = 1280036, | ||||
| 	[1280052] = 1280032, | ||||
| 	[1280054] = 1280034, | ||||
| 	--Black Shroud | ||||
| 	[1280067] = 1280062, | ||||
| 	[1280068] = 1280062, | ||||
| 	[1280069] = 1280062, | ||||
| 	[1280070] = 1280063, | ||||
| 	[1280071] = 1280063, | ||||
| 	[1280072] = 1280063, | ||||
| 	[1280073] = 1280064, | ||||
| 	[1280074] = 1280064, | ||||
| 	[1280075] = 1280064, | ||||
| 	[1280076] = 1280065, | ||||
| 	[1280077] = 1280065, | ||||
| 	[1280078] = 1280065, | ||||
| 	[1280079] = 1280066, | ||||
| 	[1280080] = 1280066, | ||||
| 	[1280081] = 1280066, | ||||
| 	[1280082] = 1280064, | ||||
| 	[1280083] = 1280062, | ||||
| 	--Coerthas | ||||
| 	[1280097] = 1280092, | ||||
| 	[1280098] = 1280092, | ||||
| 	[1280099] = 1280092, | ||||
| 	[1280100] = 1280093, | ||||
| 	[1280101] = 1280093, | ||||
| 	[1280102] = 1280093, | ||||
| 	[1280103] = 1280094, | ||||
| 	[1280104] = 1280094, | ||||
| 	[1280105] = 1280095, | ||||
| 	[1280106] = 1280095, | ||||
| 	[1280107] = 1280095, | ||||
| 	[1280108] = 1280096, | ||||
| 	[1280109] = 1280096, | ||||
| 	[1280110] = 1280096, | ||||
| 	--Mor Dhona | ||||
| 	[1280123] = 1280122, | ||||
| 	[1280124] = 1280121, | ||||
| 	[1280125] = 1280121	 | ||||
| } | ||||
|  | ||||
| aetheryteTeleportPositions = { | ||||
|     --La Noscea | ||||
| 	[1280001] = {230, -407, 42.5, 337}, -- CAP | ||||
| 	[1280002] = {128, 29.97, 45.83, -35.47},  -- CAP | ||||
| 	[1280003] = {129, -991.88, 61.71, -1120.79},  -- CAP | ||||
| 	[1280004] = {129, -1883.47, 53.77, -1372.68},  -- CAP | ||||
| 	[1280005] = {130, 1123.29, 45.7, -928.69},  -- CAP | ||||
| 	[1280006] = {135, -278.181, 77.63, -2260.79},  -- CAP | ||||
| 	[1280007] = {128, 582.47, 54.52, -1.2}, | ||||
|     [1280008] = {128, 962.836, 46.507, 832.206}, -- Widow Cliffs http://ic.pics.livejournal.com/eijih/14054410/1355/1355_original.jpg | ||||
|     [1280009] = {128, 318, 24.5, 581}, -- Moraby Bay  http://ic.pics.livejournal.com/eijih/14054410/1092/1092_original.jpg | ||||
|     [1280010] = {129, -636, 48.8, -1287}, -- Woad Whisper Canyon | ||||
|     [1280011] = {129, -2016.72, 60.055, -766.962}, -- Isles of Umbra http://ic.pics.livejournal.com/eijih/14054410/2243/2243_original.jpg  | ||||
|     [1280012] = {130, 1628, 60.3, -449}, -- Tiger Helm Island http://ic.pics.livejournal.com/eijih/14054410/2032/2032_original.jpg | ||||
|     [1280013] = {130, 1522, 1.7, -669},-- Bloodshore http://ic.pics.livejournal.com/eijih/14054410/1607/1607_original.jpg | ||||
|     [1280014] = {130, 1410, 53.3, -1650}, -- Agelyss Wise | ||||
|     [1280015] = {135, -123.315, 60.061, -1438.8}, -- Zelma's Run  https://youtu.be/97Ju0Xv-aaQ?t=102 | ||||
|     [1280016] = {135, -320.322, 52.835, -1823.68}, -- Bronze Lake http://ic.pics.livejournal.com/eijih/14054410/2503/2503_original.jpg | ||||
|     [1280017] = {135, -894, 41.2, -2188}, -- Oakwood | ||||
|     [1280018] = {131, -1694.5, -19.9, -1534.}, -- Mistbeard Cove | ||||
|     [1280020] = {132, 1343.5, -54.38, -870.84},  -- CAP | ||||
| 	--Thanalan | ||||
| 	[1280031] = {175, -235, 185, -3.9}, -- CAP | ||||
|     [1280032] = {170, 33, 200.1, -482}, -- Camp Black Brush | ||||
| 	[1280033] = {171, 1250.9, 264, -544.2}, -- CAP | ||||
|     [1280034] = {172, -1313.91, 56.023, -145.597}, -- Camp Horizon  https://www.youtube.com/watch?v=mQAK4QVnx3c | ||||
|     [1280035] = {173, -165.816, 280.002, -1698.45}, -- Camp Bluefog  | ||||
|     [1280036] = {174, 1687.64, 296.002, 992.283}, -- Camp Brokenwater https://www.youtube.com/watch?v=YyBYHg9h2AM | ||||
|     [1280037] = {170, 639, 183.9, 122}, -- Cactus Basin | ||||
|     [1280038] = {170, 539, 215.8, -14}, -- Four Sisters | ||||
|     [1280039] = {171, 1599, 256.7, -233}, -- Halatali | ||||
|     [1280040] = {171, 2010, 280.3, -768}, -- Burning Wall | ||||
|     [1280041] = {171, 2015, 247.8, 64}, -- Sandgate | ||||
|     [1280042] = {172, -864.991, 88.84, 375.18}, -- Nophica's Wells  https://www.youtube.com/watch?v=pk4POCDQ9QE | ||||
|     [1280043] = {172, -1653, 24.5, -469}, -- Footfalls | ||||
|     [1280044] = {172, -1220.38, 69.854, 194.365}, -- Scorpion Keep | ||||
|     [1280045] = {173, -635, 280, -1797}, -- Hidden Gorge | ||||
|     [1280046] = {173, 447, 259.1, -2158}, -- Sea of Spires | ||||
|     [1280047] = {173, -710, 280.4, -2212}, -- Cutters Pass | ||||
|     [1280048] = {174, 1797, 248, 1856}, -- Red Labyrinth | ||||
|     [1280049] = {174, 1185, 279.8, 1407}, -- Burnt Lizard Creek | ||||
|     [1280050] = {174, 2416, 248.3, 1535}, -- Zanr'ak | ||||
|     [1280052] = {176, 80.056, 167.929, -1267.94}, -- Nanawa Mines  https://www.youtube.com/watch?v=9H-NveJx9EI | ||||
|     [1280054] = {178, -620.374, 110.429, -113.903}, -- Copperbell Mines | ||||
|     -- Black Shroud | ||||
| 	[1280061] = {206, -120, 16, -1332}, -- CAP | ||||
| 	[1280062] = {150, 288, 4, -543.928}, -- CAP | ||||
| 	[1280063] = {151, 1702, 20, -862}, -- CAP | ||||
| 	[1280064] = {152, -1052, 20, -1760}, -- CAP | ||||
| 	[1280065] = {153, -1566.035, -11.89, -550.51}, -- CAP | ||||
| 	[1280066] = {154, 734, -12, 1126}, -- CAP | ||||
|     [1280067] = {150, -94.07, 4, -543.16}, -- Humblehearth | ||||
|     [1280068] = {150, -285, -21.8, -46}, -- Sorrel Haven | ||||
|     [1280069] = {150, 636, 16.2, -324}, -- Five Hangs | ||||
|     [1280070] = {151, 1529.83, 26.991, -1140.15}, -- Verdant Drop | ||||
|     [1280071] = {151, 1296, 47.2, -1534}, -- Lynxpelt Patch | ||||
|     [1280072] = {151, 2297.02, 31.546, -697.828}, -- Larkscall  http://www.gwcdn.com/albums/images/4f7ce3a389118b43470005b1.jpg | ||||
|     [1280073] = {152, -883.769, 34.688, -2187.45}, -- Treespeak | ||||
|     [1280074] = {152, -1567, 16.1, -2593}, -- Aldersprings | ||||
|     [1280075] = {152, -800.277, 32, -2785.4}, -- Lasthold | ||||
|     [1280076] = {153, -1908, 0.3, -1042}, -- Lichenweed | ||||
|     [1280077] = {153, -2158, -46.1, -166}, -- Murmur Rills | ||||
|     [1280078] = {153, -1333, -14.2, 324}, -- Turning Leaf | ||||
|     [1280079] = {154, 991, -11.8, 600}, -- Silent Arbor | ||||
|     [1280080] = {154, 1126, -0.1, 1440}, -- Longroot | ||||
|     [1280081] = {154, 189, 0.1, 1337}, -- Snakemolt | ||||
|     [1280082] = {157, -687.916, -15.308, -2063.94}, -- Mun-Tuy Cellars https://www.youtube.com/watch?v=ty6f9Gy0uws | ||||
|     [1280083] = {158, 314.801, -36.2, -167.843}, -- Tam-Tara Deepcroft https://www.youtube.com/watch?v=eLJPTUG-dE0 | ||||
|     -- Coerthas | ||||
|     [1280092] = {143, 216, 302.1, -258}, -- Camp Dragonhead | ||||
|     [1280093] = {144, 1122.21, 270.004, -1149.29}, -- Camp Crooked Fork https://www.youtube.com/watch?v=Q7-0r6ELCAU | ||||
|     [1280094] = {145, 1500.78, 206.036, 767.546},  -- Camp Glory | ||||
|     [1280095] = {147, -159.828, 222.037, 1154.81}, -- Camp Ever Lakes https://youtu.be/3wKNidix0Ls?t=274 | ||||
|     [1280096] = {148, -1760.36, 270.059, -194.713}, -- Camp Riversmeet https://www.youtube.com/watch?v=gt7Tc9gbTpk | ||||
|     [1280097] = {143, -517, 207.9, 543}, -- Boulder Downs | ||||
|     [1280098] = {143, 190, 367.4, -662}, -- Prominence Point | ||||
|     [1280099] = {143, 960, 287.4, -22}, -- Feathergorge | ||||
|     [1280100] = {144, 1737, 176.5, -1250}, -- Maiden Glen | ||||
|     [1280101] = {144, 1390, 222.6, -736}, -- Hushed Boughs | ||||
|     [1280102] = {144, 1788, 164.8, -829}, -- Scarwing Fall | ||||
|     [1280103] = {145, 1383, 231.8, 422}, -- Weeping Vale | ||||
|     [1280104] = {145, 2160, 142.7, 622}, -- Clearwater | ||||
|     [1280105] = {147, -1, 144.1, 1373}, -- Teriggans Stand | ||||
|     [1280106] = {147, -64, 185.1, 1924}, -- Shepherd Peak | ||||
|     [1280107] = {147, -908, 191.7, 2162}, -- Fellwood | ||||
|     [1280108] = {148, -1734.82, 285.069, -839.63}, -- Wyrmkings Perch | ||||
|     [1280109] = {148, -2366.07, 336.041, -1054.75}, -- The Lance | ||||
|     [1280110] = {148, -2821, 256.1, -290}, -- Twinpools | ||||
|     -- Mor Dhona | ||||
|     [1280121] = {190, 487.445, 18.531, 672.244}, -- Camp Brittlebark https://youtu.be/mkbYeaUqcr4  - I can barely make the ground out | ||||
|     [1280122] = {190, -215.76, 18.54, -668.703}, -- Camp Revenant's Toll | ||||
|     [1280123] = {190, -458, -40.9, -318}, -- Fogfens | ||||
|     [1280124] = {190, 580, 58.2, 206}, -- Singing Shards | ||||
|     [1280125] = {190, -365.724, -18.591, -25.448} -- Jagged Crest Cave    | ||||
| } | ||||
							
								
								
									
										117
									
								
								Data/scripts/ally.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								Data/scripts/ally.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,117 @@ | ||||
| require ("global") | ||||
| require ("magic") | ||||
| require ("weaponskill") | ||||
|  | ||||
| allyGlobal = | ||||
| { | ||||
| } | ||||
|  | ||||
| function allyGlobal.onSpawn(ally, target) | ||||
|  | ||||
| end | ||||
|  | ||||
| function allyGlobal.onEngage(ally, target) | ||||
|  | ||||
| end | ||||
|  | ||||
| function allyGlobal.onAttack(ally, target, damage) | ||||
|  | ||||
| end | ||||
|  | ||||
| function allyGlobal.onDamageTaken(ally, attacker, damage) | ||||
|  | ||||
| end | ||||
|  | ||||
| function allyGlobal.onCombatTick(ally, target, tick, contentGroupCharas) | ||||
|     allyGlobal.HelpPlayers(ally, contentGroupCharas) | ||||
| end | ||||
|  | ||||
| function allyGlobal.onDeath(ally, player, lastAttacker) | ||||
|  | ||||
| end | ||||
|  | ||||
| function allyGlobal.onDespawn(ally) | ||||
|  | ||||
| end | ||||
|  | ||||
| function allyGlobal.HelpPlayers(ally, contentGroupCharas, pickRandomTarget) | ||||
|     print("helpPlayers"); | ||||
|     if contentGroupCharas and not ally.IsEngaged() then | ||||
|         print("contentGroup exists"); | ||||
|         for chara in contentGroupCharas do | ||||
|             print("looping"); | ||||
|             if chara then | ||||
|                 -- probably a player, or another ally | ||||
|                 -- todo: queue support actions, heal, try pull hate off player etc | ||||
|                 if chara.IsPlayer() then | ||||
|                     print("chara is a player"); | ||||
|                     -- do stuff | ||||
|                     if not ally.IsEngaged() then | ||||
|                         if chara.IsEngaged() then | ||||
|                             allyGlobal.EngageTarget(ally, chara.target, nil); | ||||
|                             break; | ||||
|                         end | ||||
|                     end                     | ||||
|                 elseif chara.IsMonster() and chara.IsEngaged() then | ||||
|                     if not ally.IsEngaged() then | ||||
|                         print("Engaging monster that is engaged"); | ||||
|                         allyGlobal.EngageTarget(ally, chara, nil); | ||||
|                         break; | ||||
|                     end | ||||
|                 end | ||||
|             end | ||||
|         end | ||||
|     end | ||||
| end | ||||
|  | ||||
| function allyGlobal.tryAggro(ally, contentGroupCharas) | ||||
|     local count = 0; | ||||
|     if contentGroupCharas and not ally.IsEngaged() then | ||||
|         for i = 0, #contentGroupCharas - 1 do | ||||
|             if contentGroupCharas[i] and ally then | ||||
|                 if contentGroupCharas[i].IsPlayer() then | ||||
|                     -- probably a player, or another ally | ||||
|                     -- todo: queue support actions, heal, try pull hate off player etc | ||||
|                     if contentGroupCharas[i].target then | ||||
|                         if ally.aiContainer:GetTargetFind():CanTarget(contentGroupCharas[i].target) and contentGroupCharas[i].target.IsMonster() and contentGroupCharas[i].target.hateContainer:HasHateForTarget(contentGroupCharas[i]) then | ||||
|                             -- do stuff | ||||
|                             allyGlobal.EngageTarget(ally, contentGroupCharas[i].target, nil); | ||||
|                             break; | ||||
|                         end | ||||
|                     end | ||||
|                 elseif contentGroupCharas[i].IsMonster() and contentGroupCharas[i].IsEngaged() then | ||||
|                     if not ally.IsEngaged() then | ||||
|                         print("Engaging monster that is engaged"); | ||||
|                         allyGlobal.EngageTarget(ally, contentGroupCharas[i], nil); | ||||
|                         break; | ||||
|                     end | ||||
|                 end | ||||
|             end | ||||
|         end | ||||
|     end | ||||
| end | ||||
|  | ||||
| function allyGlobal.HealPlayer(ally, player) | ||||
|  | ||||
| end | ||||
|  | ||||
| function allyGlobal.SupportAction(ally, player) | ||||
|  | ||||
| end | ||||
|  | ||||
| function allyGlobal.EngageTarget(ally, target, contentGroupCharas) | ||||
|     if contentGroupCharas then | ||||
|         for chara in contentGroupCharas do | ||||
|             if chara.IsMonster() then | ||||
|                 if chara.allegiance ~= ally.allegiance then | ||||
|                     ally.Engage(chara) | ||||
|                     break; | ||||
|                 end | ||||
|             end | ||||
|         end | ||||
|     elseif target then | ||||
|         print("Engaging"); | ||||
|         ally.Engage(target) | ||||
|         ally.hateContainer.AddBaseHate(target); | ||||
|     end | ||||
| end | ||||
							
								
								
									
										3
									
								
								Data/scripts/base/chara/npc/mapobj/DoorStandard.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Data/scripts/base/chara/npc/mapobj/DoorStandard.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0, 0, 0;	 | ||||
| end | ||||
| @@ -0,0 +1,5 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0, 0, 0;	 | ||||
| end | ||||
							
								
								
									
										3
									
								
								Data/scripts/base/chara/npc/mapobj/MapObjStandard.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Data/scripts/base/chara/npc/mapobj/MapObjStandard.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0, 303, 10405; | ||||
| end | ||||
| @@ -0,0 +1,5 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return true, true, 10, 0, 1, true, false, false, false, false, false, false, false, 0;	 | ||||
| end | ||||
| @@ -0,0 +1,5 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return true, true, 10, 0, 1, true, false, false, false, false, false, false, false, 0;	 | ||||
| end | ||||
| @@ -0,0 +1,5 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return true, true, 10, 0, 1, true, false, false, false, false, false, false, false, 0;	 | ||||
| end | ||||
							
								
								
									
										5
									
								
								Data/scripts/base/chara/npc/monster/Ifrit/IfritDummy.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Data/scripts/base/chara/npc/monster/Ifrit/IfritDummy.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return true, true, 10, 0, 1, true, false, false, false, false, true, true, false, 0;	 | ||||
| end | ||||
| @@ -0,0 +1,5 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return true, true, 10, 3, 1, true, false, false, false, false, true, true, false, 0;	 | ||||
| end | ||||
| @@ -0,0 +1,5 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return true, true, 10, 3, 1, false, false, false, false, false, true, true, false, 0;	 | ||||
| end | ||||
| @@ -0,0 +1,5 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return true, true, 10, 0, 1, false, false, false, false, false, false, false, false, 0;	 | ||||
| end | ||||
| @@ -0,0 +1,5 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return true, true, 10, 0, 1, true, false, false, false, false, false, false, false, 0;	 | ||||
| end | ||||
| @@ -0,0 +1,5 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return true, true, 10, 0, 1, true, false, false, false, false, false, false, false, 0;	 | ||||
| end | ||||
| @@ -0,0 +1,5 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return true, true, 10, 0, 1, true, false, false, false, false, false, false, false, 0;	 | ||||
| end | ||||
							
								
								
									
										5
									
								
								Data/scripts/base/chara/npc/object/BgKeepout.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Data/scripts/base/chara/npc/object/BgKeepout.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
							
								
								
									
										10
									
								
								Data/scripts/base/chara/npc/object/BookShelf.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								Data/scripts/base/chara/npc/object/BookShelf.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	callClientFunction(player, "bookTalk"); | ||||
| 	player:EndEvent(); | ||||
| end | ||||
							
								
								
									
										5
									
								
								Data/scripts/base/chara/npc/object/ElevatorStandard.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Data/scripts/base/chara/npc/object/ElevatorStandard.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
							
								
								
									
										43
									
								
								Data/scripts/base/chara/npc/object/GuildleveWarpPoint.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								Data/scripts/base/chara/npc/object/GuildleveWarpPoint.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| --[[ | ||||
|  | ||||
| GuildleveWarpPoint Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventGuildleveReward(glId, completionTimeSec, completeReward, difficultyBonus, faction, gil???, factionBonus, RewardId1, RewardAmount1, RewardId2, RewardAmount2, difficulty) - Open Reward Dialog | ||||
| eventTalkGuildleveWarp(returnAetheryteID1, returnAetheryte2) - Opens choice menu | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
| require ("aetheryte") | ||||
| require ("utils") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	local currentGLDirector = player:GetGuildleveDirector(); | ||||
| 	local glData = currentGLDirector.guildleveData; | ||||
|  | ||||
| 	callClientFunction(player, "eventGuildleveReward", currentGLDirector.guildleveId, currentGLDirector.completionTime, 24, 24, 0, 0, 0, 0, 0, 0, 0, currentGLDirector.selectedDifficulty); | ||||
| 	 | ||||
| 	local choice = callClientFunction(player, "eventTalkGuildleveWarp", glData.aetheryte, 0); | ||||
| 	 | ||||
| 	if (choice == 3) then | ||||
| 		local destination = aetheryteTeleportPositions[glData.aetheryte]; | ||||
| 		if (destination ~= nil) then | ||||
| 			randoPos = getRandomPointInBand(destination[2], destination[4], 3, 5); | ||||
| 			rotation = getAngleFacing(randoPos.x, randoPos.y, destination[2], destination[4]); | ||||
| 			GetWorldManager():DoZoneChange(player, destination[1], nil, 0, 2, randoPos.x, destination[3], randoPos.y, rotation); | ||||
| 			currentGLDirector:EndDirector(); | ||||
| 		end | ||||
| 	elseif (choice == 4) then | ||||
| 		currentGLDirector:EndDirector(); | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| end | ||||
|  | ||||
| --50023: GL COMPLETE! | ||||
| --50132: You earn faction credits from X | ||||
							
								
								
									
										23
									
								
								Data/scripts/base/chara/npc/object/MarketEntrance.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								Data/scripts/base/chara/npc/object/MarketEntrance.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| --[[ | ||||
|  | ||||
| MarketEntrance Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventPushChoiceAreaOrQuest(gcLeaderPlaceName[Fronds, etc], showMarketWards/Houses (must be 0xc1a), gcHQPlaceName, anotherPlaceName, showItemSearchCounter, stopSearchingItemId) -  | ||||
| eventPushStepPrvMarket(?, ?, ?) - | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| local MARKETWARD_ENTRANCE = {-201.0, 0.0, -160.0, 1.5}; | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0; | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName)	 | ||||
| 	callClientFunction(player, "eventPushChoiceAreaOrQuest", 0xc13, 0xc1a, 0xdba, 0, true, 1); | ||||
| 	player:EndEvent();	 | ||||
| end | ||||
							
								
								
									
										10
									
								
								Data/scripts/base/chara/npc/object/MateriaBook.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								Data/scripts/base/chara/npc/object/MateriaBook.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	callClientFunction(player, "materiabookTalk"); | ||||
| 	player:EndEvent(); | ||||
| end | ||||
							
								
								
									
										19
									
								
								Data/scripts/base/chara/npc/object/MiningPoint.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Data/scripts/base/chara/npc/object/MiningPoint.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	 | ||||
| 	harvestJudge = GetStaticActor("HarvestJudge"); | ||||
|  | ||||
| 	--callClientFunction(player, "delegateEvent", player, harvestJudge, "loadTextData", dummy); | ||||
| 	--callClientFunction(player, "delegateEvent", player, harvestJudge, "targetCancel", dummy); | ||||
| 	--callClientFunction(player, "delegateEvent", player, harvestJudge, "turnToTarget", dummy, 0); | ||||
| 	--callClientFunction(player, "delegateEvent", player, harvestJudge, "openInputWidget",  22002, 1); | ||||
| 	--callClientFunction(player, "delegateEvent", player, harvestJudge, "textInputWidget", harvestJudge, 22002, npc, false); | ||||
| 	--callClientFunction(player, "delegateEvent", player, harvestJudge, "askInputWidget", harvestJudge, 22002, 1); | ||||
| 	 | ||||
| 	player:EndEvent();	 | ||||
| end | ||||
							
								
								
									
										21
									
								
								Data/scripts/base/chara/npc/object/ObjectBed.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								Data/scripts/base/chara/npc/object/ObjectBed.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
|  | ||||
| 	choice = callClientFunction(player, "askLogout", player); | ||||
| 	 | ||||
| 	if (choice == 2) then | ||||
| 		player:QuitGame(); | ||||
| 	elseif (choice == 3) then | ||||
| 		player:Logout(); | ||||
| 	elseif (choice == 4) then | ||||
| 		player:SendMessage(33, "", "Heck the bed"); | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										25
									
								
								Data/scripts/base/chara/npc/object/ObjectEventDoor.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								Data/scripts/base/chara/npc/object/ObjectEventDoor.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| --[[ | ||||
|  | ||||
| ObjectEventDoor Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventDoorMoveAsk() - Shows confirm to move into event | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName)	 | ||||
| 	choice = callClientFunction(player, "eventDoorMoveAsk"); | ||||
| 	 | ||||
| 	if (choice == 1) then | ||||
| 		 | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent();	 | ||||
| end | ||||
							
								
								
									
										16
									
								
								Data/scripts/base/chara/npc/object/ObjectInnDoor.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								Data/scripts/base/chara/npc/object/ObjectInnDoor.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	defaultFst = GetStaticActor("DftFst"); | ||||
| 	choice = callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithInn_ExitDoor", nil, nil, nil); | ||||
| 	 | ||||
| 	if (choice == 1) then | ||||
| 		GetWorldManager():DoZoneChange(player, 1); | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent();	 | ||||
| end | ||||
							
								
								
									
										54
									
								
								Data/scripts/base/chara/npc/object/ObjectItemStorage.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								Data/scripts/base/chara/npc/object/ObjectItemStorage.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| --[[ | ||||
|  | ||||
| ObjectItemStorage Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| storageMenu() - Shows store/retrieve/help menu. | ||||
| selectCategory() - Shows the category menu | ||||
| selectStoreItem(nil, categoryId) - Shows store item menu | ||||
| selectReceiveItem(nil, categoryId) - Shows retrieve item menu | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName)	 | ||||
| 	 | ||||
| 	::TOP_MENU:: | ||||
| 	storageChoice = callClientFunction(player, "storageMenu"); | ||||
| 	 | ||||
| 	if (storageChoice == 1) then | ||||
| 		categoryChoice = callClientFunction(player, "selectCategory"); | ||||
| 		 | ||||
| 		if (categoryChoice == 5) then | ||||
| 			goto TOP_MENU; | ||||
| 		end | ||||
| 		 | ||||
| 		itemId = callClientFunction(player, "selectStoreItem", nil, categoryChoice); | ||||
| 			 | ||||
| 		if (itemId ~= nil) then | ||||
| 			player:GetItemPackage(INVENTORY_NORMAL):RemoveItem(itemId, 1); | ||||
| 		end | ||||
| 		 | ||||
| 	elseif (storageChoice == 2) then | ||||
| 		categoryChoice = callClientFunction(player, "selectCategory"); | ||||
| 	 | ||||
| 		if (categoryChoice == 5) then | ||||
| 			goto TOP_MENU; | ||||
| 		end | ||||
| 	 | ||||
| 		itemId = callClientFunction(player, "selectReceiveItem", nil, categoryChoice); | ||||
| 		 | ||||
| 		if (itemId ~= nil) then | ||||
| 			player:GetItemPackage(INVENTORY_NORMAL):AddItem(itemId, 1); | ||||
| 		end | ||||
| 	 | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end  | ||||
							
								
								
									
										6
									
								
								Data/scripts/base/chara/npc/object/ObjectShip.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								Data/scripts/base/chara/npc/object/ObjectShip.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
							
								
								
									
										13
									
								
								Data/scripts/base/chara/npc/object/OpeningStoperF0B1.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								Data/scripts/base/chara/npc/object/OpeningStoperF0B1.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	if (triggerName == "caution") then | ||||
| 		worldMaster = GetWorldMaster(); | ||||
| 		player:SendGameMessage(player, worldMaster, 34109, 0x20); | ||||
| 	elseif (triggerName == "exit") then | ||||
| 		GetWorldManager():DoPlayerMoveInZone(player, 5); | ||||
| 	end | ||||
| 	player:EndEvent(); | ||||
| end | ||||
							
								
								
									
										12
									
								
								Data/scripts/base/chara/npc/object/PrivateAreaPastExit.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Data/scripts/base/chara/npc/object/PrivateAreaPastExit.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	if (triggerName == "caution") then | ||||
| 		worldMaster = GetWorldMaster(); | ||||
| 		player:SendGameMessage(player, worldMaster, 34109, 0x20); | ||||
| 	elseif (triggerName == "exit") then		 | ||||
| 	end | ||||
| 	player:EndEvent(); | ||||
| end | ||||
							
								
								
									
										19
									
								
								Data/scripts/base/chara/npc/object/RaidDungeonBarrier.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Data/scripts/base/chara/npc/object/RaidDungeonBarrier.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
|  | ||||
| 	isActive = true; | ||||
|  | ||||
| 	if (isActive) then | ||||
| 		choice = callClientFunction(player, "askYesNo"); | ||||
| 	else | ||||
| 		callClientFunction(player, "eventTalkRead"); | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										56
									
								
								Data/scripts/base/chara/npc/object/RetainerFurniture.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								Data/scripts/base/chara/npc/object/RetainerFurniture.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| --[[ | ||||
|  | ||||
| RetainerFurniture Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventPushStepOpenRetainerMenu() - Opens menu to choose retainer | ||||
| eventRingBell() - Plays the bell ring animation | ||||
| eventPushRetainerCallCaution() - Shows warning that a open bazaar will be closed if retainer chosen | ||||
| eventTalkRetainerMenu(hasPossessions, showDispatchChoice) - Opens retainer menu. | ||||
| eventTalkRetainerDismissal(hasPossessions) - Show dismiss confirmation. | ||||
| eventTalkRetainerMannequin(0:Enable/1:Disable) - Shows dialog to enable/disable modeling. | ||||
| eventTalkRetainerItemTrade(operationCode) - Operate RetainerTradeWidget. Codes: 1 - Open, 2 - Select Mode, 3 - Close. | ||||
| eventTalkRetainerItemList(operationCode) -  Operate Bazaar Widget. Codes: 1 - Open, 2 - Select Mode, 3 - Close. | ||||
| eventReturnResult(resultCode, ?) - Redraws the RetainerTrade UI. | ||||
| eventTalkSelectBazaarStreet(limitsWardChoices) - Shows the dialog to send a retainer to a street. Set to 20.  | ||||
| eventTalkFinish() - Finishs the talk with retainer | ||||
| eventPlayerTurn(rotation) - Turns the player | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
| require ("retainer") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	retainerNumber = callClientFunction(player, "eventPushStepOpenRetainerMenu"); | ||||
| 	 | ||||
| 	if (retainerNumber == nil or retainerNumber == 0) then | ||||
| 		player:EndEvent(); | ||||
| 		return; | ||||
| 	end | ||||
| 	 | ||||
| 	callClientFunction(player, "eventRingBell");	 | ||||
| 	retainer = player:SpawnMyRetainer(npc, retainerNumber); | ||||
| 	 | ||||
| 	while (true) do | ||||
| 		choice = callClientFunction(player, "eventTalkRetainerMenu", false, true); | ||||
| 		if (choice == 1) then | ||||
| 			doItemTrade(player, retainer); | ||||
| 		elseif (choice == 2) then | ||||
| 			doBazaar(player, retainer); | ||||
| 		elseif (choice == 7) then | ||||
| 			callClientFunction(player, "eventTalkRetainerMannequin", 0);		 | ||||
| 		elseif (choice == 8) then | ||||
| 			callClientFunction(player, "eventTalkSelectBazaarStreet", 20); | ||||
| 		else | ||||
| 			break; | ||||
| 		end | ||||
| 	end | ||||
| 	 | ||||
| 	player:DespawnMyRetainer(); | ||||
| 	player:EndEvent(); | ||||
| end | ||||
							
								
								
									
										19
									
								
								Data/scripts/base/chara/npc/object/TaskBoard.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Data/scripts/base/chara/npc/object/TaskBoard.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	questNOC = GetStaticActor("Noc000"); | ||||
| 	 | ||||
| 	if (npc:GetActorClassId() == 1200193) then | ||||
| 		callClientFunction(player, "delegateEvent", player, questNOC, "pETaskBoardAskLimsa", nil, nil, nil); | ||||
| 	elseif (npc:GetActorClassId() == 1200194) then | ||||
| 		callClientFunction(player, "delegateEvent", player, questNOC, "pETaskBoardAskUldah", nil, nil, nil); | ||||
| 	else | ||||
| 		callClientFunction(player, "delegateEvent", player, questNOC, "pETaskBoardAskGridania", nil, nil, nil); | ||||
| 	end	 | ||||
| 	 | ||||
| 	player:EndEvent();	 | ||||
| end | ||||
							
								
								
									
										119
									
								
								Data/scripts/base/chara/npc/object/aetheryte/AetheryteChild.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								Data/scripts/base/chara/npc/object/aetheryte/AetheryteChild.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,119 @@ | ||||
| --[[ | ||||
|  | ||||
| AetheryteChild Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventAetheryteChildSelect(showTeleport, parentAetheryteID, animaAmount, animaCost(always 1)): Opens menu | ||||
| eventAetheryteChildDesion(aetheryteId): "Your homepoint is now X" | ||||
|  | ||||
| eventGLSelect(?) - Open GL selector | ||||
| eventGLSelectDetail(glid, ?, reward, rewardQuantity, subreward, subrewardQuantity, faction, ?, completed) - Show GL details | ||||
| eventGLDifficulty() - Open difficulty selector | ||||
| eventGLStart(glId, difficulty, evaluatingFaction, areaFactionStanding, factionReward, warningBoundByDuty, warningTooFar, warningYouCannotRecieve, warningChangingClass) - Confirmation dialog | ||||
|  | ||||
| eventGLBoost(currentFavor, minNeeded) - Ask player for Guardian Aspect | ||||
| eventGLPlay(??) - Open Menu (GL active version) | ||||
| eventGLReward (glId, clearTime, missionBonus, difficultyBonus, factionNumber, factionBonus, factionCredit, reward, rewardQuantity, subreward, subrewardQuantity, difficulty) - Open reward window | ||||
| eventGLJoin () - Ask to join party leader's leve | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
| require ("aetheryte") | ||||
| require ("utils") | ||||
| require ("guildleve") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, aetheryte, triggerName)	 | ||||
| 	 | ||||
| 	if (player:GetGuildleveDirector() ~= nil) then | ||||
| 		doGuildleveMenu(player, aetheryte); | ||||
| 	else | ||||
| 		doNormalMenu(player, aetheryte); | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| end | ||||
|  | ||||
| function doGuildleveMenu(player, aetheryte) | ||||
|  | ||||
| 	local currentGLDirector = player:GetGuildleveDirector();	 | ||||
| 	local choice = callClientFunction(player, "eventGLPlay", currentGLDirector.guildleveId, true, 1, 500, 400, guardian, 8, currentGLDirector.selectedDifficulty, 2); | ||||
|  | ||||
| 	--Abandon | ||||
| 	if (choice == 6) then | ||||
| 		currentGLDirector:AbandonGuildleve(); | ||||
| 	end | ||||
|  | ||||
| end | ||||
|  | ||||
| function doNormalMenu(player, aetheryte) | ||||
|  | ||||
| 	local aetheryteId = aetheryte:GetActorClassId(); | ||||
| 	local parentNode = aetheryteChildLinks[aetheryteId]; | ||||
| 	local menuChoice = callClientFunction(player, "eventAetheryteChildSelect", true, parentNode, 100, 1); | ||||
| 	 | ||||
| 	--Teleport | ||||
| 	if (menuChoice == 2) then | ||||
| 		printf("%ud", parentNode); | ||||
| 		destination = aetheryteTeleportPositions[parentNode]; | ||||
| 		 | ||||
| 		if (destination ~= nil) then | ||||
| 			randoPos = getRandomPointInBand(destination[2], destination[4], 3, 5); | ||||
| 			rotation = getAngleFacing(randoPos.x, randoPos.y, destination[2], destination[4]); | ||||
| 			GetWorldManager():DoZoneChange(player, destination[1], nil, 0, 2, randoPos.x, destination[3], randoPos.y, rotation); | ||||
| 		end | ||||
| 	--Init Levequest | ||||
| 	elseif (menuChoice == -1) then | ||||
| 		doLevequestInit(player, aetheryte); | ||||
| 	--Set Homepoint | ||||
| 	elseif (menuChoice == -2) then | ||||
| 		player:SetHomePoint(aetheryteId); | ||||
| 		callClientFunction(player, "eventAetheryteChildDesion", aetheryteId); | ||||
| 	--View Faction Standing | ||||
| 	elseif (menuChoice == -3) then | ||||
| 		player:SendGameMessage(player, aetheryte, 27, 0x20); | ||||
| 		player:SendGameMessage(player, aetheryte, 28, 0x20, 1, 15); | ||||
| 		player:SendGameMessage(player, aetheryte, 29, 0x20, 2, 10); | ||||
| 		player:SendGameMessage(player, aetheryte, 30, 0x20, 3, 5); | ||||
| 	end | ||||
| end | ||||
|  | ||||
| function doLevequestInit(player, aetheryte) | ||||
| 	local worldMaster = GetWorldMaster(); | ||||
| 	::SELECT_LOOP:: | ||||
| 	unknown, glId = callClientFunction(player, "eventGLSelect", 0x0); | ||||
| 	if (glId ~= 0) then | ||||
| 		::SELECT_DETAIL:: | ||||
| 		guildleveData = GetGuildleveGamedata(glId); | ||||
| 		 | ||||
| 		if (guildleveData == nil) then | ||||
| 			player:SendMessage(0x20, "", "An error has occured... aborting."); | ||||
| 			return; | ||||
| 		end | ||||
| 		 | ||||
| 		unknown, begin = callClientFunction(player, "eventGLSelectDetail", glId, 0xa, 0xf4241, 1000, 0, 0, 0, true, false);		 | ||||
| 		if (begin) then | ||||
| 			::SELECT_DIFFICULTY:: | ||||
| 			player:SendGameMessage(worldMaster, 50014, 0x20); --"Please select a difficulty level. This may be lowered later." | ||||
| 			difficulty = callClientFunction(player, "eventGLDifficulty", glId);			 | ||||
| 			if (difficulty == nil) then goto SELECT_DETAIL; end			 | ||||
| 			confirmResult = callClientFunction(player, "eventGLStart", glId, difficulty, 1, 10, 20, 0, 0, 0, 0); | ||||
| 			if (confirmResult == nil) then goto SELECT_DIFFICULTY; else | ||||
| 			 | ||||
| 				player:SendGameMessage(worldMaster, 50036, 0x20, glId, player); | ||||
| 				player:PlayAnimation(getGLStartAnimationFromSheet(guildleveData.borderId, guildleveData.plateId, true));				 | ||||
| 				director = player:GetZone():CreateGuildleveDirector(glId, difficulty, player); | ||||
| 				player:AddDirector(director); | ||||
| 				director:StartDirector(true, glId) | ||||
| 			 | ||||
| 			end | ||||
| 		else | ||||
| 			goto SELECT_LOOP; | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
							
								
								
									
										154
									
								
								Data/scripts/base/chara/npc/object/aetheryte/AetheryteParent.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								Data/scripts/base/chara/npc/object/aetheryte/AetheryteParent.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,154 @@ | ||||
| --[[ | ||||
|  | ||||
| AetheryteParent Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventAetheryteParentSelect(showTeleportMenu, animaAmount, gate1, gate2, gate3, gate4, gate5) - Open Menu | ||||
| eventAetheryteParentDesion(sheetId) - Show Homepoint Set Message | ||||
|  | ||||
| eventGLSelect(?) - Open GL selector | ||||
| eventGLSelectDetail(glid, ?, reward, rewardQuantity, subreward, subrewardQuantity, faction, ?, completed) - Show GL details | ||||
| eventGLDifficulty() - Open difficulty selector | ||||
| eventGLStart(glId, difficulty, evaluatingFaction, areaFactionStanding, factionReward, warningBoundByDuty, warningTooFar, warningYouCannotRecieve, warningChangingClass) - Confirmation dialog | ||||
| eventGLBoost(currentFavor, minNeeded) - Ask player for Guardian Aspect | ||||
| eventGLPlay(glId, showLeveLink, leveLinkFaction, leveLinkFactionStanding, leveLinkReward, guardianFavorAmount, guardianFavorNeeded, currentDifficulty, jobNameForChange) - Open Menu (GL active version) | ||||
| eventGLReward (glId, clearTime, missionBonus, difficultyBonus, factionNumber, factionBonus, factionCredit, reward, rewardQuantity, subreward, subrewardQuantity, difficulty) - Open reward window | ||||
| eventGLJoin () - Ask to join party leader's leve | ||||
|  | ||||
|  | ||||
| 	--callClientFunction(player, "eventGLBoost", 0xc8, 0xb);	 | ||||
| 	--callClientFunction(player, "eventGLReward", 0x2a48, 120, 123, 125, 1, 111, 0, 0xf4241, 5, 0, 0, 3); | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
| require ("aetheryte") | ||||
| require ("utils") | ||||
| require ("guildleve") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, aetheryte, triggerName) | ||||
| 	 | ||||
| 	if (player:GetGuildleveDirector() ~= nil) then | ||||
| 		doGuildleveMenu(player, aetheryte); | ||||
| 	else | ||||
| 		doNormalMenu(player, aetheryte); | ||||
| 	end	 | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
|  | ||||
| function doGuildleveMenu(player, aetheryte) | ||||
|  | ||||
| 	local currentGLDirector = player:GetGuildleveDirector();	 | ||||
| 	local choice = callClientFunction(player, "eventGLPlay", currentGLDirector.guildleveId, true, 1, 500, 400, guardian, 8, currentGLDirector.selectedDifficulty, 2); | ||||
|  | ||||
| 	--Abandon | ||||
| 	if (choice == 6) then | ||||
| 		currentGLDirector:AbandonGuildleve(); | ||||
| 	end | ||||
| 	 | ||||
| end | ||||
|  | ||||
| function doNormalMenu(player, aetheryte) | ||||
| 	local aetheryteId = aetheryte:GetActorClassId(); | ||||
| 	local childNodes = aetheryteParentLinks[aetheryteId]; | ||||
| 	 | ||||
| 	local listPosition = 1; | ||||
| 	local activeChildNodes = {0, 0, 0, 0, 0}; | ||||
| 	 | ||||
| 	if (childNodes ~= nil) then | ||||
| 		if (player:HasAetheryteNodeUnlocked(childNodes[1])) then | ||||
| 			activeChildNodes[listPosition] = childNodes[1]; | ||||
| 			listPosition = listPosition+1; | ||||
| 		end | ||||
| 		if (player:HasAetheryteNodeUnlocked(childNodes[2])) then | ||||
| 			activeChildNodes[listPosition] = childNodes[2]; | ||||
| 			listPosition = listPosition+1; | ||||
| 		end | ||||
| 		if (player:HasAetheryteNodeUnlocked(childNodes[3])) then | ||||
| 			activeChildNodes[listPosition] = childNodes[3]; | ||||
| 			listPosition = listPosition+1; | ||||
| 		end | ||||
| 		if (player:HasAetheryteNodeUnlocked(childNodes[4])) then | ||||
| 			activeChildNodes[listPosition] = childNodes[4]; | ||||
| 			listPosition = listPosition+1; | ||||
| 		end | ||||
| 		if (player:HasAetheryteNodeUnlocked(childNodes[5])) then | ||||
| 			activeChildNodes[listPosition] = childNodes[5]; | ||||
| 			listPosition = listPosition+1; | ||||
| 		end | ||||
| 	end | ||||
| 	 | ||||
| 	local showTeleportOptions = true; | ||||
| 	if (listPosition == 1) then | ||||
| 		showTeleportOptions = false; | ||||
| 	end | ||||
| 	 | ||||
| 	local choice = callClientFunction(player, "eventAetheryteParentSelect", showTeleportOptions, 100, activeChildNodes[1], activeChildNodes[2], activeChildNodes[3], activeChildNodes[4], activeChildNodes[5]); | ||||
| 	 | ||||
| 	if (choice ~= nil) then  | ||||
| 		--Init Leavequest | ||||
| 		if (choice == -1) then | ||||
| 			doLevequestInit(player, aetheryte); | ||||
| 		--Set Homepoint | ||||
| 		elseif (choice == -2) then | ||||
| 			player:SetHomePoint(aetheryteId); | ||||
| 			callClientFunction(player, "eventAetheryteParentDesion", aetheryteId); | ||||
| 		--View Faction Standings | ||||
| 		elseif (choice == -3) then | ||||
| 			player:SendGameMessage(player, aetheryte, 124, 0x20); | ||||
| 			player:SendGameMessage(player, aetheryte, 125, 0x20, 1, 15); | ||||
| 			player:SendGameMessage(player, aetheryte, 126, 0x20, 2, 10); | ||||
| 			player:SendGameMessage(player, aetheryte, 127, 0x20, 3, 5); | ||||
| 		--Teleport to Gate | ||||
| 		elseif (choice > 0) then | ||||
| 			destination = aetheryteTeleportPositions[activeChildNodes[choice]]; | ||||
| 			if (destination ~= nil) then | ||||
| 				randoPos = getRandomPointInBand(destination[2], destination[4], 3, 5); | ||||
| 				rotation = getAngleFacing(randoPos.x, randoPos.y, destination[2], destination[4]); | ||||
| 				GetWorldManager():DoZoneChange(player, destination[1], nil, 0, 2, randoPos.x, destination[3], randoPos.y, rotation); | ||||
| 			end | ||||
| 		end		 | ||||
| 	end | ||||
| end | ||||
|  | ||||
| function doLevequestInit(player, aetheryte) | ||||
| 	local worldMaster = GetWorldMaster(); | ||||
| 	::SELECT_LOOP:: | ||||
| 	unknown, glId = callClientFunction(player, "eventGLSelect", 0x0); | ||||
| 	if (glId ~= 0) then | ||||
| 		::SELECT_DETAIL:: | ||||
| 		guildleveData = GetGuildleveGamedata(glId); | ||||
| 		 | ||||
| 		if (guildleveData == nil) then | ||||
| 			player:SendMessage(0x20, "", "An error has occured... aborting."); | ||||
| 			return; | ||||
| 		end | ||||
| 		 | ||||
| 		unknown, begin = callClientFunction(player, "eventGLSelectDetail", glId, 0xa, 0xf4241, 1000, 0, 0, 0, true, false); | ||||
| 		if (begin) then | ||||
| 			::SELECT_DIFFICULTY:: | ||||
| 			player:SendGameMessage(worldMaster, 50014, 0x20); --"Please select a difficulty level. This may be lowered later." | ||||
| 			difficulty = callClientFunction(player, "eventGLDifficulty", glId);			 | ||||
| 			if (difficulty == nil) then goto SELECT_DETAIL; end			 | ||||
| 			confirmResult = callClientFunction(player, "eventGLStart", glId, difficulty, 1, guildleveData.favorCount, 20, 0, 0, 0, 0); | ||||
| 			if (confirmResult == nil) then goto SELECT_DIFFICULTY; else | ||||
| 							 | ||||
| 				player:SendGameMessage(worldMaster, 50036, 0x20, glId, player); | ||||
| 				player:PlayAnimation(getGLStartAnimationFromSheet(guildleveData.borderId, guildleveData.plateId, true));				 | ||||
| 				director = player:GetZone():CreateGuildleveDirector(glId, difficulty, player); | ||||
| 				player:AddDirector(director); | ||||
| 				director:StartDirector(true, glId); | ||||
| 				 | ||||
| 			end | ||||
| 		else | ||||
| 			goto SELECT_LOOP; | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
							
								
								
									
										25
									
								
								Data/scripts/base/chara/npc/populace/PopulaceAchievement.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								Data/scripts/base/chara/npc/populace/PopulaceAchievement.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceAchievement Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventNoGC() -  | ||||
| eventUnlock(sheetId) -  | ||||
| eventReward(?, bool, ?, bool) -  | ||||
| defTalk() - Blurb | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	 | ||||
| 	callClientFunction(player, "defTalk"); | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| end | ||||
							
								
								
									
										159
									
								
								Data/scripts/base/chara/npc/populace/PopulaceBlackMarketeer.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								Data/scripts/base/chara/npc/populace/PopulaceBlackMarketeer.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,159 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceBlackMarketeer Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| 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()                         - 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") | ||||
| require ("shop") | ||||
|  | ||||
| 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); | ||||
| 	 | ||||
|     if player:GetItemPackage(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:GetItemPackage(INVENTORY_NORMAL):RemoveItem(commemorativeCoin, 1); | ||||
|             player:GetItemPackage(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, location, shopInfo[buyResult][1], 1, 1, shopInfo[buyResult][3], gilCurrency);   | ||||
|             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, location, shopInfo[buyResult][1], 1, 1, shopInfo[buyResult][2], playerGCSeal);   | ||||
|             end | ||||
|         end    | ||||
|     end | ||||
| end | ||||
|  | ||||
| @@ -0,0 +1,26 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceBountyPresenter Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventLowerLevel(player) - | ||||
| eventAlreadyPresent(player) -  | ||||
| eventBeforePresent(player) - | ||||
| eventAfterPresent(player) - | ||||
| eventJail(player, bool) - | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	 | ||||
| 	callClientFunction(player, "eventLowerLevel", player);	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
| @@ -0,0 +1,26 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceBranchVendor Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventTalkWelcome(player) - Starts talk turn and  | ||||
| eventSearchItemAsk(nil, stopSearchingItemId) -  | ||||
| eventTalkStepBreak() - Finishes the talk turn. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	 | ||||
| 	callClientFunction(player, "eventTalkWelcome", player);	 | ||||
| 	callClientFunction(player, "eventSearchItemAsk", nil, 0);	 | ||||
| 	callClientFunction(player, "eventTalkStepBreak", player);	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										26
									
								
								Data/scripts/base/chara/npc/populace/PopulaceCampMaster.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								Data/scripts/base/chara/npc/populace/PopulaceCampMaster.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceCampMaster Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| defTalk(player, favAetheryte1, favAetheryte2, favAetheryte3, playerLevel, ?) - The main and only function for this npc. If favAetheryte1 == 0, will not ask to remove others. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	 | ||||
| 	favLocation = callClientFunction(player, "defTalk", player, 0, 1280004, 1280005); | ||||
| 	 | ||||
| 	--if (hasThree) then | ||||
| 		--Remove chosen | ||||
| 	--end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| end | ||||
| @@ -0,0 +1,31 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceCampSubMaster Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| talkWelcome(player, level, ?) - Main npc function. | ||||
| confirmUseFacility(player, gilAmount) - Confirm dialog if player uses facility. | ||||
| finishTalkTurn() - Call to stop the npc staring at player. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	 | ||||
| 	choice = callClientFunction(player, "talkWelcome", player, 1, false); | ||||
| 	 | ||||
| 	if (choice == 1) then | ||||
| 		confirmed = callClientFunction(player, "confirmUseFacility", player, 1); | ||||
| 	end | ||||
| 	 | ||||
| 	callClientFunction(player, "finishTalkTurn"); | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
| @@ -0,0 +1,41 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceCaravanAdviser Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| adviserDeffault()       - Not a typo.  NPC dialog talking about a chocobo.  Resets their sight on you, perhaps used on closing dialog? | ||||
| adviserAsk()            - Brings up a menu for caravan info, or purchasing gysahl greens | ||||
| adviserAdvise()         - NPC dialog discussing feeding chocobos | ||||
| adviserSales(price)     - Gysahl purchase dialog and prompt | ||||
| adviserBuy()            - Dialog to play after purchasing gysahl greens | ||||
| adviserBuyNG()          - NPC plays /shrug animation.   | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	local gysahlPrice = 20; | ||||
| 	local choice = callClientFunction(player, "adviserAsk"); | ||||
|      | ||||
|     if choice == 1 then | ||||
|         callClientFunction(player, "adviserAdvise"); | ||||
|     elseif choice == 2 then | ||||
|         local purchaseChoice = callClientFunction(player, "adviserSales", gysahlPrice); | ||||
|          | ||||
|         if purchaseChoice == 1 then | ||||
|             callClientFunction(player, "adviserBuy"); | ||||
|         elseif purchaseChoice == 2 then | ||||
|             callClientFunction(player, "adviserBuyNG"); | ||||
|         end | ||||
|     elseif choice == 3 then | ||||
|         callClientFunction(player, "adviserDeffault") | ||||
|     end | ||||
|  | ||||
| 	player:EndEvent(); | ||||
| end | ||||
| @@ -0,0 +1,68 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceCaravanGuide Script | ||||
|  | ||||
| This script handles the caravan guide class, which is for the actor who escorts the chocobos behind them during Caravan Security events.   | ||||
|  | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| caravanGuardCancel()                                        - Menu prompt to abandon the caravan | ||||
|  | ||||
| caravanGuardReward(cargo, nil, areaName, playerGC, killCount, areaName2)       | ||||
|                                                             - Reward dialog for completing the caravan | ||||
|                                                             - cargo = 0 (none) through 9 (all) for varying degrees of success dialog | ||||
|                                                             - If playerGC doesn't match the GC of the areaName region, NPC mentions you don't need their seals. | ||||
|                                                             - killCount shows an extra dialog if 40-49 enemies were slain, and a different one at 50+ | ||||
|                                                              | ||||
| caravanGuardNotReward()                                     - Dialog stating you didn't contribute to the event at all | ||||
| caravanGuardFailReward(areaName, areaName2)                 - Failure dialog, NPC offers free gysahl green, then offers free teleport back to aetheryte | ||||
| caravanGuardThanks(name1, name2, name3)                     - Dialog for joining the caravan.  NPC names the three chocobos. Name IDs from xtx_displayName | ||||
| caravanGuardOffer(areaName, areaName2, playerGC)            - Dialog for who to talk to for joining the caravan. | ||||
| caravanGuardAmple(areaName, areaName2)                      - Dialog for NPC taking a break? | ||||
| caravanGuardSuccess()                                       - Dialog when you reached destination? | ||||
| caravanGuardFailure(areaName, areaName2)                    - Failure dialog for mentioned area. | ||||
| caravanGuardIgnore()                                        - Resets NPC state for player?  Or used for players not flagged for the event. | ||||
| caravanGuardBonusReward(nil, isBonus?)                      - NPC says variation on a piece of dialog from the boolean passed | ||||
| caravanGuardNotBonusReward()                                - Inventory full flavour dialog | ||||
|  | ||||
|  | ||||
| Notes: | ||||
| Functions employing areaName/areaName2 add their value together in the client's script to get the area name.  Said area values are...  | ||||
| 1 = Wineport, 2 = Quarrymill, 3 = Silver Bazaar, 4 = Aleport, 5 = Hyrstmill, 6 = Golden Bazaar | ||||
|  | ||||
| areaName will always be 1-3 for caravanGuardReward to function as expected for GC-related dialog | ||||
| areaName2 will always be either 0 or 3.  0 for the lower level caravan area name, 3 for the higher level. | ||||
|  | ||||
| populaceCaravanGuide sheet: | ||||
| ID  Dialog                                                                                Comment | ||||
| 6	It is time. Come, let us ride.                                                      - Caravan begins. | ||||
| 12	We've arrived at last! Come and speak to me when you're ready to claim your reward. - Caravan completed. | ||||
| 23	We're under attack! The chocobos! Protect the chocobos!                             - Caravan aggros monsters | ||||
| 27	Gods, have we already come this far? At this pace, we stand to make good time.      - Says between 50% & 90% of the way to desgination? Can be said more than once per run | ||||
| 28	Well fought, friend. I thank the gods you're with us. Come, onward!                 - Cleared monsters that caravan aggro'd | ||||
|  | ||||
| TO-DO: | ||||
| Document actors involved.  Should be six of them. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	local areaName = 1; | ||||
|     local areaName2 = 3; | ||||
|     local playerGC = 1; | ||||
|     local cargo = 9; | ||||
|     local killCount = 50; | ||||
|     callClientFunction(player, "caravanGuardOffer", areaName, areaName2, playerGC); | ||||
|     --callClientFunction(player, "caravanGuardReward", cargo, nil, areaName, playerGC, killCount, areaName2);    | ||||
|     --player:SendGameMessageDisplayIDSender(npc, 6, MESSAGE_TYPE_SAY, npc.displayNameId); | ||||
|      | ||||
|      | ||||
| 	player:EndEvent(); | ||||
| end | ||||
| @@ -0,0 +1,49 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceCaravanManager Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| caravanGuardEntry(areaGC, hasRoomForGCSeals, areaName, difficulty, playerGC, playerCountRequired, levelRequired)  | ||||
|        - Dialog for signing up for caravan. areaGC(1-3) & areaName(0 or 3) added together to get location name.   | ||||
|        - If difficulty => 40 on areaGC 1-3 & areaName 0, NPC mentions it's be a tougher trip | ||||
|         | ||||
| caravanGuardQuestion(areaName1, areaName2, escortMax, isSameGC?, playerGC?) - Ask about the caravan escort | ||||
| caravanGuardJoinOK(areaName1, areaName2, playerGC)   - Dialog for successfully joining the caravan | ||||
| caravanGuardJoinNG(nil, maxEscorts, playerGC)        - Dialog dictating how many escorts total filled the run.   | ||||
| caravanGuardAmple(nil, playerGC, playerGC)           - Dialog for caravan escort being full. | ||||
| caravanGuardOther(npcGC)                             - Dialog where NPC mentions you're not part of the given Grand Company parameter | ||||
| caravanGuardSigh()                                   - NPC does a shrug animation | ||||
| caravanGuardHuh()                                    - NPC does /huh | ||||
| caravanGuardCancel(nil, playerGC)                    - Dialog for canceling caravan escort.  | ||||
|  | ||||
|  | ||||
| Notes: | ||||
| Some NPC dialog address you differently if your GC rank is Chief Sergeant (id 27) or higher, but only in non-English languages. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	local GC = 3; | ||||
|     local playerGC = 1;  | ||||
|     local areaName = 0; | ||||
|     local level = 25; | ||||
|     local playerCount = 8; | ||||
|     local difficulty = 41; | ||||
|     local hasRoomForGCSeals = false; | ||||
| 	local isSameGC = true; | ||||
|     local escortMax = 8; | ||||
|     areaName1 = 1; | ||||
|     areaName2 = 3; | ||||
|      | ||||
|    -- callClientFunction(player, "caravanGuardCancel", nil, 3); | ||||
|      | ||||
|     callClientFunction(player, "caravanGuardEntry", GC, hasRoomForGCSeals, areaName, difficulty, playerGC, playerCount, level); | ||||
| 	player:EndEvent(); | ||||
| end | ||||
							
								
								
									
										114
									
								
								Data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								Data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,114 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceChocoboLender Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventTalkWelcome(player) - Start Text | ||||
| eventAskMainMenu(player, curLevel, hasFundsForRent, isPresentChocoboIssuance, isSummonMyChocobo, isChangeBarding, currentChocoboWare) - Shows the main menu | ||||
| eventTalkMyChocobo(player) - Starts the cutscene for getting a chocobo | ||||
| eventSetChocoboName(true) - Opens the set name dialog | ||||
| eventAfterChocoboName(player) - Called if player done naming chocobo, shows cutscene, returns state and waits to teleport outside city. | ||||
| eventCancelChocoboName(player) - Called if player cancels naming chocobo, returns state.  | ||||
| eventTalkStepBreak(player) - Finishes talkTurn and says a goodbye | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| local gcIssuances = { | ||||
| 	[1500006] = 2001004, | ||||
| 	[1500061] = 2001005, | ||||
| 	[1000840] = 2001006 | ||||
| }; | ||||
|  | ||||
| local startAppearances = { | ||||
| 	[1500006] = CHOCOBO_LIMSA1, | ||||
| 	[1500061] = CHOCOBO_GRIDANIA1, | ||||
| 	[1000840] = CHOCOBO_ULDAH1 | ||||
| }; | ||||
|  | ||||
| local cityExits = { | ||||
| 	[1500006] = 15, | ||||
| 	[1500061] = 14, | ||||
| 	[1000840] = 16 | ||||
| }; | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	 | ||||
| 	--callClientFunction(player, "eventTalkWelcome", player); | ||||
| 	--callClientFunction(player, "eventAskMainMenu", player, 20, true, true, true, true, 4); | ||||
| 	--callClientFunction(player, "eventTalkMyChocobo", player); | ||||
| 	--callClientFunction(player, "eventSetChocoboName", false); | ||||
| 	--callClientFunction(player, "eventAfterChocoboName", player); | ||||
|  | ||||
| 	local curLevel = 20; -- TODO: pull from character | ||||
| 	local hasIssuance = player:GetItemPackage(INVENTORY_KEYITEMS):HasItem(gcIssuances[npc:GetActorClassId()]); | ||||
| 	local hasChocobo = player.hasChocobo; | ||||
| 	 | ||||
| 	if (player.isGM and hasChocobo == false) then -- Let GMs auto have the issuance for debugging  | ||||
| 		hasIssuance = true; | ||||
| 	end	 | ||||
|  | ||||
| 	local rentPrice = 800; | ||||
| 	local hasFunds = (player:GetCurrentGil() >= rentPrice); | ||||
|  | ||||
| 	callClientFunction(player, "eventTalkWelcome", player); | ||||
| 	 | ||||
| 	local menuChoice = callClientFunction(player, "eventAskMainMenu", player, curLevel, hasFunds, hasIssuance, true, true, player.chocoboAppearance); | ||||
|  | ||||
| 	if (menuChoice == 1) then -- Issuance option | ||||
| 		callClientFunction(player, "eventTalkMyChocobo", player); | ||||
| 		local nameResponse = callClientFunction(player, "eventSetChocoboName", true); | ||||
|  | ||||
| 		if (nameResponse == "") then -- Cancel Chocobo naming | ||||
| 			callClientFunction(player, "eventCancelChocoboName", player); | ||||
| 			callClientFunction(player, "eventTalkStepBreak", player); | ||||
| 			player:EndEvent(); | ||||
| 			return; | ||||
| 		else		 | ||||
| 			local appearance = startAppearances[npc:GetActorClassId()]; | ||||
| 			player:IssueChocobo(appearance, nameResponse); | ||||
| 			callClientFunction(player, "eventAfterChocoboName", player); | ||||
| 			mountChocobo(player); | ||||
| 			GetWorldManager():DoZoneChange(player, cityExits[npc:GetActorClassId()]);			 | ||||
| 			player:SendGameMessage(player, GetWorldMaster(), 25248, 0x20, 2001007); | ||||
| 			player:SendDataPacket("attention", GetWorldMaster(), "", 25248, 2001007); | ||||
| 			 | ||||
| 			if (player:GetItemPackage(INVENTORY_KEYITEMS):HasItem(2001007) == false) then | ||||
| 				player:GetItemPackage(INVENTORY_KEYITEMS):AddItem(2001007); | ||||
| 			end | ||||
| 			 | ||||
| 			player:GetItemPackage(INVENTORY_KEYITEMS):RemoveItem(gcIssuances[npc:GetActorClassId()], 1); | ||||
| 			 | ||||
| 			player:EndEvent(); | ||||
| 			return; | ||||
| 		end | ||||
| 				 | ||||
| 	elseif(menuChoice == 2) then -- Summon Bird | ||||
| 		mountChocobo(player); | ||||
| 		GetWorldManager():DoZoneChange(player, cityExits[npc:GetActorClassId()]); | ||||
| 	elseif(menuChoice == 3) then -- Change Barding | ||||
| 		callClientFunction(player, "eventTalkStepBreak", player); | ||||
| 	elseif(menuChoice == 5) then -- Rent Bird | ||||
| 		issueRentalChocobo(player); | ||||
| 	else | ||||
| 		callClientFunction(player, "eventTalkStepBreak", player); | ||||
| 	end | ||||
|  | ||||
| 	player:EndEvent(); | ||||
| end | ||||
|  | ||||
| function mountChocobo(player) | ||||
| 	player:SendChocoboAppearance(); | ||||
| 	player:SetMountState(1); | ||||
| 	player:ChangeSpeed(0.0, 5.0, 10.0); | ||||
| 	player:ChangeState(15); | ||||
| end | ||||
|  | ||||
| function issueRentalChocobo(player) | ||||
| 	--TODO: Write issue rental chocobo code | ||||
| end | ||||
| @@ -0,0 +1,43 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceCompanyBuffer Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventTalkWelcome(player, boolean)       - Welcome dialog.  Boolean seems to be related to rank? | ||||
| eventTalkBufEffect()                    - Dialog for applying Sanction | ||||
| eventTalkBufEffectAfter(player)         - Dialog after applying Sanction | ||||
| eventTalkStepBreak()                    - Returns to NPC's neutral state | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
|     return false, false, 0, 0;   | ||||
| end | ||||
|  | ||||
| local gcRep = {  | ||||
|     [1500388] = 1, -- Maelstrom Representative | ||||
|     [1500389] = 2, -- Adder Representative | ||||
|     [1500390] = 3, -- Flame Representative | ||||
| } | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
|     local playerGC = player.gcCurrent; | ||||
|     local playerGCRanks = {player.gcRankLimsa, player.gcRankGridania, player.gcRankUldah}; | ||||
|      | ||||
|     local choice = callClientFunction(player, "eventTalkWelcome", player, true); | ||||
|      | ||||
|     if (choice == 1 and playerGCRanks[playerGC] > 10 and playerGCRanks[playerGC] < 112) then | ||||
|         callClientFunction(player, "eventTalkBufEffect"); | ||||
|         callClientFunction(player, "eventTalkBufEffectAfter", player); | ||||
|         -- TODO: Add Sanction buff | ||||
|     else | ||||
|         player:SendMessage(0x20, "", "Quit hex editing your memory."); | ||||
|     end | ||||
|     | ||||
|     callClientFunction(player, "eventTalkStepBreak");  | ||||
|     player:endEvent(); | ||||
| end | ||||
|  | ||||
| @@ -0,0 +1,66 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceCompanyGLPublisher Script | ||||
|  | ||||
| xtx_gcRank for GC Rank values | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| talkOutsider()                              - Dialog for no affiliated with GC.  Seems to always read Maelstrom? | ||||
| talkOfferWelcome(unk1)                      - Errors | ||||
| askCompanyLeve()                            - Errors | ||||
| askLeveDetail(unk1, unk2, unk3, unk4, unk5, unk6, unk7, unk8)                             - Errors | ||||
|  | ||||
| eventGLDifficulty()                         - Difficulty window, returns player choice | ||||
| eventGLStart(leveName, difficulty, unk1)    - leveName from xtx_guildleve | ||||
|  | ||||
| talkAfterOffer() | ||||
| talkOfferLimit() | ||||
|  | ||||
| finishTalkTurn()                                            - Resets NPC target/facing | ||||
|  | ||||
| eventGLPlay(leveName, guardianFavor, favorCost, difficulty) - Menu for active levequest | ||||
| eventGLShinpu(guardianFavor, favorCost)                     - Menu to accept favor buff.  evenGLPlay() calls it | ||||
| eventGLThanks()                                             - Errors | ||||
|  | ||||
| eventGLReward(                      -- Leve reward screen | ||||
|     guildleveId,  | ||||
|     clearTime,  | ||||
|     missionBonus,  | ||||
|     difficultyBonus,  | ||||
|     factionNumber,  | ||||
|     factionBonus,  | ||||
|     factionCredit,  | ||||
|     glRewardItem,  | ||||
|     glRewardNumber,  | ||||
|     glRewardSubItem,  | ||||
|     glRewardSubNumber,  | ||||
|     difficulty | ||||
| ) | ||||
|  | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| gcOfficer = {  | ||||
| [1500222] = 1, -- Storm Sergeant Hammil  | ||||
| [1500223] = 1, -- Storm Sergeant Sternn  | ||||
| [1500224] = 2, -- Serpent Sergeant Cordwyk  | ||||
| [1500225] = 2, -- Serpent Sergeant Lodall   | ||||
| [1500226] = 3, -- Flame Sergeant Byrne   | ||||
| [1500227] = 3, -- Flame Sergeant Dalvag | ||||
| } | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
|  | ||||
|     callClientFunction(player, "talkOutsider"); | ||||
|  | ||||
|     callClientFunction(player, "finishTalkTurn"); | ||||
|     player:endEvent(); | ||||
| end | ||||
|  | ||||
| @@ -0,0 +1,45 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceCompanyGuide Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventTalkWelcome()                              - Dialog for new recruits | ||||
| eventTalkProvisional()                          - Message for when rank isn't high enough? | ||||
| eventTalkExclusive()                            - Message for wrong GC. | ||||
| eventTalkComMember(nil, npc, isFoundationDay)   - Information menus for various GC related activities | ||||
| eventTalkStepBreak()                            - Returns to NPC's neutral state | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
|     return false, false, 0, 0;   | ||||
| end | ||||
|  | ||||
| local gcRep = {  | ||||
|     [1001737] = 1, -- Maelstrom Representative | ||||
|     [1001738] = 2, -- Adder Representative | ||||
|     [1001739] = 3, -- Flame Representative | ||||
| } | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
|     local playerGC = player.gcCurrent; | ||||
|     local playerGCRanks = {player.gcRankLimsa, player.gcRankGridania, player.gcRankUldah}; | ||||
|     local npcGC = gcRep[npc:GetActorClassId()];     | ||||
|      | ||||
|     if (playerGC ~= npcGC and playerGCRanks[playerGC] == 127) then | ||||
|         callClientFunction(player, "eventTalkWelcome"); | ||||
|     elseif (playerGC == npcGC and playerGCRanks[playerGC] == 127) then | ||||
|         callClientFunction(player, "eventTalkProvisional"); | ||||
|     elseif (playerGC ~= npcGC and playerGCRanks[playerGC] ~= 127) then | ||||
|         callClientFunction(player, "eventTalkExclusive"); | ||||
|     elseif (playerGC == npcGC and playerGCRanks[playerGC] > 10 and playerGCRanks[playerGC] < 112) then | ||||
|         callClientFunction(player, "eventTalkComMember", nil, npc, true); | ||||
|     end | ||||
|  | ||||
|     callClientFunction(player, "eventTalkStepBreak");  | ||||
|     player:endEvent(); | ||||
| 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:GetItemPackage(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 | ||||
							
								
								
									
										510
									
								
								Data/scripts/base/chara/npc/populace/PopulaceCompanyShop.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										510
									
								
								Data/scripts/base/chara/npc/populace/PopulaceCompanyShop.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,510 @@ | ||||
| --[[ | ||||
|  | ||||
| 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") | ||||
| require ("shop") | ||||
|  | ||||
| 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 = 0; -- 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 ITEM-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, location, shopInfo[buyIndex][1], shopInfo[buyIndex][3], shopInfo[buyIndex][2], shopInfo[buyIndex][4], playerGCSeal);   | ||||
|                 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 | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
							
								
								
									
										464
									
								
								Data/scripts/base/chara/npc/populace/PopulaceCompanySupply.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										464
									
								
								Data/scripts/base/chara/npc/populace/PopulaceCompanySupply.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,464 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceCompanySupply Script | ||||
|  | ||||
| This class handles the menus for player's delivering specific items in exchange for grand company seals.   | ||||
| The supply/provision schedule runs on a weekly rotation, which resets Monday at 12AM JST, with eight rotations total to cycle through. | ||||
| Each desired item has a server-wide max that it can be turned in, and when that is fulfilled, it moves to the next item in that week's list to work on. | ||||
|  | ||||
| NPCs involved in the script use the Noc001 script for dialog and menu interactions. | ||||
|  | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventTalkPreJoin()                              - Dialog when you're not affiliated | ||||
| eventTalkExclusive()                            - Dialog when you're part of a GC but not the one of the actor? | ||||
| eventTalkJoined()                               - Salutes then softlocks the client due to removed dialog strings. Obsolete function. | ||||
|  | ||||
| eventQuestItemMenuOpen(itemId, itemPrice, itemPriceHq, supplyType) - supplyType: 1 = Supply, 2 = Provisioning,  3 = Totorak, 4 = Dzmael, 5 = Primal, 6 = NM drops | ||||
| eventQuestItemMenuSelect(quantity, quality, unk) - Brings up the shop-style menu for viewing item detail and confirming item delivery.  Args appear to do nothing on client? | ||||
| eventQuestItemMenuClose()                                    - Closes menu | ||||
|  | ||||
| eventQuestSupplyItemActor(unk1)     -- Client calls this automatically for setting up Expeditionary window in some manner | ||||
| eventQuestSupplyItemID(unk1, unk2)  -- eventQuestSupplyItemActor() calls this to sets item ranges based on category | ||||
|  | ||||
| getEventQuestSupplyMode()                       - Returns current supply mode set by eventQuestItemMenuOpen() | ||||
| eventTalkStepBreak()                            - Resets actor engage state | ||||
|  | ||||
|  | ||||
| Noc001 Functions: | ||||
|  | ||||
| pENPCAskSupplyWelcome(npcGC)  -- Welcome dialog | ||||
| pENPCAskSupply(npcGC)         -- Brings up the delivery selection menu | ||||
| eventQuestAskExWelcome(npcGC) -- Dialog when you pick Expeditionary | ||||
| eventQuestAskExArea(npcGC)    -- Brings up the Expeditionary selection menu | ||||
| pENPCAskNowTalk(npcGC)        -- Dialog for picking Delivery Status from pENPCAskSupply() | ||||
|  | ||||
| nowSup(itemId1, current1, max1, itemId2, current2, max2, itemId3, current3, max3) -- Says current 3 items and current amount delivered vs. max it'll take | ||||
| nowSupAddItem(itemId, current, max)                                               -- Lists bonus item | ||||
| pItem(itemId1, unk1, itemId2, unk2, itemId3, unk3, itemId4, unk4) -- Lists which item(s) you want to delivery. Fourth item is the bonus, set 0 for hidden. | ||||
|  | ||||
| showSupplyLimit(minutes, seconds, current, required)   -- Shows time remaining to finish delivery, shows current/required amount | ||||
| eventShowPrizeMessage(npcGC)                           -- Reward dialog for handing something in? | ||||
|  | ||||
| pELimitErr()                                           -- Error msg for GC no longer accepting items.  | ||||
| pETradeErr()                                           -- Transaction error.  Inventory error? | ||||
| pETradeErrLimit(minutes, seconds, current, required)   -- Transaction error.  Shows time remaining and current/required amount | ||||
| pESuppylMaxErrKeyWait(isShowLimit, minutes, seconds, current, required) -- Error msg for delivery quota already filled.  Optional timer/amount display | ||||
| pESuppylSealMaxErr()                                                    -- Error msg for capped on GC seals, transaction incomplete | ||||
|  | ||||
| eventQuestCantEx(npcGC)      -- Dialog explaining you need to be Private Second Class to do Expeditionary missions | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
| require ("shop") | ||||
|  | ||||
| function init(npc) | ||||
|     return false, false, 0, 0;   | ||||
| end | ||||
|  | ||||
| local gcRep = {  | ||||
|     [1500210] = 1, -- Maelstrom Representative | ||||
|     [1500211] = 2, -- Adder Representative | ||||
|     [1500212] = 3, -- Flame Representative | ||||
| } | ||||
|  | ||||
| local gcItems = { -- Debug purposes.  Static item list with seal value and max turn-in. | ||||
|     [111] = {id = 10002015, seals = 8, cap = 1900}, | ||||
|     [112] = {id = 8031419, seals = 68, cap = 300}, | ||||
|     [113] = {id = 3010011, seals = 3, cap = 5000}, | ||||
|     [114] = {id = 8011108, seals = 89, cap = 400}, | ||||
|  | ||||
|     [115] = {id = 10004001, seals = 5, cap = 3000}, | ||||
|     [116] = {id = 10008109, seals = 3, cap = 5000}, | ||||
|     [117] = {id = 12000180, seals = 5, cap = 3000}, | ||||
|     [118] = {id = 10004026, seals = 9, cap = 3400}, | ||||
|  | ||||
|     [121] = {id = 10008211, seals = 5, cap = 3000}, | ||||
|     [122] = {id = 3020407, seals = 5, cap = 2500}, | ||||
|     [123] = {id = 8030220, seals = 92, cap = 200}, | ||||
|     [124] = {id = 8030922, seals = 99, cap = 400}, | ||||
|  | ||||
|     [125] = {id = 10001014, seals = 3, cap = 5000}, | ||||
|     [126] = {id = 10008007, seals = 5, cap = 3000}, | ||||
|     [127] = {id = 3011217, seals = 3, cap = 5000}, | ||||
|     [128] = {id = 3011207, seals = 3, cap = 6000}, | ||||
|  | ||||
|     [131] = {id = 4030204, seals = 69, cap = 300}, | ||||
|     [132] = {id = 10004103, seals = 9, cap = 1700}, | ||||
|     [133] = {id = 10009208, seals = 6, cap = 3000}, | ||||
|     [134] = {id = 1, seals = 1, cap = 1}, -- Unknown | ||||
|  | ||||
|     [135] = {id = 10004008, seals = 9, cap = 1700}, | ||||
|     [136] = {id = 10008007, seals = 5, cap = 3000}, | ||||
|     [137] = {id = 3011201, seals = 5, cap = 3000}, | ||||
|     [138] = {id = 10009401, seals = 6, cap = 6000}, | ||||
|  | ||||
|     [211] = {id = 10002012, seals = 5, cap = 3000}, | ||||
|     [212] = {id = 4100007, seals = 51, cap = 300}, | ||||
|     [213] = {id = 3010108, seals = 2, cap = 3000}, | ||||
|     [214] = {id = 8080825, seals = 42, cap = 800}, | ||||
|  | ||||
|     [215] = {id = 10004003, seals = 5, cap = 3000}, | ||||
|     [216] = {id = 10002012, seals = 3, cap = 5000}, | ||||
|     [217] = {id = 3011104, seals = 2, cap = 3000}, | ||||
|     [218] = {id = 3011107, seals = 3, cap = 6000}, | ||||
|  | ||||
| }  | ||||
|  | ||||
|  | ||||
| local gcWeek = {     -- Debug purposes. Static weekly item lists.  [week] = { [city] =  {[category] = { info } } } | ||||
|     [1] = { | ||||
|         [1] = { -- Limsa | ||||
|             [1] = { -- Supply | ||||
|                 gcItems[111], | ||||
|                 gcItems[112], | ||||
|                 gcItems[113], | ||||
|                 gcItems[114], | ||||
|             }, | ||||
|             [2] = { -- Provision | ||||
|                 gcItems[115], | ||||
|                 gcItems[116], | ||||
|                 gcItems[117], | ||||
|                 gcItems[118],        | ||||
|             } | ||||
|         }, | ||||
|         [2] = { -- Gridania | ||||
|             [1] = { -- Supply | ||||
|                 gcItems[121], | ||||
|                 gcItems[122], | ||||
|                 gcItems[123], | ||||
|                 gcItems[124], | ||||
|             }, | ||||
|             [2] = { -- Provision | ||||
|                 gcItems[125], | ||||
|                 gcItems[126], | ||||
|                 gcItems[127], | ||||
|                 gcItems[128],        | ||||
|             } | ||||
|         }, | ||||
|         [3] = { -- Ul'dah | ||||
|             [1] = { -- Supply | ||||
|                 gcItems[131], | ||||
|                 gcItems[132], | ||||
|                 gcItems[133], | ||||
|                 gcItems[134], | ||||
|             }, | ||||
|             [2] = { -- Provision | ||||
|                 gcItems[135], | ||||
|                 gcItems[136], | ||||
|                 gcItems[137], | ||||
|                 gcItems[138],        | ||||
|             } | ||||
|         } | ||||
|     }, | ||||
|          | ||||
|     [2] = { | ||||
|         [1] = { -- Limsa | ||||
|             [1] = { -- Supply | ||||
|                 gcItems[211], | ||||
|                 gcItems[212], | ||||
|                 gcItems[213], | ||||
|                 gcItems[214], | ||||
|             }, | ||||
|             [2] = { -- Provision | ||||
|                 gcItems[215], | ||||
|                 gcItems[216], | ||||
|                 gcItems[217], | ||||
|                 gcItems[218],        | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| local gcDelivery  = { -- Debug purposes.  Holds values for current turned in amount and 4th item bonus status. | ||||
|     week = 1, | ||||
|     currentCount = { | ||||
|         { | ||||
|             {49, 81, 5000, 5}, {2402, 4779, 589, 2}     -- Limsa Supply/Provision | ||||
|         },   | ||||
|         { | ||||
|             {1, 2, 3, 4}, {5, 6, 7, 8}                  -- Gridania Supply/Provision | ||||
|         }, | ||||
|         { | ||||
|             {10, 32, 9, 18}, {23, 49, 9, 300}           -- Ul'dah Supply/Provision | ||||
|         } | ||||
|     },     | ||||
|     bonus = { {1, 1}, {0,1}, {0,1} }; -- City -> {Supply, Provision} | ||||
|     timeRemainingMinutes = 99, | ||||
|     timeRemainingSeconds = 59, | ||||
| } | ||||
|  | ||||
| local supplyQuest = GetStaticActor("Noc001"); | ||||
| local skipGCcheck = false;    -- Debug  | ||||
| local skipRankCheck = false;  -- Debug | ||||
| local gcCheckProceed = false; -- Debug | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
|     local playerGC = player.gcCurrent; | ||||
|     local limsaRank = player.gcRankLimsa; | ||||
|     local gridaniaRank = player.gcRankGridania; | ||||
|     local uldahRank = player.gcRankUldah; | ||||
|     local playerGCSeal = 1000200 + playerGC; | ||||
|      | ||||
|     local npcId = npc:GetActorClassId(); | ||||
|     local npcGC = gcRep[npcId];  | ||||
|      | ||||
|     if (skipGCcheck == true) then | ||||
|         gcCheckProceed = true; | ||||
|     end | ||||
|          | ||||
|     if ((playerGC ~= npcGC) and skipGCcheck == false)  then | ||||
|         if (playerGC == 0) then | ||||
|             callClientFunction(player, "eventTalkPreJoin"); | ||||
|         else | ||||
|             callClientFunction(player, "eventTalkExclusive"); | ||||
|         end | ||||
|     else | ||||
|         gcCheckProceed = true; | ||||
|     end | ||||
|      | ||||
|     if gcCheckProceed then | ||||
|         callClientFunction(player, "delegateEvent", player, supplyQuest, "pENPCAskSupplyWelcome", gcRep[npcId]); | ||||
|         while (true) do | ||||
|          | ||||
|             local choice = callClientFunction(player, "delegateEvent", player, supplyQuest, "pENPCAskSupply", gcRep[npcId]); | ||||
|              | ||||
|             if (choice == 2) then -- Supply | ||||
|                 deliveryMenuInfo(player, npcGC, 1); | ||||
|                  | ||||
|             elseif (choice == 3) then -- Provision | ||||
|                 deliveryMenuInfo(player, npcGC, 2); | ||||
|  | ||||
|             elseif (choice == 4) then -- Expeditionary | ||||
|                 local proceed = false; | ||||
|                  | ||||
|                 if (skipRankCheck == true) then | ||||
|                     proceed = true; | ||||
|                 else | ||||
|                     if (playerGC == 1 and limsaRank >= 13 and limsaRank <= 111)  | ||||
|                     or (playerGC == 2 and gridaniaRank >= 13 and gridaniaRank <= 111)  | ||||
|                     or (playerGC == 3 and uldahRank >= 13 and uldahRank <= 111) then | ||||
|                         proceed = true | ||||
|                     end | ||||
|                 end | ||||
|  | ||||
|                 if proceed == true then | ||||
|                     callClientFunction(player, "delegateEvent", player, supplyQuest, "eventQuestAskExWelcome", gcRep[npcId]);  | ||||
|                     while (true) do | ||||
|                         local exChoice = callClientFunction(player, "delegateEvent", player, supplyQuest, "eventQuestAskExArea", gcRep[npcId]);  | ||||
|                          | ||||
|                         if (exChoice >= 3) then | ||||
|                             deliveryMenuOpen(player, npc, 0,0,0, exChoice); | ||||
|                         else | ||||
|                             break; | ||||
|                         end | ||||
|                     end | ||||
|                 else | ||||
|                     callClientFunction(player, "delegateEvent", player, supplyQuest, "eventQuestCantEx",gcRep[npcId]); | ||||
|                 end | ||||
|  | ||||
|             elseif (choice == 5) then -- Requested item | ||||
|                 deliveryStatus(player, npcGC); | ||||
|             else | ||||
|                 break; | ||||
|             end | ||||
|              | ||||
|             wait(1); | ||||
|         end | ||||
|     end | ||||
|  | ||||
|     callClientFunction(player, "eventTalkStepBreak");  | ||||
|     player:endEvent() | ||||
|  | ||||
| end | ||||
|  | ||||
|  | ||||
| function deliveryMenuInfo(player, city, category) | ||||
|  | ||||
|     local gcContents = getWeeklyItems(city, category); | ||||
|     local gcCurrent = getCurrentCount(city, category); | ||||
|     local supplyChoice = 0; | ||||
|      | ||||
|     while (true) do  | ||||
|      | ||||
|         if gcDelivery.bonus[city][category] == 1 then     -- Show fourth item if condition is met, otherwise show three. | ||||
|              | ||||
|             supplyChoice = callClientFunction | ||||
|             ( | ||||
|                 player,  | ||||
|                 "delegateEvent",  | ||||
|                 player,  | ||||
|                 supplyQuest,  | ||||
|                 "pItem",  | ||||
|                 gcContents[1].id,  | ||||
|                 1,  | ||||
|                 gcContents[2].id,  | ||||
|                 1,  | ||||
|                 gcContents[3].id,  | ||||
|                 1,  | ||||
|                 gcContents[4].id,  | ||||
|                 1 | ||||
|             ); | ||||
|         else | ||||
|             supplyChoice = callClientFunction | ||||
|             ( | ||||
|                 player,  | ||||
|                 "delegateEvent",  | ||||
|                 player,  | ||||
|                 supplyQuest,  | ||||
|                 "pItem",  | ||||
|                 gcContents[1].id,  | ||||
|                 1,  | ||||
|                 gcContents[2].id,  | ||||
|                 1,  | ||||
|                 gcContents[3].id,   | ||||
|                 1,  | ||||
|                 0,  | ||||
|                 0 | ||||
|             ); | ||||
|         end | ||||
|          | ||||
|         if supplyChoice >= 2 then | ||||
|          | ||||
|             if gcCurrent[supplyChoice-1] < gcContents[supplyChoice-1].cap then | ||||
|                 local hqPrice = math.ceil(gcContents[supplyChoice-1].seals * 1.5); | ||||
|                  | ||||
|                 deliveryMenuOpen | ||||
|                 ( | ||||
|                     player,  | ||||
|                     npc,  | ||||
|                     gcContents[supplyChoice-1].id,  | ||||
|                     gcContents[supplyChoice-1].seals,  | ||||
|                     hqPrice,  | ||||
|                     category | ||||
|                 ); | ||||
|                  | ||||
|             else | ||||
|                 callClientFunction(player, "delegateEvent", player, supplyQuest, "pESuppylMaxErrKeyWait"); | ||||
|             end | ||||
|         elseif supplyChoice == 1 then | ||||
|             break; | ||||
|         end | ||||
|         wait(1); | ||||
|     end | ||||
| end | ||||
|  | ||||
|  | ||||
| function deliveryMenuOpen(player, npc, itemId, price, hqPrice, supplyType) | ||||
|  | ||||
|     callClientFunction(player, "eventQuestItemMenuOpen", itemId, price, hqPrice, supplyType); | ||||
|  | ||||
|     while (true) do | ||||
|      | ||||
|         local choice, quantity, quality, itemSlot, Type7Param = callClientFunction(player, "eventQuestItemMenuSelect"); | ||||
|            | ||||
|         if choice == false then | ||||
|             callClientFunction(player, "eventQuestItemMenuClose"); | ||||
|             break; | ||||
|         end | ||||
|          | ||||
|         --[[ | ||||
|         player:SendMessage(0x20, "", "Choice: " .. tostring(choice)); | ||||
|         player:SendMessage(0x20, "", "Quantity: " .. tostring(quantity)); | ||||
|         player:SendMessage(0x20, "", "Quality: " .. tostring(quality)); | ||||
|         player:SendMessage(0x20, "", "Slot: " .. tostring(itemSlot));   -- Broke at some point, always return 0, investigate sometime | ||||
|         player:SendMessage(0x20, "", "Type7Param: " .. tostring(Type7Param.slot)); | ||||
|         --]] | ||||
|          | ||||
|         pickedItem = GetItemGamedata(player:GetItemPackage(INVENTORY_NORMAL):GetItemAtSlot(Type7Param.slot).itemId).name; | ||||
|         player:SendMessage(0x20, "", "Player tried to deliver " .. quantity .. " " ..  pickedItem); | ||||
|          | ||||
|         -- TODO: Add error handling for capped seals, no-long-available-to-deliver, etc | ||||
|         wait(1); | ||||
|     end | ||||
| end | ||||
|  | ||||
|  | ||||
|  | ||||
| function deliveryStatus(player, city) | ||||
|     local gcContents = getWeeklyItems(city, 1); | ||||
|     local gcCurrent = getCurrentCount(city, 1); | ||||
|  | ||||
|     callClientFunction(player, "delegateEvent", player, supplyQuest, "pENPCAskNowTalk", gcRep[npcId]); | ||||
|     callClientFunction | ||||
|     ( | ||||
|         player,  | ||||
|         "delegateEvent",  | ||||
|         player,  | ||||
|         supplyQuest,  | ||||
|         "nowSup",  | ||||
|         gcContents[1].id,  | ||||
|         gcCurrent[1],  | ||||
|         gcContents[1].cap, | ||||
|         gcContents[2].id,  | ||||
|         gcCurrent[2],  | ||||
|         gcContents[2].cap, | ||||
|         gcContents[3].id,  | ||||
|         gcCurrent[3],  | ||||
|         gcContents[3].cap | ||||
|     ); | ||||
|     if gcDelivery.bonus[city][1] == 1 then | ||||
|         callClientFunction | ||||
|         ( | ||||
|             player,  | ||||
|             "delegateEvent",  | ||||
|             player,  | ||||
|             supplyQuest,  | ||||
|             "nowSupAddItem",  | ||||
|             gcContents[4].id,  | ||||
|             gcCurrent[4],  | ||||
|             gcContents[4].cap | ||||
|         ); | ||||
|     end; | ||||
|      | ||||
|     gcContents = getWeeklyItems(city, 2); | ||||
|     gcCurrent = getCurrentCount(city, 2); | ||||
|      | ||||
|     callClientFunction | ||||
|     ( | ||||
|         player,  | ||||
|         "delegateEvent",  | ||||
|         player,  | ||||
|         supplyQuest,  | ||||
|         "nowSup",  | ||||
|         gcContents[1].id,  | ||||
|         gcCurrent[1],  | ||||
|         gcContents[1].cap, | ||||
|         gcContents[2].id,  | ||||
|         gcCurrent[2],  | ||||
|         gcContents[2].cap, | ||||
|         gcContents[3].id,  | ||||
|         gcCurrent[3],  | ||||
|         gcContents[3].cap | ||||
|     ); | ||||
|     if gcDelivery.bonus[city][2] == 1 then | ||||
|         callClientFunction | ||||
|         ( | ||||
|             player,  | ||||
|             "delegateEvent",  | ||||
|             player,  | ||||
|             supplyQuest,  | ||||
|             "nowSupAddItem",  | ||||
|             gcContents[4].id,  | ||||
|             gcCurrent[4],  | ||||
|             gcContents[4].cap | ||||
|         ); | ||||
|     end; | ||||
|     | ||||
|     callClientFunction(player, "delegateEvent", player, supplyQuest, "showSupplyLimit", gcDelivery.timeRemainingMinutes, gcDelivery.timeRemainingSeconds, 2, 8); | ||||
| end | ||||
|  | ||||
|  | ||||
| function getWeeklyItems(city, category) | ||||
|    return gcWeek[gcDelivery.week][city][category] | ||||
| end | ||||
|  | ||||
| function getCurrentCount(city, category) | ||||
|     return gcDelivery.currentCount[city][category]; | ||||
| end | ||||
|  | ||||
							
								
								
									
										120
									
								
								Data/scripts/base/chara/npc/populace/PopulaceCompanyWarp.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								Data/scripts/base/chara/npc/populace/PopulaceCompanyWarp.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,120 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceCompanyWarp Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventTalkWelcome(player) - Start Text | ||||
| 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) | ||||
|     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:GetItemPackage(INVENTORY_KEYITEMS):HasItem(passLimsa) then | ||||
|             passCheck = 1; | ||||
|         else | ||||
|             if passCheck == 0 then callClientFunction(player, "eventTalkWelcome", player); end | ||||
|         end; | ||||
|     elseif city == 2 then | ||||
|         if player:GetItemPackage(INVENTORY_KEYITEMS):HasItem(passGrid) then | ||||
|             passCheck = 1; | ||||
|         else | ||||
|            if passCheck == 0 then callClientFunction(player, "eventTalkWelcome", player); end | ||||
|         end; | ||||
|     elseif city == 3 then | ||||
|         if player:GetItemPackage(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 | ||||
| @@ -0,0 +1,3 @@ | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
							
								
								
									
										24
									
								
								Data/scripts/base/chara/npc/populace/PopulaceFlyingShip.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Data/scripts/base/chara/npc/populace/PopulaceFlyingShip.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceFlyingShip Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventIn(player, hasTicket, nil?, travelPrice) - If hasTicket == nil, say no money text. | ||||
| eventOut(isAborting) - Set isAborting to 30010 if player didn't "use" the airship. Shows no refund warning. | ||||
| eventNG(player) - Message said when player is talking to the wrong npc. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	 | ||||
| 	callClientFunction(player, "eventIn", player, false, nil, 5); | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| end | ||||
| @@ -0,0 +1,95 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceGuildlevePublisher Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventTalkType(level (changes factionLeves), sayIntro, brokenBladePoints, shieldsPoints, hornhandPoints, showTutorialLeves, doOmen (!=0), menuId (to Jump), leveAllowances, ?, ?, ?) | ||||
| eventTalkPack(startGuildlevePack, endGuildlevePack) | ||||
| eventTalkCard(card1,card2,card3,card4,card5,card6,card7,card8) | ||||
| eventTalkDetail(guildLeveId, factionEvaluating, rewardType1, rewardQuantity1, rewardType2, rewardQuantity2, boostPoint, previouslyCompleted, completionBonus) | ||||
| eventTalkAfterOffer() | ||||
| eventHistoryleveExist(guildLeveId) | ||||
| eventHistoryleveCannot() | ||||
| eventGLChangeDetail(?, guildLeveId, boostPoint, rewardType1, rewardQuantity1, rewardType2, rewardQuantity2, factionEvaluating, previouslyCompleted) | ||||
| eventTalkChangeOne(skipQuestion) | ||||
| talkOfferMaxOver() | ||||
| askRetryRegionalleve(guildLeveId, leveAllowances); | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc) | ||||
|  | ||||
| 	::MENU_LOOP:: | ||||
| 	menuChoice = callClientFunction(player, "eventTalkType", 0x30, true, 0x02CE, 0x356, 0x367, true, 0, nil, 0x29, 0,0,0);	 | ||||
| 	--Battlecraft | ||||
| 	if (menuChoice == 1) then | ||||
| 		resultGLPack = callClientFunction(player, "eventTalkPack", 201, 207); | ||||
| 		 | ||||
| 		if (resultGLPack == nil) then | ||||
| 			goto MENU_LOOP; | ||||
| 		else | ||||
| 		 | ||||
| 			::CARDS_LOOP:: | ||||
| 			cards = {0x30C3, 0x30C4, 0x30C1, 0x30C5, 0x30C6, 0x30C7, 0x30C8, 0x30C9}; | ||||
| 		 | ||||
| 			chosenGLCard = callClientFunction(player, "eventTalkCard", cards[1], cards[2], cards[3], cards[4], cards[5], cards[6], cards[7], cards[8]); | ||||
| 			 | ||||
| 			if (chosenGLCard == -1) then | ||||
| 				goto MENU_LOOP; | ||||
| 			else | ||||
| 				wasAccepted = callClientFunction(player, "eventTalkDetail", cards[chosenGLCard], 0, 0xF4242, 0xD, 0xF4242, 0, 0, true, 0); | ||||
| 				 | ||||
| 				if (wasAccepted == true) then | ||||
| 				 | ||||
| 				end | ||||
| 				 | ||||
| 				goto CARDS_LOOP; | ||||
| 				 | ||||
| 			end | ||||
| 		end | ||||
| 		 | ||||
| 	--FieldCraft Miner | ||||
| 	elseif (menuChoice == 0x15) then | ||||
| 	--FieldCraft Botanist | ||||
| 	elseif (menuChoice == 0x16) then | ||||
| 	--FieldCraft Fisher | ||||
| 	elseif (menuChoice == 0x17) then | ||||
| 	--FieldCraft Quit | ||||
| 	elseif (menuChoice == 0x18) then | ||||
| 	--Faction Broken Blade | ||||
| 	elseif (menuChoice == 0x29) then | ||||
| 	--Faction Shields | ||||
| 	elseif (menuChoice == 0x2A) then | ||||
| 	--Faction Horn and Hand | ||||
| 	elseif (menuChoice == 0x2B) then | ||||
| 	--Leve Evaluation | ||||
| 	elseif (menuChoice == 5) then | ||||
| 	--Tutorial | ||||
| 	elseif (menuChoice == 6) then | ||||
| 	--End of Info | ||||
| 	elseif (menuChoice == 7) then	 | ||||
| 	--Quit | ||||
| 	elseif (menuChoice == 8) then	 | ||||
| 	end | ||||
| 	 | ||||
| 	-- | ||||
| 	-- | ||||
| 	-- | ||||
| 	player:EndEvent(); | ||||
| end | ||||
|  | ||||
| function onEventUpdate(player, npc, step, menuOptionSelected) | ||||
| 	--player:RunEventFunction("eventTalkType", 0x32, true, 0x02CE, 0x356, 0x367, false, 2, nil, 0x29, 0,0,0); | ||||
| 	player:RunEventFunction("eventTalkPack", 201, 207); | ||||
| 	--player:RunEventFunction("eventTalkCard", 0x30C3, 0x30C4, 0x30C1, 0x30C5, 0x30C6, 0x30C7, 0x30C8, 0x30C9); | ||||
| 	-- | ||||
| 	--player:RunEventFunction("eventGLChangeDetail", 0xDEAD, 0x30C4, 0xFF, 0xF4242, 0xD, 0xF4242, 0, 2, true); | ||||
| 	 | ||||
| end | ||||
| @@ -0,0 +1,51 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceItemRepairer Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| talkWelcome(player, sayWelcomeText, currentLevel?, changes 1500243 from "welcome" to "well met") - Opens the main menu | ||||
| selectItem(nil, pageNumber, ?, condition1, condition2, condition3, condition4, condition5) - Select item slot. | ||||
| confirmRepairItem(player, price, itemId, hq grade) - Shows the confirm box for item repair. | ||||
| confirmUseFacility(player, price) - Shows confirm box for using facility. Default price is 11k? | ||||
| finishTalkTurn() - Call at end to stop npc from staring at the player (eeeek) | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName)	 | ||||
| 	 | ||||
| 	result = callClientFunction(player, "talkWelcome", player, true, 20, false); | ||||
| 	 | ||||
| 	if (result == 1) then	 | ||||
| 		local currentPage = 1; | ||||
| 		local slotToRepair = nil; | ||||
| 		 | ||||
| 		while (true) do | ||||
| 			slot, page, listIndx = callClientFunction(player, "selectItem", nil, currentPage, 4, 2, 55, 55, 55, 55); | ||||
| 			 | ||||
| 			if (slot == nil and page ~= nil) then | ||||
| 				currentPage = page;				 | ||||
| 			else | ||||
| 				slotToRepair = slot; | ||||
| 				break; | ||||
| 			end			 | ||||
| 		end | ||||
| 		 | ||||
| 		if (slotToRepair ~= nil) then | ||||
| 			callClientFunction(player, "confirmRepairItem", player, 100, 8032827, 0); | ||||
| 		end | ||||
| 		 | ||||
| 	elseif (result == 2) then	 | ||||
| 		callClientFunction(player, "confirmUseFacility", player); | ||||
| 	end | ||||
| 	 | ||||
| 	callClientFunction(player, "finishTalkTurn"); | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| end | ||||
| @@ -0,0 +1,72 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceLinkshellManager Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventTalkStep1(noLinkshellActive) - Says intro. If noLinkshellActive = true, say newbie stuff. | ||||
| eventTalkStep2(noLinkshellActive) - Shows menu, if noLinkshellActive = true, only give ability to make linkshell. | ||||
| eventTalkStepMakeupDone() - Confirm when creating LS | ||||
| eventTalkStepModifyDone() - Confirm when modding LS | ||||
| eventTalkStepBreakDone() - Confirm when deleting LS | ||||
|  | ||||
| Text IDs: | ||||
|  | ||||
| 25121 - That [@SWITCH($E8(1),linkshell,company)] name is already being used. | ||||
| 25122 - That [@SWITCH($E8(1),linkshell,company)] name cannot be used. | ||||
| 25123 - The [@SWITCH($E8(1),linkshell,company)] “[@STRING($EA(2))]” has been [@SWITCH($E8(1),created,founded)]. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0; | ||||
| end | ||||
|  | ||||
| function createLinkshell(player, name, crest) | ||||
| 	GetWorldManager():RequestWorldLinkshellCreate(player, name, crest); | ||||
| 	return waitForSignal("ls_result");	 | ||||
| end | ||||
|  | ||||
| function modifyLinkshell(player, name, crest) | ||||
| 	 | ||||
| end | ||||
|  | ||||
| function disbandLinkshell(player, name, crest) | ||||
| 	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
|  | ||||
| 	local hasNoActiveLS = false; | ||||
| 	 | ||||
| 	callClientFunction(player, "eventTalkStep1", hasNoActiveLS); | ||||
| 	local command, lsName, crestId = callClientFunction(player, "eventTalkStep2", hasNoActiveLS); | ||||
| 	 | ||||
| 	--Create | ||||
| 	if (command == 3) then	 | ||||
| 		local result = createLinkshell(player, lsName, crestId); | ||||
| 		if (result == 0) then | ||||
| 			callClientFunction(player, "eventTalkStepMakeupDone"); | ||||
| 		elseif (result == 1) then | ||||
| 			player:SendGameMessage(player, GetWorldMaster(), 25121, 0x20); --LS already exists | ||||
| 			callClientFunction(player, "eventTalkStepBreakDone"); | ||||
| 		elseif (result == 2) then | ||||
| 			player:SendGameMessage(player, GetWorldMaster(), 25122, 0x20); --Cannot use this name (reserved/banned) | ||||
| 			callClientFunction(player, "eventTalkStepBreakDone"); | ||||
| 		elseif (result == 3) then | ||||
| 		end | ||||
| 	--Modify | ||||
| 	elseif (command == 4) then | ||||
| 		modifyLinkshell(player, lsName, crestId); | ||||
| 		callClientFunction(player, "eventTalkStepModifyDone");		 | ||||
| 	--Disband | ||||
| 	elseif (command == 5) then | ||||
| 		disbandLinkshell(player, lsName, crestId); | ||||
| 		callClientFunction(player, "eventTalkStepBreakDone");	 | ||||
| 	end | ||||
| 		 | ||||
| 	player:endEvent(); | ||||
| 		 | ||||
| end | ||||
							
								
								
									
										24
									
								
								Data/scripts/base/chara/npc/populace/PopulaceNMReward.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Data/scripts/base/chara/npc/populace/PopulaceNMReward.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceNMReward Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventTalkStep0(player, ?, ?) - Opens the main menu | ||||
| eventTalkStep0_1(player) - "Ain't running a charity here", message said when you have insufficent funds | ||||
| eventTalkStep0_2(player, hasItems) - Relic Quest dialog. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	 | ||||
| 	callClientFunction(player, "eventTalkStep0", player, 0); | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| end | ||||
| @@ -0,0 +1,38 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulacePassiveGLPublisher Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| askOfferPack() - Show Classes | ||||
| askOfferRank() - Show Ranks | ||||
| askOfferQuest(player) | ||||
| confirmOffer(nil, questId) | ||||
| confirmMaxOffer() | ||||
| talkOfferWelcome(actor, leveAllowances) | ||||
| talkOfferDecide() | ||||
| talkOfferMaxOver() | ||||
| selectDiscardGuildleve(player) | ||||
| confirmJournal() | ||||
| askDiscardGuildleve() | ||||
| confirmDiscardGuildleve(nil, questId) | ||||
| askRetryRegionalleve(questId, leveAllowances) | ||||
| finishTalkTurn() | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc) | ||||
| 	callClientFunction(player, "talkOfferWelcome", player, 1); | ||||
| 	player:EndEvent(); | ||||
| end | ||||
|  | ||||
| function onEventUpdate(player, npc, step, menuOptionSelected, lsName, lsCrest) | ||||
| 	--callClientFunction(player, "askOfferQuest", player, 1000); | ||||
| 	 | ||||
| end | ||||
| @@ -0,0 +1,28 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceItemRepairer Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| INIT: speechType, townType | ||||
|  | ||||
| talkWelcome(player, bool, number, bool) - Opens the main menu | ||||
| selectItem(nil, pageNumber, ?, condition1, condition2, condition3, condition4, condition5) - "Ain't running a charity here", message said when you have insufficent funds | ||||
| confirmRepairItem(player, price, itemId, hq grade) - Shows the confirm box for item repair. | ||||
| confirmUseFacility(player, price) - Shows confirm box for using facility. Default price is 11k? | ||||
| finishTalkTurn() - Call at end to stop npc from staring at the player (eeeek) | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
| 	 | ||||
| 	result = callClientFunction(player, "eventTalkStep14"); | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| end | ||||
							
								
								
									
										145
									
								
								Data/scripts/base/chara/npc/populace/PopulaceRetainerManager.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								Data/scripts/base/chara/npc/populace/PopulaceRetainerManager.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,145 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceRetainerManager Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventTalkStep1(true) - Intro tutorial if no retainer | ||||
| newEventTalkStep1(sayIntro) - Seems to be a post-Tanaka version of the intro???? | ||||
| eventTalkStep2() - Choose retainer yourself (go to race select) or let npc do it | ||||
| eventTaklSelectCutSeane(cutsceneName, actorClassId1, actorClassId2, actorClassId3, actorClassId4, actorClassId5) - Starts the advance cutscene to choose a retainer. 5 retainer actorClassId's are given. | ||||
| eventTalkStep4(actorClassId) - Opens up the retainer naming dialog | ||||
| eventTalkStepFinalAnswer(actorClassId) - Confirm Dialog | ||||
| eventTalkStepError(errorCode) - Error dialog, 1: No Extra Retainers, 2: Server Busy. | ||||
| eventTalkStepFinish() | ||||
|  | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
|  | ||||
| function init(npc) | ||||
|     return false, false, 0, 0;   | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
|      | ||||
|     local npcActorClass = npc:GetActorClassId() | ||||
|     local retainerIndex = 3001100; | ||||
|     local cutscene = "rtn0l010" -- Defaulting to Limsa for now for testing | ||||
|      | ||||
|     if npcActorClass == 1000166 then | ||||
|         cutscene = "rtn0l010"; | ||||
|         retainerIndex = 3001101; | ||||
|     elseif npcActorClass == 1000865 then | ||||
|         cutscene = "rtn0u010"; | ||||
|         retainerIndex = 3002101;         | ||||
|     elseif npcActorClass == 1001184 then | ||||
|         cutscene = "rtn0g010"; | ||||
|         retainerIndex = 3003101; | ||||
|     else | ||||
|         return; | ||||
|     end | ||||
|    | ||||
|  | ||||
|     introChoice = callClientFunction(player, "newEventTalkStep1", false); | ||||
|      | ||||
|     if (introChoice == 1) then           | ||||
|          | ||||
|         -- Choose Retainer or Random | ||||
|         raceChoice = callClientFunction(player, "eventTalkStep2");   | ||||
|          | ||||
|         while (true) do  | ||||
|  | ||||
|              | ||||
|             if (retainerChoice == 0) then            | ||||
|                 raceChoice = callClientFunction(player, "eventTalkStep22");  | ||||
|             end | ||||
|                  | ||||
|              | ||||
|             if (raceChoice == 0) then  | ||||
|                 --Choose random actorId from a valid set for the city | ||||
|                  | ||||
|                 math.randomseed(os.time()); | ||||
|                 local randomRetainer = math.random(retainerIndex, (retainerIndex+74)); | ||||
|                  | ||||
|                 retainerName = callClientFunction(player, "eventTalkStep4", randomRetainer); | ||||
|  | ||||
|                 if (retainerName ~= "") then | ||||
|                     confirmChoice = callClientFunction(player, "eventTalkStepFinalAnswer", randomRetainer); | ||||
|  | ||||
|                     if (confirmChoice == 1) then | ||||
|                         callClientFunction(player, "eventTalkStepFinish"); | ||||
|                         player:EndEvent(); | ||||
|                         return; | ||||
|                     elseif (confirmChoice == 3) then | ||||
|                         raceChoice = 0; | ||||
|                     else | ||||
|                         player:EndEvent(); | ||||
|                         return; | ||||
|                     end | ||||
|                 else | ||||
|                     callClientFunction(player, "eventTalkStepBreak"); | ||||
|                     raceChoice = -1; | ||||
|                 end  | ||||
|  | ||||
|  | ||||
|             elseif (raceChoice > 0) and (raceChoice < 16) then                         | ||||
|                 --Choose 5 random but correct actor ids for the city and race/tribe | ||||
|                  | ||||
|                 local retainerRace = ((retainerIndex) + (5*(raceChoice-1))); | ||||
|                 local retainerRaceChoices = {retainerRace, retainerRace+1, retainerRace+2, retainerRace+3, retainerRace+4}; | ||||
|                  | ||||
|                 -- Randomize the appearance order of the available five | ||||
|                 shuffle(retainerRaceChoices); | ||||
|                  | ||||
|                 retainerChoice = callClientFunction(player, "eventTaklSelectCutSeane", cutscene, retainerRaceChoices[1], retainerRaceChoices[2], retainerRaceChoices[3], retainerRaceChoices[4], retainerRaceChoices[5]); | ||||
|                  | ||||
|                 if (retainerChoice == -1) then | ||||
|                     player:EndEvent(); | ||||
|                     return;              | ||||
|                 elseif (retainerChoice > 0) then                 | ||||
|                     --Retainer chosen, choose name               | ||||
|                     retainerName = callClientFunction(player, "eventTalkStep4", retainerRaceChoices[retainerChoice]); | ||||
|                      | ||||
|                     if (retainerName ~= "") then | ||||
|                         confirmChoice = callClientFunction(player, "eventTalkStepFinalAnswer", retainerRaceChoices[retainerChoice]); | ||||
|                          | ||||
|                         if (confirmChoice == 1) then | ||||
|                             callClientFunction(player, "eventTalkStepFinish"); | ||||
|                             player:EndEvent(); | ||||
|                             return; | ||||
|                         elseif (confirmChoice == 3) then | ||||
|                             retainerChoice = 0; | ||||
|                         else | ||||
|                             player:EndEvent(); | ||||
|                             return; | ||||
|                         end | ||||
|                     else | ||||
|                         callClientFunction(player, "eventTalkStepBreak"); | ||||
|                         raceChoice = -1;        | ||||
|                     end | ||||
|                      | ||||
|                 end  | ||||
|             else | ||||
|                 break; | ||||
|             end  | ||||
|          | ||||
|                  | ||||
|         end | ||||
|          | ||||
|     end | ||||
|      | ||||
|     player:EndEvent(); | ||||
| end | ||||
|  | ||||
|  | ||||
|  | ||||
| function shuffle(tbl) | ||||
|   for i = #tbl, 2, -1 do | ||||
|     local j = math.random(i) | ||||
|     tbl[i], tbl[j] = tbl[j], tbl[i] | ||||
|   end | ||||
|   return tbl | ||||
| end | ||||
| @@ -0,0 +1,84 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceSpecialEventCryer Script | ||||
|  | ||||
| Actor Class script to handle the 6 NPCs (technically 3, the actors were duped) involved in the Foundation Day 2011 & 2012 events.   | ||||
| In 2011 they appear to be used for recruitment information for their respective Grand Company. | ||||
| In 2012, they were used for exchanging Over-aspected Crystals/Clusters for GC seals as part of the ongoing Atomos event. | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| For 2011. | ||||
| eventTalkStep0(joined)      - NPC dialog about joining their cause to fight back Imperials. joined = 0 or 1. Function has hardcoded actor IDs, won't work with 2012 versions | ||||
| eventTalkNotGCmenber(npcGC) - NPC dialog when you're not part of their grand company. | ||||
|  | ||||
| For 2012. | ||||
| eventTalkCrystalExchange(player, npcGC, hasCrystal) - NPC dialog explaining they want over-aspected crystals. Brings up crystal exchange prompt if hasCrystal = 1. | ||||
| eventTalkCsOverflow(player, npcGC)                  - Error message that you can't hold the seals being offered. | ||||
| eventTalkCrystalExchange2(player, npcGC)            - NPC dialog for accepting exchange of crystals for seals | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
|  | ||||
| local gcRep = {  | ||||
|     [1001619] = 1, -- Maelstrom Representative 2011 | ||||
|     [1002105] = 1, -- Maelstrom Representative 2012 | ||||
|     [1001623] = 2, -- Adder Representative 2011 | ||||
|     [1002109] = 2, -- Adder Representative 2012 | ||||
|     [1001627] = 3, -- Flame Representative 2011 | ||||
|     [1002113] = 3, -- Flame Representative 2012 | ||||
| } | ||||
|  | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
|     local playerGC = player.gcCurrent; | ||||
|     local npcId = npc:GetActorClassId(); | ||||
|     local npcGC = gcRep[npcId];  | ||||
|     local npcGCSeal = 1000200 + npcGC; | ||||
|     local hasCrystal = 1; | ||||
|     local crystal = 3020537; | ||||
|     local cluster = 3020413; | ||||
|     local eventMode = 2012; | ||||
|      | ||||
|      | ||||
|     if eventMode == 2011 then | ||||
|         if playerGC == 0 then | ||||
|             callClientFunction(player, "eventTalkStep0", 0); | ||||
|         elseif playerGC == npcGC then | ||||
|             callClientFunction(player, "eventTalkStep0", 1);  | ||||
|         else | ||||
|             callClientFunction(player, "eventTalkNotGCmenber", npcGC); | ||||
|         end | ||||
|      | ||||
|     elseif eventMode == 2012 then | ||||
|         choice = callClientFunction(player, "eventTalkCrystalExchange", player, npcGC, hasCrystal); | ||||
|          | ||||
|         if choice == 1 then | ||||
|             --callClientFunction(player, "eventTalkCsOverflow", player, npcGC); | ||||
|             player:SendMessage(0x20, "", "You pretend to hand over four over-aspected crystals."); | ||||
|             callClientFunction(player, "eventTalkCrystalExchange2", player, npcGC);  | ||||
|             | ||||
|             local invCheck = player:GetItemPackage(INVENTORY_CURRENCY):AddItem(npcGCSeal, 1000, 1); | ||||
|             if invCheck == INV_ERROR_SUCCESS then | ||||
|                 player:SendGameMessage(player, GetWorldMaster(), 25071, MESSAGE_TYPE_SYSTEM, crystal, 1, npcGCSeal, 1, 4, 1000); | ||||
|             end | ||||
|         elseif choice == 2 then | ||||
|             player:SendMessage(0x20, "", "You pretend to hand over an over-aspected cluster."); | ||||
|             --callClientFunction(player, "eventTalkCsOverflow", player, npcGC); | ||||
|             callClientFunction(player, "eventTalkCrystalExchange2", player, npcGC);  | ||||
|              | ||||
|             local invCheck = player:GetItemPackage(INVENTORY_CURRENCY):AddItem(npcGCSeal, 3000, 1); | ||||
|             if invCheck == INV_ERROR_SUCCESS then | ||||
|                 player:SendGameMessage(player, GetWorldMaster(), 25071, MESSAGE_TYPE_SYSTEM, cluster, 1, npcGCSeal, 1, 1, 3000); | ||||
|             end             | ||||
|         end | ||||
|     end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| end | ||||
							
								
								
									
										13
									
								
								Data/scripts/base/chara/npc/populace/PopulaceStandard.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								Data/scripts/base/chara/npc/populace/PopulaceStandard.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc) | ||||
| 	player:SendMessage(0x20, "", "This PopulaceStandard actor has no event set. Actor Class Id: " .. tostring(npc:GetActorClassId())); | ||||
| 	player:EndEvent(); | ||||
| end | ||||
|  | ||||
| function onEventUpdate(player, npc, blah, menuSelect) | ||||
| 	player:EndEvent(); | ||||
| end | ||||
							
								
								
									
										107
									
								
								Data/scripts/base/chara/npc/populace/shop/PopulaceGuildShop.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								Data/scripts/base/chara/npc/populace/shop/PopulaceGuildShop.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceGuildShop Script | ||||
|  | ||||
| In 1.20, the devs removed Guild Marks as acquirable.  In 1.21, this class was set up to allow exchanging them for  | ||||
| a variety of materia/crystals/gil, as well as refunding traits purchased with marks.  Traits used to be purchased | ||||
| to slot in, where-as with late-XIV they are just automatically unlocked once the appropriate level is met. | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| cashbackTalkCommand(arg1 through arg10)             -- Dialog for refunding purchased skills prior to Job update.  Args are xtx_command values for command names. | ||||
| cashbackTalk(nil, refundAmount, arg3 through arg10) -- Dialog for refunding treaties to guild marks.  Arg3 through 10 use xtx_itemName values. | ||||
| selectMode(nil, npcId, isShowExchange, guildCurrency, unk) -- Menus for exchanging leftover marks, undoing class points, and learning about guild.  Unk seems related to point resetting | ||||
|  | ||||
| maskShopListIndex(shopPack?, isSomething)           -- Presumably hides an item in the shop list.  Needs to be called after openShopBuy or errors client. | ||||
| guildExplain(npcId, player)                         -- Guild Mark tutorial dialog.  selectMode calls this on its own | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
| require ("shop") | ||||
|  | ||||
| function init(npc) | ||||
|     return false, false, 0, 0;   | ||||
| end | ||||
|  | ||||
| guildShopInfo = { -- [actor id] = { saySheetId, guildmarkCurrency } | ||||
| [1000157] = {9,  1000103}, -- Marauder, S'raemha | ||||
| [1000158] = {24, 1000120}, -- Culinarian, Noline | ||||
| [1000162] = {18, 1000114}, -- Blacksmith, Qhas Chalahko | ||||
| [1000164] = {16, 1000123}, -- Fishermen, Faucillien  | ||||
| [1000459] = {21, 1000117}, -- Leatherworker, Gallia | ||||
| [1000460] = {13, 1000111}, -- Conjurer, Hetzkin | ||||
| [1000461] = {15, 1000122}, -- Botanist, Kipopo | ||||
| [1000462] = {11, 1000107}, -- Lancer, Clarembald | ||||
| [1000464] = {10, 1000106}, -- Archer, Cassandra | ||||
| [1000466] = {17, 1000113}, -- Carpenter, Frances | ||||
| [1000631] = {8,  1000102}, -- Gladiator, Coynach | ||||
| [1000632] = {7,  1000101}, -- Pugilist, Moruith | ||||
| [1000633] = {12, 1000110}, -- Thaumaturge, Nyunoeya | ||||
| [1000634] = {23, 1000119}, -- Alchemist, Kylene | ||||
| [1000635] = {20, 1000116}, -- Goldsmith, Hnaufrid | ||||
| [1000636] = {22, 1000118}, -- Weaver, Lafla Morfla | ||||
| [1000637] = {14, 1000121}, -- Miner, Shilgen | ||||
| [1001461] = {19, 1000115}, -- Armorer, Notrelchamps | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| function onEventStarted(player, npc) | ||||
|  | ||||
|     local npcId = npc:GetActorClassId(); | ||||
|     local saySheetId = guildShopInfo[npcId][1]; | ||||
|     local shopCurrency = guildShopInfo[npcId][2]; | ||||
|     local gilCurrency = 1000001; | ||||
|     local keepersHymn = 3020410; | ||||
|     local shopPack = 0; | ||||
|      | ||||
|     callClientFunction(player, "welcomeTalk", nil, saySheetId, player); | ||||
|  | ||||
|     while (true) do  | ||||
|         local choice = callClientFunction(player, "selectMode", nil, npcId, true, shopCurrency, 100); | ||||
|  | ||||
|         if (choice == 3) then       -- Undo Point Allotment | ||||
|             -- TODO: Add point reset handling | ||||
|         elseif (choice == 4) then   -- Leave menu selected | ||||
|             player:EndEvent(); | ||||
|             break; | ||||
|         elseif (choice == nil) then -- Escape key hit to leave menu | ||||
|             player:EndEvent(); | ||||
|             break | ||||
|         elseif (choice >= 102 and choice <= 120) then -- Exchange marks for Materia | ||||
|             shopPack = choice + 18;     -- Index offset | ||||
|             if (choice == 119) then      | ||||
|                 shopPack = shopPack + 1; | ||||
|             elseif (choice == 120) then  -- Exchange marks for Crystals | ||||
|                 shopPack = 144; | ||||
|             end; | ||||
|             processGuildShop(player, shopPack, shopCurrency); | ||||
|         elseif (choice == 121) then -- Exchange marks for Gil.  1 mark = 4 gil | ||||
|             local markAmount = player:GetItemPackage(INVENTORY_CURRENCY):GetItemQuantity(shopCurrency); | ||||
|             purchaseItem(player, INVENTORY_CURRENCY, gilCurrency, markAmount*4, 1, markAmount, shopCurrency); | ||||
|              | ||||
|         end | ||||
|     end | ||||
|      | ||||
|     player:EndEvent() | ||||
| end | ||||
|  | ||||
|  | ||||
|  | ||||
| function processGuildShop(player, choice, currency) | ||||
|  | ||||
|         callClientFunction(player, "openShopBuy", player, choice, currency); | ||||
|         --callClientFunction(player, "maskShopListIndex", 137, true); | ||||
|  | ||||
|         while (true) do      | ||||
|             buyResult, quantity = callClientFunction(player, "selectShopBuy", player); | ||||
|              | ||||
|             if (buyResult == 0) then | ||||
|                 callClientFunction(player, "closeShopBuy", player);                  | ||||
|                 break; | ||||
|             else  | ||||
|               player:SendMessage(0x20, "", string.format("Player purchased %s item(s) at index %s in shopPack %s.", quantity, buyResult, choice)); | ||||
|             end | ||||
|         end      | ||||
| end | ||||
| @@ -0,0 +1,290 @@ | ||||
| --[[ | ||||
|  | ||||
| PopulaceShopSalesman Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| welcomeTalk(sheetId, player) - Start Message | ||||
| selectMode(askMode) - Shows buy/sell modes. If askmode > 0 show guild tutorial. If askmode == -7/-8/-9 show nothing. Else show affinity/condition tutorials. | ||||
| selectModeOfClassVendor() - Opens categories for class weapons and gear | ||||
| selectModeOfMultiWeaponVendor(consumptionTutorialId) - Opens categories for weapons/tools (war/magic/land/hand). Arg consumptionTutorialId appends location of item repair person. -1: Ul'dah, -2: Gridania, -3: Limsa  | ||||
| selectModeOfMultiArmorVendor(consumptionTutorialId) - Opens categories for armor in different slots. Arg consumptionTutorialId appends location of item repair person. -1: Ul'dah, -2: Gridania, -3: Limsa  | ||||
|  | ||||
| openShopBuy(player, shopPack, currancyItemId) - ShopPack: Items to appear in window. CurrancyItemId: What is being used to buy these items. | ||||
| selectShopBuy(player) - Call after openShopBuy() to open widget | ||||
| closeShopBuy(player) - Closes the buy window | ||||
|  | ||||
| openShopSell(player) - Call this to open sell window | ||||
| selectShopSell(player) - Call after openShopSell() | ||||
| closeShopSell(player) - Closes the sell window | ||||
|  | ||||
| confirmSellingItem(itemId, quality, quantity, gil) - Simple Sell confirmation window | ||||
|  | ||||
| selectFacility(?, sheetId, 3) - Opens the facility chooser. | ||||
| confirmUseFacility(player, cost) - Facility cost confirm | ||||
|  | ||||
| informSellPrice(1, chosenItem, price) - Shows sell confirm window. ChosenItem must be correct. | ||||
|  | ||||
| startTutorial(nil, tutorialId) - Opens up a tutorial menu for each guild type based on tutorialId | ||||
|  | ||||
| finishTalkTurn() - Done at the end. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
| require ("shop") | ||||
|  | ||||
| shopInfo = { -- [actorclass id] = { welcomeText, shopMode, shopPack{s} } | ||||
| [1000159] = {34, 0, 1016}, | ||||
| [1000163] = {49, 0, 1017}, | ||||
| [1000165] = {74, 0, 1019}, | ||||
| [1001458] = {44, 0, 1018}, | ||||
| [1500405] = {320, 0, 1013}, | ||||
| [1500407] = {321, 0, 1012}, | ||||
| [1500411] = {322, 0, 2017}, | ||||
| [1500414] = {324, 0, 1012}, | ||||
| [1500419] = {327, 0, 1012}, | ||||
| [1500422] = {332, 0, 1013}, | ||||
| [1500423] = {331, 0, 2017}, | ||||
| [1500429] = {328, 0, 2017}, | ||||
| [1500430] = {281, 0, 5121}, | ||||
| [1600001] = {6, 0, 1006}, | ||||
| [1600002] = {7, 0, 1007}, | ||||
| [1600003] = {8, 0, 1008}, | ||||
| [1600004] = {9, 0, 1009}, | ||||
| [1600005] = {10, 0, 1010}, | ||||
| [1600006] = {11, 0, 1011}, | ||||
| [1600007] = {12, 0, 1012}, | ||||
| [1600008] = {13, 0, 1013}, | ||||
| [1600009] = {14, 0, 1014}, | ||||
| [1600010] = {15, 0, 1015}, | ||||
| [1600011] = {1, 0, 1001}, | ||||
| [1600012] = {2, 0, 1002}, | ||||
| [1600013] = {3, 0, 1003}, | ||||
| [1600014] = {4, 0, 1004}, | ||||
| [1600016] = {5, 0, 1005}, | ||||
| [1600017] = {39, 0, 2020}, | ||||
| [1600018] = {59, 0, 2021}, | ||||
| [1600019] = {75, 0, 2022}, | ||||
| [1600020] = {77, 0, 2010}, | ||||
| [1600021] = {78, 0, 2011}, | ||||
| [1600022] = {79, 0, 2012}, | ||||
| [1600023] = {80, 0, 2013}, | ||||
| [1600024] = {81, 0, 2014}, | ||||
| [1600025] = {82, 0, 2015}, | ||||
| [1600026] = {83, 0, 2016}, | ||||
| [1600027] = {84, 0, 2017}, | ||||
| [1600028] = {85, 0, 2018}, | ||||
| [1600029] = {86, 0, 2019}, | ||||
| [1600030] = {87, 0, 2001}, | ||||
| [1600031] = {88, 0, 2003}, | ||||
| [1600032] = {89, 0, 2002}, | ||||
| [1600033] = {90, 0, 2004}, | ||||
| [1600034] = {91, 0, 2005}, | ||||
| [1600035] = {92, 0, 2006}, | ||||
| [1600036] = {93, 0, 2007}, | ||||
| [1600037] = {94, 0, 2008}, | ||||
| [1600039] = {69, 0, 3020}, | ||||
| [1600040] = {54, 0, 3019}, | ||||
| [1600041] = {64, 0, 3021}, | ||||
| [1600042] = {76, 0, 3022}, | ||||
| [1600043] = {96, 0, 3009}, | ||||
| [1600044] = {97, 0, 3010}, | ||||
| [1600045] = {98, 0, 3011}, | ||||
| [1600046] = {99, 0, 3012}, | ||||
| [1600047] = {100, 0, 3013}, | ||||
| [1600048] = {101, 0, 3014}, | ||||
| [1600049] = {102, 0, 3016}, | ||||
| [1600050] = {103, 0, 3015}, | ||||
| [1600051] = {104, 0, 3017}, | ||||
| [1600052] = {105, 0, 3004}, | ||||
| [1600053] = {106, 0, 3007}, | ||||
| [1600054] = {107, 0, 3018}, | ||||
| [1600055] = {108, 0, 3006}, | ||||
| [1600056] = {109, 0, 3005}, | ||||
| [1600057] = {110, 0, 3002}, | ||||
| [1600058] = {111, 0, 3003}, | ||||
| [1600059] = {112, 0, 3001}, | ||||
| [1600064] = {235, 0, 2023}, | ||||
| [1600066] = {237, 0, 3023}, | ||||
| [1600075] = {245, 1, {5021,5022,5023,5024,5025,5026} }, | ||||
| [1600076] = {247, 1, {5027,5028,5029,5030,5031,5032} }, | ||||
| [1600077] = {248, 1, {5033,5034,5035,5036,5037,5038} }, | ||||
| [1600080] = {251, 1, {5051,5052,5053,5054,5055,5056} }, | ||||
| [1600081] = {255, 1, {5075,5076,5077,5078,5079,5080} }, | ||||
| [1600089] = {260, 1, {5105,5106,5107,5108,5109,5110} }, | ||||
| [1600092] = {263, 0, 2024}, | ||||
| [1600094] = {265, 0, 3024}, | ||||
| [1600100] = {281, 2, {5001, 5002, 5007, 5008} }, | ||||
| } | ||||
|  | ||||
|  | ||||
| function init(npc) | ||||
|     return false, false, 0, 0;   | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, npc, triggerName) | ||||
|  | ||||
|    -- require("/unique/".. npc.zone.zoneName .."/PopulaceShopSalesman/" .. npc:GetUniqueId())  | ||||
|     npcId = npc:GetActorClassId(); | ||||
|  | ||||
|     if shopInfo[npcId] == nil then | ||||
|         errorMsg = string.format("This PopulaceShopSalesman actor has no shop set. Actor Class Id: %s", npcId); | ||||
|         player:SendMessage(MESSAGE_TYPE_SYSTEM_ERROR, "", errorMsg ); | ||||
|         player:EndEvent(); | ||||
|         return; | ||||
|     end; | ||||
|      | ||||
|     shopCurrancy = 1000001; | ||||
|     callClientFunction(player, "welcomeTalk", shopInfo[npcId][1], player);     | ||||
|  | ||||
|     if npcId == 1000159 then -- DoH Guild NPCs with Facility menu | ||||
|         tutorialId = 36; | ||||
|     elseif npcId == 1000163 then   | ||||
|         tutorialId = 31; | ||||
|     elseif npcId == 1001458 then | ||||
|         tutorialId = 30; | ||||
|     elseif npcId == 1600017 then | ||||
|         tutorialId = 29; | ||||
|     elseif npcId == 1600018 then | ||||
|         tutorialId = 33; | ||||
|     elseif npcId == 1600039 then | ||||
|         tutorialId = 35; | ||||
|     elseif npcId == 1600040 then | ||||
|         tutorialId = 32; | ||||
|     elseif npcId == 1600041 then | ||||
|         tutorialId = 34; | ||||
|     else | ||||
|         tutorialId = -8; | ||||
|     end | ||||
|  | ||||
|  | ||||
|      | ||||
|     while (true) do | ||||
|  | ||||
|         if (shopInfo[npcId][2] == 0) then | ||||
|             choice = callClientFunction(player, "selectMode", tutorialId); | ||||
|         elseif (shopInfo[npcId][2] == 1) then | ||||
|             choice = callClientFunction(player, "selectModeOfClassVendor"); | ||||
|         elseif (shopInfo[npcId][2] == 2) then | ||||
|             choice = callClientFunction(player, "selectModeOfMultiWeaponVendor", tutorialId); | ||||
|         elseif (shopInfo[npcId][2] == 3) then | ||||
|             choice = callClientFunction(player, "selectModeOfMultiArmorVendor", tutorialId); | ||||
|         end | ||||
|                  | ||||
|         if (choice == nil or choice == -3) then | ||||
|             break;   | ||||
|         end | ||||
|  | ||||
|         if (shopInfo[npcId][2] == 0) then | ||||
|             processNormalShop(player, choice); | ||||
|         elseif (shopInfo[npcId][2] == 1) then | ||||
|             processMultiShop(player, choice); | ||||
|         elseif (shopInfo[npcId][2] == 2) then | ||||
|             processMultiShop(player, choice); | ||||
|         elseif (shopInfo[npcId][2] == 3) then | ||||
|             processMultiShop(player, choice); | ||||
|         end | ||||
|          | ||||
|     end | ||||
|      | ||||
|     callClientFunction(player, "finishTalkTurn", player); | ||||
|     player:EndEvent(); | ||||
|      | ||||
| end | ||||
|  | ||||
| function processNormalShop(player, choice) | ||||
|     if (choice == 1) then | ||||
|         callClientFunction(player, "openShopBuy", player, shopInfo[npcId][3], shopCurrancy); | ||||
|          | ||||
|         while (true) do      | ||||
|             buyResult, quantity = callClientFunction(player, "selectShopBuy", player); | ||||
|              | ||||
|             if (buyResult == 0) then | ||||
|                 callClientFunction(player, "closeShopBuy", player);                  | ||||
|                 break; | ||||
|             else | ||||
|               --  purchaseItem(player, shopInfo.shopContents[buyResult].id, quantity, shopInfo.shopContents[buyResult].hq, shopInfo.shopContents[buyResult].gil, shopInfo.shopCurrancy);   | ||||
|             end | ||||
|         end      | ||||
|     elseif (choice == 2) then | ||||
|         openSellMenu(player); | ||||
|     elseif (choice == 3) then | ||||
|         local classFacility = (shopInfo[npcId][1] + 1) or 35; | ||||
|         facilityChoice = callClientFunction(player, "selectFacility", nil, classFacility, 3); | ||||
|          | ||||
|         if facilityChoice == 1 then  | ||||
|             callClientFunction(player, "confirmUseFacility", player, 200); | ||||
|         elseif facilityChoice == 2 then  | ||||
|             callClientFunction(player, "confirmUseFacility", player, 400); | ||||
|         elseif facilityChoice == 3 then  | ||||
|             callClientFunction(player, "confirmUseFacility", player, 1000);            | ||||
|         end | ||||
|                      | ||||
|     elseif (choice == 4) then | ||||
|         callClientFunction(player, "startTutorial", nil, tutorialId);             | ||||
|     end  | ||||
| end | ||||
|  | ||||
| function processMultiShop(player, choice, sellType) | ||||
|  | ||||
|     if (choice >= 1 and choice <= 6) then | ||||
|         callClientFunction(player, "openShopBuy", player, shopInfo[npcId][3][choice], shopCurrancy); | ||||
|          | ||||
|         while (true) do          | ||||
|             buyResult, quantity = callClientFunction(player, "selectShopBuy", player); | ||||
|              | ||||
|             if (buyResult == 0) then | ||||
|                 callClientFunction(player, "closeShopBuy", player);                  | ||||
|                 break; | ||||
|             else | ||||
|               --  purchaseItem(player, shopInfo.shopContents[choice][buyResult].id, quantity, shopInfo.shopContents[choice][buyResult].hq, shopInfo.shopContents[choice][buyResult].gil, shopInfo.shopCurrancy); | ||||
|             end | ||||
|         end      | ||||
|     elseif (choice == 0) then | ||||
|         openSellMenu(player); | ||||
|     elseif (choice == 6) then | ||||
|         callClientFunction(player, "selectFacility", 2, 35, 3); | ||||
|         callClientFunction(player, "confirmUseFacility", player, 35);            | ||||
|     elseif (choice == 7) then | ||||
|         callClientFunction(player, "startTutorial", nil, tutorialId);             | ||||
|     end | ||||
|      | ||||
| end | ||||
|  | ||||
|  | ||||
| function openSellMenu(player) | ||||
|     callClientFunction(player, "openShopSell", player); | ||||
|  | ||||
|     while (true) do      | ||||
|         sellResult, sellQuantity, sellState, unknown, sellItemSlot = callClientFunction(player, "selectShopSell", player); | ||||
|              | ||||
|         if (sellResult == nil) then | ||||
|             callClientFunction(player, "closeShopSell", player);                     | ||||
|             break; | ||||
|         else | ||||
|             if sellState == 1 then | ||||
|                 itemToSell = player:GetItemPackage(INVENTORY_NORMAL):GetItemAtSlot(sellItemSlot-1); | ||||
|                 gItemSellId = itemToSell.itemId;  | ||||
|                 gItemQuality = itemToSell.quality; | ||||
|                 gItemPrice = GetItemGamedata(gItemSellId); | ||||
|                 gItemPrice = gItemPrice.sellPrice; | ||||
|                  | ||||
|                  | ||||
|                 if gItemQuality == 2 then       -- +1 | ||||
|                     gItemPrice = (math.floor(gItemPrice * 1.10)); | ||||
|                 elseif gItemQuality == 3 then   -- +2 | ||||
|                     gItemPrice = (math.floor(gItemPrice * 1.25)); | ||||
|                 elseif gItemQuality == 4 then   -- +3 | ||||
|                     gItemPrice = (math.floor(gItemPrice * 1.50)); | ||||
|                 end | ||||
|  | ||||
|                 callClientFunction(player, "informSellPrice", 1, sellItemSlot, gItemPrice); | ||||
|  | ||||
|             elseif sellState == nil then | ||||
|                 sellItem(player, gItemSellId, sellQuantity, gItemQuality, gItemPrice, sellItemSlot-1, shopCurrancy); | ||||
|             end | ||||
|         end | ||||
|     end | ||||
| end | ||||
|  | ||||
							
								
								
									
										46
									
								
								Data/scripts/base/chara/npc/retainer/OrdinaryRetainer.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								Data/scripts/base/chara/npc/retainer/OrdinaryRetainer.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| --[[ | ||||
|  | ||||
| OrdinaryRetainer Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| eventTalkRetainerOther() -  | ||||
| eventTalkRetainerMenu(mode, hasPossessions) - Opens the main menu. If mode == 2, hide dismiss option. | ||||
| eventTalkRetainerDismissal(hasPossessions) - Show dismiss confirmation. | ||||
| eventTalkRetainerMannequin(0:enable/1:disable confirm) - Show bazaar modeling confirmation. | ||||
| eventTalkRetainerItemTrade(operationCode) - Operate RetainerTradeWidget. Codes: 1 - Open, 2 - Select Mode, 3 - Close. | ||||
| eventTalkRetainerItemList(operationCode) -  Operate Bazaar Widget. Codes: 1 - Open, 2 - Select Mode, 3 - Close. | ||||
| eventReturnResult(resultCode, ?) - Redraws the RetainerTrade UI. | ||||
| sayToPlayer(actorClassId, messageType, argument) - Makes the retainer say a phrase to the player. | ||||
| eventTalkFinish() - Stops npc from looking at player. | ||||
| eventPlayerTurn(angle) - Turns player to angle. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
| require ("retainer") | ||||
|  | ||||
| function init(npc) | ||||
| 	return false, false, 0, 0;	 | ||||
| end | ||||
|  | ||||
| function onEventStarted(player, retainer, triggerName) | ||||
| 	 | ||||
| 	while (true) do | ||||
| 		choice = callClientFunction(player, "eventTalkRetainerMenu", 1); | ||||
| 		if (choice == 1) then | ||||
| 			doItemTrade(player, retainer); | ||||
| 		elseif (choice == 2) then | ||||
| 			doBazaar(player, retainer); | ||||
| 		elseif (choice == 7) then | ||||
| 			callClientFunction(player, "eventTalkRetainerMannequin", 0);		 | ||||
| 		elseif (choice == 5) then | ||||
| 			player:DespawnMyRetainer(); | ||||
| 		else | ||||
| 			break; | ||||
| 		end | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										175
									
								
								Data/scripts/battlenpc.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								Data/scripts/battlenpc.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,175 @@ | ||||
| local initClassItems, initRaceItems; | ||||
|  | ||||
| function onBeginLogin(player)		 | ||||
| 	--New character, set the initial quest | ||||
| 	if (player:GetPlayTime(false) == 0) then | ||||
| 		initialTown = player:GetInitialTown(); | ||||
| 		 | ||||
| 		if (initialTown == 1 and player:HasQuest(110001) == false) then | ||||
| 			player:AddQuest(110001); | ||||
| 			player:SetHomePoint(1280001); | ||||
| 		elseif (initialTown == 2 and player:HasQuest(110005) == false) then | ||||
| 			player:AddQuest(110005); | ||||
| 			player:SetHomePoint(1280061); | ||||
| 		elseif (initialTown == 3 and player:HasQuest(110009) == false) then | ||||
| 			player:AddQuest(110009); | ||||
| 			player:SetHomePoint(1280031); | ||||
| 		end		 | ||||
| 		 | ||||
| 	end | ||||
| 			 | ||||
| 	--For Opening. Set Director and reset position incase d/c | ||||
| 	if (player:HasQuest(110001) == true and player:GetZoneID() == 193) then | ||||
| 		director = player:GetZone():CreateDirector("OpeningDirector", false);		 | ||||
| 		player:AddDirector(director); | ||||
| 		director:StartDirector(true); | ||||
| 		player:SetLoginDirector(director);		 | ||||
| 		player:KickEvent(director, "noticeEvent", true); | ||||
| 				 | ||||
| 		player.positionX = 0.016; | ||||
| 		player.positionY = 10.35; | ||||
| 		player.positionZ = -36.91; | ||||
| 		player.rotation = 0.025; | ||||
| 		player:GetQuest(110001):ClearQuestData(); | ||||
| 		player:GetQuest(110001):ClearQuestFlags(); | ||||
| 	elseif (player:HasQuest(110005) == true and player:GetZoneID() == 166) then  | ||||
| 		director = player:GetZone():CreateDirector("OpeningDirector", false);		 | ||||
| 		player:AddDirector(director); | ||||
| 		director:StartDirector(false);		 | ||||
| 		player:SetLoginDirector(director);		 | ||||
| 		player:KickEvent(director, "noticeEvent", true); | ||||
| 		 | ||||
| 		player.positionX = 369.5434; | ||||
| 		player.positionY = 4.21; | ||||
| 		player.positionZ = -706.1074; | ||||
| 		player.rotation = -1.26721; | ||||
| 		player:GetQuest(110005):ClearQuestData(); | ||||
| 		player:GetQuest(110005):ClearQuestFlags(); | ||||
| 	elseif (player:HasQuest(110009) == true and player:GetZoneID() == 184) then | ||||
| 		--director = player:GetZone():CreateDirector("OpeningDirector", false);		 | ||||
| 		--player:AddDirector(director); | ||||
| 		--director:StartDirector(false);		 | ||||
| 		--player:SetLoginDirector(director);		 | ||||
| 		--player:KickEvent(director, "noticeEvent", true); | ||||
| 		-- | ||||
| 		player.positionX = 5.364327; | ||||
| 		player.positionY = 196.0; | ||||
| 		player.positionZ = 133.6561; | ||||
| 		player.rotation = -2.849384; | ||||
| 		player:GetQuest(110009):ClearQuestData(); | ||||
| 		player:GetQuest(110009):ClearQuestFlags(); | ||||
| 	end	 | ||||
| end | ||||
|  | ||||
| function onLogin(player) | ||||
|  | ||||
| 	if (player:GetPlayTime(false) == 0) then | ||||
| 		player:SendMessage(0x1D,"",">PlayTime == 0, new player!"); | ||||
| 		 | ||||
| 		initClassItems(player); | ||||
| 		initRaceItems(player);	 | ||||
|  | ||||
| 		player:SavePlayTime();		 | ||||
| 	end	 | ||||
| 	 | ||||
| end | ||||
|  | ||||
| function initClassItems(player) | ||||
|  | ||||
| 	local slotTable; | ||||
| 	local invSlotTable; | ||||
|  | ||||
| 	--DoW	 | ||||
| 	if (player.charaWork.parameterSave.state_mainSkill[0] == 2) then 		--PUG | ||||
| 		player:GetItemPackage(0):AddItem({4020001, 8030701, 8050728, 8080601, 8090307}); | ||||
| 		player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4}); | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 3) then	--GLA | ||||
| 		player:GetItemPackage(0):AddItem({4030010, 8031120, 8050245, 8080601, 8090307}); | ||||
| 		player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4}); | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 4) then	--MRD | ||||
| 		player:GetItemPackage(0):AddItem({4040001, 8011001, 8050621, 8070346, 8090307}); | ||||
| 		player:GetEquipment():SetEquipment({0, 8, 12, 13, 15},{0, 1, 2, 3, 4}); | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 7) then	--ARC | ||||
| 		player:GetItemPackage(0):AddItem({4070001, 8030601, 8050622, 8080601, 8090307}); | ||||
| 		player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4}); | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 8) then	--LNC | ||||
| 		player:GetItemPackage(0):AddItem({4080201, 8030801, 8051015, 8080501, 8090307}); | ||||
| 		player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4}); | ||||
| 	--DoM	 | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 22) then	--THM | ||||
| 		player:GetItemPackage(0):AddItem({5020001, 8030245, 8050346, 8080346, 8090208}); | ||||
| 		player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4}); | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 23) then	--CNJ | ||||
| 		player:GetItemPackage(0):AddItem({5030101, 8030445, 8050031, 8080246, 8090208}); | ||||
| 		player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4}); | ||||
| 		 | ||||
| 	--DoH | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 29) then	-- | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 30) then	-- | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 31) then	-- | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 32) then	-- | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 33) then	-- | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 34) then	-- | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 35) then	-- | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 36) then	-- | ||||
| 	 | ||||
| 	--DoL | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 39) then	--MIN | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 40) then	--BTN	 | ||||
| 	elseif (player.charaWork.parameterSave.state_mainSkill[0] == 41) then	--FSH | ||||
| 	end | ||||
| 	 | ||||
| end | ||||
|  | ||||
| function initRaceItems(player) | ||||
|  | ||||
| 	if (player.playerWork.tribe == 1) then		--Hyur Midlander Male | ||||
| 		player:GetItemPackage(0):AddItem(8040001); | ||||
| 		player:GetItemPackage(0):AddItem(8060001); | ||||
| 	elseif (player.playerWork.tribe == 2) then	--Hyur Midlander Female | ||||
| 		player:GetItemPackage(0):AddItem(8040002); | ||||
| 		player:GetItemPackage(0):AddItem(8060002); | ||||
| 	elseif (player.playerWork.tribe == 3) then	--Hyur Highlander Male | ||||
| 		player:GetItemPackage(0):AddItem(8040003); | ||||
| 		player:GetItemPackage(0):AddItem(8060003); | ||||
| 	elseif (player.playerWork.tribe == 4) then	--Elezen Wildwood Male | ||||
| 		player:GetItemPackage(0):AddItem(8040004); | ||||
| 		player:GetItemPackage(0):AddItem(8060004); | ||||
| 	elseif (player.playerWork.tribe == 5) then	--Elezen Wildwood Female | ||||
| 		player:GetItemPackage(0):AddItem(8040006); | ||||
| 		player:GetItemPackage(0):AddItem(8060006); | ||||
| 	elseif (player.playerWork.tribe == 6) then	--Elezen Duskwight Male | ||||
| 		player:GetItemPackage(0):AddItem(8040005); | ||||
| 		player:GetItemPackage(0):AddItem(8060005); | ||||
| 	elseif (player.playerWork.tribe == 7) then	--Elezen Duskwight Female | ||||
| 		player:GetItemPackage(0):AddItem(8040007); | ||||
| 		player:GetItemPackage(0):AddItem(8060007); | ||||
| 	elseif (player.playerWork.tribe == 8) then	--Lalafell Plainsfolk Male | ||||
| 		player:GetItemPackage(0):AddItem(8040008); | ||||
| 		player:GetItemPackage(0):AddItem(8060008); | ||||
| 	elseif (player.playerWork.tribe == 9) then	--Lalafell Plainsfolk Female | ||||
| 		player:GetItemPackage(0):AddItem(8040010); | ||||
| 		player:GetItemPackage(0):AddItem(8060010); | ||||
| 	elseif (player.playerWork.tribe == 10) then	--Lalafell Dunesfolk Male | ||||
| 		player:GetItemPackage(0):AddItem(8040009); | ||||
| 		player:GetItemPackage(0):AddItem(8060009); | ||||
| 	elseif (player.playerWork.tribe == 11) then	--Lalafell Dunesfolk Female | ||||
| 		player:GetItemPackage(0):AddItem(8040011); | ||||
| 		player:GetItemPackage(0):AddItem(8060011); | ||||
| 	elseif (player.playerWork.tribe == 12) then	--Miqo'te Seekers of the Sun | ||||
| 		player:GetItemPackage(0):AddItem(8040012); | ||||
| 		player:GetItemPackage(0):AddItem(8060012); | ||||
| 	elseif (player.playerWork.tribe == 13) then	--Miqo'te Seekers of the Moon | ||||
| 		player:GetItemPackage(0):AddItem(8040013); | ||||
| 		player:GetItemPackage(0):AddItem(8060013); | ||||
| 	elseif (player.playerWork.tribe == 14) then	--Roegadyn Sea Wolf | ||||
| 		player:GetItemPackage(0):AddItem(8040014); | ||||
| 		player:GetItemPackage(0):AddItem(8060014); | ||||
| 	elseif (player.playerWork.tribe == 15) then	--Roegadyn Hellsguard | ||||
| 		player:GetItemPackage(0):AddItem(8040015); | ||||
| 		player:GetItemPackage(0):AddItem(8060015); | ||||
| 	end | ||||
|  | ||||
| 	player:GetEquipment():SetEquipment({9, 11},{5,6}); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										107
									
								
								Data/scripts/battleutils.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								Data/scripts/battleutils.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | ||||
| CommandType =  | ||||
| { | ||||
|     None = 0, | ||||
|     AutoAttack = 1, | ||||
|     Weaponskill = 2, | ||||
|     Ability = 3, | ||||
|     Spell = 4 | ||||
| } | ||||
|  | ||||
| ActionType = | ||||
| { | ||||
|     None = 0, | ||||
|     Physical = 1, | ||||
|     Magic = 2, | ||||
|     Heal = 3, | ||||
|     Status = 4 | ||||
| } | ||||
|  | ||||
| ActionProperty =  | ||||
| { | ||||
|     None = 0, | ||||
|     Physical = 1, | ||||
|     Magic = 2, | ||||
|     Heal = 4, | ||||
|     Status = 8, | ||||
|     Ranged = 16 | ||||
| } | ||||
|  | ||||
| DamageTakenType = | ||||
| { | ||||
|     None, | ||||
|     Attack, | ||||
|     Magic, | ||||
|     Weaponskill, | ||||
|     Ability | ||||
| } | ||||
|  | ||||
| HitDirection = | ||||
| { | ||||
|     None = 0, | ||||
|     Front = 1, | ||||
|     Right = 2, | ||||
|     Rear = 4, | ||||
|     Left = 8 | ||||
| } | ||||
|  | ||||
| HitType = | ||||
| { | ||||
|     Miss = 0, | ||||
|     Evade = 1, | ||||
|     Parry = 2, | ||||
|     Block = 3, | ||||
|     Resist = 4, | ||||
|     Hit = 5, | ||||
|     Crit = 6 | ||||
| } | ||||
|  | ||||
| TargetFindAOEType = | ||||
| { | ||||
|     None = 0, | ||||
|     Circle = 1, | ||||
|     Cone = 2, | ||||
|     Box = 3 | ||||
| } | ||||
|  | ||||
| StatusEffectFlags = | ||||
| { | ||||
|     None = 0, | ||||
|  | ||||
|     --Loss flags - Do we need loseonattacking/caststart? Could just be done with activate flags | ||||
|     LoseOnDeath =                   bit32.lshift(1, 0),     -- effects removed on death | ||||
|     LoseOnZoning =                  bit32.lshift(1, 1),     -- effects removed on zoning | ||||
|     LoseOnEsuna =                   bit32.lshift(1, 2),     -- effects which can be removed with esuna (debuffs) | ||||
|     LoseOnDispel =                  bit32.lshift(1, 3),     -- some buffs which player might be able to dispel from mob | ||||
|     LoseOnLogout =                  bit32.lshift(1, 4),     -- effects removed on logging out | ||||
|     LoseOnAttacking =               bit32.lshift(1, 5),     -- effects removed when owner attacks another entity | ||||
|     LoseOnCastStart =               bit32.lshift(1, 6),     -- effects removed when owner starts casting | ||||
|     LoseOnAggro =                   bit32.lshift(1, 7),     -- effects removed when owner gains enmity (swiftsong) | ||||
|     LoseOnClassChange =             bit32.lshift(1, 8),     --Effect falls off whhen changing class | ||||
|  | ||||
|     --Activate flags | ||||
|     ActivateOnCastStart =           bit32.lshift(1, 9),     --Activates when a cast starts. | ||||
|     ActivateOnCommandStart =        bit32.lshift(1, 10),    --Activates when a command is used, before iterating over targets. Used for things like power surge, excruciate. | ||||
|     ActivateOnCommandFinish =       bit32.lshift(1, 11),    --Activates when the command is finished, after all targets have been iterated over. Used for things like Excruciate and Resonance falling off. | ||||
|     ActivateOnPreactionTarget =     bit32.lshift(1, 12),    --Activates after initial rates are calculated for an action against owner | ||||
|     ActivateOnPreactionCaster =     bit32.lshift(1, 13),    --Activates after initial rates are calculated for an action by owner | ||||
|     ActivateOnDamageTaken =         bit32.lshift(1, 14), | ||||
|     ActivateOnHealed =              bit32.lshift(1, 15), | ||||
|  | ||||
|     --Should these be rolled into DamageTaken? | ||||
|     ActivateOnMiss =                bit32.lshift(1, 16),    --Activates when owner misses | ||||
|     ActivateOnEvade =               bit32.lshift(1, 17),    --Activates when owner evades | ||||
|     ActivateOnParry =               bit32.lshift(1, 18),    --Activates when owner parries | ||||
|     ActivateOnBlock =               bit32.lshift(1, 19),    --Activates when owner evades | ||||
|     ActivateOnHit =                 bit32.lshift(1, 20),    --Activates when owner hits | ||||
|     ActivateOnCrit =                bit32.lshift(1, 21),    --Activates when owner crits | ||||
|  | ||||
|     --Prevent flags. Sleep/stun/petrify/etc combine these | ||||
|     PreventSpell =                  bit32.lshift(1, 22),    -- effects which prevent using spells, such as silence | ||||
|     PreventWeaponSkill =            bit32.lshift(1, 23),    -- effects which prevent using weaponskills, such as pacification | ||||
|     PreventAbility =                bit32.lshift(1, 24),    -- effects which prevent using abilities, such as amnesia | ||||
|     PreventAttack =                 bit32.lshift(1, 25),    -- effects which prevent basic attacks | ||||
|     PreventMovement =               bit32.lshift(1, 26),    -- effects which prevent movement such as bind, still allows turning in place | ||||
|     PreventTurn =                   bit32.lshift(1, 27),    -- effects which prevent turning, such as stun | ||||
|     PreventUntarget =               bit32.lshift(1, 28),    -- effects which prevent changing targets, such as fixation | ||||
|     Stance =                        bit32.lshift(1, 29)     -- effects that do not have a timer | ||||
| } | ||||
							
								
								
									
										19
									
								
								Data/scripts/commands/Ability.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Data/scripts/commands/Ability.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| require ("global") | ||||
| require ("utils") | ||||
|  | ||||
| --[[ | ||||
|  | ||||
| AttackWeaponSkill Script | ||||
|  | ||||
| Finds the correct weaponskill subscript to fire when a weaponskill actor is activated. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| local attackMagicHandlers = { | ||||
|      | ||||
| } | ||||
|  | ||||
| function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8) | ||||
| 	player.Ability(command.actorId, targetActor); | ||||
| 	player:endEvent(); | ||||
| end | ||||
							
								
								
									
										5
									
								
								Data/scripts/commands/AbilityCure.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Data/scripts/commands/AbilityCure.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| require("global") | ||||
|  | ||||
| function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8) | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										20
									
								
								Data/scripts/commands/ActivateCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Data/scripts/commands/ActivateCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| require ("global") | ||||
|  | ||||
| --[[ | ||||
|  | ||||
| ActivateCommand Script | ||||
|  | ||||
| Switches between active and passive mode states | ||||
|  | ||||
| --]] | ||||
|  | ||||
| function onEventStarted(player, command, triggerName) | ||||
|      | ||||
| 	if (player.currentMainState == 0x0000) then | ||||
| 		player.Engage(0, 0x0002); | ||||
|     elseif (player.currentMainState == 0x0002) then | ||||
|         player.Disengage(0x0000); | ||||
| 	end		 | ||||
| 	player:endEvent(); | ||||
| 	sendSignal("playerActive"); | ||||
| end; | ||||
							
								
								
									
										20
									
								
								Data/scripts/commands/AttackAbility.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Data/scripts/commands/AttackAbility.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| require ("global") | ||||
| require ("utils") | ||||
|  | ||||
| --[[ | ||||
|  | ||||
| AttackWeaponSkill Script | ||||
|  | ||||
| Finds the correct weaponskill subscript to fire when a weaponskill actor is activated. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| local attackMagicHandlers = { | ||||
|      | ||||
| } | ||||
|  | ||||
| function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8) | ||||
| 	player.Ability(command.actorId, targetActor); | ||||
| 	player:endEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										19
									
								
								Data/scripts/commands/AttackMagic.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Data/scripts/commands/AttackMagic.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| require ("global") | ||||
| require ("utils") | ||||
|  | ||||
| --[[ | ||||
|  | ||||
| AttackWeaponSkill Script | ||||
|  | ||||
| Finds the correct weaponskill subscript to fire when a weaponskill actor is activated. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| local attackMagicHandlers = { | ||||
|      | ||||
| } | ||||
|  | ||||
| function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8) | ||||
| 	player.Cast(command.actorId, targetActor); | ||||
| 	player:endEvent(); | ||||
| end; | ||||
							
								
								
									
										26
									
								
								Data/scripts/commands/AttackWeaponSkill.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								Data/scripts/commands/AttackWeaponSkill.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| require ("global") | ||||
| require ("utils") | ||||
|  | ||||
| --[[ | ||||
|  | ||||
| AttackWeaponSkill Script | ||||
|  | ||||
| Finds the correct weaponskill subscript to fire when a weaponskill actor is activated. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8) | ||||
| 	 | ||||
| 	--Are they in active mode? | ||||
| 	if (player:GetState() != 2) then | ||||
| 		player:SendGameMessage(GetWorldMaster(), 32503, 0x20); | ||||
| 		player:endEvent(); | ||||
| 		return; | ||||
| 	end | ||||
| 	 | ||||
|     if not player.aiContainer.IsEngaged() then | ||||
|         player.Engage(targetActor); | ||||
|     end; | ||||
|     player.WeaponSkill(command.actorId, targetActor); | ||||
| 	player:endEvent(); | ||||
| end; | ||||
							
								
								
									
										30
									
								
								Data/scripts/commands/BazaarCheckCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								Data/scripts/commands/BazaarCheckCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| --[[ | ||||
|  | ||||
| BazaarCheckCommand Script | ||||
|  | ||||
| Handles what happens when you examine a player's bazaar | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName, name, arg1, arg2, arg3, bazaarActorId)	 | ||||
|  | ||||
| 	local bazaarActor = nil; | ||||
|  | ||||
| 	if (name ~= nil) then | ||||
| 		bazaarActor = player:GetZone():FindPCInZone(name); | ||||
| 	elseif (bazaarActorId ~= nil) then | ||||
| 		bazaarActor = player:GetZone():FindActorInArea(bazaarActorId); | ||||
| 	end | ||||
| 	 | ||||
| 	if (bazaarActor ~= nil) then | ||||
| 		player:SendMessage(MESSAGE_TYPE_SYSTEM_ERROR, "", "Currently disabled due to freezing characters."); | ||||
| 		--callClientFunction(player, "delegateCommand", GetStaticActor("BazaarCheckCommand"), "processChackBazaar");		 | ||||
| 	else | ||||
| 		--Show error | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										58
									
								
								Data/scripts/commands/BazaarDealCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								Data/scripts/commands/BazaarDealCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| --[[ | ||||
|  | ||||
| BazaarDealCommand Script | ||||
|  | ||||
| Handles various bazaar transfer options | ||||
|  | ||||
| All bazaar args have a Reward (The item the person who fufills the request gets) and a Seek (The item the player wants, either gil or an item). | ||||
|  | ||||
| Args: | ||||
|  | ||||
| rewardItem: Item reference to what will be given to the buyer. If it's gil the itemID will be given instead. If offering an item to seek; reward/seek are combined and put here. | ||||
| seekItem: Item reference to what the buyer will give us. If it's gil the itemID will be given instead, | ||||
| bazaarMode: The tag value to set in the bazaar item's data. | ||||
| arg1: Always nil | ||||
| bazaarActor: The actor who owns this bazaar | ||||
| rewardAmount: The amount of rewardItem the buyer will get. | ||||
| seekAmount: The amount of seekItem we want. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName, rewardItem, seekItem, bazaarMode, arg1, bazaarActor, rewardAmount, seekAmount, arg2, arg3, type9ItemIds) | ||||
|  | ||||
| 	local rewarding = nil; | ||||
| 	local seeking = nil; | ||||
|  | ||||
| 	--Handle special case for offering an item. | ||||
| 	if (seekItem == nil) then | ||||
| 		rewarding = player:GetItemPackage(rewardItem.offerPackageId):GetItemAtSlot(rewardItem.offerSlot); | ||||
| 		seeking = player:GetItemPackage(rewardItem.seekPackageId):GetItemAtSlot(rewardItem.seekSlot); | ||||
| 	end	 | ||||
| 	 | ||||
| 	--Handle Reward | ||||
| 	if (rewarding == nil) then | ||||
| 		if (type(rewardItem) == "number") then | ||||
| 			rewarding = player:GetItemPackage(INVENTORY_CURRENCY):GetItemByCatelogId(rewardItem); | ||||
| 		else | ||||
| 			rewarding = player:GetItem(rewardItem);			 | ||||
| 		end | ||||
| 	end | ||||
| 	 | ||||
| 	--Handle Seek | ||||
| 	if (seeking == nil) then | ||||
| 		if (type(seekItem) == "number") then | ||||
| 			seeking = player:GetItemPackage(INVENTORY_CURRENCY):GetItemByCatelogId(seekItem); | ||||
| 		else | ||||
| 			seeking = player:GetItem(seekItem);			 | ||||
| 		end | ||||
| 	end | ||||
| 		 | ||||
| 	result = GetWorldManager():AddToBazaar(player, rewarding, seeking, rewardAmount, seekAmount, bazaarMode); | ||||
|  | ||||
| 	 | ||||
|  | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										55
									
								
								Data/scripts/commands/BazaarTradeCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								Data/scripts/commands/BazaarTradeCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | ||||
| --[[ | ||||
|  | ||||
| BazaarTradeCommand Script | ||||
|  | ||||
| Handles bazaar trade | ||||
|  | ||||
| All bazaar args have a Reward (The item the person who fufills the request gets) and a Seek (The item the player wants, either gil or an item). | ||||
|  | ||||
| --]] | ||||
|  | ||||
| --TODO REFACTOR | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName, rewardItem, seekItemOrCost, seekAmount, arg1, bazaarActorId, rewardAmount, rewardItemId, nameIndex, arg2, type9ItemIds) | ||||
|  | ||||
| 	local originalReward = nil; | ||||
| 	local originalSeek = nil; | ||||
| 	local bazaarActor = nil; | ||||
| 	 | ||||
| 	--Get the bazaar actor | ||||
| 	if (bazaarActorId ~= nil) then | ||||
| 		bazaarActor = player:GetZone():FindActorInArea(bazaarActorId);		 | ||||
| 	end | ||||
| 	 | ||||
| 	--Abort if no actor | ||||
| 	if (bazaarActor == nil) then | ||||
| 		player:SendGameMessage(player, worldMaster, 25111, 0x20); | ||||
| 		player:EndEvent(); | ||||
| 		return; | ||||
| 	end | ||||
| 	 | ||||
| 	--If seekItem is a number, we are buying an item (ExecuteBazaarBuy) | ||||
| 	if (type(seekItemOrCost) == "number") then | ||||
| 		if (player:GetCurrentGil() >= seekItemOrCost) then | ||||
| 			if (GetWorldManager():BazaarBuyOperation(bazaarActor, player, bazaarActor:GetItem(rewardItem), rewardAmount, seekItemOrCost)) then			 | ||||
| 			else | ||||
| 				player:SendGameMessage(player, worldMaster, 25111, 0x20); | ||||
| 			end | ||||
| 		else | ||||
| 			player:SendGameMessage(player, worldMaster, 40252, 0x20); | ||||
| 		end	 | ||||
| 	else --Else we are fufilling a sought out item (ExecuteBazaarSell) | ||||
| 		local rewardItem = bazaarActor:GetItem(rewardItem); | ||||
| 		local seekItem = player:GetItem(seekItemOrCost); | ||||
| 		if (rewardItem ~= nil and seekItem ~= nil) then | ||||
| 			if (GetWorldManager():BazaarSellOperation(bazaarActor, player, rewardItem, rewardAmount, seekItem, seekAmount)) then			 | ||||
| 			else | ||||
| 				player:SendGameMessage(player, worldMaster, 25111, 0x20); | ||||
| 			end | ||||
| 		else | ||||
| 		end | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										22
									
								
								Data/scripts/commands/BazaarUndealCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								Data/scripts/commands/BazaarUndealCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| --[[ | ||||
|  | ||||
| BazaarUndealCommand Script | ||||
|  | ||||
| Handles canceling bazaar items | ||||
|  | ||||
| 25107 - Your bazaar is either full or already contains that unique item. | ||||
| 25111 - Unable to complete transaction. | ||||
| 25112 - You are unable to remove the item from your bazaar. You cannot hold any more items. | ||||
| 25113 - Offered and sought items cannot be identical. | ||||
| 25114 - Items in less than mint condition cannot be offered. | ||||
| 25115 - Items in less than mint condition cannot be placed in your bazaar. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName, rewardItem, seekItem, bazaarType, narg, bazaarActor, rewardAmount, seekAmount, narg, narg, type9ItemIds) | ||||
| 	 | ||||
| 	GetWorldManager():RemoveFromBazaar(player, player:GetItem(rewardItem)); | ||||
| 		 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										23
									
								
								Data/scripts/commands/BonusPointCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								Data/scripts/commands/BonusPointCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| --[[ | ||||
|  | ||||
| BonusPointCommand Script | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| operateUI(pointsAvailable, pointsLimit, str, vit, dex, int, min, pie) | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName) | ||||
| 	--local points = player:GetAttributePoints(); | ||||
| 	--player:RunEventFunction("delegateCommand", actor, "operateUI", points.available, points.limit, points.inSTR, points.inVIT, points.inDEX, points.inINT, points.inMIN, points.inPIT); | ||||
| 	result = callClientFunction(player, "delegateCommand", actor, "operateUI", 100, 100, 10, 10, 10, 10, 10, 10); | ||||
| 	 | ||||
| 	--Do Save | ||||
| 	if (result == true) then | ||||
| 	end | ||||
| 	 | ||||
| 	player:endEvent(); | ||||
| end | ||||
							
								
								
									
										6
									
								
								Data/scripts/commands/ChangeJobCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								Data/scripts/commands/ChangeJobCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| function onEventStarted(player, caller, commandRequest, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) | ||||
|  | ||||
|     player:SetCurrentJob(17); | ||||
|  | ||||
|     player:EndEvent(); | ||||
| end | ||||
							
								
								
									
										19
									
								
								Data/scripts/commands/CheckCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								Data/scripts/commands/CheckCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| --[[ | ||||
|  | ||||
| CheckCommand Script | ||||
|  | ||||
| Handles player examining someone | ||||
|  | ||||
| --]] | ||||
|  | ||||
| function onEventStarted(player, commandactor, triggerName, arg1, arg2, arg3, arg4, checkedActorId) | ||||
|  | ||||
| 	actor = player:GetActorInInstance(checkedActorId); | ||||
| 	 | ||||
| 	if (actor ~= nil) then | ||||
| 		player:examinePlayer(actor); | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										45
									
								
								Data/scripts/commands/ChocoboRideCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								Data/scripts/commands/ChocoboRideCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| --[[ | ||||
|  | ||||
| ChocoboRideCommand Script | ||||
|  | ||||
| Handles mounting and dismounting the Chocobo and Goobbue | ||||
|  | ||||
| --]] | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName, isGoobbue) | ||||
|  | ||||
| 	if (player:GetState() == 0) then		 | ||||
| 				 | ||||
| 		worldMaster = GetWorldMaster();		 | ||||
| 		 | ||||
| 		if (isGoobbue ~= true) then | ||||
| 			player:ChangeMusic(83); | ||||
| 			player:SendGameMessage(player, worldMaster, 26001, 0x20); | ||||
| 			player:SetMountState(1); | ||||
| 		else | ||||
| 			player:ChangeMusic(98); | ||||
| 			player:SendGameMessage(player, worldMaster, 26019, 0x20); | ||||
| 			player:SetMountState(2); | ||||
| 		end | ||||
| 		 | ||||
| 		player:ChangeSpeed(0.0, 5.0, 10.0, 10.0); | ||||
| 		player:ChangeState(15); | ||||
| 	else | ||||
| 		player:ChangeMusic(player:GetZone().bgmDay); | ||||
| 		 | ||||
| 		worldMaster = GetWorldMaster(); | ||||
| 		 | ||||
| 		if (player:GetMountState() == 1) then | ||||
| 			player:SendGameMessage(player, worldMaster, 26003, 0x20); | ||||
| 		else | ||||
| 			player:SendGameMessage(player, worldMaster, 26021, 0x20);		 | ||||
| 		end | ||||
| 		 | ||||
| 		player:SetMountState(0); | ||||
| 		player:ChangeSpeed(0.0, 2.0, 5.0, 5.0) | ||||
| 		player:ChangeState(0);  | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										144
									
								
								Data/scripts/commands/CmnAttackWeaponSkill.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								Data/scripts/commands/CmnAttackWeaponSkill.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,144 @@ | ||||
| require ("global") | ||||
|  | ||||
| --[[ | ||||
|  | ||||
| CmnAttackWeaponSkill Script | ||||
|  | ||||
| Finds the correct weaponskill subscript to fire when a weaponskill actor is activated. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| local function handleTEST(player) | ||||
| end | ||||
|  | ||||
| local weaponskillHandlers = { | ||||
| 	[0xA0F067F4] = nil, | ||||
| 	[0xA0F067F5] = nil, | ||||
| 	[0xA0F067F7] = nil, | ||||
| 	[0xA0F067F8] = nil, | ||||
| 	[0xA0F067FA] = nil, | ||||
| 	[0xA0F067FB] = nil, | ||||
| 	[0xA0F067FD] = nil, | ||||
| 	[0xA0F067FE] = nil, | ||||
| 	[0xA0F06800] = nil, | ||||
| 	[0xA0F06801] = nil, | ||||
| 	[0xA0F06802] = nil, | ||||
| 	[0xA0F06804] = nil, | ||||
| 	[0xA0F06805] = nil, | ||||
| 	[0xA0F06806] = nil, | ||||
| 	[0xA0F06808] = nil, | ||||
| 	[0xA0F0680A] = nil, | ||||
| 	[0xA0F0680B] = nil, | ||||
| 	[0xA0F0680D] = nil, | ||||
| 	[0xA0F0680E] = nil, | ||||
| 	[0xA0F06810] = nil, | ||||
| 	[0xA0F06812] = nil, | ||||
| 	[0xA0F06814] = nil, | ||||
| 	[0xA0F068A8] = nil, | ||||
| 	[0xA0F068A9] = nil, | ||||
| 	[0xA0F068AB] = nil, | ||||
| 	[0xA0F068AC] = nil, | ||||
| 	[0xA0F068AE] = nil, | ||||
| 	[0xA0F068AF] = nil, | ||||
| 	[0xA0F068B2] = nil, | ||||
| 	[0xA0F068B3] = nil, | ||||
| 	[0xA0F068B5] = nil, | ||||
| 	[0xA0F068B7] = nil, | ||||
| 	[0xA0F068B8] = nil, | ||||
| 	[0xA0F068B9] = nil, | ||||
| 	[0xA0F068BB] = nil, | ||||
| 	[0xA0F068BC] = nil, | ||||
| 	[0xA0F068BE] = nil, | ||||
| 	[0xA0F068BF] = nil, | ||||
| 	[0xA0F068C1] = nil, | ||||
| 	[0xA0F068C3] = nil, | ||||
| 	[0xA0F068C5] = nil, | ||||
| 	[0xA0F0695C] = nil, | ||||
| 	[0xA0F0695D] = nil, | ||||
| 	[0xA0F0695E] = nil, | ||||
| 	[0xA0F06960] = nil, | ||||
| 	[0xA0F06961] = nil, | ||||
| 	[0xA0F06963] = nil, | ||||
| 	[0xA0F06964] = nil, | ||||
| 	[0xA0F06966] = nil, | ||||
| 	[0xA0F06967] = nil, | ||||
| 	[0xA0F06968] = nil, | ||||
| 	[0xA0F0696A] = nil, | ||||
| 	[0xA0F0696B] = nil, | ||||
| 	[0xA0F0696D] = nil, | ||||
| 	[0xA0F0696E] = nil, | ||||
| 	[0xA0F06970] = nil, | ||||
| 	[0xA0F06971] = nil, | ||||
| 	[0xA0F06973] = nil, | ||||
| 	[0xA0F06974] = nil, | ||||
| 	[0xA0F06976] = nil, | ||||
| 	[0xA0F06978] = nil, | ||||
| 	[0xA0F06B78] = nil, | ||||
| 	[0xA0F06B79] = nil, | ||||
| 	[0xA0F06B7B] = nil, | ||||
| 	[0xA0F06B7C] = nil, | ||||
| 	[0xA0F06B7E] = nil, | ||||
| 	[0xA0F06B7F] = nil, | ||||
| 	[0xA0F06B81] = nil, | ||||
| 	[0xA0F06B82] = nil, | ||||
| 	[0xA0F06B84] = nil, | ||||
| 	[0xA0F06B85] = nil, | ||||
| 	[0xA0F06B8A] = nil, | ||||
| 	[0xA0F06B8C] = nil, | ||||
| 	[0xA0F06B8E] = nil, | ||||
| 	[0xA0F06B90] = nil, | ||||
| 	[0xA0F06B91] = nil, | ||||
| 	[0xA0F06B93] = nil, | ||||
| 	[0xA0F06B95] = nil, | ||||
| 	[0xA0F06B97] = nil, | ||||
| 	[0xA0F06C2C] = nil, | ||||
| 	[0xA0F06C2D] = nil, | ||||
| 	[0xA0F06C2F] = nil, | ||||
| 	[0xA0F06C31] = nil, | ||||
| 	[0xA0F06C32] = nil, | ||||
| 	[0xA0F06C34] = nil, | ||||
| 	[0xA0F06C35] = nil, | ||||
| 	[0xA0F06C36] = nil, | ||||
| 	[0xA0F06C38] = nil, | ||||
| 	[0xA0F06C39] = nil, | ||||
| 	[0xA0F06C3B] = nil, | ||||
| 	[0xA0F06C3C] = nil, | ||||
| 	[0xA0F06C3E] = nil, | ||||
| 	[0xA0F06C3F] = nil, | ||||
| 	[0xA0F06C41] = nil, | ||||
| 	[0xA0F06C43] = nil, | ||||
| 	[0xA0F06C45] = nil, | ||||
| 	[0xA0F06C47] = nil, | ||||
| 	[0xA0F06C49] = nil, | ||||
| 	[0xA0F06C4B] = nil, | ||||
| 	[0xA0F06D94] = nil, | ||||
| 	[0xA0F06D95] = nil, | ||||
| 	[0xA0F06D96] = nil, | ||||
| 	[0xA0F06F92] = nil, | ||||
| 	[0xA0F06F93] = nil, | ||||
| 	[0xA0F06F95] = nil, | ||||
| 	[0xA0F06F96] = nil, | ||||
| 	[0xA0F070E6] = nil, | ||||
| 	[0xA0F070E7] = nil, | ||||
| 	[0xA0F070E9] = nil, | ||||
| 	[0xA0F070EA] = nil | ||||
| } | ||||
|  | ||||
| function onEventStarted(player, command, triggerName)			 | ||||
| 	 | ||||
| 	--Are they in active mode? | ||||
| 	if (player:GetState() != 2) then | ||||
| 		player:SendGameMessage(GetWorldMaster(), 32503, 0x20); | ||||
| 		player:endEvent(); | ||||
| 		return; | ||||
| 	end | ||||
| 	 | ||||
| 	if (weaponskillHandlers[command.actorId] ~= nil) then | ||||
| 		weaponskillHandlers[command.actorId](player); | ||||
| 	else | ||||
| 		player:SendMessage(0x20, "", "That weaponskill is not implemented yet."); | ||||
| 	end	 | ||||
| 	 | ||||
| 	player:endEvent();	 | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										18
									
								
								Data/scripts/commands/ConfirmGroupCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Data/scripts/commands/ConfirmGroupCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| --[[ | ||||
|  | ||||
| ConfirmGroupCommand Script | ||||
|  | ||||
| Handles what happens when you resolve an invite to a group | ||||
|  | ||||
| --]] | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName, groupType, result) | ||||
|  | ||||
| 	--Accept/Refuse happened, else just close the window | ||||
| 	if (result == 1 or result == 2) then | ||||
| 		GetWorldManager():GroupInviteResult(player, groupType, result);		 | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										20
									
								
								Data/scripts/commands/ConfirmTradeCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								Data/scripts/commands/ConfirmTradeCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| --[[ | ||||
|  | ||||
| ConfirmTradeCommand Script | ||||
|  | ||||
| Handles what happens when you accept/refuse a trade | ||||
|  | ||||
| --]] | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName, groupType, result) | ||||
|  | ||||
| 	--Accept | ||||
| 	if (result == 1) then | ||||
| 		GetWorldManager():AcceptTrade(player); | ||||
| 	--Refuse | ||||
| 	elseif (result == 2) then | ||||
| 		GetWorldManager():RefuseTrade(player); | ||||
| 	end | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										5
									
								
								Data/scripts/commands/CureMagic.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Data/scripts/commands/CureMagic.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8) | ||||
| 	player.Cast(command.actorId, targetActor); | ||||
|      | ||||
| 	player:endEvent(); | ||||
| end | ||||
							
								
								
									
										5
									
								
								Data/scripts/commands/CuregaMagic.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Data/scripts/commands/CuregaMagic.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8) | ||||
| 	player.Cast(command.actorId, targetActor); | ||||
|      | ||||
| 	player:endEvent(); | ||||
| end | ||||
							
								
								
									
										26
									
								
								Data/scripts/commands/DevideAttackWeaponSkill.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								Data/scripts/commands/DevideAttackWeaponSkill.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| require ("global") | ||||
| require ("utils") | ||||
|  | ||||
| --[[ | ||||
|  | ||||
| AttackWeaponSkill Script | ||||
|  | ||||
| Finds the correct weaponskill subscript to fire when a weaponskill actor is activated. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8) | ||||
| 	 | ||||
| 	--Are they in active mode? | ||||
| 	if (player:GetState() != 2) then | ||||
| 		player:SendGameMessage(GetWorldMaster(), 32503, 0x20); | ||||
| 		player:endEvent(); | ||||
| 		return; | ||||
| 	end | ||||
| 	 | ||||
|     if not player.aiContainer.IsEngaged() then | ||||
|         player.Engage(targetActor); | ||||
|     end; | ||||
|     player.WeaponSkill(command.actorId, targetActor); | ||||
| 	player:endEvent(); | ||||
| end; | ||||
							
								
								
									
										23
									
								
								Data/scripts/commands/DiceCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								Data/scripts/commands/DiceCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| --[[ | ||||
|  | ||||
| DiceCommand Script | ||||
|  | ||||
| --]] | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName, maxNumber)	 | ||||
| 	 | ||||
| 	if (maxNumber == nil or maxNumber > 1000 or maxNumber < 1) then | ||||
| 		maxNumber = 100; | ||||
| 	end | ||||
| 		 | ||||
| 	result = math.random(0, maxNumber); | ||||
| 	 | ||||
| 	worldMaster = GetWorldMaster(); | ||||
| 	player:SendGameMessage(player, worldMaster, 25342, 0x20, result, maxNumber); | ||||
| 				 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
|  | ||||
| function onEventUpdate(player, npc) | ||||
| end | ||||
							
								
								
									
										56
									
								
								Data/scripts/commands/DummyCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								Data/scripts/commands/DummyCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| --[[ | ||||
|  | ||||
| HarvestJudge  | ||||
|  | ||||
| Operates the harvesting system for mining, logging, and fishing. | ||||
|  | ||||
| Functions: | ||||
|  | ||||
| loadTextData(commandActor): Loads all gamesheets needed and instantiates a HarvestJudge. | ||||
| targetCancel(commandActor): Cancels the player's target. | ||||
| turnToTarget(commandActor, harvestType, direction): Turns to a direction (name's a lie, angle must be computed lol) | ||||
| openInputWidget(commandActor, harvestType, nodeGrade): Inits the widget system (call first). | ||||
| orderInputWidget(commandActor, nodeHP [max 100], ?, harvestType): Updates the node HP. | ||||
| textInputWidget(commandActor, harvestType, ?, textId, ?, ?, ?): Sets the result text after a minigame is performed. | ||||
| askInputWidget(commandActor, harvestType, inputPageNumber, showTutorial, showFishWait, showFishWaitAndJig, updateFishHP, showRareCatalystEffect): Gets user input after opening a ask widget. | ||||
| closeInputWidget(commandActor, harvestType): Closes the widget system (call last). | ||||
| rangeInputWidget(harvestType, inputPageNumber, goodMin, goodMax, bool): Unknown, currently crashing... | ||||
|  | ||||
| Notes: | ||||
|  | ||||
| HarvestType Ids: | ||||
|  | ||||
| 20002: Mine | ||||
| 20003: Log | ||||
| 20004: Fish | ||||
|  | ||||
| --]] | ||||
|  | ||||
| require ("global") | ||||
|  | ||||
| function onEventStarted(player, commandactor, triggerName, arg1, arg2, arg3, arg4, checkedActorId) | ||||
|  | ||||
| 	harvestJudge = GetStaticActor("HarvestJudge"); | ||||
| 	callClientFunction(player, "delegateCommand", harvestJudge, "loadTextData", commandactor); | ||||
| 	callClientFunction(player, "delegateCommand", harvestJudge, "targetCancel", commandactor); | ||||
| 	callClientFunction(player, "delegateCommand", harvestJudge, "turnToTarget", commandactor, 0x55F2, 2); | ||||
| 	 | ||||
| 	player:ChangeState(50); | ||||
| 	 | ||||
| 	callClientFunction(player, "delegateCommand", harvestJudge, "openInputWidget", commandactor, 0x55F2, 2); | ||||
| 	callClientFunction(player, "delegateCommand", harvestJudge, "orderInputWidget", commandactor, 3, false, 0x55f2); | ||||
| 	callClientFunction(player, "delegateCommand", harvestJudge, "textInputWidget", commandactor, 0x55f2, harvestJudge, nil, nil, nil, nil, 0); | ||||
| 	callClientFunction(player, "delegateCommand", harvestJudge, "askInputWidget", commandactor, 0x55f2, 1, 0, false, false, nil, false); | ||||
| 	 | ||||
| 	callClientFunction(player, "delegateCommand", harvestJudge, "textInputWidget", commandactor, 0x55f2, harvestJudge, 60, nil, nil, nil, 0); | ||||
| 	callClientFunction(player, "delegateCommand", harvestJudge, "askInputWidget", commandactor, 0x55f2, 2, 0, false, false, nil, false); | ||||
| 	 | ||||
| 	callClientFunction(player, "delegateCommand", harvestJudge, "textInputWidget", commandactor, 0x55f2, harvestJudge, 46,0, 0, 0, 0); | ||||
| 	callClientFunction(player, "delegateCommand", harvestJudge, "askInputWidget", commandactor, 0x55f2, 2, 0, false, false, nil, false); | ||||
| 	 | ||||
| 	 | ||||
| 	player:ChangeState(0); | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										5
									
								
								Data/scripts/commands/EffectMagic.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Data/scripts/commands/EffectMagic.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8) | ||||
| 	player.Cast(command.actorId, targetActor); | ||||
|      | ||||
| 	player:endEvent(); | ||||
| end | ||||
							
								
								
									
										24
									
								
								Data/scripts/commands/EmoteSitCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Data/scripts/commands/EmoteSitCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| --[[ | ||||
|  | ||||
| EmoteSitCommand Script | ||||
|  | ||||
| --]] | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName, emoteId) | ||||
|  | ||||
| 	if (player:GetState() == 0) then						 | ||||
| 		if (emoteId == 0x2712) then | ||||
| 			player:ChangeState(11); | ||||
| 		else | ||||
| 			player:ChangeState(13); | ||||
| 		end | ||||
| 	else | ||||
| 		player:ChangeState(0); | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
|  | ||||
| function onEventUpdate(player, npc) | ||||
| end | ||||
							
								
								
									
										90
									
								
								Data/scripts/commands/EmoteStandardCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								Data/scripts/commands/EmoteStandardCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,90 @@ | ||||
| --[[ | ||||
|  | ||||
| EmoteStandardCommand Script | ||||
|  | ||||
| Returns the correct animation and log description when an emote is activated. | ||||
| If 'motion' parameter is used, it returns the blank description id 10105 | ||||
|  | ||||
| --]] | ||||
|  | ||||
| emoteTable = { | ||||
| 	[101] = {animId = 1, descId = 21001}, --Surprised | ||||
| 	[102] = {animId = 2, descId = 21011}, --Angry | ||||
| 	[103] = {animId = 3, descId = 21021}, --Furious | ||||
| 	[104] = {animId = 4, descId = 21031}, --Blush | ||||
| 	[105] = {animId = 5, descId = 21041}, --Bow | ||||
| 	[106] = {animId = 6, descId = 21051}, --Cheer | ||||
| 	[107] = {animId = 7, descId = 21061}, --Clap | ||||
| 	[108] = {animId = 8, descId = 21071}, --Beckon | ||||
| 	[109] = {animId = 9, descId = 21081}, --Comfort | ||||
| 	[110] = {animId = 10, descId = 21091}, --Cry | ||||
| 	[111] = {animId = 11, descId = 21101}, --Dance | ||||
| 	[112] = {animId = 12, descId = 21111}, --Doubt | ||||
| 	[113] = {animId = 13, descId = 21121}, --Doze | ||||
| 	[114] = {animId = 14, descId = 21131}, --Fume | ||||
| 	[115] = {animId = 15, descId = 21141}, --Goodbye | ||||
| 	[116] = {animId = 16, descId = 21151}, --Wave | ||||
| 	[117] = {animId = 17, descId = 21161}, --Huh | ||||
| 	[118] = {animId = 18, descId = 21171}, --Joy | ||||
| 	[119] = {animId = 19, descId = 21181}, --Kneel | ||||
| 	[120] = {animId = 20, descId = 21191}, --Chuckle | ||||
| 	[121] = {animId = 21, descId = 21201}, --Laugh | ||||
| 	[122] = {animId = 22, descId = 21211}, --Lookout | ||||
| 	[123] = {animId = 23, descId = 21221}, --Me  | ||||
| 	[124] = {animId = 24, descId = 21231}, --No | ||||
| 	[125] = {animId = 25, descId = 21241}, --Deny | ||||
| 	[126] = {animId = 26, descId = 21251}, --Panic | ||||
| 	[127] = {animId = 27, descId = 21261}, --Point | ||||
| 	[128] = {animId = 28, descId = 21271}, --Poke | ||||
| 	[129] = {animId = 29, descId = 21281}, --Congratulate | ||||
| 	[130] = {animId = 30, descId = 21291}, --Psych | ||||
| 	[131] = {animId = 31, descId = 21301}, --Salute | ||||
| 	[132] = {animId = 32, descId = 21311}, --Shocked | ||||
| 	[133] = {animId = 33, descId = 21321}, --Shrug | ||||
| 	[134] = {animId = 34, descId = 21331}, --Rally | ||||
| 	[135] = {animId = 35, descId = 21341}, --Soothe | ||||
| 	[136] = {animId = 36, descId = 21351}, --Stagger | ||||
| 	[137] = {animId = 37, descId = 21361}, --Stretch | ||||
| 	[138] = {animId = 38, descId = 21371}, --Sulk | ||||
| 	[139] = {animId = 39, descId = 21381}, --Think | ||||
| 	[140] = {animId = 40, descId = 21391}, --Upset | ||||
| 	[141] = {animId = 41, descId = 21401}, --Welcome | ||||
| 	[142] = {animId = 42, descId = 21411}, --Yes | ||||
| 	[143] = {animId = 43, descId = 21421}, --Thumbs Up | ||||
| 	[144] = {animId = 44, descId = 21423}, --Examine Self | ||||
| 	[145] = {animId = 53, descId = 21425}, --Pose | ||||
| 	[146] = {animId = 50, descId = 21427}, --Storm Salute | ||||
| 	[147] = {animId = 51, descId = 21429}, --Serpent Salute | ||||
| 	[148] = {animId = 52, descId = 21431}, --Flame Salute | ||||
| 	[149] = {animId = 45, descId = 21433}, --Blow Kiss | ||||
| 	[151] = {animId = 47, descId = 21435}, --Grovel | ||||
| 	[152] = {animId = 48, descId = 21437}, --Happy | ||||
| 	[153] = {animId = 49, descId = 21439}, --Disappointed | ||||
| 	[154] = {animId = 46, descId = 10105}, --Air Quotes | ||||
| 	[155] = {animId = 54, descId = 21442}, --Pray | ||||
| 	[156] = {animId = 55, descId = 21445}, --Fire Dance | ||||
| }; | ||||
|  | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName, emoteId, showText, arg2, arg3, targetId) | ||||
|  | ||||
| 	if (targetId == nil) then | ||||
| 		targetId = 0; | ||||
| 	end | ||||
|      | ||||
| 	if (player:GetState() == 0 or player:GetState() == 11 or player:GetState() == 13) then	 | ||||
| 		emote = emoteTable[emoteId];		 | ||||
| 		if (emote ~= nil) then | ||||
|             if showText == 1 then | ||||
|                 player:doEmote(targetId, emote.animId, emote.descId); | ||||
|             else | ||||
|                 player:doEmote(targetId, emote.animId, 10105); | ||||
|             end | ||||
| 		else | ||||
| 			player:SendMessage(0x20, "", string.format("Not implemented; EmoteId: %d", emoteId)); | ||||
| 		end | ||||
| 	end | ||||
|      | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										85
									
								
								Data/scripts/commands/EquipAbilityCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								Data/scripts/commands/EquipAbilityCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| require ("global") | ||||
| --player: Player that called this command | ||||
| --equipAbilityWidget: Widget that calls this command | ||||
| --triggername: Event Starter ? | ||||
| --slot: Which slot the ability will go into | ||||
| --commandid: command being equipped | ||||
|  | ||||
|  | ||||
| function onEventStarted(player, equipAbilityWidget, triggername, slot, commandid, unkown, arg1, arg2, arg3, arg4, arg5, arg6) | ||||
|     local worldManager = GetWorldManager(); | ||||
|     local ability = worldManager:GetBattleCommand(commandid); | ||||
|      | ||||
|          | ||||
|     --Equip | ||||
|     if (commandid > 0) then | ||||
|         --[[]] | ||||
|         --Can the player equip any more cross class actions | ||||
|         if (player.charaWork.parameterTemp.otherClassAbilityCount[0] >= player.charaWork.parameterTemp.otherClassAbilityCount[1]) then | ||||
|             --"You cannot set any more actions." | ||||
|             player:SendGameMessage(GetWorldMaster(), 30720, 0x20, 0, 0);	     | ||||
|             player:endEvent(); | ||||
|             return; | ||||
|         end | ||||
|              | ||||
|         --Is the player high enough level in that class to equip the ability | ||||
|         if (player.charaWork.battleSave.skillLevel[ability.job - 1] < ability.level) then | ||||
|             --"You have not yet acquired that action." | ||||
|             player:SendGameMessage(GetWorldMaster(), 30742, 0x20, 0, 0); | ||||
|             player:endEvent(); | ||||
|             return; | ||||
|         end | ||||
|  | ||||
|          | ||||
|         local oldSlot = player:FindFirstCommandSlotById(commandid); | ||||
|         local isEquipped = oldSlot < player.charaWork.commandBorder + 30; | ||||
|         --If slot is 0, find the first open slot | ||||
|         if (slot == 0) then | ||||
|             --If the ability is already equipped and slot is 0, then it can't be equipped again | ||||
|             --If the slot isn't 0, it's a move or a swap command | ||||
|             if (isEquipped == true) then | ||||
|                 --"That action is already set to an action slot." | ||||
|                 player:SendGameMessage(GetWorldMaster(), 30719, 0x20, 0); | ||||
|                 player:endEvent(); | ||||
|                 return; | ||||
|             end | ||||
|  | ||||
|             slot = player:FindFirstCommandSlotById(0) - player.charaWork.commandBorder; | ||||
|  | ||||
|             --If the first open slot is outside the hotbar, then the hotbar is full | ||||
|             if(slot >= 30) then | ||||
|                 --"You cannot set any more actions." | ||||
|                 player:SendGameMessage(Server.GetWorldManager().GetActor(), 30720, 0x20, 0); | ||||
|                 player:endEvent(); | ||||
|                 return; | ||||
|             end | ||||
|         else | ||||
|             slot = slot - 1; | ||||
|         end | ||||
|  | ||||
|         if(isEquipped == true) then | ||||
|             player:SwapAbilities(oldSlot, slot + player.charaWork.commandBorder); | ||||
|         else | ||||
|             local tslot = slot + player.charaWork.commandBorder; | ||||
|             player:EquipAbility(player.GetCurrentClassOrJob(), commandid, tslot, true); | ||||
|         end | ||||
|  | ||||
|     --Unequip | ||||
|     elseif (commandid == 0) then | ||||
|         commandid = player.charaWork.command[slot + player.charaWork.commandBorder - 1]; | ||||
|         ability = worldManager.GetBattleCommand(commandid); | ||||
|         --Is the ability a part of the player's current class? | ||||
|         --This check isn't correct because of jobs having different ids | ||||
|         local classId = player:GetCurrentClassOrJob(); | ||||
|         local jobId = player:ConvertClassIdToJobId(classId); | ||||
|  | ||||
|         if(ability.job == classId or ability.job == jobId) then | ||||
|             --"Actions of your current class or job cannot be removed." | ||||
|             player:SendGameMessage(GetWorldMaster(), 30745, 0x20, 0, 0); | ||||
|         elseif (commandid != 0) then | ||||
|             player:UnequipAbility(slot); | ||||
|         end | ||||
|     end | ||||
|  | ||||
| 	player:endEvent();	 | ||||
| end | ||||
							
								
								
									
										220
									
								
								Data/scripts/commands/EquipCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										220
									
								
								Data/scripts/commands/EquipCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,220 @@ | ||||
| --[[ | ||||
|  | ||||
| EquipCommand Script | ||||
|  | ||||
| Notes:  | ||||
|  | ||||
| Gearset activating could be optimized a bit more by doing the item packets in one go. | ||||
|  | ||||
| The param "equippedItem" has the vars: actorId, unknown, slot, and inventoryType.  | ||||
| The param "itemDBIds" has the vars: item1 and item2.  | ||||
|  | ||||
| --]] | ||||
|  | ||||
| EQUIPSLOT_MAINHAND 			= 0; | ||||
| EQUIPSLOT_OFFHAND 			= 1; | ||||
| EQUIPSLOT_THROWINGWEAPON 	= 4; | ||||
| EQUIPSLOT_PACK 				= 5; | ||||
| EQUIPSLOT_POUCH	 			= 6; | ||||
| EQUIPSLOT_HEAD 				= 8; | ||||
| EQUIPSLOT_UNDERSHIRT		= 9; | ||||
| EQUIPSLOT_BODY				= 10; | ||||
| EQUIPSLOT_UNDERGARMENT		= 11; | ||||
| EQUIPSLOT_LEGS 				= 12; | ||||
| EQUIPSLOT_HANDS 			= 13; | ||||
| EQUIPSLOT_FEET 				= 14; | ||||
| EQUIPSLOT_WAIST 			= 15; | ||||
| EQUIPSLOT_NECK 				= 16; | ||||
| EQUIPSLOT_EARS 				= 17; | ||||
| EQUIPSLOT_WRIST 			= 19; | ||||
| EQUIPSLOT_RFINGER 			= 21; | ||||
| EQUIPSLOT_LFINGER 			= 22; | ||||
|  | ||||
| GRAPHICSLOT_MAINHAND 		= 5; | ||||
| GRAPHICSLOT_OFFHAND 		= 6; | ||||
| GRAPHICSLOT_SPMAINHAND 		= 7; | ||||
| GRAPHICSLOT_SPOFFHAND 		= 8; | ||||
| GRAPHICSLOT_THROWING 		= 9; | ||||
| GRAPHICSLOT_PACK			= 10; | ||||
| GRAPHICSLOT_POUCH			= 11; | ||||
| GRAPHICSLOT_HEAD 			= 12; | ||||
| GRAPHICSLOT_BODY			= 13; | ||||
| GRAPHICSLOT_LEGS 			= 14; | ||||
| GRAPHICSLOT_HANDS 			= 15; | ||||
| GRAPHICSLOT_FEET 			= 16; | ||||
| GRAPHICSLOT_WAIST 			= 17; | ||||
| GRAPHICSLOT_NECK 			= 18; | ||||
| GRAPHICSLOT_R_EAR 			= 19; | ||||
| GRAPHICSLOT_L_EAR 			= 20; | ||||
| GRAPHICSLOT_R_WRIST			= 21; | ||||
| GRAPHICSLOT_L_WRIST			= 22; | ||||
| GRAPHICSLOT_R_RINGFINGER 	= 23; | ||||
| GRAPHICSLOT_L_RINGFINGER	= 24; | ||||
| GRAPHICSLOT_R_INDEXFINGER 	= 25; | ||||
| GRAPHICSLOT_L_INDEXFINGER 	= 26; | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName, equippedItem, param1, param2, param3, param4, param5, param6, param7, equipSlot, itemDBIds) | ||||
| 	equipSlot = equipSlot-1; | ||||
| 	 | ||||
| 	--Equip Item | ||||
| 	if (equippedItem ~= nil) then		 | ||||
| 		item = player:GetItemPackage(equippedItem.itemPackage):GetItemAtSlot(equippedItem.slot);		 | ||||
| 		equipItem(player, equipSlot, item);			 | ||||
| 		player:SendAppearance(); | ||||
| 	--Unequip Item | ||||
| 	else	 | ||||
| 		item = player:GetEquipment():GetItemAtSlot(equipSlot); | ||||
| 		if (unequipItem(player, equipSlot, item) == true) then --Returns true only if something changed (didn't error out) | ||||
| 			player:SendAppearance(); | ||||
| 		end | ||||
| 	end | ||||
| 	 | ||||
| 	player.CalculateBaseStats(); --player.RecalculateStats(); | ||||
| 	 | ||||
| 	player:EndEvent();	 | ||||
| end | ||||
|  | ||||
| function loadGearset(player, classId)	 | ||||
| 	player:GetEquipment():ToggleDBWrite(false); | ||||
| 	local gearset = player:GetGearset(classId); | ||||
| 	 | ||||
| 	if gearset == nil then | ||||
| 		return; | ||||
| 	end | ||||
| 	 | ||||
| 	for slot = 0, 34 do | ||||
| 	 | ||||
| 		if (slot ~= EQUIPSLOT_MAINHAND and slot ~= EQUIPSLOT_UNDERSHIRT and slot ~= EQUIPSLOT_UNDERGARMENT) then | ||||
| 			itemAtSlot = player:GetEquipment():GetItemAtSlot(slot); | ||||
| 			itemAtGearsetSlot = gearset[slot]; | ||||
| 			 | ||||
| 			if (itemAtSlot ~= nil or itemAtGearsetSlot ~= nil) then		 | ||||
| 				if	   (itemAtSlot ~= nil and itemAtGearsetSlot == nil) then | ||||
| 					unequipItem(player, slot, itemAtSlot); | ||||
| 				elseif (itemAtSlot == nil and itemAtGearsetSlot ~= nil) then | ||||
| 					equipItem(player, slot, itemAtGearsetSlot); | ||||
| 				elseif (itemAtGearsetSlot.uniqueId ~= itemAtSlot.uniqueId) then | ||||
| 					unequipItem(player, slot, itemAtSlot); | ||||
| 					equipItem(player, slot, itemAtGearsetSlot) | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
| 		 | ||||
| 	end	 | ||||
| 	player:GetEquipment():ToggleDBWrite(true);	 | ||||
| end | ||||
|  | ||||
| function equipItem(player, equipSlot, item) | ||||
| 	if (item ~= nil) then	 | ||||
| 		local classId = nil; | ||||
| 		local worldMaster = GetWorldMaster(); | ||||
| 		local gItem = GetItemGamedata(item.itemId); | ||||
| 		 | ||||
| 		--If it's the mainhand, begin class change based on weapon | ||||
| 		if (equipSlot == EQUIPSLOT_MAINHAND) then | ||||
| 			if 	   (gItem:IsNailWeapon()) then classId = 2; | ||||
| 			elseif (gItem:IsSwordWeapon()) then classId = 3; | ||||
| 			elseif (gItem:IsAxeWeapon()) then classId = 4; | ||||
| 			elseif (gItem:IsBowWeapon()) then classId = 7; | ||||
| 			elseif (gItem:IsLanceWeapon()) then classId = 8; | ||||
| 			 | ||||
| 			elseif (gItem:IsThaumaturgeWeapon()) then classId = 22; | ||||
| 			elseif (gItem:IsConjurerWeapon()) then classId = 23; | ||||
| 			 | ||||
| 			elseif (gItem:IsCarpenterWeapon()) then classId = 29; | ||||
| 			elseif (gItem:IsBlackSmithWeapon()) then classId = 30; | ||||
| 			elseif (gItem:IsArmorerWeapon()) then classId = 31; | ||||
| 			elseif (gItem:IsGoldSmithWeapon()) then classId = 32; | ||||
| 			elseif (gItem:IsTannerWeapon()) then classId = 33; | ||||
| 			elseif (gItem:IsWeaverWeapon()) then classId = 34; | ||||
| 			elseif (gItem:IsAlchemistWeapon()) then classId = 35; | ||||
| 			elseif (gItem:IsCulinarianWeapon()) then classId = 36; | ||||
| 			 | ||||
| 			elseif (gItem:IsMinerWeapon()) then classId = 39; | ||||
| 			elseif (gItem:IsBotanistWeapon()) then classId = 40; | ||||
| 			elseif (gItem:IsFishingWeapon()) then classId = 41; | ||||
| 			end	 | ||||
| 			 | ||||
| 			if (classId ~= nil) then | ||||
| 				player:SendGameMessage(player, worldMaster, 30103, 0x20, 0, 0, player, classId);  | ||||
| 				player:PrepareClassChange(classId); | ||||
| 			end | ||||
| 				 | ||||
| 		end		 | ||||
| 		 | ||||
| 		--Item Equipped message | ||||
| 		player:SendGameMessage(player, worldMaster, 30601, 0x20, equipSlot+1, item.itemId, item.quality, 0, 0, 1);  | ||||
| 		 | ||||
| 		--Load gearset for new class and begin class change | ||||
| 		if (classId ~= nil) then			 | ||||
| 			loadGearset(player, classId); | ||||
| 			player:DoClassChange(classId); | ||||
| 		end | ||||
|  | ||||
| 		player:GetEquipment():Set(equipSlot, item);		 | ||||
| 		 | ||||
| 		if 	   (equipSlot == EQUIPSLOT_MAINHAND and gItem:IsNailWeapon() == false) then graphicSlot = GRAPHICSLOT_MAINHAND; | ||||
| 		elseif (equipSlot == EQUIPSLOT_OFFHAND) then graphicSlot = GRAPHICSLOT_OFFHAND; | ||||
| 		elseif (equipSlot == EQUIPSLOT_THROWINGWEAPON) then graphicSlot = GRAPHICSLOT_THROWING; | ||||
| 		elseif (equipSlot == EQUIPSLOT_PACK) then graphicSlot = GRAPHICSLOT_PACK; | ||||
| 		elseif (equipSlot == EQUIPSLOT_HEAD) then graphicSlot = GRAPHICSLOT_HEAD; | ||||
| 		elseif (equipSlot == EQUIPSLOT_BODY) then graphicSlot = GRAPHICSLOT_BODY; | ||||
| 		elseif (equipSlot == EQUIPSLOT_LEGS) then graphicSlot = GRAPHICSLOT_LEGS; | ||||
| 		elseif (equipSlot == EQUIPSLOT_HANDS) then graphicSlot = GRAPHICSLOT_HANDS; | ||||
| 		elseif (equipSlot == EQUIPSLOT_FEET) then graphicSlot = GRAPHICSLOT_FEET; | ||||
| 		elseif (equipSlot == EQUIPSLOT_WAIST) then graphicSlot = GRAPHICSLOT_WAIST; | ||||
| 		elseif (equipSlot == EQUIPSLOT_NECK) then graphicSlot = GRAPHICSLOT_NECK;	 | ||||
| 		elseif (equipSlot == EQUIPSLOT_RFINGER) then graphicSlot = GRAPHICSLOT_R_RINGFINGER; | ||||
| 		elseif (equipSlot == EQUIPSLOT_LFINGER) then graphicSlot = GRAPHICSLOT_L_RINGFINGER; | ||||
| 		end | ||||
| 				 | ||||
| 		--Graphic Slot was set, otherwise it's a special case | ||||
| 		if (graphicSlot ~= nil) then | ||||
| 			player:GraphicChange(graphicSlot, item); | ||||
| 		elseif (gItem:IsNailWeapon()) then | ||||
| 			player:GraphicChange(GRAPHICSLOT_MAINHAND, item); | ||||
| 			player:GraphicChange(GRAPHICSLOT_OFFHAND, item);		 | ||||
| 		elseif (equipSlot == EQUIPSLOT_EARS) then | ||||
| 			player:GraphicChange(GRAPHICSLOT_R_EAR, item); | ||||
| 			player:GraphicChange(GRAPHICSLOT_L_EAR, item); | ||||
| 		elseif (equipSlot == EQUIPSLOT_WRIST) then | ||||
| 			player:GraphicChange(GRAPHICSLOT_R_WRIST, item); | ||||
| 			player:GraphicChange(GRAPHICSLOT_L_WRIST, item); | ||||
| 		end		 | ||||
| 	end | ||||
| end | ||||
|  | ||||
| function unequipItem(player, equipSlot, item) | ||||
| 	worldMaster = GetWorldMaster(); | ||||
|  | ||||
| 	if (item ~= nil and (equipSlot == EQUIPSLOT_MAINHAND or equipSlot == EQUIPSLOT_UNDERSHIRT or equipSlot == EQUIPSLOT_UNDERGARMENT)) then | ||||
| 		player:SendGameMessage(player, worldMaster, 30730, 0x20, equipSlot+1, item.itemId, item.quality, 0, 0, 1); --Unable to unequip | ||||
| 	elseif (item ~= nil) then | ||||
| 		player:SendGameMessage(player, worldMaster, 30602, 0x20, equipSlot+1, item.itemId, item.quality, 0, 0, 1); --Item Removed | ||||
| 		player:GetEquipment():Clear(equipSlot); | ||||
| 				 | ||||
| 		if (equipSlot == EQUIPSLOT_BODY) then --Show Undershirt | ||||
| 			item = player:GetEquipment():GetItemAtSlot(EQUIPSLOT_UNDERSHIRT); | ||||
| 			player:GraphicChange(GRAPHICSLOT_BODY, item); | ||||
| 		elseif (equipSlot == EQUIPSLOT_LEGS) then --Show Undergarment | ||||
| 			item = player:GetEquipment():GetItemAtSlot(EQUIPSLOT_UNDERGARMENT); | ||||
| 			player:GraphicChange(GRAPHICSLOT_LEGS, item);			 | ||||
| 		elseif  (equipSlot == EQUIPSLOT_HANDS) then player:GraphicChange(15, 0, 1, 0, 0); | ||||
| 		elseif  (equipSlot == EQUIPSLOT_FEET) then player:GraphicChange(16, 0, 1, 0, 0); | ||||
| 		else | ||||
| 			if 	   (equipSlot == EQUIPSLOT_MAINHAND) then player:GraphicChange(GRAPHICSLOT_MAINHAND, nil); | ||||
| 			elseif (equipSlot == EQUIPSLOT_OFFHAND) then player:GraphicChange(GRAPHICSLOT_OFFHAND, nil); | ||||
| 			elseif (equipSlot == EQUIPSLOT_THROWINGWEAPON) then player:GraphicChange(GRAPHICSLOT_THROWING, nil); | ||||
| 			elseif (equipSlot == EQUIPSLOT_PACK) then player:GraphicChange(GRAPHICSLOT_PACK, nil); | ||||
| 			elseif (equipSlot == EQUIPSLOT_HEAD) then player:GraphicChange(GRAPHICSLOT_HEAD, nil); | ||||
| 			elseif (equipSlot == EQUIPSLOT_WAIST) then player:GraphicChange(GRAPHICSLOT_WAIST, nil); | ||||
| 			elseif (equipSlot == EQUIPSLOT_NECK) then  player:GraphicChange(GRAPHICSLOT_NECK, nil); | ||||
| 			elseif (equipSlot == EQUIPSLOT_EARS) then player:GraphicChange(GRAPHICSLOT_L_EAR, nil); player:GraphicChange(GRAPHICSLOT_R_EAR, nil); | ||||
| 			elseif (equipSlot == EQUIPSLOT_WRIST) then player:GraphicChange(GRAPHICSLOT_L_WRIST, nil); player:GraphicChange(GRAPHICSLOT_R_WRIST, nil); | ||||
| 			elseif (equipSlot == EQUIPSLOT_RFINGER) then player:GraphicChange(GRAPHICSLOT_R_RINGFINGER, nil); | ||||
| 			elseif (equipSlot == EQUIPSLOT_LFINGER) then player:GraphicChange(GRAPHICSLOT_L_RINGFINGER, nil); | ||||
| 			end | ||||
| 		end	 | ||||
| 		return true; | ||||
| 	end | ||||
| end | ||||
							
								
								
									
										5
									
								
								Data/scripts/commands/EsunaMagic.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Data/scripts/commands/EsunaMagic.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8) | ||||
| 	player.Cast(command.actorId, targetActor); | ||||
|      | ||||
| 	player:endEvent(); | ||||
| end | ||||
							
								
								
									
										13
									
								
								Data/scripts/commands/ItemMovePackageCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								Data/scripts/commands/ItemMovePackageCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| --[[ | ||||
|  | ||||
| ItemMovePackageCommand Script | ||||
|  | ||||
| Handles moving items across item packages (IE: Taking loot) | ||||
|  | ||||
| --]] | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName, itemReference, targetPackage, sourcePackage, arg1, arg2, unknown, arg3, arg4, arg5, type9ItemIds) | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
							
								
								
									
										13
									
								
								Data/scripts/commands/ItemTransferCommand.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								Data/scripts/commands/ItemTransferCommand.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| --[[ | ||||
|  | ||||
| ItemTransferCommand Script | ||||
|  | ||||
| Handles giving an item to another party member. | ||||
|  | ||||
| --]] | ||||
|  | ||||
| function onEventStarted(player, actor, triggerName, itemReference, targetPackage, sourcePackage, arg1, targetPlayer, arg2, arg3, arg4, arg5, type9ItemIds) | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	 | ||||
| end | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user