// -----------------------------------------------------------------------------------
 // UCE_CanAcceptQuest
 // -----------------------------------------------------------------------------------
 public bool UCE_CanAcceptQuest(UCE_ScriptableQuest quest)
 {
     return(UCE_quests.Count(q => !q.completed) < activeQuestLimit &&
            quest.questRequirements.checkRequirements(this) &&
            UCE_CanRestartQuest(quest)
            );
 }
    public void Cmd_UCE_CompleteQuest(int npcQuestIndex)
    {
        if (state == "IDLE" &&
            isAlive &&
            target != null &&
            target.isAlive &&
            target is Npc &&
            0 <= npcQuestIndex && npcQuestIndex < ((Npc)target).UCE_quests.Length &&
            Utils.ClosestDistance(collider, target.collider) <= interactionRange)
        {
            UCE_ScriptableQuest npcQuest = ((Npc)target).UCE_quests[npcQuestIndex];
            int index = UCE_GetQuestIndexByName(npcQuest.name);

            UCE_FinishQuest(index);
        }
    }
    public void Cmd_UCE_AcceptQuest(int npcQuestIndex)
    {
        if (state == "IDLE" &&
            target != null &&
            isAlive &&
            target.isAlive &&
            target is Npc &&
            0 <= npcQuestIndex && npcQuestIndex < ((Npc)target).UCE_quests.Length &&
            Utils.ClosestDistance(collider, target.collider) <= interactionRange &&
            UCE_CanAcceptQuest(((Npc)target).UCE_quests[npcQuestIndex]))
        {
            int idx = UCE_GetQuestIndexByName(((Npc)target).UCE_quests[npcQuestIndex].name);

            if (idx == -1)
            {
                UCE_ScriptableQuest quest = ((Npc)target).UCE_quests[npcQuestIndex];
                UCE_quests.Add(new UCE_Quest(quest));

                // -- accept items
                if (quest.acceptItems != null && quest.acceptItems.Length > 0)
                {
                    foreach (UCE_rewardItem rewardItem in quest.acceptItems)
                    {
                        InventoryAdd(new Item(rewardItem.item), rewardItem.amount);
                    }
                }
            }
            else
            {
                UCE_Quest quest = UCE_quests[idx];
                quest.resetQuest();
                quest.completedAgain = false;
                quest.lastCompleted  = "";
                UCE_quests[idx]      = quest;

                // -- accept items
                if (quest.acceptItems != null && quest.acceptItems.Length > 0)
                {
                    foreach (UCE_rewardItem rewardItem in quest.acceptItems)
                    {
                        InventoryAdd(new Item(rewardItem.item), rewardItem.amount);
                    }
                }
            }
        }
    }
Ejemplo n.º 4
0
 // -------------------------------------------------------------------------------
 // UCE_Quest (Constructor)
 // -------------------------------------------------------------------------------
 public UCE_Quest(UCE_ScriptableQuest data)
 {
     hash            = data.name.GetStableHashCode();
     completed       = false;
     completedAgain  = false;
     pvpedTarget     = new int[10];
     killedTarget    = new int[10];
     gatheredTarget  = new int[10];
     harvestedTarget = new int[10];
     visitedTarget   = new int[10];
     craftedTarget   = new int[10];
     lootedTarget    = new int[10];
     visitedCount    = 0;
     lastCompleted   = "";
     counter         = 0;
     _tooltipCache   = "";
     _tooltipTimer   = 0;
 }
    // -----------------------------------------------------------------------------------
    // UCE_CanRestartQuest
    // -----------------------------------------------------------------------------------
    public bool UCE_CanRestartQuest(UCE_ScriptableQuest quest)
    {
        int idx = UCE_GetQuestIndexByName(quest.name);

        if (idx == -1)
        {
            return(true);
        }

        UCE_Quest tmp_quest = UCE_quests[idx];

        if (UCE_CanCompleteQuest(quest.name) ||
            UCE_HasActiveQuest(quest.name) ||
            quest.repeatable <= 0 ||
            (quest.repeatable > 0 && tmp_quest.getLastCompleted() < tmp_quest.repeatable && tmp_quest.completedAgain)
            )
        {
            return(false);
        }

        return(true);
    }