From 867734490acadfa45af27b3903a95f2bf15d3f3d Mon Sep 17 00:00:00 2001 From: skotlex Date: Sun, 6 Jan 2008 23:48:13 +0000 Subject: - Fixed Overthrust's timer not being able to be refreshed when recasting it (conflict on what val2 should mean) - Changed the code in status_change_timer so that a null pointer no longer causes a crash but prints an error instead. - Corrected clones not copying over a player's skills properly. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12027 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/battle.c | 2 +- src/map/mob.c | 2 +- src/map/skill.c | 2 +- src/map/status.c | 16 +++++++++++----- 4 files changed, 14 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/map/battle.c b/src/map/battle.c index 4f164dd3c..a91576f36 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1262,7 +1262,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo if(sc && skill_num != PA_SACRIFICE) { if(sc->data[SC_OVERTHRUST]) - skillratio += sc->data[SC_OVERTHRUST]->val2; + skillratio += sc->data[SC_OVERTHRUST]->val3; if(sc->data[SC_MAXOVERTHRUST]) skillratio += sc->data[SC_MAXOVERTHRUST]->val2; if(sc->data[SC_BERSERK]) diff --git a/src/map/mob.c b/src/map/mob.c index ff5fa49c7..d642a1e01 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2976,7 +2976,7 @@ int mob_clone_spawn(struct map_session_data *sd, int m, int x, int y, const char ms = &db->skill[0]; //Go Backwards to give better priority to advanced skills. for (i=0,j = MAX_SKILL_TREE-1;j>=0 && i< MAX_MOBSKILL ;j--) { - skill_id = skill_tree[sd->status.class_][j].id; + skill_id = skill_tree[pc_class2idx(sd->status.class_)][j].id; if (!skill_id || sd->status.skill[skill_id].lv < 1 || (skill_get_inf2(skill_id)&(INF2_WEDDING_SKILL|INF2_GUILD_SKILL)) || skill_get_nocast(skill_id)&16 diff --git a/src/map/skill.c b/src/map/skill.c index ae934d983..08b1d282b 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3657,7 +3657,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in case BS_OVERTHRUST: if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) { clif_skill_nodamage(bl,bl,skillid,skilllv, - sc_start4(bl,type,100,skilllv,(src == bl)? 1:0,0,0,skill_get_time(skillid,skilllv))); + sc_start2(bl,type,100,skilllv,(src == bl)? 1:0,skill_get_time(skillid,skilllv))); } else if (sd) { party_foreachsamemap(skill_area_sub, sd,skill_get_splash(skillid, skilllv), diff --git a/src/map/status.c b/src/map/status.c index c56a764a1..574c11fb5 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -4925,7 +4925,7 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val case SC_ADRENALINE2: case SC_WEAPONPERFECTION: case SC_OVERTHRUST: - if (sce->val1 > val1) + if (sce->val2 > val2) return 0; break; case SC_HPREGEN: @@ -5686,7 +5686,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val val2 = 20*val1; //Power increase break; case SC_OVERTHRUST: - val2 = 5*val1; //Power increase + //val2 holds if it was casted on self, or is bonus received from others + val3 = 5*val1; //Power increase if(sd && pc_checkskill(sd,BS_HILTBINDING)>0) tick += tick / 10; break; @@ -6662,12 +6663,17 @@ int status_change_timer(int tid, unsigned int tick, int id, int data) struct status_change_entry *sce; bl = map_id2bl(id); - sc = bl?status_get_sc(bl):NULL; + if(!bl) + { + ShowDebug("status_change_timer: Null pointer id: %d data: %d\n", id, data); + return 0; + } + sc = status_get_sc(bl); status = status_get_status_data(bl); - if(!(bl && sc && (sce = sc->data[type]))) + if(!(sc && (sce = sc->data[type]))) { - ShowDebug("status_change_timer: Null pointer id: %d data: %d bl-type: %d\n", id, data, bl?bl->type:-1); + ShowDebug("status_change_timer: Null pointer id: %d data: %d bl-type: %d\n", id, data, bl->type); return 0; } -- cgit v1.2.3-70-g09d2