summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt2
-rw-r--r--src/map/script.c35
2 files changed, 34 insertions, 3 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index b1d354a31..e14c060bf 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,8 @@ 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/05/31
+ * Crashfix to attach/detach timers, thanks to Konard (fixed recent crashes) [Lupus]
2008/05/28
* Updated Ankle Snare duration (bugreport:1438) [Playtester]
- agi now has only half the effect on the duration (100 agi reduces it by 50%)
diff --git a/src/map/script.c b/src/map/script.c
index ebe02db0f..423cb4983 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -7768,7 +7768,7 @@ BUILDIN_FUNC(getnpctimer)
if (!nd || nd->bl.type != BL_NPC)
{
script_pushint(st,0);
- ShowError("getnpctimer: Invalid NPC\n");
+ ShowError("getnpctimer: Invalid NPC.\n");
return 1;
}
@@ -7803,7 +7803,15 @@ BUILDIN_FUNC(setnpctimer)
else
nd=(struct npc_data *)map_id2bl(st->oid);
+ if (!nd || nd->bl.type != BL_NPC)
+ {
+ script_pushint(st,1);
+ ShowError("setnpctimer: Invalid NPC.\n");
+ return 1;
+ }
+
npc_settimerevent_tick(nd,tick);
+ script_pushint(st,0);
return 0;
}
@@ -7816,15 +7824,28 @@ BUILDIN_FUNC(attachnpctimer)
struct npc_data *nd;
nd=(struct npc_data *)map_id2bl(st->oid);
+
+ if (!nd || nd->bl.type != BL_NPC)
+ {
+ script_pushint(st,1);
+ ShowError("setnpctimer: Invalid NPC.\n");
+ return 1;
+ }
+
if( script_hasdata(st,2) )
sd=map_nick2sd(script_getstr(st,2));
else
sd = script_rid2sd(st);
- if (sd==NULL)
- return 0;
+ if (!sd)
+ {
+ script_pushint(st,1);
+ ShowWarning("attachnpctimer: Invalid player.\n");
+ return 1;
+ }
nd->u.scr.rid = sd->bl.id;
+ script_pushint(st,0);
return 0;
}
@@ -7839,7 +7860,15 @@ BUILDIN_FUNC(detachnpctimer)
else
nd=(struct npc_data *)map_id2bl(st->oid);
+ if (!nd || nd->bl.type != BL_NPC)
+ {
+ script_pushint(st,1);
+ ShowError("detachnpctimer: Invalid NPC.\n");
+ return 1;
+ }
+
nd->u.scr.rid = 0;
+ script_pushint(st,0);
return 0;
}