- Cleaned up status_get_party/guild_id, it should also fix a possible crash when invoking such a functio on a masterless pet.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8889 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
skotlex 2006-09-27 16:52:41 +00:00
parent 9eeaa9cb7e
commit 32b53e9ba2
2 changed files with 41 additions and 23 deletions

View File

@ -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/09/27 2006/09/27
* Cleaned up status_get_party/guild_id, it should also fix a possible crash
when invoking such a functio on a masterless pet. [Skotlex]
* Sharp-Shooting will now display a skill animation. [Skotlex] * Sharp-Shooting will now display a skill animation. [Skotlex]
* The no_spawn_on_player setting will now also work for static mobs, but * The no_spawn_on_player setting will now also work for static mobs, but
only if the setting is set to 100 or higher. [Skotlex] only if the setting is set to 100 or higher. [Skotlex]

View File

@ -4055,12 +4055,16 @@ unsigned char status_get_attack_lelement(struct block_list *bl)
int status_get_party_id(struct block_list *bl) int status_get_party_id(struct block_list *bl)
{ {
nullpo_retr(0, bl); nullpo_retr(0, bl);
if(bl->type==BL_PC) switch (bl->type) {
return ((struct map_session_data *)bl)->status.party_id; case BL_PC:
if(bl->type==BL_PET) return ((TBL_PC*)bl)->status.party_id;
return ((struct pet_data *)bl)->msd->status.party_id; case BL_PET:
if(bl->type==BL_MOB){ if (((TBL_PET*)bl)->msd)
struct mob_data *md=(struct mob_data *)bl; return ((TBL_PET*)bl)->msd->status.party_id;
break;
case BL_MOB:
{
struct mob_data *md=(TBL_MOB*)bl;
if( md->master_id>0 ) if( md->master_id>0 )
{ {
struct map_session_data *msd; struct map_session_data *msd;
@ -4068,23 +4072,30 @@ int status_get_party_id(struct block_list *bl)
return msd->status.party_id; return msd->status.party_id;
return -md->master_id; return -md->master_id;
} }
return 0; //No party.
} }
if(bl->type==BL_HOM && ((TBL_HOM*)bl)->master) break;
case BL_HOM:
if (((TBL_HOM*)bl)->master)
return ((TBL_HOM*)bl)->master->status.party_id; return ((TBL_HOM*)bl)->master->status.party_id;
if(bl->type==BL_SKILL) break;
return ((struct skill_unit *)bl)->group->party_id; case BL_SKILL:
return ((TBL_SKILL*)bl)->group->party_id;
}
return 0; return 0;
} }
int status_get_guild_id(struct block_list *bl) int status_get_guild_id(struct block_list *bl)
{ {
nullpo_retr(0, bl); nullpo_retr(0, bl);
if(bl->type==BL_PC) switch (bl->type) {
return ((struct map_session_data *)bl)->status.guild_id; case BL_PC:
if(bl->type==BL_PET) return ((TBL_PC*)bl)->status.guild_id;
return ((struct pet_data *)bl)->msd->status.guild_id; case BL_PET:
if(bl->type==BL_MOB) if (((TBL_PET*)bl)->msd)
return ((TBL_PET*)bl)->msd->status.guild_id;
break;
case BL_MOB:
{ {
struct map_session_data *msd; struct map_session_data *msd;
struct mob_data *md = (struct mob_data *)bl; struct mob_data *md = (struct mob_data *)bl;
@ -4092,14 +4103,19 @@ int status_get_guild_id(struct block_list *bl)
return md->guardian_data->guild_id; return md->guardian_data->guild_id;
if (md->special_state.ai && (msd = map_id2sd(md->master_id)) != NULL) if (md->special_state.ai && (msd = map_id2sd(md->master_id)) != NULL)
return msd->status.guild_id; //Alchemist's mobs [Skotlex] return msd->status.guild_id; //Alchemist's mobs [Skotlex]
return 0; //No guild.
} }
if(bl->type==BL_HOM && ((TBL_HOM*)bl)->master) break;
case BL_HOM:
if (((TBL_HOM*)bl)->master)
return ((TBL_HOM*)bl)->master->status.guild_id; return ((TBL_HOM*)bl)->master->status.guild_id;
if (bl->type == BL_NPC && bl->subtype == SCRIPT) break;
case BL_NPC:
if (bl->subtype == SCRIPT)
return ((TBL_NPC*)bl)->u.scr.guild_id; return ((TBL_NPC*)bl)->u.scr.guild_id;
if(bl->type==BL_SKILL) break;
return ((struct skill_unit *)bl)->group->guild_id; case BL_SKILL:
return ((TBL_SKILL*)bl)->group->guild_id;
}
return 0; return 0;
} }