diff --git a/db/pre-re/skill_cast_db.txt b/db/pre-re/skill_cast_db.txt index 892ce938e7..f8f48a3d88 100644 --- a/db/pre-re/skill_cast_db.txt +++ b/db/pre-re/skill_cast_db.txt @@ -1071,44 +1071,44 @@ 1019,2000,1000,0,1800000,0,0 //========================================== -//===== Rune Knight ======================== -//-- RK_ENCHANTBLADE +//===== Rune Knight ======================== +//-- RK_ENCHANTBLADE 2001,1000,0,0,300000,0,0 -//-- RK_SONICWAVE +//-- RK_SONICWAVE 2002,0,1000,0,0,0,2000 -//-- RK_DEATHBOUND +//-- RK_DEATHBOUND 2003,0,2000,0,2000,0,3000 -//-- RK_HUNDREDSPEAR +//-- RK_HUNDREDSPEAR 2004,1000:900:800:700:600:500:400:300:200:100,500,0,0,0,3000 -//-- RK_WINDCUTTER -2005,0,2000,0,0,0,2000 -//-- RK_IGNITIONBREAK +//-- RK_WINDCUTTER +2005,0,0,0,15000,0,2000 +//-- RK_IGNITIONBREAK 2006,1000,0,0,0,0,2000 -//-- RK_DRAGONBREATH +//-- RK_DRAGONBREATH 2008,0:0:0:1000:1000:1000:1500:1500:2000:2000,2000,0,10000,0,0 -//-- RK_DRAGONHOWLING +//-- RK_DRAGONHOWLING 2009,0,0,0,15000,0,10000 -//-- RK_MILLENNIUMSHIELD +//-- RK_MILLENNIUMSHIELD 2011,0,1000,0,180000,0,60000 -//-- RK_CRUSHSTRIKE +//-- RK_CRUSHSTRIKE 2012,0,0,0,180000,0,30000 -//-- RK_REFRESH +//-- RK_REFRESH 2013,0,0,0,60000,0,120000 -//-- RK_GIANTGROWTH +//-- RK_GIANTGROWTH 2014,0,0,0,180000,0,0 -//-- RK_STONEHARDSKIN +//-- RK_STONEHARDSKIN 2015,0,0,0,180000,10000,0 -//-- RK_VITALITYACTIVATION +//-- RK_VITALITYACTIVATION 2016,0,0,0,180000,0,0 -//-- RK_STORMBLAST -2017,0,0,0,0,0,0 -//-- RK_FIGHTINGSPIRIT +//-- RK_STORMBLAST +2017,2000,1000,0,0,0,0 +//-- RK_FIGHTINGSPIRIT 2018,0,0,0,180000,0,0 -//-- RK_ABUNDANCE +//-- RK_ABUNDANCE 2019,0,0,0,180000,0,0 -//========================================== +//========================================== //===== Gillotine Cross ==================== //-- GC_VENOMIMPRESS diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt index 5b83447bfd..2ffdd7e4a0 100644 --- a/db/re/skill_cast_db.txt +++ b/db/re/skill_cast_db.txt @@ -1080,7 +1080,7 @@ //-- RK_HUNDREDSPEAR 2004,1000:900:800:700:600:500:400:300:200:100,500,0,0,0,3000,-1 //-- RK_WINDCUTTER -2005,0,2000,0,0,0,2000,-1 +2005,0,0,0,15000,0,2000,-1 //-- RK_IGNITIONBREAK 2006,1000,0,0,0,0,2000,-1 @@ -1101,8 +1101,8 @@ 2015,0,0,0,180000,10000,0,2000 //-- RK_VITALITYACTIVATION 2016,0,0,0,180000,0,0,-1 -//-- RK_STORMBLAST -2017,0,0,0,0,0,0,2000 +//-- RK_STORMBLAST +2017,2000,1000,0,0,0,0,-1 //-- RK_FIGHTINGSPIRIT 2018,0,0,0,180000,0,0,-1 //-- RK_ABUNDANCE diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index acb8794428..1fc4be81c9 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -678,15 +678,15 @@ //**** // RK Rune Knight //**** -2001,1,6,4,0,0x1,0,5,1,yes,0,0,0,none,0, RK_ENCHANTBLADE,Enchant Blade +2001,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0, RK_ENCHANTBLADE,Enchant Blade 2002,7:8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, RK_SONICWAVE,Sonic Wave 2003,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0, RK_DEATHBOUND,Death Bound -2004,1,8,1,-1,0,0,10,-5,no,0,0,0,weapon,0, RK_HUNDREDSPEAR,Hundred Spear +2004,5,8,1,-1,0,0,10,-5,no,0,0,0,weapon,0, RK_HUNDREDSPEAR,Hundred Spear 2005,1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3, RK_WINDCUTTER,Wind Cutter 2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0, RK_IGNITIONBREAK,Ignition Break 2007,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0, RK_DRAGONTRAINING,Dragon Training -2008,9,6,2,3,0xC2,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,misc,0, RK_DRAGONBREATH,Dragon Breath //CHECK May have to change this back to a weapon type attack. -2009,0,6,4,0,0x3,3:4:5:6:7,5,1,yes,0,0,0,weapon,0, RK_DRAGONHOWLING,Dragon Howling +2008,9,6,2,3,0xC2,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,misc,0, RK_DRAGONBREATH,Dragon Breath +2009,0,6,4,0,0x3,3:4:5:6:7,5,1,yes,0,0,0,none,0, RK_DRAGONHOWLING,Dragon Howling 2010,0,0,0,0,0,0,10,0,no,0,0,0,none,0, RK_RUNEMASTERY,Rune Mastery 2011,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0, RK_MILLENNIUMSHIELD,Millenium Shield 2012,1,6,4,-1,0,0x8,1,1,yes,0,0,0,weapon,0, RK_CRUSHSTRIKE,Crush Strike diff --git a/src/map/battle.c b/src/map/battle.c index 28b8c45721..e238643011 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1334,6 +1334,7 @@ int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int dama case HW_GRAVITATION: case NJ_ZENYNAGE: case KO_MUCHANAGE: + case RK_DRAGONBREATH: break; default: /* Uncomment if you want god-mode Emperiums at 100 defense. [Kisuka] @@ -1436,10 +1437,13 @@ int battle_addmastery(struct map_session_data *sd,struct block_list *target,int case W_1HSPEAR: case W_2HSPEAR: if((skill = pc_checkskill(sd,KN_SPEARMASTERY)) > 0) { - if(!pc_isriding(sd)) + if(!pc_isriding(sd) || !pc_isridingdragon(sd)) damage += (skill * 4); else damage += (skill * 5); + // Increase damage by level of KN_SPEARMASTERY * 10 + if(pc_checkskill(sd,RK_DRAGONTRAINING) > 0) + damage += (skill * 10); } break; case W_1HAXE: @@ -2536,36 +2540,40 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo skillratio += ((skill_lv-1)%5+1)*100; break; case RK_SONICWAVE: - skillratio += 400 + 100 * skill_lv; - RE_LVL_DMOD(100); + skillratio = (skill_lv + 5) * 100; // ATK = {((Skill Level + 5) x 100) x (1 + [(Caster's Base Level - 100) / 200])} % + skillratio = skillratio * (100 + (status_get_lv(src) - 100) / 2) / 100; break; case RK_HUNDREDSPEAR: - skillratio += 500 + (80 * skill_lv); - if( sd ) - { - short index = sd->equip_index[EQI_HAND_R]; - if( index >= 0 && sd->inventory_data[index] - && sd->inventory_data[index]->type == IT_WEAPON ) - skillratio += max(10000 - sd->inventory_data[index]->weight, 0) / 10; - skillratio += 50 * pc_checkskill(sd,LK_SPIRALPIERCE); - } // (1 + [(Casters Base Level - 100) / 200]) - skillratio = skillratio * (100 + (status_get_lv(src)-100) / 2) / 100; + skillratio += 500 + (80 * skill_lv); + if( sd ) { + short index = sd->equip_index[EQI_HAND_R]; + if( index >= 0 && sd->inventory_data[index] + && sd->inventory_data[index]->type == IT_WEAPON ) + skillratio += max(10000 - sd->inventory_data[index]->weight, 0) / 10; + skillratio += 50 * pc_checkskill(sd,LK_SPIRALPIERCE); + } // (1 + [(Casters Base Level - 100) / 200]) + skillratio = skillratio * (100 + (status_get_lv(src) - 100) / 2) / 100; break; case RK_WINDCUTTER: - skillratio += 50 * skill_lv; - RE_LVL_DMOD(100); + skillratio = (skill_lv + 2) * 50; + RE_LVL_DMOD(100); break; - case RK_IGNITIONBREAK: + case RK_IGNITIONBREAK: { + // 3x3 cell Damage = ATK [{(Skill Level x 300) x (1 + [(Caster's Base Level - 100) / 100])}] % + // 7x7 cell Damage = ATK [{(Skill Level x 250) x (1 + [(Caster's Base Level - 100) / 100])}] % + // 11x11 cell Damage = ATK [{(Skill Level x 200) x (1 + [(Caster's Base Level - 100) / 100])}] % + int dmg = 300; // Base maximum damage at less than 3 cells. i = distance_bl(src,target); - if( i < 2 ) - skillratio = 200 + 200 * skill_lv; - else if( i < 4 ) - skillratio = 100 + 200 * skill_lv; - else - skillratio = 100 + 100 * skill_lv; - RE_LVL_DMOD(100); - if( sstatus->rhw.ele == ELE_FIRE ) - skillratio += skillratio / 2; + if( i > 7 ) + dmg -= 100; // Greather than 7 cells. (200 damage) + else if( i > 3 ) + dmg -= 50; // Greater than 3 cells, less than 7. (250 damage) + dmg = (dmg * skill_lv) * (100 + (status_get_lv(src) - 100) / 12) / 100; + // Elemental check, +100% damage if your element is fire. + if( sstatus->rhw.ele == ELE_FIRE ) + dmg += skill_lv * 100 / 100; + skillratio = dmg; + } break; case RK_CRUSHSTRIKE: if( sd ) @@ -2577,12 +2585,11 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo } break; case RK_STORMBLAST: - skillratio = 100 * (sd ? pc_checkskill(sd,RK_RUNEMASTERY) : 1) + 100 * (sstatus->int_ / 4); + skillratio = ((sd ? pc_checkskill(sd,RK_RUNEMASTERY) : 1) + (sstatus->int_ / 8)) * 100; // ATK = [{Rune Mastery Skill Level + (Caster's INT / 8)} x 100] % break; - case RK_PHANTOMTHRUST: - skillratio = 50 * skill_lv + 10 * ( sd ? pc_checkskill(sd,KN_SPEARMASTERY) : 10); - //if( s_level > 100 ) skillratio += skillratio * s_level / 150; // Base level bonus. This is official, but is disabled until I can confirm something with was changed or not. [Rytech] - //if( s_level > 100 ) skillratio += skillratio * (s_level - 100) / 200; // Base level bonus. + case RK_PHANTOMTHRUST: // ATK = [{(Skill Level x 50) + (Spear Master Level x 10)} x Caster's Base Level / 150] % + skillratio = 50 * skill_lv + 10 * (sd ? pc_checkskill(sd,KN_SPEARMASTERY) : 5); + RE_LVL_DMOD(150); // Base level bonus. break; /** * GC Guilotine Cross @@ -4593,8 +4600,7 @@ int battle_calc_return_damage(struct block_list* bl, struct block_list *src, int *dmg = (int64)rd1 * 30 / 100; // Received damage = 30% of amplifly damage. clif_skill_damage(src,bl,gettick(), status_get_amotion(src), 0, -30000, 1, RK_DEATHBOUND, sc->data[SC_DEATHBOUND]->val1,6); status_change_end(bl,SC_DEATHBOUND,INVALID_TIMER); - rdamage += rd1; - if (rdamage < 1) rdamage = 1; + rdamage += rd1 * 70 / 100; // Target receives 70% of the amplified damage. [Rytech] } } } @@ -5214,7 +5220,6 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f case RA_SENSITIVEKEEN: case GN_CRAZYWEED_ATK: case RK_STORMBLAST: - case RK_PHANTOMTHRUST: case SR_RAMPAGEBLASTER: case NC_COLDSLOWER: case NC_SELFDESTRUCTION: diff --git a/src/map/pc.c b/src/map/pc.c index 207af1193c..ecf9ed71aa 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -7216,6 +7216,11 @@ int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp) sp -= sp * 20 / 100; } + if( sd->sc.data[SC_VITALITYACTIVATION] ){ + hp += hp / 2; // 1.5 times + sp -= sp / 2; + } + if( sd->sc.data[SC_WATER_INSIGNIA] && sd->sc.data[SC_WATER_INSIGNIA]->val1 == 2 ) { hp += hp / 10; sp += sp / 10; diff --git a/src/map/skill.c b/src/map/skill.c index 104c1233dd..5481965e27 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1190,13 +1190,6 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint case NPC_CRITICALWOUND: sc_start(bl,SC_CRITICALWOUND,100,skill_lv,skill_get_time2(skill_id,skill_lv)); break; - case RK_HUNDREDSPEAR: - if( !sd || pc_checkskill(sd,KN_SPEARBOOMERANG) == 0 ) - break; // Spear Boomerang auto cast chance only works if you have mastered Spear Boomerang. - rate = 10 + 3 * skill_lv; - if( rnd()%100 < rate ) - skill_castend_damage_id(src,bl,KN_SPEARBOOMERANG,1,tick,0); - break; case RK_WINDCUTTER: sc_start(bl,SC_FEAR,3+2*skill_lv,skill_lv,skill_get_time(skill_id,skill_lv)); break; @@ -3279,6 +3272,14 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data) map_foreachinrange(skill_area_sub, target, skill_get_splash(skl->skill_id, skl->skill_lv), BL_CHAR, src, skl->skill_id, skl->skill_lv, 0, skl->flag|1|BCT_ENEMY, skill_castend_damage_id); break; + case RK_HUNDREDSPEAR: + if(src->type == BL_PC) { + int skill_lv = pc_checkskill((struct map_session_data *)src,KN_SPEARBOOMERANG); + if(skill_lv > 0) + skill_attack(BF_WEAPON,src,src,target,KN_SPEARBOOMERANG,skill_lv,tick,skl->flag); + } else + skill_attack(BF_WEAPON,src,src,target,KN_SPEARBOOMERANG,1,tick,skl->flag); + break; case CH_PALMSTRIKE: { struct status_change* tsc = status_get_sc(target); @@ -3412,7 +3413,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint { struct map_session_data *sd = NULL; struct status_data *tstatus; - struct status_change *sc; + struct status_change *sc, *tsc; if (skill_id > 0 && !skill_lv) return 0; @@ -3440,8 +3441,11 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint } sc = status_get_sc(src); + tsc = status_get_sc(bl); if (sc && !sc->count) sc = NULL; //Unneeded + if (tsc && !tsc->count) + tsc = NULL; tstatus = status_get_status_data(bl); @@ -3536,7 +3540,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case NPC_CRITICALWOUND: case NPC_HELLPOWER: case RK_SONICWAVE: - case RK_HUNDREDSPEAR: case AB_DUPLELIGHT_MELEE: case RA_AIMEDBOLT: case NC_AXEBOOMERANG: @@ -4109,6 +4112,16 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint status_change_end(src, SC_HIDING, INVALID_TIMER); skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); break; + case RK_HUNDREDSPEAR: + skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); + if(rnd()%100 < (10 + 3*skill_lv)) { + if( !sd || pc_checkskill(sd,KN_SPEARBOOMERANG) == 0 ) + break; // Spear Boomerang auto cast chance only works if you have mastered Spear Boomerang. + skill_blown(src,bl,6,-1,0); + skill_addtimerskill(src,tick+800,bl->id,0,0,skill_id,skill_lv,BF_WEAPON,flag); + skill_castend_damage_id(src,bl,KN_SPEARBOOMERANG,1,tick,0); + } + break; case RK_PHANTOMTHRUST: unit_setdir(src,map_calc_dir(src, bl->x, bl->y)); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); @@ -4117,8 +4130,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint if( battle_check_target(src,bl,BCT_ENEMY) ) skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); break; - - case RK_STORMBLAST: case RK_CRUSHSTRIKE: if( sd ) { if( pc_checkskill(sd,RK_RUNEMASTERY) >= ( skill_id == RK_CRUSHSTRIKE ? 7 : 3 ) ) @@ -4128,6 +4139,14 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint } else //non-sd support skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); break; + case RK_STORMBLAST: + if( flag&1 ) + skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); + else { + clif_skill_nodamage(src,bl,skill_id,skill_lv,1); + 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); + } + break; case GC_DARKILLUSION: { short x, y; @@ -7462,8 +7481,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } break; case RK_ENCHANTBLADE: - clif_skill_nodamage(src,bl,skill_id,skill_lv,// formula not confirmed - sc_start2(bl,type,100,skill_lv,100+20*skill_lv/*+sstatus->int_/2+status_get_lv(bl)/10*/,skill_get_time(skill_id,skill_lv))); + clif_skill_nodamage(src,bl,skill_id,skill_lv, + sc_start2(bl,type,100,skill_lv,(100+20*skill_lv)*(status_get_lv(src)/150)+sstatus->int_,skill_get_time(skill_id,skill_lv))); break; case RK_DRAGONHOWLING: if( flag&1) @@ -7492,7 +7511,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case RK_STONEHARDSKIN: if( sd && pc_checkskill(sd,RK_RUNEMASTERY) >= 4 ) { - int heal = sstatus->hp / 4; // 25% HP + int heal = sstatus->hp / 5; // 20% HP if( status_charge(bl,heal,0) ) clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start2(bl,type,100,skill_lv,heal,skill_get_time(skill_id,skill_lv))); else @@ -7513,7 +7532,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case RK_MILLENNIUMSHIELD: if( sd && pc_checkskill(sd,RK_RUNEMASTERY) >= 9 ) { - short shields = (rnd()%100<50) ? 4 : ((rnd()%100<80) ? 3 : 2); + short shields = (rnd()%100<20) ? 4 : ((rnd()%100<30) ? 3 : 2); // 20% for 4, 30% for 3, 50% for 2 sc_start4(bl,type,100,skill_lv,shields,1000,0,skill_get_time(skill_id,skill_lv)); clif_millenniumshield(sd,shields); clif_skill_nodamage(src,bl,skill_id,1,1); @@ -7538,21 +7557,21 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } break; - case RK_FIGHTINGSPIRIT: - if( flag&1 ) { - if( src == bl ) - sc_start2(bl,type,100,skill_area_temp[5],10*(sd?pc_checkskill(sd,RK_RUNEMASTERY):10),skill_get_time(skill_id,skill_lv)); - else - sc_start(bl,type,100,skill_area_temp[5]/4,skill_get_time(skill_id,skill_lv)); - } else if( sd && pc_checkskill(sd,RK_RUNEMASTERY) >= 5 ) { - if( sd->status.party_id ) { - i = party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skill_id,skill_lv),src,skill_id,skill_lv,tick,BCT_PARTY,skill_area_sub_count); - skill_area_temp[5] = 7 * i; // ATK - party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skill_id,skill_lv),src,skill_id,skill_lv,tick,flag|BCT_PARTY|1,skill_castend_nodamage_id); - } else - sc_start2(bl,type,100,7,5,skill_get_time(skill_id,skill_lv)); + case RK_FIGHTINGSPIRIT: { + int atkbonus = 7 * party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skill_id,skill_lv),src,skill_id,skill_lv,tick,BCT_PARTY,skill_area_sub_count); + if( flag&1 ) { + if( src == bl ) + sc_start2(bl,type,100,atkbonus,10*(sd?pc_checkskill(sd,RK_RUNEMASTERY):10),skill_get_time(skill_id,skill_lv)); + else + sc_start(bl,type,100,atkbonus / 4,skill_get_time(skill_id,skill_lv)); + } else if( sd && pc_checkskill(sd,RK_RUNEMASTERY) >= 5 ) { + if( sd->status.party_id ) + party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skill_id,skill_lv),src,skill_id,skill_lv,tick,flag|BCT_PARTY|1,skill_castend_nodamage_id); + else + sc_start2(bl,type,100,7,10*(sd?pc_checkskill(sd,RK_RUNEMASTERY):10),skill_get_time(skill_id,skill_lv)); + clif_skill_nodamage(src,bl,skill_id,1,1); + } } - clif_skill_nodamage(src,bl,skill_id,1,1); break; /** * Guilotine Cross @@ -8630,7 +8649,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui // Summoning the new one. if( !elemental_create(sd,elemental_class,skill_get_time(skill_id,skill_lv)) ) { - clif_skill_fail(sd,skill_id,0,0); + clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); break; } clif_skill_nodamage(src,bl,skill_id,skill_lv,1); @@ -9233,6 +9252,10 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data) if (sd) clif_skill_fail(sd,ud->skill_id,USESKILL_FAIL_LEVEL,0); break; } + else if( ud->skill_id == RK_PHANTOMTHRUST && target->type != BL_MOB ) { + if( !map_flag_vs(src->m) && battle_check_target(src,target,BCT_PARTY) <= 0 ) + break; // You can use Phantom Thurst on party members in normal maps too. [pakpil] + } if(inf&BCT_ENEMY && (sc = status_get_sc(target)) && sc->data[SC_FOGWALL] && @@ -12989,7 +13012,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id case SC_MANHOLE: case SC_DIMENSIONDOOR: if( sc && sc->data[SC_MAGNETICFIELD] ) { - clif_skill_fail(sd,skill_id,0,0); + clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); return 0; } break; diff --git a/src/map/status.c b/src/map/status.c index 62b843e4a4..1eb4181962 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2657,7 +2657,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first) sd->left_weapon.atkmods[1] = atkmods[1][sd->weapontype2]; sd->left_weapon.atkmods[2] = atkmods[2][sd->weapontype2]; - if(pc_isriding(sd) && + if(pc_isriding(sd) || pc_isridingdragon(sd) && (sd->status.weapon==W_1HSPEAR || sd->status.weapon==W_2HSPEAR)) { //When Riding with spear, damage modifier to mid-class becomes //same as versus large size. @@ -3492,11 +3492,13 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str regen->hp = cap_value(regen->hp*sc->data[SC_GT_REVITALIZE]->val3/100, 1, SHRT_MAX); regen->state.walk= 1; } - if ((sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 1) //if insignia lvl 1 + if ((sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 1) //if insignia lvl 1 || (sc->data[SC_WATER_INSIGNIA] && sc->data[SC_WATER_INSIGNIA]->val1 == 1) || (sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 1) || (sc->data[SC_WIND_INSIGNIA] && sc->data[SC_WIND_INSIGNIA]->val1 == 1)) regen->rate.hp *= 2; + if( sc->data[SC_VITALITYACTIVATION] ) + regen->flag &=~RGN_SP; } void status_calc_state( struct block_list *bl, struct status_change *sc, enum scs_flag flag, bool start ) { @@ -6459,12 +6461,19 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val if( type >= SC_COMMON_MIN && type <= SC_COMMON_MAX) // Confirmed. return 0; // Immune to status ailements switch( type ) { - case SC_QUAGMIRE://Tester said it protects against this and decrease agi. - case SC_DECREASEAGI: + case SC_DEEPSLEEP: case SC_BURNING: + case SC_STUN: + case SC_SLEEP: + case SC_CURSE: + case SC_STONE: + case SC_POISON: + case SC_BLIND: + case SC_SILENCE: + case SC_BLEEDING: + case SC_FREEZE: case SC_FREEZING: - //case SC_WHITEIMPRISON://Need confirm. Protected against this in the past. [Rytech] - case SC_MARSHOFABYSS: + case SC_CRYSTALIZE: case SC_TOXIN: case SC_PARALYSE: case SC_VENOMBLEED: @@ -6472,9 +6481,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_DEATHHURT: case SC_PYREXIA: case SC_OBLIVIONCURSE: - case SC_LEECHESEND: - case SC_CRYSTALIZE: ////08/31/2011 - Class Balance Changes - case SC_DEEPSLEEP: + case SC_MARSHOFABYSS: case SC_MANDRAGORA: return 0; } @@ -8051,7 +8058,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val tick_time = 10000; // [GodLesZ] tick time break; case SC_GIANTGROWTH: - val2 = 10; // Triple damage success rate. + val2 = 15; // Triple damage success rate. break; /** * Arch Bishop