コメント
このコメントは、【トピック】装備変更スクリプトへのコメントです。コメントの内容
コメントの内容(一番最初の投稿)
こういう類の処理は、内部で何が起こっているのか
処理してる本人に吐かせるのが一番楽ですね。
"装備しない"選択時と同じように場合分けしましょー。
処理してる本人に吐かせるのが一番楽ですね。
case speakWithSelect(4,"装備","魔法","調合材料","もどる",
"")
when 0 #ここから武器選択画面
case speakWithSelect(6,"武器","盾","体防具","頭防具","装飾1","装飾2",
"※装備の種類を選んでください。")
when 0
wpn = createArray()
if getEquipmentIdArray()[0] !=-1
pushArray(wpn, getValueFromItemParam(getItemParamWithId(getEquipmentIdArray()[0]), getItemViewNameIndex()))
#現在装備している武器があれば、欄の一番上に表示する
end
i = 0
#↓問題の箇所1(29行目)
while i < getArrayLength(getItemIdArray()) #変更前: <=
#テスト用
test_1 = getItemIdArray()[i]; speak("getItemIdArray()[" + i + "] = " + test_1)
test_2 = getItemParamWithId(test_1); speak("getItemParamWithId(getItemIdArray()[" + i + "]) = " + test_2)
test_3 = getValueFromItemParam(test_2, getItemTypeIdIndex())
speak("getValueFromItemParam(getItemParamWithId(getItemIdArray()[" + i + "]), getItemTypeIdIndex()) = " + test_3)
#テスト用終わり
if getValueFromItemParam(getItemParamWithId(getItemIdArray()[i]), getItemTypeIdIndex()) == 1
pushArray(wpn, getValueFromItemParam(getItemParamWithId(getItemIdArray()[i]), getItemViewNameIndex()))
end
i = i + 1
#アイテム欄から武器を抽出してリスト化
end
pushArray(wpn, "装備しない")
pushArray(wpn, "やめる")
#「装備しない」と「やめる」を追加
#ここから一覧の武器を選択したときの処理
close = 0
while close == 0
k = speakWithSelectArray(wpn, "※装備する武器を選んでください。")
i = 0
while i <= getArrayLength(getItemIdArray())
#↓問題の箇所2(42行目)
#テスト用
test_1 = getEquipmentIdArray()[0]; speak("getEquipmentIdArray()[0] = " + test_1)
test_2 = getItemParamWithId(test_1); speak("getItemParamWithId(getItemIdArray()[0]) = " + test_2)
test_3 = getValueFromItemParam(test_2, getItemViewNameIndex())
speak("getValueFromItemParam(getItemParamWithId(getItemIdArray()[0]), getItemViewNameIndex()) = " + test_3)
#テスト用終わり
if wpn[k] == getValueFromItemParam(getItemParamWithId(getEquipmentIdArray()[0]), getItemViewNameIndex())
close = 1
elsif wpn[k] == "装備しない"
if getEquipmentIdArray()[0] !=-1
giveItem(getEquipmentIdArray()[0])
removeEquipmentWithIndex(0)
close = 1
end
#何も装備しない場合は、装備している武器を外してアイテム欄へ
elsif wpn[k] == getValueFromItemParam(getItemParamWithId(getItemIdArray()[i]), getItemViewNameIndex())
if getEquipmentIdArray()[0] !=-1
giveItem(getEquipmentIdArray()[0])
removeEquipmentWithIndex(0)
#既存の装備を外してアイテム欄に移動
end
giveEquipment(getItemIdArray()[i])
removeItemWithIndex(getItemIndexWithId(getItemIdArray()[i]))
#選択したアイテムを装備して、アイテム欄から消去
else wpn[k] == "やめる"
close = 1
end
i = i + 1
end
end
end
end
#コピペ分だけで動かすためにend2つ追加してます
- 29行目
- 42行目
"装備しない"選択時と同じように場合分けしましょー。
処理してる本人に吐かせるのが一番楽ですね。
case speakWithSelect(4,"装備","魔法","調合材料","もどる", "") when 0 #ここから武器選択画面 case speakWithSelect(6,"武器","盾","体防具","頭防具","装飾1","装飾2", "※装備の種類を選んでください。") when 0 wpn = createArray() if getEquipmentIdArray()[0] !=-1 pushArray(wpn, getValueFromItemParam(getItemParamWithId(getEquipmentIdArray()[0]), getItemViewNameIndex())) #現在装備している武器があれば、欄の一番上に表示する end i = 0 #↓問題の箇所1(29行目) while i < getArrayLength(getItemIdArray()) #変更前: <= #テスト用 test_1 = getItemIdArray()[i]; speak("getItemIdArray()[" + i + "] = " + test_1) test_2 = getItemParamWithId(test_1); speak("getItemParamWithId(getItemIdArray()[" + i + "]) = " + test_2) test_3 = getValueFromItemParam(test_2, getItemTypeIdIndex()) speak("getValueFromItemParam(getItemParamWithId(getItemIdArray()[" + i + "]), getItemTypeIdIndex()) = " + test_3) #テスト用終わり if getValueFromItemParam(getItemParamWithId(getItemIdArray()[i]), getItemTypeIdIndex()) == 1 pushArray(wpn, getValueFromItemParam(getItemParamWithId(getItemIdArray()[i]), getItemViewNameIndex())) end i = i + 1 #アイテム欄から武器を抽出してリスト化 end pushArray(wpn, "装備しない") pushArray(wpn, "やめる") #「装備しない」と「やめる」を追加 #ここから一覧の武器を選択したときの処理 close = 0 while close == 0 k = speakWithSelectArray(wpn, "※装備する武器を選んでください。") i = 0 while i <= getArrayLength(getItemIdArray()) #↓問題の箇所2(42行目) #テスト用 test_1 = getEquipmentIdArray()[0]; speak("getEquipmentIdArray()[0] = " + test_1) test_2 = getItemParamWithId(test_1); speak("getItemParamWithId(getItemIdArray()[0]) = " + test_2) test_3 = getValueFromItemParam(test_2, getItemViewNameIndex()) speak("getValueFromItemParam(getItemParamWithId(getItemIdArray()[0]), getItemViewNameIndex()) = " + test_3) #テスト用終わり if wpn[k] == getValueFromItemParam(getItemParamWithId(getEquipmentIdArray()[0]), getItemViewNameIndex()) close = 1 elsif wpn[k] == "装備しない" if getEquipmentIdArray()[0] !=-1 giveItem(getEquipmentIdArray()[0]) removeEquipmentWithIndex(0) close = 1 end #何も装備しない場合は、装備している武器を外してアイテム欄へ elsif wpn[k] == getValueFromItemParam(getItemParamWithId(getItemIdArray()[i]), getItemViewNameIndex()) if getEquipmentIdArray()[0] !=-1 giveItem(getEquipmentIdArray()[0]) removeEquipmentWithIndex(0) #既存の装備を外してアイテム欄に移動 end giveEquipment(getItemIdArray()[i]) removeItemWithIndex(getItemIndexWithId(getItemIdArray()[i])) #選択したアイテムを装備して、アイテム欄から消去 else wpn[k] == "やめる" close = 1 end i = i + 1 end end end end #コピペ分だけで動かすためにend2つ追加してます- 29行目
既に修正してますが元の条件式だと所持数より1回多く処理してしまいます- 42行目
武器未装備状態で処理を行うとtest_1の段階でnullが発生してます。"装備しない"選択時と同じように場合分けしましょー。