Esempio n. 1
0
        public static void AttackResponse(int index, int Character_ID, NPC npc, int Damage)
        {
            try
            {
                ByteBuffer.ByteBuffer buffer = new ByteBuffer.ByteBuffer();
                BuildBasePacket((int)ClientSendPacketNumbers.AttackResponse, ref buffer);
                buffer.WriteString(DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss"));

                buffer.WriteInteger(Character_ID);
                buffer.WriteInteger(npc.Entity_ID);
                buffer.WriteInteger(Damage);
                buffer.WriteInteger(npc.Current_HP);
                Quest_Log ql = World.instance.GetQuestLogByNPCID(Character_ID, npc.NPC_ID);
                if (ql != null && npc.Current_HP <= 0)
                {
                    ql.Increment();
                    buffer.WriteByte(1);
                    buffer.WriteInteger(ql.Quest_ID);
                    buffer.WriteInteger(ql.ObjectiveProgress);
                    buffer.WriteInteger((int)ql.Status);
                }
                else
                {
                    buffer.WriteByte(0);
                }

                Log.log("Sending Attack Response packet to client..", Log.LogType.SENT);
                sendData(ConnectionType.CLIENT, ClientSendPacketNumbers.AttackResponse.ToString(), index, buffer.ToArray());
            }
            catch (Exception e)
            {
                Log.log("Building Attack Response packet failed. > " + e.Message, Log.LogType.ERROR);
                return;
            }
        }
Esempio n. 2
0
        public void UpdateQuestLog(int Character_ID)
        {
            List <Quest_Log> QuestLog    = GetQuestLog(Character_ID);
            List <Quest>     ToBeChecked = new List <Quest>();
            bool             found       = false;

            foreach (KeyValuePair <int, Quest> q in quests)
            {
                found = false;
                foreach (Quest_Log ql in QuestLog)
                {
                    if (ql.Quest_ID == q.Value.ID)
                    {
                        found = true;
                    }
                }
                if (!found)
                {
                    ToBeChecked.Add(q.Value);
                }
            }
            foreach (Quest quest in ToBeChecked)
            {
                Quest_Log QL = GetQuestLog(Character_ID, quest.Start_Requirement_Quest_ID);
                if ((QL != null && QL.Status == QuestStatus.Complete) || quest.Start_Requirement_Quest_ID == -1)
                {
                    Quest_Log quest_Log = new Quest_Log(-1, Character_ID, quest.ID, QuestStatus.Available, 0);
                    World.instance.quest_log.Add(quest_Log);
                    SendData.CreateQuestLog(quest_Log);
                }
            }
        }
Esempio n. 3
0
        public static void CollectableInteractConfirm(int index, Collectable col, Quest_Log ql = null)
        {
            try
            {
                ByteBuffer.ByteBuffer buffer = new ByteBuffer.ByteBuffer();
                BuildBasePacket((int)ClientSendPacketNumbers.CollectableInteractConfirm, ref buffer);
                buffer.WriteString(DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss"));

                buffer.WriteInteger(col.Entity_ID);
                buffer.WriteByte(col.Active ? (byte)1 : (byte)0);
                if (ql != null)
                {
                    buffer.WriteByte(1);
                    buffer.WriteInteger(ql.Quest_ID);
                    buffer.WriteInteger(ql.ObjectiveProgress);
                    buffer.WriteInteger((int)ql.Status);
                }
                else
                {
                    buffer.WriteByte(0);
                }

                Log.log("Sending Collectable Interaction Confirm packet to client..", Log.LogType.SENT);
                sendData(ConnectionType.CLIENT, ClientSendPacketNumbers.CollectableInteractConfirm.ToString(), index, buffer.ToArray());
            }
            catch (Exception e)
            {
                Log.log("Building Collectable Interaction Confirm packet failed. > " + e.Message, Log.LogType.ERROR);
                return;
            }
        }
Esempio n. 4
0
        private static void RequestQuest(ConnectionType type, int index, byte[] data)
        {
            ByteBuffer.ByteBuffer buffer = new ByteBuffer.ByteBuffer();
            buffer.WriteBytes(data);
            ReadHeader(ref buffer);
            int Character_ID = buffer.ReadInteger();
            int NPC_ID       = buffer.ReadInteger();

            if (MathF.Distance(World.instance.players[Character_ID], World.instance.GetNPCByEntityID(NPC_ID)) <= World.InteractionDistance)
            {
                World.instance.UpdateQuestLog(Character_ID);
                bool        Create = false;
                QuestReturn qr     = World.instance.GetQuestContentByNPCEntityID(Character_ID, NPC_ID, out Create);
                Quest_Log   ql     = null;
                if (Create)
                {
                    ql = new Quest_Log(-1, Character_ID, qr.Quest_ID, QuestStatus.Available, 0);
                    World.instance.quest_log.Add(ql);
                    SendData.CreateQuestLog(ql);
                }
                else
                {
                    ql = World.instance.GetQuestLog(Character_ID, qr.Quest_ID);
                }
                if (ql != null)
                {
                    SendData.QuestReturn(index, qr, ql.Quest_Log_ID);
                }
            }
        }
Esempio n. 5
0
        private static void NewQuestLog(ConnectionType type, int index, byte[] data)
        {
            ByteBuffer.ByteBuffer buffer = new ByteBuffer.ByteBuffer();
            buffer.WriteBytes(data);
            ReadHeader(ref buffer);
            int       Character_ID = buffer.ReadInteger();
            int       Quest_ID     = buffer.ReadInteger();
            int       Quest_Log_ID = buffer.ReadInteger();
            Quest_Log ql           = World.instance.GetQuestLog(Character_ID, Quest_ID);

            if (ql != null)
            {
                ql.Quest_Log_ID = Quest_Log_ID;
            }
        }
Esempio n. 6
0
        public static void CreateQuestLog(Quest_Log ql)
        {
            try
            {
                ByteBuffer.ByteBuffer buffer = new ByteBuffer.ByteBuffer();
                BuildBasePacket((int)SyncServerSendPacketNumbers.CreateQuestLog, ref buffer);
                buffer.WriteInteger(ql.Quest_ID);
                buffer.WriteInteger(ql.Character_ID);
                buffer.WriteInteger(ql.ObjectiveProgress);
                buffer.WriteInteger((int)ql.Status);

                sendData(ConnectionType.SYNCSERVER, SyncServerSendPacketNumbers.UpdatePlayerData.ToString(), -1, buffer.ToArray());
            }
            catch (Exception e)
            {
                Log.log("Building Create Quest Log packet failed. > " + e.Message, Log.LogType.ERROR);
            }
        }
Esempio n. 7
0
        private static void CollectableInteract(ConnectionType type, int index, byte[] data)
        {
            ByteBuffer.ByteBuffer buffer = new ByteBuffer.ByteBuffer();
            buffer.WriteBytes(data);
            ReadHeader(ref buffer);
            int         Character_ID  = buffer.ReadInteger();
            int         Col_Entity_ID = buffer.ReadInteger();
            Collectable col           = World.instance.GetCollectableByEntityID(Col_Entity_ID);

            if (col != null && col.Active && MathF.Distance(World.instance.players[Character_ID], col) <= World.InteractionDistance)
            {
                col.Active = false;
                Quest_Log quest_Log = World.instance.GetQuest_Log(Character_ID, col.Collectable_ID);
                if (quest_Log != null)
                {
                    quest_Log.Increment();
                }
                SendData.CollectableInteractConfirm(index, col, quest_Log);
            }
        }
Esempio n. 8
0
        private static void QuestInteract(ConnectionType type, int index, byte[] data)
        {
            ByteBuffer.ByteBuffer buffer = new ByteBuffer.ByteBuffer();
            buffer.WriteBytes(data);
            ReadHeader(ref buffer);
            int Character_ID = buffer.ReadInteger();
            int NPC_ID       = buffer.ReadInteger();

            if (MathF.Distance(World.instance.players[Character_ID], World.instance.GetNPCByEntityID(NPC_ID)) <= World.InteractionDistance)
            {
                World.instance.UpdateQuestLog(Character_ID);
                bool        Create = false;
                QuestReturn qr     = World.instance.GetQuestContentByNPCEntityID(Character_ID, NPC_ID, out Create);
                Quest_Log   ql     = null;
                ql = World.instance.GetQuestLog(Character_ID, qr.Quest_ID);
                if (qr.Null != true && ql != null)
                {
                    switch (qr.Status)
                    {
                    case QuestStatus.None:
                        break;

                    case QuestStatus.InProgress:
                        if (ql.ObjectiveProgress >= qr.Target)
                        {
                            World.instance.GetQuestLog(Character_ID, qr.Quest_ID).Status = QuestStatus.Finished;
                            qr = World.instance.GetQuestContentByNPCEntityID(Character_ID, NPC_ID, out Create);
                            SendData.QuestInteractConfirm(index, true, ql.Status, qr.NPC_ID, ql.Quest_ID);
                            SendData.UpdateQuestLog(ql);
                        }
                        else
                        {
                            SendData.QuestInteractConfirm(index, false);
                        }
                        break;

                    case QuestStatus.Complete:
                        SendData.QuestInteractConfirm(index, false);
                        break;

                    case QuestStatus.Finished:
                        World.instance.GetQuestLog(Character_ID, qr.Quest_ID).Status = QuestStatus.Complete;
                        qr = World.instance.GetQuestContentByNPCEntityID(Character_ID, NPC_ID, out Create);
                        SendData.QuestInteractConfirm(index, true, ql.Status, qr.NPC_ID, ql.Quest_ID);
                        SendData.UpdateQuestLog(ql);
                        if (World.instance.players.ContainsKey(Character_ID))
                        {
                            World.instance.players[Character_ID].experience += World.instance.quests[ql.Quest_ID].Experience;
                        }
                        // Get the next quest in the series
                        List <Quest> q = World.instance.GetAvailableQuests(Character_ID);
                        if (q != null && q.Count > 0)
                        {
                            foreach (Quest qu in q)
                            {
                                // Create a new quest log for it
                                Quest_Log newql = new Quest_Log(-1, Character_ID, qu.ID, QuestStatus.Available, 0);
                                // Update the synchronization server
                                SendData.CreateQuestLog(newql);
                                // Notify the client that a new quest is available
                                SendData.UpdateQuestLog(index, qu.ID, newql.Quest_Log_ID, World.instance.GetNPCEntityID(qu.NPC_Start_ID), newql.Status, newql.ObjectiveProgress, qu.Objective_Target);
                            }
                        }
                        break;

                    case QuestStatus.Available:
                        if (qr.Target == -1)
                        {
                            World.instance.GetQuestLog(Character_ID, qr.Quest_ID).Status = QuestStatus.Finished;
                            qr = World.instance.GetQuestContentByNPCEntityID(Character_ID, NPC_ID, out Create);
                            World.instance.UpdateQuestLog(Character_ID);
                        }
                        else
                        {
                            World.instance.GetQuestLog(Character_ID, qr.Quest_ID).Status = QuestStatus.InProgress;
                            qr = World.instance.GetQuestContentByNPCEntityID(Character_ID, NPC_ID, out Create);
                            World.instance.UpdateQuestLog(Character_ID);
                        }
                        SendData.QuestInteractConfirm(index, true, ql.Status, qr.NPC_ID, ql.Quest_ID);
                        SendData.UpdateQuestLog(ql);
                        break;

                    default:
                        break;
                    }
                }
                else
                {
                    SendData.QuestInteractConfirm(index, false);
                }
            }
            else
            {
                SendData.QuestInteractConfirm(index, false);
            }
            World.instance.UpdateQuestLog(Character_ID);
        }