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:
parent
47e7771563
commit
ce8b98b1f4
@ -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
|
||||
|
@ -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)
|
||||
|
||||
//****
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
//****
|
||||
|
@ -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 ) {
|
||||
|
@ -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++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user