Участник
-
Автор темы
- #121
инкремент поставь выше, до вызова, сделай как у вальвов, мало ли. роли это не играет скорее всего но просто на будущее на всякий: как у них так и у тебя должно быть.Я понял, значит получается так :
C++:#pragma once unsigned long long particle_pattern = 0; unsigned long long CDOTA_ParticleManager = 0; struct ParticleStruct { // Структура из стэка } Particle; void CreateParticle() { int CurrentHandle = *(int*)(CDOTA_ParticleManager + 0xA0); // Получаем хэндл unsigned long long CDOTA_ParticleManagerVMT = *(unsigned long long*)CDOTA_ParticleManager; // Виртуальная таблица unsigned long long CreateParticleFunc = *(unsigned long long*)(CDOTA_ParticleManager + 7 * 8); // Функа CreateParticle из таблицы ((void(__fastcall*)(unsigned long long _CDOTA_ParticleManager, int _CurrentHandle, ParticleStruct*))CreateParticleFunc)(CDOTA_ParticleManager, CurrentHandle, &Particle); // Ее вызов *(int*)(CDOTA_ParticleManager + 0xA0) = CurrentHandle + 1; // Инкремент CurrentHandle }
а так вроде все норм, не забудь структуру заполнить
C++:
struct particleSHIT {
const char* name;//"particles\xxx"
u64 attachment;//https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Panorama/Javascript/API#ParticleAttachment_t
Pointer<Entity> ent;//Entity ptr
char padding[200] = { 0 };
} sheetman = { _name,attachment_type,att };
handle = DPM->CurrentHandle();
DPM->IncHandle();
DPM->VirtualCall<7>(handle, &sheetman );