From 0bbfdfbd8589b4871646a0edbc2ed592e2fce2f1 Mon Sep 17 00:00:00 2001 From: aleos89 Date: Thu, 10 Apr 2014 11:15:30 -0400 Subject: [PATCH] Bug Fixes * Fixed Gentle Touch - Energy Gain not gaining spheres. (bugreport:8882) * Adjusted Full Throttle's cooldown to be 30 minutes. (bugreport:8887) * Warmth of the Sun/Moon/Stars are now placeable on Land Protector. (bugreport:175) * Fixed Mechanic's Axe Mastery to give (4 * skill level) ATK bonus for Mace weapons. * Cleaned up Cart Boost and Camouflage bonus damage. * Fixed Envenom pre-renewal bonus damage missing. (bugreport:7953) * Fixed Eska not reducing movement speed. (bugreport:2792) * Fixed Marsh of Abyss reducing movement speed below 50%. (bugreport:7424) --- db/pre-re/skill_cast_db.txt | 2 +- db/pre-re/skill_db.txt | 6 ++-- db/re/skill_cast_db.txt | 2 +- db/re/skill_db.txt | 6 ++-- src/map/battle.c | 60 ++++++++++++++++++++----------------- src/map/skill.c | 2 +- src/map/status.c | 9 ++++-- 7 files changed, 48 insertions(+), 39 deletions(-) diff --git a/db/pre-re/skill_cast_db.txt b/db/pre-re/skill_cast_db.txt index add14f971e..d4f32b656a 100644 --- a/db/pre-re/skill_cast_db.txt +++ b/db/pre-re/skill_cast_db.txt @@ -1769,7 +1769,7 @@ //========================================== //-- ALL_FULL_THROTTLE -5014,0,0,0,10000:15000:20000:25000:30000,10000,20000:25000:30000:35000:40000 +5014,0,0,0,10000:15000:20000:25000:30000,10000,1800000 //===== Homunculus Skills ================== //-- HLIF_HEAL diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index 0cd95f393f..8636f72199 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -626,9 +626,9 @@ //**** // Star Gladiator 427,0,6,4,0,0x1,0,3,1,yes,0,0,0,magic,0,0x0, SG_FEEL,Feeling the Sun Moon and Stars -428,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x0, SG_SUN_WARM,Warmth of the Sun -429,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x0, SG_MOON_WARM,Warmth of the Moon -430,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x0, SG_STAR_WARM,Warmth of the Stars +428,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x1, SG_SUN_WARM,Warmth of the Sun +429,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x1, SG_MOON_WARM,Warmth of the Moon +430,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x1, SG_STAR_WARM,Warmth of the Stars 431,0,0,4,0,0x1,0,4,1,yes,0,0,0,magic,0,0x0, SG_SUN_COMFORT,Comfort of the Sun 432,0,0,4,0,0x1,0,4,1,yes,0,0,0,magic,0,0x0, SG_MOON_COMFORT,Comfort of the Moon 433,0,0,4,0,0x1,0,4,1,yes,0,0,0,magic,0,0x0, SG_STAR_COMFORT,Comfort of the Stars diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt index cbffbe3e83..89ea4059a6 100644 --- a/db/re/skill_cast_db.txt +++ b/db/re/skill_cast_db.txt @@ -1757,7 +1757,7 @@ //========================================== //-- ALL_FULL_THROTTLE -5014,0,0,0,10000:15000:20000:25000:30000,10000,20000:25000:30000:35000:40000,-1 +5014,0,0,0,10000:15000:20000:25000:30000,10000,1800000,-1 //===== Homunculus Skills ================== //-- HLIF_HEAL diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index 56a1c98f6e..9212f96281 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -626,9 +626,9 @@ //**** // Star Gladiator 427,0,6,4,0,0x1,0,3,1,yes,0,0,0,magic,0,0x0, SG_FEEL,Feeling the Sun Moon and Stars -428,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x0, SG_SUN_WARM,Warmth of the Sun -429,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x0, SG_MOON_WARM,Warmth of the Moon -430,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x0, SG_STAR_WARM,Warmth of the Stars +428,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x1, SG_SUN_WARM,Warmth of the Sun +429,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x1, SG_MOON_WARM,Warmth of the Moon +430,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x1, SG_STAR_WARM,Warmth of the Stars 431,0,0,4,0,0x1,0,4,1,yes,0,0,0,magic,0,0x0, SG_SUN_COMFORT,Comfort of the Sun 432,0,0,4,0,0x1,0,4,1,yes,0,0,0,magic,0,0x0, SG_MOON_COMFORT,Comfort of the Moon 433,0,0,4,0,0x1,0,4,1,yes,0,0,0,magic,0,0x0, SG_STAR_COMFORT,Comfort of the Stars diff --git a/src/map/battle.c b/src/map/battle.c index e9885c1276..bf98c79517 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1121,7 +1121,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam TBL_HOM *hd = BL_CAST(BL_HOM,bl); // We add a sphere for when the Homunculus is being hit if (hd && (rnd()%100<50) ) hom_addspiritball(hd, 10); // According to WarpPortal, this is a flat 50% chance } - if( sd && (sce = sc->data[SC_GT_ENERGYGAIN]) && flag&BF_WEAPON && rnd()%100 < sce->val3 ) { + if( sd && (sce = sc->data[SC_GT_ENERGYGAIN]) && flag&BF_WEAPON && rnd()%100 < sce->val2 ) { int spheres = 5; if( sc->data[SC_RAISINGDRAGON] ) @@ -1387,10 +1387,10 @@ int64 battle_addmastery(struct map_session_data *sd,struct block_list *target,in weapon = sd->weapontype2; switch(weapon) { case W_1HSWORD: - #ifdef RENEWAL - if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0) - damage += (skill * 3); - #endif +#ifdef RENEWAL + if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0) + damage += (skill * 3); +#endif case W_DAGGER: if((skill = pc_checkskill(sd,SM_SWORD)) > 0) damage += (skill * 4); @@ -1398,10 +1398,10 @@ int64 battle_addmastery(struct map_session_data *sd,struct block_list *target,in damage += skill * 10; break; case W_2HSWORD: - #ifdef RENEWAL - if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0) - damage += (skill * 3); - #endif +#ifdef RENEWAL + if((skill = pc_checkskill(sd,AM_AXEMASTERY)) > 0) + damage += (skill * 3); +#endif if((skill = pc_checkskill(sd,SM_TWOHAND)) > 0) damage += (skill * 4); break; @@ -1429,7 +1429,7 @@ int64 battle_addmastery(struct map_session_data *sd,struct block_list *target,in if((skill = pc_checkskill(sd,PR_MACEMASTERY)) > 0) damage += (skill * 3); if((skill = pc_checkskill(sd,NC_TRAININGAXE)) > 0) - damage += (skill * 5); + damage += (skill * 4); break; case W_FIST: if((skill = pc_checkskill(sd,TK_RUN)) > 0) @@ -1460,9 +1460,6 @@ int64 battle_addmastery(struct map_session_data *sd,struct block_list *target,in if(sd && (skill=pc_checkskill(sd,BS_WEAPONRESEARCH)) > 0) // weapon research bonus applies to all weapons damage += skill*2; - if(sd->sc.data[SC_GN_CARTBOOST]) // cart boost adds mastery type damage - damage += 10*sd->sc.data[SC_GN_CARTBOOST]->val1; - return damage; } @@ -2253,13 +2250,8 @@ static int battle_calc_equip_attack(struct block_list *src, int skill_id) if(src != NULL) { int eatk=0; struct status_data *status = status_get_status_data(src); - struct status_change *sc = status_get_sc(src); struct map_session_data *sd = BL_CAST(BL_PC, src); - if(sc){ - if(sc->data[SC_CAMOUFLAGE] ) - eatk += 30 * min(10,sc->data[SC_CAMOUFLAGE]->val3); //max +300atk - } if(sd) eatk += is_skill_using_arrow(src, skill_id) ? sd->bonus.arrow_atk : 0; // add arrow atk if using an applicable skill return eatk + status->eatk; } @@ -2456,6 +2448,19 @@ static struct Damage battle_calc_attack_masteries(struct Damage wd, struct block #ifdef RENEWAL wd.masteryAtk2 = (int)battle_addmastery(sd,target,wd.weaponAtk2,1); #endif + + if (sc->data[SC_CAMOUFLAGE]) { + ATK_ADD(wd.damage, wd.damage2, 30 * min(10, sc->data[SC_CAMOUFLAGE]->val3)); +#ifdef RENEWAL + ATK_ADD(wd.masteryAtk, wd.masteryAtk2, 30 * min(10, sc->data[SC_CAMOUFLAGE]->val3)); +#endif + } + if (sc->data[SC_GN_CARTBOOST]) { + ATK_ADD(wd.damage, wd.damage2, 10 * sc->data[SC_GN_CARTBOOST]->val1); +#ifdef RENEWAL + ATK_ADD(wd.masteryAtk, wd.masteryAtk2, 10 * sc->data[SC_GN_CARTBOOST]->val1); +#endif + } } if (sc && sc->data[SC_MIRACLE]) @@ -2481,6 +2486,8 @@ static struct Damage battle_calc_attack_masteries(struct Damage wd, struct block #ifdef RENEWAL //General skill masteries + if(skill_id == TF_POISON) //Additional ATK from Envenom is treated as mastery type damage [helvetica] + ATK_ADD(wd.masteryAtk, wd.masteryAtk2, 15 * skill_lv); if (skill_id != CR_SHIELDBOOMERANG) ATK_ADD2(wd.masteryAtk, wd.masteryAtk2, wd.div_ * sd->right_weapon.star, wd.div_ * sd->left_weapon.star); if (skill_id == MO_FINGEROFFENSIVE) { @@ -2633,11 +2640,6 @@ struct Damage battle_calc_skill_base_damage(struct Damage wd, struct block_list } #endif break; - case TF_POISON: // Additional 15*skill level damage - ATK_ADD(wd.damage, wd.damage2, 15*skill_lv); -#ifdef RENEWAL - wd.masteryAtk += 15*skill_lv; // ATK from Envenom is treated as mastery type damage [helvetica] -#endif case CR_SHIELDBOOMERANG: case PA_SHIELDCHAIN: case LG_SHIELDPRESS: @@ -4762,6 +4764,8 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl if(sd) { #ifndef RENEWAL + if(skill_id == TF_POISON) + ATK_ADD(wd.damage, wd.damage2, 15 * skill_lv); if (skill_id != CR_SHIELDBOOMERANG) //Only Shield boomerang doesn't takes the Star Crumbs bonus. ATK_ADD2(wd.damage, wd.damage2, wd.div_ * sd->right_weapon.star, wd.div_ * sd->left_weapon.star); if (skill_id == MO_FINGEROFFENSIVE) { //The finger offensive spheres on moment of attack do count. [Skotlex] @@ -6264,7 +6268,7 @@ int battle_damage_area( struct block_list *bl, va_list ap) { return 0; } /*========================================== - * Do a basic physical attack (call trough unit_attack_timer) + * Do a basic physical attack (call through unit_attack_timer) *------------------------------------------*/ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* target, unsigned int tick, int flag) { struct map_session_data *sd = NULL, *tsd = NULL; @@ -6404,13 +6408,13 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t return ATK_DEF; return ATK_MISS; } - if( sc->data[SC_GT_ENERGYGAIN] && sc->data[SC_GT_ENERGYGAIN]->val2 ) { + if( sc->data[SC_GT_ENERGYGAIN] ) { int spheres = 5; if( sc->data[SC_RAISINGDRAGON] ) spheres += sc->data[SC_RAISINGDRAGON]->val1; - if( sd && rnd()%100 < sc->data[SC_GT_ENERGYGAIN]->val3 ) + if( sd && rnd()%100 < sc->data[SC_GT_ENERGYGAIN]->val2 ) pc_addspiritball(sd, skill_get_time2(SR_GENTLETOUCH_ENERGYGAIN, sc->data[SC_GT_ENERGYGAIN]->val1), spheres); } if( sc && sc->data[SC_CRUSHSTRIKE] ){ @@ -6428,13 +6432,13 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t if(tsc && tsc->data[SC_KAAHI] && tsc->data[SC_KAAHI]->val4 == INVALID_TIMER && tstatus->hp < tstatus->max_hp) tsc->data[SC_KAAHI]->val4 = add_timer(tick + skill_get_time2(SL_KAAHI,tsc->data[SC_KAAHI]->val1), kaahi_heal_timer, target->id, SC_KAAHI); //Activate heal. - if( tsc && tsc->data[SC_GT_ENERGYGAIN] && tsc->data[SC_GT_ENERGYGAIN]->val2 ) { + if( tsc && tsc->data[SC_GT_ENERGYGAIN] ) { int spheres = 5; if( tsc->data[SC_RAISINGDRAGON] ) spheres += tsc->data[SC_RAISINGDRAGON]->val1; - if( tsd && rnd()%100 < tsc->data[SC_GT_ENERGYGAIN]->val3 ) + if( tsd && rnd()%100 < tsc->data[SC_GT_ENERGYGAIN]->val2 ) pc_addspiritball(tsd, skill_get_time2(SR_GENTLETOUCH_ENERGYGAIN, tsc->data[SC_GT_ENERGYGAIN]->val1), spheres); } diff --git a/src/map/skill.c b/src/map/skill.c index 3d9a5f61fa..c7ab2c09d3 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -9296,7 +9296,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case SR_GENTLETOUCH_CHANGE: case SR_GENTLETOUCH_REVITALIZE: clif_skill_nodamage(src,bl,skill_id,skill_lv, - sc_start2(src,bl,type,100,skill_lv,bl->id,skill_get_time(skill_id,skill_lv))); + sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv))); break; case SR_FLASHCOMBO: if( sd ) diff --git a/src/map/status.c b/src/map/status.c index 97baf80348..09ec89b6eb 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -431,7 +431,7 @@ void initChangeTables(void) add_sc( SL_STUN , SC_STUN ); set_sc( SL_SWOO , SC_SWOO , SI_SWOO , SCB_SPEED ); set_sc( SL_SKE , SC_SKE , SI_BLANK , SCB_BATK|SCB_WATK|SCB_DEF|SCB_DEF2 ); - set_sc( SL_SKA , SC_SKA , SI_BLANK , SCB_DEF|SCB_MDEF|SCB_ASPD ); + set_sc( SL_SKA , SC_SKA , SI_BLANK , SCB_DEF|SCB_MDEF|SCB_SPEED|SCB_ASPD ); set_sc( SL_SMA , SC_SMA , SI_SMA , SCB_NONE ); set_sc( SM_SELFPROVOKE , SC_PROVOKE , SI_PROVOKE , SCB_DEF|SCB_DEF2|SCB_BATK|SCB_WATK ); set_sc( ST_PRESERVE , SC_PRESERVE , SI_PRESERVE , SCB_NONE ); @@ -5866,6 +5866,8 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha val = max( val, sc->data[SC_SUITON]->val3 ); if( sc->data[SC_SWOO] ) val = max( val, 300 ); + if( sc->data[SC_SKA] ) + val = max( val, 25 ); if( sc->data[SC_FREEZING] ) val = max( val, 50 ); if( sc->data[SC_MARSHOFABYSS] ) @@ -5891,6 +5893,9 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha speed_rate += val; val = 0; + if( sc->data[SC_MARSHOFABYSS] && speed_rate > 150 ) + speed_rate = 150; + // GetMoveHasteValue1() if( sc->data[SC_SPEEDUP1] ) // !FIXME: used both by NPC_AGIUP and Speed Potion script val = max( val, 50 ); @@ -9415,7 +9420,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty tick_time = 5000; // [GodLesZ] tick time break; case SC_GT_ENERGYGAIN: - val3 = 10 + 5 * val1; // Sphere gain chance. + val2 = 10 + 5 * val1; // Sphere gain chance. break; case SC_GT_CHANGE: { // Take note there is no def increase as skill desc says. [malufett]