Flake Posted August 7, 2021 Posted August 7, 2021 Hi everyone, I'm new here and developing conquer, I'm editing Felipe's source for the World Conquer 5103 project, and I'm changing it to version 5165, I've already changed some packets but I came across a problem with the visibility of monsters and characters . On the wiki I couldn't find the offsets for this version, is there any specific program for conquer to get directly from the client? I believe it is packets 10014 character/monster spanws.I downloaded other sources from this version to compare and the codes are more complicated to understand.Thank you for your attention!https://ibb.co/KLkhzvc Quote
Spirited Posted August 7, 2021 Posted August 7, 2021 Eh, sort of. I have a tutorial on how to reverse engineer the client for packets: But if you're looking for something a bit easier, then maybe try downloading Impulse's base 5165 source. He doesn't do screen despawning correctly, but it's a good reference for packets at the very least. I totally get you on the complexity stuff though, it's weird that Conquer Online uses the same packets to spawn monsters as it does players. It can be pretty confusing when first getting started. If you get stuck reading through Impulse's source, just let us know. You can also post your packet code if you get stuck as well, and we'll try to lead you in the right direction. Good luck! Quote
Flake Posted August 7, 2021 Author Posted August 7, 2021 Thanks for the support, I already took a look at the impulse project, the problem is that I found little content for it, I intend to use a stationary font in this version, as I already have felipe version 5517 I can search it and try to solve it to use in version 5165, what I didn't understand is that in felipe's source there are two 10014 ones for characters and one for monsters, correct?public class MonsterSpawn : PacketStructure { public MonsterSpawn(uint idRole) : base(PacketType.CHARACTER_SPAWN, 108, 100) { Identity = idRole; StringCount = 1; }I believe the error is here, anyway I will study this tutorial of yours and see what I can get, thanks for the help! Quote
Spirited Posted August 7, 2021 Posted August 7, 2021 I can't say I've worked on many public sources. I started writing my own after my first two years in the community. I wouldn't be surprised though, it'd be too confusing to reuse the same packet class. But yeah, the core offsets you need to get right to at least see a shadow is the X, Y coordinates and the packet length. Quote
Flake Posted August 9, 2021 Author Posted August 9, 2021 I was on a family outing, tomorrow monday I'm going to study a lot about your tutorial, but as I said I don't try to learn from 0 because my work is in another area, conquer is just a hobby, that's why I said that I intend to have a stationary version, so I don't need to upgrade soon. Thank you for your help! Quote
Konichu Posted August 12, 2021 Posted August 12, 2021 Also taking a look into my comet implementation that is v5180 would be good. Most sources out there implement only the basic offsets and I've been working to make it complete, making use of all systems and offsets. Then only by taking a look at the members order you'll be able to get other offsets.I usually do my researchs looking ~5165 and ~5250 sources so I can guess offsets easily.https://gitlab.com/felipevendramini/comet/-/blob/master/src/Comet.Game/Packets/MsgPlayer.cs Quote
Rezlind Posted August 12, 2021 Posted August 12, 2021 Quote Hi everyone, I'm new here and developing conquer, I'm editing Felipe's source for the World Conquer 5103 project, and I'm changing it to version 5165, I've already changed some packets but I came across a problem with the visibility of monsters and characters . On the wiki I couldn't find the offsets for this version, is there any specific program for conquer to get directly from the client? I believe it is packets 10014 character/monster spanws. I downloaded other sources from this version to compare and the codes are more complicated to understand. Thank you for your attention! https://ibb.co/KLkhzvc The problem you're describing sounds very similar to the issue I was experiencing here: As you already know if you don't get the MsgPlayer packet offsets correct you won't be able to see monsters or players. I'd focus on monsters first. The following offsets are for 5187 but perhaps it'll be close enough that it will show some signs of working: //------------------------------------------------ /// <summary> /// Look of the entity. /// </summary> public UInt32 Mesh { get { return __Mesh; } set { __Mesh = value; WriteUInt32(4, value); } } /// <summary> /// Unique Id of the entity. /// </summary> public Int32 Id { get { return __Id; } set { __Id = value; WriteInt32(8, value); } } public UInt32 SynId { get { return __SynId; } set { __SynId = value; WriteUInt32(12, value); } } public UInt32 SynRank { get { return __SynMemberRank; } set { __SynMemberRank = value; WriteUInt32(16, value); } } /// <summary> /// Status of the entity. /// </summary> public UInt64 Status { get { return __Status; } set { __Status = value; WriteUInt64(22, value); } } public Int32 Helmet { get { return __Helmet; } set { __Helmet = value; WriteInt32(30, value); } } public Int32 GarmentType { get { return __GarmentType; } set { __GarmentType = value; WriteInt32(34, value); } } public Int32 ArmorType { get { return __ArmorType; } set { __ArmorType = value; WriteInt32(38, value); } } public Int32 WeaponRType { get { return __WeaponRType; } set { __WeaponRType = value; WriteInt32(46, value); } } public Int32 WeaponLType { get { return __WeaponLType; } set { __WeaponLType = value; WriteInt32(42, value); } } public UInt32 Mount { get { return __Mount; } set { __Mount = value; WriteUInt32(50, value); } } public UInt16 MonsterLife { get { return __MonsterLife; } set { __MonsterLife = value; WriteUInt16(58, value); } } public UInt16 MonsterLevel { get { return __MonsterLevel; } set { __MonsterLevel = value; WriteUInt16(60, value); } } public UInt16 HairStyle { get { return __HairStyle; } set { __HairStyle = value; WriteUInt32(62, value); } } public UInt16 PosX { get { return __PosX; } set { __PosX = value; WriteUInt16(64, value); } } public UInt16 PosY { get { return __PosY; } set { __PosY = value; WriteUInt16(66, value); } } public Byte Direction { get { return __Dir; } set { __Dir = value; mBuf[68] = value; } } public Byte Pose { get { return __Pose; } set { __Pose = value; mBuf[69] = value; } } public Byte Reborn { get { return __Reborn; } set { __Reborn = value; mBuf[74] = value; } } public UInt16 Level { get { return __Level; } set { __Level = value; WriteUInt16(75, value); } } public Byte WindowSpawn { get { return __WindowSpawn; } set { __WindowSpawn = value; mBuf[77] = value; } } public Byte AFK { get { return __AFK; } set { __AFK = value; mBuf[78] = value; } } public UInt32 SharedBP { get { return __SharedBP; } set { __SharedBP = value; WriteUInt32(79, value); } } public UInt32 FlowerCharm { get { return __FlowerCharm; } set { __FlowerCharm = value; WriteUInt32(91, value); } } public UInt32 NobilityRank { get { return __NobilityRank; } set { __NobilityRank = value; WriteUInt32(95, value); } } public UInt16 ArmorColor { get { return __ArmorColor; } set { __ArmorColor = value; WriteUInt16(99, value); } } public UInt16 ShieldColor { get { return __ShieldColor; } set { __ShieldColor = value; WriteUInt16(101, value); } } public UInt16 HelmetColor { get { return __HelmetColor; } set { __HelmetColor = value; WriteUInt16(103, value); } } public UInt32 QuizPoints { get { return __QuizPoints; } set { __QuizPoints = value; WriteUInt32(105, value); } } public Byte MountAddition { get { return __MountAddition; } set { __MountAddition = value; mBuf[109] = value; } } public UInt32 MountColor { get { return __MountColor; } set { __MountColor = value; WriteUInt32(114, value); } } public UInt16 EnlightenPoints { get { return __EnlightenPoints; } set { __EnlightenPoints = value; WriteUInt16(119, value); } } public UInt32 ClanIdentity { get { return __ClanIdentity; } set { __ClanIdentity = value; WriteUInt32(131, value); } } public Int32 ClanRank { get { return __ClanRank; } set { __ClanRank = value; WriteInt32(135, value); } } public Int32 ClanBattlePower { get { return __ClanBattlePower; } set { __ClanBattlePower = value; WriteInt32(139, value); } } public UInt32 UserTitle { get { return __UserTitle; } set { __UserTitle = value; WriteUInt32(143, value); } } So for monsters on the base source I'm using (Cops v6 enhanced edition 4330 --> upgraded to 5187) I do the following to notify the client of monsters on screen: /// <summary> /// Create a new message for the specified monster. /// </summary> /// <param name="aMonster">The monster.</param> public MsgPlayerEx(Monster aMonster) : base((UInt16)(157 + (aMonster.Name.Length))) { Id = aMonster.UniqId; Mesh = aMonster.Look; PosX = aMonster.X; PosY = aMonster.Y; Status = 0; Status = aMonster.Statuses; MonsterLife = (byte)aMonster.CurHP; MonsterLevel = (byte)aMonster.Level; Direction = aMonster.Direction; Pose = (Byte)aMonster.Action; if (aMonster.CurHP > ushort.MaxValue) { MonsterLife = (ushort)(ushort.MaxValue / aMonster.CurHP * 100); } else { MonsterLife = (ushort)aMonster.CurHP; } __StrPacker = new StringPacker(this, 155); __StrPacker.AddString(aMonster.Name); } Quote
Flake Posted August 13, 2021 Author Posted August 13, 2021 Quote Also taking a look into my comet implementation that is v5180 would be good. Most sources out there implement only the basic offsets and I've been working to make it complete, making use of all systems and offsets. Then only by taking a look at the members order you'll be able to get other offsets. I usually do my researchs looking ~5165 and ~5250 sources so I can guess offsets easily. https://gitlab.com/felipevendramini/comet/-/blob/master/src/Comet.Game/Packets/MsgPlayer.cs Great, I came to the conclusion that it is easier to make it 5187 there is more information currently in this version, thanks! Rezlind, I managed to find out the name, visibility of monsters and characters, I'll probably make it 5187, thanks for trying to help! Quote Eh, sort of. I have a tutorial on how to reverse engineer the client for packets: But if you're looking for something a bit easier, then maybe try downloading Impulse's base 5165 source. He doesn't do screen despawning correctly, but it's a good reference for packets at the very least. I totally get you on the complexity stuff though, it's weird that Conquer Online uses the same packets to spawn monsters as it does players. It can be pretty confusing when first getting started. If you get stuck reading through Impulse's source, just let us know. You can also post your packet code if you get stuck as well, and we'll try to lead you in the right direction. Good luck! Is there any program similar to Hopper Disassembler free ? Sorry for my english, my language is portuguese Quote
Rezlind Posted August 13, 2021 Posted August 13, 2021 Quote Quote Also taking a look into my comet implementation that is v5180 would be good. Most sources out there implement only the basic offsets and I've been working to make it complete, making use of all systems and offsets. Then only by taking a look at the members order you'll be able to get other offsets. I usually do my researchs looking ~5165 and ~5250 sources so I can guess offsets easily. https://gitlab.com/felipevendramini/comet/-/blob/master/src/Comet.Game/Packets/MsgPlayer.cs Great, I came to the conclusion that it is easier to make it 5187 there is more information currently in this version, thanks! Rezlind, I managed to find out the name, visibility of monsters and characters, I'll probably make it 5187, thanks for trying to help! Quote Eh, sort of. I have a tutorial on how to reverse engineer the client for packets: But if you're looking for something a bit easier, then maybe try downloading Impulse's base 5165 source. He doesn't do screen despawning correctly, but it's a good reference for packets at the very least. I totally get you on the complexity stuff though, it's weird that Conquer Online uses the same packets to spawn monsters as it does players. It can be pretty confusing when first getting started. If you get stuck reading through Impulse's source, just let us know. You can also post your packet code if you get stuck as well, and we'll try to lead you in the right direction. Good luck! Is there any program similar to Hopper Disassembler free ? Sorry for my english, my language is portuguese Hey no problem, and yes I believe you can use ghidra for similar functionality to Hopper Disassembler. Also no need to apologize for English - your english has been great. Se você precisar de alguma ajuda, não hesite em perguntar. Quote
Konichu Posted August 23, 2021 Posted August 23, 2021 Great, I came to the conclusion that it is easier to make it 5187 there is more information currently in this version, thanks! Rezlind, I managed to find out the name, visibility of monsters and characters, I'll probably make it 5187, thanks for trying to help!Glad to see that it helped!There aren't much info about 5187 out there too lol after a lot of trial and error and by looking at higher version sources I managed to get all those offsets. Tho it still incomplete for some packets it's much better than anything out there.I plan on making higher versions of the sources too, so I may try to get all offsets from 5250, 5350, 5517 and others. And also 5187 is much better than 5165 in many ways since you want to use Steeds and clans. Even the guild system is better for management and you can use it like the old one if you wish, just by not distributing all positions and battle power.My Guild and Family system is pretty much complete so you can use it as reference. Quote
Flake Posted August 24, 2021 Author Posted August 24, 2021 Great, I came to the conclusion that it is easier to make it 5187 there is more information currently in this version, thanks! Rezlind, I managed to find out the name, visibility of monsters and characters, I'll probably make it 5187, thanks for trying to help!Glad to see that it helped!There aren't much info about 5187 out there too lol after a lot of trial and error and by looking at higher version sources I managed to get all those offsets. Tho it still incomplete for some packets it's much better than anything out there.I plan on making higher versions of the sources too, so I may try to get all offsets from 5250, 5350, 5517 and others. And also 5187 is much better than 5165 in many ways since you want to use Steeds and clans. Even the guild system is better for management and you can use it like the old one if you wish, just by not distributing all positions and battle power.My Guild and Family system is pretty much complete so you can use it as reference.Thanks for your help, yes I'm getting many references in your project! and as I said I want to make a stationary version without upgrades for other versions, for now I'm just studying it and I'm enjoying it! Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.