//転送 // script by Lucy 2007/04/08 //SQL版 doll 2010/07/01 // //必須テーブル //CREATE TABLE IF NOT EXISTS `potako_log`(`char_id` int(11) NOT NULL DEFAULT '0',`menu_id` int NOT NULL DEFAULT '0',`count` int NOT NULL DEFAULT '0',`last_warp` datetime NOT NULL) TYPE = MyISAM // prontera.gat,145,198,5 script 転送員 115,{ cutin "kafra_03",2; mes "[転送員]"; mes "こんにちは。"; mes "転送サービスです。"; mes "転送して差し上げましょうか?"; next; if(getgmlevel()>0){ if(select("お願いします。","データreload(終了)") == 2) { //データreload csvreload "script/db_potamap.csv"; csvreload "script/db_area.csv"; goto LEnd1; } }else{ if(select("お願いします。","けっこうです。") == 2) { //終了 goto LEnd1; } } //csvファイルの指定 set 'file_pota$,"script/db_potamap.csv"; set 'file_area$,"script/db_area.csv"; //最大履歴件数を設定 // set '@history_Max,10; // 地域ファイルを読み込む // '@area$[][] // 0: エリアID(主キー) // 1: エリア名 // 読み込み番号 for( set '@i,0; '@i][] // 番号 // '@box$[0][] : マップID(@des&[]参照) // '@box$[1][] : 表示マップ名が入る // '@nitems 該当したマップ数を保持 // //地域を選択した時 set @menu,select(printarray('@area$[1][0])) - 1; if(@menu != 0){ //選択した地域番号 set '@area_num$,'@area$[0][@menu]; set '@nitems,0; //全てのマップから走査 for(set '@i,0; '@i < csvgetrows( 'file_pota$); set '@i,'@i+1){ //地域番号に該当するマップを探してboxに入れる if( csvread('file_pota$,'@i,1) == '@area_num$){ setarray '@box$[0]['@nitems],csvread('file_pota$,'@i,0); setarray '@box$[1]['@nitems],csvread('file_pota$,'@i,2); set '@nitems,'@nitems+1; } } set @menu,0; //履歴から選ぶを選択した時 }else{ set '@history_size,sqlquery("SELECT `menu_id`,`char_id` FROM `potako_log` WHERE `char_id` = " + getcharid(0) + " ORDER BY `last_warp` DESC LIMIT 0," + '@history_Max,'@hys); set '@nitems,0; for(set '@i,0; '@i < '@history_size; set '@i,'@i+1){ //csvファイルから指定したIDを持つ行を検索 set '@Line,csvfind('file_pota$,0,'@hys['@i][0]); if('@Line > 0){ //マップIDを入れる setarray '@box$[0]['@nitems],'@hys['@i][0]; //マップ名を入れる setarray '@box$[1]['@nitems],csvread('file_pota$,'@Line,2); set '@nitems,'@nitems+1; } } if('@nitems == 0){ mes "[転送員]"; mes "履歴がありません。"; close2; cutin "kafra_03",255; end; } set @menu,0; } // // マップの選択 // '@box$[][]から、マップを選択 // 選択した値は自動的に@menuに入る // gmcommand "@misceffect 316"; set @menu,select(printarray('@box$[1][0])) - 1; //選択肢の数指定は不要のため削除 //一応エラーチェック if(0 <= @menu ){ // //指定したマップにワープ // // //履歴に加える操作 // callfunc "Check_Potako_Log",'@box$[0][@menu]; set '@dummy,sqlquery("UPDATE `potako_log` SET `last_warp`= now(),`count` = `count` + 1 WHERE `char_id` =" + getcharid(0) +" and `menu_id` = " + '@box$[0][@menu]); //指定された行を探す set '@Line,csvfind('file_pota$,0,'@box$[0][@menu]); //その行のワープ先データを使う gmcommand "@misceffect 34"; warp csvread('file_pota$,'@Line,3),csvread('file_pota$,'@Line,4),csvread('file_pota$,'@Line,5); } set @menu,0; goto LEnd2; LEnd1: mes "[転送員]"; mes "いつでもご利用してくださいね。"; LEnd2: cutin "kafra_03",255; close; } //callfunc "Check_Potako_Log",menu_id; function script Check_Potako_Log { set '@check,sqlquery("SELECT * FROM `potako_log` WHERE `char_id` = " + getcharid(0) + " and `menu_id` = " + getarg(0),'@count); if('@check == 0){ set '@dummy,sqlquery("INSERT INTO `potako_log` (`char_id`, `menu_id`, `count`, `last_warp`) VALUES (" + getcharid(0) + ", " + getarg(0) + ", 0, now())"); } return; }