Пример #1
0
        public List <EventDecisionData> GetTerritoryFilteredEvents(TerritoryLevel thisLevel, List <EventDecisionData> prevResult = null)
        {
            List <EventDecisionData> result = prevResult;

            if (prevResult != null)
            {
                result.AddRange(kingdomEvents.FindAll(x => x.levelRequired == thisLevel && !result.Contains(x)));
            }
            else
            {
                result = kingdomEvents.FindAll(x => x.levelRequired == thisLevel);
            }
            return(result);
        }
Пример #2
0
        public List <EventDecisionData> ObtainWeeklyEvents(TerritoryLevel thisLevel, int eventCount, PlayerKingdomData playerData, bool inStory = false)
        {
            List <EventDecisionData> result = new List <EventDecisionData>();

            curPlayerData = playerData;
            List <EventDecisionData> forcedEvent = new List <EventDecisionData>();

            #region DEV DEBUGGING
            if (EnableDebugging)
            {
                if (!KingdomManager.GetInstance.isInStory && !playerData.IsStoryArcFinished(arcForced))
                {
                    // ADD INITIAL EVENT FIRST
                    if (initialEventOnly)
                    {
                        forcedEvent.Add(ForcedInitialStoryEventDataToReturn());
                        result.Add(forcedEvent[forcedEvent.Count - 1]);
                        eventCount -= forcedEvent.Count;
                    }
                    // GET ALL STORY ARC EVENT
                    else if (allStoryArcEvents)
                    {
                        forcedEvent.AddRange(ForcedStoryEventsDataToReturn());
                        result.AddRange(forcedEvent);
                        eventCount -= forcedEvent.Count;
                    }
                }
            }
            #endregion

            if (result.Count >= eventCount)
            {
                return(result);
            }
            else
            {
                // GET TERRITORY
                result.AddRange(GetTerritoryFilteredEvents(thisLevel));

                // Filter by Difficulty
                if (EnableDebugging && forceDifficulty)
                {
                    result = ForceDifficultyFilteredEvent(Difficultyforced, result);
                }
                else
                {
                    result = GetDifficultyRolledEvents(curPlayerData.level, result);
                }

                if (!KingdomManager.GetInstance.isInStory)
                {
                    //Remove other Arcs
                    if (EnableDebugging && forceArc)
                    {
                        result = FilterToInitialStoryArcEvent(result, arcForced);
                    }
                    // FILTER BY STORY
                    if (!initialEventOnly && !inStory)
                    {
                        // CHECK IF RESULT HAS STORIES, REMOVE ALL BUT 1.
                        result = GetTerritoryDifficultyFilteredEvents(result);
                    }
                }
                else
                {
                    List <EventDecisionData> nonStory = new List <EventDecisionData>();
                    nonStory.AddRange(result.FindAll(x => !x.isStoryArc));
                    result = result.FindAll(x => x.isStoryArc && x.storyArc == KingdomManager.GetInstance.currentStory.storyTitle);
                    result.AddRange(nonStory);
                }

                // GET THE TOP 3
                List <EventDecisionData> finalResult = new List <EventDecisionData>();

                List <int> randomEvents = new List <int>();
                // ALWAYS HAVE THE FORCED EVENTS INSIDE THE RESULT.
                if (EnableDebugging)
                {
                    if (forcedEvent.Count > 0)
                    {
                        for (int i = 0; i < result.Count; i++)
                        {
                            if (forcedEvent.Find(x => x.title == result[i].title) != null)
                            {
                                randomEvents.Add(i);
                            }
                        }
                    }
                }
                // Debug.Log("RESULT COUNT: " + result.Count);
                for (int i = 0; i < eventCount; i++)
                {
                    int tmp = UnityEngine.Random.Range(0, result.Count - 1);
                    if (randomEvents.Contains(tmp))
                    {
                        i--;
                    }
                    else
                    {
                        randomEvents.Add(tmp);
                    }
                }

                for (int i = 0; i < randomEvents.Count; i++)
                {
                    finalResult.Add(result[randomEvents[i]]);
                }

                // Debug.Log("Final Result Count: " + finalResult.Count);
                return(finalResult);
            }
        }
Пример #3
0
        public List <EventDecisionData> GetDifficultyRolledEvents(TerritoryLevel curLevel, List <EventDecisionData> territoryFiltered)
        {
            List <EventDecisionData> result = territoryFiltered;

            bool allowTroublesome = false;
            bool allowThreatening = false;


            /* ================================ COMPUTATION NOTES ================================
             *
             *     PLAYER GAME DIFFICULTY
             *     COMPUTATION [currentChanceBase + (Level * baseChance)] = TOTAL DIFFICULTY
             *
             * ====================================================================================
             *  RULES:
             *  1.)  INCREMENT ALL DIFFICULTIES
             */

            float rollDice = 0;
            // THREATENING
            float checkThreateningChance = currentThreateningChance + ((int)curLevel * threateningChance) + threateningChance;

            rollDice = UnityEngine.Random.Range(0.0f, 100.0f);
            if (rollDice <= checkThreateningChance)
            {
                allowThreatening         = true;
                currentThreateningChance = threateningChance;
            }
            else
            {
                currentThreateningChance += threateningChance;
            }
            //Debug.Log("----------|| Dice Roll for Threatening: " + rollDice + " over 100" + " Chance Rate:" + currentThreateningChance);
            // TROUBLESOME
            float checkTroublesomeChance = currentTroublesomeChance + ((int)curLevel * threateningChance) + threateningChance;

            rollDice = UnityEngine.Random.Range(0.0f, 100.0f);
            //Debug.Log("----------|| Dice Roll for Troublesome: " + rollDice + " over 100" + " Chance Rate:" + currentTroublesomeChance);
            if (rollDice <= checkTroublesomeChance)
            {
                allowTroublesome         = true;
                currentTroublesomeChance = troublesomeChance;
            }
            else
            {
                currentTroublesomeChance += troublesomeChance;
            }


            if (!allowThreatening)
            {
                result.RemoveAll(x => x.difficultyType == DifficultyType.threatening);
            }
            if (!allowTroublesome)
            {
                result.RemoveAll(x => x.difficultyType == DifficultyType.troublesome);
            }



            return(result);
        }