IDA => client.dll => function string associate => Strings => "SetParticleControlEnt", первый хреф.
Листай вниз, пока не увидишь "iIndex". Выше будет lea rax, он тебе и нужен.
.text:0000000180EBD521 48 8D 05 D8 5A 02 00 lea rax, sub_180EE3000
.text:0000000180EBD528 C7 42 48 01 00 00 00 mov dword ptr [rdx+48h], 1
.text:0000000180EBD52F 48 89 42 38 mov [rdx+38h], rax
.text:0000000180EBD533 48 8D 05 86 6B FD FF lea rax,
ThisOne <<
.text:0000000180EBD53A 48 89 42 40 mov [rdx+40h], rax
.text:0000000180EBD53E 48 8D 05 6B E8 60 01 lea rax, aIindex_4 ; "
iIndex"
.text:0000000180EBD545 48 89 42 28 mov [rdx+28h], rax
.text:0000000180EBD549 48 8B C3 mov rax, rbx
.text:0000000180EBD54C 48 8B 5C 24 40 mov rbx, [rsp+38h+arg_0]
Даблкликай, листай в самый низ функи.
.text:0000000180E943D1 E8 EA 34 12 01 call
SetParticleControlEnt <<
.text:0000000180E943D6
.text:0000000180E943D6 loc_180E943D6: ; CODE XREF: ThisOne +122↑j
.text:0000000180E943D6 ; ThisOne +14E↑j ...
.text:0000000180E943D6 4C 8D 9C 24 80 00 00 00 lea r11, [rsp+98h+var_18]
.text:0000000180E943DE 49 8B 5B 20 mov rbx, [r11+20h]
.text:0000000180E943E2 49 8B 6B 28 mov rbp, [r11+28h]
.text:0000000180E943E6 49 8B 73 30 mov rsi, [r11+30h]
.text:0000000180E943EA 49 8B 7B 38 mov rdi, [r11+38h]
.text:0000000180E943EE 49 8B E3 mov rsp, r11
.text:0000000180E943F1 41 5F pop r15
.text:0000000180E943F3 41 5E pop r14
.text:0000000180E943F5 41 5C pop r12
.text:0000000180E943F7 C3 retn
Рабочая на данный момент сига:
"E8 ? ? ? ? 4C 8D ? ? ? ? ? ? 49 8B ? ? 49 8B ? ? 49 8B ? ? 49 8B ? ? 49 8B ? 41 ? 41 ? 41 ? C3 CC"
Хук:
typedef void(__fastcall* SetParticleControlEntFn)(CParticleSystemMgr* thisptr, void* CNewParticleEffect, int a3, int particleIndex, int a5, void* attachType, void* a7, void* a8, void* a9);
SetParticleControlEntFn oSetParticleControlEnt;
void SetParticleControlEnt(CParticleSystemMgr* thisptr, CNewParticleEffect* CNewParticleEffect, int a3, int particleIndex, int a5, void* attachType, void* a7, void* a8, void* a9) {
// Ну и тут из полезного -- энтитя, CNewParticleEffect, CParticleCollection, и CParticleSystemMgr.
// Еще вроде a3 -- это индекс энтити, но чет пару раз рандомно крашило с ним.
CBaseEntity* BaseEntity = CNewParticleEffect->ParticlesListPtr->C_BaseEntityOuterHelperPtr->BaseEntity;
CParticleCollection* ParticleCollection = CNewParticleEffect->CParticleCollectionPtr;
oSetParticleControlEnt(thisptr, CNewParticleEffect, a3, particleIndex, a5, attachType, a7, a8, a9);
}
Классы:
class C_BaseEntityOuterHelper {
public:
char pad_0000[8]; //0x0000
CBaseEntity* BaseEntity; //0x0008
};
class ParticlesList { // В падлу разбираться, что за класс, название от балды дал
public:
char pad_0000[8]; //0x0000
C_BaseEntityOuterHelper* C_BaseEntityOuterHelperPtr; //0x0008
};
class CNewParticleEffect {
public:
char pad_0000[32]; //0x0000
CParticleCollection* CParticleCollectionPtr; //0x0020
char pad_0028[48]; //0x0028
ParticlesList* ParticlesListPtr; //0x0058
};