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; } }
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); } } }
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; } }
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); } } }
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; } }
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); } }
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); } }
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); }