From the other threads you keep creating on this topic, it sounds like you're using a proxy. Look at private server source code... they usually have the answers you seek. Idk if this is true for the most updated version of Conquer 3.0 (not 3D), but here's how it's done in 6090 according to
[Only registered and activated users can see links. Click Here To Register...]:
Code:
private void DecodeSkill()
{
SkillId = (ushort) ( ExchangeShortBits(( SkillId ^ ObjectId ^ 0x915d ), 13) + 0x14be );
var sl = SkillLevel = ( (ushort) ( (byte) SkillLevel ^ 0x21 ) ); // fix for .net 4.6 overflow issue
TargetObjectId = ( ExchangeLongBits(TargetObjectId, 13) ^ ObjectId ^ 0x5f2d2463 ) + 0x8b90b51a;
PositionX = (ushort) ( ExchangeShortBits(( PositionX ^ ObjectId ^ 0x2ed6 ), 15) + 0xdd12 );
PositionY = (ushort) ( ExchangeShortBits(( PositionY ^ ObjectId ^ 0xb99b ), 11) + 0x76de );
}
private void EncodeSkill()
{
SkillId = (ushort) ( ExchangeShortBits(ObjectId - 0x14be, 3) ^ ObjectId ^ 0x915d );
SkillLevel = (ushort) ( ( SkillLevel + 0x100 * ( Timestamp % 0x100 ) ) ^ 0x3721 );
Arg1 = MathUtils.BitFold32(SkillId, SkillLevel);
TargetObjectId = ExchangeLongBits(( ( TargetObjectId - 0x8b90b51a ) ^ ObjectId ^ 0x5f2d2463u ), 19);
PositionX = (ushort) ( ExchangeShortBits((uint) PositionX - 0xdd12, 1) ^ ObjectId ^ 0x2ed6 );
PositionY = (ushort) ( ExchangeShortBits((uint) PositionY - 0x76de, 5) ^ ObjectId ^ 0xb99b );
}
private static uint ExchangeShortBits(uint data, int bits)
{
data &= 0xffff;
return ( data >> bits | data << ( 16 - bits ) ) & 65535;
}
private static uint ExchangeLongBits(uint data, int bits) { return data >> bits | data << ( 32 - bits ); }