|
となりのにゃんこです。
自己レスです。
>setchatfilterコマンドは、チャットから文字列が入力されるたびに呼び出される
>サブルーチンを登録します。
と、スクリプトの文法に書いてあるので、チャット中に向こうから一行送られてくる
たびに、、サブルーチンへ飛ぶのだと思っていました。
実は、チャットウインドウに書き込んでから「ENTER」キーを押すと、サブルーチ
ン
へ飛ぶんですね。誤解でした。
143番の投稿をもう一度書きます。
ChatKaishi: ;チャット中のメインスクリプト
setchatfilter Filter
sleep 1
goto ChatKaishi ;チャット中のメインスクリプトここまで
Filter: ;新しい人が入ってきたらハンドル名を取得します
if (part(#1,0,8)!=" Hi! ")return
if (part(#1,0,24)=="***チャット終了***")
nochatfilter
exit
endif
@handle[@@dc]=part(#1,8,18)
@@dc=@@dc+1
return ;新しい人が入ってきたらハンドル名ここまで
上が143番のスクリプトですが書き直したものをしたに表示します。
ChatKaishi: ;チャット中のメインスクリプト
millitimeout 100
wait " Hi! "
readbuffer 0, @c2
getline @c1
if(@c2 == " Hi! ")call Newhandle
millisleep 1
goto ChatKaishi ;チャット中のメインスクリプトここまで
Newhandle: ;新しい人が入ってきたらハンドル名を取得します
if(@c2 != " Hi! ")return
@handle[@@cc]=@c1
call Spacecut
@@cc=@@cc+1
return ;新しい人が入ってきたらハンドル名ここまで
Spacecut: ;ハンドル名の後ろのよけいな空白を削除します
if(part(@handle[@@cc],1,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,1)
if(part(@handle[@@cc],2,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,2)
if(part(@handle[@@cc],3,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,3)
if(part(@handle[@@cc],4,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,4)
if(part(@handle[@@cc],5,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,5)
if(part(@handle[@@cc],6,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,6)
if(part(@handle[@@cc],7,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,7)
if(part(@handle[@@cc],8,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,8)
if(part(@handle[@@cc],9,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,9)
if(part(@handle[@@cc],10,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,10)
if(part(@handle[@@cc],11,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,11)
if(part(@handle[@@cc],12,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,12)
if(part(@handle[@@cc],13,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,13)
if(part(@handle[@@cc],14,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,14)
if(part(@handle[@@cc],15,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,15)
if(part(@handle[@@cc],16,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,16)
if(part(@handle[@@cc],17,1)==" ")@handle[@@cc]=part(@handle[@@cc],0,17)
@handle[@@cc]=part(@handle[@@cc],0,18)
return ;ハンドル名の後ろのよけいな空白を削除ここまで
このようにすると、後から入ってきた人のハンドル名を取得することができました。
******
Hi! ニャンコ です。
******
という行からニャンコを取得するポイントは、
wait " Hi! "
readbuffer 0, @c2
getline @c1
でした。
readbufferは" Hi! "を取得し
getline は"ニャンコ です。"を取得するという特性を利用しました。
問題は解決したのですが、ご意見や、もっと賢いスクリプトがあれば教えてください。
|
|