/*============================================================================== アイテム作成NPC スクリプト -------------------------------------------------------------------------------- らの字さんのスクリプトを少し変えたものです。 習作ですのでらの字さんのもののほうが汎用性が高いと思います。 ファイルの中のアイテム数に応じてグループ分けされます。 作成費と作成個数もなくしました。 グループ分けする数値は '@LIM で設定してください。 大きすぎる数になった時の挙動は不明です。 材料ファイルの書式 作成するアイテムID,材料1,材料1の必要数,材料2,材料2の必要数,材料3,材料3の必要数…… --------------------------------------------------------------------------------*/ - script makeitem 726, { set @FILE$, "./script/npc/material.txt"; //材料ファイルの場所 //材料ファイル位置や内容おかしいと終了するように if (csvgetrows(@FILE$) == 0) { mes "["+strnpcinfo(1)+"]"; mes "^FF0000どうやら材料の設定が"; mes "不十分のようですね。"; mes "管理人に報告してください。^000000"; goto L_CLOSE; } set '@LIM, 20; //メニュー毎のアイテム数 set '@num, csvgetrows(@FILE$) / '@LIM; set '@num, '@num +1; //グループ数確保のため mes "["+strnpcinfo(1)+"]"; mes "こちらは各種のアイテムを"; mes "作成することができます。"; mes "作成したいアイテムを選んでください。"; next; //グループ選択 if ('@num > 0) { for (set '@i,0; '@num>'@i; set '@i,'@i+1) { set '@g ,'@i +1; set '@group$['@i],"グループ" +'@g; } set '@group$['@i],"やめる"; mes "["+strnpcinfo(1)+"]"; mes "グループを選択してください。"; next; set '@sel,arrayselect('@group$); if ('@sel == '@i) goto L_CLOSE; //mes "'@group$=" +'@group$; //mes "'@i=" +'@i; //mes "'@sel=" +'@sel; //mes "@menu['@sel]=" +@menu['@sel]; set '@start,'@LIM * @menu; set '@end,'@start + '@LIM; } else { set '@start,0; set '@end,'@LIM; } //アイテム選択 for (set '@i,'@start; '@end > '@i; set '@i,'@i+1) { set '@j,csvread(@FILE$, '@i, 0); set '@list$['@i], getitemname('@j); } set '@list$['@i],"やめる"; mes "["+strnpcinfo(1)+"]"; mes "アイテムを選択してください。"; next; set '@sel,arrayselect('@list$); if ('@sel == '@i) goto L_CLOSE; csvreadarray @FILE$, @menu,'@item; for(set '@i,1; 1; set '@i,'@i+2) { //手数料、材料1のIDを両方、また材料の必要数を入れなかった場合、強制終了 if ('@item['@i] > 0 && '@item['@i+1] < 1) || ('@item[2] == 0 && '@item[3] == 0) { mes "["+strnpcinfo(1)+"]"; mes "^FF0000どうやら材料の設定が"; mes "不十分のようですね。"; mes "管理人に報告してください。^000000"; goto L_CLOSE; } if ('@item['@i] < 1) break; } mes "["+strnpcinfo(1)+"]"; mes "^FF0000"+ getitemname('@item[0]) +"を作るために"; mes "以下の材料が必要です。"; for(set '@i,1; '@item['@i] > 0; set '@i,'@i+2) { if (('@i/2)%2 == 0) { mes "^0000F0"+getitemname('@item['@i])+" ^000000"+'@item['@i+1]+"個"; } else { mes "^008000"+getitemname('@item['@i])+" ^000000"+'@item['@i+1]+"個"; } } next; mes "["+strnpcinfo(1)+"]^C00000"; mes "装備中の武具と名前入りアイテムが"; mes "作成用の材料と同じ種類である場合、"; mes "材料として消費されることがあります。"; mes "大事なものを無くさないために"; mes "所持物を確認してカートに入れたり、"; mes "倉庫に預かってください。^000000"; next; if(select("やめる","作成する")==1) { goto L_CLOSE; } //材料チェック for(set '@i,1; '@item['@i] > 0; set '@i,'@i + 2) { if (countitem('@item['@i]) < '@item['@i+1]) { mes "["+strnpcinfo(1)+"]"; mes "材料が足りません。"; next; goto L_CLOSE; break; } } //材料削除 for(set '@i,1; '@item['@i] > 0; set '@i,'@i+2) { delitem '@item['@i],'@item['@i+1]; } misceffect 154; //成功エフェクト getitem '@item[0],1; mes "["+strnpcinfo(1)+"]"; mes "^0000F0"+getitemname('@item[0])+"^000000を"; mes "作成できました。"; next; goto L_CLOSE; L_CLOSE: mes "["+strnpcinfo(1)+"]"; mes "ご利用ありがとうございました。"; mes "またのお越しをお待ちしております。"; close; } prontera.gat,164,173,3 duplicate(makeitem) 装備作成職人 726