//----------------------------------------------------- // bbs+echo script v3.1 by Dest & える // Adviser ***** // データ構造 // '@trycount -> リトライ回数 // '@can_unlock_trycount -> リトライ限界数 // '@bbs_data_max -> 投稿されている記事の数 // '@writedata$[] -> 投稿者データ格納用変数 // '@charname$ -> 投稿者名 // '@date$ -> 投稿日 // '@writemsg$ -> 投稿内容 // '@accid -> 投稿者のアカウントID // '@writeaccid -> 削除時に選択した記事に登録されているアカウントID // '@ShowMenuBase -> ページ数 // '@ShowMenuHeader$[] -> 投稿者名、記事ナンバーをメニューに表示する為の変数 // 'bbs_look -> BbsDataアクセスのロック、0:off、1:on //----------------------------------------- // BbsDataのデータ構造 // Charname,AccountID,Date,Writing // //----------------------------------------- - script bbs_system -1,{ //===[ LOCK ]========================================== function BBS_Lock { set '@lc_lockmode,getarg(0); switch('@lc_lockmode) { case 0: set '@trycount,0; while('bbs_look) { set '@trycount,'@trycount+1; mes "[カプラ職員]"; mes "他の方が掲示板を使用中です。"; mes "暫くお待ちになってから"; mes "ご利用になってください。"; next; // 通常ユーザにも解除できるように // リトライが設定された回数を超えると強制解除ボタンが出現 switch(select("リトライ","やめる",(getgmlevel(0)>0) || (getarg(1)!=-1 && '@trycount>=getarg(1))? "強制解除": "")) { case 1: continue; case 2: mes "[カプラ職員]"; mes "また後程ご利用ください。"; close2; cutin "kafra_04",255; end; case 3: set '@lc_lockmode,2; break; } break; } if('@lc_lockmode!=2) break; default: set 'bbs_look,0; if('@lc_lockmode==2) { mes "[カプラ職員]"; mes "ロックを強制的に解除しました。"; next; } return; } set 'bbs_look,1; return; } //===[ Confirm ]======================================= //-------------------------------------- // inputを開きクライアントから // 文字列を受け取り、確認を取る。 //-------------------------------------- // 引数 0: 記録先(変数) // 戻り値 0 Cancel // 1 OK // 注意 ロック中は使用しないように function Input_Confirm { while(1) { input getarg(0); if(getarg(0)==" " || getarg(0)==" ") { mes "[カプラ職員]"; mes "キャンセルしました。"; next; return 0; } mes "[カプラ職員]"; mes "これでよろしいですか?"; mes " "; mes getarg(0); next; if(select("はい","いいえ")==1) return 1; mes "[カプラ職員]"; mes "再度入力してください。"; mes "中止する場合はスペースを"; mes "1文字だけ入力してください。"; next; } } //-------------------------------------- // 数値入力式の間違えにくい確認処理 //-------------------------------------- // 引数 0: 「はい」の番号 // 1: 「いいえ」の番号 // 戻り値 1 はい // 0 いいえ // 注意 ロック中はこちらを使うこと function YesNo_Confirm { while(1) { mes "[カプラ職員]"; mes "本当によろしければ"+ getarg(0) +"を、"; mes "中止する場合は"+ getarg(1) +"を入力してください。"; next; // menuを使うとキャンセルしたときにロックが外れない input '@input; if('@input==getarg(0)) return 1; if('@input==getarg(1)) return 0; // その他ならやり直し mes "[カプラ職員]"; mes "範囲外の数値が入力されました。"; next; } } //-------------------------------------- // 記事を表示 //-------------------------------------- // 引数 0: 記事番号 // 戻り値 データ番号 // -1 Exit // その他 OK データ番号 function ShowBBSMsg { // 終了コードのためこのコードを受け取ったら処理を行うこと if(getarg(0)<0) return -1; if(getarg(0)>getarg(1)-1) { mes "[カプラ職員]"; mes "指定された番号の記事はありません。"; next; return 0; } csvreadarray "BbsData",getarg(0),'@writedata$; mes "["+ (getarg(0)+1) +"] 投稿者 : "+ '@writedata$[0]; mes "投稿日 : "+ '@writedata$[2]; mes '@writedata$[3]; next; return 1; } //--- Script ------------------------------------------ // 通常ユーザでもロックを解除できるようにするリトライ回数 // -1で無効 set '@can_unlock_trycount,8; mes "[カプラ職員]"; mes "こちらは掲示板サービスです。"; mes "ご用は何でしょうか?"; next; while(1) { csvflush "BbsData"; // BBSデータの最大数 set '@bbs_data_max,csvgetrows("BbsData"); switch(select("掲示板を見る","掲示板に書き込む","掲示板から消す",(getgmlevel(0)>0)? "掲示板をクリア": "",(getgmlevel(0)>0)? "ロック強制解除": "","拡声器を使う","取り消し")) { case 1: if('@bbs_data_max==0) { mes "[カプラ職員]"; mes "記事が投稿されていません。"; next; continue; } mes "[カプラ職員]"; mes "ご覧になりたい記事を"; mes "指定してください。"; mes "数字の小さい方が新しい記事です。"; next; set '@ShowMenuBase,0; while(1) { // 記事のヘッダメニューを生成 // 記事番号から記事ヘッダ文字列を取得 // '@ShowMenuBaseを基準する // 結果は'@ShowMenuHeader$[0-9]に格納される for(set '@i,0; '@i<10; set '@i,'@i+1) { set '@charname$['@i+'@ShowMenuBase],csvread("BbsData",'@i+'@ShowMenuBase,0); if('@i+'@ShowMenuBase>=0 && '@i+'@ShowMenuBase<'@bbs_data_max) set '@ShowMenuHeader$['@i],""+ ('@i+'@ShowMenuBase+1) +"."+ '@charname$['@i+'@ShowMenuBase]; else set '@ShowMenuHeader$['@i],""+ ('@i+'@ShowMenuBase+1) +".[未投稿]"; } switch(select(('@ShowMenuBase==0)? "メニューへ": "前へ",('@ShowMenuBase+10<'@bbs_data_max)? "次へ": "",'@ShowMenuHeader$[0],'@ShowMenuHeader$[1],'@ShowMenuHeader$[2],'@ShowMenuHeader$[3],'@ShowMenuHeader$[4], '@ShowMenuHeader$[5],'@ShowMenuHeader$[6],'@ShowMenuHeader$[7],'@ShowMenuHeader$[8],'@ShowMenuHeader$[9],"記事番号指定","取り消し")) { case 1: if('@ShowMenuBase-10>=0) { set '@ShowMenuBase,'@ShowMenuBase-10; continue; } case 14: set '@get_number,-1; break; case 2: set '@ShowMenuBase,'@ShowMenuBase+10; continue; default: set '@ret,ShowBBSMsg('@ShowMenuBase+@menu-3,'@bbs_data_max); continue; case 13: mes "[カプラ職員]"; mes "ご覧になりたい記事の番号を"; mes "入力してください。"; mes "現在投稿されている記事の数は"; mes '@bbs_data_max +"件で"; mes "小さい方が新しい記事です。"; mes "やめる場合は0を入力してください。"; next; while(1) { input '@get_number; if(ShowBBSMsg('@get_number-1,'@bbs_data_max)==-1) break; } if(ShowBBSMsg('@get_number-1,'@bbs_data_max)==-1) continue; } break; } if(ShowBBSMsg('@get_number-1,'@bbs_data_max)==-1) continue; break; case 2: mes "[カプラ職員]"; mes "一度に入力できる文字数は"; mes "全角35文字までです。"; mes "キャンセルする場合は"; mes "スペース1文字のみ入力してください。"; next; // 入力受け取り if(!Input_Confirm('@writemsg$)) continue; // ロック開始 BBS_Lock 0,'@can_unlock_trycount; // 書き込み処理 set '@date$,gettimestr("%Y/%m/%d(%a) %H:%M.%S",100); setarray '@writedata$,strcharinfo(0),getcharid(3),'@date$,'@writemsg$; csvinsert "BbsData",0; csvwritearray "BbsData",0,'@writedata$; set '@bbs_data_max,csvgetrows("BbsData"); // ロック終了 BBS_Lock 1; // 表示 mes "[カプラ職員]"; mes "書き込みしました。"; mes " "; set '@ret,ShowBBSMsg(0,'@bbs_data_max); continue; case 3: // ロック開始 BBS_Lock 0,'@can_unlock_trycount; while(1) { if('@bbs_data_max==0) { mes "[カプラ職員]"; mes "記事が投稿されていません。"; next; break; } mes "[カプラ職員]"; mes "削除なさりたい記事の番号を"; mes "入力してください。"; mes "現在投稿されている記事の数は"; mes '@bbs_data_max +"件で"; mes "小さい方が新しい記事です。"; mes "やめる場合は0を入力してください。"; next; input '@get_number; if('@get_number>'@bbs_data_max) { set '@ret,ShowBBSMsg('@get_number-1,'@bbs_data_max); continue; } if('@get_number>0 && '@get_number<='@bbs_data_max) { mes "[カプラ職員]"; mes "この記事を削除します。"; mes "よろしいですか?"; set '@datanum,ShowBBSMsg('@get_number-1,'@bbs_data_max); if('@datanum==1 && YesNo_Confirm(114,0)!=0) { set '@accid,getcharid(3); set '@writeaccid,csvread("BbsData",'@get_number-1,1); if('@accid!='@writeaccid && getgmlevel(0)<1) { // アカウントID不一致の一般プレイヤーは削除権限なし mes "[カプラ職員]"; mes "投稿者の方以外はこの記事を"; mes "削除する事が出来ません。"; } else { // Yesならそのまま通過 // GMLv1以上であればアカウントID関係無しに問答無用で削除可能 set '@writemsg$,"あぼーん by "+ strcharinfo(0); set '@date$,gettimestr("%Y/%m/%d(%a) %H:%M.%S",100); setarray '@writedata$,'@writemsg$,getcharid(3),'@date$,'@writemsg$; csvwritearray "BbsData",'@get_number-1,'@writedata$; mes "[カプラ職員]"; mes "指定された記事を削除致しました。"; } next; } continue; } break; } // ロック終了 BBS_Lock 1; continue; case 4: // ロック開始 BBS_Lock 0,'@can_unlock_trycount; mes "[カプラ職員]"; mes "全ての記事を削除しようとしています。"; mes "本当によろしいですか?"; next; if(YesNo_Confirm(114,0)!=0) { // Yesならそのまま通過 // 一旦全ての記事を消す for(set '@i,0; '@i<'@bbs_data_max; set '@i,'@i+1) csvdelete "BbsData",0; // 0行目に削除したことを記録 set '@date$,gettimestr("%Y/%m/%d(%a) %H:%M.%S",100); setarray '@writedata$,strcharinfo(0),getcharid(3),'@date$,"全記事を削除しました。"; csvwritearray "BbsData",0,'@writedata$; mes "[カプラ職員]"; mes "全ての記事を削除致しました。"; next; } // ロック終了 BBS_Lock 1; continue; case 5: // ロック強制解除 BBS_Lock 2; continue; case 6: // 拡声器スクリプトから取り込み&改変 // Ans_Lookのタイマーが0でない場合は使用不可 if(getnpctimer(1,"Ans_Look")!=0) { mes "[カプラ職員]"; mes "連続発言規制の為、一定時間"; mes "経つまではご利用できません。"; close2; cutin "kafra_04",255; end; } mes "[カプラ職員]"; mes strcharinfo(0) +"さんの言葉を"; mes "世界中に届けます。"; mes "一度に入力できる文字数は"; mes "全角35文字までです。"; mes "キャンセルする場合は"; mes "スペース1文字のみ入力してください。"; next; // 入力受け取り if(!Input_Confirm('@ansmsg$)) continue; announce strcharinfo(0) +" : "+ '@ansmsg$,0x10; initnpctimer "Ans_Look"; break; case 7: break; } mes "[カプラ職員]"; mes "ありがとうございました。"; mes "またご利用くださいませ。"; close2; cutin "kafra_04",255; end; } } prontera.gat,0,0,0 script Ans_Look -1,{ end; OnTimer60000: stopnpctimer; end; } prontera.gat,156,198,0 duplicate(bbs_system) 掲示板(拡声器付き) 111, prontera.gat,164,305,0 duplicate(bbs_system) 掲示板(拡声器付き) 111, prt_fild05.gat,290,227,0 duplicate(bbs_system) 掲示板係員 47, morocc.gat,165,113,0 duplicate(bbs_system) 掲示板係員 47, geffen.gat,116,58,0 duplicate(bbs_system) 掲示板(拡声器付き) 111, alberta.gat,35,241,0 duplicate(bbs_system) 掲示板(拡声器付き) 111, alberta.gat,102,233,0 duplicate(bbs_system) 掲示板係員 47, izlude.gat,125,116,0 duplicate(bbs_system) 掲示板(拡声器付き) 111, aldebaran.gat,133,104,0 duplicate(bbs_system) 掲示板(拡声器付き) 111, xmas.gat,141,127,3 duplicate(bbs_system) 掲示板係員 47, comodo.gat,193,159,0 duplicate(bbs_system) 掲示板係員 47, yuno.gat,157,92,0 duplicate(bbs_system) 掲示板(拡声器付き) 111, yuno.gat,158,92,0 duplicate(bbs_system) 掲示板(拡声器付き) 111, yuno.gat,150,99,1 duplicate(bbs_system) 掲示板(拡声器付き) 111, yuno.gat,150,100,1 duplicate(bbs_system) 掲示板(拡声器付き) 111, yuno.gat,157,107,2 duplicate(bbs_system) 掲示板(拡声器付き) 111, yuno.gat,158,107,2 duplicate(bbs_system) 掲示板(拡声器付き) 111, yuno.gat,165,99,3 duplicate(bbs_system) 掲示板(拡声器付き) 111, yuno.gat,165,100,3 duplicate(bbs_system) 掲示板(拡声器付き) 111, amatsu.gat,110,167,0 duplicate(bbs_system) 掲示板係員 47, gonryun.gat,157,125,3 duplicate(bbs_system) 掲示板係員 47, umbala.gat,87,167,1 duplicate(bbs_system) 掲示板係員 47, hugel.gat,89,151,3 duplicate(bbs_system) 掲示板係員 47, jawaii.gat,230,113,5 duplicate(bbs_system) 掲示板係員 47, niflheim.gat,21,159,3 duplicate(bbs_system) 掲示板係員 47, ayothaya.gat,206,169,5 duplicate(bbs_system) 掲示板係員 47,