Topics in Category: Development - tbaMUD Mon, 06 Jul 2020 21:01:49 +0000 Joomla! - Open Source Content Management /media/kunena/images/icons/rss.png Topics in Category: Development - tbaMUD en-gb Valgrind: Memory Tool - by: thomas
The first also needs attention, but is less crucial since cedit isn't automaitically doing stuff.]]>
Development Tue, 26 Aug 2014 22:00:13 +0000
Patch File How-to - by: Juras
Glad to see it's still helping people out.]]>
Development Fri, 11 Jan 2013 10:18:39 +0000
3.63 Colour Code FAQ and Information - by: Vatiken "Characters" in code:
Each visible and non-visible character in the code can be referenced by a digit. The capital letter 'A' is equal to a 65, while a small letter 'a' is 97. Some character's in C code can't be displayed because they are either not visible, such as a carriage return, or a null, or because they are used within the code itself, such as quotation marks. These non-visible or otherwise used characters can be accessed thru escape codes such as '\r' for a carriage return, '\0' for null, or '\"' for quotations.

tbaMUD 3.62 vs 3.63:
The colour parsing system in 3.62 used character 64 or '@' as a special marking character, this indicated that the next character would used to determine a colour code. Because this system handled ONLY colour, this wasn't an issue.

3.63 uses character 9, or TAB (escape code = '\t') as the indicator character because the interpretation system (protocol_output) handles more then just colour, and addition security was required.

MXP and other protocols offer up significant possibilities, both for developer potential and player mischief. MXP for example, allows for pop-up menus, tool-tips, clickable links, 16 bit colour, and MSP(Mud Sound Protocol). A developer with access to this can greatly reduce the entry-barrier for new players, and create a more robust tool-set for builders and other staff members. A player could use this to spam audio clips on chat channels, or create false links which cause victims to remove/drop all equipment and self-delete.

Because clients(all that I can think of) are unable to send character 9(TAB), this significantly lowers the risk of potential abuse when used in conjunction with MXP.

Back Port:
So for 3.63, we moved over to character 9(TAB) but we implemented a system to allow for back-portability with MUDs who would still be using character 64(@) in their world and text files. How it works is any "@" within a file* will be turned into character 9(TAB) as it is loaded. When it is saved, it is turned back into "@" and written to file.
*Files that have been adapted for back-portability.

Usage (Oasis OLC):
All single line strings (Room Names, Short Descriptions, Aliases, etc..) will have any user entered "@" turned into character 9((TAB) prior to be saved to the object/room/mobile etc...

Usage (Improved Editor):
Strings entered through the improved editor(tedit, mobile/room descriptions, help files, etc...) have to be manually toggled from character 64(@) to 9(TAB). This is done through the editor option "/t" (similar to /f for format, or /s for save). This also allows the user to transfer backwards to use of "@", which makes it easier to copy/paste a file w/codes to an external editor.

Usage (Other):
Other uses, such as in comm channels, or any other area where you may wish to permit a player access to character 9(TAB), will have to be manually added in. (cedit option in upcoming release). This can easily be done using the "parse_at(char * string)"* function, which will simply replace all instances of character 64(@) with character 9(TAB). Please note, tbaMUD 3.63 released with a bug that caused "skip_spaces()" to ignore character 9(TAB) when used first in an argument. This was fixed and is available is the SVN. Examples of using "parse_at()" within functions such as "do_say()" can be found in the old forum, or in the lastest "act.comm.c" in the SVN.
*"parse_tab(char * string)" also exists, for the reverse functionality.

Frequently Asked Questions:::

I typed "say @RRed@n" into my MUD client, and it came up as "You say, '@RRed@n'"! Why is my colour not working?!?
Make sure your version of tbaMUD 3.63 is up-to-date with the post-release bug fixes (available in the SVN), and simply place a "parse_at(argument)" in "do_say()" after "struct char_data *vict;", or more importantly, before the argument is sent out to the players in-room.

I typed "\t" into a room-description but it just shows up as "\t".
"\t" entered into a room-description is just that, an '\'(character 92) and a 't'(character 116), as opposed to an '\t'(character 9) which is required for protocol_output() to acknowledge an upcoming code. To utilize a colour code, use character 64(@), followed by the required code, Example: @RRed@n, and then use the editor option "/t" to swap characters between '@' and '\t'.

Why did you change the colour code "@" to the tab? This is confusing, and I don't like it.
The special character is now used for more then just colour, and as such a more in-depth processing system was required. Refer to the above security information.

Having to type in "/t" into the improved editor to manually exchange characters offends me to my core, I want proc_colors() back.
"proc_colors()" is a simple static function, and can easily be pulled from the old circleMUD ftp site, or a previous version of tbaMUD and slapped back in within a matter of minutes. It will offer unnecessary cpu overhead, and redundant, out-dated functionality, but the choice is yours.

Placing a "parse_at()" in the functions I would like to allow the player to contribute special codes to is taking me far too long, isn't there a faster way?
Yes, Thread: Post 4516 includes an example where I placed a parsing function in "get_from_q" which would automatically swap any incoming '@' for an '\t'. As mentioned though, this opens the door to potential security risks if the MUD developer isn't careful.

Why not use a cedit toggle to swap between proc_colors() and protocol_output() based on developer preference?

But why? Is anyone who downloads the source code for 3.63 gonna switch on a cedit toggle for an outdated parsing function that only enables 16 colours, when the default system enables 256 Xterm colours, 16,772,216 Colours through MXP, as well as clickable links/lists, tool tips, gauges etc, as well as charset icons, and yadda yadda yadda.

How do I enter an MXP clickable link into a helpfile?
To use an MXP clickable link, you require an MXP capable client, and similar to colour codes you would do something like this in hedit's improved editor:

If you are using MXP within your code, for say selecting a character's sex at creation time. You'd do something like this:

How do I play a sound?
Sound can be played in 3 ways:
1) Through an OOB protocol such as MSDP or ATCP, with the aid of a client plug-in
2) Through MSP(Mud Sound Protocol), with the aid of a compatible client
3) Through MXP's MSP, with the aid of a compatible client

For information on SoundSend() refer to ProtocolSystem.txt found in the /doc folder.
For basic MSP, you can refer to this * for some more information.
For MXP-MSP, you can refer to this *
For sound through OOB protocol and a compatible client, you'll have to refer to your client's documentation.
*Protocol Standards for MXP, and MSP aren't set it stone, as what works for zMUD might not work for another client.
Development Fri, 22 Jun 2012 03:21:22 +0000
Debugging Tutorial for GDB - by: Rumble
A common question asked by MUD owners is "My MUD keeps crashing, how do I use GDB to debug my MUD and find the problem". I hope to be able to answer that question with my quick guide below.

This is not a comprehensive tutorial that will teach you everything there is to know about GDB, but it will give you enough basic knowledge to hopefully root out the cause of any MUD crash.

What is GDB
GDB is a programmers debugging tool. It allows you to run the program within a controlled environment which will 'catch' a crash, and let you examine the status of the program at the time of the crash. It does much more than just this (like letting you pause your running program, and step through it one line at a time, or even examine your crashed program days after a crash, even when it wasn't running within GDB).

Running your MUD in Debug Mode
GDB should be run on your MUD from it's root folder (not in the bin subfolder as you might expect).

Next, type gdb bin/circle to start GDB, and tell it to use your MUD executable. You will now be given the gdb prompt instead of your normal unix-shell one.

Next, type run <port> to run your mud (obviously entering a port number to use, not typing "<port>"). You should see all your normal syslog info appear on your screen, and your MUD will eventually give a message saying "No connections, going to sleep.".

You should then be able to connect to your MUD on the specified port in the normal way. Your next step is to crash the MUD. Obviously, if you have a crash bug, you might have some idea of what's causing it. When you manage this, the MUD will appear to pause, and you will get a message in GDB, and your gdb prompt will return. You can now start debugging.

Normally, the first command you type will be bt (for 'backtrace') which will show you the function tree, with the lowest level at the top. This shows the files each function call is in, and the line number it's called from. Below is an example of how this could look:

Program received signal SIGSEGV, Segmentation fault.
load_char (name=0x22c540 "Jamdog", ch=0x10ebcb48) at players.c:248
248 GET_SKILL(ch, i) = 0;
(gdb) bt
#0 load_char (name=0x22c540 "Jamdog", ch=0x10ebcb48) at players.c:248
#1 0x0045f967 in nanny (d=0x10eb62f0, arg=0x22ca50 "Jamdog") at interpreter.c:1417
#2 0x00440f80 in game_loop (mother_desc=3) at comm.c:903
#3 0x004410e0 in init_game (port=4000) at comm.c:531
#4 0x004414f6 in main (argc=1, argv=0x10011c80) at comm.c:378

Now, this may look scary and confusing, but it's relatively simple. The top line (beginning #0) is the point of the crash - it's the line that was being executed when the crash happened. Here is the breakdown of that line:

#0 - indicates the function depth. As you can see above, #0 is called from within the function at #1, and #1 is called from within the function at #2. The 'main' function will always be the last in the list.

load_char - This is the name of the function where the crash happened. Sometimes it is a function in the C core code, and not the MUD code, so look for the first function you recognize in the list.

(name=0x22c540 "Jamdog", ch=0x10ebcb48) - This shows the variables that were passed to the function. In this case, a string at memory address 0x22c540 and a char_data struct at memory address 0x10ebcb48. GDB handily shows the string for you, which was 'Jamdog'. You can see the contents of ch with the print command (see below)

at players.c:248 - This shows the file and line number where the crash happened.

You can now use the following commands to debug most problems:
info local - display the status of 'local' variables, variables created in the current function.
list - list the source code. Shows 3 or 4 lines above and below the current location.
print - display the staus of the specified variable (does not need to be local, and can view within structs this way - e.g. print ch->name or print *ch).
up - move 'up' the function tree (shown by bt) to the previous function.
kill - stop the current MUD program.
quit - exit from gdb (prompts to kill a running program)

Here is an example of these in use:

info local
id = 0
i = 2
fl = (FILE *) 0x10011f74
fname = "plrfiles/F-J/jamdog.plr"
buf = "\204b\026aPÄ\"\000\000\000\000\000ÿ\001", '\0' <repeats 14 times>, "\001"
buf2 = "X\006\000\000ðÃ\"\000\001\000\000\000$Ä\"\000(Ä\"", '\0' <repeats 17 times>, "PE\02"
line = "ðé$\000í"...
tag = "þÿ\000\000\2268"
ch = (struct char_data *) 0x10ebcb48
(gdb) print *ch
$1 = {pfilepos = 50, nr = 65535, in_room = 791, was_in_room = 65535, wait = 1, player = {passwd = "Ja3pvo1SmcUB6", name = 0x8b117a0 "Jamdog", short_descr = 0x0, long_descr = 0x0, description = 0x0, bio = 0x0, title = 0x8b16308 "the Omnipresence", sex = 1 '\001', chclass = 4 '\004', level = 200, adm_level = 4, time = { birth = 1243951538, logon = 1288030404, played = 2148763}, weight = 146 '\222', height = 174 } }
(gdb) print ch->in_room
$2 = 791
(gdb) list
243 /* character initializations */
244 /* initializations necessary to keep some things straight */
245 ch->affected = NULL;
246 mudlog(NRM, LVL_GOD, TRUE, "Setting skills to zero");
247 for (i = 1; i <= MAX_SKILLS; i++)
248 GET_SKILL(ch, i) = 0;
249 mudlog(NRM, LVL_GOD, TRUE, "Setting sex");
250 GET_SEX(ch) = PFDEF_SEX;
(gdb) up
#1 0x0045f967 in nanny (d=0x10eb62f0, arg=0x22ca50 "Jamdog")
at interpreter.c:1417
1417 if ((player_i = load_char(tmp_name, d->character)) > -1) {

Running GDB on your MUD After a Crash
Obviously, you can't keep your MUD in debug mode all the time. If it crashed while you were asleep, it would 'pause' the MUD until you found it in the morning.

For that reason, modern tbaMUD releases do a 'core dump' in the event of a crash. This is basically a snapshot, or photograph of the MUD at crash time, and this can still be used by GDB to trace the problem.

Core dump files are saved in your lib folder and should be checked regularly. Because core dumps are commonly 10-15Mb you should delete them once you are done troubleshooting.

To load the core dump into GDB, you need to be in the root folder of your MUD, and type: gdb bin/circle lib/core.# GDB will load in the normal way, but you don't need to run the MUD. You can immediately type bt to see the backtrace from crash-time, and you can use all the above commands to debug what happened. Because the MUD isn't running however, you won't be able to step-through the program (which usually isn't necessary anyway, and why I didn't add it to this guide).

Here is another typical debugging session. This is what you need to post to the forums when you need help:

gdb bin/circle
<gdb output>
gdb> run
<mud log - it's usually helpful to include the last couple of lines.>
Program received SIGSEV in some_function(someparamaters) somefile.c:1223
gdb> bt
#0 0x234235 some_function(someparamaters) somefile.c:1223
#1 0x343353 foo(bar) foo.c:123
#2 0x12495b baz(0x0000000) baz.c:3
gdb> list
1220 foobar = something_interesting();
1222 foobar = NULL;
1223 free(foobar);
1224 }
1227 next_function_in_somefile_c(void)
gdb> info local
foobar = NULL
gdb> up
frame #1 0x343353 foo(bar) foo.c:123
gdb> list
<similar output to the above, but different file>
gdb> info local
<similar output to the above, but different variables>
gdb> up
frame #2 0x12495b baz(0x0000000) baz.c:3
gdb> list
<similar output to the above, but different file>
gdb> info local
<similar output to the above, but different variables>
gdb> up
You are already at the top frame.

Development Sun, 10 Jun 2012 08:33:00 +0000
Group Tanks - by: cunning
I think I have a few more ideas in mind. I think this is a great collaboration to add to the group.

A few other updates in act.informative.c as well.

Development Mon, 08 Jun 2020 00:11:39 +0000
Interest in Anti Duping code - by: Rumble Development Thu, 28 May 2020 14:28:53 +0000 Clean up opportunity for next code base - by: cunning
OBJ should have NOTHING
ROOM should have NOWHERE
MOB should have NOBODY

I have found several instances by searching on GET_OBJ_RNUM or GET_MOB_RNUM and found they had other then what they should. Just an FYI]]>
Development Mon, 18 May 2020 11:07:36 +0000
Building and compiling the quest foldr - by: brunoadoac Development Sat, 16 May 2020 03:55:02 +0000 Zone Instancing - by: cunning
Development Wed, 13 May 2020 12:54:22 +0000
Two new development projects - by: Parnassus Development Wed, 22 Apr 2020 14:48:49 +0000 db.c - typo in parse_rooms - by: thomas ]]> Development Thu, 16 Apr 2020 23:41:49 +0000 Warnings - by: thomas ]]> Development Thu, 05 Mar 2020 18:49:42 +0000 Badly chosen parameter name for old macro in utils.h (cosmetic issue) - by: doggo Development Sun, 23 Feb 2020 22:57:55 +0000 MAX_NAME_LENGTH crash, repeatable, all versions - by: doggo char * is being casually converted to a char array when it is passed to strcpy.

Having absolutely nothing to do with the gcc flags that tba-2020 uses, the following code (which is an example based on the test that Castillo did above) ought to crash!

The fact that you didn't have issues before incorporating the compiler flags

is actually the surprising part. It should crash because it's trying to modify memory it doesn't have access to.

To respond to Thomas' thoughts:

I think the +1 fix is a hack. It would have to be done everywhere we allocate a buffer for a name.
Instead, we must limit to 19 chars, using <= instead of <. That is consistent with the buffer size.

This is true, and is to be expected! It's no less weird to implement

and then insist that names be no more than 19 characters long.

The solution suggested by Castillo:

is not a hack. In fact it is the natural choice here.]]>
Development Sat, 22 Feb 2020 02:43:10 +0000
Problem with isname() in handler.c - by: doggo
in handler.c is ever called to compare numerical strings, but there are two problems with an edit made by someone named Sryth. As indicated by their comment, the intention was to prevent the function from allowing abbreviations.

1) This has introduced a (benign) memory leak, since the string newlist is not freed in one of the cases.
2) But far more importantly, this does not work as intended. Using the function as it is currently written,

The reason the 3rd statement evaluates to FALSE, is that since "123" is a proper substring of "1234", but has a leading character which is numeric, the function immediately returns FALSE, without allowing "123" to be compared to the next token in in the namelist (which is in fact a perfect match).

This simplest fix is the following:

However, I would instead recommend the following change (which removes more lines than it adds):

Again, it probably never would have caused an issue, but the code might as well be correct.]]>
Development Sat, 22 Feb 2020 01:54:34 +0000
Minor bug in CEDIT, fresh install tbaMUD-2020 - by: thomas Development Mon, 10 Feb 2020 23:05:38 +0000 DG_Script Crash Issue - by: Sapphire Development Fri, 07 Feb 2020 16:41:55 +0000 Confused over piece of code in parse_room() - by: thomas Development Fri, 31 Jan 2020 22:17:32 +0000 Crash bug in stock tbaMUD 2020 on Ubuntu Server 18.04 LTS - by: Rumble Development Mon, 27 Jan 2020 08:52:40 +0000 Crash - by: thomas Development Sun, 26 Jan 2020 21:23:19 +0000 Annoying bug - by: thomas Development Fri, 24 Jan 2020 21:12:45 +0000 Question (SYSERR) - by: thomas Development Thu, 23 Jan 2020 23:27:30 +0000 Codebase and Building on *BSD - by: thomas wildcard and patsubst. If you had those already, you should not feel the difference. In this case, adding new .c files will require you to add them here as well.

Also, apparently, Cat checked out the code with windows-style line endings in the util/ . I suspect this may have been a missing --crlf option in her command causing it. Either way, it works.]]>
Development Sun, 19 Jan 2020 11:57:29 +0000
tbaMUD 2020 Release - by: Rumble
Download tbaMUD via Github or our Downloads at .


As always, please keep the feedback coming so we can continue to improve.]]>
Development Fri, 17 Jan 2020 14:05:49 +0000
New GCC 7 Warnings - by: Rumble Development Sat, 11 Jan 2020 00:47:19 +0000 New Developer - by: WhiskyTest
I would suggest fire up a copy of tbaMUD as your base, and get stuck into building out your world.

Almost anything you need can be achieved using triggers, and the bits that can't - well you can post request on the forums and are bound to get a response.

If you run with the CircleMUD releases like CWG/Budda you may run into bugs which have been addressed already by tbaMUD. Balance that against how much you want the features they include.

You'll find patches for classes/races/skill etc for tbaMUD which cover a lot of what CWG offer. But changing tbaMUD to a pure D20 ruleset is a lot of work, and not worth the effort if you ask me. Although pure D20 rules don't lend themselves to computer gaming in my opinion anyway :D

Whatever you choose
Good luck!]]>
Development Tue, 24 Dec 2019 14:47:41 +0000
Mob coding assistance - by: Nero

set room
set target %room.people%
while %target%
set tmp_target %target.next_in_room%
if %target.vnum(-1)%
elseif !%target.vnum(8013)%
elseif %target.vnum(8013)% && %target.fighting%
%echoaround% %self% shouts, 'None shall harm the Queen while I draw breath!'
%force% %target% assist
elseif %target.vnum(8013)% && !%target.fighting%
set target %tmp_target%
Development Sun, 07 Jul 2019 03:52:54 +0000
Invis to animals spell - need a bit help - by: JTP Development Wed, 08 May 2019 11:13:44 +0000 Tbamud 2018.1 won't compile on Freebsd - by: wyld Development Wed, 01 May 2019 10:13:08 +0000 Ban - by: JTP Development Sun, 28 Apr 2019 13:20:30 +0000 new skill - by: thomas
Development Thu, 18 Apr 2019 14:09:22 +0000
Segmentation Fault. - by: thomas
This function call

is being expanded to

And there's really nothing that could do that in this code!

We've clearly hit the $c case, obvious both from the call point above and from the value of orig (="c >"). Since the $c translation is into a set of numbers (all things happening in the get_art() function are adding numbers to a string), where does this "save" come from?

Now would be a good time for a debugging session; you have a reproducible problem in a limited subset of the code base.
The tutorial we have on this site is only a very, very small subset of the gdb program. Check out this handy quickstart guide:

Fire up the mud through gdb and set a break point at the line with i = get_art(ch);. This is done with break comm.c:2630 (with the correct line number, of course). Log in to the mud, and you will trigger the breakpoint. At this point, the i var is not set to anything relevant, because the line hasn't run yet.
Use the next command to step over the function call. Now print i and perhaps as important print *i will help you see what the i var is at this time. If it is 0 or 1, crash (continue) and start over, this time using step instead of next to step into the get_art() function to see where it suddenly changes.

With a little luck, you'll soon find out how that "save" got into your output. As you might deduct from this post, I can't really help you from here.

Another thing, probably unrelated: the k buffer is too small. It's possible to overflow it given many affects. Expand it to 60 bytes and it should be enough.]]>
Development Wed, 27 Feb 2019 22:33:51 +0000
Changing the default display - by: Parnassus

Chances are the WhiskyTest's is better but I found this one a bit easier to input.]]>
Development Wed, 05 Dec 2018 21:05:48 +0000
Introducing the LuminariMUD GUI Client Script for Mudlet! - by: rudeboyrave Development Sat, 08 Sep 2018 18:53:32 +0000 Bugreport: bug in map - by: prool
I think that the error in the geometry of the world]]>
Development Sat, 04 Aug 2018 05:17:37 +0000
How to save/load Objects with Unique Values - by: WhiskyTest All working as intended :)]]> Development Fri, 20 Jul 2018 13:40:44 +0000 minor bug in oedit - by: cunning Development Sun, 03 Jun 2018 20:27:20 +0000 Infinite loop on latest stock TBA - by: lacrc But the Multiple Keyword support is fairly recent, the commit is from 26 days ago, if your TBA source was updated from the master during this time then yes, that might be the case.

You could try to replace your isname_tok() and isname() functions with the ones I posted earlier, BUT it might be wiser to simply update your source from the master on github again (since the commit has been reverted) and wait for and answer from thomas or anyone else for that matter since I'm fairly new around here and not sure of what I am doing :D

Edit: and btw for the trace you need to use gdb to run circle, I think there's some tutorials around here on the forums on how to do it
Another edit: So here's some examples.
This thread has some info (from thomas himself) on how to attach gdb to a running process.
This one there's thomas (yep, him again, dude is all over the place!) walking someone over on how to walk through frames and print variables in gdb.

There's a lot more probably, but I think those can get you started.]]>
Development Sat, 14 Apr 2018 00:22:26 +0000
Not a crash - but another entry in file error from 3 days ago - by: JTP
But Nice idea with string]]>
Development Mon, 09 Apr 2018 12:20:52 +0000
Wierd crash - Need help to locate the problem from this GDB info - by: thomas
The fix will make sure it works both ways, though :)]]>
Development Sun, 08 Apr 2018 07:48:10 +0000
DG-Script help - by: lacrc Something like:

Haven't tested that code and again I'm not that good with DGs, just an idea :)

For the first question, do you already have a spell that does that? Asking cause dg_cast() needs an existing spell so, does the 'sovereign heal' spell already exists or are you asking for directions on how to create that spell?]]>
Development Wed, 28 Mar 2018 13:33:56 +0000
medit - code assistance - by: lacrc I thought that there was something done that was public out there haha, just something that I could base off.
But no sweat, I'ma give it a go later! :)
Thanks anyway!!]]>
Development Sun, 25 Mar 2018 00:57:06 +0000
How to change the name of Happyhour? - by: Nero Development Mon, 19 Mar 2018 03:00:12 +0000 Circle3.x snippets - by: JTP
send_to_char("As you begin .......!\r\n",ch);

send_to_char(ch, "As you begin .......!\r\n");]]>
Development Mon, 12 Mar 2018 19:32:13 +0000
simple_list forced to reset itself - by: JTP

Feb 25 08:50:48 :: SYSERR: simple_list() forced to reset itself.
Feb 25 08:50:48 :: SYSERR: Assertion failed at lists.c:264!]]>
Development Tue, 27 Feb 2018 21:09:04 +0000
do_mforce bug - by: thomas Development Tue, 27 Feb 2018 20:27:39 +0000 Looking for CodeBase - by: agonia Development Fri, 23 Feb 2018 13:32:23 +0000 Affect Field - by: thomas Development Fri, 16 Feb 2018 21:11:03 +0000 Android - by: prool

I build tbamud in the Android 6.0 environment.
What for? For fun

Development Tue, 13 Feb 2018 10:41:54 +0000
Stock Bug: IBT abort /a with body - by: zusuk bug submit my bug
types at least a character of input, presses return
then decides he/she does not want to submit this bug, so types:

The bug submission still gets saved to the list

The problem appears to be that because the entry is not an empty 'body' it is not getting cleaned up.

Looking for confirmation on the proper way to handle this, this is what I did:

Development Tue, 13 Feb 2018 08:14:22 +0000
SYSERR: Write to socket: Connection reset by peer - by: Treblin Development Tue, 06 Feb 2018 23:16:22 +0000 do_commands - by: JTP
Until i have typed wizhelp myownname...and Then If i again type wizhelp testchar, Then it shows my wiz commands ?

Where when i try on tbamud, wizhelp testchar, it from the first time shows wiz commands, but its a level 1 i tried on...but at the very end of the wizcommands it Then writes: peacThe Propagandist

Now where did that Come from.]]>
Development Tue, 30 Jan 2018 09:57:26 +0000
Crash In free_list() - by: Sascha Development Sat, 27 Jan 2018 17:02:16 +0000 To Free or Not To Free? - by: WhiskyTest Specially as you say there are so many ways the data can be affected outside the event.

I'll try using a string/lookup method.
This is part of the fun for me, puzzling out how to achieve these little tweaks :D]]>
Development Sun, 21 Jan 2018 21:28:14 +0000
tbaMUD 2018 Release - by: Rumble .


More bug fixes and an updated World.]]>
Development Mon, 15 Jan 2018 01:21:19 +0000
Kill Quests in groups - by: Sascha Development Sun, 14 Jan 2018 23:18:18 +0000 2018 Release - by: WhiskyTest ]]> Development Sat, 13 Jan 2018 21:36:10 +0000 Animate dead question - by: JTP I have no idea How to separate npc and players in a group.]]> Development Sat, 23 Dec 2017 15:49:53 +0000 Exit Flags - by: Rumble Development Mon, 18 Dec 2017 17:52:19 +0000 suffering from poison - by: JTP
But that Could make good sense when it only happends some times.. Thanks]]>
Development Mon, 18 Dec 2017 00:48:11 +0000
Corpses - by: WhiskyTest
I've included the patch file fully here as you mentioned having trouble opening ZIP files? Get 7zip!

File Attachment:

File Name:
File Size: 2 KB

Development Fri, 15 Dec 2017 02:42:04 +0000
TYPE_SLASH - by: WhiskyTest
Back up in raw_kill() is where I'd add the head severing.
This way you still have access to *ch and *killer data, so you can check if the killer was using a weapon - and if it was indeed a slashing weapon.

Just pop in in before the make_corpse(ch); call.

Once you get into make_corpse() you really only have access to the *ch information, of whom the corpse will be created.]]>
Development Sat, 09 Dec 2017 03:35:19 +0000
autosac - by: JTP Development Thu, 07 Dec 2017 23:17:11 +0000 GUI for TBAmud - by: Sascha
I responded to your post over on my boards regarding the GUI setup/implementation. Just wanted to call your attention to it. Thanks!]]>
Development Thu, 07 Dec 2017 13:51:49 +0000
if check help - by: JTP Development Wed, 06 Dec 2017 22:17:14 +0000 tbaMUD 3.68 Release - by: Sascha Development Thu, 23 Nov 2017 14:50:36 +0000 Skill tan wont load objects - by: JTP
Ok changed to ch it compiles and Will test now]]>
Development Thu, 23 Nov 2017 03:56:04 +0000
problem with patch: proc_color in comm.c file - by: sz4bo


Full code needs to be get rid of strncpy, stpcpy, strdup, isascii, isalnum, islower and such, they are ascii text handling C functions, they need to be replaced their wide character supporting (wcs) cousine functions like wcscpy, wcsncpy, wcsdup, iswalnum etc... also #include ctype.h or wctype.h is needed too. Then, tba will be able to 100% safely deliver unicode.

What are your thoughts?

Development Mon, 20 Nov 2017 19:27:57 +0000
Any interest in a 'install' target for make? - by: thomas want to copy all lib files.

A pull request would be welcome :)]]>
Development Thu, 09 Nov 2017 23:17:57 +0000
Sing system like cast - by: JTP Development Thu, 09 Nov 2017 21:25:00 +0000 Found Small bug - by: WhiskyTest Socials can be targeted to bodyparts. I guess so you can do important things like poke someone in the eye...

When you type 'sing playername hi' the social treats it like this:
Jan wants to sing to playername's hi.
It thinks 'hi' is a bodypart, it doesn't treat it like a sentence.
To make sing a way of communicating you'd add it to do_spec_comm like ask/whispering - and remove the social.

Development Sat, 04 Nov 2017 22:20:36 +0000
Is the Github code considered stable? - by: wyld
Feel free to bring up any additional issues or feature requests!]]>
Development Fri, 03 Nov 2017 12:48:29 +0000
SYSERR: IN_ROOM(ch) = NOWHERE when equipping char Test. - by: WhiskyTest Development Mon, 30 Oct 2017 20:08:51 +0000 cheaper shop prices for humans - by: thomas
Development Sat, 28 Oct 2017 21:12:55 +0000
do_drop - help - by: JTP
I Will try look at perform drop Then.]]>
Development Wed, 25 Oct 2017 06:25:17 +0000
Quest Completion Event - by: zusuk
So here is what I slapped together... looking for assistance cleaning it up and testing to see if this is not problematic since I lack play-testers ;p I also do not have a keen eye for memory leaks and that kinda jazz.

Find this function in quest.c:

Dump this over it:

Also just make sure you add the eQuest_complete as an event cooldown and save the event to your pfile (players.c)

Thanks in advance for any testing/feedback!!

Development Wed, 18 Oct 2017 12:00:17 +0000
Act messages messing with me - by: thomas

$s “his,” “her,”or “it,” depending on the gender of ch.
$S Like $s, for vict_obj.*

So, here you're using $N (which means it's VICT you are getting the name of). The matching possessive pronoun is $S (dollarsign-capital-S). $s refers to the caster (here, ch).]]>
Development Tue, 17 Oct 2017 20:40:52 +0000
case spell hickup - whats wrong ? - by: thomas
And the reason my way was better is because doing this is a memory leak:

After you return in the condition, there no longer exists any way to get a hold of the allocated memory. Thus, it can never be free'd.
In the case of the affect array in your code, this is later added to the character, so it is freed when the character is extracted. But if you skip out before the assignment, but after the allocation, the memory is lost.]]>
Development Mon, 16 Oct 2017 19:43:05 +0000
Password encryption/decryption bug - by: thomas
This code hasn't been changed for equally as long, and could really need an upgrade (I think I've stated this earlier, it's in interpreter.c, the login state machine...). I'll have a look when I have the time.]]>
Development Sat, 14 Oct 2017 21:16:06 +0000
Trigger Lag - by: Gahan
#if 1 /* debugging */
struct char_data *i = character_list;
struct obj_data *j = object_list;
room_rnum k;
if (sc) {
for ( ; i ; i = i->next)
assert(sc != SCRIPT(i));
for ( ; j ; j = j->next)
assert(sc != SCRIPT(j));
for (k = 0; k < top_of_world; k++)
assert(sc != SCRIPT(&world[k]));

#if 1 will always return as true. Funny why compiler doesn't pick that up. This should be changed to allow for debugging mode, or not. This amount of assertions really slow things down when dealing with a for loop with several thousand objects with triggers.

Just thought I'd point this out. I fixed this issue on my MUD and everything works much better now. Its still not perfect, and a more efficient routine to handle objects is a must.]]>
Development Sat, 14 Oct 2017 20:39:25 +0000
Portal as a skill problems - by: JTP Then again what if your alone, then You open a portal and step through and close the portal

message to follower, A opens a portal, you step through.

and message room, like A opens a portal B enters, A enters and portal dissapears
And again if user is alone, A opens a portal and enters and it dissapears.

We are down to message handling, rest works brilliantly.]]>
Development Sun, 08 Oct 2017 21:15:51 +0000
Racial advantage help - by: zusuk void heartbeat(int pulse) { blah; blah; }

add in there:

Then wherever, like limits.c, just add a function, one_second_tick(), for anything in your MUD you want to happen every second.]]>
Development Sun, 01 Oct 2017 18:41:29 +0000
World command help - by: thomas So it boils down to "how do I count the number of X in zones marked as GRID?"

As I see it, a loop over rooms would do it. Something like this pseudocode:

The count of zones with GRID is a simple loop over the zones, and counting just the ones with the GRID flag.

I hope this can work as a template for your further work on this feature.]]>
Development Sat, 30 Sep 2017 11:29:23 +0000
trigger crash help - by: thomas
About the crash - it looks like a memory corruption. Not unlike what I try to look at in windows atm. Though it may be unrelated.]]>
Development Sat, 16 Sep 2017 00:01:09 +0000
tbaMud in Windows with VS 2017 - by: groundzero2010 Development Thu, 14 Sep 2017 11:37:46 +0000 Spell heroes feast - by: JTP Development Sun, 03 Sep 2017 19:17:13 +0000 Ideas for traps/detecting/removing - by: JTP Development Sat, 05 Aug 2017 23:11:32 +0000 Stock code : syserr multiple login crash - by: JTP Development Wed, 14 Jun 2017 17:42:59 +0000 char_from_room crash - by: thomas
And no, the rest of the code around that point looks fine to me. It's not this part of the code that's at fault, even if it is the part that is failing.
Somewhere, you are sending a char_data to this function when already in nowhere (ie. "in menu/dead") or you are passing in a NULL char_data.
However, knowing that makes it no more possible for us to help you. We need more info. And abort() dumps core (unless on an ARM system), so it will supply the needed core dump for you to supply us with backtraces, info, etc.
exit(1) just lets the autorun script know something didn't go well.]]>
Development Wed, 31 May 2017 19:16:16 +0000
Age question - Down side to using a spell - by: JTP Development Mon, 22 May 2017 13:10:52 +0000 Quest Edit. - by: Wpascoe Development Thu, 11 May 2017 23:59:45 +0000 Guild editor like shop edit. - by: Wpascoe Development Tue, 09 May 2017 22:37:39 +0000 logons, crypt(), randomization and portability pain - by: Krell
Thank you for the complement. In my local copy of the code I've already refactored a few things, including using sizeof() where appropriate in place of strlen() for example. I've also fixed up the error messages to accurately phrase the problem for the exit.

Since the local implementation of crypt() uses the Blowfish algorithm with the setting I used I don't think that the logon password is restricted to 8 characters. I have a logon password for my Imp with a password length of 12 characters and I had been testing it since. Unless I put all 12 characters in, no more and no less, I cannot logon.

Development Sun, 07 May 2017 00:03:35 +0000
Need some help on world_generator. - by: Liko
I am having some trouble adding the addition(ne, nw, se, sw) directions to the world_generator.

I believe I am having trouble with what actually the variable would be:

Now this is another block that I have stumped myself on. I wrote north, east, south, and west quite easily.

But I am confused on what to do for example north east.

Development Fri, 28 Apr 2017 23:37:17 +0000
Crash in Stock code - by: Krell
Development Thu, 27 Apr 2017 01:26:03 +0000
Dual name crash - by: JTP Development Mon, 17 Apr 2017 20:45:49 +0000 linkload wiz command - could use alittle help - by: cunning

Development Tue, 21 Mar 2017 23:14:23 +0000
hedit duplicate crash - by: WhiskyTest
I googled the errors 'Error detected on fd 0 error detected on stdin' and see a few discussions about possible bugs in GDB - sounds like it could be related to the operating system or compiler you are running it on?? That stuffs a bit over my head.]]>
Development Tue, 21 Mar 2017 21:22:02 +0000
Forcerent wiz command - by: JTP
A forcerent wiz command that saves linkdead players would be helpfull.]]>
Development Wed, 08 Mar 2017 12:35:44 +0000
handler.c crash - by: JTP Development Sun, 05 Mar 2017 11:38:52 +0000