Merged getmapmobs script function into mobcount (bugreport:244). See script commands documentation for details.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@15530 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
gepard1984 2012-01-31 15:15:32 +00:00
parent 6bd17da9a3
commit 0709205ee8
2 changed files with 29 additions and 61 deletions

View File

@ -3087,15 +3087,6 @@ Example:
---------------------------------------
*getmapmobs("<map name>")
This function will return the total count of monsters currently located on the
specified map. If the map name is given as "this", the map the invoking
character is on will be used. If the map is not found, or the invoker is not a
character while the map is "this", it will return -1.
---------------------------------------
*skillpointcount()
Returns the total amount of skill points a character possesses (SkillPoint+SP's used in skills)
@ -5012,14 +5003,19 @@ per 'db/mob_db.txt'. Type is the kind of information returned. Valid types are:
This function will count all the monsters on the specified map that have a given
event label and return the number or 0 if it can't find any. Naturally, only
monsters spawned with 'monster' and 'areamonster' script commands can be like
this.
However, apparently, if you pass this function an empty string for the event
label, it should return the total count of normal permanently respawning
monsters instead. With the current dynamic mobs system, where mobs are not kept
monsters spawned with 'monster' and 'areamonster' script commands can have non-empty
event label.
If you pass this function an empty string for the event label, it will return
the total count of monster without event label, including permanently spawning monsters.
With the dynamic mobs system enabled, where mobs are not kept
in memory for maps with no actual people playing on them, this will return a 0
for any such map.
If the event label is given as "all", all monsters will be counted, regardless of
having any event label attached.
If the map name is given as "this", the map the invoking character is on will
be used. If the map is not found, or the invoker is not a character while the map
is "this", it will return -1.
---------------------------------------

View File

@ -10489,7 +10489,7 @@ static int buildin_mobcount_sub(struct block_list *bl,va_list ap) // Added by Ro
{
char *event=va_arg(ap,char *);
struct mob_data *md = ((struct mob_data *)bl);
if(strcmp(event,md->npc_event)==0 && md->status.hp > 0)
if( md->status.hp > 0 && (!event || strcmp(event,md->npc_event) == 0) )
return 1;
return 0;
}
@ -10500,9 +10500,22 @@ BUILDIN_FUNC(mobcount) // Added by RoVeRT
int m;
mapname=script_getstr(st,2);
event=script_getstr(st,3);
if( strcmp(event, "all") == 0 )
event = NULL;
else
check_event(st, event);
if( (m = map_mapname2mapid(mapname)) < 0 ) {
if( strcmp(mapname, "this") == 0 ) {
struct map_session_data *sd = script_rid2sd(st);
if( sd )
m = sd->bl.m;
else {
script_pushint(st,-1);
return 0;
}
}
else if( (m = map_mapname2mapid(mapname)) < 0 ) {
script_pushint(st,-1);
return 0;
}
@ -10517,6 +10530,7 @@ BUILDIN_FUNC(mobcount) // Added by RoVeRT
return 0;
}
BUILDIN_FUNC(marriage)
{
const char *partner=script_getstr(st,2);
@ -11859,47 +11873,6 @@ BUILDIN_FUNC(jump_zero)
return 0;
}
/*==========================================
* GetMapMobs
returns mob counts on a set map:
e.g. GetMapMobs("prontera")
use "this" - for player's map
*------------------------------------------*/
BUILDIN_FUNC(getmapmobs)
{
const char *str=NULL;
int m=-1,bx,by;
int count=0;
struct block_list *bl;
str=script_getstr(st,2);
if(strcmp(str,"this")==0){
TBL_PC *sd=script_rid2sd(st);
if(sd)
m=sd->bl.m;
else{
script_pushint(st,-1);
return 0;
}
}else
m=map_mapname2mapid(str);
if(m < 0){
script_pushint(st,-1);
return 0;
}
for(by=0;by<=(map[m].ys-1)/BLOCK_SIZE;by++)
for(bx=0;bx<=(map[m].xs-1)/BLOCK_SIZE;bx++)
for( bl = map[m].block_mob[bx+by*map[m].bxs] ; bl != NULL ; bl = bl->next )
if(bl->x>=0 && bl->x<=map[m].xs-1 && bl->y>=0 && bl->y<=map[m].ys-1)
count++;
script_pushint(st,count);
return 0;
}
/*==========================================
* movenpc [MouseJstr]
*------------------------------------------*/
@ -16236,8 +16209,7 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(getmercinfo,"i?"),
BUILDIN_DEF(checkequipedcard,"i"),
BUILDIN_DEF(jump_zero,"il"), //for future jA script compatibility
BUILDIN_DEF(globalmes,"s?"),
BUILDIN_DEF(getmapmobs,"s"), //end jA addition
BUILDIN_DEF(globalmes,"s?"), //end jA addition
BUILDIN_DEF(unequip,"i"), // unequip command [Spectre]
BUILDIN_DEF(getstrlen,"s"), //strlen [Valaris]
BUILDIN_DEF(charisalpha,"si"), //isalpha [Valaris]