As much as I like the ROM codebase, there are naturally goods and bads
associated with it. One of those bad things, to me, is the implementation of
the ch->wait feature. It basically causes a game client's input to lag by X
amount of game pulses. On my MUD, everything is very round-orientated. The
old combat system is long dead, (good riddance), and most complex actions
incur a round time, usually a few seconds, depending. The point is, it's
irritating to just use WAIT_STATE and have a player lagging until the round
time passes, wondering whether the problem is his connection or not. There's
a very simple fix. You can move the ch->wait check to after the command
interpreter, and in the actual interpreter, add a few lines telling the
character something to the effect of "Wait X more seconds." Like so:
In comm.c - void game_loop_unix:
+ if (d->character != NULL && d->character->daze > 0)
+ --d->character->daze;
+
- if ( d->character != NULL && d->character->wait > 0 )
- {
- --d->character->wait;
- continue;
- }
+
+ read_from_buffer( d );
+ if ( d->incomm[0] != '\0' )
+ {
+ d->fcommand = TRUE;
+ stop_idling( d->character );
Cut out the character->wait if statement, and paste it approximately 20
lines down:
+ d->incomm[0] = '\0';
+ }
+
& if ( d->character != NULL && d->character->wait > 0 )
& {
& --d->character->wait;
& continue;
& }
+ } // Make sure it's BEFORE this bracket.
+
+ /*
+ * Autonomous game motion.
+ */
+ update_handler( );
Now the command interpreter gets a pass before waiting.
Okay, in interp.c - void interpret:
Put a 'char buf[MAX_STRING_LENGTH];' in the variables at the top right away
if you're going to use sprintf.
Add the following near the bottom of the function:
+ return;
+ }
+
& if( ch->wait > 0 )
& {
& if( ch->wait > PULSE_PER_SECOND )
& {
& sprintf( buf, "Wait %d more seconds.\n\r", (ch->wait /
PULSE_PER_SECOND)+1 );
& send_to_char( buf, ch );
& }
& else
& {
& send_to_char( "Wait 1 more second.\n\r", ch );
& }
& return;
& }
+
+ /*
+ * Dispatch the command.
+ */
+ (*cmd_table[cmd].do_fun) ( ch, argument );
That should just about do it, I hope. I've never tested my MUD large scale,
(read: more than 3 simultaneous players) and I'm not sure I havn't forgotten
more of the code, so your mileage may vary. I think those were the only
pertinent changes, however. Enjoy!
decaheximal ([EMAIL PROTECTED])
---
[This E-mail scanned for viruses by Declude Virus]