From f909e40bbc8783139fd6ccfb6f7108206e81c601 Mon Sep 17 00:00:00 2001 From: Emistry Haoyan Date: Sat, 18 May 2019 00:53:57 +0800 Subject: Add new atcommand *reloadnpc - `@reloadnpc ` - unloads all NPCs in a file and reload it again. - Be aware that mapflags and monster spawned directly are not removed. --- doc/atcommands.txt | 10 ++++++++++ src/map/atcommand.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/doc/atcommands.txt b/doc/atcommands.txt index dd8ad0969..4acc30ae6 100644 --- a/doc/atcommands.txt +++ b/doc/atcommands.txt @@ -1260,6 +1260,16 @@ Example: --------------------------------------- +@reloadnpc + +Unloads all NPCs in a file and reload it again. +Note: Be aware that mapflags and monsters spawned directly are not removed. + +Example: +@reloadnpc npc/custom/jobmaster.txt + +--------------------------------------- + ===================== | 6. Party Commands | ===================== diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 09303912b..68272e67e 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -4454,6 +4454,38 @@ ACMD(unloadnpc) return true; } +/// Unload existing NPC within the NPC file and reload it. +/// Usage: @reloadnpc npc/sample_npc.txt +ACMD(reloadnpc) +{ + if (!*message) { + clif->message(fd, msg_fd(fd, 1385)); // Usage: @unloadnpcfile + return false; + } else if (npc->unloadfile(message) == true) { + clif->message(fd, msg_fd(fd, 1386)); // File unloaded. Be aware that mapflags and monsters spawned directly are not removed. + + FILE *fp = fopen(message, "r"); + // check if script file exists + if (fp == NULL) { + clif->message(fd, msg_fd(fd, 261)); + return false; + } + fclose(fp); + + // add to list of script sources and run it + npc->addsrcfile(message); + npc->parsesrcfile(message, true); + npc->read_event_script(); + + clif->message(fd, msg_fd(fd, 262)); + } else { + clif->message(fd, msg_fd(fd, 1387)); // File not found. + return false; + } + + return true; +} + /*========================================== * time in txt for time command (by [Yor]) *------------------------------------------*/ @@ -10107,6 +10139,7 @@ static void atcommand_basecommands(void) ACMD_DEF(addperm), ACMD_DEF2("rmvperm", addperm), ACMD_DEF(unloadnpcfile), + ACMD_DEF(reloadnpc), ACMD_DEF(cart), ACMD_DEF(cashmount), ACMD_DEF(join), -- cgit v1.2.3-60-g2f50