예제 #1
0
        private void OnSelectOption(string displayName)
        {
            string     name       = NpcHandler.Dictionary[displayName];
            NpcHandler npcHandler = new NpcHandler(name);

            if (npcHandler.Target != null)
            {
                if (Config.AllowQuestSubmissions)
                {
                    QuestHandler questHandler = new QuestHandler(this);
                    questHandler.FindOneAndUpdate(npcHandler, itemHandler);

                    if (UseDefaultAction)
                    {
                        ProcessGift(npcHandler);
                    }
                }
                else
                {
                    ProcessGift(npcHandler);
                }

                Exit();
            }
        }
예제 #2
0
        public AstrumClient()
        {
            ViewModel = new MainWindowViewModel();
            ViewModel.PropertyChanged += ViewModel_PropertyChanged;

            _questHandler       = new QuestHandler(this);
            _raidHandler        = new RaidHandler(this);
            _furyRaidHandler    = new FuryRaidHandler(this);
            _limitedRaidHandler = new LimitedRaidHandler(this);
            _breedingHandler    = new BreedingHandler(this);
            _guildBattleHandler = new GuildBattleHandler(this);
            _mypageHandler      = new MypageHandler(this);
            _giftHandler        = new GiftHandler(this);
            _itemHandler        = new ItemHandler(this);
            _gachaHandler       = new GachaHandler(this);
            _trainingHandler    = new TraningHandler(this);
            _specialAreaHandler = new SpecialAreaHandler(this);
            _talkHandler        = new TalkHandler(this);

            ViewModel.IsQuestEnable       = true;
            ViewModel.IsGuildBattleEnable = false;
            ViewModel.IsSpecialAreaEnable = false;

            ViewModel.MinStaminaStock = DEFAULT_STOCK;
            ViewModel.MinBpStock      = DEFAULT_STOCK;
            ViewModel.KeepStamina     = DEFAULT_KEEP_STAMINA;

            ViewModel.BaseDamage = DEFAULT_BASE_DAMAGE;
        }
예제 #3
0
        protected override void ExecuteRequest(HttpContext context)
        {
            (bool isOk, User user) = CheckClaimsForUser(Request, context, _userRepository);
            if (!isOk || user == null)
            {
                return;
            }

            IEnumerable <Quest> quests = _questRepository.Get(user, _questTypeRepository, QuestState.InProgress).GetAwaiter().GetResult();

            foreach (Quest quest in quests)
            {
                QuestHandler questHandler = QuestHandlers.Create(quest, user, _questTypeRepository);
                if (questHandler != null)
                {
                    switch (questHandler.Update(Request))
                    {
                    case QuestState.InProgress:
                        break;

                    case QuestState.Failed:
                        break;

                    case QuestState.Finished:
                        break;

                    default:
                        break;
                    }
                    _questRepository.Update(quest).GetAwaiter().GetResult();
                }
            }
            context.Response.StatusCode = StatusCodes.Status200OK;
        }
예제 #4
0
    public void RpcTurnStart()
    {
        if (hasAuthority)
        {
            foreach (FollowerMovement f in GameObject.FindObjectsOfType <FollowerMovement>())
            {
                f.rooted = false;
            }
            SupplyData sD = GameObject.FindObjectOfType <SupplyData>();
            sD.gold += sD.workers;
            sD.food  = Mathf.Clamp(sD.food, 0, sD.food - (int)Mathf.Ceil((sD.fighters + sD.workers) / 4));
            if (sD.food < 0)
            {
                sD.fighters = Mathf.Clamp(sD.fighters, 0, sD.fighters - 1);
            }
        }
        foreach (Building b in GameObject.FindObjectsOfType <Building>())
        {
            b.OnTurnStart();
        }
        int roll = Random.Range(0, 99);

        if (hasAuthority && Random.Range(0, 99) >= 0)
        {
            FightManager.i.StartFight(5);
        }
        else if (hasAuthority && Random.Range(0, 99) >= 1000)
        {
            QuestHandler qH = GameObject.FindObjectOfType <QuestHandler>();
            qH.SelectQuest();
        }
    }
예제 #5
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
    }
예제 #6
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
    }
예제 #7
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");
     }
 }
예제 #8
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;
                }
            }
        }
    }
예제 #9
0
 // Use this for initialization
 void Start()
 {
     phone    = GameObject.FindGameObjectWithTag("Phone").transform.GetChild(0).gameObject;
     listPage = transform.Find("List Screen");
     fullPage = transform.Find("Full Screen Quest");
     handler  = GameObject.Find("GameManager").GetComponent <QuestHandler>();
     Clear();
 }
예제 #10
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);
    }
    void Start()
    {
        questHandler        = GetComponentInParent <QuestHandler>();
        leftTransform       = new Vector3(-2 * xOffset, 0, 0);
        rightTransform      = new Vector3(2 * xOffset, 0, 0);
        availableCharacters = questHandler.GetAvailableAdventurers();
        arrayTail           = 0;

        InstantiateImages();
        SetSelectedCharacter();
    }
예제 #12
0
            public override void Process(CmdTrigger <RealmServerCmdArgs> trigger)
            {
                QuestInvalidReason reason = trigger.Text.NextEnum(QuestInvalidReason.Ok);
                Character          target = trigger.Args.Character.Target as Character;

                if (target != null)
                {
                    QuestHandler.SendQuestInvalid(target, reason);
                }
                trigger.Reply("Done.");
            }
예제 #13
0
            public override void Process(CmdTrigger <RealmServerCmdArgs> trigger)
            {
                QuestPushResponse qpr    = trigger.Text.NextEnum(QuestPushResponse.Busy);
                Character         target = trigger.Args.Character.Target as Character;

                if (target != null)
                {
                    QuestHandler.SendQuestPushResult(trigger.Args.Character, qpr, target);
                }
                trigger.Reply("Done.");
            }
예제 #14
0
 public void UpdateStatus()
 {
     if (this.CheckCompletedStatus())
     {
         this.m_Log.Owner.SetQuestState(this.Slot, QuestCompleteStatus.Completed);
         QuestHandler.SendQuestUpdateComplete(this.m_Log.Owner, this.Template.Id);
     }
     else
     {
         this.m_Log.Owner.SetQuestState(this.Slot, QuestCompleteStatus.NotCompleted);
     }
 }
예제 #15
0
 public void UpdateStatus()
 {
     if (CheckCompletedStatus())
     {
         m_Log.Owner.SetQuestState(Slot, QuestCompleteStatus.Completed);
         QuestHandler.SendQuestUpdateComplete(m_Log.Owner, Template.Id);
     }
     else
     {
         m_Log.Owner.SetQuestState(Slot, QuestCompleteStatus.NotCompleted);
     }
 }
예제 #16
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
     }
 }
예제 #17
0
        /// <summary>
        /// Tries to hand out the rewards, archives this quest and sends details about the next quest in the chain (if any).
        /// </summary>
        /// <param name="qHolder"></param>
        /// <param name="rewardSlot"></param>
        public bool TryFinish(IQuestHolder qHolder, uint rewardSlot)
        {
            Character owner = m_Log.Owner;

            owner.OnInteract(qHolder as WorldObject);
            if (qHolder is WorldObject &&
                !owner.IsInRadius((WorldObject)qHolder, NPCMgr.DefaultInteractionDistance))
            {
                NPCHandler.SendNPCError(owner, qHolder,
                                        VendorInventoryError.TooFarAway);
                return(false);
            }

            if (!Template.TryGiveRewards(m_Log.Owner, qHolder, rewardSlot))
            {
                return(false);
            }
            ArchiveQuest();
            QuestHandler.SendComplete(Template, owner);
            if (Template.FollowupQuestId != 0U)
            {
                QuestTemplate template = QuestMgr.GetTemplate(Template.FollowupQuestId);
                if (template != null && qHolder.QuestHolderInfo.QuestStarts.Contains(template))
                {
                    QuestHandler.SendDetails(qHolder, template, owner, true);
                    if (template.Flags.HasFlag(QuestFlags.AutoAccept))
                    {
                        owner.QuestLog.TryAddQuest(template, qHolder);
                    }
                }
            }

            if (!Template.Repeatable)
            {
                owner.Achievements.CheckPossibleAchievementUpdates(AchievementCriteriaType.CompleteQuestCount, 1U, 0U,
                                                                   null);
                owner.Achievements.CheckPossibleAchievementUpdates(AchievementCriteriaType.CompleteQuest,
                                                                   Entry, 0U, null);
                if (Template.ZoneTemplate != null)
                {
                    owner.Achievements.CheckPossibleAchievementUpdates(AchievementCriteriaType.CompleteQuestsInZone,
                                                                       (uint)Template.ZoneTemplate.Id, 0U, null);
                }
            }

            if (Template.IsDaily)
            {
                owner.Achievements.CheckPossibleAchievementUpdates(AchievementCriteriaType.CompleteDailyQuest, 1U, 0U,
                                                                   null);
            }
            return(true);
        }
예제 #18
0
        void UpdateInteractionCount(Quest quest, QuestInteractionTemplate interaction, WorldObject obj)
        {
            var count = quest.Interactions[interaction.Index];

            if (count < interaction.Amount)
            {
                ++quest.Interactions[interaction.Index];
                m_Owner.SetQuestCount(quest.Slot, interaction.Index, (byte)(count + 1));
                QuestHandler.SendUpdateInteractionCount(quest, obj, interaction, count + 1, m_Owner);
                quest.UpdateStatus();
            }
            //quest.Template.NotifyGOUsed(quest, go);
        }
예제 #19
0
파일: Quest.cs 프로젝트: NecroSharper/WCell
        /// <summary>
        /// Tries to hand out the rewards, archives this quest and sends details about the next quest in the chain (if any).
        /// </summary>
        /// <param name="qHolder"></param>
        /// <param name="rewardSlot"></param>
        public bool TryFinish(IQuestHolder qHolder, uint rewardSlot)
        {
            var chr = m_Log.Owner;

            chr.OnInteract(qHolder as WorldObject);

            if (qHolder is WorldObject && !chr.IsInRadius((WorldObject)qHolder, NPCMgr.DefaultInteractionDistance))
            {
                NPCHandler.SendNPCError(chr, qHolder, VendorInventoryError.TooFarAway);
                return(false);
            }

            if (Template.TryGiveRewards(m_Log.Owner, qHolder, rewardSlot))
            {
                ArchiveQuest();
                QuestHandler.SendComplete(Template, chr);

                if (Template.FollowupQuestId != 0)
                {
                    var nq = QuestMgr.GetTemplate(Template.FollowupQuestId);
                    if (nq != null && qHolder.QuestHolderInfo.QuestStarts.Contains(nq))
                    {
                        // Offer the next Quest if its also offered by the same QuestGiver
                        QuestHandler.SendDetails(qHolder, nq, chr, true);
                        if (nq.Flags.HasFlag(QuestFlags.AutoAccept))
                        {
                            chr.QuestLog.TryAddQuest(nq, qHolder);
                        }
                    }
                }

                if (!Template.Repeatable)
                {
                    chr.Achievements.CheckPossibleAchievementUpdates(AchievementCriteriaType.CompleteQuestCount, 1);
                    chr.Achievements.CheckPossibleAchievementUpdates(AchievementCriteriaType.CompleteQuest, Entry);
                    if (Template.ZoneTemplate != null)
                    {
                        chr.Achievements.CheckPossibleAchievementUpdates(AchievementCriteriaType.CompleteQuestsInZone,
                                                                         (uint)Template.ZoneTemplate.Id);
                    }
                }

                if (Template.IsDaily)
                {
                    chr.Achievements.CheckPossibleAchievementUpdates(AchievementCriteriaType.CompleteDailyQuest, 1);
                }

                return(true);
            }
            return(false);
        }
예제 #20
0
        private void UpdateInteractionCount(Quest quest, QuestInteractionTemplate interaction, WorldObject obj)
        {
            uint interaction1 = quest.Interactions[interaction.Index];

            if ((long)interaction1 >= (long)interaction.Amount)
            {
                return;
            }
            ++quest.Interactions[interaction.Index];
            this.m_Owner.SetQuestCount(quest.Slot, interaction.Index, (ushort)(byte)(interaction1 + 1U));
            QuestHandler.SendUpdateInteractionCount(quest, (ObjectBase)obj, interaction, interaction1 + 1U,
                                                    this.m_Owner);
            quest.UpdateStatus();
        }
예제 #21
0
 void Awake()
 {
     if (questHandler == null)
     {
         DontDestroyOnLoad(gameObject);
         questHandler = this;
         LoadIsActiveComplet();
         SetTheQuestsVar();
     }
     else if (questHandler != this)
     {
         Destroy(gameObject);
     }
 }
예제 #22
0
        private void UpdateInteractionCount(Quest quest, QuestInteractionTemplate interaction, WorldObject obj)
        {
            uint interaction1 = quest.Interactions[interaction.Index];

            if (interaction1 >= interaction.Amount)
            {
                return;
            }
            ++quest.Interactions[interaction.Index];
            m_Owner.SetQuestCount(quest.Slot, interaction.Index, (byte)(interaction1 + 1U));
            QuestHandler.SendUpdateInteractionCount(quest, obj, interaction, interaction1 + 1U,
                                                    m_Owner);
            quest.UpdateStatus();
        }
예제 #23
0
            public override void Process(CmdTrigger <RealmServerCmdArgs> trigger)
            {
                var qt = QuestMgr.GetTemplate(trigger.Text.NextUInt());

                if (qt != null)
                {
                    var questReceiver = trigger.Args.Character.Target as Character;
                    if (questReceiver != null)
                    {
                        QuestHandler.SendComplete(qt, questReceiver);
                    }
                }
                trigger.Reply("Done.");
            }
예제 #24
0
    private static void createNewPlayerData(string username)
    {
        var data = new PlayerData
        {
            username    = username,
            model_name  = "LocalPlayer",
            scene_id    = 1,
            position    = new Vector3(125f, 1.5f, 125f),
            hitpoints   = 100,
            questStates = JObject.FromObject(QuestHandler.GetQuestsList()).ToString()
        };

        System.IO.File.WriteAllText(System.IO.Path.Combine(save_path, $"{username}.json"), JsonUtility.ToJson(data));
    }
예제 #25
0
    // Start is called before the first frame update
    void Start()
    {
        if (questHandler == null)
        {
            questHandler = this;
            DontDestroyOnLoad(this);
        }
        else
        {
            Destroy(this.gameObject);
            return;
        }

        MakeQuests();
    }
예제 #26
0
    // Start is called before the first frame update
    void Start()
    {
        questHandler    = this.GetComponent <QuestHandler>();
        saveLoadHandler = this.GetComponent <SaveLoadHandler>();

        if (locationParent != null)
        {
            for (int i = 0; i < locationParent.childCount; i++)
            {
                GameObject location = locationParent.GetChild(i).gameObject;
                locations.Add(location);
            }
        }
        //Debug.Log("Locations: " + locations.Count);
    }
예제 #27
0
            public override void Process(CmdTrigger <RealmServerCmdArgs> trigger)
            {
                QuestTemplate template = QuestMgr.GetTemplate(trigger.Text.NextUInt());

                if (template != null)
                {
                    Character target = trigger.Args.Character.Target as Character;
                    if (target != null)
                    {
                        QuestHandler.SendComplete(template, target);
                    }
                }

                trigger.Reply("Done.");
            }
예제 #28
0
            public override void Process(CmdTrigger <RealmServerCmdArgs> trigger)
            {
                var qt = QuestMgr.GetTemplate(trigger.Text.NextUInt());

                if (qt != null)
                {
                    var questGiver    = trigger.Args.Character as IQuestHolder;
                    var questReceiver = (Character)trigger.Args.Character.Target;
                    if (questGiver != null)
                    {
                        QuestHandler.SendDetails(questGiver, qt, questReceiver, false);
                    }
                }
                trigger.Reply("Done.");
            }
예제 #29
0
        /// <summary>
        /// Is called when the owner of this QuestLog receives or looses the given amount of Items
        /// </summary>
        /// <param name="item"></param>
        internal void OnItemAmountChanged(Item item, int delta)
        {
            for (int index1 = 0; index1 < this.m_RequireItemsQuests.Count; ++index1)
            {
                Quest requireItemsQuest = this.m_RequireItemsQuests[index1];
                for (int index2 = 0; index2 < requireItemsQuest.Template.CollectableItems.Length; ++index2)
                {
                    Asda2ItemStackDescription collectableItem = requireItemsQuest.Template.CollectableItems[index2];
                    if (collectableItem.ItemId == item.Template.ItemId)
                    {
                        int  collectedItem = requireItemsQuest.CollectedItems[index2];
                        int  num           = collectedItem + delta;
                        bool flag          = collectedItem < collectableItem.Amount || num < collectableItem.Amount;
                        requireItemsQuest.CollectedItems[index2] = num;
                        if (flag)
                        {
                            QuestHandler.SendUpdateItems(item.Template.ItemId, delta, this.m_Owner);
                            requireItemsQuest.UpdateStatus();
                            break;
                        }

                        break;
                    }
                }

                for (int index2 = 0; index2 < requireItemsQuest.Template.CollectableSourceItems.Length; ++index2)
                {
                    Asda2ItemStackDescription collectableSourceItem =
                        requireItemsQuest.Template.CollectableSourceItems[index2];
                    if (collectableSourceItem.ItemId == item.Template.ItemId)
                    {
                        int  collectedSourceItem = requireItemsQuest.CollectedSourceItems[index2];
                        int  num  = collectedSourceItem + delta;
                        bool flag = collectedSourceItem < collectableSourceItem.Amount ||
                                    num < collectableSourceItem.Amount;
                        requireItemsQuest.CollectedSourceItems[index2] = num;
                        if (flag)
                        {
                            QuestHandler.SendUpdateItems(item.Template.ItemId, delta, this.m_Owner);
                            requireItemsQuest.UpdateStatus();
                            break;
                        }

                        break;
                    }
                }
            }
        }
예제 #30
0
            public override void Process(CmdTrigger <RealmServerCmdArgs> trigger)
            {
                QuestTemplate template = QuestMgr.GetTemplate(trigger.Text.NextUInt());

                if (template != null)
                {
                    IQuestHolder character = trigger.Args.Character as IQuestHolder;
                    Character    target    = (Character)trigger.Args.Character.Target;
                    if (character != null)
                    {
                        QuestHandler.SendDetails(character, template, target, false);
                    }
                }

                trigger.Reply("Done.");
            }