スクリプト/コツ/アイテム合成
最終投稿者:
退会したユーザー
更新: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のアイテムを合成することができるようになります。
今回もサンプルゲームを作りました。
参考になれば幸いです。
コメントする
コメントするには、ログインする必要があります。
コメント一覧
コメントはありません。