スクリプト/コツ/アイテム合成(履歴ID:144)
最終投稿者: 退会したユーザー
更新:2011/12/06 22:06:54
タクミ2310号です。
今回はアイテムの合成についてです。
結構難しいですが、ここの図鑑の応用なので、頑張ってください。
というか、僕も難しくてうまく説明ができないので、加筆、訂正してください。ご協力をお願いします。
まずは下準備、関数の定義からです。
HMI関数はIDで指定したアイテムの個数を返します。
次に、こちらを記入。開始スクリプトでもそうでなくても構いません。
「合成可」のフラグがtrueなら、合成の準備ができたことになります。
0のレシピについては後ほど説明します。
1は合成後できるアイテムのIDです。
2~4は三次元配列になってますが、材料のIDと個数です。
5は何種類混ぜるかです。
6~8は2~4を文章化したものです。
実際に合成するときは、
・・・こんな感じです。
実は自分でもどう説明すればいいのか分からなかったりする
今回もサンプルゲームを作りました。
参考になれば幸いです。
今回はアイテムの合成についてです。
結構難しいですが、ここの図鑑の応用なので、頑張ってください。
というか、僕も難しくてうまく説明ができないので、加筆、訂正してください。ご協力をお願いします。
まずは下準備、関数の定義からです。
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)
・・・こんな感じです。
実は自分でもどう説明すればいいのか分からなかったりする
今回もサンプルゲームを作りました。
参考になれば幸いです。