Added debug script for setting quest completion

This commit is contained in:
Filip Maj 2022-02-20 12:39:34 -05:00
parent c677479a03
commit 25f1b0fd95
3 changed files with 94 additions and 4 deletions

View File

@ -0,0 +1,58 @@
require("global");
properties = {
permissions = 0,
parameters = "dd",
description =
[[
Sets if a quest is completed.
!completedQuest <questId> true/false
]],
}
function onTrigger(player, argc, questId, flag)
print("HEY");
local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
local sender = "[completedQuest] ";
local message = "Error";
if (argc < 1) then
return;
end
local questId = tonumber(questId);
local flag = flag or nil;
-- Fail if not valid questId
if (questId < 110001 or questId > 110001 + 2048) then
player:SendMessage(messageID, sender, "Invalid questId entered");
return;
end
-- Getting
if (arc == 1) then
player:SendMessage(messageID, sender, string.format("Quest %d completion is set to: %s", questId, tostring(player:IsQuestCompleted(questId))));
return;
-- Setting
else
-- Fail if not valid flag
if (not flag == nil) then
player:SendMessage(messageID, sender, "Invalid flag entered");
else
local boolFlag = false;
if (flag == "true" or flag == "1" or flag == "on" or flag == "O") then
boolFlag = true;
elseif (flag == "false" or flag == "0" or flag == "off" or flag == "X") then
boolFlag = false;
elseif flag == "flip" or flag == "toggle" then
boolFlag = not player:IsQuestCompleted(questId);
end
player:SetQuestComplete(questId, boolFlag);
player:SendMessage(messageID, sender, string.format("Quest %d completion set to: %s", questId, tostring(player:IsQuestCompleted(questId))));
return;
end
end
end

View File

@ -1169,8 +1169,7 @@ namespace Meteor.Map.Actors
private void SendCompletedQuests(ushort from, ushort to) private void SendCompletedQuests(ushort from, ushort to)
{ {
Bitstream completed = questStateManager.GetCompletedBitstream(); byte[] data = questStateManager.GetCompletionSliceBytes(from, to);
byte[] data = completed.GetSlice(from, to);
SetActorPropetyPacket completedQuestWorkUpdate = new SetActorPropetyPacket(from, to, "playerWork/journal"); SetActorPropetyPacket completedQuestWorkUpdate = new SetActorPropetyPacket(from, to, "playerWork/journal");
completedQuestWorkUpdate.AddBitfield(Utils.MurmurHash2("playerWork.questScenarioComplete", 0), data); completedQuestWorkUpdate.AddBitfield(Utils.MurmurHash2("playerWork.questScenarioComplete", 0), data);
@ -1661,6 +1660,25 @@ namespace Meteor.Map.Actors
return false; return false;
} }
public bool IsQuestCompleted(uint id)
{
return questStateManager.IsQuestComplete(id);
}
public void SetQuestComplete(uint id, bool flag)
{
if (flag)
{
Quest currentQuest = GetQuest(id);
if (currentQuest != null)
{
CompleteQuest(currentQuest);
return;
}
}
questStateManager.ForceQuestCompleteFlag(id, flag);
}
public Quest GetQuest(uint id) public Quest GetQuest(uint id)
{ {
for (int i = 0; i < questScenario.Length; i++) for (int i = 0; i < questScenario.Length; i++)

View File

@ -156,9 +156,23 @@ namespace Meteor.Map.Actors.QuestNS
return ActiveQuests.FindAll(quest => quest.IsQuestENPC(player, npc)).ToArray(); return ActiveQuests.FindAll(quest => quest.IsQuestENPC(player, npc)).ToArray();
} }
public Bitstream GetCompletedBitstream() public byte[] GetCompletionSliceBytes(ushort from, ushort to)
{ {
return CompletedQuestsBitfield; return CompletedQuestsBitfield.GetSlice(from, to);
}
public bool IsQuestComplete(uint questId)
{
return CompletedQuestsBitfield.Get(questId - SCENARIO_START);
}
public void ForceQuestCompleteFlag(uint questId, bool flag)
{
if (flag)
CompletedQuestsBitfield.Set(questId - SCENARIO_START);
else
CompletedQuestsBitfield.Clear(questId - SCENARIO_START);
ComputeAvailable();
} }
} }
} }