コード例 #1
0
        /// <summary>
        /// Writes the log.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="stream">The stream.</param>
        /// <param name="callback">The callback for UI updates.</param>
        public void WriteLog(IExecutionContext context, Stream stream, ProgressCallback callback)
        {
            using (StreamWriter s = new StreamWriter(stream))
            {
                int       region = 0;
                Hashtable keeps  = new Hashtable();
                s.WriteLine("<KeepComponent>");
                foreach (PacketLog log in context.LogManager.Logs)
                {
                    for (int i = 0; i < log.Count; i++)
                    {
                        if (callback != null && (i & 0xFFF) == 0)                         // update progress every 4096th packet
                        {
                            callback(i, log.Count - 1);
                        }

                        Packet pak = log[i];
                        if (pak is StoC_0x20_PlayerPositionAndObjectID_171)
                        {
                            StoC_0x20_PlayerPositionAndObjectID_171 reg20 = (StoC_0x20_PlayerPositionAndObjectID_171)pak;
                            region = reg20.Region;
                        }
                        else if (pak is StoC_0xB7_RegionChange)
                        {
                            StoC_0xB7_RegionChange regB7 = (StoC_0xB7_RegionChange)pak;
                            region = regB7.RegionId;
                        }
                        else if (pak is StoC_0x6C_KeepComponentOverview)
                        {
                            StoC_0x6C_KeepComponentOverview partCreate = (StoC_0x6C_KeepComponentOverview)pak;
//							if (region != 163) continue;
//							if (partCreate.KeepId < 256) continue;
                            string key = "KEEPID-" + partCreate.KeepId + "-WALLID-" + partCreate.ComponentId;
                            if (keeps.ContainsKey(key))
                            {
                                continue;
                            }
                            keeps[key] = partCreate;
                            s.WriteLine("  <KeepComponent>");
                            s.WriteLine(string.Format("    <KeepComponent_ID>{0}</KeepComponent_ID>", key));
                            s.WriteLine(string.Format("    <X>{0}</X>", (sbyte)partCreate.X));
                            s.WriteLine(string.Format("    <Y>{0}</Y>", (sbyte)partCreate.Y));
                            s.WriteLine(string.Format("    <Heading>{0}</Heading>", partCreate.Heading));
//							s.WriteLine(string.Format("    <Height>{0}</Height>", partCreate.Height)); // in DOL height calced depended on keep level
                            s.WriteLine(string.Format("    <Health>{0}</Health>", /*partCreate.Health*/ 100));
                            s.WriteLine(string.Format("    <Skin>{0}</Skin>", partCreate.Skin));
                            s.WriteLine(string.Format("    <KeepID>{0}</KeepID>", partCreate.KeepId));
                            s.WriteLine(string.Format("    <ID>{0}</ID>", partCreate.ComponentId));
                            s.WriteLine("  </KeepComponent>");
                        }
                    }
                }
                s.WriteLine("</KeepComponent>");
            }
        }
コード例 #2
0
        /// <summary>
        /// Activates a log action.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="selectedPacket">The selected packet.</param>
        /// <returns><c>true</c> if log data tab should be updated.</returns>
        public override bool Activate(IExecutionContext context, PacketLocation selectedPacket)
        {
            PacketLog log           = context.LogManager.GetPacketLog(selectedPacket.LogIndex);
            int       selectedIndex = selectedPacket.PacketIndex;

            int           currentRegion        = 0;
            int           currentZone          = 0;
            Hashtable     keepComponentsByOids = new Hashtable();
            Hashtable     keepComponents       = new Hashtable();
            Hashtable     keeps = new Hashtable();
            StringBuilder str   = new StringBuilder();

            for (int i = 0; i < selectedIndex; i++)
            {
                Packet pak = log[i];
                if (pak is StoC_0x6C_KeepComponentOverview)
                {
                    StoC_0x6C_KeepComponentOverview keep = (StoC_0x6C_KeepComponentOverview)pak;
                    string    key = keep.KeepId + "C:" + keep.ComponentId;
                    Component kc;
                    if (!keepComponents.ContainsKey(key))
                    {
                        kc                  = new Component();
                        kc.KeepId           = keep.KeepId;
                        kc.ComponentId      = keep.ComponentId;
                        kc.Oid              = keep.Uid;
                        kc.Skin             = keep.Skin;
                        kc.addX             = (sbyte)keep.X;
                        kc.addY             = (sbyte)keep.Y;
                        kc.Rotate           = keep.Heading;
                        kc.Height           = keep.Height;
                        kc.Health           = keep.Health;
                        kc.Status           = keep.Status;
                        kc.Flag             = keep.Flag;
                        kc.Zone             = 0;
                        keepComponents[key] = kc;
                    }
                    else
                    {
                        kc = (Component)keepComponents[key];
                    }
                    keepComponentsByOids[keep.Uid] = kc;
                }
                else if (pak is StoC_0x69_KeepOverview)
                {
                    StoC_0x69_KeepOverview keep = (StoC_0x69_KeepOverview)pak;
                    if (!keeps.ContainsKey(keep.KeepId))
                    {
                        Keep k = new Keep();
                        k.KeepId           = keep.KeepId;
                        k.Angle            = keep.Heading;
                        k.X                = keep.KeepX;
                        k.Y                = keep.KeepY;
                        keeps[keep.KeepId] = k;
                    }
                }
                else if (pak is StoC_0xA1_NpcUpdate)
                {
                    StoC_0xA1_NpcUpdate obj = (StoC_0xA1_NpcUpdate)pak;
                    if (keepComponentsByOids.ContainsKey(obj.NpcOid))
                    {
                        Component kc  = (Component)keepComponentsByOids[obj.NpcOid];
                        string    key = kc.KeepId + "C:" + kc.ComponentId;
                        kc.Zone    = obj.CurrentZoneId;
                        kc.Heading = (ushort)(obj.Heading & 0xFFF);
                        kc.X       = obj.CurrentZoneX;
                        kc.Y       = obj.CurrentZoneY;
                        kc.Z       = obj.CurrentZoneZ;
                        keepComponentsByOids[obj.NpcOid] = kc;
                        keepComponents[key] = kc;
                    }
                }
                else if (pak is StoC_0xB7_RegionChange)
                {
                    StoC_0xB7_RegionChange region = (StoC_0xB7_RegionChange)pak;

                    if (region.RegionId != currentRegion)
                    {
                        currentRegion = region.RegionId;
                        currentZone   = region.ZoneId;
                        keepComponentsByOids.Clear();
                    }
                }
                else if (pak is StoC_0x20_PlayerPositionAndObjectID_171)
                {
                    StoC_0x20_PlayerPositionAndObjectID_171 region = (StoC_0x20_PlayerPositionAndObjectID_171)pak;

                    if (region.Region != currentRegion)
                    {
                        currentRegion = region.Region;
                        keepComponentsByOids.Clear();
                    }
                }
            }
            foreach (Component kc in keepComponents.Values)
            {
                if (kc.Zone != 0)
                {
                    Keep k = (Keep)keeps[kc.KeepId];
                    str.AppendFormat("keepId:{0,-4} keepX:{1,-6} keepY:{2,-6} angle:{3,-3} ", k.KeepId, k.X, k.Y, k.Angle);
                    str.AppendFormat("componentId:{0,-2} oid:{1,-5} Skin:{2,-2} X:{3,-4} Y:{4,-4} Rotate:{5} ", kc.ComponentId, kc.Oid, kc.Skin, kc.addX, kc.addY, kc.Rotate);
                    str.AppendFormat("Heading:{0,-4} Zone:{1,-3} @X:{2,-5} @Y:{3,-5} Z:{4}\n", kc.Heading, kc.Zone, kc.X, kc.Y, kc.Z);
                }
            }
            InfoWindowForm infoWindow = new InfoWindowForm();

            infoWindow.Text  = "Show keep components info (right click to close)";
            infoWindow.Width = 650;
            infoWindow.InfoRichTextBox.Text = str.ToString();
            infoWindow.StartWindowThread();
            return(false);
        }
コード例 #3
0
        public static SortedList MakeOidList(int selectedIndex, PacketLog log, out int currentRegion, out int currentZone)
        {
            SortedList oidInfo = new SortedList();

            currentRegion = -1;
            currentZone   = -1;
            ushort playerOid = 0;
            string CharName  = "UNKNOWN";

            for (int i = 0; i < selectedIndex; ++i)
            {
                Packet pak = log[i];
                if (pak is StoC_0xD4_PlayerCreate)
                {
                    StoC_0xD4_PlayerCreate player = (StoC_0xD4_PlayerCreate)pak;

                    oidInfo[player.Oid] = new LivingInfo(pak.Time, "PLR", player.Name, player.Level, player.GuildName);
                }
                else if (pak is StoC_0x4B_PlayerCreate_172)
                {
                    StoC_0x4B_PlayerCreate_172 player = (StoC_0x4B_PlayerCreate_172)pak;

                    oidInfo[player.Oid] = new LivingInfo(pak.Time, "PLR", player.Name, player.Level, player.GuildName);
                    if (currentZone == -1)
                    {
                        currentZone = player.ZoneId;
                    }
                }
                else if (pak is StoC_0x12_CreateMovingObject)
                {
                    StoC_0x12_CreateMovingObject obj = (StoC_0x12_CreateMovingObject)pak;

                    oidInfo[obj.ObjectOid] = new ObjectInfo(pak.Time, "MOVE", obj.Name, 0);
                }
                else if (pak is StoC_0x6C_KeepComponentOverview)
                {
                    StoC_0x6C_KeepComponentOverview keep = (StoC_0x6C_KeepComponentOverview)pak;

                    oidInfo[keep.Uid] = new ObjectInfo(pak.Time, "Keep", string.Format("keepId:0x{0:X4} componentId:{1}", keep.KeepId, keep.ComponentId), 0);
                }
                else if (pak is StoC_0xD1_HouseCreate)
                {
                    StoC_0xD1_HouseCreate house = (StoC_0xD1_HouseCreate)pak;

                    oidInfo[house.HouseId] = new ObjectInfo(pak.Time, "HOUS", house.Name, 0);
                }
                else if (pak is StoC_0xDA_NpcCreate)
                {
                    StoC_0xDA_NpcCreate npc = (StoC_0xDA_NpcCreate)pak;

                    oidInfo[npc.Oid] = new LivingInfo(pak.Time, "NPC", npc.Name, npc.Level, npc.GuildName);
                }
                else if (pak is CtoS_0xA9_PlayerPosition)
                {
                    CtoS_0xA9_PlayerPosition plr = (CtoS_0xA9_PlayerPosition)pak;
                    if (currentZone == -1)
                    {
                        currentZone = plr.CurrentZoneId;
                    }
                }
                else if (pak is StoC_0xD9_ItemDoorCreate)
                {
                    StoC_0xD9_ItemDoorCreate item = (StoC_0xD9_ItemDoorCreate)pak;
                    string type = "ITEM";
                    if (item.ExtraBytes > 0)
                    {
                        type = "DOOR";
                    }
                    oidInfo[item.Oid] = new ObjectInfo(pak.Time, type, item.Name, 0);
                }
                else if (pak is StoC_0xB7_RegionChange)
                {
                    StoC_0xB7_RegionChange region = (StoC_0xB7_RegionChange)pak;

//					if (region.RegionId != currentRegion)
//					{
                    currentRegion = region.RegionId;
                    currentZone   = region.ZoneId;
                    oidInfo.Clear();
//					}
                }
                else if (pak is StoC_0x20_PlayerPositionAndObjectID_171)
                {
                    StoC_0x20_PlayerPositionAndObjectID_171 region = (StoC_0x20_PlayerPositionAndObjectID_171)pak;

//					if (region.Region!= currentRegion)
//					{
                    currentRegion = region.Region;
                    oidInfo.Clear();
//					}
                    playerOid = region.PlayerOid;
                    oidInfo[region.PlayerOid] = new LivingInfo(pak.Time, "YOU", CharName, 0, "");
                }
                else if (pak is StoC_0x16_VariousUpdate)
                {
                    if (playerOid != 0)
                    {
                        StoC_0x16_VariousUpdate stat = (StoC_0x16_VariousUpdate)pak;
                        if (stat.SubCode == 3)
                        {
                            StoC_0x16_VariousUpdate.PlayerUpdate subData = (StoC_0x16_VariousUpdate.PlayerUpdate)stat.SubData;
                            if (oidInfo[playerOid] != null)
                            {
                                LivingInfo plr = (LivingInfo)oidInfo[playerOid];
                                plr.level          = subData.playerLevel;
                                plr.guildName      = subData.guildName;
                                oidInfo[playerOid] = plr;
                            }
                        }
                    }
                }
                else if (pak is CtoS_0x10_CharacterSelectRequest)
                {
                    CtoS_0x10_CharacterSelectRequest login = (CtoS_0x10_CharacterSelectRequest)pak;
                    CharName = login.CharName;
                }
            }
            return(oidInfo);
        }
コード例 #4
0
        /// <summary>
        /// Writes the log.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="stream">The stream.</param>
        /// <param name="callback">The callback for UI updates.</param>
        public void WriteLog(IExecutionContext context, Stream stream, ProgressCallback callback)
        {
            using (StreamWriter s = new StreamWriter(stream))
            {
                Hashtable keeps  = new Hashtable();
                int       region = 0;
                s.WriteLine("<Keep>");
                foreach (PacketLog log in context.LogManager.Logs)
                {
                    for (int i = 0; i < log.Count; i++)
                    {
                        if (callback != null && (i & 0xFFF) == 0)                         // update progress every 4096th packet
                        {
                            callback(i, log.Count - 1);
                        }

                        Packet pak = log[i];
                        if (pak is StoC_0x20_PlayerPositionAndObjectID_171)
                        {
                            StoC_0x20_PlayerPositionAndObjectID_171 reg20 = (StoC_0x20_PlayerPositionAndObjectID_171)pak;
                            region = reg20.Region;
                        }
                        else if (pak is StoC_0xB7_RegionChange)
                        {
                            StoC_0xB7_RegionChange regB7 = (StoC_0xB7_RegionChange)pak;
                            region = regB7.RegionId;
                        }
                        else if (pak is StoC_0x69_KeepOverview)
                        {
                            StoC_0x69_KeepOverview keepCreate = (StoC_0x69_KeepOverview)pak;
                            if (keeps.ContainsKey(keepCreate.KeepId))
                            {
                                continue;
                            }
                            keeps[keepCreate.KeepId] = keepCreate;
                            string keepName;
                            if (region == 163)
                            {
                                if (keepCreate.KeepId < 256)
                                {
                                    keepName = "KEEP_";
//									continue;
                                }
                                else
                                {
                                    keepName = "TOWER_";
                                }
                            }
                            else
                            {
//								continue;
                                if (keepCreate.KeepId < 1000)
                                {
                                    keepName = "KEEP_";
                                }
                                else
                                {
                                    keepName = "TOWER_";
                                }
                            }
                            keepName += keepCreate.KeepId.ToString();
                            s.WriteLine("  <Keep>");
                            s.WriteLine(string.Format("    <Keep_ID>{0}</Keep_ID>", keepCreate.KeepId));
                            s.WriteLine(string.Format("    <KeepID>{0}</KeepID>", keepCreate.KeepId));
                            s.WriteLine(string.Format("    <Name>{0}</Name>", keepName));
                            s.WriteLine(string.Format("    <Region>{0}</Region>", region));
                            s.WriteLine(string.Format("    <X>{0}</X>", keepCreate.KeepX));
                            s.WriteLine(string.Format("    <Y>{0}</Y>", keepCreate.KeepY));
                            s.WriteLine("    <Z>0</Z>");
                            s.WriteLine(string.Format("    <Heading>{0}</Heading>", keepCreate.Heading));
                            s.WriteLine(string.Format("    <Realm>{0}</Realm>", keepCreate.Realm));
                            s.WriteLine(string.Format("    <Level>{0}</Level>", keepCreate.Level));
                            s.WriteLine("    <ClaimedGuildName />");
                            s.WriteLine("    <AlbionDifficultyLevel>0</AlbionDifficultyLevel>");
                            s.WriteLine("    <MidgardDifficultyLevel>0</MidgardDifficultyLevel>");
                            s.WriteLine("    <HiberniaDifficultyLevel>0</HiberniaDifficultyLevel>");
                            s.WriteLine("    <OriginalRealm>0</OriginalRealm>");
                            s.WriteLine("    <KeepType>0</KeepType>");
                            s.WriteLine("    <BaseLevel>0</BaseLevel>");
                            s.WriteLine("  </Keep>");
                        }
                    }
                }
                s.WriteLine("</Keep>");
            }
        }
コード例 #5
0
        /// <summary>
        /// Writes the log.
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="stream">The stream.</param>
        /// <param name="callback">The callback for UI updates.</param>
        public void WriteLog(IExecutionContext context, Stream stream, ProgressCallback callback)
        {
            using (StreamWriter s = new StreamWriter(stream))
            {
                int       region      = 0;
                int       ZoneXOffset = 0;
                int       ZoneYOffset = 0;
                Hashtable m_obj       = new Hashtable();
                foreach (PacketLog log in context.LogManager.Logs)
                {
                    for (int i = 0; i < log.Count; i++)
                    {
                        if (callback != null && (i & 0xFFF) == 0)                         // update progress every 4096th packet
                        {
                            callback(i, log.Count - 1);
                        }

                        StoC_0x20_PlayerPositionAndObjectID_171 pak_reg20 = log[i] as StoC_0x20_PlayerPositionAndObjectID_171;
                        if (pak_reg20 != null)
                        {
                            region      = pak_reg20.Region;
                            ZoneXOffset = pak_reg20.ZoneXOffset;
                            ZoneYOffset = pak_reg20.ZoneYOffset;
                            //						m_obj.Clear();
                            m_keeps.Clear();
                            continue;
                        }
                        StoC_0xB7_RegionChange pak_regB7 = log[i] as StoC_0xB7_RegionChange;
                        if (pak_regB7 != null)
                        {
                            region      = pak_regB7.RegionId;
                            ZoneXOffset = 0;
                            ZoneYOffset = 0;
                            //						m_obj.Clear();
                            m_keeps.Clear();
                            continue;
                        }
                        if (region != 238)
                        {
                            continue;
                        }
                        StoC_0x69_KeepOverview pak_keep = log[i] as StoC_0x69_KeepOverview;
                        if (pak_keep != null)
                        {
                            Keep keep = new Keep();
                            keep.KeepID          = pak_keep.KeepId;
                            keep.X               = (uint)(pak_keep.KeepX + ZoneXOffset * 0x2000);
                            keep.Y               = (uint)(pak_keep.KeepY + ZoneYOffset * 0x2000);
                            keep.Heading         = pak_keep.Heading;
                            keep.Realm           = pak_keep.Realm;
                            keep.Level           = pak_keep.Level;
                            m_keeps[keep.KeepID] = keep;
                            continue;
                        }
                        KeepGuard guard = new KeepGuard();
                        StoC_0xD9_ItemDoorCreate door = log[i] as StoC_0xD9_ItemDoorCreate;
                        string key = "";
                        if (door != null)
                        {
                            if (door.ExtraBytes == 4)
                            {
                                guard.KeepGuard_ID = door.InternalId.ToString();
                                guard.Name         = door.Name;
                                guard.EquipmentID  = "";
                                guard.KeepID       = 0;
                                guard.BaseLevel    = 0;
                                guard.X            = (uint)(door.X + ZoneXOffset * 0x2000);
                                guard.Y            = (uint)(door.Y + ZoneYOffset * 0x2000);
                                guard.Z            = door.Z;
                                guard.Heading      = door.Heading;
                                guard.Realm        = (door.Flags & 0x30) >> 4;
                                guard.Model        = door.Model;
                                guard.ClassType    = "DOL.GS.GameKeepDoor";
                                key = "REGION:" + region.ToString() + "-DOOR:" + guard.KeepGuard_ID;
                            }
                            else
                            {
                                continue;
                            }
                        }
                        else
                        {
                            continue;
                        }
                        if (key == "")
                        {
                            continue;
                        }
                        if (m_obj.ContainsKey(key))
                        {
                            continue;
                        }
                        Keep my_keep = getKeepCloseToSpot(guard.X, guard.Y, 2000);
                        if (my_keep != null)
                        {
                            guard.KeepID    = my_keep.KeepID;
                            guard.BaseLevel = my_keep.Level;
                        }
                        m_obj[key] = guard;
                    }
                }
                s.WriteLine("<KeepGuard>");
                foreach (KeepGuard guard in m_obj.Values)
                {
                    s.WriteLine("  <KeepGuard>");
                    if (guard.KeepGuard_ID == "")
                    {
                        s.WriteLine("    <KeepGuard_ID />");
                    }
                    else
                    {
                        s.WriteLine(string.Format("    <KeepGuard_ID>{0}</KeepGuard_ID>", guard.KeepGuard_ID));
                    }
                    if (guard.Name == "")
                    {
                        s.WriteLine("    <Name />");
                    }
                    else
                    {
                        s.WriteLine(string.Format("    <Name>{0}</Name>", guard.Name));
                    }
                    if (guard.EquipmentID == "")
                    {
                        s.WriteLine("    <EquipmentID />");
                    }
                    else
                    {
                        s.WriteLine(string.Format("    <EquipmentID>{0}</EquipmentID>", guard.EquipmentID));
                    }
                    s.WriteLine(string.Format("    <KeepID>{0}</KeepID>", guard.KeepID));
                    s.WriteLine(string.Format("    <BaseLevel>{0}</BaseLevel>", guard.BaseLevel));
                    s.WriteLine(string.Format("    <X>{0}</X>", guard.X));
                    s.WriteLine(string.Format("    <Y>{0}</Y>", guard.Y));
                    s.WriteLine(string.Format("    <Z>{0}</Z>", guard.Z));
                    s.WriteLine(string.Format("    <Heading>{0}</Heading>", guard.Heading));
                    s.WriteLine(string.Format("    <Realm>{0}</Realm>", guard.Realm));
                    s.WriteLine(string.Format("    <Model>{0}</Model>", guard.Model));
                    if (guard.ClassType == "")
                    {
                        s.WriteLine("    <ClassType />");
                    }
                    else
                    {
                        s.WriteLine(string.Format("    <ClassType>{0}</ClassType>", guard.ClassType));
                    }
                    s.WriteLine("  </KeepGuard>");
                }
                s.WriteLine("</KeepGuard>");
            }
        }