adds missing mob skill conditions MSC_GROUNDATTACKED and MSC_DAMAGEDGT (#7138)
This commit is contained in:
parent
fa4666d7af
commit
4800b5bf72
@ -44,6 +44,8 @@
|
||||
// casttargeted When a target is in cast range (no condition value).
|
||||
// rudeattacked When mob is rude attacked (no condition value).
|
||||
// mobnearbygt When monsters in range become greater than specified number.
|
||||
// groundattacked When mob is hit by ground targeted skill (no condition value).
|
||||
// damagedgt When single attack deals greater damage than specified number.
|
||||
//
|
||||
// Status abnormalities specified through the statuson/statusoff system:
|
||||
// anybad (any type of state change) / stone / freeze / stun / sleep /
|
||||
|
@ -45,6 +45,8 @@
|
||||
// casttargeted When a target is in cast range (no condition value).
|
||||
// rudeattacked When mob is rude attacked (no condition value).
|
||||
// mobnearbygt When monsters in range become greater than specified number.
|
||||
// groundattacked When mob is hit by ground targeted skill (no condition value).
|
||||
// damagedgt When single attack deals greater damage than specified number.
|
||||
//
|
||||
// Status abnormalities specified through the statuson/statusoff system:
|
||||
// anybad (any type of state change) / stone / freeze / stun / sleep /
|
||||
|
@ -45,6 +45,8 @@
|
||||
// casttargeted When a target is in cast range (no condition value).
|
||||
// rudeattacked When mob is rude attacked (no condition value).
|
||||
// mobnearbygt When monsters in range become greater than specified number.
|
||||
// groundattacked When mob is hit by ground targeted skill (no condition value).
|
||||
// damagedgt When single attack deals greater damage than specified number.
|
||||
//
|
||||
// Status abnormalities specified through the statuson/statusoff system:
|
||||
// anybad (any type of state change) / stone / freeze / stun / sleep /
|
||||
@ -172,6 +174,7 @@
|
||||
1038,Osiris@NPC_DARKBREATH,attack,202,5,500,0,5000,no,target,always,0,,,,,,9,
|
||||
1038,Osiris@NPC_DARKBREATH,chase,202,5,500,0,5000,no,target,always,0,,,,,,9,
|
||||
1038,Osiris@NPC_POISONATTACK,attack,188,5,2000,0,5000,no,target,always,0,,,,,,9,
|
||||
1038,Osiris@NPC_ALLHEAL,attack,687,1,10000,0,100000,yes,self,damagedgt,50000,,,,,,,
|
||||
1038,Osiris@NPC_SUMMONSLAVE,attack,196,5,10000,700,10000,no,self,slavele,3,1522,,,,,,
|
||||
1038,Osiris@NPC_SUMMONSLAVE,idle,196,5,10000,700,10000,no,self,slavele,3,1522,,,,,,
|
||||
1038,Osiris@NPC_SUMMONSLAVE,idle,196,7,10000,0,0,no,self,onspawn,0,1029,,,,,,
|
||||
@ -200,6 +203,7 @@
|
||||
1039,Baphomet@WZ_VERMILION,attack,85,21,2000,500,2000,no,target,always,0,,,,,,29,
|
||||
1039,Baphomet@WZ_VERMILION,chase,85,21,5000,500,2000,no,target,skillused,18,,,,,,29,
|
||||
1039,Baphomet@WZ_VERMILION,chase,85,21,2000,500,2000,no,target,always,0,,,,,,29,
|
||||
1039,Baphomet@NPC_ALLHEAL,attack,687,1,10000,3000,100000,no,self,damagedgt,50000,,,,,,,
|
||||
1039,Baphomet@AL_HEAL,idle,28,11,10000,0,5000,yes,self,myhpltmaxrate,50,,,,,,,
|
||||
1040,Golem@NPC_EMOTION,idle,197,1,2000,0,5000,yes,self,always,0,9,,,,,,
|
||||
1040,Golem@NPC_STUNATTACK,attack,179,3,500,1500,5000,no,target,always,0,,,,,,6,
|
||||
@ -863,6 +867,7 @@
|
||||
1159,Phreeoni@AL_HEAL,idle,28,11,10000,0,5000,yes,self,mystatuson,hiding,,,,,,,
|
||||
1159,Phreeoni@WZ_HEAVENDRIVE,chase,91,5,10000,0,5000,no,target,skillused,18,,,,,,19,
|
||||
1159,Phreeoni@AL_HEAL,idle,28,11,10000,0,10000,yes,self,myhpltmaxrate,50,,,,,,,
|
||||
1159,Phreeoni@NPC_ALLHEAL,attack,687,1,10000,1000,120000,no,self,damagedgt,50000,,,,,,,
|
||||
1160,Piere@NPC_EMOTION,loot,197,1,2000,0,5000,yes,self,always,0,19,,,,,,
|
||||
1160,Piere@NPC_GROUNDATTACK,attack,185,2,500,500,5000,no,target,always,0,,,,,,6,
|
||||
1161,Plankton@NPC_WATERATTACK,attack,184,1,2000,0,5000,yes,target,always,0,,,,,,,
|
||||
@ -1787,6 +1792,7 @@
|
||||
1389,Dracula@NPC_INVISIBLE,chase,353,1,2000,200,5000,yes,self,always,0,,,,,,,
|
||||
1389,Dracula@NPC_SILENCEATTACK,attack,178,5,2000,0,5000,no,target,always,0,,,,,,,
|
||||
1389,Dracula@NPC_SILENCEATTACK,chase,178,5,2000,0,5000,no,target,always,0,,,,,,,
|
||||
1389,Dracula@SA_LANDPROTECTOR,attack,288,3,3000,0,5000,yes,self,groundattacked,0,,,,,,,
|
||||
1389,Dracula@NPC_SUMMONSLAVE,attack,196,16,10000,700,5000,no,self,slavele,5,1419,,,,,,
|
||||
1389,Dracula@NPC_SUMMONSLAVE,idle,196,16,10000,700,5000,no,self,slavele,5,1419,,,,,,
|
||||
1389,Dracula@NPC_ENERGYDRAIN,chase,200,1,10000,0,0,yes,target,skillused,18,,,,,,,
|
||||
@ -1990,6 +1996,7 @@
|
||||
1418,Evil Snake Lord@NPC_WIDESILENCE,attack,663,5,10000,1000,20000,no,self,myhpltmaxrate,80,,,,,,32,
|
||||
1418,Evil Snake Lord@MG_FROSTDIVER,attack,15,40,2000,0,5000,yes,target,always,0,,,,,,,
|
||||
1418,Evil Snake Lord@MG_FROSTDIVER,chase,15,40,2000,0,0,yes,target,always,0,,,,,,,
|
||||
1418,Evil Snake Lord@NPC_ALLHEAL,attack,687,1,5000,1500,60000,no,self,damagedgt,30000,,,,,,20,
|
||||
1418,Evil Snake Lord@NPC_SHIELDBRAKE,attack,346,10,2000,0,0,yes,target,always,0,,,,,,2,
|
||||
1418,Evil Snake Lord@NPC_CALLSLAVE,attack,352,1,10000,0,30000,yes,self,always,0,,,,,,,
|
||||
1418,Evil Snake Lord@NPC_CALLSLAVE,idle,352,1,10000,0,30000,yes,self,always,0,,,,,,,
|
||||
@ -2591,6 +2598,7 @@
|
||||
1511,Amon Ra@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,,,,,,,,
|
||||
1511,Amon Ra@AL_TELEPORT,walk,26,1,5000,0,5000,yes,self,rudeattacked,,,,,,,,
|
||||
1511,Amon Ra@AL_HEAL,idle,28,11,10000,0,10000,yes,self,myhpltmaxrate,50,,,,,,,
|
||||
1511,Amon Ra@WZ_STORMGUST,idle,89,10,3000,0,0,yes,target,groundattacked,0,,,,,,9,
|
||||
1512,Hyegun@MO_BODYRELOCATION,chase,264,1,2000,500,5000,no,target,always,0,,,,,,,
|
||||
1512,Hyegun@AS_SONICBLOW,attack,136,5,500,1000,30000,no,target,always,0,,,,,,,
|
||||
1512,Hyegun@NPC_CRITICALSLASH,attack,170,1,500,0,5000,yes,target,always,0,,,,,,,
|
||||
@ -3813,6 +3821,7 @@
|
||||
1719,Detale@AL_HEAL,idle,28,11,10000,0,5000,yes,self,myhpltmaxrate,30,,,,,,47,
|
||||
1719,Detale@AL_HEAL,attack,28,11,10000,0,5000,yes,self,myhpltmaxrate,30,,,,,,47,
|
||||
1719,Detale@AL_HEAL,chase,28,11,10000,0,5000,yes,self,myhpltmaxrate,30,,,,,,47,
|
||||
1719,Detale@NPC_COMET,attack,708,5,5000,2000,60000,no,target,groundattacked,0,,,,,,29,
|
||||
1720,Hydro@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,,,,,,,,
|
||||
1720,Hydro@AL_HEAL,idle,28,11,10000,0,5000,yes,self,myhpltmaxrate,30,,,,,,47,
|
||||
1720,Hydro@AL_HEAL,attack,28,11,10000,0,5000,yes,self,myhpltmaxrate,30,,,,,,47,
|
||||
@ -7819,6 +7828,7 @@
|
||||
2251,Gioia@NPC_EARTHQUAKE,chase,653,5,10000,500,20000,no,self,myhpltmaxrate,40,,,,,,,
|
||||
2251,Gioia@NPC_EARTHQUAKE,attack,653,5,10000,500,20000,no,self,myhpltmaxrate,40,,,,,,,
|
||||
2251,Gioia@NPC_PULSESTRIKE,attack,661,5,10000,0,15000,yes,self,myhpltmaxrate,60,,,,,,,
|
||||
2251,Gioia@NPC_ALLHEAL,attack,687,1,10000,1500,120000,no,self,damagedgt,50000,,,,,,,
|
||||
2251,Gioia@NPC_DRAGONFEAR,attack,659,5,10000,0,10000,yes,self,always,0,,,,,,,
|
||||
2251,Gioia@NPC_DRAGONFEAR,chase,659,5,10000,0,10000,yes,self,always,0,,,,,,,
|
||||
2251,Gioia@WZ_METEOR,idle,83,9,10000,0,5000,yes,target,always,0,,,,,,,
|
||||
@ -8217,6 +8227,7 @@
|
||||
2362,Nightmare Amon Ra@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,,,,,,,,
|
||||
2362,Nightmare Amon Ra@AL_TELEPORT,walk,26,1,5000,0,5000,yes,self,rudeattacked,,,,,,,,
|
||||
2362,Nightmare Amon Ra@AL_HEAL,idle,28,11,10000,0,10000,yes,self,myhpltmaxrate,50,,,,,,,
|
||||
2362,Nightmare Amon Ra@WZ_STORMGUST,idle,89,10,3000,0,0,yes,target,groundattacked,0,,,,,,9,
|
||||
|
||||
// Eclage
|
||||
2363,Menblatt@KN_PIERCE,attack,56,10,500,700,5000,no,target,always,0,,,,,,6,
|
||||
@ -12590,6 +12601,7 @@
|
||||
20340,EL-A17T@NPC_CRITICALSLASH,attack,170,1,2000,500,5000,no,target,always,0,,,,,,,
|
||||
20340,EL-A17T@AS_SONICBLOW,attack,136,10,1000,0,10000,yes,target,always,0,,,,,,2,
|
||||
20340,EL-A17T@NPC_AGIUP,chase,350,5,2000,0,60000,no,self,always,0,,,,,,6,
|
||||
20340,EL-A17T@SA_LANDPROTECTOR,attack,288,3,10000,500,150000,no,self,groundattacked,0,,,,,,,
|
||||
20341,E-EA1L@AL_DECAGI,attack,30,1,500,1000,5000,no,target,always,0,,,,,,29,
|
||||
20341,E-EA1L@NPC_HALLUCINATION,chase,207,1,500,500,5000,yes,target,always,0,,,,,,9,
|
||||
20341,E-EA1L@NPC_HALLUCINATION,attack,207,1,500,500,5000,yes,target,always,0,,,,,,9,
|
||||
|
@ -284,7 +284,7 @@ void battle_damage(struct block_list *src, struct block_list *target, int64 dama
|
||||
// Trigger monster skill condition for non-skill attacks.
|
||||
if (!status_isdead(target) && src != target) {
|
||||
if (damage > 0)
|
||||
mobskill_event(md, src, tick, attack_type);
|
||||
mobskill_event(md, src, tick, attack_type, damage);
|
||||
if (skill_id > 0)
|
||||
mobskill_event(md, src, tick, MSC_SKILLUSED | (skill_id << 16));
|
||||
}
|
||||
|
@ -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 },
|
||||
|
@ -193,7 +193,8 @@ struct s_mob_skill {
|
||||
short permillage;
|
||||
int casttime,delay;
|
||||
short cancel;
|
||||
short cond1,cond2;
|
||||
short cond1;
|
||||
int64 cond2;
|
||||
short target;
|
||||
int val[5];
|
||||
short emotion;
|
||||
@ -457,6 +458,8 @@ enum e_mob_skill_condition {
|
||||
MSC_ALCHEMIST,
|
||||
MSC_SPAWN,
|
||||
MSC_MOBNEARBYGT,
|
||||
MSC_GROUNDATTACKED,
|
||||
MSC_DAMAGEDGT,
|
||||
};
|
||||
|
||||
// The data structures for storing delayed item drops
|
||||
@ -526,8 +529,8 @@ int mob_warpslave(struct block_list *bl, int range);
|
||||
int mob_linksearch(struct block_list *bl,va_list ap);
|
||||
|
||||
bool mob_chat_display_message (mob_data &md, uint16 msg_id);
|
||||
int mobskill_use(struct mob_data *md,t_tick tick,int event);
|
||||
int mobskill_event(struct mob_data *md,struct block_list *src,t_tick tick, int flag);
|
||||
int mobskill_use(struct mob_data *md,t_tick tick,int event, int64 damage = 0);
|
||||
int mobskill_event(struct mob_data *md,struct block_list *src,t_tick tick, int flag, int64 damage = 0);
|
||||
int mob_summonslave(struct mob_data *md2,int *value,int amount,uint16 skill_id);
|
||||
int mob_countslave(struct block_list *bl);
|
||||
int mob_count_sub(struct block_list *bl, va_list ap);
|
||||
|
@ -3965,6 +3965,14 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
|
||||
}
|
||||
}
|
||||
|
||||
// Trigger monster skill condition for damage skills.
|
||||
if (bl->type == BL_MOB && src != bl && !status_isdead(bl)) {
|
||||
if (damage > 0)
|
||||
mobskill_event(BL_CAST(BL_MOB, bl), src, tick, dmg.flag, damage);
|
||||
if (skill_id > 0)
|
||||
mobskill_event(BL_CAST(BL_MOB, bl), src, tick, MSC_SKILLUSED | (skill_id << 16), damage);
|
||||
}
|
||||
|
||||
if (tsc && skill_id != NPC_EVILLAND && skill_id != SP_SOULEXPLOSION && skill_id != SJ_NOVAEXPLOSING
|
||||
#ifndef RENEWAL
|
||||
&& skill_id != PA_PRESSURE && skill_id != HW_GRAVITATION
|
||||
|
Loading…
x
Reference in New Issue
Block a user