summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorai4rei <ai4rei@54d463be-8e91-2dee-dedb-b68131a5f0ec>2010-11-25 15:44:44 +0000
committerai4rei <ai4rei@54d463be-8e91-2dee-dedb-b68131a5f0ec>2010-11-25 15:44:44 +0000
commit11aa057887c73b752e00bdf0f00b0b3f6b6b7f7a (patch)
treea3ec5e32b4adb007569b32d3ca07346a7c61a6d4
parent90e0ece506d4fc438488f88d3f9395ecc7ae085b (diff)
downloadhercules-11aa057887c73b752e00bdf0f00b0b3f6b6b7f7a.tar.gz
hercules-11aa057887c73b752e00bdf0f00b0b3f6b6b7f7a.tar.bz2
hercules-11aa057887c73b752e00bdf0f00b0b3f6b6b7f7a.tar.xz
hercules-11aa057887c73b752e00bdf0f00b0b3f6b6b7f7a.zip
* Fixed script commands attachrid and detachrid not updating the attached character's information about currently running script, causing errors with dialog-based scripts or preventing characters from walking (bugreport:4571).
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@14501 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r--Changelog-Trunk.txt2
-rw-r--r--src/map/script.c32
2 files changed, 31 insertions, 3 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index cb517c094..dae0714fc 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -1,5 +1,7 @@
Date Added
+2010/11/25
+ * Fixed script commands attachrid and detachrid not updating the attached character's information about currently running script, causing errors with dialog-based scripts or preventing characters from walking (bugreport:4571). [Ai4rei]
2010/11/24
* Fixed party booking search not interpreting level 0 as 'all levels' and using level as upper rather than lower bound (bugreport:4537, since r14412). [Ai4rei]
* Display a message showing the user where to change MAX_ITEMDELAYS when they have too many entries in the item_delays db. Follow-up to r14455. [Paradox924X]
diff --git a/src/map/script.c b/src/map/script.c
index c71debc0d..06ede175d 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -9087,14 +9087,40 @@ BUILDIN_FUNC(warpwaitingpc)
// ...
//
+static void script_detach_rid(struct script_state* st)
+{
+ struct map_session_data* sd;
+
+ if(st->rid)
+ {
+ if((sd = script_rid2sd(st))!=NULL)
+ {
+ if(sd->npc_id!=st->oid)
+ {
+ ShowDebug("script_detach_rid: sd->npc_id (%d) != st->oid (%d), please report this!\n", sd->npc_id, st->oid);
+ script_reportsrc(st);
+ }
+
+ sd->npc_id = 0;
+ sd->st = NULL;
+ }
+ st->rid = 0;
+ }
+}
+
/*==========================================
* RIDのアタッチ
*------------------------------------------*/
BUILDIN_FUNC(attachrid)
{
int rid = script_getnum(st,2);
-
- if (map_id2sd(rid)) {
+ struct map_session_data* sd;
+
+ if ((sd = map_id2sd(rid))!=NULL) {
+ script_detach_rid(st);
+
+ sd->st = st;
+ sd->npc_id = st->oid;
st->rid = rid;
script_pushint(st,1);
} else
@@ -9106,7 +9132,7 @@ BUILDIN_FUNC(attachrid)
*------------------------------------------*/
BUILDIN_FUNC(detachrid)
{
- st->rid=0;
+ script_detach_rid(st);
return 0;
}
/*==========================================