Follow up on r16240 update RK_CRUSHTRIKE formula and weapon break percentage.

Fixed bugreport:5953 GC_CROSSRIPPERSLASHER range is now (8 + 1 * skill level) cells.
Fixed bugreport:5943 SC_GROOMY is now really remove selected mounts.
Updated Guillotine cross skills formula base on re-balancing formulas...

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16243 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
rud0lp20 2012-06-08 12:28:14 +00:00
parent 10057be973
commit 9c2c02007f
10 changed files with 92 additions and 75 deletions

View File

@ -1126,8 +1126,8 @@
2028,0,2000,0,180000,0,0 2028,0,2000,0,180000,0,0
//-- GC_COUNTERSLASH //-- GC_COUNTERSLASH
2029,0,2000,0,0,0,0 2029,0,2000,0,0,0,0
//-- GC_WEAPONCRUSH //CHECK duration 1 devist //-- GC_WEAPONCRUSH
2030,0,1000,0,40000:80000:120000:160000:200000,0,0 2030,0,1000,0,60000,0,0
//-- GC_VENOMPRESSURE //-- GC_VENOMPRESSURE
2031,0,1000,0,0,0,0 2031,0,1000,0,0,0,0
//-- GC_POISONSMOKE //CHECK Cast time is said 2 second fixed, but no variable. Check duration 1 (was added / thought to be AoE duration) //-- GC_POISONSMOKE //CHECK Cast time is said 2 second fixed, but no variable. Check duration 1 (was added / thought to be AoE duration)

View File

@ -743,7 +743,7 @@
2034,0,6,4,-1,0x2,3,1,1,no,0,0,0,weapon,0, GC_PHANTOMMENACE,Phantom Menace 2034,0,6,4,-1,0x2,3,1,1,no,0,0,0,weapon,0, GC_PHANTOMMENACE,Phantom Menace
2035,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, GC_HALLUCINATIONWALK,Hallucination Walk 2035,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, GC_HALLUCINATIONWALK,Hallucination Walk
2036,0,6,4,-1,0x2,1:1:1:1:2,5,1,no,0,0,0,weapon,0, GC_ROLLINGCUTTER,Rolling Cutter 2036,0,6,4,-1,0x2,1:1:1:1:2,5,1,no,0,0,0,weapon,0, GC_ROLLINGCUTTER,Rolling Cutter
2037,7,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, GC_CROSSRIPPERSLASHER,Cross Ripper Slasher 2037,9:10:11:12:13,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, GC_CROSSRIPPERSLASHER,Cross Ripper Slasher
//**** //****
// AB Arch Bishop // AB Arch Bishop

View File

@ -1127,8 +1127,8 @@
2028,0,2000,0,180000,0,0,0 2028,0,2000,0,180000,0,0,0
//-- GC_COUNTERSLASH //-- GC_COUNTERSLASH
2029,0,2000,0,0,0,0,0 2029,0,2000,0,0,0,0,0
//-- GC_WEAPONCRUSH //CHECK duration 1 devist //-- GC_WEAPONCRUSH
2030,0,1000,0,40000:80000:120000:160000:200000,0,0,0 2030,0,1000,0,60000,0,0,0
//-- GC_VENOMPRESSURE //-- GC_VENOMPRESSURE
2031,0,1000,0,0,0,0,0 2031,0,1000,0,0,0,0,0
//-- GC_POISONSMOKE //CHECK Cast time is said 2 second fixed, but no variable. Check duration 1 (was added / thought to be AoE duration) //-- GC_POISONSMOKE //CHECK Cast time is said 2 second fixed, but no variable. Check duration 1 (was added / thought to be AoE duration)

View File

@ -744,7 +744,7 @@
2034,0,6,4,-1,0x2,3,1,1,no,0,0,0,weapon,0, GC_PHANTOMMENACE,Phantom Menace 2034,0,6,4,-1,0x2,3,1,1,no,0,0,0,weapon,0, GC_PHANTOMMENACE,Phantom Menace
2035,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, GC_HALLUCINATIONWALK,Hallucination Walk 2035,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, GC_HALLUCINATIONWALK,Hallucination Walk
2036,0,6,4,-1,0x2,1:1:1:1:2,5,1,no,0,0,0,weapon,0, GC_ROLLINGCUTTER,Rolling Cutter 2036,0,6,4,-1,0x2,1:1:1:1:2,5,1,no,0,0,0,weapon,0, GC_ROLLINGCUTTER,Rolling Cutter
2037,7,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, GC_CROSSRIPPERSLASHER,Cross Ripper Slasher 2037,9:10:11:12:13,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, GC_CROSSRIPPERSLASHER,Cross Ripper Slasher
//**** //****
// AB Arch Bishop // AB Arch Bishop

View File

@ -2025,15 +2025,15 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
break; break;
case RK_SONICWAVE: case RK_SONICWAVE:
skillratio += 400 + 100 * skill_lv; skillratio += 400 + 100 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case RK_HUNDREDSPEAR: case RK_HUNDREDSPEAR:
skillratio += 500 + 40 * skill_lv; skillratio += 500 + 40 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case RK_WINDCUTTER: case RK_WINDCUTTER:
skillratio += 50 * skill_lv; skillratio += 50 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case RK_IGNITIONBREAK: case RK_IGNITIONBREAK:
i = distance_bl(src,target); i = distance_bl(src,target);
@ -2043,16 +2043,17 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
skillratio = 100 + 200 * skill_lv; skillratio = 100 + 200 * skill_lv;
else else
skillratio = 100 + 100 * skill_lv; skillratio = 100 + 100 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
if( sstatus->rhw.ele == ELE_FIRE ) if( sstatus->rhw.ele == ELE_FIRE )
skillratio += skillratio / 2; skillratio += skillratio / 2;
break; break;
case RK_CRUSHSTRIKE: case RK_CRUSHSTRIKE:
if( sd ) if( sd )
{ {//ATK [{Weapon Level * (Weapon Upgrade Level + 6) * 100} + (Weapon ATK) + (Weapon Weight)]%
short index = sd->equip_index[EQI_HAND_R]; short index = sd->equip_index[EQI_HAND_R];
if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON ) if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
skillratio = sd->inventory_data[index]->weight + sstatus->rhw.atk + 100 * sd->inventory_data[index]->wlv * (sd->status.inventory[index].refine + 6); skillratio = sd->inventory_data[index]->weight/10 + sstatus->rhw.atk +
100 * sd->inventory_data[index]->wlv * (sd->status.inventory[index].refine + 6);
} }
break; break;
case RK_STORMBLAST: case RK_STORMBLAST:
@ -2067,21 +2068,25 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
* GC Guilotine Cross * GC Guilotine Cross
**/ **/
case GC_CROSSIMPACT: case GC_CROSSIMPACT:
skillratio += 1050 + 50 * skill_lv; skillratio += 900 + 100 * skill_lv;
RE_LVL_DMOD(120);
break; break;
case GC_PHANTOMMENACE: case GC_PHANTOMMENACE:
skillratio += 200; skillratio += 200;
break; break;
case GC_COUNTERSLASH: case GC_COUNTERSLASH:
skillratio += 200 + (100 * skill_lv) + sstatus->agi; //ATK [{(Skill Level x 100) + 300} x Caster's Base Level / 120]% + ATK [(AGI x 2) + (Caster's Job Level x 4)]%
skillratio += 200 + (100 * skill_lv);
RE_LVL_DMOD(120);
skillratio += sstatus->agi + (sd?sd->status.job_level:0) * 4;
break; break;
case GC_ROLLINGCUTTER: case GC_ROLLINGCUTTER:
skillratio += 20 * skill_lv; skillratio += -50 + 50 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case GC_CROSSRIPPERSLASHER: case GC_CROSSRIPPERSLASHER:
skillratio += 300 + 80 * skill_lv; skillratio += 300 + 80 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
if( sc && sc->data[SC_ROLLINGCUTTER] ) if( sc && sc->data[SC_ROLLINGCUTTER] )
skillratio += sc->data[SC_ROLLINGCUTTER]->val1 * sstatus->agi; skillratio += sc->data[SC_ROLLINGCUTTER]->val1 * sstatus->agi;
break; break;
@ -2096,11 +2101,11 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
**/ **/
case RA_ARROWSTORM: case RA_ARROWSTORM:
skillratio += 900 + 80 * skill_lv; skillratio += 900 + 80 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case RA_AIMEDBOLT: case RA_AIMEDBOLT:
skillratio += 400 + 50 * skill_lv; skillratio += 400 + 50 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
if( tsc && (tsc->data[SC_BITE] || tsc->data[SC_ANKLE] || tsc->data[SC_ELECTRICSHOCKER]) ) if( tsc && (tsc->data[SC_BITE] || tsc->data[SC_ANKLE] || tsc->data[SC_ELECTRICSHOCKER]) )
wd.div_ = tstatus->size + 2 + rnd()%2; wd.div_ = tstatus->size + 2 + rnd()%2;
break; break;
@ -2125,20 +2130,20 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
**/ **/
case NC_BOOSTKNUCKLE: case NC_BOOSTKNUCKLE:
skillratio += 100 + 100 * skill_lv + sstatus->dex; skillratio += 100 + 100 * skill_lv + sstatus->dex;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case NC_PILEBUNKER: case NC_PILEBUNKER:
skillratio += 200 + 100 * skill_lv + sstatus->str; skillratio += 200 + 100 * skill_lv + sstatus->str;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case NC_VULCANARM: case NC_VULCANARM:
skillratio = 70 * skill_lv + sstatus->dex; skillratio = 70 * skill_lv + sstatus->dex;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case NC_FLAMELAUNCHER: case NC_FLAMELAUNCHER:
case NC_COLDSLOWER: case NC_COLDSLOWER:
skillratio += 200 + 300 * skill_lv; skillratio += 200 + 300 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case NC_ARMSCANNON: case NC_ARMSCANNON:
switch( tstatus->size ) { switch( tstatus->size ) {
@ -2146,7 +2151,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
case SZ_MEDIUM: skillratio += 100 + 400 * skill_lv; break;// Medium case SZ_MEDIUM: skillratio += 100 + 400 * skill_lv; break;// Medium
case SZ_BIG: skillratio += 100 + 300 * skill_lv; break;// Large case SZ_BIG: skillratio += 100 + 300 * skill_lv; break;// Large
} }
RE_LVL_DMOD(); RE_LVL_DMOD(100);
//NOTE: Their's some other factors that affects damage, but not sure how exactly. Will recheck one day. [Rytech] //NOTE: Their's some other factors that affects damage, but not sure how exactly. Will recheck one day. [Rytech]
break; break;
case NC_AXEBOOMERANG: case NC_AXEBOOMERANG:
@ -2156,15 +2161,15 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON ) if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
skillratio += sd->inventory_data[index]->weight / 10;// Weight is divided by 10 since 10 weight in coding make 1 whole actural weight. [Rytech] skillratio += sd->inventory_data[index]->weight / 10;// Weight is divided by 10 since 10 weight in coding make 1 whole actural weight. [Rytech]
} }
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case NC_POWERSWING: case NC_POWERSWING:
skillratio += 80 + 20 * skill_lv + sstatus->str + sstatus->dex; skillratio += 80 + 20 * skill_lv + sstatus->str + sstatus->dex;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case NC_AXETORNADO: case NC_AXETORNADO:
skillratio += 100 + 100 * skill_lv + sstatus->vit; skillratio += 100 + 100 * skill_lv + sstatus->vit;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case SC_FATALMENACE: case SC_FATALMENACE:
skillratio += 100 * skill_lv; skillratio += 100 * skill_lv;
@ -2177,28 +2182,28 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
break; break;
case LG_CANNONSPEAR:// Stimated formula. Still need confirm it. case LG_CANNONSPEAR:// Stimated formula. Still need confirm it.
skillratio += -100 + (50 + sstatus->str) * skill_lv; skillratio += -100 + (50 + sstatus->str) * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case LG_BANISHINGPOINT: case LG_BANISHINGPOINT:
skillratio += -100 + ((50 * skill_lv) + (30 * ((sd)?pc_checkskill(sd,SM_BASH):1))); skillratio += -100 + ((50 * skill_lv) + (30 * ((sd)?pc_checkskill(sd,SM_BASH):1)));
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case LG_SHIELDPRESS: case LG_SHIELDPRESS:
skillratio += 60 + 43 * skill_lv; skillratio += 60 + 43 * skill_lv;
//if( sc && sc->data[SC_GLOOMYDAY_SK] ) //if( sc && sc->data[SC_GLOOMYDAY_SK] )
// skillratio += 80 + (5 * sc->data[SC_GLOOMYDAY_SK]->val1); // skillratio += 80 + (5 * sc->data[SC_GLOOMYDAY_SK]->val1);
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case LG_PINPOINTATTACK: case LG_PINPOINTATTACK:
skillratio = ((100 * skill_lv) + (10 * status_get_agi(src)) ); skillratio = ((100 * skill_lv) + (10 * status_get_agi(src)) );
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case LG_RAGEBURST: case LG_RAGEBURST:
if( sd && sd->spiritball_old ) if( sd && sd->spiritball_old )
skillratio += -100 + (sd->spiritball_old * 200); skillratio += -100 + (sd->spiritball_old * 200);
else else
skillratio += -100 + 15 * 200; skillratio += -100 + 15 * 200;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case LG_SHIELDSPELL:// [(Casters Base Level x 4) + (Shield DEF x 10) + (Casters VIT x 2)] % case LG_SHIELDSPELL:// [(Casters Base Level x 4) + (Shield DEF x 10) + (Casters VIT x 2)] %
if( sd ) { if( sd ) {
@ -2211,27 +2216,27 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
break; break;
case LG_MOONSLASHER: case LG_MOONSLASHER:
skillratio += -100 + (120 * skill_lv + ((sd) ? pc_checkskill(sd,LG_OVERBRAND) : 5) * 80); skillratio += -100 + (120 * skill_lv + ((sd) ? pc_checkskill(sd,LG_OVERBRAND) : 5) * 80);
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case LG_OVERBRAND: case LG_OVERBRAND:
skillratio = 400 * skill_lv + (pc_checkskill(sd,CR_SPEARQUICKEN) * 30); skillratio = 400 * skill_lv + (pc_checkskill(sd,CR_SPEARQUICKEN) * 30);
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case LG_OVERBRAND_BRANDISH: case LG_OVERBRAND_BRANDISH:
skillratio = 300 * skill_lv + (2 * (sstatus->str + sstatus->dex) / 3); skillratio = 300 * skill_lv + (2 * (sstatus->str + sstatus->dex) / 3);
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case LG_OVERBRAND_PLUSATK: case LG_OVERBRAND_PLUSATK:
skillratio = 150 * skill_lv; skillratio = 150 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case LG_RAYOFGENESIS: case LG_RAYOFGENESIS:
skillratio = skillratio + 200 + 300 * skill_lv; skillratio = skillratio + 200 + 300 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case LG_EARTHDRIVE: case LG_EARTHDRIVE:
skillratio = (skillratio + 100) * skill_lv; skillratio = (skillratio + 100) * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case LG_HESPERUSLIT: case LG_HESPERUSLIT:
skillratio += 120 * skill_lv - 100; skillratio += 120 * skill_lv - 100;
@ -2276,7 +2281,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
skillratio += 800 * skill_lv -100; skillratio += 800 * skill_lv -100;
else else
skillratio += 500 * skill_lv -100; skillratio += 500 * skill_lv -100;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case SR_GENTLETOUCH_QUIET: case SR_GENTLETOUCH_QUIET:
skillratio += 100 * skill_lv - 100 + sstatus->dex; skillratio += 100 * skill_lv - 100 + sstatus->dex;
@ -2306,7 +2311,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
case GN_CART_TORNADO: case GN_CART_TORNADO:
if( sd ) if( sd )
skillratio += 50 * skill_lv + pc_checkskill(sd, GN_REMODELING_CART) * 100 - 100; skillratio += 50 * skill_lv + pc_checkskill(sd, GN_REMODELING_CART) * 100 - 100;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
if( sc && sc->data[SC_GN_CARTBOOST] ) if( sc && sc->data[SC_GN_CARTBOOST] )
skillratio += 10 * sc->data[SC_GN_CARTBOOST]->val1; skillratio += 10 * sc->data[SC_GN_CARTBOOST]->val1;
break; break;
@ -3402,11 +3407,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case AB_JUDEX: case AB_JUDEX:
skillratio += 180 + 20 * skill_lv; skillratio += 180 + 20 * skill_lv;
if (skill_lv > 4) skillratio += 20; if (skill_lv > 4) skillratio += 20;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case AB_ADORAMUS: case AB_ADORAMUS:
skillratio += 400 + 100 * skill_lv; skillratio += 400 + 100 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case AB_DUPLELIGHT_MAGIC: case AB_DUPLELIGHT_MAGIC:
skillratio += 100 + 20 * skill_lv; skillratio += 100 + 20 * skill_lv;
@ -3416,36 +3421,37 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
**/ **/
case WL_SOULEXPANSION: case WL_SOULEXPANSION:
skillratio += 300 + 100 * skill_lv + sstatus->int_; skillratio += 300 + 100 * skill_lv + sstatus->int_;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case WL_FROSTMISTY: case WL_FROSTMISTY:
skillratio += 100 + 100 * skill_lv; skillratio += 100 + 100 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case WL_JACKFROST: { case WL_JACKFROST: {
struct status_change *tsc = status_get_sc(target); struct status_change *tsc = status_get_sc(target);
if( tsc && tsc->data[SC_FREEZING] ) { if( tsc && tsc->data[SC_FREEZING] ){
skillratio += 900 + 300 * skill_lv; skillratio += 900 + 300 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
} else }else{
skillratio += 400 + 100 * skill_lv; skillratio += 400 + 100 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(150);
}
} }
break; break;
case WL_DRAINLIFE: case WL_DRAINLIFE:
skillratio = 200 * skill_lv + sstatus->int_; skillratio = 200 * skill_lv + sstatus->int_;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case WL_CRIMSONROCK: case WL_CRIMSONROCK:
skillratio += 1200 + 300 * skill_lv; skillratio += 1200 + 300 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case WL_HELLINFERNO: case WL_HELLINFERNO:
if( status_get_element(target) == ELE_FIRE ) if( status_get_element(target) == ELE_FIRE )
skillratio = 60 * skill_lv; skillratio = 60 * skill_lv;
else else
skillratio = 240 * skill_lv; skillratio = 240 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case WL_COMET: { case WL_COMET: {
struct status_change * sc = status_get_sc(src); struct status_change * sc = status_get_sc(src);
@ -3464,11 +3470,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
break; break;
case WL_CHAINLIGHTNING_ATK: case WL_CHAINLIGHTNING_ATK:
skillratio += 100 + 300 * skill_lv; skillratio += 100 + 300 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case WL_EARTHSTRAIN: case WL_EARTHSTRAIN:
skillratio += 1900 + 100 * skill_lv; skillratio += 1900 + 100 * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case WL_TETRAVORTEX_FIRE: case WL_TETRAVORTEX_FIRE:
case WL_TETRAVORTEX_WATER: case WL_TETRAVORTEX_WATER:
@ -3481,11 +3487,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case WL_SUMMON_ATK_WIND: case WL_SUMMON_ATK_WIND:
case WL_SUMMON_ATK_GROUND: case WL_SUMMON_ATK_GROUND:
skillratio = skill_lv * (status_get_lv(src) + ( sd ? sd->status.job_level : 50 ));// This is close to official, but lacking a little info to finalize. [Rytech] skillratio = skill_lv * (status_get_lv(src) + ( sd ? sd->status.job_level : 50 ));// This is close to official, but lacking a little info to finalize. [Rytech]
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case LG_RAYOFGENESIS: case LG_RAYOFGENESIS:
skillratio = (skillratio + 200) * skill_lv; skillratio = (skillratio + 200) * skill_lv;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
break; break;
case LG_SHIELDSPELL:// [(Casters Base Level x 4) + (Shield MDEF x 100) + (Casters INT x 2)] % case LG_SHIELDSPELL:// [(Casters Base Level x 4) + (Shield MDEF x 100) + (Casters INT x 2)] %
if( sd ) { if( sd ) {
@ -3505,7 +3511,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case SO_FIREWALK: { case SO_FIREWALK: {
struct status_change * sc = status_get_sc(src); struct status_change * sc = status_get_sc(src);
skillratio = 300; skillratio = 300;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
if( sc && sc->data[SC_HEATER_OPTION] ) if( sc && sc->data[SC_HEATER_OPTION] )
skillratio += skillratio * sc->data[SC_HEATER_OPTION]->val3 / 100; skillratio += skillratio * sc->data[SC_HEATER_OPTION]->val3 / 100;
} }
@ -3513,7 +3519,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case SO_ELECTRICWALK: { case SO_ELECTRICWALK: {
struct status_change * sc = status_get_sc(src); struct status_change * sc = status_get_sc(src);
skillratio = 300; skillratio = 300;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
if( sc && sc->data[SC_BLAST_OPTION] ) if( sc && sc->data[SC_BLAST_OPTION] )
skillratio += skillratio * sc->data[SC_BLAST_OPTION]->val2 / 100; skillratio += skillratio * sc->data[SC_BLAST_OPTION]->val2 / 100;
} }
@ -3521,7 +3527,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case SO_EARTHGRAVE: { case SO_EARTHGRAVE: {
struct status_change * sc = status_get_sc(src); struct status_change * sc = status_get_sc(src);
skillratio = ( 200 * ( sd ? pc_checkskill(sd, SA_SEISMICWEAPON) : 10 ) + sstatus->int_ * skill_lv ); skillratio = ( 200 * ( sd ? pc_checkskill(sd, SA_SEISMICWEAPON) : 10 ) + sstatus->int_ * skill_lv );
RE_LVL_DMOD(); RE_LVL_DMOD(100);
if( sc && sc->data[SC_CURSED_SOIL_OPTION] ) if( sc && sc->data[SC_CURSED_SOIL_OPTION] )
skillratio += skillratio * sc->data[SC_CURSED_SOIL_OPTION]->val2 / 100; skillratio += skillratio * sc->data[SC_CURSED_SOIL_OPTION]->val2 / 100;
} }
@ -3529,7 +3535,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case SO_DIAMONDDUST: { case SO_DIAMONDDUST: {
struct status_change * sc = status_get_sc(src); struct status_change * sc = status_get_sc(src);
skillratio = ( 200 * ( sd ? pc_checkskill(sd, SA_FROSTWEAPON) : 10 ) + sstatus->int_ * skill_lv ); skillratio = ( 200 * ( sd ? pc_checkskill(sd, SA_FROSTWEAPON) : 10 ) + sstatus->int_ * skill_lv );
RE_LVL_DMOD(); RE_LVL_DMOD(100);
if( sc && sc->data[SC_COOLER_OPTION] ) if( sc && sc->data[SC_COOLER_OPTION] )
skillratio += skillratio * sc->data[SC_COOLER_OPTION]->val3 / 100; skillratio += skillratio * sc->data[SC_COOLER_OPTION]->val3 / 100;
} }
@ -3544,7 +3550,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case SO_PSYCHIC_WAVE: { case SO_PSYCHIC_WAVE: {
struct status_change * sc = status_get_sc(src); struct status_change * sc = status_get_sc(src);
skillratio += -100 + skill_lv * 70 + (sstatus->int_ * 3); skillratio += -100 + skill_lv * 70 + (sstatus->int_ * 3);
RE_LVL_DMOD(); RE_LVL_DMOD(100);
if( sc ){ if( sc ){
if( sc->data[SC_HEATER_OPTION] ) if( sc->data[SC_HEATER_OPTION] )
skillratio += skillratio * sc->data[SC_HEATER_OPTION]->val3 / 100; skillratio += skillratio * sc->data[SC_HEATER_OPTION]->val3 / 100;
@ -3560,7 +3566,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case SO_VARETYR_SPEAR: { case SO_VARETYR_SPEAR: {
struct status_change * sc = status_get_sc(src); struct status_change * sc = status_get_sc(src);
skillratio += -100 + ( 100 * ( sd ? pc_checkskill(sd, SA_LIGHTNINGLOADER) : 10 ) + sstatus->int_ * skill_lv ); skillratio += -100 + ( 100 * ( sd ? pc_checkskill(sd, SA_LIGHTNINGLOADER) : 10 ) + sstatus->int_ * skill_lv );
RE_LVL_DMOD(); RE_LVL_DMOD(100);
if( sc && sc->data[SC_BLAST_OPTION] ) if( sc && sc->data[SC_BLAST_OPTION] )
skillratio += skillratio * sc->data[SC_BLAST_OPTION]->val2 / 100; skillratio += skillratio * sc->data[SC_BLAST_OPTION]->val2 / 100;
} }
@ -3568,7 +3574,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
case SO_CLOUD_KILL: { case SO_CLOUD_KILL: {
struct status_change * sc = status_get_sc(src); struct status_change * sc = status_get_sc(src);
skillratio += -100 + skill_lv * 40; skillratio += -100 + skill_lv * 40;
RE_LVL_DMOD(); RE_LVL_DMOD(100);
if( sc && sc->data[SC_CURSED_SOIL_OPTION] ) if( sc && sc->data[SC_CURSED_SOIL_OPTION] )
skillratio += skillratio * sc->data[SC_CURSED_SOIL_OPTION]->val2 / 100; skillratio += skillratio * sc->data[SC_CURSED_SOIL_OPTION]->val2 / 100;
} }

View File

@ -84,9 +84,9 @@
/* Renewal's dmg level modifier, used as a macro for a easy way to turn off. */ /* Renewal's dmg level modifier, used as a macro for a easy way to turn off. */
#ifdef RENEWAL_LVDMG #ifdef RENEWAL_LVDMG
#define RE_LVL_DMOD() \ #define RE_LVL_DMOD(val) \
if( status_get_lv(src) > 100 ) \ if( status_get_lv(src) > 100 && val > 0 ) \
skillratio = skillratio * status_get_lv(src) / 100; skillratio = skillratio * status_get_lv(src) / val;
#define RE_LVL_MDMOD(val) \ #define RE_LVL_MDMOD(val) \
if( status_get_lv(src) > 100 && val > 0) \ if( status_get_lv(src) > 100 && val > 0) \
md.damage = md.damage * status_get_lv(src) / val; md.damage = md.damage * status_get_lv(src) / val;
@ -95,7 +95,7 @@
if( status_get_lv(src) > 100 ) \ if( status_get_lv(src) > 100 ) \
md.damage = md.damage * 150 / 100 + md.damage * status_get_lv(src) / 100; md.damage = md.damage * 150 / 100 + md.damage * status_get_lv(src) / 100;
#else #else
#define RE_LVL_DMOD() #define RE_LVL_DMOD(val)
#define RE_LVL_MDMOD(val) #define RE_LVL_MDMOD(val)
#define RE_LVL_TMDMOD() #define RE_LVL_TMDMOD()
#endif #endif

View File

@ -625,6 +625,8 @@ enum e_pc_permission {
#define pc_isridingwug(sd) ( (sd)->sc.option&OPTION_WUGRIDER ) #define pc_isridingwug(sd) ( (sd)->sc.option&OPTION_WUGRIDER )
// Mechanic Magic Gear // Mechanic Magic Gear
#define pc_ismadogear(sd) ( (sd)->sc.option&OPTION_MADOGEAR ) #define pc_ismadogear(sd) ( (sd)->sc.option&OPTION_MADOGEAR )
// Rune Knight Dragon
#define pc_isridingdragon(sd) ( (sd)->sc.option&OPTION_DRAGON )
#define pc_stop_walking(sd, type) unit_stop_walking(&(sd)->bl, type) #define pc_stop_walking(sd, type) unit_stop_walking(&(sd)->bl, type)
#define pc_stop_attack(sd) unit_stop_attack(&(sd)->bl) #define pc_stop_attack(sd) unit_stop_attack(&(sd)->bl)

View File

@ -7865,7 +7865,7 @@ BUILDIN_FUNC(checkriding)
if( sd == NULL ) if( sd == NULL )
return 0;// no player attached, report source return 0;// no player attached, report source
if( pc_isriding(sd) || pc_isridingwug(sd) || sd->sc.option&OPTION_DRAGON ) if( pc_isriding(sd) || pc_isridingwug(sd) || pc_isridingdragon(sd) )
script_pushint(st, 1); script_pushint(st, 1);
else else
script_pushint(st, 0); script_pushint(st, 0);
@ -16132,7 +16132,7 @@ BUILDIN_FUNC(checkdragon) {
TBL_PC* sd; TBL_PC* sd;
if( (sd = script_rid2sd(st)) == NULL ) if( (sd = script_rid2sd(st)) == NULL )
return 0; return 0;
if( sd->sc.option&OPTION_DRAGON ) if( pc_isridingdragon(sd) )
script_pushint(st,1); script_pushint(st,1);
else else
script_pushint(st,0); script_pushint(st,0);
@ -16156,7 +16156,7 @@ BUILDIN_FUNC(setdragon) {
return 0; return 0;
if( !pc_checkskill(sd,RK_DRAGONTRAINING) || (sd->class_&MAPID_THIRDMASK) != MAPID_RUNE_KNIGHT ) if( !pc_checkskill(sd,RK_DRAGONTRAINING) || (sd->class_&MAPID_THIRDMASK) != MAPID_RUNE_KNIGHT )
script_pushint(st,0);//Doesn't have the skill or it's not a Rune Knight script_pushint(st,0);//Doesn't have the skill or it's not a Rune Knight
else if ( sd->sc.option&OPTION_DRAGON ) {//Is mounted; release else if ( pc_isridingdragon(sd) ) {//Is mounted; release
pc_setoption(sd, sd->sc.option&~OPTION_DRAGON); pc_setoption(sd, sd->sc.option&~OPTION_DRAGON);
script_pushint(st,1); script_pushint(st,1);
} else {//Not mounted; Mount now. } else {//Not mounted; Mount now.

View File

@ -2642,7 +2642,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
**/ **/
switch( skillid ) { switch( skillid ) {
case RK_CRUSHSTRIKE: case RK_CRUSHSTRIKE:
skill_break_equip(src,EQP_WEAPON,10000,BCT_SELF); skill_break_equip(src,EQP_WEAPON,2000,BCT_SELF); // 20% chance to destroy the weapon.
break; break;
case GC_VENOMPRESSURE: { case GC_VENOMPRESSURE: {
struct status_change *ssc = status_get_sc(src); struct status_change *ssc = status_get_sc(src);
@ -5973,7 +5973,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
if (i < 5) i = 5; //Minimum rate 5% if (i < 5) i = 5; //Minimum rate 5%
//Duration in ms //Duration in ms
d = skill_get_time(skillid,skilllv) + (sstatus->dex - tstatus->dex)*500; if( skillid == GC_WEAPONCRUSH){
d = skill_get_time(skillid,skilllv);
if(bl->type == BL_PC)
d += skilllv * 15 + (sstatus->dex - tstatus->dex);
else
d += skilllv * 30 + (sstatus->dex - tstatus->dex) / 2;
}else
d = skill_get_time(skillid,skilllv) + (sstatus->dex - tstatus->dex)*500;
if (d < 0) d = 0; //Minimum duration 0ms if (d < 0) d = 0; //Minimum duration 0ms
switch (skillid) { switch (skillid) {
@ -12402,7 +12410,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh
* Rune Knight * Rune Knight
**/ **/
case ST_RIDINGDRAGON: case ST_RIDINGDRAGON:
if( !(sd->sc.option&OPTION_DRAGON)) { if( !pc_isridingdragon(sd) ) {
clif_skill_fail(sd,skill,USESKILL_FAIL_LEVEL,0); clif_skill_fail(sd,skill,USESKILL_FAIL_LEVEL,0);
return 0; return 0;
} }

View File

@ -2904,7 +2904,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
status->aspd_rate -= ((skill+1)/2) * 10; status->aspd_rate -= ((skill+1)/2) * 10;
if(pc_isriding(sd)) if(pc_isriding(sd))
status->aspd_rate += 500-100*pc_checkskill(sd,KN_CAVALIERMASTERY); status->aspd_rate += 500-100*pc_checkskill(sd,KN_CAVALIERMASTERY);
else if( sd->sc.option&OPTION_DRAGON ) else if(pc_isridingdragon(sd))
status->aspd_rate += 250-50*pc_checkskill(sd,RK_DRAGONTRAINING); status->aspd_rate += 250-50*pc_checkskill(sd,RK_DRAGONTRAINING);
status->adelay = 2*status->amotion; status->adelay = 2*status->amotion;
@ -2923,7 +2923,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
sd->max_weight += 2000*skill; sd->max_weight += 2000*skill;
if(pc_isriding(sd) && pc_checkskill(sd,KN_RIDING)>0) if(pc_isriding(sd) && pc_checkskill(sd,KN_RIDING)>0)
sd->max_weight += 10000; sd->max_weight += 10000;
else if( sd->sc.option&OPTION_DRAGON ) else if(pc_isridingdragon(sd))
sd->max_weight += 5000+2000*pc_checkskill(sd,RK_DRAGONTRAINING); sd->max_weight += 5000+2000*pc_checkskill(sd,RK_DRAGONTRAINING);
if(sc->data[SC_KNOWLEDGE]) if(sc->data[SC_KNOWLEDGE])
sd->max_weight += sd->max_weight*sc->data[SC_KNOWLEDGE]->val1/10; sd->max_weight += sd->max_weight*sc->data[SC_KNOWLEDGE]->val1/10;
@ -7711,7 +7711,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
val_flag |= 1|2|4; val_flag |= 1|2|4;
if( sd ) if( sd )
{ // Removes Animals { // Removes Animals
if( pc_isriding(sd) ){ pc_setriding(sd, 0); pc_setoption(sd, sd->sc.option&~OPTION_DRAGON); } if( pc_isriding(sd) ) pc_setriding(sd, 0);
if( pc_isridingdragon(sd) ) pc_setoption(sd, sd->sc.option&~OPTION_DRAGON);
if( pc_iswug(sd) ) pc_setoption(sd, sd->sc.option&~OPTION_WUG); if( pc_iswug(sd) ) pc_setoption(sd, sd->sc.option&~OPTION_WUG);
if( pc_isridingwug(sd) ) pc_setoption(sd, sd->sc.option&~OPTION_WUGRIDER); if( pc_isridingwug(sd) ) pc_setoption(sd, sd->sc.option&~OPTION_WUGRIDER);
if( pc_isfalcon(sd) ) pc_setoption(sd, sd->sc.option&~OPTION_FALCON); if( pc_isfalcon(sd) ) pc_setoption(sd, sd->sc.option&~OPTION_FALCON);