コメント

このコメントは、【トピック】装備変更スクリプトへのコメントです。

コメントの内容

User icon mini 退会したユーザー(投稿日:2013/10/22 15:10/22/13)
こういう類の処理は、内部で何が起こっているのか
処理してる本人に吐かせるのが一番楽ですね。
 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が発生してます。
"装備しない"選択時と同じように場合分けしましょー。

コメントの内容(一番最初の投稿)

User icon mini 退会したユーザー(投稿日:2013/10/22 15:10/22/13)
こういう類の処理は、内部で何が起こっているのか
処理してる本人に吐かせるのが一番楽ですね。
 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が発生してます。
"装備しない"選択時と同じように場合分けしましょー。