3 * Ajax Chat for TRPG ver.1.0.1
4 * (c)2007 Cake All righ1ts reserved.
5 * Mail : cake_67@users.sourceforge.jp
6 * Home : http://trpgtools-onweb.sourceforge.jp/
9 * 本チャットスクリプトの使用および配布は、BSDライセンスに基づきます。
10 * BSDライセンスの詳細につきましては、添付のライセンス.txtを参照してください。
13 * 1. このスクリプトはフリーソフトです。以下の条件を満たす限りにおいて、使用・改造・再配布(オリジナルおよび改造版の両方とも)は自由です。
14 * 再配布する場合、上記著作権表示、本条件書きおよび第2項・第3項の責任限定規定を必ず含めてください。
15 * 2. 同梱のアイコンはPetite Prier様(http://snow.if.tv/)の素材です。
16 本スクリプトの使用および再配布時にアイコンをそのまま用いる場合は、配布元の規定も遵守してください。
17 * 3. 本スクリプトは無保証です。自己責任で使用してください。このスクリプトを使用したいかなる損害に対しても、作者は一切の責任を負いません。
18 * 4. 設置および使用方法に関する質問は、配布サイトの掲示板にお願いします。ただし、必ず回答できるとは限りません。
23 require_once 'trpgchat-ini.php';
25 require_once 'member_check.php';
28 $host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
31 foreach ($block_ip as $v) {
32 if (strstr($host, $v)) { die("書きこみできません。"); }
36 $lfp = fopen($lockfile,"w");
37 stream_set_write_buffer($lfp, 0);
42 $log[] = file($recent_log);
45 foreach($_GET as $k => $v) {
46 $data[$k] = htmlspecialchars($v);
50 if (!$data['c']) $data['c'] = $data['n'];
52 $ua = getenv("HTTP_USER_AGENT");
54 // コメント本文の処理:(予定)ダイス、カード、タグ有効[b,span,i,u]、オートリンク、禁止語句処理など
57 if(preg_match("/(.*)[[]\({0,}([0-9]{1,3})([dD])([0-9]{1,3})([-\+\*\/0-9\s]{0,}[\]])(.*$)/i", $data['m'], $dice)) {
58 $dice_result = dice_convert($dice[2], $dice[4], $dice[5], $dice_max, $dice_color);
59 $data['m'] = $dice[1].$dice_result.$dice[6];
68 foreach ($log[0] as $k => $v){
69 $temp[$k] = explode("<>", $v);
78 $last_id = $temp[0][0]+1;
86 if ($data['y'] =='in') {
88 $data['m'] = $data['n'].$online_msg;
89 $data['l'] = $color_system;
92 } elseif ($data['y'] == 'out') {
94 $data['m'] = $data['n'].$offline_msg;
95 $data['l'] = $color_system;
101 if ($data['n'] && $data['p']) {
102 $pwd = create_hash($data['n'],$data['p']);
105 $write = $last_id."<>".$data['n']."<>".$pcname."<>".$data['l']."<>".$data['m']."<>".time()."<>".$host."<>".$ua."<>".$pwd."<>".$data['w']."<>".$data['h']."<>".$data['s']."<>".$data['t']."<>".$data['a']."\n";
107 array_unshift($log[0], $write);
110 if (count($log[0]) >= $max_num) {
115 $fp = @fopen($recent_log, "w+") or die("ログファイルを開けません。");
116 //$bom = "\xef\xbb\xbf";
119 foreach($log[0] as $k => $v) {
126 write_recent_past($write, $past_log);
133 member_checker($data['n'], $pwd, $data['y'], $now_member, $getdata_off);
141 function write_recent_past($write, $pdata) {
142 $pfp = @fopen($pdata, "a+") or die("過去ログファイルを開けません。");
144 fwrite($pfp, $write);
149 function dice_convert($dicenum, $dicenumber, $revision, $dice_max, $color) {
152 if($dicenum >= 1 && $dicenum <= $dice_max) {
153 if ($dicenumber >= 1 && $dicenumber <= 100) {
154 mt_srand((double) microtime() * 1000000);
156 for ($i=0; $i<$dicenum; $i++) {
157 $d_result[$i] = mt_rand(1,$dicenumber);
158 $dice_sum += $d_result[$i];
160 $dice_list .= ", ".$d_result[$i];
162 $dice_list = " (".$d_result[$i];
167 return $dice.' (d2~d100の範囲で指定してください)';
170 return $dice.' (ダイスの数は1から'.$dice_max.'の間で指定してください)';
174 if(rtrim($revision, "]")) {
175 $dice = preg_replace("/\s/","+",$dice);
176 $value = calc_value($dice_sum, $revision);
181 if (!is_numeric($value)) {
182 return '<span style="color:#'.$color.';">'.$dice.' ('.$value.')</span>';
184 $dice = '<span style="color:#'.$color.'; font-weight: bold;">['.$dicenum.'d'.$dicenumber.$revision.' :'.$dice_list.' = '.$value.'</span>';
191 function calc_value($dice_sum, $revision) {
192 $multi = preg_match("/\*/", $revision);
193 $dev = preg_match("/\//", $revision);
194 $add = preg_match("/\+/", $revision);
195 $subtract = preg_match("/\-/", $revision);
198 $revision = preg_replace("/\+/","<>+<>",$revision);
199 $revision = preg_replace("/\-/","<>-<>",$revision);
200 $revision = preg_replace("/\*/","<>*<>",$revision);
201 $revision = preg_replace("/\//","<>/<>",$revision);
202 $parts = explode("<>",$revision);
203 array_splice($parts, 0, 1, $dice_sum);
206 if ($multi || $dev) {
207 foreach ($parts as $k => $v) {
208 if ($v != '0' && $v == '*') {
209 if (!preg_match("/[0-9]{1,}/", $parts[$k+1])) return "演算子が連続してます";
211 array_splice($parts, $k+1, 1, $parts[$k-1] * $parts[$k+1]);
212 array_splice($parts, $k-1, 1, 0);
213 array_splice($parts, $k, 1, $parts[$k-2]);
214 array_splice($parts, $k-2, 1, '+');
216 if ($v != '0' && $v == '/') {
217 if (!preg_match("/[0-9]{1,}/", $parts[$k+1])) return "演算子が連続してます";
218 array_splice($parts, $k+1, 1, $parts[$k-1] / $parts[$k+1]);
219 array_splice($parts, $k-1, 1, 0);
220 array_splice($parts, $k, 1, $parts[$k-2]);
221 array_splice($parts, $k-2, 1, '+');
227 foreach ($parts as $k => $v){
230 if (!preg_match("/[0-9]{1,}/", $parts[$k+1])) return "演算子が連続してます";
231 array_splice($parts, 0, 1, $parts[0] + $parts[$k+1]);
232 } elseif ($v == '-') {
233 if (!preg_match("/[0-9]{1,}/", $parts[$k+1])) return "演算子が連続してます";
234 array_splice($parts, 0, 1, $parts[0] - $parts[$k+1]);
239 return round($parts[0], 1);