Merge remote-tracking branch 'origin/ioncannon/quest_system' into Jorge/quest_system

# Conflicts:
#	Data/scripts/commands/EmoteSitCommand.lua  - Resolved using Theirs
This commit is contained in:
CuriousJorge 2022-03-11 19:21:42 -05:00
commit e94c037fb5
73 changed files with 1096 additions and 212 deletions

View file

@ -24,6 +24,21 @@ vertical = {
["DESCEND"] = -1,
}
horizontal = {
["RIGHT"] = 2,
["R"] = 2,
["+"] = 2,
["LEFT"] = -2,
["L"] = -2,
["0"] = -2
}
rotation = {
["ROTATE"] = 3,
["ORIENTATION"] = 3,
["O"] = 3
}
function onTrigger(player, argc, arg1, arg2)
local pos = player:GetPos();
local x = pos[1];
@ -54,16 +69,24 @@ function onTrigger(player, argc, arg1, arg2)
distance = checkArg1;
elseif checkArg1 and not checkArg2 then -- If first is number and second is string
distance = checkArg1;
if vertical[string.upper(arg2)] then -- Check vertical direction on string, otherwise throw param error
if vertical[string.upper(arg2)] then -- Check vertical direction on string
direction = vertical[string.upper(arg2)];
elseif horizontal[string.upper(arg2)] then -- Check horizontal direction on string
direction = horizontal[string.upper(arg2)];
elseif rotation[string.upper(arg2)] then -- Check rotation on string, otherwise throw param error
direction = rotation[string.upper(arg2)];
else
player:SendMessage(messageID, sender, "Unknown parameters! Usage: \n"..properties.description);
return;
end
elseif (not checkArg1) and checkArg2 then -- If first is string and second is number
distance = checkArg2;
if vertical[string.upper(arg1)] then -- Check vertical direction on string, otherwise throw param error
if vertical[string.upper(arg1)] then -- Check vertical direction on string
direction = vertical[string.upper(arg1)];
elseif horizontal[string.upper(arg1)] then -- Check horizontal direction on string
direction = horizontal[string.upper(arg1)];
elseif rotation[string.upper(arg1)] then -- Check rotation on string, otherwise throw param error
direction = rotation[string.upper(arg1)];
else
player:SendMessage(messageID, sender, "Unknown parameters! Usage: \n"..properties.description);
return;
@ -86,6 +109,19 @@ function onTrigger(player, argc, arg1, arg2)
y = y - distance;
message = string.format("Positioning down %s yalms.", distance);
worldManager:DoPlayerMoveInZone(player, x, y, z, rot, 0x0);
elseif direction == 2 then
local px = x - distance * math.cos(angle - math.pi/2);
local pz = z + distance * math.sin(angle - math.pi/2);
message = string.format("Positioning right %s yalms.", distance);
worldManager:DoPlayerMoveInZone(player, px, y, pz, rot, 0x0);
elseif direction == -2 then
local px = x - distance * math.cos(angle + math.pi/2);
local pz = z + distance * math.sin(angle + math.pi/2);
message = string.format("Positioning left %s yalms.", distance);
worldManager:DoPlayerMoveInZone(player, px, y, pz, rot, 0x0);
elseif direction == 3 then
message = string.format("ROTATE down %s yalms.", distance);
worldManager:DoPlayerMoveInZone(player, x, y, z, distance, 0x0);
else
local px = x - distance * math.cos(angle);
local pz = z + distance * math.sin(angle);

View file

@ -0,0 +1,140 @@
require("global");
properties = {
permissions = 0,
parameters = "ss",
description =
[[
Positions a targeted npc by some <distance>, defaults to 5 yalms.
!nudge |
!nudge <distance> |
!nudge <distance> <up/down> |
!nudge <distance> <left/right> |
!nudge <distance> <rotate> |
]],
}
vertical = {
["UP"] = 1,
["U"] = 1,
["+"] = 1,
["ASCEND"] = 1,
["DOWN"] = -1,
["D"] = -1,
["-"] = -1,
["DESCEND"] = -1,
}
horizontal = {
["RIGHT"] = 2,
["R"] = 2,
["+"] = 2,
["LEFT"] = -2,
["L"] = -2,
["0"] = -2
}
rotation = {
["ROTATE"] = 3,
["ORIENTATION"] = 3,
["O"] = 3
}
function onTrigger(player, argc, arg1, arg2)
local messageID = MESSAGE_TYPE_SYSTEM;
local sender = "[nudge] ";
local targetActor = player.CurrentArea.FindActorInArea(player.currentTarget) or nil;
if (targetActor == nil) then
player:SendMessage(MESSAGE_TYPE_SYSTEM, sender, "No target was selected.\n");
return;
end
local pos = targetActor:GetPos();
local x = pos[1];
local y = pos[2];
local z = pos[3];
local rot = pos[4];
local zone = pos[5];
local angle = rot + (math.pi/2);
local worldManager = GetWorldManager();
local distance = 5;
local direction = 0;
local checkArg1 = tonumber(arg1);
local checkArg2 = tonumber(arg2);
if argc == 1 then
if checkArg1 then
distance = checkArg1;
else
player:SendMessage(messageID, sender, "Unknown parameters! Usage: \n"..properties.description);
return;
end
elseif argc == 2 then
if checkArg1 and checkArg2 then -- If both are numbers, just ignore second argument
distance = checkArg1;
elseif checkArg1 and not checkArg2 then -- If first is number and second is string
distance = checkArg1;
if vertical[string.upper(arg2)] then -- Check vertical direction on string
direction = vertical[string.upper(arg2)];
elseif horizontal[string.upper(arg2)] then -- Check horizontal direction on string
direction = horizontal[string.upper(arg2)];
elseif rotation[string.upper(arg2)] then -- Check rotation on string, otherwise throw param error
direction = rotation[string.upper(arg2)];
else
player:SendMessage(messageID, sender, "Unknown parameters! Usage: \n"..properties.description);
return;
end
elseif (not checkArg1) and checkArg2 then -- If first is string and second is number
distance = checkArg2;
if vertical[string.upper(arg1)] then -- Check vertical direction on string
direction = vertical[string.upper(arg1)];
elseif horizontal[string.upper(arg1)] then -- Check horizontal direction on string
direction = horizontal[string.upper(arg1)];
elseif rotation[string.upper(arg1)] then -- Check rotation on string, otherwise throw param error
direction = rotation[string.upper(arg1)];
else
player:SendMessage(messageID, sender, "Unknown parameters! Usage: \n"..properties.description);
return;
end
else
player:SendMessage(messageID, sender, "Unknown parameters! Usage: \n"..properties.description);
return;
end
end
if direction == 1 then
y = y + distance;
targetActor:SetPos(x,y,z,rot,true, player);
message = string.format("Moved %s @ %f, %f, %f, %f", targetActor:GetUniqueId(), x, y, z, rot);
elseif direction == -1 then
y = y - distance;
targetActor:SetPos(x,y,z,rot,true, player);
message = string.format("Moved %s @ %f, %f, %f, %f", targetActor:GetUniqueId(), x, y, z, rot);
elseif direction == 2 then
local px = x - distance * math.cos(angle - math.pi/2);
local pz = z + distance * math.sin(angle - math.pi/2);
targetActor:SetPos(px, y, pz, rot, true, player);
message = string.format("Moved %s @ %f, %f, %f, %f", targetActor:GetUniqueId(), px, y, pz, rot);
elseif direction == -2 then
local px = x - distance * math.cos(angle + math.pi/2);
local pz = z + distance * math.sin(angle + math.pi/2);
targetActor:SetPos(px, y, pz, rot, true, player);
message = string.format("Moved %s @ %f, %f, %f, %f", targetActor:GetUniqueId(), px, y, pz, rot);
elseif direction == 3 then
targetActor:SetPos(x, y, z, distance, true, player);
message = string.format("Moved %s @ %f, %f, %f, %f", targetActor:GetUniqueId(), x, y, z, distance);
else
local px = x - distance * math.cos(angle);
local pz = z + distance * math.sin(angle);
targetActor:SetPos(px, y, pz, rot, true, player);
message = string.format("Moved %s @ %f, %f, %f, %f", targetActor:GetUniqueId(), px, y, pz, rot);
end
player:SendMessage(messageID, sender, message);
end

View file

@ -0,0 +1,16 @@
require("global");
properties = {
permissions = 0,
parameters = "d",
description = "Simulates killing a bnpc. Used for quest testing.",
}
function onTrigger(player, argc, actorClassId)
if (argc == 1) then
player:HandleBNpcKill(actorClassId);
player:SendMessage(0x20, "", "Simulating BNpc kill for actor class id: " .. tostring(actorClassId));
else
player:SendMessage(0x20, "", "No actor class id provided.");
end
end