COMCHAT

皆さんご存知であろう、KENT-WEBのKENTさんのCOMCHATの改造方法です。
 このテキストに対応してるバージョンはCOMCHAT 4.4です。

COMCHAT-EXとCOMCHATの違いは、
『3.9x以前の物がCOMCHAT-EX』で
『4.0以降がCOMCHAT』
 という違いです(たぶん……)。
 2001年4月以降にリリースされているのがCOMCHATですね。紅堂のElDorado Chat-EX改造は2001年始程度から開始。

以下はCOMCHAT v4.4の改造方法です。一部COMCHATのスクリプトから引用しています。
COMCHATの著作権はKENTさんにあります。  KENT WEB フリーソフト利用規定
んでもって、この改造部分の著作権は紅堂幹人にある事を忘れないでください。
 既に改造済みのCOMCHAT v4.4を『ElDorado Chat』として再配布しています。無改造の方は是非。

CGI改造に成功しましたら、著作権・フッター部分ででもリンクしてくれると嬉しいです。
  改造協力:<a href="http://eldorado1st.cool.ne.jp/GalleBasra/">紅堂幹人</a>
……という感じでしょうか。リンクしなくてもいいから、改造協力:紅堂幹人は必ず。

  このページのCOMCHAT改造の仕方一覧
URLやMailなどにLinkを貼る(発言自動リンク機能)
メールアドレス欄にコメントやURLを入れれるようにする(ポインタ変更機能)
入室前の色選択を…(ボタン式からプルダウン式に変更)+色一覧等応用編
時間表記変更(例:『2/5-17:39:55』を『05/02/05-17:39:55』に)+α
参加者一覧だけに反映する『ステータス』機能
外ROMの人数を表示する機能(ROM人数表示) sub member書き換え
*『sub regist(書込処理)』を弄る改造 @このページの下に書いてあります。
 ・『全消しコマンド』,『特定の発言を消去するコマンド』の追加 (『format』とゆいちゃ『command』同等機能)
 ・おみくじ機能を追加する(ランダムメッセージ)
 ・ダイス機能を追加する(n&mの選択式/nDmを含む発言) 注:n個,m面

 以下は未執筆です。てか、付ける気ないのがほとんどです。虫大量発生しそうで怖いし(マテ)。
・アイコンを付ける。参加者によるアイコン非表示選択可
・パスワードチャット風COMCHAT
・電報,秘話といった『個別会話機能』を付ける改造(相手のREMOTE_HOST/IPを指定する方式)
・グラデーション機能、アルゴリズム解説
 バグ穴になるような改造は公開したくないし、公開してる以上ある程度の責任は持ちたいので。
 紅堂個人が配付(配布ではない)してる『ElDorado Chat-EX』ではパスワードチャットや個別会話機能がありますが…。

ここではコピーがしやすいようにと『<textarea>~</textarea>』で表示しています。
 スクリプトにそのまま貼り付ける時にインデント(字下げ)が崩れないようにという配慮でもあります。
 ……そのせいでここで見辛いのはご愛嬌、ね?(汗)。

『全消しコマンド』,『特定の発言を消去するコマンド』 Ref.2005/02/06 追加
ぶっちゃけ、Falcon Worldに書いてある『発言全消去』と同等機能です。
それに、更にゆいちゃっとの『command』で特定の発言を消去する機能を追加します。

『sub regist(書込処理)』の『## clear と入力することで自分の記事を削除』の部分に追加します。
($in{'comment'} eq 'clear')のif文が終わった所で、elsifを追加します。

これだけで終わりです。コマンド名やコマンド後の発言は各自で置き換えるようにしてください。
おみくじ機能を追加する Ref.2005/02/05 追加
『おみくじ』や『お御籤』といった言葉にMASTERが反応する機能を付けてみましょう。
ゆいちゃっとのスクリプト読めばアルゴリズムは理解できるでしょうけど、面倒でしょうし、と。
紅堂の考えでやってます。オリジナルだけど、ありきたりな処理するだけで。

# スクリプトファイル名
$script = './comchat.cgi';
先頭にの方にある上のスクリプトファイル指定する次の行に以下を追加します。


$oracleを『oracle.dat』に設定したのであれば、新しくoracle.datファイルを作りましょう。
とりあえず中身はテキストエディタで編集し、
といった感じにしておきましょう。そこっ、「普通のメッセージだな」なんて言わないっ(ぁ)。
まぁ、メッセージは自分で追加・改良していってください。

『発言ランキング処理』の前の行に以下を追加します。
そして、『ログをフォーマットして更新』の2行を以下で上書きします。
単にcomment2(おみくじ結果発言)があるか無いかを判別しているだけです。
おみくじ改造のおまけ。このおみくじ機能の文法を理解していれば、応用できます。
if ($in{'comment'} =~ /おみくじ|お御籤|御御籤/) {
以上の部分は『「おみくじ」か「お御籤」か「御御籤」が発言に含まれていれば』おみくじ処理を行う、という物です。
該当部分を変えてやる事で、MASTERに「おはよう」と呼びかけると「おはようございます>$nameさん」という発言が返される物にもできるのです。
上のif ($in{'comment'} =~ /おみくじ|お御籤|御御籤/) {の処理の後の『}』を以下の内容で続けてみましょう。

何をして、どういう内容なのか、というと『時間により反応を変えている』だけです。
if文(条件式)を見て考えて見ましょうか。
・午前5時~午前8時59分の間は「おはよう」
・午前9時~午後5時59分の間は「こんにちは」
・午後6時~午後9時59分の間は「こんばんは」
・それ以外は「こんばんは。深夜ですよ」(つまりは午後10時から午前4時59分の間)
わかりやすくあげると、こういうことです。色々と応用してみてください。

ダイス機能を追加する(n&mの選択式/nDmを含む発言) Ref.2005/02/08 追加
文字通り『ダイス機能の追加』です。RPGとかやる人以外いらん機能だね。悪用されたら負荷かかるし。
故に、配布ElDorado Chatではダイス機能を付けた物とつけてない物に分けてたり。
ここでは『n個m面』としてやってます。表記は好みがあるでしょうし変えてください。

 ここで紹介するダイスロール方法は2つあり、以下のようになっています。
1.ダイス『n』個と『m』面のプルダウン選択式(select+option式)。
2.nDmを含む発言をするとロールされる(入力式)。
 例:「んじゃ、振るよ。ほらよっと。5D6で。」⇒6面ダイスを5個振った事になる。
通常、他のチャットや掲示板だと『1』のやり方が多いと思います。が、自由度がなくなるので(汗)。
それなら『入力式』だけにすれば? とか言われそうですが、調整は各自でやってください。
飽くまでここに書いてある物は『改造方法』であり、デザイン、方法云々まで責任持てません。

設定の所に以下を追加します。まぁ、途中計算は要る人のみ、ってことで。


次に、『sub form2(フォーム2 : 発言フォーム)』の頭。
JavaScriptの所に下記のように、『「かお文字」が発言されたら「なし」に戻す』という物があるので、
if (self.document.send.face) {
  self.document.send.face.options[0].selected = true;
}
この下に以下を追加します。ダイス振る個数を一々リセットしたくないのであれば追加しなくてOK。
 入力式だけでいい、という場合は必要ありません。


同じく『sub form2(フォーム2 : 発言フォーム)』に以下を追加します。配置場所はそれぞれで決めてください。
 入力式だけでいい、という場合は必要ありません。


次に、『sub regist(書込処理)』へ飛び、以下の2つのif(elsif)文を追加します。
 入力式だけでいい、という場合は前者だけで十分ですね。


$in{'comment'} = "$in{'comment'} <font color=\"$dice_color\">[$n\D$m$roll=$sum]</font>";
読めばわかりますが、上記部分が表記変えの部分です。
判りやすく『$m面$n個$roll:$sum』という表記でもいいでしょう。

補足として。最大数『$max』として『$n*$m』と設定しておく事も可能。その場合は$sum/$maxとか表記したり。
表示例:[20D20|17+2+9+2+6+18+15+12+4+1+6+7+2+8+1+20+10+8+19+10=177/400]というわけ。
えーと、後は…『ゲームで使う以外は最大数「20面20個」まで』にしておいた方がいいです。荒らし出たら悲惨悲惨。

以上でダイス機能追加の説明を終わります。
 まぁ、入力式だけで十分って人も多そうな予感がしますが、設定するのはそれぞれの自由ですからね。