internal UnknownMessage(TeraMessageReader reader) : base(reader) { #if false // [Foglio] better not do this at every UnknownMessage - it could be a good parser for OpcodeSearcher though // added as a setting (needed only for KR) if (!App.Settings.CheckGuildBamWithoutOpcode || !MessageFactory.NoGuildBamOpcode) { return; } if (reader.Message.Direction != MessageDirection.ServerToClient || reader.Message.Payload.Count != 54) { return; } try // by HQ 20181228 { //Log.F("GuildQuestUrgent.log", $"\n[{nameof(UnknownMessage)}] opcode : {reader.Message.OpCode}"); reader.BaseStream.Position = 14; var unk3 = reader.ReadTeraString(); if (!unk3.Contains("@GuildQuest")) { return; } var msg = new S_NOTIFY_GUILD_QUEST_URGENT(reader); PacketHandler.HandleNotifyGuildQuestUrgent(msg); //TimeManager.Instance.ExecuteGuildBamWebhook(); Log.F($"\n[{nameof(UnknownMessage)}] S_NOTIFY_GUILD_QUEST_URGENT : {reader.Message.OpCode}, reader.Message.Payload.Count : {reader.Message.Payload.Count}", "GuildQuestUrgent.log"); } catch { } #endif }
public static void HandleNotifyGuildQuestUrgent(S_NOTIFY_GUILD_QUEST_URGENT obj) { const string opcode = "SMT_GQUEST_URGENT_NOTIFY"; SessionManager.SystemMessagesDatabase.Messages.TryGetValue(opcode, out var m); switch (obj.Type) { case S_NOTIFY_GUILD_QUEST_URGENT.GuildBamQuestType.Announce: var questName = obj.QuestId == 0 ? "Defeat Guild BAM" : SessionManager.GuildQuestDatabase.GuildQuests[obj.QuestId].Title; SessionManager.MonsterDatabase.TryGetMonster(obj.TemplateId, obj.ZoneId, out var npc); var zone = SessionManager.MapDatabase.Names[obj.ZoneId]; var msg = $"@0\vquestName\v{questName}\vnpcName\v{npc.Name}\vzoneName\v{zone}"; SystemMessagesProcessor.AnalyzeMessage(msg, m, opcode); break; default: return; } }