* Changed weapon skills to read list_num from the skill_db when calculating damage
git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@1111 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
f0586beb14
commit
7fa2d81908
@ -1,6 +1,8 @@
|
||||
Date Added
|
||||
|
||||
02/15
|
||||
* Added Wallex's changes for weapon skills to read list_num from the skill_db
|
||||
when calculating damage [celest]
|
||||
* Login / Login SQL: Fixed the EXE-Version check (now it works finally :) [Sirius]
|
||||
* Char SQL: Fixed the '0x2b05' reply to the mapserver (now multi - mapservers works again!)
|
||||
* Rewrote skill blocking system that was allowing people to bypass blocking
|
||||
|
@ -620,6 +620,8 @@ static struct Damage battle_calc_pet_weapon_attack(
|
||||
int flag,dmg_lv=0;
|
||||
int t_mode=0,t_race=0,t_size=1,s_race=0,s_ele=0;
|
||||
struct status_change *t_sc_data;
|
||||
int div_flag=0; // 0: total damage is to be divided by div_
|
||||
// 1: damage is distributed,and has to be multiplied by div_ [celest]
|
||||
|
||||
//return前の処理があるので情報出力部のみ変更
|
||||
if( target == NULL || pd == NULL ){ //srcは内容に直接触れていないのでスルーしてみる
|
||||
@ -661,7 +663,11 @@ static struct Damage battle_calc_pet_weapon_attack(
|
||||
hitrate=status_get_hit(src) - flee + 80;
|
||||
|
||||
type=0; // normal
|
||||
div_ = 1; // single attack
|
||||
if (skill_num > 0) {
|
||||
div_ = skill_get_num(skill_num,skill_lv);
|
||||
if (div_ < 1) div_ = 1; //Avoid the rare case where the db says div_ is 0 and below
|
||||
}
|
||||
else div_ = 1; // single attack
|
||||
|
||||
luk=status_get_luk(src);
|
||||
|
||||
@ -735,7 +741,6 @@ static struct Damage battle_calc_pet_weapon_attack(
|
||||
break;
|
||||
case AC_DOUBLE: // ダブルストレイフィング
|
||||
damage = damage*(180+ 20*skill_lv)/100;
|
||||
div_=2;
|
||||
flag=(flag&~BF_RANGEMASK)|BF_LONG;
|
||||
break;
|
||||
case AC_SHOWER: // アローシャワー
|
||||
@ -750,7 +755,7 @@ static struct Damage battle_calc_pet_weapon_attack(
|
||||
damage = damage*(100+ 10*skill_lv)/100;
|
||||
hitrate = hitrate*(100+5*skill_lv)/100;
|
||||
div_=t_size+1;
|
||||
damage*=div_;
|
||||
div_flag = 1;
|
||||
break;
|
||||
case KN_SPEARSTAB: // スピアスタブ
|
||||
damage = damage*(100+ 15*skill_lv)/100;
|
||||
@ -783,7 +788,6 @@ static struct Damage battle_calc_pet_weapon_attack(
|
||||
break;
|
||||
case AS_SONICBLOW: // ソニックブロウ
|
||||
damage = damage*(300+ 50*skill_lv)/100;
|
||||
div_=8;
|
||||
break;
|
||||
case TF_SPRINKLESAND: // 砂まき
|
||||
damage = damage*125/100;
|
||||
@ -793,8 +797,7 @@ static struct Damage battle_calc_pet_weapon_attack(
|
||||
break;
|
||||
// 以下MOB
|
||||
case NPC_COMBOATTACK: // 多段攻撃
|
||||
div_=skill_get_num(skill_num,skill_lv);
|
||||
damage *= div_;
|
||||
div_flag = 1;
|
||||
break;
|
||||
case NPC_RANDOMATTACK: // ランダムATK攻撃
|
||||
damage = damage*(50+rand()%150)/100;
|
||||
@ -842,7 +845,6 @@ static struct Damage battle_calc_pet_weapon_attack(
|
||||
break;
|
||||
case CR_HOLYCROSS: // ホーリークロス
|
||||
damage = damage*(100+ 35*skill_lv)/100;
|
||||
div_=2;
|
||||
break;
|
||||
case CR_GRANDCROSS:
|
||||
hitrate= 1000000;
|
||||
@ -859,7 +861,6 @@ static struct Damage battle_calc_pet_weapon_attack(
|
||||
break;
|
||||
case MO_FINGEROFFENSIVE: //指弾
|
||||
damage = damage * (125 + 25 * skill_lv) / 100;
|
||||
div_ = 1;
|
||||
flag=(flag&~BF_RANGEMASK)|BF_LONG; //orn
|
||||
break;
|
||||
case MO_INVESTIGATE: // 発 勁
|
||||
@ -875,7 +876,6 @@ static struct Damage battle_calc_pet_weapon_attack(
|
||||
break;
|
||||
case MO_CHAINCOMBO: // 連打掌
|
||||
damage = damage*(150+ 50*skill_lv)/100;
|
||||
div_=4;
|
||||
break;
|
||||
case MO_COMBOFINISH: // 猛龍拳
|
||||
damage = damage*(240+ 60*skill_lv)/100;
|
||||
@ -893,14 +893,12 @@ static struct Damage battle_calc_pet_weapon_attack(
|
||||
break;
|
||||
case CH_CHAINCRUSH: // 連柱崩撃
|
||||
damage = damage*(400+ 100*skill_lv)/100;
|
||||
div_=skill_get_num(skill_num,skill_lv);
|
||||
break;
|
||||
case CH_PALMSTRIKE: // 猛虎硬派山
|
||||
damage = damage*(200+ 100*skill_lv)/100;
|
||||
break;
|
||||
case LK_SPIRALPIERCE: /* スパイラルピアース */
|
||||
damage = damage*(100+ 50*skill_lv)/100; //増加量が分からないので適当に
|
||||
div_=5;
|
||||
flag=(flag&~BF_RANGEMASK)|BF_LONG;
|
||||
if(target->type == BL_PC)
|
||||
((struct map_session_data *)target)->canmove_tick = gettick() + 1000;
|
||||
@ -921,12 +919,15 @@ static struct Damage battle_calc_pet_weapon_attack(
|
||||
break;
|
||||
case CG_ARROWVULCAN: /* アローバルカン */
|
||||
damage = damage*(200+100*skill_lv)/100;
|
||||
div_=9;
|
||||
break;
|
||||
case AS_SPLASHER: /* ベナムスプラッシャー */
|
||||
damage = damage*(200+20*skill_lv)/100;
|
||||
break;
|
||||
}
|
||||
if (div_flag && div_ > 1) { // [Skotlex]
|
||||
damage *= div_;
|
||||
damage2 *= div_;
|
||||
}
|
||||
}
|
||||
|
||||
if( skill_num!=NPC_CRITICALSLASH ){
|
||||
@ -1061,6 +1062,8 @@ static struct Damage battle_calc_mob_weapon_attack(
|
||||
struct status_change *sc_data,*t_sc_data;
|
||||
short *sc_count;
|
||||
short *option, *opt1, *opt2;
|
||||
int div_flag=0; // 0: total damage is to be divided by div_
|
||||
// 1: damage is distributed,and has to be multiplied by div_ [celest]
|
||||
|
||||
//return前の処理があるので情報出力部のみ変更
|
||||
if( src == NULL || target == NULL || md == NULL ){
|
||||
@ -1129,7 +1132,10 @@ static struct Damage battle_calc_mob_weapon_attack(
|
||||
hitrate=status_get_hit(src) - flee + 80;
|
||||
|
||||
type=0; // normal
|
||||
div_ = 1; // single attack
|
||||
if (skill_num > 0) {
|
||||
div_ = skill_get_num(skill_num,skill_lv);
|
||||
if (div_ < 1) div_ = 1; //Avoid the rare case where the db says div_ is 0 and below
|
||||
} else div_ = 1; // single attack
|
||||
|
||||
luk=status_get_luk(src);
|
||||
|
||||
@ -1230,7 +1236,6 @@ static struct Damage battle_calc_mob_weapon_attack(
|
||||
break;
|
||||
case AC_DOUBLE: // ダブルストレイフィング
|
||||
damage = damage*(180+ 20*skill_lv)/100;
|
||||
div_=2;
|
||||
flag=(flag&~BF_RANGEMASK)|BF_LONG;
|
||||
break;
|
||||
case AC_SHOWER: // アローシャワー
|
||||
@ -1243,9 +1248,9 @@ static struct Damage battle_calc_mob_weapon_attack(
|
||||
break;
|
||||
case KN_PIERCE: // ピアース
|
||||
damage = damage*(100+ 10*skill_lv)/100;
|
||||
hitrate=hitrate*(100+5*skill_lv)/100;
|
||||
div_=t_size+1;
|
||||
damage*=div_;
|
||||
hitrate = hitrate*(100+5*skill_lv)/100;
|
||||
div_ = t_size+1;
|
||||
div_flag = 1;
|
||||
break;
|
||||
case KN_SPEARSTAB: // スピアスタブ
|
||||
damage = damage*(100+ 15*skill_lv)/100;
|
||||
@ -1285,7 +1290,6 @@ static struct Damage battle_calc_mob_weapon_attack(
|
||||
break;
|
||||
case AS_SONICBLOW: // ソニックブロウ
|
||||
damage = damage*(300+ 50*skill_lv)/100;
|
||||
div_=8;
|
||||
break;
|
||||
case TF_SPRINKLESAND: // 砂まき
|
||||
damage = damage*125/100;
|
||||
@ -1295,8 +1299,7 @@ static struct Damage battle_calc_mob_weapon_attack(
|
||||
break;
|
||||
// 以下MOB
|
||||
case NPC_COMBOATTACK: // 多段攻撃
|
||||
div_=skill_get_num(skill_num,skill_lv);
|
||||
damage *= div_;
|
||||
div_flag = 1;
|
||||
break;
|
||||
case NPC_RANDOMATTACK: // ランダムATK攻撃
|
||||
damage = damage*(50+rand()%150)/100;
|
||||
@ -1344,7 +1347,6 @@ static struct Damage battle_calc_mob_weapon_attack(
|
||||
break;
|
||||
case CR_HOLYCROSS: // ホーリークロス
|
||||
damage = damage*(100+ 35*skill_lv)/100;
|
||||
div_=2;
|
||||
break;
|
||||
case CR_GRANDCROSS:
|
||||
hitrate= 1000000;
|
||||
@ -1361,7 +1363,6 @@ static struct Damage battle_calc_mob_weapon_attack(
|
||||
break;
|
||||
case MO_FINGEROFFENSIVE: //指弾
|
||||
damage = damage * (125 + 25 * skill_lv) / 100;
|
||||
div_ = 1;
|
||||
flag=(flag&~BF_RANGEMASK)|BF_LONG; //orn
|
||||
break;
|
||||
case MO_INVESTIGATE: // 発 勁
|
||||
@ -1377,7 +1378,6 @@ static struct Damage battle_calc_mob_weapon_attack(
|
||||
break;
|
||||
case MO_CHAINCOMBO: // 連打掌
|
||||
damage = damage*(150+ 50*skill_lv)/100;
|
||||
div_=4;
|
||||
break;
|
||||
case BA_MUSICALSTRIKE: // ミュージカルストライク
|
||||
damage = damage*(60+ 40 * skill_lv)/100;
|
||||
@ -1395,14 +1395,12 @@ static struct Damage battle_calc_mob_weapon_attack(
|
||||
break;
|
||||
case CH_CHAINCRUSH: // 連柱崩撃
|
||||
damage = damage*(400+ 100*skill_lv)/100;
|
||||
div_=skill_get_num(skill_num,skill_lv);
|
||||
break;
|
||||
case CH_PALMSTRIKE: // 猛虎硬派山
|
||||
damage = damage*(200+ 100*skill_lv)/100;
|
||||
break;
|
||||
case LK_SPIRALPIERCE: /* スパイラルピアース */
|
||||
damage = damage*(100+ 50*skill_lv)/100; //増加量が分からないので適当に
|
||||
div_=5;
|
||||
flag=(flag&~BF_RANGEMASK)|BF_LONG;
|
||||
if(tsd)
|
||||
tsd->canmove_tick = gettick() + 1000;
|
||||
@ -1423,12 +1421,15 @@ static struct Damage battle_calc_mob_weapon_attack(
|
||||
break;
|
||||
case CG_ARROWVULCAN: /* アローバルカン */
|
||||
damage = damage*(200+100*skill_lv)/100;
|
||||
div_=9;
|
||||
break;
|
||||
case AS_SPLASHER: /* ベナムスプラッシャー */
|
||||
damage = damage*(200+20*skill_lv)/100;
|
||||
break;
|
||||
}
|
||||
if (div_flag && div_ > 1) { // [Skotlex]
|
||||
damage *= div_;
|
||||
damage2 *= div_;
|
||||
}
|
||||
}
|
||||
|
||||
if( skill_num!=NPC_CRITICALSLASH ){
|
||||
@ -1617,6 +1618,8 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
int watk,watk_,cardfix,t_ele;
|
||||
int da=0,i,t_class,ac_flag = 0;
|
||||
int idef_flag=0,idef_flag_=0;
|
||||
int div_flag=0; // 0: total damage is to be divided by div_
|
||||
// 1: damage is distributed,and has to be multiplied by div_ [celest]
|
||||
|
||||
//return前の処理があるので情報出力部のみ変更
|
||||
if( src == NULL || target == NULL || sd == NULL ){
|
||||
@ -1695,7 +1698,10 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
hitrate=status_get_hit(src) - flee + 80; //命中率計算
|
||||
|
||||
type=0; // normal
|
||||
div_ = 1; // single attack
|
||||
if (skill_num > 0) {
|
||||
div_=skill_get_num(skill_num,skill_lv);
|
||||
if (div_ < 1) div_ = 1; //Avoid the rare case where the db says div_ is 0 and below
|
||||
} else div_ = 1; // single attack
|
||||
|
||||
dex=status_get_dex(src); //DEX
|
||||
luk=status_get_luk(src); //LUK
|
||||
@ -1955,7 +1961,6 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
}
|
||||
damage = damage*(180+ 20*skill_lv)/100;
|
||||
damage2 = damage2*(180+ 20*skill_lv)/100;
|
||||
div_=2;
|
||||
if(sd->arrow_ele > 0) {
|
||||
s_ele = sd->arrow_ele;
|
||||
s_ele_ = sd->arrow_ele;
|
||||
@ -1998,8 +2003,7 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
damage2 = damage2*(100+ 10*skill_lv)/100;
|
||||
hitrate=hitrate*(100+5*skill_lv)/100;
|
||||
div_=t_size+1;
|
||||
damage*=div_;
|
||||
damage2*=div_;
|
||||
div_flag=1;
|
||||
break;
|
||||
case KN_SPEARSTAB: // スピアスタブ
|
||||
damage = damage*(100+ 15*skill_lv)/100;
|
||||
@ -2054,7 +2058,6 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
hitrate+=30; // hitrate +30, thanks to midas
|
||||
damage = damage*(300+ 50*skill_lv)/100;
|
||||
damage2 = damage2*(300+ 50*skill_lv)/100;
|
||||
div_=8;
|
||||
break;
|
||||
case TF_SPRINKLESAND: // 砂まき
|
||||
damage = damage*125/100;
|
||||
@ -2074,9 +2077,7 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
break;
|
||||
// 以下MOB
|
||||
case NPC_COMBOATTACK: // 多段攻撃
|
||||
div_=skill_get_num(skill_num,skill_lv);
|
||||
damage *= div_;
|
||||
damage2 *= div_;
|
||||
div_flag=1;
|
||||
break;
|
||||
case NPC_RANDOMATTACK: // ランダムATK攻撃
|
||||
damage = damage*(50+rand()%150)/100;
|
||||
@ -2137,7 +2138,6 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
case CR_HOLYCROSS: // ホーリークロス
|
||||
damage = damage*(100+ 35*skill_lv)/100;
|
||||
damage2 = damage2*(100+ 35*skill_lv)/100;
|
||||
div_=2;
|
||||
break;
|
||||
case CR_GRANDCROSS:
|
||||
hitrate= 1000000;
|
||||
@ -2159,16 +2159,13 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
no_cardfix = 1;
|
||||
break;
|
||||
case MO_FINGEROFFENSIVE: //指弾
|
||||
damage = damage * (125 + 25 * skill_lv) / 100;
|
||||
damage2 = damage2 * (125 + 25 * skill_lv) / 100;
|
||||
if(battle_config.finger_offensive_type == 0) {
|
||||
damage = damage * (125 + 25 * skill_lv) / 100 * sd->spiritball_old;
|
||||
damage2 = damage2 * (125 + 25 * skill_lv) / 100 * sd->spiritball_old;
|
||||
div_ = sd->spiritball_old;
|
||||
div_flag = 1;
|
||||
}
|
||||
else {
|
||||
damage = damage * (125 + 25 * skill_lv) / 100;
|
||||
damage2 = damage2 * (125 + 25 * skill_lv) / 100;
|
||||
div_ = 1;
|
||||
}
|
||||
else div_ = 1;
|
||||
flag=(flag&~BF_RANGEMASK)|BF_LONG; //orn
|
||||
break;
|
||||
case MO_INVESTIGATE: // 発 勁
|
||||
@ -2192,7 +2189,6 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
case MO_CHAINCOMBO: // 連打掌
|
||||
damage = damage*(150+ 50*skill_lv)/100;
|
||||
damage2 = damage2*(150+ 50*skill_lv)/100;
|
||||
div_=4;
|
||||
break;
|
||||
case MO_COMBOFINISH: // 猛龍拳
|
||||
damage = damage*(240+ 60*skill_lv)/100;
|
||||
@ -2229,7 +2225,6 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
case CH_CHAINCRUSH: // 連柱崩撃
|
||||
damage = damage*(100+ 60*skill_lv)/100;
|
||||
damage2 = damage2*(100+ 60*skill_lv)/100;
|
||||
div_=skill_get_num(skill_num,skill_lv);
|
||||
break;
|
||||
case CH_PALMSTRIKE: // 猛虎硬派山
|
||||
damage = damage*(50+ 100*skill_lv)/100;
|
||||
@ -2238,7 +2233,6 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
case LK_SPIRALPIERCE: /* スパイラルピアース */
|
||||
damage = damage*(100+ 50*skill_lv)/100; //増加量が分からないので適当に
|
||||
damage2 = damage2*(100+ 50*skill_lv)/100; //増加量が分からないので適当に
|
||||
div_=5;
|
||||
flag=(flag&~BF_RANGEMASK)|BF_LONG;
|
||||
if(tsd)
|
||||
tsd->canmove_tick = gettick() + 1000;
|
||||
@ -2265,7 +2259,6 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
case CG_ARROWVULCAN: /* アローバルカン */
|
||||
damage = damage*(200+100*skill_lv)/100;
|
||||
damage2 = damage2*(200+100*skill_lv)/100;
|
||||
div_=9;
|
||||
if(sd->arrow_ele > 0) {
|
||||
s_ele = sd->arrow_ele;
|
||||
s_ele_ = sd->arrow_ele;
|
||||
@ -2325,6 +2318,10 @@ static struct Damage battle_calc_pc_weapon_attack(
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (div_flag && div_ > 1) { // [Skotlex]
|
||||
damage *= div_;
|
||||
damage2 *= div_;
|
||||
}
|
||||
}
|
||||
if(da == 2) { //三段掌が発動しているか
|
||||
type = 0x08;
|
||||
|
Loading…
x
Reference in New Issue
Block a user