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)
This commit is contained in:
aleos89
2014-04-10 11:15:30 -04:00
parent 35d838c9d2
commit 0bbfdfbd85
7 changed files with 48 additions and 39 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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