summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt4
-rw-r--r--src/map/battle.c2
-rw-r--r--src/map/mob.c2
-rw-r--r--src/map/skill.c2
-rw-r--r--src/map/status.c16
5 files changed, 18 insertions, 8 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 7ff911790..2317b7f9a 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,10 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+2008/01/07
+ * 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. [Skotlex]
2008/01/06
* Extended the id range for npcs, now [400,700) will also be treated
as NPC objects (see topic:170845 and bugreport:727) [ultramage]
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;
}