[HOME]   

グラデショーンチャットの改造方法

機能追加

ログファイル操作
参加者表示
最終更新日:2016年02月28日

発言ランキングの名前を色別表示

発言ランキング(chatmgrg.cgi必要)のお名前をその方がセレクトされた色で表示させる方法です。
発言ランキングもカラフルになります。

comchatg.cgiの改造部分
■614行目あたり
($r_name,$r_kaisu,$r_time) = split(/<>/,$rline);
■改造後
($r_name,$r_kaisu,$r_time,$dmy) = split(/<>/,$rline);

■618行目あたり
$rline = "$r_name<>$r_kaisu<>$times<>\n";
■修正後
$rline = "$r_name<>$r_kaisu<>$times<>$color<>\n";

■623行目あたり
if ($rflag == 0) { unshift(@r_new,"$name<>1<>$times<>\n"); }
■改造後
if ($rflag == 0) { unshift(@r_new,"$name<>1<>$times<>$color<>\n"); }

chatmgrg.cgiの改造部分
■250行目あたり
# ランクファイル分割
foreach $line (@lines) {
($name,$count,$times) = split(/<>/,$line);
$count{$name} = $count;
}
■改造後
# ランクファイル分割
foreach $line (@lines) {
($name,$count,$times,$color) = split(/<>/,$line); $color ="#FFFFFF" if($color eq "\n");
$count{$name} = $count; $color{$name} = $color;
}
 

■262行目あたり
print "<tr><td>No\.<b>$rank1</b></td><td>$_</td><th>$count{$_}</th></tr>\n";
■修正後
print "<tr><td>No\.<b>$rank1</b></td><td><font color=$color{$_}>$_</font></td><th>$count{$_}</th></tr>\n";

今までの発言ランキングには、色データが入っていないので、上の例では、 #FFFFFFとしています。
適宜背景色に合わせて設定しておいてください。
名前の色は、当然一番最後に発言した時の色データです。

ICQ呼び出しをつける

管理人さんがオンラインかオフラインなのかの表示や、ICQ呼び出しを追加する改造です。
まずは、以下のサブルーチンをcomchatg.cgiの一番最後に追加しておきます。
sub icq {
$icq_uid = '1234567';#管理人さんのICQナンバー
$img_num = '1';#online表示させる画像の種類 1〜9
print <<"ICQ";
<FORM action="http://msg.mirabilis.com/scripts/WWPMsg.dll" method="POST" TARGET="down">
<img src="http://online.mirabilis.com/scripts/online.dll?icq=$icq_uid&img=$img_num" ALT="ICQ Online?">
<INPUT TYPE="hidden" NAME="from" VALUE="CHAT ROOM">
<INPUT TYPE="hidden" NAME="fromemail" VALUE="$email">
<INPUT TYPE="hidden" NAME="subject" VALUE="CHAT-CALL">
<INPUT TYPE="hidden" NAME="body" VALUE="待ってます。 $name $date">
<INPUT TYPE="hidden" NAME="to" VALUE="$icq_uid">
<INPUT TYPE="submit" NAME="Send" VALUE="ICQ Call">
</FORM>

ICQ
}
上記のICQナンバーとonline offlineの画像種類の設定をしておきます。
online offline画像を表示しない場合は、<img src=\"http://online.mirabilis.com/scripts/online.dll?icq=$icq_uid&img=$img_num\" ALT=\"ICQ Online?\">
この部分を削除しておいてください。
コメントなどは、適当に変更可能です。

☆入室前画面に表示する場合
入室前の上フレームは、sub form1 の中に追加します。
■140行目あたり
$body
<a href="$homepage" target="_top">$backtag</a>
<center>$titletag</center><hr>
<form method="$method" action="$script" target="form">

■修正後
$body
<a href="$homepage" target="_top">$backtag</a>
<center>$titletag</center>
EOM
&icq;
print <<"EOM";
<hr><form method="$method" action="$script" target="form">
このように追加します。

☆入室後画面に表示する場合
入室後の上フレームは、 sub form2 の中に追加します。
 
■223行目あたり
</SCRIPT></HEAD>
$body
<center>$titletag</center>

■修正後
</SCRIPT></HEAD>
$body
<center>$titletag</center>
HTML
&icq;
print <<"HTML";
Special Thanks:mukuさん、ひいろさん、LISAさん

アイコンセレクト

かお文字のセレクトの代わりに用意しておいたアイコンを表示させる改造方法です。
■236行目あたり
<tr><td>かお文字 <select name=face>
HTML
  print "<option value=\"\">なし\n";
    foreach (0 .. $#faces) {
            print "<option value=\"$faces[$_]\">$faces[$_]\n";
    }

■変更後
<tr><td>アイコン <select name=face>
HTML
  print "<option value=\"\">なし\n";
    foreach (0 .. $#icon_f) {
           print "<option value=\"$icon_f[$_]\">$icon_n[$_]\n";
  }


■446行目あたり 
            if ($face ne "") { $comment = "$comment $face"; }
■変更後
#      if ($face ne "") { $comment = "$comment $face"; }

先頭に#をつけるか削除します。

■369行目あたり
              $n_email = $email;

              if ($comment eq $keyword){$clear = 1;}
■変更後
          $n_email = $email;
          if ($face) { $n_name ="<img src=$icon_dir/$face>$n_name";}
            if ($comment eq $keyword){$clear = 1;}

■211行目あたり
    if (self.document.send.face) {
      self.document.send.face.options[0].selected = true;
    }
■変更後
上記の3行を削除します。

■72行目あたり
#かお文字の登録
@faces = ('(^_^)','(^_^;)','(*^^*)','(;_;)','(ーー;','o(^^o)(o^^)o','ヘ(^^ヘ)(ノ^^)ノ',
'm(__)m','(・_・)','(>o<)','(^^)/~~','(@_@)','(?_?)','\(~o~)/','( ^^)/☆(>_<)☆\(^^ )');
■追加後
#アイコンの登録
$icon_dir = '.'; #アイコンを設置してあるファルダ(相対パスもしくは、http://から指定)最後にスラッシュは不要
@icon_f = ('a-cat1.gif','a-cat2.gif','cat1.gif','dog1.gif','horse1.gif','kero3.gif','kero5.gif','panda1.gif',
'pen2.gif','pen3.gif','angel2.gif','angel1.gif','devil.gif','car1.gif','f1-1.gif','heri2.gif');
@icon_n = ('みけ','トラ','ねこ','イヌ','馬','ケロ君','ケロちゃん','パンダ',
'ペンギン君','ペン子','天使(男の子)','天使(女の子)','デビル','車','F1','ヘリコプター');

を挿入します。
上記は、グラデーションボードとかレインボーNoteからのコピーです。


テスト設置は、ここです。http://www7.big.or.jp/~falcon/test/comchatgicon.cgi

download[ダウンロード:グラデーションチャット アイコンセレクト版 ]comchatgicon.lzh (ver.2.42i)

発言復活ボタンの追加

サーバーが重い場合などで、参加者が同時に発言した場合に、発言がキャンセルされてしまう場合があります。
この場合、自動消去された直前の発言内容を再度表示させて送信可能にする方法です。
■205行目あたり JavaScriptの部分
<SCRIPT LANGUAGE="JavaScript">
<!--
function autoclear() {
 if (self.document.send) {
  if (self.document.cmode && self.document.cmode.autoclear) {
   if (self.document.cmode.autoclear.checked) {
    if (self.document.send.face) {
      self.document.send.face.options[0].selected = true;
    }
    if (self.document.send.comment) {
      self.document.send.comment.value = "";
      self.document.send.comment.focus();
    }
   }
  }
 }
}
// -->
</SCRIPT></HEAD>

■変更後
<SCRIPT LANGUAGE="JavaScript">
<!--
var rec="";
function autoclear() {
  if (self.document.send) {
    if (self.document.cmode && self.document.cmode.autoclear) {
      if (self.document.cmode.autoclear.checked) {
        if (self.document.send.face) {
          self.document.send.face.options[0].selected = true;
        }
        if (self.document.send.comment) {
          self.rec = self.document.send.comment.value;
          self.document.send.comment.value = "";
          self.document.send.comment.focus();
        }
      }
    }
  }
}
function recover(){
 self.document.send.comment.value = self.rec;
 self.document.send.comment.focus();
}
// -->
</SCRIPT></HEAD>
上記の部分をコピーして上書き貼り付けをおこないます。
発言復活ボタンの追加 ■234行目あたり(上記のJavaScriptを変更した場合は、240行目あたり <b>発言</b>:<input type=text size="$width" name=comment><br> ■変更後 <b>発言</b>:<input type=text size="$width" name=comment> <INPUT TYPE="button" value="発言復活" onClick="recover()"><br>
適当な個所に発言復活ボタンを追加します。

入退室メッセージをランダムにする方法

COMCHAT-EXにも組み込み可能ですが、(行数がしたの数字とは異なりますので、注意)
srand;
という行を初期設定のあたりにでも追加しておく必要があります。
Colorful Chat(グラデーションチャット)の場合は、すでに srand; は入っていますので以下の改造だけでOKです。
■353行目あたり
    if ($_[0] eq 'into') {
        if ($host_view) { $comment = "<b>$name</b>$in_msg &lt\;$host&gt\;"; }
        else { $comment = "<b>$name</b>$in_msg"; }
■変更後
    if ($_[0] eq 'into') {
        ($master,$in_msg) = &inmsg;
        if ($host_view) { $comment = "$in_msg &lt\;$host&gt\;"; }
        else { $comment = "$in_msg"; }

■360行目あたり
    } elsif ($_[0] eq 'bye') {
        $comment = "<b>$name</b>$out_msg";
■変更後
    } elsif ($_[0] eq 'bye') {
        ($master,$out_msg) = &outmsg;
        $comment = "$out_msg";

このように変更しておきます。
■追加サブルーチン(comchatg.cgiの一番最後に追加します。)
sub inmsg {
    $mas[0] = "ミッチェル"; $in[0] = "<b>$name</b>さん、いらっしゃいませ〜";
    $mas[1] = "えみりん";   $in[1] = "わっ、$nameさんじゃないの。待ってたわよ。";
    $mas[2] = "マリリン";   $in[2] = "<small>$nameさんがこっそり現れたみたいよ。</small>";
    $mas[3] = "ともちゃん";   $in[3] = "$nameちゃん、元気だった?";
    $numb = int(rand($#in + 1));
    return ($mas[$numb],$in[$numb]);
}

sub outmsg{
    $mas[0] = "ラム";     $out[0] = "<b>$name</b>さん、さようなら〜";
    $mas[1] = "アイ";     $out[1] = "$nameさん、また来てくださいね。";
    $mas[2] = "ナオミ";   $out[2] = "$nameさん、帰っちゃうの?";
    $mas[3] = "ひかる";   $out[3] = "あれ、$nameさん、帰っちゃったの?寂しい・・";
    $mas[4] = "ケイコ";   $out[4] = "逃げちゃいや〜、$nameさん";
    $numb = int(rand($#out + 1));
    return ($mas[$numb],$out[$numb]);
}
以上です。
・マスターの名前をランダムにしない場合は、同じ名前に設定しておいてください。
・例えば $mas[*]と$in[*]はペアになっています。
・サブルーチンの中で乱数を発生させてその番号のマスターの名前とそのペアのメッセージを返します。

特定な方用の入退室メッセージにする方法

特定な方(管理人さん、常連さんなど)に対しては、固定メッセージとし、それ以外の方には
ランダムな入退室メッセージを表示します。
上記の改造をおこなった後、sub inmsg と sub outmsgを以下のように書き換えます。
sub inmsg {
        $mas[0] = "ミッチェル"; $in[0] = "<b>$name</b>さん、いらっしゃいませ〜";
        $mas[1] = "えみりん";   $in[1] = "わっ、$nameさんじゃないの。待ってたわよ。";
        $mas[2] = "マリリン";   $in[2] = "<small>$nameさんがこっそり現れたみたいよ。</small>";
        $mas[3] = "ともちゃん";   $in[3] = "$nameちゃん、元気だった?";
     
        if ($name eq 'ファルコン') {$mas="MASTER"; $in="$name様、ようこそいらっしゃいました";}
        elsif ($name eq 'Falcon') {$mas="MASTER2"; $in="$nameさん、いらっしゃい";}
        elsif ($name eq 'ふぁるこん') {$mas="MASTER3"; $in="わぁ、$nameさんじゃないか";} 
        else { $numb = int(rand($#in + 1)); $mas= $mas[$numb]; $in = $in[$numb];}
        return ($mas,$in);
}

sub outmsg{
        $mas[0] = "ラム";     $out[0] = "<b>$name</b>さん、さようなら〜";
        $mas[1] = "アイ";     $out[1] = "$nameさん、また来てくださいね。";
        $mas[2] = "ナオミ";   $out[2] = "$nameさん、帰っちゃうの?";
        $mas[3] = "ひかる";   $out[3] = "あれ、$nameさん、帰っちゃったの?寂しい・・";
        $mas[4] = "ケイコ";   $out[4] = "逃げちゃいや〜、$nameさん";
        
        if ($name eq 'ファルコン') {$mas="MASTER"; $out="$name様、またのお越しをお待ちしております。";}
        elsif ($name eq 'Falcon') {$mas="MASTER2"; $out="$nameさん、また来てね";}
        elsif ($name eq 'ふぁるこん') {$mas="MASTER3"; $out="$nameさん、寂しいな";}
        else { $numb = int(rand($#out + 1)); $mas= $mas[$numb]; $out = $out[$numb];}

        return ($mas,$out);
}

上記のファルコン、Falcon、ふぁるこんのところに特定な方のハンドルを記入しておきます。
「"」ダブルクォートと「'」シングルクォートを使い分けていますので、注意して行ってください。

[HOME]
管理人:ファルコン・タカ