コード例 #1
0
    public List <ChoiceConsequence> GetConsequences()
    {
        if (choices.Count != consequence.Count)
        {
            Debug.LogError("Choice to Consequence count mismatch!");
            throw new System.Exception("Choice to Consequence count mismatch!");
        }

        List <ChoiceConsequence> returnval = new List <ChoiceConsequence>();

        for (int currentChoice = 0; currentChoice < choices.Count; currentChoice++)
        {
            ChoiceConsequence currentConsequence = new ChoiceConsequence(choices[currentChoice], consequence[currentChoice]);
            returnval.Add(currentConsequence);
        }
        return(returnval);
    }
コード例 #2
0
    public void ResolveChoiceConsequence(ChoiceConsequence consequence)
    {
        Debug.Log("StoryEventController.ResolveChoiceConsequence() called, resolving effect of consequence: "
                  + consequence.consequenceType.ToString());
        if (consequence.consequenceType == ChoiceConsequence.ConsequenceType.EventEnds)
        {
            //
        }
        else if (consequence.consequenceType == ChoiceConsequence.ConsequenceType.AllCharactersGainXP)
        {
            foreach (CharacterData character in CharacterRoster.Instance.allCharacterDataObjects)
            {
                character.ModifyCurrentXP(consequence.xpGainAmount);
            }
        }
        else if (consequence.consequenceType == ChoiceConsequence.ConsequenceType.GainGold)
        {
            PlayerDataManager.Instance.ModifyGold(consequence.goldGainAmount);
        }
        else if (consequence.consequenceType == ChoiceConsequence.ConsequenceType.GainSpecificItem)
        {
            InventoryController.Instance.AddItemToInventory(consequence.specificItemGained, true);
        }
        else if (consequence.consequenceType == ChoiceConsequence.ConsequenceType.GainRandomItem)
        {
            for (int i = 0; i < consequence.randomItemsGained; i++)
            {
                if (consequence.randomItemRarity == ItemDataSO.ItemRarity.Common)
                {
                    InventoryController.Instance.AddItemToInventory(ItemLibrary.Instance.GetRandomCommonItem(), true);
                }
                else if (consequence.randomItemRarity == ItemDataSO.ItemRarity.Rare)
                {
                    InventoryController.Instance.AddItemToInventory(ItemLibrary.Instance.GetRandomRareItem(), true);
                }
                else if (consequence.randomItemRarity == ItemDataSO.ItemRarity.Epic)
                {
                    InventoryController.Instance.AddItemToInventory(ItemLibrary.Instance.GetRandomEpicItem(), true);
                }
            }
        }
        else if (consequence.consequenceType == ChoiceConsequence.ConsequenceType.GainRandomWeapon)
        {
            for (int i = 0; i < consequence.randomWeaponsGained; i++)
            {
                if (consequence.randomWeaponRarity == ItemDataSO.ItemRarity.Common)
                {
                    InventoryController.Instance.AddItemToInventory(ItemLibrary.Instance.GetRandomCommonWeaponItem(), true);
                }
                else if (consequence.randomWeaponRarity == ItemDataSO.ItemRarity.Rare)
                {
                    InventoryController.Instance.AddItemToInventory(ItemLibrary.Instance.GetRandomRareWeaponItem(), true);
                }
                else if (consequence.randomWeaponRarity == ItemDataSO.ItemRarity.Epic)
                {
                    InventoryController.Instance.AddItemToInventory(ItemLibrary.Instance.GetRandomEpicWeaponItem(), true);
                }
            }
        }
        else if (consequence.consequenceType == ChoiceConsequence.ConsequenceType.GainSpecificAffliction)
        {
            StateManager.Instance.GainState(consequence.afflictionGained, true);
        }
        else if (consequence.consequenceType == ChoiceConsequence.ConsequenceType.GainSpecificState)
        {
            StateManager.Instance.GainState(consequence.stateGained, true);
        }
        else if (consequence.consequenceType == ChoiceConsequence.ConsequenceType.TriggerCombatEvent)
        {
            SetAwaitingCombatEventState(consequence.combatEvent);
        }
        else if (consequence.consequenceType == ChoiceConsequence.ConsequenceType.RandomPartyMemberDies)
        {
            for (int i = 0; i < consequence.partyMembersKilled; i++)
            {
                List <CharacterData> charactersWithAtleast1HP = new List <CharacterData>();
                CharacterData        characterKilled          = null;

                // Get all viable characters to kill
                foreach (CharacterData cd in CharacterRoster.Instance.allCharacterDataObjects)
                {
                    if (cd.currentHealth > 0)
                    {
                        charactersWithAtleast1HP.Add(cd);
                    }
                }

                // determine which character should die
                if (charactersWithAtleast1HP.Count == 1)
                {
                    characterKilled = charactersWithAtleast1HP[0];
                }
                else if (charactersWithAtleast1HP.Count > 1)
                {
                    characterKilled = charactersWithAtleast1HP[Random.Range(0, charactersWithAtleast1HP.Count)];
                }
                else
                {
                    Debug.Log("StoryEventController.ResolveChoiceConsequence() tried to resolve the event 'RandomCharacterDies', but " +
                              "the player does not have any characters with more then 0 HP...");
                }

                // kill the character
                if (characterKilled)
                {
                    Debug.Log("StoryEventController.ResolveChoiceConsequence() killing random character called: " + characterKilled.myName);
                    characterKilled.ModifyCurrentHealth(-characterKilled.currentHealth);
                }
            }
        }
        else if (consequence.consequenceType == ChoiceConsequence.ConsequenceType.LoseAllInventoryItems)
        {
            InventoryController.Instance.DestroyAllItemsInInventory();
        }
    }
コード例 #3
0
    public string ConvertChoiceConsequenceToString(ChoiceConsequence choiceConsequence)
    {
        Debug.Log("StoryEventController.ConvertChoiceConsequenceToString() called...");

        string stringReturned = "";

        if (choiceConsequence.consequenceType == ChoiceConsequence.ConsequenceType.EventEnds)
        {
            stringReturned = "Event Ends";
        }
        else if (choiceConsequence.consequenceType == ChoiceConsequence.ConsequenceType.AllCharactersGainXP)
        {
            stringReturned = "All characters gain " + choiceConsequence.xpGainAmount.ToString() + " XP";
        }
        else if (choiceConsequence.consequenceType == ChoiceConsequence.ConsequenceType.GainGold)
        {
            stringReturned = "Gain " + choiceConsequence.goldGainAmount.ToString() + "g";
        }
        else if (choiceConsequence.consequenceType == ChoiceConsequence.ConsequenceType.GainSpecificItem)
        {
            stringReturned = "Gain item: " + choiceConsequence.specificItemGained.Name;
        }
        else if (choiceConsequence.consequenceType == ChoiceConsequence.ConsequenceType.TriggerCombatEvent)
        {
            stringReturned = "Triggers combat event: " + choiceConsequence.combatEvent.waveName;
        }
        else if (choiceConsequence.consequenceType == ChoiceConsequence.ConsequenceType.GainSpecificAffliction)
        {
            stringReturned = "Gain Affliction: " + choiceConsequence.afflictionGained.stateName;
        }
        else if (choiceConsequence.consequenceType == ChoiceConsequence.ConsequenceType.GainSpecificState)
        {
            stringReturned = "Gain State: " + choiceConsequence.stateGained.stateName;
        }
        else if (choiceConsequence.consequenceType == ChoiceConsequence.ConsequenceType.RandomPartyMemberDies)
        {
            if (choiceConsequence.partyMembersKilled > 1)
            {
                stringReturned = choiceConsequence.partyMembersKilled.ToString() + " random party members die";
            }
            else if (choiceConsequence.partyMembersKilled == 1)
            {
                stringReturned = choiceConsequence.partyMembersKilled.ToString() + " random party member dies";
            }
        }
        else if (choiceConsequence.consequenceType == ChoiceConsequence.ConsequenceType.LoseAllInventoryItems)
        {
            stringReturned = "Lose all items in your inventory";
        }
        else if (choiceConsequence.consequenceType == ChoiceConsequence.ConsequenceType.GainRandomItem)
        {
            string itemsString = "item";

            if (choiceConsequence.randomItemsGained > 1)
            {
                itemsString = "items";
            }

            stringReturned = "Gain " + choiceConsequence.randomItemsGained.ToString() + " random "
                             + choiceConsequence.randomItemRarity.ToString() + " " + itemsString;
        }
        else if (choiceConsequence.consequenceType == ChoiceConsequence.ConsequenceType.GainRandomWeapon)
        {
            string itemsString = "weapon";

            if (choiceConsequence.randomWeaponsGained > 1)
            {
                itemsString = "weapons";
            }

            stringReturned = "Gain " + choiceConsequence.randomWeaponsGained.ToString() + " random "
                             + choiceConsequence.randomWeaponRarity.ToString() + " " + itemsString;
        }
        else
        {
            Debug.Log("StoryEventController.ConvertChoiceRequirementToString() detected that a string conversion for" +
                      " the enum value " + choiceConsequence.ToString() + " has not been defined, returning an empty string...");
        }

        return(stringReturned);
    }