| 00142 98/12/18 11:32 | (発言者削除) |
| 投稿者 : となりのニャンコ |
| 00143 98/12/18 12:37 | チャットルームでハンドル名取得 |
| 投稿者 : となりのニャンコ | コメントを投稿する |
となりのにゃんこです。 お久しぶりです。 一つ前の発言を削除して申し訳ありませんでした。 質問しようと思った問題が解決しましたので削除しました。 そして問題がもう一つあります。 チャットルームで、変数@handle[1]に参加している人の ハンドルネームを取得して、文章の末尾に貼り付けよう というスクリプトができるはずだったのですが つまり「うちの三毛」というハンドル名を取得したら 実行前 となりのニャンコ>こんにちは 実行後 となりのニャンコ>こんにちは>うちの三毛 ということができるようにしたいわけです。 先にきている人のハンドル名は最初に表示される一覧から取得できる のですが、後からきた人のハンドル名が取得できないようなのです。 ****** Hi! となりのニャンコ です。 ****** こんな感じで割り込んできます。 この「となりのニャンコ」の部分を取得したいのですが、 なかなかうまくいきません。 それと、このスクリプトを実行すると、チャット窓に書き込んだ文字を 送信するためには、どうしてもF7キーを押さなければ送信できません。 相手のハンドル名を付け加えないときは、文字を書き込んだ後「ENTER」 だけで送信するようにするにはどうしたらよいのでしょうか。 BBSは、フェリシモオンライン ホストプログラムは、INTER-LINKです。 教えてください。 よろしくお願いします。 Chatname: keyassign f7, "チャットで名前", script ,Namesoshin chat off chat on ime on send "GO CHAT1" + "^M" ;チャットルームへ行きます timeout 3 wait"***チャット開始***" ;先にきている人のハンドル名取得 @@dc=1 beginloop readbuffer @@dc+2, @handle[@@dc] if(part(@handle[@@dc],0,10 )=="利用者ID")breakloop if(part(@handle[@@dc],32,1)=="" or part(@handle[@@dc],32,1)==" ")breakloop @handle[@@dc]=part(@handle[@@dc],32,18) @@dc=@@dc+1 endloop @handle[@@dc]="" timeout 0 ;先にきている人のハンドル名取得はここまで 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 ;新しい人が入ってきたらハンドル名ここまで Namesoshin: ;F7キーでチャット窓データ+ハンドル名を送信します getchat #chat menu "名前なし",@handle[1],@handle[2],@handle[3],@handle[4],@handle[5],\ @handle[6],@handle[7],@handle[8],@handle[9],@handle[10] switch result case 0 send #chat + "^M" case 1 send #chat + ">" + part(@handle[1],0,18) + "^M" case 2 send #chat + ">" + part(@handle[2],0,18) + "^M" case 3 send #chat + ">" + part(@handle[3],0,18) + "^M" case 4 send #chat + ">" + part(@handle[4],0,18) + "^M" case 5 send #chat + ">" + part(@handle[5],0,18) + "^M" case 6 send #chat + ">" + part(@handle[6],0,18) + "^M" case 7 send #chat + ">" + part(@handle[7],0,18) + "^M" case 8 send #chat + ">" + part(@handle[8],0,18) + "^M" case 9 send #chat + ">" + part(@handle[9],0,18) + "^M" case 10 send #chat + ">" + part(@handle[10],0,18) + "^M" case -1 send #chat + "^M" endswitch chat off chat on goto ChatKaishi ;F7キーでチャット窓データ+ハンドル名を送信ここまで |
| 00144 98/12/18 23:22 | RE:00143 チャットルームでハンドル名取得 |
| 投稿者 : となりのニャンコ | コメントを投稿する |
となりのにゃんこです。 自己レスです。 >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 は"ニャンコ です。"を取得するという特性を利用しました。 問題は解決したのですが、ご意見や、もっと賢いスクリプトがあれば教えてください。 |
| 新規に投稿する |