From 647558b6b91166728157e6d5cfcdb14891295a66 Mon Sep 17 00:00:00 2001 From: ultramage Date: Sat, 3 Nov 2007 22:07:47 +0000 Subject: Added script function 'strnpcinfo', for increased npc awareness (originally from jAthena). Updated script reference doc. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11650 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/map.c | 6 ++++++ src/map/map.h | 1 + src/map/script.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) (limited to 'src/map') diff --git a/src/map/map.c b/src/map/map.c index cc09132f5..590cafc5c 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -1781,6 +1781,12 @@ struct map_session_data * map_id2sd(int id) return (struct map_session_data*)idb_get(pc_db,id); } +struct npc_data * map_id2nd(int id) +{// just a id2bl lookup because there's no npc_db + if (id <= 0) return NULL; + return (struct npc_data*)map_id2bl(id); +} + /// Returns the nick of the target charid or NULL if unknown (requests the nick to the char server). const char* map_charid2nick(int charid) { diff --git a/src/map/map.h b/src/map/map.h index c4526bcb6..f5fe6a4b6 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -1324,6 +1324,7 @@ const char* map_charid2nick(int charid); struct map_session_data* map_charid2sd(int charid); struct map_session_data * map_id2sd(int); +struct npc_data * map_id2nd(int); struct block_list * map_id2bl(int); #define map_id2index(id) map[(id)].index diff --git a/src/map/script.c b/src/map/script.c index 0a308d3e6..a1b0834e0 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -6127,6 +6127,51 @@ BUILDIN_FUNC(strcharinfo) return 0; } +/*========================================== + * 呼び出し元のNPC情報を取得する + *------------------------------------------*/ +BUILDIN_FUNC(strnpcinfo) +{ + TBL_NPC* nd; + int num; + char *buf,*name=NULL; + + nd = map_id2nd(st->oid); + if (!nd) { + script_pushconststr(st, ""); + return 0; + } + + num = script_getnum(st,2); + switch(num){ + case 0: // display name + name = aStrdup(nd->name); + break; + case 1: // visible part of display name name + if((buf = strchr(nd->name,'#')) != NULL) + { + name = aStrdup(nd->name); + name[buf - nd->name] = 0; + } + break; + case 2: // # fragment + if((buf = strchr(nd->name,'#')) != NULL) + name = aStrdup(buf+1); + break; + case 3: // unique name + name = aStrdup(nd->exname); + break; + } + + if(name) + script_pushstr(st, name); + else + script_pushconststr(st, ""); + + return 0; +} + + unsigned int equip[10]={EQP_HEAD_TOP,EQP_ARMOR,EQP_HAND_L,EQP_HAND_R,EQP_GARMENT,EQP_SHOES,EQP_ACC_L,EQP_ACC_R,EQP_HEAD_MID,EQP_HEAD_LOW}; /*========================================== @@ -12870,6 +12915,7 @@ struct script_function buildin_func[] = { BUILDIN_DEF(getguildmaster,"i"), BUILDIN_DEF(getguildmasterid,"i"), BUILDIN_DEF(strcharinfo,"i"), + BUILDIN_DEF(strnpcinfo,"i"), BUILDIN_DEF(getequipid,"i"), BUILDIN_DEF(getequipname,"i"), BUILDIN_DEF(getbrokenid,"i"), // [Valaris] -- cgit v1.2.3-60-g2f50