mirror of
https://github.com/EQEmu/Server.git
synced 2026-03-11 02:52:26 +00:00
[Commands] Cleanup #nudge Command. (#2220)
* [Commands] Cleanup #nudge Command. - Cleanup messages and logic. * Update nudge.cpp * Update nudge.cpp
This commit is contained in:
parent
b07945f0be
commit
d493a6627b
@ -2,67 +2,78 @@
|
|||||||
|
|
||||||
void command_nudge(Client *c, const Seperator *sep)
|
void command_nudge(Client *c, const Seperator *sep)
|
||||||
{
|
{
|
||||||
if (sep->arg[1][0] == 0) {
|
int arguments = sep->argnum;
|
||||||
c->Message(Chat::White, "Usage: #nudge [x=f] [y=f] [z=f] [h=f] (partial/mixed arguments allowed)");
|
if (!arguments) {
|
||||||
}
|
c->Message(Chat::White, "Usage: #nudge [x=float] [y=float] [z=float] [h=float]");
|
||||||
else {
|
|
||||||
|
|
||||||
auto target = c->GetTarget();
|
|
||||||
if (!target) {
|
|
||||||
|
|
||||||
c->Message(Chat::Yellow, "This command requires a target.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (target->IsMoving()) {
|
|
||||||
|
|
||||||
c->Message(Chat::Yellow, "This command requires a stationary target.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
glm::vec4 position_offset(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
for (auto index = 1; index <= 4; ++index) {
|
|
||||||
|
|
||||||
if (!sep->arg[index]) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Seperator argsep(sep->arg[index], '=');
|
|
||||||
if (!argsep.arg[1][0]) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (argsep.arg[0][0]) {
|
|
||||||
case 'x':
|
|
||||||
position_offset.x = atof(argsep.arg[1]);
|
|
||||||
break;
|
|
||||||
case 'y':
|
|
||||||
position_offset.y = atof(argsep.arg[1]);
|
|
||||||
break;
|
|
||||||
case 'z':
|
|
||||||
position_offset.z = atof(argsep.arg[1]);
|
|
||||||
break;
|
|
||||||
case 'h':
|
|
||||||
position_offset.w = atof(argsep.arg[1]);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto ¤t_position = target->GetPosition();
|
|
||||||
glm::vec4 new_position(
|
|
||||||
(current_position.x + position_offset.x),
|
|
||||||
(current_position.y + position_offset.y),
|
|
||||||
(current_position.z + position_offset.z),
|
|
||||||
(current_position.w + position_offset.w)
|
|
||||||
);
|
|
||||||
|
|
||||||
target->GMMove(new_position.x, new_position.y, new_position.z, new_position.w);
|
|
||||||
|
|
||||||
c->Message(
|
c->Message(
|
||||||
Chat::White,
|
Chat::White,
|
||||||
"Nudging '%s' to {%1.3f, %1.3f, %1.3f, %1.2f} (adjustment: {%1.3f, %1.3f, %1.3f, %1.2f})",
|
fmt::format(
|
||||||
target->GetName(),
|
"Note: Partial or mixed arguments allowed, example {}.",
|
||||||
|
EQ::SayLinkEngine::GenerateQuestSaylink(
|
||||||
|
"#nudge x=5.0",
|
||||||
|
false,
|
||||||
|
"#nudge x=5.0"
|
||||||
|
)
|
||||||
|
).c_str()
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto target = c->GetTarget();
|
||||||
|
if (!target) {
|
||||||
|
c->Message(Chat::White, "You must have a target to use this command.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target->IsMoving()) {
|
||||||
|
c->Message(Chat::White, "This command requires a stationary target.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm::vec4 position_offset(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
for (auto index = 1; index <= 4; ++index) {
|
||||||
|
if (!sep->arg[index]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Seperator argsep(sep->arg[index], '=');
|
||||||
|
if (!argsep.arg[1][0]) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (argsep.arg[0][0]) {
|
||||||
|
case 'x':
|
||||||
|
position_offset.x = std::stof(argsep.arg[1]);
|
||||||
|
break;
|
||||||
|
case 'y':
|
||||||
|
position_offset.y = std::stof(argsep.arg[1]);
|
||||||
|
break;
|
||||||
|
case 'z':
|
||||||
|
position_offset.z = std::stof(argsep.arg[1]);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
position_offset.w = std::stof(argsep.arg[1]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto& current_position = target->GetPosition();
|
||||||
|
glm::vec4 new_position(
|
||||||
|
(current_position.x + position_offset.x),
|
||||||
|
(current_position.y + position_offset.y),
|
||||||
|
(current_position.z + position_offset.z),
|
||||||
|
(current_position.w + position_offset.w)
|
||||||
|
);
|
||||||
|
|
||||||
|
target->GMMove(new_position.x, new_position.y, new_position.z, new_position.w);
|
||||||
|
|
||||||
|
c->Message(
|
||||||
|
Chat::White,
|
||||||
|
fmt::format(
|
||||||
|
"Nudging {} to {:.2f}, {:.2f}, {:.2f}, {:.2f} with offsets of {:.2f}, {:.2f}, {:.2f}, {:.2f}.",
|
||||||
|
c->GetTargetDescription(target),
|
||||||
new_position.x,
|
new_position.x,
|
||||||
new_position.y,
|
new_position.y,
|
||||||
new_position.z,
|
new_position.z,
|
||||||
@ -71,7 +82,7 @@ void command_nudge(Client *c, const Seperator *sep)
|
|||||||
position_offset.y,
|
position_offset.y,
|
||||||
position_offset.z,
|
position_offset.z,
|
||||||
position_offset.w
|
position_offset.w
|
||||||
);
|
).c_str()
|
||||||
}
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user