diff options
author | ai4rei <ai4rei@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2010-11-25 15:44:44 +0000 |
---|---|---|
committer | ai4rei <ai4rei@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2010-11-25 15:44:44 +0000 |
commit | 11aa057887c73b752e00bdf0f00b0b3f6b6b7f7a (patch) | |
tree | a3ec5e32b4adb007569b32d3ca07346a7c61a6d4 | |
parent | 90e0ece506d4fc438488f88d3f9395ecc7ae085b (diff) | |
download | hercules-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.txt | 2 | ||||
-rw-r--r-- | src/map/script.c | 32 |
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; } /*========================================== |