since the anticheat devs already know how the feature works, i don't really care about posting more about it.
the question is, what would be the message ID for the autokill AI?
i don't get anything with MSG_CS_AI_DAMAGE
Code:
oSendToServer(CLTClient, pMsg, flag);
CAutoMessage msg;
uint8 iPacketSeqIndex = GetS2SCounter();
GetS2SCounter() = iPacketSeqIndex + 1;
msg.WriteBits(MSG_CS_AI_DAMAGE, 16);
iPacketSeqIndex = (16 * iPacketSeqIndex) | ((iPacketSeqIndex >> 4) & 0xF);
uint32 u32DummyData = 0xB27AD5F7;
uint32 damageAICount = 99;
uint8 tWeaponClass = 1;
uint16 tWeaponType = 1;
int16 damageValue = 999;
auto tAttackerIndex = ReadMemory<BYTE>(LTShell + OFFSET_PlayerID);
msg.WriteBits(u32DummyData, 5);
msg.WriteBits(iPacketSeqIndex, 8);
msg.WriteBits(tAttackerIndex, 8);
msg.WriteBits((uint8)damageAICount, 8);
int countSent = 0;
for (int index = 0; index < SFXObjMax && countSent < (int)damageAICount; index++)
{
auto ObjectList = ReadMemory<ModelInstance*>(SFXObjects + 0x18C0 + index * 0x8C);
if (!ObjectList)
continue;
auto enemyBone = ObjectList->pBone()->BoneMatrix(6);
auto enemyBody = ObjectList->pBone()->BoneMatrix(4);
Vector3 enemyPos(enemyBone._14, enemyBone._24, enemyBone._34);
Vector3 enemyBod(enemyBody._14, enemyBody._24, enemyBody._34);
if (enemyPos.x == 0.0f || enemyPos.y == 0.0f || enemyPos.z == 0.0f)
continue;
if (enemyBod.x == 0.0f || enemyBod.y == 0.0f || enemyBod.z == 0.0f)
continue;
msg.WriteObject((HOBJECT)ObjectList);
msg.WriteBits(damageValue, 16);
msg.WriteBits(tWeaponClass, 8);
msg.WriteBits(tWeaponType, 16);
LTVector damagePos = { enemyPos.x, enemyPos.y, enemyPos.z };
msg.WriteCompLTVector(damagePos);
countSent++;
}
auto v19 = msg.Size();
msg.Writeuint8((uint8)(v19 * iPacketSeqIndex));
return oSendToServer(CLTClient, msg.Read(), MESSAGE_GUARANTEED);