mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-15 04:11:30 +00:00
Added command 'nudge'
This commit is contained in:
parent
c90326f585
commit
b8623bf6df
@ -295,6 +295,7 @@ int command_init(void)
|
||||
command_add("npcstats", "- Show stats about target NPC", 80, command_npcstats) ||
|
||||
command_add("npctype_cache", "[id] or all - Clears the npc type cache for either the id or all npcs.", 250, command_npctype_cache) ||
|
||||
command_add("npctypespawn", "[npctypeid] [factionid] - Spawn an NPC from the db", 10, command_npctypespawn) ||
|
||||
command_add("nudge", "- Nudge your target's current position by specific values", 80, command_nudge) ||
|
||||
command_add("nukebuffs", "- Strip all buffs on you or your target", 50, command_nukebuffs) ||
|
||||
command_add("nukeitem", "[itemid] - Remove itemid from your player target's inventory", 150, command_nukeitem) ||
|
||||
command_add("object", "List|Add|Edit|Move|Rotate|Copy|Save|Undo|Delete - Manipulate static and tradeskill objects within the zone", 100, command_object) ||
|
||||
@ -3127,6 +3128,81 @@ void command_npctypespawn(Client *c, const Seperator *sep)
|
||||
|
||||
}
|
||||
|
||||
void command_nudge(Client* c, const Seperator* sep)
|
||||
{
|
||||
if (sep->arg[1][0] == 0) {
|
||||
c->Message(Chat::White, "Usage: #nudge [x=f] [y=f] [z=f] [h=f] (partial/mixed arguments allowed)");
|
||||
}
|
||||
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& 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,
|
||||
"Nudging '%s' to {%1.3f, %1.3f, %1.3f, %1.2f} (adjustment: {%1.3f, %1.3f, %1.3f, %1.2f})",
|
||||
target->GetName(),
|
||||
new_position.x,
|
||||
new_position.y,
|
||||
new_position.z,
|
||||
new_position.w,
|
||||
position_offset.x,
|
||||
position_offset.y,
|
||||
position_offset.z,
|
||||
position_offset.w
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void command_heal(Client *c, const Seperator *sep)
|
||||
{
|
||||
if (c->GetTarget()==0)
|
||||
|
||||
@ -194,6 +194,7 @@ void command_npcspecialattk(Client *c, const Seperator *sep);
|
||||
void command_npcstats(Client *c, const Seperator *sep);
|
||||
void command_npctype_cache(Client *c, const Seperator *sep);
|
||||
void command_npctypespawn(Client *c, const Seperator *sep);
|
||||
void command_nudge(Client* c, const Seperator* sep);
|
||||
void command_nukebuffs(Client *c, const Seperator *sep);
|
||||
void command_nukeitem(Client *c, const Seperator *sep);
|
||||
void command_numauths(Client *c, const Seperator *sep);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user