Well, we have a spell checker, but not an intelligence checker...

>     The problem here is that the player is a command that, as the command
is
how about "the player enters a command and, as the command" :-)

Tony

----- Original Message -----
From: "Tony Kuiper" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Tuesday, January 21, 2003 12:44 PM
Subject: Re: question on ch->wait


>     First of all, isn't this kinda like saying "I shot my foot off so I
want
> to make a gun that won't hurt me if I shoot it?"  Anyways, I'm not here to
> judge morality or intelligence, but to help.
>     The problem here is that the player is a command that, as the command
is
> executed, it adds to ch->wait.  Before ch->wait expires, they send several
> more commands.  So their ch->desc->inbuf is filling up with commands.  The
> game_loop_* function is responsible for pulling the commands out of the
> player's inbuf, but only when ch->wait has expired.  So if they spam the
> same command, then each command will add to ch->wait, the game will wait
> until ch->wait expires, process the next command which adds to ch->wait,
> etc...
>     There are several solutions -
>     1.  Tell your players "Tough luck.  You shoot yourself in the foot,
you
> deal with it."  This will probably decrease your player count.  :-)
>     2.  Remove ch->wait.  Who want to wait, anyways?  (Just kidding - this
> would seriously imbalance the game!)
>     3.  Add a hack to game_loop_* to check through ch->descriptor->inbuf
for
> the "clear" command, and if it's found, clear the inbuf.  This is a
genuine
> hack, and as such can greatly add to the complexity of the code.
>     4.  Implement a command queue system.  Every time the player sends a
> command, add it to the queue.  Then, each time through game_loop_*, look
> through the command queue, and if there are any commands that don't rely
on
> ch->wait, execute them.  Also, get the next command and check to see if it
> requires ch->wait.  (Or possibly ch->wait[WAIT_FIGHTING] and
> ch->wait[WAIT_GLOBAL_COMMINUCATION], etc...)  If ch->wait has expired,
> perform it, otherwise, don't perform any player commands.
>     A word of warning - this kind of clear command can greatly unbalance
the
> game - for example, what happens then the player sets a client based alias
> to "kick scout" and "clear" and "kick scout" and "clear", etc.?  (Hint,
> do_kick will deal damage, do_clear clears ch->wait and the inbuf, do_kick
> will deal damage, etc.. all in the space of time it takes the game engine
to
> loop, effectively giving the player the power to deal major damage above
and
> beyond their normal capability.)
>     The functions that control this are all stored in comm.c: game_loop_*
> and read_from_buffer().  d->inbuf[] contains all text the player types.
> d->incomm[] contains the current command moved out of d->inbuf[].
>
>     Questions?  Comments?
>
> Tony
>
> ----- Original Message -----
> From: <[EMAIL PROTECTED]>
> To: <[email protected]>
> Sent: Tuesday, January 21, 2003 11:33 AM
> Subject: question on ch->wait
>
>
> > A few of players would like to a command to clear everything they typed
> > previously, an example:
> > kick scout
> > kick scout
> > kick scout
> > kick scout
> > kick scout
> >
> > Whoops 3 more scouts walked in, I wanna run now! But that is impossible
> > because I will be kicking the first scout for the next minute or so. So
I
> > wanted to create a command called 'clear' or something that would delete
> > everything that they previously typed in. I was looking at the code and
I
> > have no idea where the commands are stored, or how it determines if the
> > character is in a wait state or not. Can anyone point me in the right
> > direction? I would search the archives but they aren't working right
now.
> > THANKS
> >
> > --
> > ROM mailing list
> > [email protected]
> > http://www.rom.org/cgi-bin/mailman/listinfo/rom
> >
>
> --
> ROM mailing list
> [email protected]
> http://www.rom.org/cgi-bin/mailman/listinfo/rom
>

Reply via email to