Applied remaining post-balance skill changes to Rune Knight.

- Adjusted Wind Cutter and Storm Blast cast times.
- Removed range from Enchant Blade and updated damage formula.
- Increased Hundred Spear range to 5.
- Changed Dragon Howl attack type from weapon to none.
- Added missing damage increase for spears while riding a Dragon.
- Updated Sonic Wave, Wind Cutter, Ignition Break, Hundred Spear, Storm Blast, and Fighting Spirit damage formulas.
- Death Bound now deflects 70% of the damage taken back at the attacker.
- Vitality Activation now stops SP regeneration, increases (1.5x) HP recovery items, and decreases (1.5x) SP recovery items.
- Stone Hard Skin now consumes 20% HP.
- Corrected the formula for Millennium Shield production chance.
- Phantom Thrust is now usable on party members in normal maps but doesn't inflict damage.
- Updated the list of statuses that Refresh removes.
- Giant Growth now has a 15% chance to increase damage.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17140 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
aleos 2013-02-19 00:07:45 +00:00
parent 058a7b4f4e
commit ef0f5669b2
7 changed files with 142 additions and 102 deletions

View File

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

View File

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

View File

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

View File

@ -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:

View File

@ -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;

View File

@ -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;

View File

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