Example #1
0
 /// <summary>
 /// Starts the progress of a quest pop up.
 /// </summary>
 /// <param name="player">The player recieving the quest pop up</param>
 public void StartQuestPopUp(CQPlayerObject player, Quest quest)
 {
     if (quest)
     {
         if (quest.pickUpAble == true)
         {
             if (FindObjectOfType <QuestUI>())
             {
                 EventInfoHolder tmpE = new EventInfoHolder();
                 tmpE.player     = player;
                 tmpE.quest      = quest;
                 tmpE.questGiver = this;
                 QuestHandler.TriggerEvent("StartQuestPopUp", tmpE); //Sends out the StartQuestPopUp event
             }
             else
             {
                 QuestHandler.Instance.QuestsDiscovered(quest, player);
             }
         }
     }
     else
     {
         Debug.LogWarning("Quest is null in: " + this.gameObject + " Cannot give quest");
     }
 }
Example #2
0
    /// <summary>
    /// Is run when this criteria is completed
    /// </summary>
    /// <param name="player">The player who completed the criteria</param>
    public virtual void Complete(CQPlayerObject player, CQExamplePlayer unit)
    {
        EventInfoHolder tmpE = new EventInfoHolder();

        tmpE.criteria = this;
        tmpE.player   = player;
        tmpE.unit     = unit;
        QuestHandler.TriggerEvent("CriteriaCompleted", tmpE); //Sends out the CriteriaCompleted event
        if (!dontDespawnObjectsWhenComplete)
        {
            bool despawn = true;
            foreach (CQPlayerObject p in quest.playersUnCompleted)
            {
                if (quest.activeCriterias[p].Contains(this))
                {
                    despawn = false;
                }
            }
            if (despawn == true)
            {
                foreach (SpawnZone zone in spawnZones)
                {
                    zone.DespawnQuestObjects();
                    zone.Spawn = false;
                }
            }
        }
    }
Example #3
0
    /// <summary>
    /// Completes a Criteria.
    /// </summary>
    /// <param name="player">The player who completed it</param>
    /// <param name="criteria">The criteria to complete</param>
    /// <param name="unit">The unit who completed the criteria</param>
    public virtual void CriteriaCompleted(CQExamplePlayer unit, CQPlayerObject player, Criteria criteria)
    {
        if (unCompletedCriterias.ContainsKey(player) != true || completedCriterias.ContainsKey(player) != true || activeCriterias.ContainsKey(player) != true || completedOptionalCriterias.ContainsKey(player) != true)
        {
            AddPlayerToCriterias();
        }
        if (unCompletedCriterias[player].Contains(criteria)) //TODO: Some check if its in activeCriterias aswell?
        {
            ProcessCriteria(unit, player, criteria);
        }
        else if (activeOptionalCriterias[player].Contains(criteria))
        {
            ProcessOptionalCriteria(unit, player, criteria);
        }
        else if (completedCriterias[player].Contains(criteria) || completedOptionalCriterias[player].Contains(criteria))
        {
            //Criteria has already been completed by that player
        }
        else
        {
            Debug.LogWarning(criteria + " not found in any lists in " + this + ". " + criteria + " could not be completed");
        }

        EventInfoHolder tmpE = new EventInfoHolder();

        tmpE.player = player;
        tmpE.quest  = this;
        QuestHandler.TriggerEvent("UpdateQuestTracker", tmpE); //Sends out the UpdateQuestTracker event
    }
Example #4
0
    /// <summary>
    /// Run if Quest failed
    /// </summary>
    /// <param name="player">The player failing the quest</param>
    public virtual void OnFail(CQPlayerObject player)
    {
        EventInfoHolder tmpE = new EventInfoHolder();

        tmpE.quest  = this;
        tmpE.player = player;
        QuestHandler.TriggerEvent("QuestFailed", tmpE); //Sends out the QuestFailed event

        QuestHandler.Instance.availableQuests[player].Remove(this);
        playersUnCompleted.Remove(player);
        ResetCriterias(player);

        if (noSpawnIfNoPlayer == true)
        {
            if (playersUnCompleted.Count <= 0)
            {
                List <Criteria> tmpCriteria = new List <Criteria>(criterias);
                foreach (Criteria criteria in tmpCriteria)
                {
                    foreach (SpawnZone zone in criteria.spawnZones)
                    {
                        zone.DespawnQuestObjects();
                    }
                }
                StopSpawning();
            }
        }

        //TODO: Delete, if all players has failed it, and they are not allowed to try again. (OneTry == true) (List of players who failed?)

        tmpE.player = player;
        tmpE.quest  = this;
        QuestHandler.TriggerEvent("UpdateQuestTracker", tmpE); //Sends out the UpdateQuestTracker event
    }
Example #5
0
    /// <summary>
    /// Is run when this criteria fails
    /// </summary>
    public virtual void Fail(CQPlayerObject player)
    {
        EventInfoHolder tmpE = new EventInfoHolder();

        tmpE.criteria = this;
        tmpE.player   = player;
        QuestHandler.TriggerEvent("CriteriaFailed", tmpE); //Sends out the CriteriaFailed event
        quest.CriteriaFailed(player, this);
        remainingTimer.Remove(player);
    }
Example #6
0
    public static void TriggerEvent(string eventName, EventInfoHolder e)
    {
        List <UnityAction <EventInfoHolder> > thisEvent = null;

        if (Instance.EventDictonary.TryGetValue(eventName, out thisEvent))
        {
            foreach (UnityAction <EventInfoHolder> item in thisEvent)
            {
                item.Invoke(e);
            }
        }
    }
Example #7
0
 /// <summary>
 /// Give's the Reward when the player completes the quest.
 /// </summary>
 /// <param name="unit">The unit who completed the quest</param>
 /// <param name="player">The player who completed the quest</param>
 public virtual void GiveReward(CQExamplePlayer unit, CQPlayerObject player, List <Reward> rewards)
 {
     foreach (Reward reward in rewards)
     {
         EventInfoHolder tmpE = new EventInfoHolder();
         tmpE.player = player;
         tmpE.unit   = unit;
         tmpE.quest  = this;
         tmpE.reward = reward;
         QuestHandler.TriggerEvent("GiveReward", tmpE); //Sends out the QuestCompleted event
     }
 }
Example #8
0
    /// <summary>
    /// An example method for handling rewards
    /// </summary>
    /// <param name="info">Holds the info about the reward</param>
    private void GetReward(EventInfoHolder info)
    {
        switch (info.reward.type)
        {
        case rewardType.Resource:
            this.resources += info.reward.amount;
            break;

        case rewardType.Item:
            for (int i = 0; i < info.reward.amount; i++)
            {
                //This will just spawn the reward on the ground. If you wish to give it direcly, this is where you add that
                Instantiate(info.reward.rewardObject, this.transform.position, this.transform.rotation);
            }
            break;
        }
    }
Example #9
0
 /// <summary>
 /// Updates the player progress.
 /// </summary>
 /// <param name="player"></param>
 public virtual void Progress(CQPlayerObject player, CQExamplePlayer unit)
 {
     if (playerProgression.ContainsKey(player))
     {
         playerProgression[player] += 1;
         if (playerProgression[player] <= amount)
         {
             EventInfoHolder tmpE = new EventInfoHolder();
             tmpE.player   = player;
             tmpE.unit     = unit;
             tmpE.criteria = this;
             QuestHandler.TriggerEvent("CriterionProgress", tmpE); //Sends out the CriteriaProgress event
         }
         if (playerProgression[player] >= amount)
         {
             Quest.CriteriaCompleted(unit, player, this);
         }
     }
 }
Example #10
0
    /*** Public Methods ***/

    /// <summary>
    /// Tells the quest system that a quest has been discovered by a player
    /// </summary>
    /// <param name="quest">The quest discovered</param>
    /// <param name="player">The player who discovered the quest</param>
    public void QuestsDiscovered(Quest quest, CQPlayerObject player)
    {
        if (!availableQuests[player].Contains(quest))
        {
            availableQuests[player].Add(quest);
            quest.playersUnCompleted.Add(player);
            if (quest.startSpawningOnDiscover)
            {
                quest.StartSpawning(player);
            }
            if (!allQuests.Contains(quest))
            {
                allQuests.Add(quest);
            }
            quest.ResetCriterias(player);
            if (quest.timed)
            {
                if (!quest.remainingTime.ContainsKey(player))
                {
                    quest.remainingTime.Add(player, quest.time);
                }
                else
                {
                    quest.remainingTime[player] = quest.time;
                }
            }
            quest.StartCriterias();

            EventInfoHolder tmpE = new EventInfoHolder();
            tmpE.player = player;
            tmpE.quest  = quest;
            TriggerEvent("UpdateQuestTracker", tmpE); //Sends out the UpdateQuestTracker event

            if (quest.autoComplete == true && quest.criterias.Count == 0)
            {
                quest.OnCompletion(player, player.GetComponent <CQExamplePlayer>());
            }
        }
    }
Example #11
0
    /// <summary>
    /// Spawns Quest Objects
    /// </summary>
    /// <param name="questObject">The object to spawn</param>
    /// <param name="objectAmount">The amount to spawn</param>
    /// <param name="criteria">The criteria spawning them</param>
    public virtual void SpawnQuestObjects(GameObject questObject, int objectAmount, SpawnZone zone)
    {
        if (zone.spawnAreaObject)
        {
            for (int i = 0; i < objectAmount; i++)
            {
                if (zone.spawnedObjects.Count < zone.maxSpawnAmount)
                {
                    GameObject tmpObject;

                    Vector3 spawnArea = zone.spawnAreaObject.transform.position + Random.insideUnitSphere * zone.spawnRadius;
                    spawnArea.y = zone.spawnAreaObject.transform.position.y;
                    tmpObject   = Instantiate(questObject, spawnArea, zone.spawnAreaObject.transform.rotation);
                    if (tmpObject.GetComponent <QuestObject>())
                    {
                        tmpObject.GetComponent <QuestObject>().criteria = zone.Criteria;
                    }
                    else
                    {
                        tmpObject.AddComponent <QuestObject>();
                        tmpObject.GetComponent <QuestObject>().criteria = zone.Criteria;
                    }
                    zone.spawnedObjects.Add(tmpObject);

                    EventInfoHolder tmpE = new EventInfoHolder();
                    tmpE.quest      = this;
                    tmpE.gameObject = questObject;
                    tmpE.criteria   = zone.Criteria;
                    tmpE.spawnZone  = zone;
                    QuestHandler.TriggerEvent("QuestObjectSpawned", tmpE); //Sends out the QuestObjectSpawned event
                }
            }
        }
        else
        {
            Debug.Log("No spawnAreaObject on: " + zone + ". Cannot spawn questObjects");
        }
    }
Example #12
0
 /// <summary>
 /// Run this to fail a criteria
 /// </summary>
 /// <param name="critera">The criteria to fail</param>
 /// <param name="player">The player who failed this criteria</param>
 public virtual void CriteriaFailed(CQPlayerObject player, Criteria criteria)
 {
     if (unCompletedCriterias.ContainsKey(player) != true || completedCriterias.ContainsKey(player) != true || activeCriterias.ContainsKey(player) != true || completedOptionalCriterias.ContainsKey(player) != true)
     {
         AddPlayerToCriterias();
     }
     if (unCompletedCriterias[player].Contains(criteria) && activeCriterias[player].Contains(criteria))
     {
         activeCriterias[player].Remove(criteria);
         unCompletedCriterias[player].Remove(criteria);
         if (thresholds[criteria.Level] > activeCriterias[player].Count || thresholds[criteria.Level] == 0)
         {
             OnFail(player);
         }
         EventInfoHolder tmpE = new EventInfoHolder();
         tmpE.quest = this;
         QuestHandler.TriggerEvent("ResetQuestInList", tmpE); //Sends out the ResetQuestInList event
     }
     else if (activeOptionalCriterias[player].Contains(criteria))
     {
         failedOptionalCriterias[player].Add(criteria);
         activeOptionalCriterias[player].Remove(criteria);
     }
 }
Example #13
0
 /// <summary>
 /// Processes a criteria
 /// </summary>
 /// <param name="unit">The unit who completed the criteria</param>
 /// <param name="player">The player who completed the criteria</param>
 /// <param name="criteria">The criteria which is completed</param>
 public virtual void ProcessCriteria(CQExamplePlayer unit, CQPlayerObject player, Criteria criteria)
 {
     unCompletedCriterias[player].Remove(criteria);
     activeCriterias[player].Remove(criteria);
     completedCriterias[player].Add(criteria);
     if (activeCriterias[player].Count <= 0 && unCompletedCriterias[player].Count > 0)
     {
         int counter = 1;
         while (activeCriterias[player].Count <= 0)
         { //Adds the new level of criterias
             foreach (Criteria c in unCompletedCriterias[player])
             {
                 if (c.Level == criteria.Level + counter)
                 {
                     activeCriterias[player].Add(c);
                     c.StartCriteria(player);
                 }
             }
             if (matchOptionalLevels)
             {
                 activeOptionalCriterias[player].Clear();
                 foreach (Criteria c in optionalCriterias)
                 {
                     if (c.Level == criteria.Level + counter)
                     {
                         activeOptionalCriterias[player].Add(c);
                         c.StartCriteria(player);
                     }
                 }
             }
             counter++;
             if (counter > 100)
             {
                 Debug.Log("infinite loop prevented");
                 break;
             }
         }
     }
     else if (thresholds.Count > 0)          //Checks for any threshold level - Prevents errors.
     {
         if (thresholds[criteria.Level] > 0) //Ignores thresholds if its value is 0 or lower
         {                                   //Threshold logic
             int thresholdCounter = 0;
             foreach (Criteria c in completedCriterias[player])
             {
                 if (c.Level == criteria.Level)
                 {
                     thresholdCounter += 1;
                 }
             }
             if (thresholds[criteria.Level] <= thresholdCounter)
             {     //Threshold reached
                 for (int i = 0; i < activeCriterias[player].Count; i++)
                 { //Removing the rest of the activeCriterias and uncompleted criterias
                     unCompletedCriterias[player].Remove(activeCriterias[player][i]);
                     activeCriterias[player].Remove(activeCriterias[player][i]);
                 }
                 int counter = 0;
                 while (activeCriterias[player].Count <= 0)
                 { //Adds the new level of criterias
                     foreach (Criteria c in unCompletedCriterias[player])
                     {
                         if (c.Level == criteria.Level + counter)
                         {
                             activeCriterias[player].Add(c);
                             c.StartCriteria(player);
                         }
                     }
                     if (matchOptionalLevels)
                     {
                         activeOptionalCriterias[player].Clear();
                         foreach (Criteria c in optionalCriterias)
                         {
                             if (c.Level == criteria.Level + counter)
                             {
                                 activeOptionalCriterias[player].Add(c);
                                 c.StartCriteria(player);
                             }
                         }
                     }
                     counter++;
                     if (counter > 100)
                     {
                         Debug.Log("infinite loop prevented");
                         break;
                     }
                 }
             }
         }
     }
     if (activeCriterias[player].Count > 0)
     {
         EventInfoHolder tmpE = new EventInfoHolder();
         tmpE.quest = this;
         QuestHandler.TriggerEvent("ResetQuestInList", tmpE); //Sends out the ResetQuestInList event
     }
     if (autoComplete == true && activeCriterias[player].Count <= 0)
     {
         OnCompletion(player, unit);
     }
     if (CustomQuestSettings.SettingsHolder.criteriaSpecificRewards && criteria.giveRewardsOnCompletion)
     {
         GiveReward(unit, player, criteria.rewards);
     }
     criteria.Complete(player, unit);
 }
Example #14
0
    /// <summary>
    /// Run if Quest is completed
    /// </summary>
    /// <param name="player">The player completing the quest</param>
    /// <param name="unit">The unit completing the quest</param>
    public virtual void OnCompletion(CQPlayerObject player, CQExamplePlayer unit)
    {
        if (playersUnCompleted.Contains(player))
        {
            EventInfoHolder tmpE = new EventInfoHolder();
            tmpE.player = player;
            tmpE.unit   = unit;
            tmpE.quest  = this;
            QuestHandler.TriggerEvent("QuestCompleted", tmpE); //Sends out the QuestCompleted event

            List <Criteria> allCriterias = new List <Criteria>(criterias);
            allCriterias.AddRange(optionalCriterias);
            foreach (Criteria c in allCriterias)
            {
                if (c.type == criteriaType.Deliver || c.type == criteriaType.Gather)
                {
                    for (int i = unit.items.Count - 1; i >= 0; i--)
                    {
                        if (unit.items[i] != null)
                        {
                            if (unit.items[i].GetComponent <QuestObject>())
                            {
                                if (unit.items[i].GetComponent <QuestObject>().criteria == c)
                                {
                                    c.Remove(unit.items[i].gameObject);
                                    unit.items.RemoveAt(i);
                                }
                            }
                        }
                    }
                }
            }

            //Gives rewards
            GiveReward(unit, player, rewards);                                          //Standard rewards
            if (completedOptionalThreshold <= completedOptionalCriterias[player].Count) //If the player has completed enought optional objectives, gives the player the 'optional' rewards
            {
                GiveReward(unit, player, optionalRewards);                              //optional rewards
            }
            if (CustomQuestSettings.SettingsHolder.criteriaSpecificRewards)
            {
                foreach (Criteria c in completedCriterias[player])
                {
                    if (!c.giveRewardsOnCompletion)
                    {
                        GiveReward(unit, player, c.rewards); //Individual criteria rewards
                    }
                }
            }
            if (CustomQuestSettings.SettingsHolder.optionalCriteriaSpecificRewards)
            {
                foreach (Criteria c in completedOptionalCriterias[player])
                {
                    if (!c.giveRewardsOnCompletion)
                    {
                        GiveReward(unit, player, c.rewards); //Individual optional criteria rewards
                    }
                }
            }

            QuestHandler.Instance.availableQuests[player].Remove(this);
            foreach (Quest quest in questsToUnlock)
            {
                if (quest != null)
                {
                    quest.UnlockQuest(this, player);
                }
            }
            //  QuestHandler.Instance.UpdateQuestTracker();
            if (!playersCompleted.Contains(player))
            {
                playersCompleted.Add(player);
            }
            playersUnCompleted.Remove(player);

            if (noSpawnIfNoPlayer == true)
            {
                if (playersUnCompleted.Count <= 0)
                {
                    List <Criteria> tmpCriteria = new List <Criteria>(criterias);
                    tmpCriteria.AddRange(optionalCriterias);
                    foreach (Criteria criteria in tmpCriteria)
                    {
                        foreach (SpawnZone zone in criteria.spawnZones)
                        {
                            zone.DespawnQuestObjects();
                        }
                    }
                    StopSpawning();
                }
            }

            if (repeatable == false)
            {
                if (dontDelete == false)
                {
                    bool delete = true;
                    if (!singleComplete)
                    {
                        foreach (CQPlayerObject p in QuestHandler.Instance.players)
                        {
                            if (!playersCompleted.Contains(p))
                            {
                                delete = false;
                            }
                        }
                    }
                    if (delete == true)
                    {
                        QuestHandler.Instance.allQuests.Remove(this);
                        List <Criteria> tmpCriteria = new List <Criteria>(criterias);
                        tmpCriteria.AddRange(optionalCriterias);
                        foreach (Criteria criteria in tmpCriteria)
                        {
                            foreach (SpawnZone zone in criteria.spawnZones)
                            {
                                zone.DespawnQuestObjects();
                            }
                        }
                        Destroy(this.gameObject);
                    }
                }
            }
            else
            {
                //Debug.Log(repeatableTime);
                //if (repeatableTime > 0)
                //{
                List <Criteria> tmpCriteria = new List <Criteria>(criterias);
                tmpCriteria.AddRange(optionalCriterias);
                foreach (Criteria criteria in tmpCriteria)
                {
                    if (!criteria.dontDespawnObjectsWhenComplete)
                    {
                        foreach (SpawnZone zone in criteria.spawnZones)
                        {
                            zone.DespawnQuestObjects();
                        }
                    }
                }
                if (!remainingRepeatableTime.ContainsKey(player))
                {
                    remainingRepeatableTime.Add(player, repeatableTime);
                }
                else
                {
                    remainingRepeatableTime[player] = repeatableTime;
                }
                tmpE.quest = this;
                QuestHandler.TriggerEvent("ResetQuestInList", tmpE); //Sends out the ResetQuestInList event
                //}
                tmpE.player = player;
                tmpE.quest  = this;
                QuestHandler.TriggerEvent("UpdateQuestTracker", tmpE); //Sends out the UpdateQuestTracker event
            }
        }
    }