- Cleaned up getmapxy script function, also added support for type 4 so that it returns a player's homunculus position if such exists.
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8459 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
a288f9c512
commit
db3fdbe23b
@ -4,6 +4,8 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
|
|||||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
2006/08/23
|
2006/08/23
|
||||||
|
* Cleaned up getmapxy script function, also added support for type 4 so
|
||||||
|
that it returns a player's homunculus position if such exists. [Skotlex]
|
||||||
* SC_ARMOR_ELEMENT looks like gone away from status_change_start since ... rev 6791.
|
* SC_ARMOR_ELEMENT looks like gone away from status_change_start since ... rev 6791.
|
||||||
Try to reimplement it. [Toms]
|
Try to reimplement it. [Toms]
|
||||||
* Fixed HVAN_EXPLOSION [Skotlex]
|
* Fixed HVAN_EXPLOSION [Skotlex]
|
||||||
|
@ -10470,6 +10470,7 @@ int buildin_getsavepoint(struct script_state *st)
|
|||||||
* 1 - NPC coord
|
* 1 - NPC coord
|
||||||
* 2 - Pet coord
|
* 2 - Pet coord
|
||||||
* 3 - Mob coord (not released)
|
* 3 - Mob coord (not released)
|
||||||
|
* 4 - Homun coord
|
||||||
* CharName$ - Name object. If miss or "this" the current object
|
* CharName$ - Name object. If miss or "this" the current object
|
||||||
*
|
*
|
||||||
* Return:
|
* Return:
|
||||||
@ -10478,9 +10479,8 @@ int buildin_getsavepoint(struct script_state *st)
|
|||||||
*------------------------------------------
|
*------------------------------------------
|
||||||
*/
|
*/
|
||||||
int buildin_getmapxy(struct script_state *st){
|
int buildin_getmapxy(struct script_state *st){
|
||||||
|
struct block_list *bl = NULL;
|
||||||
struct map_session_data *sd=NULL;
|
struct map_session_data *sd=NULL;
|
||||||
struct npc_data *nd;
|
|
||||||
struct pet_data *pd;
|
|
||||||
|
|
||||||
int num;
|
int num;
|
||||||
char *name;
|
char *name;
|
||||||
@ -10493,20 +10493,20 @@ int buildin_getmapxy(struct script_state *st){
|
|||||||
if( st->stack->stack_data[st->start+2].type!=C_NAME ){
|
if( st->stack->stack_data[st->start+2].type!=C_NAME ){
|
||||||
ShowWarning("script: buildin_getmapxy: not mapname variable\n");
|
ShowWarning("script: buildin_getmapxy: not mapname variable\n");
|
||||||
push_val(st->stack,C_INT,-1);
|
push_val(st->stack,C_INT,-1);
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
if( st->stack->stack_data[st->start+3].type!=C_NAME ){
|
if( st->stack->stack_data[st->start+3].type!=C_NAME ){
|
||||||
ShowWarning("script: buildin_getmapxy: not mapx variable\n");
|
ShowWarning("script: buildin_getmapxy: not mapx variable\n");
|
||||||
push_val(st->stack,C_INT,-1);
|
push_val(st->stack,C_INT,-1);
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
if( st->stack->stack_data[st->start+4].type!=C_NAME ){
|
if( st->stack->stack_data[st->start+4].type!=C_NAME ){
|
||||||
ShowWarning("script: buildin_getmapxy: not mapy variable\n");
|
ShowWarning("script: buildin_getmapxy: not mapy variable\n");
|
||||||
push_val(st->stack,C_INT,-1);
|
push_val(st->stack,C_INT,-1);
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//??????????? >>> Possible needly check function parameters on C_STR,C_INT,C_INT <<< ???????????//
|
//??????????? >>> Possible needly check function parameters on C_STR,C_INT,C_INT <<< ???????????//
|
||||||
type=conv_num(st,& (st->stack->stack_data[st->start+5]));
|
type=conv_num(st,& (st->stack->stack_data[st->start+5]));
|
||||||
|
|
||||||
switch (type){
|
switch (type){
|
||||||
@ -10516,61 +10516,49 @@ int buildin_getmapxy(struct script_state *st){
|
|||||||
else
|
else
|
||||||
sd=script_rid2sd(st);
|
sd=script_rid2sd(st);
|
||||||
|
|
||||||
if ( sd==NULL ) { //wrong char name or char offline
|
if (sd)
|
||||||
push_val(st->stack,C_INT,-1);
|
bl = &sd->bl;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
x=sd->bl.x;
|
|
||||||
y=sd->bl.y;
|
|
||||||
memcpy(mapname,mapindex_id2name(sd->mapindex), MAP_NAME_LENGTH);
|
|
||||||
break;
|
break;
|
||||||
case 1: //Get NPC Position
|
case 1: //Get NPC Position
|
||||||
if( st->end > st->start+6 )
|
if( st->end > st->start+6 )
|
||||||
|
{
|
||||||
|
struct npc_data *nd;
|
||||||
nd=npc_name2id(conv_str(st,& (st->stack->stack_data[st->start+6])));
|
nd=npc_name2id(conv_str(st,& (st->stack->stack_data[st->start+6])));
|
||||||
else
|
if (nd)
|
||||||
nd=(struct npc_data *)map_id2bl(st->oid);
|
bl = &nd->bl;
|
||||||
|
} else //In case the origin is not an npc?
|
||||||
if ( nd==NULL ) { //wrong npc name or char offline
|
bl=map_id2bl(st->oid);
|
||||||
push_val(st->stack,C_INT,-1);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
x=nd->bl.x;
|
|
||||||
y=nd->bl.y;
|
|
||||||
memcpy(mapname, map[nd->bl.m].name, MAP_NAME_LENGTH);
|
|
||||||
break;
|
break;
|
||||||
case 2: //Get Pet Position
|
case 2: //Get Pet Position
|
||||||
if( st->end>st->start+6 )
|
if(st->end>st->start+6)
|
||||||
sd=map_nick2sd(conv_str(st,& (st->stack->stack_data[st->start+6])));
|
sd=map_nick2sd(conv_str(st,& (st->stack->stack_data[st->start+6])));
|
||||||
else
|
else
|
||||||
sd=script_rid2sd(st);
|
sd=script_rid2sd(st);
|
||||||
|
|
||||||
if ( sd==NULL ) { //wrong char name or char offline
|
if (sd && sd->pd)
|
||||||
push_val(st->stack,C_INT,-1);
|
bl = &sd->pd->bl;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
pd=sd->pd;
|
|
||||||
|
|
||||||
if(pd==NULL){ //pet data not found
|
|
||||||
push_val(st->stack,C_INT,-1);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
x=pd->bl.x;
|
|
||||||
y=pd->bl.y;
|
|
||||||
memcpy(mapname, map[pd->bl.m].name, MAP_NAME_LENGTH);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: //Get Mob Position
|
case 3: //Get Mob Position
|
||||||
push_val(st->stack,C_INT,-1);
|
break; //Not supported?
|
||||||
return 0;
|
case 4: //Get Homun Position
|
||||||
default: //Wrong type parameter
|
if(st->end>st->start+6)
|
||||||
|
sd=map_nick2sd(conv_str(st,& (st->stack->stack_data[st->start+6])));
|
||||||
|
else
|
||||||
|
sd=script_rid2sd(st);
|
||||||
|
|
||||||
|
if (sd && sd->hd)
|
||||||
|
bl = &sd->hd->bl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!bl) { //No object found.
|
||||||
push_val(st->stack,C_INT,-1);
|
push_val(st->stack,C_INT,-1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
x= bl->x;
|
||||||
|
y= bl->y;
|
||||||
|
memcpy(mapname, map[bl->m].name, MAP_NAME_LENGTH);
|
||||||
|
|
||||||
//Set MapName$
|
//Set MapName$
|
||||||
num=st->stack->stack_data[st->start+2].u.num;
|
num=st->stack->stack_data[st->start+2].u.num;
|
||||||
name=(char *)(str_buf+str_data[num&0x00ffffff].str);
|
name=(char *)(str_buf+str_data[num&0x00ffffff].str);
|
||||||
@ -10580,7 +10568,6 @@ int buildin_getmapxy(struct script_state *st){
|
|||||||
sd=script_rid2sd(st);
|
sd=script_rid2sd(st);
|
||||||
else
|
else
|
||||||
sd=NULL;
|
sd=NULL;
|
||||||
|
|
||||||
set_reg(st,sd,num,name,(void*)mapname,st->stack->stack_data[st->start+2].ref);
|
set_reg(st,sd,num,name,(void*)mapname,st->stack->stack_data[st->start+2].ref);
|
||||||
|
|
||||||
//Set MapX
|
//Set MapX
|
||||||
@ -10594,7 +10581,6 @@ int buildin_getmapxy(struct script_state *st){
|
|||||||
sd=NULL;
|
sd=NULL;
|
||||||
set_reg(st,sd,num,name,(void*)x,st->stack->stack_data[st->start+3].ref);
|
set_reg(st,sd,num,name,(void*)x,st->stack->stack_data[st->start+3].ref);
|
||||||
|
|
||||||
|
|
||||||
//Set MapY
|
//Set MapY
|
||||||
num=st->stack->stack_data[st->start+4].u.num;
|
num=st->stack->stack_data[st->start+4].u.num;
|
||||||
name=(char *)(str_buf+str_data[num&0x00ffffff].str);
|
name=(char *)(str_buf+str_data[num&0x00ffffff].str);
|
||||||
@ -10604,7 +10590,6 @@ int buildin_getmapxy(struct script_state *st){
|
|||||||
sd=script_rid2sd(st);
|
sd=script_rid2sd(st);
|
||||||
else
|
else
|
||||||
sd=NULL;
|
sd=NULL;
|
||||||
|
|
||||||
set_reg(st,sd,num,name,(void*)y,st->stack->stack_data[st->start+4].ref);
|
set_reg(st,sd,num,name,(void*)y,st->stack->stack_data[st->start+4].ref);
|
||||||
|
|
||||||
//Return Success value
|
//Return Success value
|
||||||
|
Loading…
x
Reference in New Issue
Block a user