- Mobs now by default are "everyone's" enemy, so mobs are able to hit each another.
- Added monster_ai&0x400 to use the previous 'smart' criteria that prevents mobs from fighting each another. - Moved "unsetting" the angry mode from the mob_ai to the mob_damage function, where it'll work regardless of who hits the mob. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9481 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
eb8761b56b
commit
6d6615b687
@ -4,6 +4,9 @@ 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/12/12
|
2006/12/12
|
||||||
|
* Mobs now by default are "everyone's" enemy, so mobs are able to hit each another.
|
||||||
|
* Moved "unsetting" the angry mode from the mob_ai to the mob_damage
|
||||||
|
function, where it'll work regardless of who hits the mob.
|
||||||
* Modifed a bit the clif_change_look function, it should fix crashes with
|
* Modifed a bit the clif_change_look function, it should fix crashes with
|
||||||
the Xmas sprite when changing maps.
|
the Xmas sprite when changing maps.
|
||||||
* Fixed skills displaying a 32k damage when used while disguised. [Skotlex]
|
* Fixed skills displaying a 32k damage when used while disguised. [Skotlex]
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
Date Added
|
Date Added
|
||||||
|
|
||||||
|
2006/12/12
|
||||||
|
* Added monster_ai&0x400 to use the previous 'smart' criteria that prevents
|
||||||
|
mobs from fighting each another, since now they are all natural enemies
|
||||||
|
of each another. [Skotlex]
|
||||||
2006/11/29
|
2006/11/29
|
||||||
* Added Rachel Santuary to nomemo mapflags [Playtester]
|
* Added Rachel Santuary to nomemo mapflags [Playtester]
|
||||||
2006/11/22
|
2006/11/22
|
||||||
|
@ -69,6 +69,8 @@ monster_max_aspd: 199
|
|||||||
// the same skill, instead of only that particular entry (eg: Mob has heal
|
// the same skill, instead of only that particular entry (eg: Mob has heal
|
||||||
// on six lines for different conditions, when set, whenever one of the six
|
// on six lines for different conditions, when set, whenever one of the six
|
||||||
// trigger, all of them will share the delay)
|
// trigger, all of them will share the delay)
|
||||||
|
// 0x400: When set, mobs of the same AI type are allied (by default all mobs are
|
||||||
|
// enemies of each other).
|
||||||
// Example: 0x140 -> Chase players through warps + use skills in random order.
|
// Example: 0x140 -> Chase players through warps + use skills in random order.
|
||||||
monster_ai: 0
|
monster_ai: 0
|
||||||
|
|
||||||
|
@ -3254,11 +3254,23 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
|
|||||||
case BL_MOB:
|
case BL_MOB:
|
||||||
{
|
{
|
||||||
TBL_MOB *md = (TBL_MOB*)t_bl;
|
TBL_MOB *md = (TBL_MOB*)t_bl;
|
||||||
if(md->state.killer) //Enable retaliation
|
|
||||||
state |= BCT_ENEMY;
|
|
||||||
|
|
||||||
if (!agit_flag && md->guardian_data && md->guardian_data->guild_id)
|
if (!agit_flag && md->guardian_data && md->guardian_data->guild_id)
|
||||||
return 0; //Disable guardians/emperiums owned by Guilds on non-woe times.
|
return 0; //Disable guardians/emperiums owned by Guilds on non-woe times.
|
||||||
|
if(md->state.killer || !(battle_config.mob_ai&0x400))
|
||||||
|
state |= BCT_ENEMY; //By default everyone hates mobs.
|
||||||
|
else
|
||||||
|
{ //Smart enemy criteria.
|
||||||
|
if (!md->special_state.ai) { //Normal mobs.
|
||||||
|
if (s_bl->type == BL_MOB && !((TBL_MOB*)s_bl)->special_state.ai)
|
||||||
|
state |= BCT_PARTY; //Normal mobs with no ai are friends.
|
||||||
|
else
|
||||||
|
state |= BCT_ENEMY; //However, all else are enemies.
|
||||||
|
} else {
|
||||||
|
if (s_bl->type == BL_MOB && !((TBL_MOB*)s_bl)->special_state.ai)
|
||||||
|
state |= BCT_ENEMY; //Natural enemy for AI mobs are normal mobs.
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3335,15 +3347,6 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
|
|||||||
return 0; //Disable guardians/emperium owned by Guilds on non-woe times.
|
return 0; //Disable guardians/emperium owned by Guilds on non-woe times.
|
||||||
if(md->state.killer) // Is on a rampage too :D
|
if(md->state.killer) // Is on a rampage too :D
|
||||||
state |= BCT_ENEMY;
|
state |= BCT_ENEMY;
|
||||||
else if (!md->special_state.ai) { //Normal mobs.
|
|
||||||
if (t_bl->type == BL_MOB && !((TBL_MOB*)t_bl)->special_state.ai)
|
|
||||||
state |= BCT_PARTY; //Normal mobs with no ai are friends.
|
|
||||||
else
|
|
||||||
state |= BCT_ENEMY; //However, all else are enemies.
|
|
||||||
} else {
|
|
||||||
if (t_bl->type == BL_MOB && !((TBL_MOB*)t_bl)->special_state.ai)
|
|
||||||
state |= BCT_ENEMY; //Natural enemy for AI mobs are normal mobs.
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -1162,14 +1162,6 @@ static int mob_ai_sub_hard(struct block_list *bl,va_list ap)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (md->state.aggressive && md->attacked_id == md->target_id)
|
|
||||||
{ //No longer aggressive, change to retaliate AI.
|
|
||||||
md->state.aggressive = 0;
|
|
||||||
if(md->state.skillstate== MSS_ANGRY)
|
|
||||||
md->state.skillstate = MSS_BERSERK;
|
|
||||||
if(md->state.skillstate== MSS_FOLLOW)
|
|
||||||
md->state.skillstate = MSS_RUSH;
|
|
||||||
}
|
|
||||||
//Clear it since it's been checked for already.
|
//Clear it since it's been checked for already.
|
||||||
md->attacked_id = 0;
|
md->attacked_id = 0;
|
||||||
}
|
}
|
||||||
@ -1582,8 +1574,18 @@ void mob_damage(struct mob_data *md, struct block_list *src, int damage)
|
|||||||
{
|
{
|
||||||
int char_id = 0, flag = 0;
|
int char_id = 0, flag = 0;
|
||||||
|
|
||||||
if (damage > 0) //Store total damage...
|
if (damage > 0)
|
||||||
|
{ //Store total damage...
|
||||||
md->tdmg+=damage;
|
md->tdmg+=damage;
|
||||||
|
if (md->state.aggressive)
|
||||||
|
{ //No longer aggressive, change to retaliate AI.
|
||||||
|
md->state.aggressive = 0;
|
||||||
|
if(md->state.skillstate== MSS_ANGRY)
|
||||||
|
md->state.skillstate = MSS_BERSERK;
|
||||||
|
if(md->state.skillstate== MSS_FOLLOW)
|
||||||
|
md->state.skillstate = MSS_RUSH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(md->guardian_data && md->guardian_data->number < MAX_GUARDIANS) // guardian hp update [Valaris] (updated by [Skotlex])
|
if(md->guardian_data && md->guardian_data->number < MAX_GUARDIANS) // guardian hp update [Valaris] (updated by [Skotlex])
|
||||||
md->guardian_data->castle->guardian[md->guardian_data->number].hp = md->status.hp;
|
md->guardian_data->castle->guardian[md->guardian_data->number].hp = md->status.hp;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user