prontera.gat,141,188,4 script クイズカプラ 721,{ set @Q_CSVRows,0; set @Q_i,0; set @Q_r,0; set @Q_s,0; set @Q_AllInput,0; set @Q_Time,0; set @Q_NowCorrect,1; deletearray @Q_Number,128; deletearray @Q_SendedQuiz$,128; deletearray @Q_ModeSelect$,128; deletearray @Q_Select$,128; deletearray @Q_QuestAns$,128; deletearray @Q_QuestRef$,128; deletearray @Q_CreateQuiz$,128; if($Q_NPCName$ == "") { set $Q_NPCName$,"[クイズカプラ]"; } if($Q_CSVFile$ == "") { set $Q_CSVFile$,"quiz"; } if($Q_CSVFile2$ == "") { set $Q_CSVFile2$,"quizsended"; } if($Q_GMLevel == 0) { set $Q_GMLevel,1; } if($Q_NeedItemID == 0) { set $Q_NeedItemID,512; } if($Q_NeedItemNum == 0) { set $Q_NeedItemNum,1; } if($Q_GetItemID == 0) { set $Q_GetItemID,512; } if($Q_GetItemNum == 0) { set $Q_GetItemNum,1; } if($Q_Correct == 0) { set $Q_Correct,1; } if($Q_TimeLimit == 0) { set $Q_TimeLimit,10; } if($Q_GMLock != 1 && getgmlevel() < $Q_GMLevel){ mes $Q_NPCName$; mes "現在、機能停止中です"; mes "ゲームマスターの起動をお待ちください"; goto L_END; } // 序文 if(getgmlevel() >= $Q_GMLevel){ set @Q_ModeSelect$[0],"クイズに挑戦"; set @Q_ModeSelect$[1],"クイズを作成"; set @Q_ModeSelect$[2],"クイズの反映"; set @Q_ModeSelect$[3],"設定の変更"; set @Q_ModeSelect$[4],"ファイルから更新"; set @Q_ModeSelect$[5],"NPCの撤去"; } else{ set @Q_ModeSelect$[0],"クイズに挑戦"; set @Q_ModeSelect$[1],"クイズを作成"; } mes $Q_NPCName$; if($Q_GMLock != 1 && getgmlevel() >= $Q_GMLevel){ mes "^FF0000" + "ロック中です!!" + "^000000"; } if(csvgetrows($Q_CSVFile2$) > 0 && getgmlevel() >= $Q_GMLevel){ mes "^0000FF" + "新着クイズが" + csvgetrows($Q_CSVFile2$) + "件あります" + "^000000"; } mes "こんにちは、クイズカプラです"; mes "クイズに挑戦するには"; mes getitemname($Q_NeedItemID) + "が" + $Q_NeedItemNum + "個必要です"; mes " "; mes "問題は全部で" + $Q_Correct + "問あり"; mes "全問正解すると景品として"; mes getitemname($Q_GetItemID) + "を" + $Q_GetItemNum + "個さしあげます"; mes "制限時間は" + $Q_TimeLimit + "秒です"; mes "クイズに挑戦してみますか?"; if(getgmlevel() >= $Q_GMLevel){ mes " "; mes "現在のクイズ数 : " + csvgetrows($Q_CSVFile$); } next; menu @Q_ModeSelect$[0],L_ANSWER, @Q_ModeSelect$[1],L_CREATE, @Q_ModeSelect$[2],L_UPDATE, @Q_ModeSelect$[3],L_SETCHG, @Q_ModeSelect$[4],L_RELOAD, @Q_ModeSelect$[5],L_DELNPC; goto L_END; // クイズの作成 L_CREATE: mes $Q_NPCName$; mes "問 : " + @Q_CreateQuiz$[0]; mes "○ : " + @Q_CreateQuiz$[1]; mes "× : " + @Q_CreateQuiz$[2]; mes "× : " + @Q_CreateQuiz$[3]; mes "× : " + @Q_CreateQuiz$[4]; next; menu "問題文を入力",L_CREATE_0, "正解の選択肢を入力",L_CREATE_1, "不正解の選択肢[1]を入力",L_CREATE_2, "不正解の選択肢[2]を入力",L_CREATE_3, "不正解の選択肢[3]を入力",L_CREATE_4, "まとめて入力",L_CREATE_ALL, "問題を書き込む",L_CREATE_5, "やっぱりやめる",L_END; L_CREATE_ALL: set @Q_AllInput,1; L_CREATE_0: if(@Q_AllInput == 1 && @Q_CreateQuiz$[0] != ""){ goto L_CREATE_1; } mes $Q_NPCName$; mes "問題文を入力してください。"; next; input @Q_CreateQuiz$[0]; if(@Q_AllInput == 0){ goto L_CREATE; } L_CREATE_1: if(@Q_AllInput == 1 && @Q_CreateQuiz$[1] != ""){ goto L_CREATE_2; } mes $Q_NPCName$; mes "正解の選択肢を入力してください"; next; input @Q_CreateQuiz$[1]; if(@Q_AllInput == 0){ goto L_CREATE; } L_CREATE_2: if(@Q_AllInput == 1 && @Q_CreateQuiz$[2] != ""){ goto L_CREATE_3; } mes $Q_NPCName$; mes "不正解の選択肢[1]を入力してください"; next; input @Q_CreateQuiz$[2]; if(@Q_AllInput == 0){ goto L_CREATE; } L_CREATE_3: if(@Q_AllInput == 1 && @Q_CreateQuiz$[3] != ""){ goto L_CREATE_4; } mes $Q_NPCName$; mes "不正解の選択肢[2]を入力してください"; next; input @Q_CreateQuiz$[3]; if(@Q_AllInput == 0){ goto L_CREATE; } L_CREATE_4: if(@Q_AllInput == 1 && @Q_CreateQuiz$[4] != ""){ goto L_CREATE_ALL_DELETE; } mes $Q_NPCName$; mes "不正解の選択肢[3]を入力してください"; next; input @Q_CreateQuiz$[4]; if(@Q_AllInput == 0){ goto L_CREATE; } L_CREATE_ALL_DELETE: set @Q_AllInput,0; goto L_CREATE; L_CREATE_5: if(@Q_CreateQuiz$[0] == ""){ goto L_CREATE_0; } if(@Q_CreateQuiz$[1] == ""){ goto L_CREATE_1; } if(@Q_CreateQuiz$[2] == ""){ goto L_CREATE_2; } if(@Q_CreateQuiz$[3] == ""){ goto L_CREATE_3; } if(@Q_CreateQuiz$[4] == ""){ goto L_CREATE_4; } set @Q_CreateQuiz$[5],strcharinfo(0); csvinsert $Q_CSVFile2$,0; csvwritearray $Q_CSVFile2$,0,@Q_CreateQuiz$; csvflush $Q_CSVFile2$; mes $Q_NPCName$; mes "問題を書き込みました。"; mes "ゲームマスターの反映をお待ちください"; goto L_END; // クイズに答える L_ANSWER: if(countitem($Q_NeedItemID) < $Q_NeedItemNum){ mes $Q_NPCName$; mes "申し訳ございません。"; mes getitemname($Q_NeedItemID) + "が" + $Q_NeedItemNum + "個無い方は"; mes "クイズに参加出来ません"; goto L_END; } set @Q_CSVRows,csvgetrows($Q_CSVFile$)-1; if(@Q_CSVRows < 0){ mes $Q_NPCName$; mes "申し訳ございません。"; mes "クイズがまだ準備されておりません"; goto L_END; } delitem $Q_NeedItemID,$Q_NeedItemNum; L_QUESTION: csvreadarray $Q_CSVFile$,rand(0,@Q_CSVRows),@Q_QuestAns$; setarray @Q_Number,0,1,2,3,4; set @Q_r,rand(1,4); set @Q_Select$[@Q_Number[@Q_r]],@Q_QuestAns$[1]; deletearray @Q_Number[@Q_r],1; set @Q_Answer,@Q_r; set @Q_r,rand(1,3); set @Q_Select$[@Q_Number[@Q_r]],@Q_QuestAns$[2]; deletearray @Q_Number[@Q_r],1; set @Q_r,rand(1,2); set @Q_Select$[@Q_Number[@Q_r]],@Q_QuestAns$[3]; deletearray @Q_Number[@Q_r],1; set @Q_r,1; set @Q_Select$[@Q_Number[@Q_r]],@Q_QuestAns$[4]; deletearray @Q_Number[@Q_r],1; set @Q_Time,gettimetick(2)+$Q_TimeLimit; mes $Q_NPCName$; mes "^0000FF" + @Q_NowCorrect + "/" + $Q_Correct + " 問目です" + "^000000"; mes @Q_QuestAns$[0]; mes " "; mes "出題 : " + @Q_QuestAns$[5] + "さん"; next; set @Q_s,select(@Q_Select$[1],@Q_Select$[2],@Q_Select$[3],@Q_Select$[4]); if(@Q_Time < gettimetick(2)){ mes $Q_NPCName$; mes "時間切れです。"; mes "またご挑戦ください。"; goto L_END; } if(@Q_s == @Q_Answer){ if(@Q_NowCorrect >= $Q_Correct){ mes $Q_NPCName$; mes "おめでとうございます!"; mes "全問正解です!"; mes "景品をどうぞ"; getitem $Q_GetItemID,$Q_GetItemNum; goto L_END; } else{ set @Q_NowCorrect,@Q_NowCorrect+1; goto L_QUESTION; } } else{ mes $Q_NPCName$; mes "不正解です。"; mes "またご挑戦下さい。"; goto L_END; } goto L_END; // クイズの反映 L_UPDATE: if(csvgetrows($Q_CSVFile2$)<1){ mes $Q_NPCName$; mes "現在、投稿はありません"; goto L_END; } mes $Q_NPCName$; mes "投稿クイズを選択してください。"; mes "何もしない時はキャンセルボタンを押してください"; next; deletearray @Q_SendedQuiz$,128; for(set @Q_i,0;@Q_i < csvgetrows($Q_CSVFile2$);set @Q_i,@Q_i+1){ set @Q_SendedQuiz$[@Q_i],csvread($Q_CSVFile2$,@Q_i,0); } set @Q_SendedQuizNo,select( @Q_SendedQuiz$[0],@Q_SendedQuiz$[1],@Q_SendedQuiz$[2],@Q_SendedQuiz$[3],@Q_SendedQuiz$[4], @Q_SendedQuiz$[5],@Q_SendedQuiz$[6],@Q_SendedQuiz$[7],@Q_SendedQuiz$[8],@Q_SendedQuiz$[9], @Q_SendedQuiz$[10],@Q_SendedQuiz$[11],@Q_SendedQuiz$[12],@Q_SendedQuiz$[13],@Q_SendedQuiz$[14], @Q_SendedQuiz$[15],@Q_SendedQuiz$[16],@Q_SendedQuiz$[17],@Q_SendedQuiz$[18],@Q_SendedQuiz$[19], @Q_SendedQuiz$[20],@Q_SendedQuiz$[21],@Q_SendedQuiz$[22],@Q_SendedQuiz$[23],@Q_SendedQuiz$[24], @Q_SendedQuiz$[25],@Q_SendedQuiz$[26],@Q_SendedQuiz$[27],@Q_SendedQuiz$[28],@Q_SendedQuiz$[29], @Q_SendedQuiz$[30],@Q_SendedQuiz$[31],@Q_SendedQuiz$[32],@Q_SendedQuiz$[33],@Q_SendedQuiz$[34], @Q_SendedQuiz$[35],@Q_SendedQuiz$[36],@Q_SendedQuiz$[37],@Q_SendedQuiz$[38],@Q_SendedQuiz$[39], @Q_SendedQuiz$[40],@Q_SendedQuiz$[41],@Q_SendedQuiz$[42],@Q_SendedQuiz$[43],@Q_SendedQuiz$[44], @Q_SendedQuiz$[45],@Q_SendedQuiz$[46],@Q_SendedQuiz$[47],@Q_SendedQuiz$[48],@Q_SendedQuiz$[49], @Q_SendedQuiz$[50],@Q_SendedQuiz$[51],@Q_SendedQuiz$[52],@Q_SendedQuiz$[53],@Q_SendedQuiz$[54], @Q_SendedQuiz$[55],@Q_SendedQuiz$[56],@Q_SendedQuiz$[57],@Q_SendedQuiz$[58],@Q_SendedQuiz$[59], @Q_SendedQuiz$[60],@Q_SendedQuiz$[61],@Q_SendedQuiz$[62],@Q_SendedQuiz$[63],@Q_SendedQuiz$[64], @Q_SendedQuiz$[65],@Q_SendedQuiz$[66],@Q_SendedQuiz$[67],@Q_SendedQuiz$[68],@Q_SendedQuiz$[69], @Q_SendedQuiz$[70],@Q_SendedQuiz$[71],@Q_SendedQuiz$[72],@Q_SendedQuiz$[73],@Q_SendedQuiz$[74], @Q_SendedQuiz$[75],@Q_SendedQuiz$[76],@Q_SendedQuiz$[77],@Q_SendedQuiz$[78],@Q_SendedQuiz$[79], @Q_SendedQuiz$[80],@Q_SendedQuiz$[81],@Q_SendedQuiz$[82],@Q_SendedQuiz$[83],@Q_SendedQuiz$[84], @Q_SendedQuiz$[85],@Q_SendedQuiz$[86],@Q_SendedQuiz$[87],@Q_SendedQuiz$[88],@Q_SendedQuiz$[89], @Q_SendedQuiz$[90],@Q_SendedQuiz$[91],@Q_SendedQuiz$[92],@Q_SendedQuiz$[93],@Q_SendedQuiz$[94], @Q_SendedQuiz$[95],@Q_SendedQuiz$[96],@Q_SendedQuiz$[97],@Q_SendedQuiz$[98],@Q_SendedQuiz$[99], @Q_SendedQuiz$[100],@Q_SendedQuiz$[101],@Q_SendedQuiz$[102],@Q_SendedQuiz$[103],@Q_SendedQuiz$[104], @Q_SendedQuiz$[105],@Q_SendedQuiz$[106],@Q_SendedQuiz$[107],@Q_SendedQuiz$[108],@Q_SendedQuiz$[109], @Q_SendedQuiz$[110],@Q_SendedQuiz$[111],@Q_SendedQuiz$[112],@Q_SendedQuiz$[113],@Q_SendedQuiz$[114], @Q_SendedQuiz$[115],@Q_SendedQuiz$[116],@Q_SendedQuiz$[117],@Q_SendedQuiz$[118],@Q_SendedQuiz$[119], @Q_SendedQuiz$[120],@Q_SendedQuiz$[121],@Q_SendedQuiz$[122],@Q_SendedQuiz$[123],@Q_SendedQuiz$[124], @Q_SendedQuiz$[125],@Q_SendedQuiz$[126])-1; mes "問 : " + csvread($Q_CSVFile2$,@Q_SendedQuizNo,0); mes "○ : " + csvread($Q_CSVFile2$,@Q_SendedQuizNo,1); mes "× : " + csvread($Q_CSVFile2$,@Q_SendedQuizNo,2); mes "× : " + csvread($Q_CSVFile2$,@Q_SendedQuizNo,3); mes "× : " + csvread($Q_CSVFile2$,@Q_SendedQuizNo,4); mes "作 : " + csvread($Q_CSVFile2$,@Q_SendedQuizNo,5); next; switch(Select("とりあえず保留","この問題を削除","この問題を反映")){ case 1: break; case 2: csvdelete $Q_CSVFile2$,@Q_SendedQuizNo; csvflush $Q_CSVFile2$; mes $Q_NPCName$; mes "削除しました。"; break; case 3: csvreadarray $Q_CSVFile2$,rand(0,@Q_CSVRows),@Q_QuestRef$; csvdelete $Q_CSVFile2$,@Q_SendedQuizNo; csvinsert $Q_CSVFile$,0; csvwritearray $Q_CSVFile$,0,@Q_QuestRef$; csvflush $Q_CSVFile2$; csvflush $Q_CSVFile$; mes $Q_NPCName$; mes "反映しました。"; break; } next; goto L_UPDATE; // クイズの設定変更 L_SETCHG: mes $Q_NPCName$; if($Q_GMLock != 1){ mes "^FF0000" + "ロック中です!!" + "^000000"; } else{ mes "^0000FF" + "ロック解除中です!!" + "^000000"; } mes "どの設定を変更しますか?"; next; L_SETCHG2: menu "ロック/ロック解除",L_S_LOCK, "必要アイテム - " + getitemname($Q_NeedItemID),L_S_NEEDITEMID, "必要アイテム数 - " + $Q_NeedItemNum + " 個",L_S_NEEDITEMNUM, "取得アイテム - " + getitemname($Q_GetItemID),L_S_GETITEMID, "取得アイテム数 - " + $Q_GetItemNum + " 個",L_S_GETITEMNUM, "必要な正解数 - " + $Q_Correct + " 問",L_S_CORRECT, "制限時間 - " + $Q_TimeLimit + " 秒",L_S_TIMELIMIT, "GMレベル - " + $Q_GMLevel + "",L_S_GMLEVEL, "設定モード終了",L_END; L_S_LOCK: if($Q_GMLock == 1){ set $Q_GMLock,0; } else{ set $Q_GMLock,1; } goto L_SETCHG; L_S_NEEDITEMID: mes $Q_NPCName$; mes "挑戦に必要なアイテムの"; mes "IDを入力するにょろ"; next; input $Q_NeedItemID; if($Q_NeedItemID < 1){ set $Q_NeedItemID,512; } goto L_SETCHG; L_S_NEEDITEMNUM: mes $Q_NPCName$; mes "挑戦に必要な"; mes getitemname($Q_NeedItemID) + "の"; mes "必要個数を入力するにょろ"; next; input $Q_NeedItemNum; if($Q_NeedItemNum < 1){ set $Q_NeedItemNum,1; } goto L_SETCHG; L_S_GETITEMID: mes $Q_NPCName$; mes "全問正解したときに"; mes "貰えるアイテムの"; mes "IDを入力するにょろ"; next; input $Q_GetItemID; if($Q_GetItemID < 1){ set $Q_GetItemID,512; } goto L_SETCHG; L_S_GETITEMNUM: mes $Q_NPCName$; mes "全問正解したときに貰える"; mes getitemname($Q_NeedItemID) + "の"; mes "個数を入力するにょろ"; next; input $Q_GetItemNum; if($Q_GetItemNum < 1){ set $Q_GetItemNum,1; } goto L_SETCHG; L_S_CORRECT: mes $Q_NPCName$; mes "連続正解しなきゃいけない"; mes "問題数を入力するにょろ"; next; input $Q_Correct; if($Q_Correct < 1){ set $Q_Correct,1; } goto L_SETCHG; L_S_TIMELIMIT: mes $Q_NPCName$; mes "出題されてから解答するまでの"; mes "制限時間を秒単位で入力するにょろ"; next; input $Q_TimeLimit; if($Q_TimeLimit < 1){ set $Q_TimeLimit,10; } goto L_SETCHG; L_S_GMLEVEL: mes $Q_NPCName$; mes "操作可能なゲームマスターの"; mes "レベルを入力するにょろ"; next; input $Q_GMLevel; if($Q_GMLevel < 1){ set $Q_GMLevel,1; } goto L_SETCHG; // クイズのファイルからの再読み込み L_RELOAD: mes $Q_NPCName$; mes "ファイルを直接更新した時のみ"; mes "使用してください"; mes "ファイルから問題・投稿を"; mes "更新しても宜しいでしょうか?"; next; if(select("いいえ","はい") == 1){ goto L_END; } csvreload $Q_CSVFile$; csvreload $Q_CSVFile2$; mes $Q_NPCName$; mes "更新が完了しました"; goto L_END; // NPCの変数削除と無効化 L_DELNPC: mes $Q_NPCName$; mes "変数を削除し、NPCを無効化します。"; mes "本当によろしいですか?"; next; if(select("いいえ","はい") == 1){ goto L_END; } mes $Q_NPCName$; mes "変数の削除と無効化を行いました"; mes "スクリプトとクイズデータを"; mes "手動で削除してください"; mes "また、マップ永続変数の記録後に"; mes "サーバーを再起動させてくださいませ"; set @Q_DelNpc,1; goto L_END; // 終了 L_END: set @Q_CSVRows,0; set @Q_r,0; set @Q_i,0; set @Q_s,0; set @Q_AllInput,0; set @Q_Time,0; set @Q_NowCorrect,0; set @Q_SendedQuizNo,0; deletearray @Q_Number,128; deletearray @Q_SendedQuiz$,128; deletearray @Q_ModeSelect$,128; deletearray @Q_Select$,128; deletearray @Q_QuestAns$,128; deletearray @Q_QuestRef$,128; deletearray @Q_CreateQuiz$,128; if(@Q_DelNpc == 1){ set $Q_GMLock,0; set $Q_GMLevel,0; set $Q_NeedItemID,0; set $Q_NeedItemNum,0; set $Q_GetItemID,0; set $Q_GetItemNum,0; set $Q_Correct,0; set $Q_TimeLimit,0; set @Q_DelNpc,0; hideonnpc; } close; }