Welcome to the Builder Academy

Question Mob %transform% bug

More
31 Jan 2013 14:11 #1434 by Rumble
Mob %transform% bug was created by Rumble
I did find a bug, unfortunately GDB is not installed on our new server yet.

Load a mob, attach the below trig, let it transform then purge
Code:
Trigger Intended Assignment: Mobiles Trigger Type: Random , Numeric Arg: 100, Arg list: None Commands: %echo% %self.name% transforms into a new mob! %transform% -1

If someone could confirm/reproduce and post gdb results it would be appreciated.

Rumble
The Builder Academy
tbamud.com 9091
rumble@tbamud.com

Please Log in or Create an account to join the conversation.

More
31 Jan 2013 14:34 #1435 by zusuk
Replied by zusuk on topic Re: Mob %transform% bug
I did this on the latest revision of a stock tbaMUD:

Here is what I did in game to produce a crash:
Code:
500H 100M 82V > tstat 400 Name: 'new trigger', VNum: [ 400], RNum: [ 266] Trigger Intended Assignment: Mobiles Trigger Type: Random , Numeric Arg: 100, Arg list: None Commands: %echo% %self.name% transforms into a new mob! %transform% -1 500H 100M 82V > vstat mob 499 neutral MOB 'the unfinished mob' IDNum: [57176], In room [ 0], Loadroom : [65535] Keyword: mob unfinished, VNum: [ 499], RNum: [ 189] L-Des: An unfinished mob stands here. D-Des: It looks unfinished. Mobile, Lev: [ 0], XP: [ 0], Align: [ 0] Str: [11/0] Int: [11] Wis: [11] Dex: [11] Con: [11] Cha: [11] Hit p.:[1/1+0] Mana p.:[10/10+0] Move p.:[50/50+0] Gold: [ 0], Bank: [ 0] (Total: 0), AC: [100+0/10], Hitroll: [ 0], Damroll: [ 0], Saving throws: [0/0/0/0/0] Pos: Standing, Fighting: Nobody, Attack type: hit, Default position: Standing NPC flags: ISNPC Mob Spec-Proc: None, NPC Bare Hand Dam: 1d1 Carried: weight: 0, items: 0; Items in: inventory: 0, eq: 0 Master is: <none>, Followers are: <none> AFF: NOBITS Triggers: Global Variables: None Global context: 0 Trigger: new trigger, VNum: [ 400], RNum: [ 266] Trigger Intended Assignment: Mobiles Trigger Type: Random , Numeric Arg: 100, Arg list: None 500H 100M 82V > load mob 499 You create the unfinished mob. 500H 100M 82V > The unfinished mob leaves north. 500H 100M 82V > n [ 404] The Jade Forest [ NOBITS ] [ Forest ] Weeds cover the ground in a thick entwined tangle, their vine-like stems weaving around each other as if laying a netted trap. It would be very easy to become ensnared here, and lingering is probably not the wisest of ideas. [ Exits: n s w ] [499] [T400] Puff the Fractal Dragon is here, contemplating a higher reality. 500H 100M 82V > s [ 401] The Jade Forest [ NOBITS ] [ Forest ] The shadows of the trees seem to engulf their surroundings. The light in here is extremely scarce, allowing very little to be visible. Tall blades of grass wave drearily back and forth, lushly coating the ground as if this were swampland. [ Exits: n e w ] [401] A giant mosquito is here. 500H 100M 82V > load mob 499 You create the unfinished mob. 500H 100M 82V > 500H 100M 82V > The unfinished mob transforms into a new mob! 500H 100M 82V > purge The world seems a little cleaner. 500H 100M 82V > 500H 100M 82V > load mob 499 You create the unfinished mob. 500H 100M 82V > 500H 100M 82V > purge The world seems a little cleaner. 500H 100M 82V > 500H 100M 82V >


Here is the GDB:
Code:
Jan 31 07:28:34 :: Entering game loop. Jan 31 07:28:34 :: No connections. Going to sleep. Jan 31 07:28:36 :: New connection. Waking up. SYSERR: gethostbyaddr: Success Jan 31 07:28:40 :: Zusuk has connected. Jan 31 07:28:42 :: Zusuk had no variable file Jan 31 07:28:42 :: Zusuk retrieving crash-saved items and entering game. Jan 31 07:28:42 :: Zusuk (level 34) has 0 object (max 30). Jan 31 07:29:43 :: WARNING: Attempting to remove contents that don't exist in list. Program received signal SIGSEGV, Segmentation fault. 0x0076bf8e in malloc_consolidate () from /lib/libc.so.6 (gdb) list 194 #endif 195 196 t->tv_sec = (int) (millisec / 1000); 197 t->tv_usec = (millisec % 1000) * 1000; 198 } 199 200 #endif /* CIRCLE_WINDOWS || CIRCLE_MACINTOSH */ 201 202 int main(int argc, char **argv) 203 { (gdb) up #1 0x0076e217 in _int_malloc () from /lib/libc.so.6 (gdb) list 204 int pos = 1; 205 const char *dir; 206 207 #ifdef MEMORY_DEBUG 208 zmalloc_init(); 209 #endif 210 211 #if CIRCLE_GNU_LIBC_MEMORY_TRACK 212 mtrace(); /* This must come before any use of malloc(). */ 213 #endif (gdb) up #2 0x00770447 in malloc () from /lib/libc.so.6 (gdb) list 214 215 #ifdef CIRCLE_MACINTOSH 216 /* ccommand() calls the command line/io redirection dialog box from 217 * Codewarriors's SIOUX library. */ 218 argc = ccommand(&argv); 219 /* Initialize the GUSI library calls. */ 220 GUSIDefaultSetup(); 221 #endif 222 223 /* Load the game configuration. We must load BEFORE we use any of the (gdb) up #3 0x080b5670 in find_case (go_adress=0xbffeab80, trig=0x8ec65d8, type=0, mode=0) at dg_scripts.c:2760 2760 buf = (char*)malloc(MAX_STRING_LENGTH); (gdb) list 2755 for (p = c->cmd; *p && isspace(*p); p++); 2756 2757 if (!strn_cmp("while ", p, 6) || !strn_cmp("switch", p, 6)) 2758 c = find_done(c); 2759 else if (!strn_cmp("case ", p, 5)) { 2760 buf = (char*)malloc(MAX_STRING_LENGTH); 2761 eval_op("==", result, p + 5, buf, go, sc, trig); 2762 if (*buf && *buf!='0') { 2763 free(buf); 2764 return c; (gdb) info local No locals. (gdb) print buf $1 = <value optimized out> (gdb) print *buf Cannot access memory at address 0x0 (gdb) up #4 script_driver (go_adress=0xbffeab80, trig=0x8ec65d8, type=0, mode=0) at dg_scripts.c:2561 2561 cl = find_case(trig, cl, go, sc, type, p + 7); (gdb) list 2556 } else { 2557 cl = temp; 2558 loops = 0; 2559 } 2560 } else if (!strn_cmp("switch ", p, 7)) { 2561 cl = find_case(trig, cl, go, sc, type, p + 7); 2562 } else if (!strn_cmp("end", p, 3)) { 2563 /* If not in an if-block, ignore the extra 'end' and warn about it. */ 2564 if (GET_TRIG_DEPTH(trig) == 1) { 2565 script_log("Trigger VNum %d has 'end' without 'if'.", (gdb) info local ret_val = 1 cl = 0x8437528 cmd = "eval inroom }1073654\000s into a new mob!", '\000' <repeats 30 times>, "8\251\376\277\375-\024\b", '\000' <repeats 28 times>, "\b&\314\b\320\275\313\b\000\000\000\000\230\253\376\277\377\351\016\b\320\275\313\b\022\000\000\000\001\000\000\000\214\251\376\277\000\000\000\000\001\000\000\000s world.\000?\000r at \000\000\000\000 moment.\n\000\000\000\250\251\376\277\375-\024\b\001\000\000\000ed a\360\365\354\267", '\000' <repeats 20 times>, "\001\000\000\000\000\000\000\000\310\251\376\277S.\024\b\001\000\000\000\002\000\000\000\000\000\000\000]\000\000\000\030\337\306\bx\274\344\b\370\251\376\277\352?\f\bx\340\306\b\000\000\000\000x\274\344\b\000\000\000\000x\274\344\b\003\000\000\000\000\000\000\000\000"... p = <value optimized out> sc = 0x8ec65b8 temp = <value optimized out> loops = 0 go = 0x8ec6408 depth = 1 (gdb) up #5 0x080b9841 in random_mtrigger (ch=0x8ec6408) at dg_triggers.c:121 121 script_driver(&ch, t, MOB_TRIGGER, TRIG_NEW); (gdb) list 116 return; 117 118 for (t = TRIGGERS(SCRIPT(ch)); t; t = t->next) { 119 if (TRIGGER_CHECK(t, MTRIG_RANDOM) && 120 (rand_number(1, 100) <= GET_TRIG_NARG(t))) { 121 script_driver(&ch, t, MOB_TRIGGER, TRIG_NEW); 122 break; 123 } 124 } 125 } (gdb) info local t = 0x8ec65d8 (gdb) print *t $2 = {nr = 1212, attach_type = 0 '\000', data_type = 0 '\000', name = 0x8ec6618 "Foreman Walkabout - 23628", trigger_type = 3, cmdlist = 0x84365d0, curr_state = 0x84375e8, narg = 40, arglist = 0x0, depth = 2, loops = 0, wait_event = 0x0, purged = 0 '\000', var_list = 0x9138608, next = 0x0, next_in_world = 0x8ec54e8} (gdb) up #6 0x080b3e69 in script_trigger_check () at dg_scripts.c:639 639 random_mtrigger(ch); (gdb) list 634 sc = SCRIPT(ch); 635 636 if (IS_SET(SCRIPT_TYPES(sc), WTRIG_RANDOM) && 637 (!is_empty(world[IN_ROOM(ch)].zone) || 638 IS_SET(SCRIPT_TYPES(sc), WTRIG_GLOBAL))) 639 random_mtrigger(ch); 640 } 641 } 642 643 for (obj = object_list; obj; obj = obj->next) { (gdb) info local ch = 0x8ec6408 obj = <value optimized out> nr = -1073828968 (gdb) up #7 0x080993a7 in heartbeat (heart_pulse=780) at comm.c:974 974 script_trigger_check(); (gdb) list 969 static int mins_since_crashsave = 0; 970 971 event_process(); 972 973 if (!(heart_pulse % PULSE_DG_SCRIPT)) 974 script_trigger_check(); 975 976 if (!(heart_pulse % PASSES_PER_SEC)) { /* EVERY second */ 977 msdp_update(); 978 next_tick--; (gdb) up #8 0x0809a498 in game_loop (local_mother_desc=7) at comm.c:938 938 heartbeat(++pulse); (gdb) list 933 missed_pulses = 30 RL_SEC; 934 } 935 936 /* Now execute the heartbeat functions */ 937 while (missed_pulses--) 938 heartbeat(++pulse); 939 940 /* Check for any signals we may have received. */ 941 if (reread_wizlist) { 942 reread_wizlist = FALSE; (gdb) up #9 0x0809c057 in init_game (argc=Cannot access memory at address 0x1 ) at comm.c:533 533 game_loop(mother_desc); (gdb) up #10 main (argc=Cannot access memory at address 0x1 ) at comm.c:353 353 init_game(port); (gdb) up Initial frame selected; you cannot go up. (gdb)

Website
www.luminariMUD.com

Main Game Port
luminariMUD.com:4100

Please Log in or Create an account to join the conversation.

More
01 Feb 2013 04:45 #1440 by Vatiken
Replied by Vatiken on topic Re: Mob %transform% bug
Tried to duplicate again, following Zusuk's actions, but I couldn't. Hmm...

tbaMUD developer/programmer

Please Log in or Create an account to join the conversation.

More
13 Oct 2013 18:05 - 13 Oct 2013 18:06 #4408 by rudeboyrave
Replied by rudeboyrave on topic Re: Mob %transform% bug
I think we may have stumbled onto this bug and it is very re creatable on stock tbamud.

For this we are using one trigger on two different mobiles. Puff being one and the newbie tour guide being the other. just for testing. We used waybread as our test object, although that may be info that doesnt matter. simply load a mob until the transform occurs

The crash will occur when you purge the room.
Code:
1H 56M 84V > tstat 3099 Name: 'TEST BONE LOADING', VNum: [ 3099], RNum: [ 759] Trigger Intended Assignment: Mobiles Trigger Type: Load , Numeric Arg: 100, Arg list: None Commands: switch %random.10% case 1 mload obj 3009 break case 2 mload obj 3009 break case 3 mload obj 3009 break case 4 mload obj 3009 break case 5 mload obj 3009 break case 6 mload obj 3009 break case 7 mload obj 3009 break case 8 mload obj 3009 break case 9 mtransform 1 break case 10 mload obj 3009 break default %echo% buggy! break done

crash everytime and the syserr in the mud matches Zusuk's issue above. The problem is definitely a mtransform issue.

CyberASSAULT
www.cyberassault.org
cyberassault.org 11111
A post-apocalyptic, sci-fi MUD.
Last edit: 13 Oct 2013 18:06 by rudeboyrave.

Please Log in or Create an account to join the conversation.

More
20 Mar 2014 00:20 #4766 by Rumble
Replied by Rumble on topic Re: Mob %transform% bug
I guess we fixed this one at some point. Can no longer reproduce.

Rumble
The Builder Academy
tbamud.com 9091
rumble@tbamud.com

Please Log in or Create an account to join the conversation.

Time to create page: 0.431 seconds