summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/msg_athena.conf2
-rw-r--r--src/map/atcommand.c9
-rw-r--r--src/map/npc.c16
-rw-r--r--src/map/npc.h2
4 files changed, 20 insertions, 9 deletions
diff --git a/conf/msg_athena.conf b/conf/msg_athena.conf
index c330c9f21..828822280 100644
--- a/conf/msg_athena.conf
+++ b/conf/msg_athena.conf
@@ -984,7 +984,7 @@
1155: NPC moved.
// @addwarp
-1156: Usage: @addwarp <mapname> <X> <Y>
+1156: Usage: @addwarp <mapname> <X> <Y> {<npc name>}
1157: Unknown map '%s'.
1158: New warp NPC '%s' created.
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 25fc3182d..5d032c457 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -5259,15 +5259,16 @@ ACMD_FUNC(npcmove)
*------------------------------------------*/
ACMD_FUNC(addwarp)
{
- char mapname[32];
+ char mapname[32], warpname[NAME_LENGTH+1];
int x,y;
unsigned short m;
struct npc_data* nd;
nullpo_retr(-1, sd);
+ memset(warpname, '\0', sizeof(warpname));
- if (!message || !*message || sscanf(message, "%31s %d %d", mapname, &x, &y) < 3) {
- clif_displaymessage(fd, msg_txt(1156)); // Usage: @addwarp <mapname> <X> <Y>
+ if (!message || !*message || sscanf(message, "%31s %d %d %23[^\n]", mapname, &x, &y, warpname) < 3) {
+ clif_displaymessage(fd, msg_txt(1156)); // Usage: @addwarp <mapname> <X> <Y> {<npc name>}
return -1;
}
@@ -5279,7 +5280,7 @@ ACMD_FUNC(addwarp)
return -1;
}
- nd = npc_add_warp(sd->bl.m, sd->bl.x, sd->bl.y, 2, 2, m, x, y);
+ nd = npc_add_warp(warpname, sd->bl.m, sd->bl.x, sd->bl.y, 2, 2, m, x, y);
if( nd == NULL )
return -1;
diff --git a/src/map/npc.c b/src/map/npc.c
index 62a263e5a..0ed3dd68b 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -2008,9 +2008,9 @@ static void npc_parsename(struct npc_data* nd, const char* name, const char* sta
}
//Add then display an npc warp on map
-struct npc_data* npc_add_warp(short from_mapid, short from_x, short from_y, short xs, short ys, unsigned short to_mapindex, short to_x, short to_y)
+struct npc_data* npc_add_warp(char* name, short from_mapid, short from_x, short from_y, short xs, short ys, unsigned short to_mapindex, short to_x, short to_y)
{
- int i;
+ int i, flag = 0;
struct npc_data *nd;
CREATE(nd, struct npc_data, 1);
@@ -2020,7 +2020,17 @@ struct npc_data* npc_add_warp(short from_mapid, short from_x, short from_y, shor
nd->bl.m = from_mapid;
nd->bl.x = from_x;
nd->bl.y = from_y;
- snprintf(nd->exname, ARRAYLENGTH(nd->exname), "warp_%d_%d_%d", from_mapid, from_x, from_y);
+
+ if (name)
+ {
+ safestrncpy(nd->exname, name, ARRAYLENGTH(nd->exname));
+ if (npc_name2id(nd->exname) != NULL)
+ flag = 1;
+ }
+
+ if (name[0] == '\0' || flag == 1)
+ snprintf(nd->exname, ARRAYLENGTH(nd->exname), "warp_%d_%d_%d", from_mapid, from_x, from_y);
+
for( i = 0; npc_name2id(nd->exname) != NULL; ++i )
snprintf(nd->exname, ARRAYLENGTH(nd->exname), "warp%d_%d_%d_%d", i, from_mapid, from_x, from_y);
safestrncpy(nd->name, nd->exname, ARRAYLENGTH(nd->name));
diff --git a/src/map/npc.h b/src/map/npc.h
index 29cf39c77..0379ae634 100644
--- a/src/map/npc.h
+++ b/src/map/npc.h
@@ -120,7 +120,7 @@ int npc_buysellsel(struct map_session_data* sd, int id, int type);
int npc_buylist(struct map_session_data* sd,int n, unsigned short* item_list);
int npc_selllist(struct map_session_data* sd, int n, unsigned short* item_list);
void npc_parse_mob2(struct spawn_data* mob);
-struct npc_data* npc_add_warp(short from_mapid, short from_x, short from_y, short xs, short ys, unsigned short to_mapindex, short to_x, short to_y);
+struct npc_data* npc_add_warp(char* name, short from_mapid, short from_x, short from_y, short xs, short ys, unsigned short to_mapindex, short to_x, short to_y);
int npc_globalmessage(const char* name,const char* mes);
void npc_setcells(struct npc_data* nd);