adds missing mob skill conditions MSC_GROUNDATTACKED and MSC_DAMAGEDGT (#7138)

This commit is contained in:
munkrej
2022-09-22 15:30:17 +02:00
committed by GitHub
parent fa4666d7af
commit 4800b5bf72
7 changed files with 46 additions and 10 deletions

View File

@@ -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 },