From 71ffda39fbe9f77142e64665dba876ab2d272720 Mon Sep 17 00:00:00 2001 From: aleos89 Date: Tue, 22 Dec 2015 10:25:53 -0500 Subject: [PATCH 1/5] Updated Volcanic Ash effect * Only the Fire property attack bonus should affect Boss type monsters. * Skill cast failure chance and Hit/Def/ATK/Flee reductions don't affect Boss type monsters. --- src/map/status.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/map/status.c b/src/map/status.c index 5a93117c09..8fb4cd0fa5 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1933,7 +1933,7 @@ bool status_check_skilluse(struct block_list *src, struct block_list *target, ui if (sc->data[SC_ALL_RIDING]) return false; //You can't use skills while in the new mounts (The client doesn't let you, this is to make cheat-safe) - if ((sc->data[SC_ASH] && rnd()%2)) { + if (sc->data[SC_ASH] && rnd()%2 && !(status->mode&MD_BOSS)) { if (src->type == BL_PC) clif_skill_fail((TBL_PC*)src,skill_id,USESKILL_FAIL_LEVEL,0); return false; @@ -10146,13 +10146,16 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty sc_start2(src, bl,SC_STUN,100,val1,bl->id,(1000*status_get_lv(src))/50+500*val1); break; case SC_ASH: - val2 = 50; // hit % reduc + val2 = 0; // hit % reduc val3 = 0; // def % reduc val4 = 0; // atk flee & reduc - if(status_get_race(bl) == RC_PLANT) // plant type - val3 = 50; - if(status_get_element(bl) == ELE_WATER) // defense water type - val4 = 50; + if (!(status_get_mode(bl)&MD_BOSS)) { + val2 = 50; + if (status_get_race(bl) == RC_PLANT) // plant type + val3 = 50; + if (status_get_element(bl) == ELE_WATER) // defense water type + val4 = 50; + } break; case SC_FULL_THROTTLE: val2 = ( val1 == 1 ? 6 : 6 - val1 ); From 49f1c439b9b7a9b949601968d4ca3d70c60684eb Mon Sep 17 00:00:00 2001 From: aleos89 Date: Tue, 22 Dec 2015 10:36:30 -0500 Subject: [PATCH 2/5] Updated Flying Side Kick effect * Fog Wall should still apply to players who use Flying Side Kick to get out. * Follow up to 08667a3. --- src/map/skill.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/map/skill.c b/src/map/skill.c index 81a7dcbd08..eeabc1ecae 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -10735,8 +10735,9 @@ static int8 skill_castend_id_check(struct block_list *src, struct block_list *ta if (inf && battle_check_target(src, target, inf) <= 0) return USESKILL_FAIL_LEVEL; - //Fogwall makes all offensive-type targetted skills fail at 75% - if (inf&BCT_ENEMY && tsc && tsc->data[SC_FOGWALL] && rnd() % 100 < 75) + // Fogwall makes all offensive-type targetted skills fail at 75% + // Jump Kick can still fail even though you can jump to friendly targets. + if ((inf&BCT_ENEMY || skill_id == TK_JUMPKICK) && tsc && tsc->data[SC_FOGWALL] && rnd() % 100 < 75) return USESKILL_FAIL_LEVEL; return -1; From 9632d2a217794bddc25bd81dd358192b1905466c Mon Sep 17 00:00:00 2001 From: aleos89 Date: Tue, 22 Dec 2015 12:05:13 -0500 Subject: [PATCH 3/5] Updated Howling of Mandragora effect * Timer is not refreshed when casted on target again. * Target's SP is not zapped again when already active. --- src/map/skill.c | 21 +++++++++++---------- src/map/status.c | 1 + 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/map/skill.c b/src/map/skill.c index eeabc1ecae..654daa949d 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -10069,19 +10069,20 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case GN_MANDRAGORA: if( flag&1 ) { int rate = 25 + (10 * skill_lv) - (tstatus->vit + tstatus->luk) / 5; + if (rate < 10) rate = 10; - if (bl->type == BL_MOB) - break; - if (rnd()%100 < rate) { - sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)); - status_zap(bl,0,status_get_max_sp(bl) * (25 + 5 * skill_lv) / 100); - } - } else { - map_foreachinrange(skill_area_sub,bl,skill_get_splash(skill_id,skill_lv),BL_CHAR,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_nodamage_id); - clif_skill_nodamage(src,src,skill_id,skill_lv,1); + if (bl->type == BL_MOB || (tsc && tsc->data[type])) + break; // Don't activate if target is a monster or zap SP if target already has Mandragora active. + if (rnd()%100 < rate) { + sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)); + status_zap(bl,0,status_get_max_sp(bl) * (25 + 5 * skill_lv) / 100); } - break; + } else { + map_foreachinrange(skill_area_sub,bl,skill_get_splash(skill_id,skill_lv),BL_CHAR,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_nodamage_id); + clif_skill_nodamage(src,src,skill_id,skill_lv,1); + } + break; case GN_SLINGITEM: if( sd ) { short ammo_id; diff --git a/src/map/status.c b/src/map/status.c index 8fb4cd0fa5..9847da8a58 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -8573,6 +8573,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_DEEPSLEEP: case SC_NETHERWORLD: case SC_CRYSTALIZE: + case SC_MANDRAGORA: case SC_DEFSET: case SC_MDEFSET: case SC_NORECOVER_STATE: From dccf7a3e3db46d97260aa2b3dabc7c11bb759a0a Mon Sep 17 00:00:00 2001 From: aleos89 Date: Wed, 23 Dec 2015 14:13:08 -0500 Subject: [PATCH 4/5] Follow up to 3be6f5a * Drum Battlefield damage should not be affected by target size. --- src/map/battle.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/map/battle.c b/src/map/battle.c index d4c8165302..0d87c166a0 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -4323,12 +4323,8 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s ATK_ADD(wd.equipAtk, wd.equipAtk2, sc->data[SC_IMPOSITIO]->val2); if (sc->data[SC_VOLCANO]) ATK_ADD(wd.equipAtk, wd.equipAtk2, sc->data[SC_VOLCANO]->val2); - if (sc->data[SC_DRUMBATTLE]) { - if (tstatus->size == SZ_SMALL) { - ATK_ADD(wd.equipAtk, wd.equipAtk2, sc->data[SC_DRUMBATTLE]->val2); - } else if (tstatus->size == SZ_MEDIUM) - ATK_ADD(wd.equipAtk, wd.equipAtk2, 10 * sc->data[SC_DRUMBATTLE]->val1); - } + if (sc->data[SC_DRUMBATTLE]) + ATK_ADD(wd.equipAtk, wd.equipAtk2, sc->data[SC_DRUMBATTLE]->val2); if (sc->data[SC_MADNESSCANCEL]) ATK_ADD(wd.equipAtk, wd.equipAtk2, 100); if (sc->data[SC_GATLINGFEVER]) { From f47d4dcc0f9dd9f74c90447baa0058400df1acdf Mon Sep 17 00:00:00 2001 From: aleos89 Date: Wed, 23 Dec 2015 14:15:07 -0500 Subject: [PATCH 5/5] Updated Hells Plant effect * Hells Plant can be removed from Crazy Weed and Land Protector. --- db/pre-re/skill_unit_db.txt | 2 +- db/re/skill_unit_db.txt | 2 +- src/map/skill.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/db/pre-re/skill_unit_db.txt b/db/pre-re/skill_unit_db.txt index 44fa2b47d3..ac09c3cde3 100644 --- a/db/pre-re/skill_unit_db.txt +++ b/db/pre-re/skill_unit_db.txt @@ -157,7 +157,7 @@ 2485,0xe7, , 0, 2,2000,enemy, 0x8098 //GN_DEMONIC_FIRE 2487,0xe8, , 2, 0, -1,enemy, 0x2000 //GN_FIRE_EXPANSION_SMOKE_POWDER 2488,0xe9, , 2, 0, -1,enemy, 0x2000 //GN_FIRE_EXPANSION_TEAR_GAS -2490,0xea, , 0, 1,1000,enemy, 0x8002 //GN_HELLS_PLANT +2490,0xea, , 0, 1,1000,enemy, 0xC002 //GN_HELLS_PLANT 2555,0x104, , 0, 1:2:2:3:3,500,enemy,0x6 //RL_B_TRAP 2567,0x105, , -1, 0,1000,enemy, 0x98 //RL_FIRE_RAIN diff --git a/db/re/skill_unit_db.txt b/db/re/skill_unit_db.txt index 4a1a3f98fc..464c95cabb 100644 --- a/db/re/skill_unit_db.txt +++ b/db/re/skill_unit_db.txt @@ -159,7 +159,7 @@ 2485,0xe7, , 0, 2,2000,enemy, 0x8098 //GN_DEMONIC_FIRE 2487,0xe8, , 2, 0, -1,enemy, 0x2000 //GN_FIRE_EXPANSION_SMOKE_POWDER 2488,0xe9, , 2, 0, -1,enemy, 0x2000 //GN_FIRE_EXPANSION_TEAR_GAS -2490,0xea, , 0, 1,1000,enemy, 0x8002 //GN_HELLS_PLANT +2490,0xea, , 0, 1,1000,enemy, 0xC002 //GN_HELLS_PLANT 2555,0x104, , 0, 1:2:2:3:3,500,enemy,0x6 //RL_B_TRAP 2567,0x105, , -1, 0,1000,enemy, 0x98 //RL_FIRE_RAIN diff --git a/src/map/skill.c b/src/map/skill.c index 654daa949d..97c6a02896 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -16927,7 +16927,7 @@ static int skill_cell_overlap(struct block_list *bl, va_list ap) return 1; } //It deletes everything except traps and barriers - if( (!(skill_get_inf2(unit->group->skill_id)&(INF2_TRAP)) && !(skill_get_inf3(unit->group->skill_id)&(INF3_NOLP)) ) || unit->group->skill_id == WZ_FIREPILLAR ) { + if ((!(skill_get_inf2(unit->group->skill_id)&(INF2_TRAP)) && !(skill_get_inf3(unit->group->skill_id)&(INF3_NOLP))) || unit->group->skill_id == WZ_FIREPILLAR || unit->group->skill_id == GN_HELLS_PLANT) { skill_delunit(unit); return 1; }