summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt2
-rw-r--r--doc/script_commands.txt16
-rw-r--r--src/map/map.c6
-rw-r--r--src/map/map.h1
-rw-r--r--src/map/script.c46
5 files changed, 70 insertions, 1 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index a386f3653..633a2506c 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,8 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+2007/11/03
+ * Added jA script function 'strnpcinfo', for increased npc awareness
2007/11/02
* Fixed one wrong return value in buildin_getcharid (bugreport:33)
* Removed the big list of BUILDIN_FUNC() declarations in script.c,
diff --git a/doc/script_commands.txt b/doc/script_commands.txt
index 6d9213b5e..41c455a7d 100644
--- a/doc/script_commands.txt
+++ b/doc/script_commands.txt
@@ -9,7 +9,7 @@
//= Maeki Rika - A section on general concepts and lots of
//= other updates and additions.
//===== Version ===========================================
-//= 3.08.20071018
+//= 3.09.20071103
//=========================================================
//= 1.0 - First release, filled will as much info as I could
//= remember or figure out, most likely there are errors,
@@ -88,6 +88,8 @@
//= Fixed 'duplicate' missing the target 'name' parameter! [ultramage]
//= 3.08.20071018
//= Clarified how npc names work. [FlavioJS]
+//= 3.09.20071103
+//= Added script function 'strnpcinfo' [ultramage]
//===== Description =======================================
//= A reference manual for the eAthena scripting language,
//= sorted out depending on their functionality.
@@ -1822,6 +1824,18 @@ returned when requesting that information.
---------------------------------------
+*strnpcinfo(<type>)
+
+This function will return the various parts of the name of the calling npc.
+Whatever it returns is determined by type.
+
+ 0 - The NPC's display name (visible#hidden)
+ 1 - The visible part of the NPC's display name
+ 2 - The hidden part of the NPC's display name
+ 3 - The NPC's unique name (::name)
+
+---------------------------------------
+
*getarraysize(<array name>)
This function returns the number of values that are contained inside the
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]