mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 21:01:29 +00:00
* Changes to npcspawn create command so it takes more stats from the target npc * Add see invis stats to npccreate command * WIP npcspawn command changes * Add npcspawn clone and help args, fix some broken things with npcspawn * Cleanup comments and add apostraphes to zone shortname query * Make it so npcspawn remove only removes spawn2 row and optionally removes spawngroup and spawnentry, make create and add spawn the npc at client loc * Make npcspawn create use the same syntax for spawngroup naming as npcspawn add * Revert npcspawn create and add to use npc location rather than client, other misc tweaks
117 lines
3.5 KiB
C++
Executable File
117 lines
3.5 KiB
C++
Executable File
#include "../client.h"
|
|
|
|
void command_npcspawn(Client *c, const Seperator *sep)
|
|
{
|
|
if (!c->GetTarget() || !c->GetTarget()->IsNPC()) {
|
|
c->Message(Chat::White, "You must target an NPC to use this command.");
|
|
return;
|
|
}
|
|
|
|
int arguments = sep->argnum;
|
|
if (!arguments) {
|
|
c->Message(Chat::White, "Command Syntax: #npcspawn [Add|Create|Delete|Remove|Update|Clone|Help]");
|
|
return;
|
|
}
|
|
|
|
if (!strcasecmp(sep->arg[1], "help")) {
|
|
c->Message(Chat::White, "Command Syntax: #npcspawn [Add|Create|Delete|Remove|Update|Clone|Help] [optional 3rd parameter]");
|
|
c->Message(Chat::White, "Usage: #npcspawn add [respawntime] - Using the same targeted NPC ID, creates new spawn2 and spawngroup entries");
|
|
c->Message(Chat::White, "Usage: #npcspawn clone [respawntime] - Copies targeted NPC and spawngroup, creating only a spawn2 entry at the current client location");
|
|
c->Message(Chat::White, "Usage: #npcspawn create [respawntime] - Creates new NPC type copying the data from the targeted NPC, with new spawn2 and spawngroup entries");
|
|
c->Message(Chat::White, "Usage: #npcspawn delete - Deletes the spawn2, spawngroup, spawnentry and npc_types rows for targeted NPC");
|
|
c->Message(Chat::White, "Usage: #npcspawn remove [remove_spawngroups] - Deletes the spawn2 row for targeted NPC, also delete spawngroup and spawnentry rows if remove_spawngroups is > 0");
|
|
c->Message(Chat::White, "Usage: #npcspawn update - Updates NPC appearance in database");
|
|
return;
|
|
}
|
|
|
|
auto target = c->GetTarget()->CastToNPC();
|
|
uint32 extra = 0;
|
|
bool is_add = !strcasecmp(sep->arg[1], "add");
|
|
bool is_clone = !strcasecmp(sep->arg[1], "clone");
|
|
bool is_create = !strcasecmp(sep->arg[1], "create");
|
|
bool is_delete = !strcasecmp(sep->arg[1], "delete");
|
|
bool is_remove = !strcasecmp(sep->arg[1], "remove");
|
|
bool is_update = !strcasecmp(sep->arg[1], "update");
|
|
if (
|
|
!is_add &&
|
|
!is_clone &&
|
|
!is_create &&
|
|
!is_delete &&
|
|
!is_remove &&
|
|
!is_update
|
|
) {
|
|
c->Message(Chat::White, "Command Syntax: #npcspawn [Add|Create|Delete|Remove|Update|Clone|Help]");
|
|
return;
|
|
}
|
|
|
|
if (is_add || is_create || is_clone) {
|
|
extra = sep->IsNumber(2) ? Strings::ToInt(sep->arg[2]) : 1200; // Extra param is only used for respawn time in Add/Create/Clone, default to 1200 if not set
|
|
|
|
content_db.NPCSpawnDB(
|
|
is_add ? NPCSpawnTypes::AddNewSpawngroup : (is_create ? NPCSpawnTypes::CreateNewSpawn : NPCSpawnTypes::AddSpawnFromSpawngroup),
|
|
zone->GetShortName(),
|
|
zone->GetInstanceVersion(),
|
|
c,
|
|
target,
|
|
extra
|
|
);
|
|
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"Spawn {} | Name: {}",
|
|
is_add ?
|
|
"Added" :
|
|
(
|
|
is_create ?
|
|
"Created" :
|
|
"Cloned"
|
|
),
|
|
c->GetTargetDescription(target)
|
|
).c_str()
|
|
);
|
|
}
|
|
else if (is_delete || is_remove || is_update) {
|
|
uint8 spawn_update_type = (
|
|
is_delete ?
|
|
NPCSpawnTypes::DeleteSpawn :
|
|
(
|
|
is_remove ?
|
|
NPCSpawnTypes::RemoveSpawn :
|
|
NPCSpawnTypes::UpdateAppearance
|
|
)
|
|
);
|
|
|
|
std::string spawn_message = (
|
|
is_delete ?
|
|
"Deleted" :
|
|
(
|
|
is_remove ?
|
|
"Removed" :
|
|
"Updated"
|
|
)
|
|
);
|
|
|
|
extra = sep->IsNumber(2) ? Strings::ToInt(sep->arg[2]) : 0; // Extra param is used in Remove as a flag to optionally remove spawngroup/spawnentry if 1 (always remove spawn2 entry)
|
|
|
|
content_db.NPCSpawnDB(
|
|
spawn_update_type,
|
|
zone->GetShortName(),
|
|
zone->GetInstanceVersion(),
|
|
c,
|
|
target,
|
|
extra
|
|
);
|
|
|
|
c->Message(
|
|
Chat::White,
|
|
fmt::format(
|
|
"Spawn {} | Name: {}",
|
|
spawn_message,
|
|
c->GetTargetDescription(target)
|
|
).c_str()
|
|
);
|
|
}
|
|
}
|
|
|