adds missing mob skill conditions MSC_GROUNDATTACKED and MSC_DAMAGEDGT (#7138)
This commit is contained in:
@@ -3697,7 +3697,7 @@ bool mob_chat_display_message(mob_data &md, uint16 msg_id) {
|
||||
/*==========================================
|
||||
* Skill use judging
|
||||
*------------------------------------------*/
|
||||
int mobskill_use(struct mob_data *md, t_tick tick, int event)
|
||||
int mobskill_use(struct mob_data *md, t_tick tick, int event, int64 damage)
|
||||
{
|
||||
struct block_list *fbl = NULL; //Friend bl, which can either be a BL_PC or BL_MOB depending on the situation. [Skotlex]
|
||||
struct block_list *bl;
|
||||
@@ -3718,7 +3718,8 @@ int mobskill_use(struct mob_data *md, t_tick tick, int event)
|
||||
//Pick a starting position and loop from that.
|
||||
i = battle_config.mob_ai&0x100?rnd()%ms.size():0;
|
||||
for (n = 0; n < ms.size(); i++, n++) {
|
||||
int c2, flag = 0;
|
||||
int64 c2;
|
||||
int flag = 0;
|
||||
|
||||
if (i == ms.size())
|
||||
i = 0;
|
||||
@@ -3743,6 +3744,10 @@ int mobskill_use(struct mob_data *md, t_tick tick, int event)
|
||||
flag = 1; //Trigger skill.
|
||||
else if (ms[i]->cond1 == MSC_SKILLUSED)
|
||||
flag = ((event & 0xffff) == MSC_SKILLUSED && ((event >> 16) == c2 || c2 == 0));
|
||||
else if (ms[i]->cond1 == MSC_GROUNDATTACKED && damage > 0)
|
||||
flag = ((event & 0xffff) == MSC_SKILLUSED && skill_get_inf((event >> 16))&INF_GROUND_SKILL);
|
||||
else if (ms[i]->cond1 == MSC_DAMAGEDGT && damage > 0 && !((event & 0xffff) == MSC_SKILLUSED)) //Avoid double check if skill has been used [datawulf]
|
||||
flag = (damage > c2);
|
||||
else if(event == -1){
|
||||
//Avoid entering on defined events to avoid "hyper-active skill use" due to the overflow of calls to this function in battle.
|
||||
switch (ms[i]->cond1)
|
||||
@@ -3928,7 +3933,7 @@ int mobskill_use(struct mob_data *md, t_tick tick, int event)
|
||||
/*==========================================
|
||||
* Skill use event processing
|
||||
*------------------------------------------*/
|
||||
int mobskill_event(struct mob_data *md, struct block_list *src, t_tick tick, int flag)
|
||||
int mobskill_event(struct mob_data *md, struct block_list *src, t_tick tick, int flag, int64 damage)
|
||||
{
|
||||
int target_id, res = 0;
|
||||
|
||||
@@ -3942,11 +3947,13 @@ int mobskill_event(struct mob_data *md, struct block_list *src, t_tick tick, int
|
||||
if (flag == -1)
|
||||
res = mobskill_use(md, tick, MSC_CASTTARGETED);
|
||||
else if ((flag&0xffff) == MSC_SKILLUSED)
|
||||
res = mobskill_use(md, tick, flag);
|
||||
res = mobskill_use(md, tick, flag, damage);
|
||||
else if (flag&BF_SHORT)
|
||||
res = mobskill_use(md, tick, MSC_CLOSEDATTACKED);
|
||||
res = mobskill_use(md, tick, MSC_CLOSEDATTACKED, damage);
|
||||
else if (flag&BF_LONG && !(flag&BF_MAGIC)) //Long-attacked should not include magic.
|
||||
res = mobskill_use(md, tick, MSC_LONGRANGEATTACKED);
|
||||
res = mobskill_use(md, tick, MSC_LONGRANGEATTACKED, damage);
|
||||
else if (damage > 0) //Trigger for any damage dealt from other attack types without affecting other triggers [datawulf]
|
||||
res = mobskill_use(md, tick, -2, damage);
|
||||
|
||||
if (!res)
|
||||
//Restore previous target only if skill condition failed to trigger. [Skotlex]
|
||||
@@ -5826,6 +5833,8 @@ static bool mob_parse_row_mobskilldb(char** str, int columns, int current)
|
||||
{ "alchemist", MSC_ALCHEMIST },
|
||||
{ "onspawn", MSC_SPAWN },
|
||||
{ "mobnearbygt", MSC_MOBNEARBYGT },
|
||||
{ "groundattacked", MSC_GROUNDATTACKED },
|
||||
{ "damagedgt", MSC_DAMAGEDGT },
|
||||
}, cond2[] ={
|
||||
{ "anybad", -1 },
|
||||
{ "stone", SC_STONE },
|
||||
|
||||
Reference in New Issue
Block a user