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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user