Exemple #1
0
        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;
            }

        }