Bug Fixes

* Fixed Shield Spell not casting correctly. (bugreport:8948, bugreport:8999)
* Fixed Exceed Break attack increase not being applied. (bugreport:8993)
* Fixed Gentle Touch - Energy Gain not adding spirit spheres. (bugreport:9004)
* Updated Magnetic Field SP drain value.
This commit is contained in:
aleos89 2014-06-02 09:35:25 -04:00
parent 47e7771563
commit ce8b98b1f4
8 changed files with 40 additions and 31 deletions

View File

@ -1456,7 +1456,7 @@
//-- SR_GENTLETOUCH_CURE
2345,0,1000,0,0,0,1000:1500:2000:2500:3000
//-- SR_GENTLETOUCH_ENERGYGAIN
2346,1000,1000,0,240000,0,0
2346,1000,1000,0,240000,600000,0
//-- SR_GENTLETOUCH_CHANGE
2347,1000,1000,0,240000,0,200000:180000:160000:140000:120000
//-- SR_GENTLETOUCH_REVITALIZE

View File

@ -623,6 +623,7 @@
2228,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMON_ATK_GROUND
2229,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMONSTONE
2230,0,0,3:20,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_RELEASE
2231,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_READING_SB
//2232,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_FREEZE_SP (Passive Skill)
//****

View File

@ -1451,7 +1451,7 @@
//-- SR_GENTLETOUCH_CURE
2345,0,1000,0,0,0,1000:1500:2000:2500:3000,-1
//-- SR_GENTLETOUCH_ENERGYGAIN
2346,1000,1000,0,240000,0,0,1000:1500:2000:2500:3000
2346,1000,1000,0,240000,600000,0,1000:1500:2000:2500:3000
//-- SR_GENTLETOUCH_CHANGE
2347,1000,1000,0,240000,0,200000:180000:160000:140000:120000,1000
//-- SR_GENTLETOUCH_REVITALIZE

View File

@ -623,6 +623,7 @@
2228,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMON_ATK_GROUND
2229,0,0,10:12:14:16:18,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SUMMONSTONE
2230,0,0,3:20,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_RELEASE
2231,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_READING_SB
//2232,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_FREEZE_SP
//****

View File

@ -1141,11 +1141,12 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
if( sd && (sce = sc->data[SC_FORCEOFVANGUARD]) && flag&BF_WEAPON && rnd()%100 < sce->val2 )
pc_addspiritball(sd,skill_get_time(LG_FORCEOFVANGUARD,sce->val1),sce->val3);
if( sd && (sce = sc->data[SC_GT_ENERGYGAIN]) && flag&BF_WEAPON && rnd()%100 < sce->val2 ) {
if( sd && (sce = sc->data[SC_GT_ENERGYGAIN]) && flag&BF_WEAPON && rnd()%100 < sce->val3 ) {
int spheres = 5;
if( sc->data[SC_RAISINGDRAGON] )
spheres += sc->data[SC_RAISINGDRAGON]->val1;
pc_addspiritball(sd, skill_get_time2(SR_GENTLETOUCH_ENERGYGAIN, sce->val1), spheres);
}
@ -2987,7 +2988,7 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
skill_break_equip(src,src,EQP_WEAPON,2000,BCT_SELF);
}
if (sc->data[SC_EXEEDBREAK] && !skill_id) {
skillratio += -100 + sc->data[SC_EXEEDBREAK]->val2;
skillratio += -100 + sc->data[SC_EXEEDBREAK]->val1;
status_change_end(src,SC_EXEEDBREAK,INVALID_TIMER);
}
if(sc->data[SC_HEAT_BARREL])
@ -5226,6 +5227,10 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
s_ele = rnd()%ELE_ALL;
switch( skill_id ) {
case LG_SHIELDSPELL:
if (skill_lv == 2)
s_ele = ELE_HOLY;
break;
case SO_PSYCHIC_WAVE:
if( sc && sc->count ) {
if( sc->data[SC_HEATER_OPTION] ) s_ele = sc->data[SC_HEATER_OPTION]->val3;
@ -6692,33 +6697,33 @@ 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] ) {
if( sc->data[SC_GT_ENERGYGAIN] && sc->data[SC_GT_ENERGYGAIN]->val2 ) {
int spheres = 5;
if( sc->data[SC_RAISINGDRAGON] )
spheres += sc->data[SC_RAISINGDRAGON]->val1;
if( sd && rnd()%100 < sc->data[SC_GT_ENERGYGAIN]->val2 )
if( sd && rnd()%100 < sc->data[SC_GT_ENERGYGAIN]->val3 )
pc_addspiritball(sd, skill_get_time2(SR_GENTLETOUCH_ENERGYGAIN, sc->data[SC_GT_ENERGYGAIN]->val1), spheres);
}
}
if( tsc && tsc->data[SC_GT_ENERGYGAIN] && tsc->data[SC_GT_ENERGYGAIN]->val2 ) {
int spheres = 5;
if( tsc->data[SC_RAISINGDRAGON] )
spheres += tsc->data[SC_RAISINGDRAGON]->val1;
if( tsd && rnd()%100 < tsc->data[SC_GT_ENERGYGAIN]->val3 )
pc_addspiritball(tsd, skill_get_time2(SR_GENTLETOUCH_ENERGYGAIN, tsc->data[SC_GT_ENERGYGAIN]->val1), spheres);
}
if (tsc && tsc->data[SC_MTF_MLEATKED] && rnd()%100 < 20)
clif_skill_nodamage(target, target, SM_ENDURE, 5, sc_start(src, target, SC_ENDURE, 100, 5, skill_get_time(SM_ENDURE, 5)));
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] ) {
int spheres = 5;
if( tsc->data[SC_RAISINGDRAGON] )
spheres += tsc->data[SC_RAISINGDRAGON]->val1;
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);
}
wd = battle_calc_attack(BF_WEAPON, src, target, 0, 0, flag);
if( sc && sc->count ) {

View File

@ -16753,7 +16753,7 @@ int clif_spellbook_list(struct map_session_data *sd)
if( itemdb_is_spellbook(sd->status.inventory[i].nameid) )
{
WFIFOW(fd, c * 2 + 4) = sd->status.inventory[i].nameid;
c ++;
c++;
}
}

View File

@ -4866,7 +4866,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
{
int i;
// Priority is to release SpellBook
if( sc && sc->data[SC_FREEZE_SP] )
if( sc && sc->data[SC_READING_SB] )
{ // SpellBook
uint16 skill_id, skill_lv, point, s = 0;
int spell[SC_MAXSPELLBOOK-SC_SPELLBOOK1 + 1];
@ -4887,10 +4887,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
}else //something went wrong :(
break;
if( sc->data[SC_FREEZE_SP]->val2 > point )
sc->data[SC_FREEZE_SP]->val2 -= point;
if( sc->data[SC_READING_SB]->val2 > point )
sc->data[SC_READING_SB]->val2 -= point;
else // Last spell to be released
status_change_end(src, SC_FREEZE_SP, INVALID_TIMER);
status_change_end(src, SC_READING_SB, INVALID_TIMER);
if( bl->type != BL_SKILL ) /* skill types will crash the client */
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
@ -5066,8 +5066,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
break;
case LG_SHIELDSPELL:
// flag&1: Phisycal Attack, flag&2: Magic Attack.
skill_attack((flag&1)?BF_WEAPON:BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag);
if (skill_lv == 1)
skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
else if (skill_lv == 2)
skill_attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag);
break;
case SR_DRAGONCOMBO:
@ -8977,7 +8979,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case NC_MAGNETICFIELD:
if( (i = sc_start2(src,bl,type,100,skill_lv,src->id,skill_get_time(skill_id,skill_lv))) )
{
map_foreachinrange(skill_area_sub,src,skill_get_splash(skill_id,skill_lv),splash_target(src),src,skill_id,skill_lv,tick,flag|BCT_ENEMY|SD_SPLASH|1,skill_castend_damage_id);;
map_foreachinrange(skill_area_sub,src,skill_get_splash(skill_id,skill_lv),splash_target(src),src,skill_id,skill_lv,tick,flag|BCT_ENEMY|SD_SPLASH|1,skill_castend_damage_id);
clif_skill_damage(src,src,tick,status_get_amotion(src),0,-30000,1,skill_id,skill_lv,6);
if (sd) pc_overheat(sd,1);
}
@ -9316,7 +9318,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_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
sc_start2(src,bl,type,100,skill_lv,bl->id,skill_get_time(skill_id,skill_lv)));
break;
case SR_FLASHCOMBO:
if( sd )
@ -18292,20 +18294,20 @@ int skill_spellbook (struct map_session_data *sd, int nameid) {
max_preserve = 4 * pc_checkskill(sd, WL_FREEZE_SP) + status_get_int(&sd->bl) / 10 + sd->status.base_level / 10;
point = skill_spellbook_db[i].point;
if( sc && sc->data[SC_FREEZE_SP] ) {
if( (sc->data[SC_FREEZE_SP]->val2 + point) > max_preserve ) {
if( sc && sc->data[SC_READING_SB] ) {
if( (sc->data[SC_READING_SB]->val2 + point) > max_preserve ) {
clif_skill_fail(sd, WL_READING_SB, USESKILL_FAIL_SPELLBOOK_PRESERVATION_POINT, 0);
return 0;
}
for(i = SC_MAXSPELLBOOK; i >= SC_SPELLBOOK1; i--){ // This is how official saves spellbook. [malufett]
if( !sc->data[i] ){
sc->data[SC_FREEZE_SP]->val2 += point; // increase points
sc->data[SC_READING_SB]->val2 += point; // increase points
sc_start4(&sd->bl,&sd->bl, (sc_type)i, 100, skill_id, pc_checkskill(sd,skill_id), point, 0, INVALID_TIMER);
break;
}
}
} else {
sc_start2(&sd->bl,&sd->bl, SC_FREEZE_SP, 100, 0, point, INVALID_TIMER);
sc_start2(&sd->bl,&sd->bl, SC_READING_SB, 100, 0, point, INVALID_TIMER);
sc_start4(&sd->bl,&sd->bl, SC_MAXSPELLBOOK, 100, skill_id, pc_checkskill(sd,skill_id), point, 0, INVALID_TIMER);
}

View File

@ -9497,7 +9497,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:
val2 = 10 + 5 * val1; // Sphere gain chance.
val3 = 10 + 5 * val1; // Sphere gain chance.
break;
case SC_GT_CHANGE:
{ // Take note there is no def increase as skill desc says. [malufett]
@ -11897,7 +11897,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
if( --(sce->val3) <= 0 )
break; // Time out
if( sce->val2 == bl->id ) {
if( !status_charge(bl,0,14 + (3 * sce->val1)) )
if( !status_charge(bl,0,50) )
break; // No more SP status should end, and in the next second will end for the other affected players
} else {
struct block_list *src = map_id2bl(sce->val2);