MOO-cows Mailing List Archive
[Prev][Next][Index][Thread]
[igor@linguist.dartmouth.edu: Re: Modifying player properties based entering any command]
------- Start of forwarded message -------
Return-Path: moo-cows-errors@parc.xerox.com
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
X-NS-Transport-ID: 0800207424C500FBB36A
Date: Wed, 19 Mar 1997 23:34:44 PST
From: Jeff Dubrule <igor@linguist.dartmouth.edu>
Subject: Re: Modifying player properties based entering any command
To: MOO-cows wizards list <moo-cows@xerox.com>
Sender: MOO-Cows-Errors@parc.xerox.com
Precedence: bulk
At 11:07 PM -0800 3/19/97, Christopher Unkel wrote:
>On Wed, 19 Mar 1997, Kipp the Kidd wrote:
>
>> At 05:27 PM 3/19/97 PST, Scott Robinson wrote:
>> >Ok, you will have to set your connection to "binary".
>> >(set_connection_option(player,"binary",1);) and have your :do_command
>> >understand the "binary" representations in-Server (encode_binary,
>> >decode_binary) because your server will error up with a "binary"
>> >connection. I'll send in example code in a bit. =)
>>
>> I don't think Henry was looking for this... he said anything a player types,
>> and players can't "type" binary. The <CR> is really just enter, which makes
>> $do_command()'s argstr to "". Also, this eliminates any chances of using
>> default parsing, if do_command wants to use it. I can't imagine why you
>> would want this done on the main login port.
>
>Yes, putting an incoming connection into binary mode has unpleasant side
>effects.
>
>But if you want the server to respond to empty lines -- that is, just a
>CR, it is necessary. The server ignores "blank" lines, so $do_command
>will *not* be called with an argstr of "" when a CR by itself is entered.
>
>Try it -- program $do_command with something like "notify(player,
>"$do_command); return 0;" and try some blank lines, either just a CR or
>some spaces and then a CR. You won't get any output.
I've managed to solve this problem by stripping off the lines, then
force_input()ing them to be the next command processed, and then letting
them pass through. I checked to see whether the entire text was a blank
line and, if so, shoved "CRLF" into the buffer instead.
Here's the code for anyone interested:
.program #333:do_command
if (caller != #-1)
raise(E_PERM);
elseif (!connection_option(player, "binary"))
set_connection_option(player, "binary", 1);
force_input(player, argstr, 1);
return 1;
elseif (length(decode_binary(argstr)) == 1)
return 0;
"parse it normally";
else
while (i = min(index(argstr, "~0A~0D") || index(argstr, "~0D~0A"),
index(argstr, "~0D~0A") || index(argstr, "~0A~0D")))
if (i == 1)
force_input(player, "CRLF");
argstr[0..6] = "";
else
force_input(player, strsub(argstr[1..i - 1], "~7E", "~"));
argstr[0..i + 5] = "";
endif
suspend(0); /* suspend OK here because we won't be passing this on
anyway */
endwhile
endif
return 1;
.
- -manta
------- End of forwarded message -------
Home |
Subject Index |
Thread Index