Rezlind
Member-
Posts
82 -
Joined
-
Last visited
Content Type
Profiles
Forums
Downloads
Everything posted by Rezlind
-
Hi there, I've attempted to delay the death sequence and also preventing movement that I've seen on various public sources that happens after a player dies. To achieve this I've done the following: Player dies Apply status Freeze Set a flag on the player server side indicating the player is in transition to death. Kick off an function to occur in 2 seconds via a timer which applies Freeze + Die status to character and causes the revive button to appear. The problem I'm encountering is there are instances where multiple entities can attack the same target while it does not have the die status on causing it to die multiple times from the entities. Usually this happens when the separate threads handling the monster AI are "killing" the player at exactly the same time before the player's alive status changes to In transition. Programmatically I'm not sure how I can handle this concurrency problem, I guess it's effectively a race condition :\.
-
Can anyone help me setup copsv6 or copsv7 source?
Rezlind replied to zyyk21's topic in Conquer Online
I do write software for a living, I do not use social media like facebook. I'm glad you're experimenting with Spirited's comet project :). yeah i would like to know more about coding. Since i love conquer very much i played it since 2009. and when i missed it i play a private server. do you have any platrom that where i can contact you fast? or just here in this forum? i would like to ask more if its ok to you. Feel free to post on this forum, many people here respond quickly to help threads. Plus, questions you have may be similar to questions others might have in the future - having a location where they can google and come across the thread is more beneficial than potentially excellent questions hiding in our private messages :). -
Can anyone help me setup copsv6 or copsv7 source?
Rezlind replied to zyyk21's topic in Conquer Online
Spirited made the thread above that has a wealth of information - take a look :). are you a coder sir? do you have a server running? i am able to run the comet source in my vps now. do you have a social media like facebook? I do write software for a living, I do not use social media like facebook. I'm glad you're experimenting with Spirited's comet project :). -
Can anyone help me setup copsv6 or copsv7 source?
Rezlind replied to zyyk21's topic in Conquer Online
With this source iirc you have to type NEWusername and then your password to register it for the first time. After you've done that are you logging in with `NEWusername` or just `username` lol i just register with only New im dumb. Anyways can you recommend a source here for a good starter? i want to know more about coding. Thanks in advance Spirited made the thread above that has a wealth of information - take a look :). -
Can anyone help me setup copsv6 or copsv7 source?
Rezlind replied to zyyk21's topic in Conquer Online
i think i didnt remove it. i relog it can you clarify to me that to do? With this source iirc you have to type NEWusername and then your password to register it for the first time. After you've done that are you logging in with `NEWusername` or just `username` -
Can anyone help me setup copsv6 or copsv7 source?
Rezlind replied to zyyk21's topic in Conquer Online
What's happening on the account server when you try to connect? Or is the client simply never contacting the account server? the Acc server says its succesfully log on the account i made after creating it. but when i try to relog in it the log in error appear. Just to confirm you're removing "NEW" from the username after you create the account correct? -
Can anyone help me setup copsv6 or copsv7 source?
Rezlind replied to zyyk21's topic in Conquer Online
No reward necessary just go ahead and post what you've tried so far and where you are getting stuck, happy to help! Hello i succesfully run the server but i encountered an error when i tried to log in. And its not readable. i will attach a screenshot[attachment=0]Screenshot (247).png[/attachment] No reward necessary just go ahead and post what you've tried so far and where you are getting stuck, happy to help! Hello i succesfully run the server but i encountered an error when i tried to log in. And its not readable. i will attach a screenshotScreenshot (247).png What's happening on the account server when you try to connect? Or is the client simply never contacting the account server? -
Can anyone help me setup copsv6 or copsv7 source?
Rezlind replied to zyyk21's topic in Conquer Online
No reward necessary just go ahead and post what you've tried so far and where you are getting stuck, happy to help! -
[5187] MsgMagicEffect - 1105: Hide damage numbers
Rezlind replied to Rezlind's topic in Conquer Online
Ah thanks Relic, I'll defer to ghidraing the client before posting in the future. Thanks for your help! -
Hey all, Currently trying to remove the little damage number that appears when using MsgMagicEffect - at the moment I'm still seeing the number despite sending 0 at the correct offset to hide damage numbers on the effect: public MsgMagicEffect(AdvancedEntity aAttacker, AdvancedEntity aTarget, Int32 aDamage, UInt16 aPosX, UInt16 aPosY, Boolean showDamage) // showDamage is unused as I was testing it : base(32) { Magic.Info info = Database.AllMagics[(aAttacker.MagicType * 10) + aAttacker.MagicLevel]; PlayerId = aAttacker.UniqId; if (info.Sort == MagicSort.AttackSingleHP) TargetId = aTarget.UniqId; else { PosX = aPosX; PosY = aPosY; } Type = aAttacker.MagicType; Level = aAttacker.MagicLevel; WriteInt32(16, 1); // Count WriteInt32(20, aTarget.UniqId); // //UniqId WriteInt32(24, aDamage); // //Data WriteInt32(28, 0); // Show <--- Setting this to zero or one should manipulate whether the damage numbers are shown. Console.WriteLine(PacketDump.Hex(mBuf)); } As a reference point I've used Felipe's World Conquer based on Spirited's Comet source to learn more about the MsgMagicEffect packet structure. That snippet is below. public override byte[] Encode() { var writer = new PacketWriter(); writer.Write((ushort)Type); // 2 writer.Write(AttackerIdentity); // 4 writer.Write(MapX);// 8 writer.Write(MapY);// 10 writer.Write(MagicIdentity); //12 writer.Write(MagicLevel); // 14 writer.Write((uint) Count);// 16 foreach (var target in Targets) // 12 each { writer.Write(target.Identity); //offset+0 writer.Write(target.Damage); // offset+4 writer.Write(target.Show); // offset+8 } return writer.ToArray(); } private struct MagicTarget { public uint Identity; public int Damage; public int Show; } I confirmed that the packet going out is in fact zeroed out where it should be but the client is not respecting the zero. Does anyone know if there is another trick to this that I am unaware of?
-
I got confused, they work on Lost Ark. From what they told me, the development feels a lot like a startup in that it's focused work. Luckily, hours have been really good. They compared the culture to where I work currently, but we'll have to see how it's like once they get closer to a release date. The game industry is sorta known for getting bad around releases - I've experienced that first hand as well. Yeah the crunch culture that a lot of companies encourage around release time is terrible, part of me thinks that would be somewhat mitigated by unionization of developers in the game industry. Heh it's funny that you mention Lost Ark - there's a conspiracy theory that Lost ark was purposefully delayed so as to not compete with New World. At first I dismissed it but lately I'm starting to believe it :p.
-
The open beta was unfortunately only 4 days long and already passed. The game feels quite fun, the PvP is probably the most enticing aspect of it. I would recommend it just from my limited exposure in the open Beta. It's cool that you know the developers that work on it, they mention any challenges that they faced in the development of the game?
-
Hey there has anyone had a chance to play the beta of this game? Interested to hear other people's thoughts!
-
[5187] Modifying a client to allow more than 2 clients open at a time.
Rezlind replied to Rezlind's topic in Conquer Online
This was incredibly thorough, thank you. I explored a bit and followed your instructions. The only thing that differed for me was being unable to open the client with the x64 debugger. I was forced to use x32 because even attempting to initially open conquer.exe with the x64 advised me to switch to the 32 bit debugger. A potentially naïve question here - when using the hook method of altering the memory does the order in which you apply changes to memory with your hook potentially alter the memory addresses of other things you may be trying to edit. I.e. If I inject a dll that modifies number of clients I can open, followed by the resolution does manipulating the first affect the memory addresses that the second edit would have changed? -
[5165] - Problem with visibility of monsters and characters
Rezlind replied to Flake's topic in Conquer Online
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! 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. -
[5165] - Problem with visibility of monsters and characters
Rezlind replied to Flake's topic in Conquer Online
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); } -
Hey big thanks, I am using your source as a reference and I really appreciate all you've done. The comments on the sides for the write method were what initially threw me off. I set it up locally and stepped through to see if the offsets were different than the comments and thats how I fixed message names. not being able to see players was just a C# mishap on my part not offset related. Once again though thank you very much for your contribution and deciding to make that open source. It's been extremely helpful. If I'm not mistaken you're also the creator of the Auto Updater? We decided to try to use it but even with Spirited's clean client on the forums it crashes after logging in successfully. I haven't taken time to truly debug though.
-
Took a bit to figure this out and worked on some other stuff in the interim - but on a complete whim managed to see that the Pos X and Pos Y of the player in the MsgPlayer packet was getting overwritten, this is why I could not see the player, the client knew who they were but not where they were. MsgAction did not further update their location. General takeaways for anyone that sees this in the future -> If you can't see monster names on 5187 check that your string packing at the end of MsgPlayer is starting at 155 with the name being entered at 157. If you can't see other players make sure their X and Y coordinates are actually being sent to the client. You may see a debug log if they aren't which says something like: Got a player with hero id! 1000003
-
Hey there just wanted to update my OP. I managed to get the World Conquer 5187 source working and checked the offsets - turns out the comments on the side were not accurate - the entire time I was off by 2 bytes (String packing should begin at offset 155 for MsgPlayer packet on Patch 5187). Unfortunately I still cannot get players to see each other so I am working through that at the moment. But hey, at-least we can see monster names :p.
-
This sounds similar to what happens when you jump and FB, you appear at the destination location on everyone else's clients. Is the problem that it is happening too quickly for scatter because you can scatter faster than you can FB? Could a delay on scatter resolve the jumpiness?
-
I gave this a go just to be certain before replying: [Pheasant] SizeAdd=0 ZoomPercent=70 MaxLife=33 Level=1 BornAction=315 BornEffect=MBStandard BornSound=none ActResCtrl=0 ASB=5 ADB=6 BodyType=0 TypeID=0001 AntiType=0 Armet=0 ArmetColor=3 RWeapon=0 LWeapon=0 LWeaponColor=3 Misc=0 Mount=0 BattleLev=0 ExtraExp=100 StcType=1 DB Row for pheasant: https://imgur.com/a/ddnd8NO Seems to match up. One other possibility I can think of is that perhaps MsgName plays a role in displaying Monster names. I think ultimately I'll have to set up the reference source fully, load it up and take a look to see what happens if I screw up the MsgPlayer monster packet. Had some obstacles setting it up so was hoping not to go that route but it might be for the best. Simply reading through the code so far I didn't see any reference to MsgName or the actionType the client is asking about in regards to this particular problem. Could you possibly elaborate on the behavior thing you said earlier about Ids within a certain range causing different behaviors than other IDs? Thanks :).
-
If you're willing and create a pull request with those changes, I'll review merge them into his project: https://gitlab.com/conquer-online/servers/cops-v6-emulator-enhanced-edition Will do, I didn't realize you had write permissions to it, that's great. I'll aim to submit it sometime this weekend.
-
Just wanted to give you a word of warning if you look at the Cpt Sky enhanced version - there is a race condition in the current implementation where the server will start allowing packets to be received before it's actually ready. I detail that in my OP here: Just figured I'd save you the time if you elect to research that design.
-
In the Cpt Sky enhanced source it appears that Monster Unique IDs begin at /// <summary> /// First valid UID for a monster. /// </summary> public const Int32 MONSTERID_FIRST = 400001; And proceed to increment from there. I actually hadn't checked how that's done in the 5187 Comet version World Conquer. I'll take a look. Me neither I looked through the source to confirm and there is no "kill by" string or anything of that sort. I could also be missing a packet though as this is all a giant jigsaw puzzle haha.