mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-06-10 06:24:38 +02:00
Merge branch 'ioncannon/quest_system' of https://bitbucket.org/Ioncannon/project-meteor-server into Jorge/quest_system
This commit is contained in:
commit
fb9d4026a5
9 changed files with 209 additions and 195 deletions
|
@ -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 */;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue