mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	Merge branch 'ioncannon/quest_system' of https://bitbucket.org/Ioncannon/project-meteor-server into Jorge/quest_system
This commit is contained in:
		| @@ -18,6 +18,7 @@ function onTrigger(player, argc, command, var1, var2, var3) | ||||
|     local sender = "[quest] "; | ||||
|     local message = "Error"; | ||||
|      | ||||
| 			print(tostring(argc)); | ||||
|     if player then | ||||
|         if argc == 2 then | ||||
|             if command == "add" or command == "give" or command == "+" then | ||||
| @@ -57,19 +58,45 @@ function onTrigger(player, argc, command, var1, var2, var3) | ||||
|                     else | ||||
|                         message = ("remove error: either incorrect ID or quest "..var1.." isn't active on character"); | ||||
|                     end | ||||
|                 end | ||||
| 			elseif command == "info" then | ||||
| 				if tonumber(var1) then	 | ||||
|                     if player:HasQuest(tonumber(var1)) then | ||||
|                         quest = player:GetQuest(tonumber(var1));										 | ||||
|  | ||||
| 						local flagStr = ""; | ||||
| 						for i=0,31,1 do  | ||||
| 							if (quest:GetFlag(i)) then | ||||
| 								flagStr = flagStr .. "O"; | ||||
| 							else | ||||
| 								flagStr = flagStr .. "X"; | ||||
| 							end | ||||
| 							if (i == 15) then | ||||
| 								flagStr = flagStr .. "\n"; | ||||
| 							end | ||||
| 						end | ||||
| 						 | ||||
| 						message = string.format("\nInfo for quest %s [%d]\n", quest.Name, quest:GetQuestId()); | ||||
| 						message = message .. string.format("Current Sequence: %d\n", quest:getSequence()); | ||||
| 						message = message .. string.format("Flags: \n%s\n", flagStr) | ||||
| 						message = message .. string.format("Counters: %d,%d,%d,%d", quest:getCounter(1), quest:getCounter(2), quest:getCounter(3), quest:getCounter(4)); | ||||
|                     else | ||||
|                         message = ("Quest not active: "..var1); | ||||
|                     end | ||||
|                 else					 | ||||
|                     message = ("error: invalid parameters used"); | ||||
|                 end | ||||
|             else | ||||
|                 message = ("error: command "..command.." not recognized"); | ||||
|             end | ||||
|                  | ||||
|             end                 | ||||
|         elseif argc == 3 then | ||||
|             if command == "phase" or command == "step" then | ||||
|             if command == "seq" or command == "sequence" then | ||||
|                 if (tonumber(var1) and tonumber(var2)) ~= nil then | ||||
|                     if player:HasQuest(tonumber(var1)) == true then | ||||
|                         player:GetQuest(tonumber(var1)):NextPhase(tonumber(var2)); | ||||
|                         message = ("changing phase of quest "..var1.." to "..var2); | ||||
|                         player:GetQuest(tonumber(var1)):StartSequence(tonumber(var2)); | ||||
|                         message = ("changing sequence of quest "..var1.." to "..var2); | ||||
|                     else | ||||
|                         message = ("phase error: either incorrect ID or quest "..var1.." isn't active on character"); | ||||
|                         message = ("sequence error: either incorrect ID or quest "..var1.." isn't active on character"); | ||||
|                     end | ||||
|                 else | ||||
|                     message = ("error: invalid parameters used"); | ||||
| @@ -85,13 +112,13 @@ function onTrigger(player, argc, command, var1, var2, var3) | ||||
|                     flagvar = (tonumber(var2)); | ||||
|                     boolvar = 0;               | ||||
|                      | ||||
|                     if var3 == "true" or var3 == "1" or var3 == "on" then | ||||
|                     if var3 == "true" or var3 == "1" or var3 == "on" or var3 == "O" then | ||||
|                         boolvar = true;                        | ||||
|                     elseif var3 == "false" or var3 == "0" or var3 == "off" then | ||||
|                     elseif var3 == "false" or var3 == "0" or var3 == "off" or var3 == "X" then | ||||
|                         boolvar = false; | ||||
|                     elseif var3 == "flip" or var3 == "toggle" then | ||||
|                         if player:HasQuest(questvar) == true then | ||||
|                             boolvar = not player:GetQuest(questvar):GetQuestFlag(flagvar); | ||||
|                             boolvar = not player:GetQuest(questvar):GetFlag(flagvar); | ||||
|                         end | ||||
|                     else | ||||
|                         message = ("error: flag: boolean not recognized"); | ||||
| @@ -99,10 +126,15 @@ function onTrigger(player, argc, command, var1, var2, var3) | ||||
|                         return; | ||||
|                     end | ||||
|                      | ||||
|                     var4 =  player:GetQuest(questvar):GetQuestFlag(flagvar); | ||||
|                     var4 =  player:GetQuest(questvar):GetFlag(flagvar); | ||||
|                      | ||||
|                     if var4 ~= boolvar then | ||||
|                         player:GetQuest(questvar):SetQuestFlag(flagvar, boolvar); | ||||
| 						if (boolvar == true) then | ||||
| 							player:GetQuest(questvar):SetFlag(flagvar); | ||||
| 						else | ||||
| 							player:GetQuest(questvar):ClearFlag(flagvar); | ||||
| 						end | ||||
|                         player:GetQuest(questvar):UpdateENPCs(); | ||||
|                         player:GetQuest(questvar):SaveData();	 | ||||
|                         if boolvar == true then | ||||
|                             message = ("changing flag "..tonumber(var2).." to true on quest "..questvar); | ||||
| @@ -114,6 +146,18 @@ function onTrigger(player, argc, command, var1, var2, var3) | ||||
|                     end     | ||||
|                 else | ||||
|                     message = ("error: command "..command.." not recognized"); | ||||
|                 end | ||||
| 			elseif command == "counter" then | ||||
|                 if tonumber(var1) and (tonumber(var2) >= 0 and tonumber(var2) <= 4) then | ||||
|                     questvar = tonumber(var1); | ||||
|                     index = (tonumber(var2)); | ||||
|                      | ||||
| 					player:GetQuest(questvar):SetCounter(index, tonumber(var3)); | ||||
| 					player:GetQuest(questvar):UpdateENPCs(); | ||||
| 					player:GetQuest(questvar):SaveData();	 | ||||
| 					message = ("changing counter "..tonumber(var2).." to "..var3); | ||||
|                 else | ||||
|                     message = ("error: command "..command.." not recognized"); | ||||
|                 end | ||||
|             end	 | ||||
|         end | ||||
|   | ||||
| @@ -161,8 +161,8 @@ ENPC_PROP_CAN_EMOTE = 3; | ||||
| ENPC_PROP_CAN_NOTICE = 4; | ||||
|  | ||||
| QFLAG_NONE = 0; | ||||
| QFLAG_MAP = 1; | ||||
| QFLAG_PLATE = 2; | ||||
| QFLAG_MAP = 3; | ||||
|  | ||||
| -- MUSIC | ||||
| MUSIC_IMMEDIATE = 1; | ||||
|   | ||||
| @@ -63,9 +63,6 @@ function onFinish(player, quest) | ||||
| end | ||||
|  | ||||
| function onSequence(player, quest, sequence) | ||||
| 	quest:ClearENpcs(); | ||||
| 	quest:ClearData(); | ||||
| 	 | ||||
| 	if (sequence == SEQ_000) then | ||||
| 		-- Setup states incase we loaded in. | ||||
| 		local rostnsthalFlag = quest:GetFlag(FLAG_SEQ000_MINITUT1) and QFLAG_NONE or QFLAG_PLATE; | ||||
| @@ -73,7 +70,7 @@ function onSequence(player, quest, sequence) | ||||
| 		local babyfaceFlag = quest:GetFlag(FLAG_SEQ000_MINITUT3) and QFLAG_NONE or QFLAG_PLATE; | ||||
| 		local rostnsthalCanPush = not quest:GetFlag(FLAG_SEQ000_MINITUT0); | ||||
| 		local exitCanPush = quest:GetFlags() == 0xF; | ||||
| 		local exitFlag = quest:GetFlags() == 0xF and QFLAG_PLATE or QFLAG_NONE;		 | ||||
| 		local exitFlag = quest:GetFlags() == 0xF and QFLAG_MAP or QFLAG_NONE;		 | ||||
| 		 | ||||
| 		quest:AddENpc(WELLTRAVELED_MERCHANT); | ||||
| 		quest:AddENpc(TIPSY_ADVENTURER); | ||||
| @@ -90,7 +87,7 @@ function onSequence(player, quest, sequence) | ||||
| 		quest:AddENpc(LANKY_TRAVELER); | ||||
| 		quest:AddENpc(GRINNING_ADVENTURER); | ||||
| 		quest:AddENpc(ROSTNSTHAL, rostnsthalFlag, true, rostnsthalCanPush); | ||||
| 		quest:AddENpc(EXIT_TRIGGER, exitFlag, false, false, exitCanPush); | ||||
| 		quest:AddENpc(EXIT_TRIGGER, exitFlag, false, exitCanPush); | ||||
| 	elseif (sequence == SEQ_005) then | ||||
| 	elseif (sequence == SEQ_010) then		 | ||||
| 		quest:AddENpc(HOB); | ||||
| @@ -102,7 +99,7 @@ function onSequence(player, quest, sequence) | ||||
| 		quest:AddENpc(WELLTRAVELED_MERCHANT); | ||||
| 		quest:AddENpc(VOLUPTUOUS_VIXEN); | ||||
| 		quest:AddENpc(LANKY_TRAVELER); | ||||
| 		quest:AddENpc(PRIVAREA_PAST_EXIT, QFLAG_NONE, false, false, true); | ||||
| 		quest:AddENpc(PRIVAREA_PAST_EXIT, QFLAG_NONE, false, true); | ||||
| 	end | ||||
| end | ||||
|  | ||||
| @@ -115,6 +112,8 @@ function onTalk(player, quest, npc) | ||||
| 	elseif (sequence == SEQ_010) then | ||||
| 		seq010_onTalk(player, quest, npc, classId);		 | ||||
| 	end | ||||
| 	 | ||||
| 	quest:UpdateENPCs(); | ||||
| end | ||||
|  | ||||
| function onPush(player, quest, npc) | ||||
| @@ -138,6 +137,8 @@ function onPush(player, quest, npc) | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| 	 | ||||
| 	quest:UpdateENPCs(); | ||||
| end | ||||
|  | ||||
| function onNotice(player, quest, target) | ||||
| @@ -147,7 +148,8 @@ function onNotice(player, quest, target) | ||||
| 		callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal001withHQ");		 | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| 	player:EndEvent();	 | ||||
| 	quest:UpdateENPCs(); | ||||
| end | ||||
|  | ||||
| function seq000_onTalk(player, quest, npc, classId) | ||||
| @@ -162,7 +164,6 @@ function seq000_onTalk(player, quest, npc, classId) | ||||
| 	elseif (classId == BABYFACED_ADVENTURER) then | ||||
| 		if (not quest:GetFlag(FLAG_SEQ000_MINITUT3)) then | ||||
| 			callClientFunction(player, "delegateEvent", player, quest, "processTtrMini003"); | ||||
| 			quest:UpdateENpc(BABYFACED_ADVENTURER, ENPC_PROP_QFLAG, QFLAG_NONE); | ||||
| 			quest:SetFlag(FLAG_SEQ000_MINITUT3); | ||||
| 		else | ||||
| 			callClientFunction(player, "delegateEvent", player, quest, "processEvent000_8"); | ||||
| @@ -178,7 +179,6 @@ function seq000_onTalk(player, quest, npc, classId) | ||||
| 	elseif (classId == VOLUPTUOUS_VIXEN) then | ||||
| 		if (not quest:GetFlag(FLAG_SEQ000_MINITUT2)) then | ||||
| 			callClientFunction(player, "delegateEvent", player, quest, "processTtrMini002"); | ||||
| 			quest:UpdateENpc(VOLUPTUOUS_VIXEN, ENPC_PROP_QFLAG, QFLAG_NONE); | ||||
| 			quest:SetFlag(FLAG_SEQ000_MINITUT2); | ||||
| 		else | ||||
| 			callClientFunction(player, "delegateEvent", player, quest, "processEvent000_13"); | ||||
| @@ -195,25 +195,15 @@ function seq000_onTalk(player, quest, npc, classId) | ||||
| 		-- Handle the talk tutorial after the push one. | ||||
| 		if (not quest:GetFlag(FLAG_SEQ000_MINITUT0)) then | ||||
| 			callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal003"); | ||||
| 			quest:SetFlag(FLAG_SEQ000_MINITUT0); | ||||
| 			quest:UpdateENpc(ROSTNSTHAL, ENPC_PROP_CAN_PUSH, false); | ||||
| 			quest:UpdateENpc(ROSTNSTHAL, ENPC_PROP_QFLAG, QFLAG_PLATE); | ||||
| 			quest:UpdateENpc(VOLUPTUOUS_VIXEN, ENPC_PROP_QFLAG, QFLAG_PLATE); | ||||
| 			quest:UpdateENpc(BABYFACED_ADVENTURER, ENPC_PROP_QFLAG, QFLAG_PLATE);			 | ||||
| 			quest:SetFlag(FLAG_SEQ000_MINITUT0);		 | ||||
| 		else | ||||
| 			callClientFunction(player, "delegateEvent", player, quest, "processTtrMini001"); | ||||
| 			if (not quest:GetFlag(FLAG_SEQ000_MINITUT1)) then | ||||
| 				quest:UpdateENpc(ROSTNSTHAL, ENPC_PROP_QFLAG, QFLAG_NONE); | ||||
| 				quest:SetFlag(FLAG_SEQ000_MINITUT1); | ||||
| 			end | ||||
| 		end | ||||
| 	end	 | ||||
| 		 | ||||
| 	if (quest:GetFlags() == 0xF) then | ||||
| 		quest:UpdateENpc(EXIT_TRIGGER, ENPC_PROP_CAN_PUSH, true); | ||||
| 		quest:UpdateENpc(EXIT_TRIGGER, ENPC_PROP_QFLAG, QFLAG_MAP); | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| end | ||||
|  | ||||
| @@ -233,7 +223,7 @@ function seq010_onTalk(player, quest, npc, classId) | ||||
| 	elseif (classId == HOB) then | ||||
| 		local choice = callClientFunction(player, "delegateEvent", player, quest, "processEvent020_9"); | ||||
| 		if (choice == 1) then | ||||
| 			quest:completeAndReplace(110002); | ||||
| 			player:ReplaceQuest(quest, "Man0l1"); | ||||
| 			return; | ||||
| 		end | ||||
| 	elseif (classId == GERT) then | ||||
|   | ||||
| @@ -41,92 +41,20 @@ end | ||||
| function onSequence(player, quest, sequence) | ||||
| 	quest:ClearENpcs(); | ||||
| 	 | ||||
| 	if (sequence == SEQ_000) then | ||||
| 		-- Setup states incase we loaded in. | ||||
| 		local rostnsthalFlag = quest:GetFlag(FLAG_SEQ000_MINITUT1) and QFLAG_NONE or QFLAG_PLATE; | ||||
| 		local vixenFlag = quest:GetFlag(FLAG_SEQ000_MINITUT2) and QFLAG_NONE or QFLAG_PLATE; | ||||
| 		local babyfaceFlag = quest:GetFlag(FLAG_SEQ000_MINITUT3) and QFLAG_NONE or QFLAG_PLATE; | ||||
| 		local rostnsthalCanPush = not quest:GetFlag(FLAG_SEQ000_MINITUT0); | ||||
| 		local exitCanPush = quest:GetFlags() == 0xF; | ||||
| 		local exitFlag = quest:GetFlags() == 0xF and QFLAG_PLATE or QFLAG_NONE;		 | ||||
| 		 | ||||
| 		quest:AddENpc(WELLTRAVELED_MERCHANT); | ||||
| 		quest:AddENpc(TIPSY_ADVENTURER); | ||||
| 		quest:AddENpc(CULTIVATED_TENDER); | ||||
| 		quest:AddENpc(ANXIOUS_ADVENTURER); | ||||
| 		quest:AddENpc(BABYFACED_ADVENTURER, babyfaceFlag); | ||||
| 		quest:AddENpc(AUSTERE_ADVENTURER); | ||||
| 		quest:AddENpc(UNDIGNIFIED_ADVENTURER); | ||||
| 		quest:AddENpc(SHADOWY_TRAVELER); | ||||
| 		quest:AddENpc(ASTUTE_MERCHANT); | ||||
| 		quest:AddENpc(VOLUPTUOUS_VIXEN, vixenFlag); | ||||
| 		quest:AddENpc(INDIFFERENT_PASSERBY); | ||||
| 		quest:AddENpc(PRATTLING_ADVENTURER); | ||||
| 		quest:AddENpc(LANKY_TRAVELER); | ||||
| 		quest:AddENpc(GRINNING_ADVENTURER); | ||||
| 		quest:AddENpc(ROSTNSTHAL, rostnsthalFlag, true, rostnsthalCanPush); | ||||
| 		quest:AddENpc(EXIT_TRIGGER, exitFlag, false, false, exitCanPush); | ||||
| 	elseif (sequence == SEQ_005) then | ||||
| 	elseif (sequence == SEQ_010) then		 | ||||
| 		quest:AddENpc(HOB); | ||||
| 		quest:AddENpc(GERT); | ||||
| 		quest:AddENpc(LORHZANT); | ||||
| 		quest:AddENpc(MUSCLEBOUND_DECKHAND); | ||||
| 		quest:AddENpc(PEARLYTOOTHED_PORTER); | ||||
| 		quest:AddENpc(UNDIGNIFIED_ADVENTURER); | ||||
| 		quest:AddENpc(WELLTRAVELED_MERCHANT); | ||||
| 		quest:AddENpc(VOLUPTUOUS_VIXEN); | ||||
| 		quest:AddENpc(LANKY_TRAVELER); | ||||
| 		quest:AddENpc(PRIVAREA_PAST_EXIT, QFLAG_NONE, false, false, true); | ||||
| 	end | ||||
| end | ||||
|  | ||||
| function onTalk(player, quest, npc) | ||||
| 	local sequence = quest:getSequence(); | ||||
| 	local classId = npc:GetActorClassId(); | ||||
| 	 | ||||
| 	if (sequence == SEQ_000) then | ||||
| 		seq000_onTalk(player, quest, npc, classId); | ||||
| 	elseif (sequence == SEQ_010) then | ||||
| 		seq010_onTalk(player, quest, npc, classId);		 | ||||
| 	end | ||||
| end | ||||
|  | ||||
| function onPush(player, quest, npc) | ||||
| 	local sequence = quest:getSequence(); | ||||
| 	local classId = npc:GetActorClassId();	 | ||||
| 	 | ||||
| 	if (sequence == SEQ_000) then | ||||
| 		 | ||||
| 	elseif (sequence == SEQ_010) then | ||||
| 		 | ||||
| 	end | ||||
| end | ||||
|  | ||||
| function onNotice(player, quest, target) | ||||
| 	local sequence = quest:getSequence(); | ||||
| 	 | ||||
| 	if (sequence == SEQ_000) then		 | ||||
| 		callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal001withHQ"); | ||||
| 	end | ||||
| end | ||||
|  | ||||
| function seq000_onTalk(player, quest, npc, classId) | ||||
| 	if (classId == WELLTRAVELED_MERCHANT) then | ||||
| 		callClientFunction(player, "delegateEvent", player, quest, "processEvent000_4"); | ||||
| 	elseif (classId == TIPSY_ADVENTURER) then | ||||
| 		callClientFunction(player, "delegateEvent", player, quest, "processEvent000_5"); | ||||
| 	end | ||||
| 	 | ||||
| 	player:EndEvent(); | ||||
| end | ||||
|  | ||||
| function getJournalMapMarkerList(player, quest) | ||||
| 	local sequence = quest:getSequence(); | ||||
| 	 | ||||
| 	if (sequence == SEQ_000) then | ||||
| 	--	return MRKR_ROSTNSTHAL, MRKR_BABYFACED_ADVENTURER, MRKR_VOLUPTUOUS_VIXEN; | ||||
| 	elseif (sequence == SEQ_010) then | ||||
| 	--	return MRKR_HOB; | ||||
| 	end | ||||
| end | ||||
| @@ -1,22 +1,35 @@ | ||||
| /* | ||||
| MySQL Data Transfer | ||||
| Source Host: localhost | ||||
| Source Database: ffxiv_server | ||||
| Target Host: localhost | ||||
| Target Database: ffxiv_server | ||||
| Date: 4/2/2017 2:27:54 PM | ||||
| */ | ||||
| -- -------------------------------------------------------- | ||||
| -- Host:                         127.0.0.1 | ||||
| -- Server version:               5.6.17 - MySQL Community Server (GPL) | ||||
| -- Server OS:                    Win64 | ||||
| -- HeidiSQL Version:             10.1.0.5464 | ||||
| -- -------------------------------------------------------- | ||||
|  | ||||
| SET FOREIGN_KEY_CHECKS=0; | ||||
| -- ---------------------------- | ||||
| -- Table structure for characters_quest_scenario | ||||
| -- ---------------------------- | ||||
| CREATE TABLE `characters_quest_scenario` ( | ||||
| /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; | ||||
| /*!40101 SET NAMES utf8 */; | ||||
| /*!50503 SET NAMES utf8mb4 */; | ||||
| /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; | ||||
| /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; | ||||
|  | ||||
|  | ||||
| -- Dumping database structure for ffxiv_server | ||||
| CREATE DATABASE IF NOT EXISTS `ffxiv_server` /*!40100 DEFAULT CHARACTER SET latin1 */; | ||||
| USE `ffxiv_server`; | ||||
|  | ||||
| -- Dumping structure for table ffxiv_server.characters_quest_scenario | ||||
| CREATE TABLE IF NOT EXISTS `characters_quest_scenario` ( | ||||
|   `characterId` int(10) unsigned NOT NULL, | ||||
|   `slot` smallint(5) unsigned NOT NULL, | ||||
|   `questId` int(10) unsigned NOT NULL, | ||||
|   `currentPhase` int(10) unsigned NOT NULL DEFAULT '0', | ||||
|   `questData` longtext, | ||||
|   `questFlags` int(10) unsigned NOT NULL DEFAULT '0', | ||||
|   `sequence` int(10) unsigned NOT NULL DEFAULT '0', | ||||
|   `flags` mediumint(8) unsigned NOT NULL DEFAULT '0', | ||||
|   `counter1` smallint(5) unsigned NOT NULL DEFAULT '0', | ||||
|   `counter2` smallint(5) unsigned NOT NULL DEFAULT '0', | ||||
|   `counter3` smallint(5) unsigned NOT NULL DEFAULT '0', | ||||
|   PRIMARY KEY (`characterId`,`slot`) | ||||
| ) ENGINE=InnoDB DEFAULT CHARSET=latin1; | ||||
|  | ||||
| -- Data exporting was unselected. | ||||
| /*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; | ||||
| /*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */; | ||||
| /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user