Skip to content

Commit

Permalink
Fixed #366
Browse files Browse the repository at this point in the history
* Somehow failed to get 'caster' status for calculation.
* A little cleanup for `SC_GT_ENERGYGAIN`, `SC_GT_CHANGE`, & `SC_GT_REVITALIZE` which don't need `bl->id` as `val2`. Caster is `src`, target is `bl`. (Was assumed `val2` to get caster status? `if (src2 = map_id2bl(val2))` but `bl` was target on skill_castend_nodamage_id.

Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
  • Loading branch information
cydh committed Mar 29, 2015
1 parent 35e9c2b commit 3c92075
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 21 deletions.
12 changes: 6 additions & 6 deletions src/map/battle.c
Original file line number Diff line number Diff line change
Expand Up @@ -1230,7 +1230,7 @@ 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->val3 ) {
if( sd && (sce = sc->data[SC_GT_ENERGYGAIN]) && flag&BF_WEAPON && rnd()%100 < sce->val2 ) {
int spheres = 5;

if( sc->data[SC_RAISINGDRAGON] )
Expand Down Expand Up @@ -4360,7 +4360,7 @@ struct Damage battle_calc_defense_reduction(struct Damage wd, struct block_list
def2 = (def2*(100-i))/100;
}

if (tsc->data[SC_GT_REVITALIZE] && tsc->data[SC_GT_REVITALIZE]->val2)
if (tsc->data[SC_GT_REVITALIZE])
def2 += tsc->data[SC_GT_REVITALIZE]->val4;

if (tsc->data[SC_OVERED_BOOST] && target->type == BL_PC)
Expand Down Expand Up @@ -6804,24 +6804,24 @@ 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( 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);
}

Expand Down
2 changes: 1 addition & 1 deletion src/map/skill.c
Original file line number Diff line number Diff line change
Expand Up @@ -9514,7 +9514,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: {
const int combo[] = { SR_DRAGONCOMBO, SR_FALLENEMPIRE, SR_TIGERCANNON, SR_SKYNETBLOW };
Expand Down
28 changes: 14 additions & 14 deletions src/map/status.c
Original file line number Diff line number Diff line change
Expand Up @@ -707,7 +707,7 @@ void initChangeTables(void)
set_sc( SR_LIGHTNINGWALK , SC_LIGHTNINGWALK , SI_LIGHTNINGWALK , SCB_NONE );
set_sc( SR_RAISINGDRAGON , SC_RAISINGDRAGON , SI_RAISINGDRAGON , SCB_REGEN|SCB_MAXHP|SCB_MAXSP );
set_sc( SR_GENTLETOUCH_ENERGYGAIN , SC_GT_ENERGYGAIN , SI_GENTLETOUCH_ENERGYGAIN , SCB_NONE );
set_sc( SR_GENTLETOUCH_CHANGE , SC_GT_CHANGE , SI_GENTLETOUCH_CHANGE , SCB_WATK|SCB_MDEF|SCB_ASPD|SCB_MAXHP );
set_sc( SR_GENTLETOUCH_CHANGE , SC_GT_CHANGE , SI_GENTLETOUCH_CHANGE , SCB_WATK|SCB_MDEF|SCB_ASPD );
set_sc( SR_GENTLETOUCH_REVITALIZE , SC_GT_REVITALIZE , SI_GENTLETOUCH_REVITALIZE , SCB_MAXHP|SCB_REGEN );
set_sc( SR_FLASHCOMBO , SC_FLASHCOMBO , SI_FLASHCOMBO , SCB_WATK );

Expand Down Expand Up @@ -2757,7 +2757,7 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) {
if(sc->data[SC_RAISINGDRAGON])
bonus += (2 + sc->data[SC_RAISINGDRAGON]->val1);
if(sc->data[SC_GT_REVITALIZE])
bonus += (2 * sc->data[SC_GT_REVITALIZE]->val1);
bonus += sc->data[SC_GT_REVITALIZE]->val2;
if(sc->data[SC_MUSTLE_M])
bonus += sc->data[SC_MUSTLE_M]->val1;
if(sc->data[SC_ANGRIFFS_MODUS])
Expand Down Expand Up @@ -5414,7 +5414,7 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan
watk += (10 + 10 * sc->data[SC_BANDING]->val1) * sc->data[SC_BANDING]->val2;
if(sc->data[SC_INSPIRATION])
watk += 40 * sc->data[SC_INSPIRATION]->val1 + 3 * sc->data[SC_INSPIRATION]->val2;
if(sc->data[SC_GT_CHANGE] && sc->data[SC_GT_CHANGE]->val2)
if(sc->data[SC_GT_CHANGE])
watk += sc->data[SC_GT_CHANGE]->val2;
if(sc->data[SC__ENERVATION])
watk -= watk * sc->data[SC__ENERVATION]->val2 / 100;
Expand Down Expand Up @@ -5987,7 +5987,7 @@ static defType status_calc_mdef(struct block_list *bl, struct status_change *sc,
mdef -= mdef * ( 14 * sc->data[SC_ANALYZE]->val1 ) / 100;
if(sc->data[SC_SYMPHONYOFLOVER])
mdef += mdef * sc->data[SC_SYMPHONYOFLOVER]->val3 / 100;
if(sc->data[SC_GT_CHANGE] && sc->data[SC_GT_CHANGE]->val4) {
if(sc->data[SC_GT_CHANGE]) {
mdef -= sc->data[SC_GT_CHANGE]->val4;
if (mdef < 0)
return 0;
Expand Down Expand Up @@ -9785,26 +9785,26 @@ 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]
struct block_list * src2;
struct status_data *sstatus = src ? status_get_status_data(src) : NULL;
val2 = ((sstatus?sstatus->dex:4) / 4 + (sstatus?sstatus->str:2) / 2) * val1 / 5; // ATK increase: ATK [{(Caster DEX / 4) + (Caster STR / 2)} x Skill Level / 5]
val3 = status->agi * val1 / 60; // ASPD increase: [(Target AGI x Skill Level) / 60] %
if( (src2 = map_id2bl(val2)) ) {
val2 = (status_get_dex(src2) / 4 + status_get_str(src2) / 2) * val1 / 5; // ATK increase: ATK [{(Caster DEX / 4) + (Caster STR / 2)} x Skill Level / 5]
val4 = ( 200/status_get_int(src2) ) * val1; // MDEF decrease: MDEF [(200 / Caster INT) x Skill Level]
}
if( val4 < 0 )
val4 = (200/(sstatus?sstatus->int_:1)) * val1; // MDEF decrease: MDEF [(200 / Caster INT) x Skill Level]

if (val4 < 0)
val4 = 0;
}
break;
case SC_GT_REVITALIZE:
{ // Take note there is no vit,aspd,speed increase as skill desc says. [malufett]
struct block_list * src2;
struct status_data *sstatus = src ? status_get_status_data(src) : NULL;
val2 = 2 * val1; // MaxHP: [(Skill Level * 2)]%
val3 = val1 * 30 + 50; // Natural HP recovery increase: [(Skill Level x 30) + 50] %
if( (src2 = map_id2bl(val2)) ) // The stat def is not shown in the status window and it is process differently
val4 = ( status_get_vit(src2)/4 ) * val1; // STAT DEF increase: [(Caster VIT / 4) x Skill Level]
// The stat def is not shown in the status window and it is process differently
val4 = ((sstatus?sstatus->vit:4)/4 ) * val1; // STAT DEF increase: [(Caster VIT / 4) x Skill Level]
}
break;
case SC_PYROTECHNIC_OPTION:
Expand Down

1 comment on commit 3c92075

@hnomkeng
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

check cashshop funtion pls

Please sign in to comment.