スクリプト/コツ/アイテム合成
最終投稿者: 退会したユーザー
更新:2011/12/06 22:06:54
タクミ2310号です。
今回はアイテムの合成についてです。
結構難しいですが、ここの図鑑の応用なので、頑張ってください。
というか、僕も難しくてうまく説明ができないので、加筆、訂正してください。ご協力をお願いします。
まずは下準備、関数の定義からです。
HMI関数はIDで指定したアイテムの個数を返します。
次に、こちらを記入。開始スクリプトでもそうでなくても構いません。
「合成可」のフラグがtrueなら、合成の準備ができたことになります。
0のレシピについては後ほど説明します。
1は合成後できるアイテムのIDです。
2~4は三次元配列になってますが、材料のIDと個数です。
5は何種類混ぜるかです。
6~8は2~4を文章化したものです。
さて、実際に合成するのですが、少し複雑なのでフローチャートにします。
これをスクリプト化すると、
有効条件
さて、このスクリプトだとレシピを持っている(= true)状態でないと合成ができません。
そこで、何かしらのイベントでレシピを覚えられるようにしましょう。
これで、インデックス0のアイテムを合成することができるようになります。
今回もサンプルゲームを作りました。
参考になれば幸いです。
ツイート
今回はアイテムの合成についてです。
結構難しいですが、ここの図鑑の応用なので、頑張ってください。
というか、僕も難しくてうまく説明ができないので、加筆、訂正してください。ご協力をお願いします。
まずは下準備、関数の定義からです。
def sv(a,b) setVariable(a, b) end def gv(a) return getVariable(a) end def HMI(a) #アイテムの個数チェック many = 0 ItemIDParam = getItemIdArray() i = 0 while i < getArrayLength(ItemIDParam) if ItemIDParam[i] == a many = many + 1 end i = i + 1 end return many end
HMI関数はIDで指定したアイテムの個数を返します。
次に、こちらを記入。開始スクリプトでもそうでなくても構いません。
setFlag("合成可",true) sv("合成", createArray()); i = 0 while i < 9 gv("合成")[i] = createArray() gv("合成")[i][0] = false gv("合成")[i][2] = createArray() gv("合成")[i][3] = createArray() gv("合成")[i][4] = createArray() i = i + 1 end #0 = レシピの有無, 1 = できるアイテムのID, 2,3,4 = 材料のIDと必要な個数の配列, 5 = 必要なアイテムの種類数, 6,7,8 = 必要なアイテムの文章 Index = 0 #高級回復薬 gv("合成")[Index][1] = 6533 gv("合成")[Index][2][0] = 6529 gv("合成")[Index][2][1] = 2 gv("合成")[Index][5] = 1 gv("合成")[Index][6] = "回復薬 2個" #極限回復薬 Index = Index + 1 gv("合成")[Index][1] = 6534 gv("合成")[Index][2][0] = 6533 gv("合成")[Index][2][1] = 3 gv("合成")[Index][5] = 1 gv("合成")[Index][6] = "高級回復薬 3個" #高級魔法薬 Index = Index + 1 gv("合成")[Index][1] = 6833 gv("合成")[Index][2][0] = 6832 gv("合成")[Index][2][1] = 2 gv("合成")[Index][3][0] = 6533 gv("合成")[Index][3][1] = 1 gv("合成")[Index][4][0] = 8424 gv("合成")[Index][4][1] = 2 gv("合成")[Index][5] = 3 gv("合成")[Index][6] = "魔法薬 2個" gv("合成")[Index][7] = "高級回復薬 1個" gv("合成")[Index][8] = "魔獣の赤皮 2個" #極限魔法薬 Index = Index + 1 gv("合成")[Index][1] = 6834 gv("合成")[Index][2][0] = 6833 gv("合成")[Index][2][1] = 2 gv("合成")[Index][3][0] = 6534 gv("合成")[Index][3][1] = 1 gv("合成")[Index][5] = 2 gv("合成")[Index][6] = "高級魔法薬 2個" gv("合成")[Index][7] = "極限回復薬 1個" #普通の剣 Index = Index + 1 gv("合成")[Index][1] = 8192 gv("合成")[Index][2][0] = 9140 gv("合成")[Index][2][1] = 3 gv("合成")[Index][5] = 1 gv("合成")[Index][6] = "鉄球 3個" #革の盾 Index = Index + 1 gv("合成")[Index][1] = 8193 gv("合成")[Index][2][0] = 8424 gv("合成")[Index][2][1] = 2 gv("合成")[Index][3][0] = 6529 gv("合成")[Index][3][1] = 1 gv("合成")[Index][5] = 2 gv("合成")[Index][6] = "魔獣の赤皮 2個" gv("合成")[Index][7] = "回復薬 1個" #鉄の盾 Index = Index + 1 gv("合成")[Index][1] = 8194 gv("合成")[Index][2][0] = 8193 gv("合成")[Index][2][1] = 1 gv("合成")[Index][3][0] = 9140 gv("合成")[Index][3][1] = 2 gv("合成")[Index][5] = 2 gv("合成")[Index][6] = "革の盾 1個" gv("合成")[Index][7] = "鉄球 2個" #皮のベスト Index = Index + 1 gv("合成")[Index][1] = 8195 gv("合成")[Index][2][0] = 8424 gv("合成")[Index][2][1] = 4 gv("合成")[Index][5] = 1 gv("合成")[Index][6] = "魔獣の赤皮 4個" #鋼のベスト Index = Index + 1 gv("合成")[Index][1] = 8196 gv("合成")[Index][2][0] = 8195 gv("合成")[Index][2][1] = 1 gv("合成")[Index][3][0] = 9140 gv("合成")[Index][3][1] = 3 gv("合成")[Index][5] = 2 gv("合成")[Index][6] = "皮のベスト 1個" gv("合成")[Index][7] = "鉄球 3個"
「合成可」のフラグがtrueなら、合成の準備ができたことになります。
0のレシピについては後ほど説明します。
1は合成後できるアイテムのIDです。
2~4は三次元配列になってますが、材料のIDと個数です。
5は何種類混ぜるかです。
6~8は2~4を文章化したものです。
さて、実際に合成するのですが、少し複雑なのでフローチャートにします。
所持品だけの選択肢配列をつくる ↓ 終わらせる選択肢を追加 ↓ 何を作るか聞く→→→→→→→→→→→→→→→→→→→→→→→→→→→→→→ ↓ ↓ ↓ 「やめる」 「???」 アイテムの名前と一致 ↓ ↓ ↓ ↓ 「レシピがない」 「アイテムが足りない」←←アイテムが足りているか ↓ ↓ ↓ ↓ ↓ 聞きなおす←←←←←←←←←←←←←←断られた←←合成していいか確認 ↓ ↑ ↓ ↓ ↑ アイテムを消す ↓ ↑ ↓ 終了 ↑←←←←←←←←←←←←←←←←←←←←←完成アイテムを与える
これをスクリプト化すると、
b = createArray() i = 0 while i < getArrayLength(gv("合成")) #1 if gv("合成")[i][0] #2 str = getValueFromItemParam(getItemParamWithId(gv("合成")[i][1]), getItemViewNameIndex()) pushArray(b, str) #所持品だけの選択肢配列 b をつくる else #2 pushArray(b, "???") #所持品でなければ???が入る end #2 i = i + 1 end #1 pushArray(b,"やめる") #終わらせる選択肢も追加 k = true setSelectWindowRect(64, 64, 192, 300) while k #kループ c = speakWithSelectArray(b,"何を作りますか?") if b[c] == "やめる" #3 k = false elsif b[c]=="???" #3 speak("レシピがありません") elsif b[c] == getValueFromItemParam(getItemParamWithId(gv("合成")[c][1]), getItemViewNameIndex()) #3 i = 0; out = false while (i < gv("合成")[c][5]) && (!out) #4 if HMI(gv("合成")[c][i + 2][0]) >= gv("合成")[c][i + 2][1] #アイテムが足りているか #5 i = i + 1 else #5 out = true end #5 end #4 i = 0; str = "" while i < gv("合成")[c][5] #6 str = str + gv("合成")[c][i + 6] if i < gv("合成")[c][5] - 1 str = str + "\n" end i = i + 1 end #6 if !out #7 case speakWithSelect(2, "はい", "いいえ", str + "が必要です。\nよろしいですか?」") #8 when 0 #8 i = 0 while i < gv("合成")[c][5] #9 ii = 0 while ii < gv("合成")[c][i + 2][1] #10 removeItemWithIndex(getItemIndexWithId(gv("合成")[c][i + 2][0])) ii = ii + 1 end #10 i = i + 1 end #9 waitTime(500); giveItem(gv("合成")[c][1]) speak(getValueFromItemParam(getItemParamWithId(gv("合成")[c][1]), getItemViewNameIndex()) + "の完成です!」") end #8 else #7 speak("アイテムが足りません。\n(" + str + "が必要です。)") end #7 end #3 end #kループ終 setSelectWindowRect(64, 64, 192, 400)
有効条件
getFlag("合成可")
さて、このスクリプトだとレシピを持っている(= true)状態でないと合成ができません。
そこで、何かしらのイベントでレシピを覚えられるようにしましょう。
gv("合成")[0][0] = true speak("高級回復薬のレシピを手に入れた")
これで、インデックス0のアイテムを合成することができるようになります。
今回もサンプルゲームを作りました。
参考になれば幸いです。
コメントする
コメントするには、ログインする必要があります。
コメント一覧
コメントはありません。