//収集クエスト http://ro-server.net84.net/ payo1.gat,114,103,5 script マエダ 849,{ //初期設定 set '@Debug_Rows,3; //CSVファイルで作成途中の物を表示したくない時の中止する行数 set '@Quest_DB$,"script/original/db/m_quest.csv"; set '@Save_DB$,"script/original/db/m_save"; //ここまで set '@Search,csvfind('@Save_DB$, 0, getcharid(0)); if ('@Search == -1){ mes "[死にかけの人]"; mes "…あ…ちょっと頼みがあるんですけど…"; mes "お使いを頼まれたんですが、こんな感じ"; mes "なので代わりに行ってもらえないでしょ"; mes "うか?_ノ乙(、ン、)_"; mes "お、お礼はします…"; next; setarray '@list$,"やる","やめる"; if(getgmlevel()){ set '@list$[2],"メンテナンス"; } switch(select(printarray('@list$))) { case 1: set '@Rows,csvfind('@Quest_DB$, 0, "報酬"); if('@Rows > '@Debug_Rows){ set '@Rows,'@Debug_Rows + 1; } mes "[死にかけの人]"; mes "ありがとうございます…"; mes "難しさが" + ('@Rows-1) + "段階あって"; mes "難易度が高いとこほどお礼は弾みます"; mes "生活に便利なものですが…"; next; for(set '@i,1;'@i < '@Rows;set '@i,'@i+1) { set '@menu$['@i],csvread('@Quest_DB$, '@i, 0); } set '@Level,(select(printarray('@menu$)) - 1); set '@Cols,(csvgetcols('@Quest_DB$, '@Level) - 1) / 2; //種類数の取得 mes "[死にかけの人]^888888"; mes csvread('@Quest_DB$, '@Level, 0) + ":全" + '@Cols + "種"; while('@found < 3) { set '@format[0],rand(1,'@Cols); //'@format[0]は後で使うので、リサイクル set '@ItemID,csvread('@Quest_DB$, '@Level, '@format[0] * 2 - 1); for(set '@i,'@found;'@i >= 0;set '@i,'@i-1) { //'@ItemIDの重複チェック if ('@itemID == '@format[('@i * 2 + 2)]) { set '@itemID,0; break; } } if ('@itemID == 0) { Continue; } setarray '@format[('@found * 2 + 3)],'@ItemID,rand(1,csvread('@Quest_DB$, '@Level, '@format[0] * 2)); mes "^0000ff" + getitemname('@format[('@found * 2 + 3)]) + "^000000 を ^ff0000" + '@format[('@found * 2 + 4)] + "^000000個"; set '@found,'@found + 1; } setarray '@format[0],getcharid(0),'@Level,gettimetick(1) + 604800; for (set '@temp,0; 'Lock_CSV != 0; set '@temp,'@temp + 1){ if (!sleep2 ( 50 ) || '@temp == 10) { set 'Lock_CSV,0; mes "ロックに失敗しました。"; close; } } set 'Lock_CSV,1; csvinsert '@Save_DB$, 0; csvwritearray '@Save_DB$,0,'@format; csvflush '@Save_DB$; set 'Lock_CSV,0; set $MQ_Total,$MQ_Total + 1; mes "よろしく…"; close; case 2: mes "[死にかけの人]"; mes "(p_q)エーン"; mes "依頼開始のべ人数:" + $MQ_Total + "人"; mes "依頼達成のべ人数:" + $MQ_Comp + "人"; mes "現在実行中の人数:" + csvgetrows('@Save_DB$) + "人"; close; case 3: mes "[死にかけの人]"; mes "メンテナンスを行います。"; mes "削除対象:クエ開始から1週間経過"; for (set '@temp,0; 'Lock_CSV != 0; set '@temp,'@temp + 1){ if (!sleep2 ( 50 ) || '@temp == 10) { set 'Lock_CSV,0; mes "ロックに失敗しました。"; close; } } set 'Lock_CSV,1; set '@Now_Time,gettimetick(1); set '@Old_Rows,csvgetrows('@Save_DB$); for (set '@temp,csvgetrows('@Save_DB$); '@temp >= 0; set '@temp,'@temp - 1){ set '@CSV_Time,csvread('@Save_DB$, '@temp, 2); if ('@Now_Time > '@CSV_Time){ csvdelete '@Save_DB$,'@temp; if ((('@Old_Rows - '@temp + 1) % 100) == 0){ mes "(削除中…)"; } } else{ mes "削除完了。"; break; } } csvflush '@Save_DB$; set 'Lock_CSV,0; next; mes "[死にかけの人]"; mes "メンテナンスを終了します。"; mes "削除実行数:" + ('@Old_Rows - '@temp) + "クエ"; mes '@Old_Rows + "/" + '@temp + "/" + '@Now_Time; close; } } else { mes "[死にかけの男]"; csvreadarray '@Save_DB$, '@Search, '@format; set '@Loop,(csvgetcols('@Save_DB$, '@Search) - 2) / 2; for(set '@i,0;'@i<'@Loop;set '@i,'@i+1) { mes "^0000ff" + getitemname('@format[('@i * 2 + 3)]) + "^000000 を ^ff0000" + '@format[('@i * 2 + 4)] + "^000000個"; } mes "持ってきてもらえましたか?"; next; switch(select("はい","いいえ","ギブアップ")) { case 1: for(set '@i,0;'@i<'@Loop;set '@i,'@i+1) { if (countitem('@format[('@i * 2 + 3)]) < '@format[('@i * 2 + 4)]){ mes "[死にかけの男]"; mes "僕には時間がありません…早く…"; close; } } for(set '@i,0;'@i<'@Loop;set '@i,'@i+1) { delitem '@format[('@i * 2 + 3)],'@format[('@i * 2 + 4)]; } mes "[死にかけの人]"; mes "ありがとうございます。ではこれを…"; for (set '@temp,0; 'Lock_CSV != 0; set '@temp,'@temp + 1){ if (!sleep2 ( 50 ) || '@temp == 10) { set 'Lock_CSV,0; mes "ロックに失敗しました。"; close; } } set 'Lock_CSV,1; csvdelete '@Save_DB$,'@Search; csvflush '@Save_DB$; set 'Lock_CSV,0; set $MQ_Comp,$MQ_Comp + 1; set '@Rows,csvfind('@Quest_DB$, 0, '@format[1]); set '@Rand,rand(1,csvgetcols('@Quest_DB$, '@Rows) / 2) * 2; set '@ItemID,csvread('@Quest_DB$, '@Rows, '@Rand - 1); set '@ItemNum,csvread('@Quest_DB$, '@Rows, '@Rand); getitem '@ItemID,'@ItemNum; close; case 2: mes "[死にかけの人]"; mes "おうふ"; close; case 3: if (MQ_Giveup != gettime(5)){ mes "[死にかけの人]"; mes "ギブアップは1日1回ですが…"; next; switch(select("ギブアップする","まだ頑張る")) { case 1: set MQ_Giveup,gettime(5); mes "[死にかけの人]"; mes "そうですか。また話しかけてくださいね…"; for (set '@temp,0; 'Lock_CSV != 0; set '@temp,'@temp + 1){ if (!sleep2 ( 50 ) || '@temp == 10) { set 'Lock_CSV,0; mes "ロックに失敗しました。"; close; } } set 'Lock_CSV,1; csvdelete '@Save_DB$,'@Search; csvflush '@Save_DB$; set 'Lock_CSV,0; close; case 2: mes "[死にかけの人]"; mes "1日1回なので、次はないですよ"; close; } } else { mes "[死にかけの人]"; mes "今日はもうギブアップできないです"; close; } } } }