// 外した装備の数の調整 private void UnequipItemNumSet(Item item) { // 装備していないなら何もしない if (item == null) { return; } if (partyStatus.GetItemDictionary().ContainsKey(item)) { partyStatus.SetItemNum(item, partyStatus.GetItemNum(item) + 1); } else { partyStatus.SetItemDictionary(item, 1); } }
public void UseItem() { //currentTarget.GetComponent<Animator>().SetTrigger("Damage"); // バーティののアイテム数を減らす partyStatus.SetItemNum(currentItem, partyStatus.GetItemNum(currentItem) - 1); if (currentItem.GetItemType() == Item.Type.HPRecovery) { // 回復力 var recoveryPoint = currentItem.GetAmount(); targetCharacterBattleScript.SetHp(targetCharacterBattleScript.GetHp() + recoveryPoint); battleStatusScript.UpdateStatus(targetCharacterStatus, BattleStatusScript.Status.HP, targetCharacterBattleScript.GetHp()); battleManager.ShowMessage(gameObject.name + "は" + currentItem.GetKanjiName() + "を使って" + currentTarget.name + "のHPを" + recoveryPoint + "回復した。"); } else if (currentItem.GetItemType() == Item.Type.MPRecovery) { // 回復力 var recoveryPoint = currentItem.GetAmount(); targetCharacterBattleScript.SetMp(targetCharacterBattleScript.GetMp() + recoveryPoint); battleStatusScript.UpdateStatus(targetCharacterStatus, BattleStatusScript.Status.MP, targetCharacterBattleScript.GetMp()); battleManager.ShowMessage(gameObject.name + "は" + currentItem.GetKanjiName() + "を使って" + currentTarget.name + "のMPを" + recoveryPoint + "回復した。"); } else if (currentItem.GetItemType() == Item.Type.NumbnessRecovery) { targetCharacterStatus.SetNumbness(false); battleManager.ShowMessage(gameObject.name + "は" + currentItem.GetKanjiName() + "を使って" + currentTarget.name + "の痺れを消した。"); } else if (currentItem.GetItemType() == Item.Type.PoisonRecovery) { targetCharacterStatus.SetPoisonState(false); battleManager.ShowMessage(gameObject.name + "は" + currentItem.GetKanjiName() + "を使って" + currentTarget.name + "の毒を消した。"); } // アイテム数が0になったらItemDictionaryからそのアイテムを削除 if (partyStatus.GetItemNum(currentItem) == 0) { partyStatus.GetItemDictionary().Remove(currentItem); } }
public void UseItemToCharacter(AllyStatus toChara, Item item) { useItemInformationPanel.SetActive(true); useItemSelectCharacterPanelCanvasGroup.interactable = false; useItemSelectCharacterPanel.SetActive(false); if (item.GetItemType() == Item.Type.HPRecovery) { if (toChara.GetHp() == toChara.GetMaxHp()) { useItemInformationPanel.GetComponentInChildren <Text>().text = toChara.GetCharacterName() + "は元気です。"; } else { toChara.SetHp(toChara.GetHp() + item.GetAmount()); // アイテムを使用した旨を表示 useItemInformationPanel.GetComponentInChildren <Text>().text = item.GetKanjiName() + "を" + toChara.GetCharacterName() + "に使用しました。\n" + toChara.GetCharacterName() + "は" + item.GetAmount() + "回復しました。"; // 持っているアイテム数を減らす partyStatus.SetItemNum(item, partyStatus.GetItemNum(item) - 1); } } else if (item.GetItemType() == Item.Type.MPRecovery) { if (toChara.GetMp() == toChara.GetMaxMp()) { useItemInformationPanel.GetComponentInChildren <Text>().text = toChara.GetCharacterName() + "のMPは最大です。"; } else { toChara.SetMp(toChara.GetMp() + item.GetAmount()); // アイテムを使用した旨を表示 useItemInformationPanel.GetComponentInChildren <Text>().text = item.GetKanjiName() + "を" + toChara.GetCharacterName() + "に使用しました。\n" + toChara.GetCharacterName() + "はMPを" + item.GetAmount() + "回復しました。"; // 持っているアイテム数を減らす partyStatus.SetItemNum(item, partyStatus.GetItemNum(item) - 1); } } else if (item.GetItemType() == Item.Type.PoisonRecovery) { if (!toChara.IsPoisonState()) { useItemInformationPanel.GetComponentInChildren <Text>().text = toChara.GetCharacterName() + "は毒状態ではありません。"; } else { useItemInformationPanel.GetComponentInChildren <Text>().text = toChara.GetCharacterName() + "は毒から回復しました。"; toChara.SetPoisonState(false); // 持っているアイテム数を減らす partyStatus.SetItemNum(item, partyStatus.GetItemNum(item) - 1); } } else if (item.GetItemType() == Item.Type.NumbnessRecovery) { if (!toChara.IsNumbnessState()) { useItemInformationPanel.GetComponentInChildren <Text>().text = toChara.GetCharacterName() + "は痺れ状態ではありません。"; } else { useItemInformationPanel.GetComponentInChildren <Text>().text = toChara.GetCharacterName() + "は痺れから回復しました。"; toChara.SetNumbness(false); // 持っているアイテム数を減らす partyStatus.SetItemNum(item, partyStatus.GetItemNum(item) - 1); } } // itemPanleButtonListから該当するアイテムを探し数を更新する var itemButton = itemPanelButtonList.Find(obj => obj.transform.Find("ItemNameText").GetComponent <Text>().text == item.GetKanjiName()); itemButton.transform.Find("NumText").GetComponent <Text>().text = partyStatus.GetItemNum(item).ToString(); // アイテム数が0だったらボタンとキャラクターステータスからアイテムを削除 if (partyStatus.GetItemNum(item) == 0) { DeleteLostItem(item, itemButton); // ItemPanelに戻る為UseItemPanelの子要素のボタンを全削除 ResetSelectButton(); } else { // アイテム数が残っている場合はUseItemPanelでアイテムをどうするかの選択に戻る currentCommand = CommandMode.UseItemSelectCharacterPanelToUseItemPanel; } }
// 勝利時の結果 public IEnumerator DisplayVictoryResult(List <GameObject> allCharacterList, List <GameObject> allyCharacterInBattleList) { yield return(new WaitForSeconds(timeToDisplay)); won = true; resultPanel.SetActive(true); // 戦闘で獲得した経験値 var earnedExperience = 0; // 戦闘で獲得したお金 var earnedMoney = 0; // 戦闘で獲得したアイテムとその個数 Dictionary <Item, int> getItemDictionary = new Dictionary <Item, int>(); // Floatのランダム値 float randomFloat; // アイテム取得確率 float probability; // キャラクターステータス CharacterStatus characterStatus; // 敵のアイテムディクショナリー ItemDictionary enemyItemDictionary; // プレイヤーのレベル int playerLv = allyCharacterInBattleList[0].GetComponent <CharacterBattleScript>().GetCharacterStatus().GetLevel(); foreach (var character in allCharacterList) { characterStatus = character.GetComponent <CharacterBattleScript>().GetCharacterStatus(); if (characterStatus as EnemyStatus != null) { earnedExperience += LevelDifferenceCorrection(((EnemyStatus)characterStatus).GetLevel(), playerLv, ((EnemyStatus)characterStatus).GetGettingExperience()); earnedMoney += ((EnemyStatus)characterStatus).GetGettingMoney(); enemyItemDictionary = ((EnemyStatus)characterStatus).GetDropItemDictionary(); // 敵が持っているアイテムの種類の数だけ繰り返し foreach (var item in enemyItemDictionary.Keys) { // 0~100の間のランダム値を取得 randomFloat = Random.Range(0f, 100f); // アイテムの取得確率を取得 probability = enemyItemDictionary[item]; // ランダム値がアイテム取得確率以下の値であればアイテム取得 if (randomFloat <= probability) { if (getItemDictionary.ContainsKey(item)) { getItemDictionary[item]++; } else { getItemDictionary.Add(item, 1); } } } } } resultText.text = earnedExperience + "の経験値を獲得した。\n"; resultText.text += earnedMoney + "のお金を獲得した。\n"; // パーティーステータスにお金を反映する partyStatus.SetMoney(partyStatus.GetMoney() + earnedMoney); // 取得したアイテムを取得する foreach (var item in getItemDictionary.Keys) { // 既にアイテムを持っている時 if (partyStatus.GetItemDictionary().ContainsKey(item)) { partyStatus.SetItemNum(item, partyStatus.GetItemNum(item) + getItemDictionary[item]); } else { partyStatus.SetItemDictionary(item, getItemDictionary[item]); } resultText.text += item.GetKanjiName() + "を" + getItemDictionary[item] + "個手に入れた。\n"; resultText.text += "\n"; } // 上がったレベル var levelUpCount = 0; // 上がった素早さ var raisedAgility = 0; // 上がった力 var raisedPower = 0; // 上がった打たれ強さ var raisedStrikingStrength = 0; // 上がった魔法力 var raisedMagicPower = 0; // レベルアップ前のHP var nowMaxHP = 0; // レベルアップ前のMP var nowMaxMP = 0; // LevelUpData LevelUpData levelUpData; // レベルアップのテーブル List <int> agilityRisingTable; List <int> powerRisingTable; List <int> strikingStrengthRisingTable; List <int> magicPowerRisingTable; // レベルアップ等の計算 foreach (var characterObj in allyCharacterInBattleList) { var character = (AllyStatus)characterObj.GetComponent <CharacterBattleScript>().GetCharacterStatus(); // 変数を初期化 levelUpCount = 0; raisedAgility = 0; raisedPower = 0; raisedStrikingStrength = 0; raisedMagicPower = 0; nowMaxHP = character.GetMaxHp(); nowMaxMP = character.GetMaxMp(); levelUpData = character.GetLevelUpData(); agilityRisingTable = levelUpData.GetAgilityRisingTable(); powerRisingTable = levelUpData.GetPowerRisingTable(); strikingStrengthRisingTable = levelUpData.GetStrikingStrengthRisingTable(); magicPowerRisingTable = levelUpData.GetMagicPowerRisingTable(); // キャラクターに経験値を反映 character.SetEarnedExperience(character.GetEarnedExperience() + earnedExperience); // そのキャラクターの経験値で何レベルアップしたかどうか levelUpCount = character.GetEarnedExperience() / LEVEL_UP_POINT; character.SetEarnedExperience(character.GetEarnedExperience() % LEVEL_UP_POINT); // レベルアップ分のステータスアップを計算し反映する for (int i = 1; i <= levelUpCount; i++) { // レベルを反映 character.SetLevel(character.GetLevel() + 1); raisedAgility += agilityRisingTable[character.GetLevel() % agilityRisingTable.Count()]; raisedPower += powerRisingTable[character.GetLevel() % powerRisingTable.Count()]; raisedStrikingStrength += strikingStrengthRisingTable[character.GetLevel() % strikingStrengthRisingTable.Count()]; raisedMagicPower += magicPowerRisingTable[character.GetLevel() % strikingStrengthRisingTable.Count]; } if (levelUpCount > 0) { resultText.text += character.GetCharacterName() + "は" + levelUpCount + "レベル上がってLv" + character.GetLevel() + "になった。\n"; if (raisedAgility > 0) { resultText.text += "素早さが" + raisedAgility + "上がった。\n"; } if (raisedPower > 0) { resultText.text += "力が" + raisedPower + "上がった。\n"; } if (raisedStrikingStrength > 0) { resultText.text += "打たれ強さが" + raisedStrikingStrength + "上がった。\n"; } if (raisedMagicPower > 0) { resultText.text += "魔法力が" + raisedMagicPower + "上がった。\n"; } resultText.text += "\n"; } character.StatusUpdate(raisedPower, raisedAgility, raisedStrikingStrength, raisedMagicPower); //レベルの上がった分だけHP、MPを回復 character.SetHp(character.GetHp() + (character.GetMaxHp() - nowMaxHP)); character.SetMp(character.GetMp() + (character.GetMaxMp() - nowMaxMP)); } // 結果を計算し終わった isDisplayResult = true; // 戦闘終了のBGMに変更する //musicManager.ChangeBGM(); // 結果後に数秒待機 yield return(new WaitForSeconds(timeToDisplay)); // 戦闘から抜け出す //resultPanel.transform.Find("FinishText").gameObject.SetActive(true); isFinishResult = true; }