doc/script_commands.txt | 18 ++++++------- src/map/script.c | 67 ++++++++++++++++++++++++++++++++++--------------- 2 files changed, 56 insertions(+), 29 deletions(-) diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 218bb48..81f1878 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -3096,7 +3096,7 @@ cards or if it's signed. //===================================== --------------------------------------- -*getmapxy("",,,{,""}) +*getmapxy("",,,{,""}) This function will locate a character object, NPC object or pet's coordinates and place their coordinates into the variables specified when @@ -3113,16 +3113,16 @@ Type is the type of object to search for: 5 - Mercenary object 6 - Elemental object -While 3 is meant to look for a monster object, no searching will be done -if you specify type 3, and the function will always return -1. +To look for a monster object, monster GID is required. The function will +always return -1 when search using string. -The search string is optional. If it is not specified, the location of the -invoking character will always be returned for types 0 and 2, the location -of the NPC running this function for type 1. -If a search string is specified, for types 0 and 1, the character or NPC -with the specified name will be located. If type is 3, the search will +The search index is optional. If it is not specified, the location of the +invoking character will always be returned for types 0, the location of the +NPC running this function for type 1. +If a search index is specified, for types 0 and 1, the character or NPC +with the specified name or GID will be located. If type is 2, the search will locate the current pet of the character who's name is given in the search -string, it will NOT locate a pet by name. +index, it will NOT locate a pet by name. What a mess. Example, a working and tested one now: diff --git a/src/map/script.c b/src/map/script.c index 54d8d33..1455a0f 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -14119,58 +14119,85 @@ BUILDIN(getmapxy) switch (type) { case 0: //Get Character Position - if( script_hasdata(st,6) ) - sd=map->nick2sd(script_getstr(st,6)); + if (script_hasdata(st,6)) { + if (script_isstringtype(st,6)) + sd = map->nick2sd(script_getstr(st,6)); + else + sd = map->id2sd(script_getnum(st,6)); + } else - sd=script->rid2sd(st); + sd = script->rid2sd(st); if (sd) bl = &sd->bl; break; case 1: //Get NPC Position - if( script_hasdata(st,6) ) - { + if (script_hasdata(st,6)) { struct npc_data *nd; - nd=npc->name2id(script_getstr(st,6)); + if (script_isstringtype(st,6)) + nd = npc->name2id(script_getstr(st,6)); + else + nd = map->id2nd(script_getnum(st,6)); if (nd) bl = &nd->bl; } else //In case the origin is not an npc? - bl=map->id2bl(st->oid); + bl = map->id2bl(st->oid); break; case 2: //Get Pet Position - if(script_hasdata(st,6)) - sd=map->nick2sd(script_getstr(st,6)); + if (script_hasdata(st,6)) { + if (script_isstringtype(st,6)) + sd = map->nick2sd(script_getstr(st,6)); + else + sd = map->id2sd(script_getnum(st,6)); + } else - sd=script->rid2sd(st); + sd = script->rid2sd(st); if (sd && sd->pd) bl = &sd->pd->bl; break; case 3: //Get Mob Position - break; //Not supported? + if (script_hasdata(st,6)) { + if (script_isstringtype(st,6)) + break; + bl = map->id2bl(script_getnum(st,6)); + } + break; case 4: //Get Homun Position - if(script_hasdata(st,6)) - sd=map->nick2sd(script_getstr(st,6)); + if (script_hasdata(st,6)) { + if (script_isstringtype(st,6)) + sd = map->nick2sd(script_getstr(st,6)); + else + sd = map->id2sd(script_getnum(st,6)); + } else - sd=script->rid2sd(st); + sd = script->rid2sd(st); if (sd && sd->hd) bl = &sd->hd->bl; break; case 5: //Get Mercenary Position - if(script_hasdata(st,6)) - sd=map->nick2sd(script_getstr(st,6)); + if (script_hasdata(st,6)) { + if (script_isstringtype(st,6)) + sd = map->nick2sd(script_getstr(st,6)); + else + sd = map->id2sd(script_getnum(st,6)); + } else - sd=script->rid2sd(st); + sd = script->rid2sd(st); if (sd && sd->md) bl = &sd->md->bl; break; case 6: //Get Elemental Position - if(script_hasdata(st,6)) - sd=map->nick2sd(script_getstr(st,6)); + if (script_hasdata(st,6)) { + if (script_isstringtype(st,6)) + sd = map->nick2sd(script_getstr(st,6)); + else + sd = map->id2sd(script_getnum(st,6)); + } else - sd=script->rid2sd(st); + sd = script->rid2sd(st); if (sd && sd->ed) bl = &sd->ed->bl;