mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			155 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| --[[
 | |
| 
 | |
| 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
 |