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:
parent
058a7b4f4e
commit
ef0f5669b2
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user