Пример #1
0
    private void questDataReturned(SignedResponse <QuestStateCollection> data)
    {
        if (clubPenguinClient.GameServer.CurrentRoom() == null)
        {
            PendingQuestUpdateEvent item = default(PendingQuestUpdateEvent);
            item.eventType = EventType.SYNC_WITH_GAME_SERVER;
            item.syncData  = data;
            requests.Enqueue(item);
            processingRequest = false;
            return;
        }
        clubPenguinClient.GameServer.QuestSetQuestState(data);
        QuestStateCollection questStateCollection = new QuestStateCollection();

        questStateCollection.AddRange(data.Data);
        QuestStateCollection questStateCollection2 = new QuestStateCollection();

        foreach (PendingQuestUpdateEvent request in requests)
        {
            PendingQuestUpdateEvent current = request;
            switch (current.eventType)
            {
            case EventType.STATUS_UPDATE:
                for (int i = 0; i < questStateCollection.Count; i++)
                {
                    if (questStateCollection[i].questId == current.questId)
                    {
                        questStateCollection[i].status = current.status;
                        if (current.status == QuestStatus.COMPLETED)
                        {
                            questStateCollection2.Add(questStateCollection[i]);
                        }
                    }
                }
                break;

            case EventType.PROGRESS_UPDATE:
                for (int i = 0; i < questStateCollection.Count; i++)
                {
                    if (questStateCollection[i].status == QuestStatus.ACTIVE)
                    {
                        if (questStateCollection[i].completedObjectives == null)
                        {
                            questStateCollection[i].completedObjectives = new QuestObjectives();
                        }
                        questStateCollection[i].completedObjectives.Add(current.objective);
                        break;
                    }
                }
                break;
            }
        }
        for (int i = 0; i < questStateCollection2.Count; i++)
        {
            questStateCollection.Remove(questStateCollection2[i]);
        }
        Service.Get <EventDispatcher>().DispatchEvent(new QuestServiceEvents.QuestStatesRecieved(questStateCollection));
    }
Пример #2
0
        public void CompleteObjective(string objective)
        {
            PendingQuestUpdateEvent item = default(PendingQuestUpdateEvent);

            item.eventType = EventType.PROGRESS_UPDATE;
            item.objective = objective;
            requests.Enqueue(item);
            processRequest();
        }
Пример #3
0
        public void SetStatus(string questId, QuestStatus status)
        {
            PendingQuestUpdateEvent item = default(PendingQuestUpdateEvent);

            item.eventType = EventType.STATUS_UPDATE;
            item.status    = status;
            item.questId   = questId;
            requests.Enqueue(item);
            processRequest();
        }
Пример #4
0
        private IEnumerator processRequestTimeOut(PendingQuestUpdateEvent lastRequest)
        {
            yield return(new WaitForSeconds(35f));

            if (processingRequest)
            {
                Log.LogErrorFormatted(this, "QuestService process request timeout \neventType: {0} \nstatus: {1} \nquestId: {2} \nobjective: {3}", lastRequest.eventType, lastRequest.status, lastRequest.questId, lastRequest.objective);
                processingRequest = false;
                processRequest();
            }
        }
Пример #5
0
        private void processRequest()
        {
            if (!processingRequest && requests.Count > 0 && clubPenguinClient.GameServer.CurrentRoom() != null)
            {
                CoroutineRunner.StopAllForOwner(this);
                PendingQuestUpdateEvent lastRequest = requests.Dequeue();
                processingRequest = true;
                switch (lastRequest.eventType)
                {
                case EventType.STATUS_UPDATE:
                    setStatus(lastRequest.questId, lastRequest.status);
                    break;

                case EventType.PROGRESS_UPDATE:
                    completeObjective(lastRequest.objective);
                    break;

                case EventType.SYNC_WITH_GAME_SERVER:
                    questDataReturned(lastRequest.syncData);
                    break;
                }
                CoroutineRunner.Start(processRequestTimeOut(lastRequest), this, "ProcessRequestTimeout");
            }
        }