HSP-TECH 第12弾

Network Game チャット処理

2001.8.10 Written & Programed by Smith


 ひさびさの更新となり、お待ちかねのみなさまには大変もうしわけなく思っております。実は今回ご説明するチャット機能は、3ヶ月ほど前にはすでに完成していたものでして、タイミングをみて講座を更新しようと考えてましたらタイミング悪く仕事系が多忙になってしまいました。さて、前回でマルチプレイヤーの処理が完成しましたから、残すところは今回のチャット機能ということになります。とは言え、チャットを実現するほんの基本機能しか実装しておりません。あとは、みなさまの手によってすばらしいものに仕上げてください。

 それでは、まずはじめにチャットの入力インターフェースですが、これはMIA氏がHSP講座で公開されていたものをありがたく参考にさせていただき、私がさらに手を加えたものです。このインターフェースの部分は、c_chat.as(クライアントプログラム部)として作ってあります。ひとつひとつを解説はしませんが、obj系命令を駆使ししたすばらしいものです。実際に実行してなにか会話を入力していただければ実にそれっぽく出来ていることが実感できるかと思います。

ネットワークならではの「たのしいチャット」


 クライアント側のチャットメッセージ送信部分を見てみましょう。


< Client >
*DP_Send_Chat
if tmes=="":return
tmes=""+MP_NAME+":"+tmes
AMdplaySendMessage tmes,Send_Chat_Data,serverID : m_ec
await
return

 実はたったのこれだけです。チャットメッセージのバッファに対し、頭に自分のハンドルネーム(プレイヤーキャラクタ名)を加えてAMdplaySendMessage命令でサーバ側に送信してます。その際、フラグ設定をチャット用(文字列タイプ)で行っているところを注意すればとくにむずかしいことはありませんね。では、クライアントから送信されたチャットメッセージをサーバが受信するとどのような処理を施せば良いのでしょうか。


< Server >
*DP_Chat_Data
;///// Chatメッセージ処理 /////
AMdplaySendMessage bufmes,Send_Chat_Data,DPID_ALLPLAYERS : m_ec
await
if LOG_CHAT{
msg = ""+bufmes:gosub *logput
}
return

 サーバ側も実はたったのこれだけです。AMdplaySendMessage命令にDPID_ALLPLAYERSの指定をして受信したメッセージを全員に送信してます。つまり、あるクライアントから届いたチャットメッセージを現在ゲームにログインしているメンバー全員に転送しているというイメージです。これほど簡単にチャットを処理できるあたりはまさしくAMdplayのすばらしさでしょう。さて、この転送されたチャットメッセージをクライアントが受信すると・・・


< Client >
*DP_Receive_Chat
noteadd bufmes,-1,0
notemax Chat_Msg_Index
Start_Index=Chat_Msg_Index-Draw_Chat_Line:if Start_Index<0:Start_Index=0
Draw_Msg_Lines=Chat_Msg_Index-Start_Index
redraw 2
color 128,128,255:boxf CHAT_DRAW_X-4,CHAT_DRAW_Y-4,W_X-12,fontsize*Draw_Chat_Line+CHAT_DRAW_Y+4
color 0,0,0:boxf CHAT_DRAW_X,CHAT_DRAW_Y,W_X-16,fontsize*Draw_Chat_Line+CHAT_DRAW_Y
color 255,255,255
repeat Draw_Msg_Lines
i=cnt+Start_Index
noteget tmpmsg,i
pos CHAT_DRAW_X,fontsize*cnt+CHAT_DRAW_Y:mes tmpmsg
loop
redraw 1,CHAT_DRAW_X-4,CHAT_DRAW_Y-4,W_X-12,fontsize*Draw_Chat_Line+CHAT_DRAW_Y+4
return

 一見ごちゃごちゃといろいろな処理をしていそうですが、ほとんどが演出のためにしているようなものです。ここではnote系命令をうまく利用し何行かのチャットメッセージが表示されつつログが流れていくという処理をしております。この部分を改良すればもう少しログとして表示される行を増やしたり、プレイヤーキャラクタによってメッセージを色分けしたりといろいろ出来ます。


 さあ、以上で今回のHSP-TECHは終了です。また、長期にわたって解説してきたネットワークゲーム製作講座「基礎編」も終わりです。「基礎編」が終わり?ということは・・・。しばらく時間を空けることになりますが、私がネットワークゲーム製作において培った数々の技術を今後もオープンにしていきたいと思っております。それと、近いうちにここまでのサンプルスクリプトをベースに拡張したもので大々的にチャット大会(?)でも開きたいと思います。お楽しみに。

▽今回のスクリプトのセットをDLする(75kb)▽

INDEXへ戻る