-
Posts
166 -
Joined
-
Last visited
Reputation
35 ExcellentAbout Konichu
- Birthday 10/27/1994
Personal Information
-
Location
Barueri, SP - Brazil
-
Pronouns
he/him
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
-
I would use the latest client if it wasnt for the armor and weapons models where everything looks the same now. But there is a lot of garments and cosmetics as well that may compensate. I love the new guild war (that started at 7150) but I hate the new Arena interface... I just cant have a solid opinion. There is a lot of nice interfaces you can implement to monetize the server (first credit, roulettes, battle pass etc etc), but there is not an apple client to help reversing packets, but ProtoBuf are easy to get structures as well.
-
For the latest versions most functions can be disabled by feature flags and lua scripts on ini folder. (Forge itself you can remove almost everything via LUA), a lots of icons and stuff also can be removed there as well the classes from everywhere (reincarnation, role selection etc). Issue is that you need the new encryption/decryption for those files, since they're all encrypted now.
-
question [v6609] How to add a bridge to the Guild War area map?
Konichu replied to xFranko's topic in Conquer Online
Check your map loading, on 3.0 there are new tile flags for stuff like that, that you must handle. (or your Terrain loading) I have zero issues, running or jumping -
For those too lazy to look for a function to hook to receive packets... constexpr uintptr_t RECV_PACKET_ADDRESS = 0x0073CE61; typedef void*(__cdecl* RecvPacketFunc)(void* data, int len);
-
This thread already have some documentation about it. But you do bitwise operations to check the map flag. Example: /// <summary> /// Checks if the map is a pk field. Wont add pk points. /// </summary> public bool IsPkField() { return Type.HasFlag(MapTypeFlag.PkField); } /// <summary> /// Disable teleporting by skills or scrolls. /// </summary> public bool IsChgMapDisable() { return Type.HasFlag(MapTypeFlag.ChangeMapDisable); } /// <summary> /// Disable recording the map position into the database. /// </summary> public bool IsRecordDisable() { return Type.HasFlag(MapTypeFlag.RecordDisable); } /// <summary> /// Disable team creation into the map. /// </summary> public bool IsTeamDisable() { return Type.HasFlag(MapTypeFlag.TeamDisable); } /// <summary> /// Disable use of pk on the map. /// </summary> public bool IsPkDisable() { return Type.HasFlag(MapTypeFlag.PkDisable); } /// <summary> /// Disable teleporting by actions. /// </summary> public bool IsTeleportDisable() { return Type.HasFlag(MapTypeFlag.TeleportDisable); } /// <summary> /// Checks if the map is a syndicate map /// </summary> /// <returns></returns> public bool IsSynMap() { return Type.HasFlag(MapTypeFlag.GuildMap); } /// <summary> /// Checks if the map is a prision /// </summary> public bool IsPrisionMap() { return Type.HasFlag(MapTypeFlag.PrisonMap); } /// <summary> /// If the map enable the fly skill. /// </summary> public bool IsWingDisable() { return Type.HasFlag(MapTypeFlag.WingDisable); } /// <summary> /// Check if the map is in war. /// </summary> public bool IsWarTime() { return (Flag & 1) != 0; } /// <summary> /// Check if the map is the training ground. [1039] /// </summary> public bool IsTrainingMap() { return Identity == 1039; } /// <summary> /// Check if its the family (clan) map. /// </summary> public bool IsFamilyMap() { return Type.HasFlag(MapTypeFlag.House); } /// <summary> /// If the map enables booth to be built. /// </summary> public bool IsBoothEnable() { return Type.HasFlag(MapTypeFlag.BoothEnable); } /// <summary> /// Check if the map allows user to revive here. /// </summary> /// <returns></returns> public bool IsRebornNowEnable() { return Type.HasFlag(MapTypeFlag.RebornNowEnable); }
-
question [Game Logic] How does the donation system work in Guilds?
Konichu replied to xFranko's topic in Conquer Online
Exploits was earned based on event points. Example, you have earned 350 points from CTF, so you earned 350 exploits, but they had no use at all. 1. It released with a percentual BP for rankings, later it changed to 100% to every position: - From 5180 to around the release of the Dragon Warrior profession, there was a percentual based on the Shared BP. You can check this out here: Guide - Guild Introduction - Features - Conquer Online - Official Site - Later it changed and every position would earn 100% of the Shared BP You can choose. 2. Just need to be from another guild. I just don't know exactly the calculations, but you could award 1-3-5-10 points based on battle power difference 3. Guide donation was always 1. Every level 1 point. -
question [Game Logic] How does the donation system work in Guilds?
Konichu replied to xFranko's topic in Conquer Online
Hey, Found some screenshots from 2013 1. Your total donation 2. Exploit donations once was used for event score, probably TQ planned to use it to make a store or something related to event participation, I remember they were used on Guild Contest, Guild PK and CTF at some point in time but they had no use. 3. PK Donation, Guide Donation, Flower Donation, Arsenal donation are updated as you receive their points. PK Donation increases or decrease when you kill or be killed; Guide donation when you uplevel a Teammate from 1-70; Flower donation when you receive a Flower/Gift; Arsenal score when you inscribe or remove items from guild arsenal. 4. Donation history, it's everyone's total donation, not daily. (afair) 5. Guild ranks are history calculated on current donation. Ranks depend on total accumulated donations over time. All you need to do is hit the daily score and you would achieve, as of: https://gitlab.com/world-conquer-online/canyon/canyon/-/blob/main/src/Canyon.Game/States/Syndicates/Syndicate.cs?ref_type=heads#L287 -
Game version 6559 or similar pre - 3.0 private server.
Konichu replied to VonConnor's topic in Conquer Online
Conquer 3.0 starts at 6610. 6559 for Mac uses the same executable from 6609, I guess it's the latest server update before 3.0 -
conquerlenny started following Konichu
-
Yes, someone is re-creating the client on DX11. I was also trying to achieve something with OpenGL, but aint having time to continue with the project.
-
What version are you using? afaik it's the packet I sent to you. @xFranko MsgDeadMark · Wiki · Conquer Online / Wiki · GitLab
-
question [v6609] What is the packet for Bulletin Board and Merchant?
Konichu replied to xFranko's topic in Conquer Online
The bulletin is client sided, when you click the Join button it will send a MsgAction packet: case ActionType.BulletinInviteTrans: // 166 { ScriptManager.BulletinInvitation(user, Command); break; } If using official bins, the actions for every event is on `cq_config` type 6007. Also for merchant there is a NPC in the market, you use the MsgInteract to control the client status. public void SetMerchant() { if (IsMerchant()) { // already merchant return; } if (Level <= 30 && Metempsychosis == 0) { // newbie, set merchant instantly _user.Business = (uint)DateTime.Now.ToUnixTimestamp(); SynchroAttributes(ClientUpdateType.Merchant, 255); } else { // 5 days approval _user.Business = (uint)DateTime.Now.AddDays(5).ToUnixTimestamp(); } Save(); } public void RemoveMerchant() { _user.Business = 0; SynchroAttributes(ClientUpdateType.Merchant, 0); Save(); } public void SendMerchant() { if (IsMerchant()) { // tell client use is merchant SynchroAttributes(ClientUpdateType.Merchant, 255); return; } if (IsAwaitingMerchantStatus()) { // user waiting merchant status window SynchroAttributes(ClientUpdateType.Merchant, 1); Send(new MsgInteract { Action = MsgInteractType.MerchantProgress, Data = BusinessManDays }); return; } if (Level <= 30 && Metempsychosis == 0) { // user is not merchant and is newbie, ask if want to be a merchant Send(new MsgInteract { Action = MsgInteractType.InitialMerchant, Command = 5 // 5 days }); return; } // not newbie and no merchant status SynchroAttributes(ClientUpdateType.Merchant, 0); } -
I don't think they have any difference, since dynamic npcs also have IDs below 100k and some npcs has some dynamic npc ids. You will have issues using Monster, Traps and Players IDs. Probably map item ids too.
-
You're not respecting the ID ranges. NPCs are from 1 to 99999, Dynamic NPCs from 100000 to 199999 etc public const uint SysnpcidFirst = 1; public const uint SysnpcidLast = 99999; public const uint DynanpcidFirst = 100000; public const uint DynanpcidLast = 199999; public const uint SceneNpcMin = 200000; public const uint SceneNpcMax = 299999; public const uint MonsteridFirst = 400001; public const uint MonsteridLast = 499999; public const uint PetidFirst = 500001; public const uint PetidLast = 599999; public const uint CallpetidFirst = 700001; public const uint CallpetidLast = 799999; public const uint MapitemFirst = 800001; public const uint MapitemLast = 899999; public const uint MagictrapidFirst = 900001; public const uint MagictrapidLast = 989999; public const uint SystrapidFirst = 990001; public const uint SystrapidLast = 999999; public const uint PlayerIdFirst = 1000000; public const uint PlayerIdLast = 1999999999;
-
It was not boring, you gave him a start that motivated him to improve and make something as well. You did a good job
-
It's actually not a flag. If you mean the dead mark icon above the target head, it's the dead mark packet. public sealed class MsgDeadMark : MsgBase<GameClient> { public DeadMarkAction Action { get; set; } public uint TargetIdentity { get; set; } public override byte[] Encode() { using PacketWriter writer = new(); writer.Write((ushort)PacketType.MsgDeadMark); // 2081 writer.Write((int)Action); writer.Write(TargetIdentity); return writer.ToArray(); } public enum DeadMarkAction { Add, Remove } }