Потому что нужно соглашение о вызове указать.C++:int AddParticle(FxSystem_c* particle, RwV3d* position, RwV3d* velocity, float unk, FxPrtMult_c* particleData, float a6, float brightness, float a8, int a9) { particle->AddParticle(position, velocity, unk, particleData, a6, brightness, a8, a9); return 1; }
функцию AddParticle что в ней передается брал фулл из idaC++:patch::RedirectCall(0x6DF303, AddParticle); patch::RedirectCall(0x6DEE83, AddParticle); patch::RedirectCall(0x6DF0C3, AddParticle);
psevdocode:int __thiscall FxSystem_c::AddParticle( FxSystem_c *particle, CVector *position, CVector *velocity, float unk, FxPrtMult_c *particleData, float a6, float brightness, float a8, int a9) { int v10; // esi int result; // eax FxPrim_c *particlePrim; // ecx float v13; // [esp+18h] [ebp-8h] int i; // [esp+3Ch] [ebp+1Ch] v10 = (rand() * 0.000030517578 * 100.0); result = Fx_c::GetFxQuality(&g_fx); if ( result || v10 >= 50 ) { result = Fx_c::GetFxQuality(&g_fx); if ( result != FX_MEDIUM || v10 >= 25 ) { v13 = 1.0; if ( brightness < a8 ) v13 = 1.0 - a8 + brightness; result = 0; for ( i = 0; result < particle->m_pBluePrint->m_nNumEmitters; i = ++result ) { particlePrim = particle->PrimsList[result]; if ( particlePrim->m_bEnabled ) { (particlePrim->vtable->field_14)( particlePrim, position, velocity, LODWORD(unk), particleData, LODWORD(a6), COERCE_FLOAT(LODWORD(v13)), a9); result = i; } } } } return result; }
но почему то крашит, пробовал пустую функцию делать все равно крашит
C++:
int __fastcall AddParticle(FxSystem_c* particle,
void* unused,
RwV3d* position,
RwV3d* velocity,
float unk,
FxPrtMult_c* particleData,
float a6,
float brightness,
float a8,
int a9)
{
particle->AddParticle(position, velocity, unk, particleData, a6, brightness, a8, a9);
return 1;
}