Гайд Продолжение. вбе(партикли)

Я понял, значит получается так :
C++:
Expand Collapse Copy
#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++:
Expand Collapse Copy
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 );
 
У меня почему то крашит, сделал так, хэдр с функцией создать партикль
C++:
Expand Collapse Copy
#pragma once
#include "ent_find.h"

unsigned long long particle_pattern = 0;
unsigned long long CDOTA_ParticleManager = 0;

struct ParticleStruct
{
    const char* particleName;
    unsigned long long particleAttachment;
    C_BaseEntity* entityToAttach;
    char pad[200] = { 0 };
} Particle;

void CreateParticle()
{
    int CurrentHandle = *(int*)(CDOTA_ParticleManager + 0xA0); // Получаем хэндл
    *(int*)(CDOTA_ParticleManager + 0xA0) = CurrentHandle + 1; // Инкремент CurrentHandle
    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); // Ее вызов
}
И сам вызов из мэйна
C++:
Expand Collapse Copy
    while (Entity)
    {
        if (*(int*)((unsigned long long)Entity + m_iTeamNum) == 2)
        {
            if (!strcmp((const char*)(*(unsigned long long*)Entity->CEntityIdentity->baseInfo->classInfo), "C_DOTA_BaseNPC_Hero"))
            {
                SDK.CMSG("Ally Entity : %s\n", n2hex((unsigned long long)Entity));
                Allies[a_counter++] = Entity;
            }
        }
        else
        {
            if (!strcmp((const char*)(*(unsigned long long*)Entity->CEntityIdentity->baseInfo->classInfo), "C_DOTA_BaseNPC_Hero"))
            {
                SDK.CMSG("Enemy Entity : %s\n", n2hex((unsigned long long)Entity));
                Enemies[e_counter++] = Entity;
            }
        }
        Entity->CEntityIdentity->m_pNext == 0 ? Entity = 0 : Entity = (C_BaseEntity*)(*(unsigned long long*)Entity->CEntityIdentity->m_pNext);
    }

    Particle.particleName = "particles/ui_mouseactions/selected_ring.vpcf";
    Particle.particleAttachment = 0;
    Particle.entityToAttach = Allies[0];
    CreateParticle();
 
У меня почему то крашит, сделал так, хэдр с функцией создать партикль
реально советую тебе перестать такой говнокод писать с unsigned long long, переходи уже на свои классы Pointer Function VirtualClass и т.д. а то у тебя по кд будет потому что не уследил вот так как у тебя сейчас:
unsigned long long CDOTA_ParticleManagerVMT = *(unsigned long long*)CDOTA_ParticleManager; // Виртуальная таблица
unsigned long long CreateParticleFunc = *(unsigned long long*)(CDOTA_ParticleManager + 7 * 8);//а прибавляешь то не к виртуальной таблице))
 
Бл*, спасибо, я невнимательный, я код раз 30 чекал свой чтобы понять почему крашит
 
Последнее редактирование:
А почему еще такое может быть? Там вон в стеке интересная строчка
 

Вложения

  • Снимок экрана (40).png
    Снимок экрана (40).png
    194.4 KB · Просмотры: 34
А почему еще такое может быть? Там вон в стеке интересная строчка
MS_VC_EXCEPTION = говнокод у тебя там...
Пожалуйста, авторизуйтесь для просмотра ссылки.
хуево с памятью обращаешься, стек засираешь, возвращая например указатель на локальную переменную после ее смерти, либо еще что-то не так делаешь. кароче код в студию
 
MS_VC_EXCEPTION = говнокод у тебя там...
Пожалуйста, авторизуйтесь для просмотра ссылки.
хуево с памятью обращаешься, стек засираешь, возвращая например указатель на локальную переменную после ее смерти, либо еще что-то не так делаешь. кароче код в студию
Отправил в лс
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Странно, что здесь этого не увидел, но найти нужную функцию можно проще же. Тупо через CE искать.
Если не видим = 06 (radiant) или 10 (dire). Видим = 14.
И тупо как мудак в экстернал-чите циклом проверять значение по сиге :kek:
 
Странно, что здесь этого не увидел, но найти нужную функцию можно проще же. Тупо через CE искать.
Если не видим = 06 (radiant) или 10 (dire). Видим = 14.
И тупо как мудак в экстернал-чите циклом проверять значение по сиге :kek:
на локалхеро онли работает этот нетвар. на остальных сущностей там netvarchangecallback юзается а само значение нетвара выбрасывается(то есть там не "сущность видна"/"сущность не видна", а "СУЩНОСТЬ УВИДЕЛИ" и "СУЩНОСТЬ ПЕРЕСТАЛИ ВИДЕТЬ", то есть увидели - нарисовалась сущность на экране, перестали видеть - перестала рисоваться). сам коллбек можно с хрефа найти и без CE.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
на локалхеро онли работает этот нетвар. на остальных сущностей там netvarchangecallback юзается а само значение нетвара выбрасывается(то есть там не "сущность видна"/"сущность не видна", а "СУЩНОСТЬ УВИДЕЛИ" и "СУЩНОСТЬ ПЕРЕСТАЛИ ВИДЕТЬ", то есть увидели - нарисовалась сущность на экране, перестали видеть - перестала рисоваться). сам коллбек можно с хрефа найти и без CE.
Не, я для такого пока слишком тупой. Сейчас основная задача -- понять, что там Вальве сделали с инжектом панорамы (ну как crutches\d2js делали).
Как-то те же d2js это обходят.
 
В чем проблема, почему бы сразу не вызывать готовый CreateParticle с удобными параметрами и возвращаемым значением ? Всего лишь нужно пропатчить одну проверку.
 
Будет гайд на автоюз способностей( ну например типа чекает сколько хп у каждого вражеского героя и если < 350 то наш герой(напримре зевс) ультанет)?
 
а шо тебе мешает if(localHero.NameIs("npc_dota_hero_zuus или какой там айди не помню у зевса")) if(enemy.m_iHealth < 350) PrepareUnitOrders(localHero.GetAbilityInSlot(5).entityIndex(),blablabla)?//слот 0 первый скилл 1 второй 2 третий 3 хайд(у большинства героев хайд.инвокер рубик дум и подобные герои у них пустая пока не сожрешь/состилишь/скастуешь абилку в этот слот. у мк у сфа и у других там абилки) 4 такой же хайд 5 ульта
Пожалуйста, авторизуйтесь для просмотра ссылки.
невиртуальная. ищи по хрефу waypoint_flag чето там .vpcf(если еще работает не тестил)
Пожалуйста, авторизуйтесь для просмотра ссылки.
(тут хреф)
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
(все ссылки довольно старые но думаю разберешься)
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Еще нашел такой вариант, если кому пригодится. Не знаю, для экстернала, например.
Легко можно сделать так, чтобы m_iTaggedAsVisibleByTeam (C_DOTA_BaseNPC + 0xE14) работал и на тиммейтов.
Находишь OnTeamVisibilityChanged.
48 8D 0D ? ? ? ? 48 89 5C 24 ? 48 89 4C 24 ? 33 C9 48 89 44 24 ? C7 44 24 ? ? ? ? ? C7 44 24 ? ? ? ? ? E8 ? ? ? ? 48 8D 0D ? ? ? ? 48 89 5D 88 48 89 4D 80 48 8D 0D ? ? ? ? 48 89 4D 98 33 C9 C6 45 A0 01 48 89 45 90 C7 45 ? ? ? ? ? C7 45 ? ? ? ? ? E8 ? ? ? ? 48 8D 0D ? ? ? ? 48 89 5D B8 48 89 4D B0 48 8D 0D ? ? ? ? 48 89 4D C8 33 C9 C6 45 D0 01
Ищешь mov rax,[rbp+00000C88]; bt rax,rcx; jb client.dll+BBA456 и тупо меняешь jb на jmp.
client.dll+BBA3D0 - 48 89 5C 24 08 - mov [rsp+08],rbx
client.dll+BBA3D5 - 48 89 6C 24 10 - mov [rsp+10],rbp
client.dll+BBA3DA - 48 89 74 24 18 - mov [rsp+18],rsi
client.dll+BBA3DF - 57 - push rdi
client.dll+BBA3E0 - 48 83 EC 20 - sub rsp,20
client.dll+BBA3E4 - 48 8B 3D 6567B402 - mov rdi,[client.dll+3700B50]
client.dll+BBA3EB - 48 8B F2 - mov rsi,rdx
client.dll+BBA3EE - 41 8B 18 - mov ebx,[r8]
client.dll+BBA3F1 - 48 8B E9 - mov rbp,rcx
client.dll+BBA3F4 - 48 85 FF - test rdi,rdi
client.dll+BBA3F7 - 74 48 - je client.dll+BBA441
client.dll+BBA3F9 - 48 8B 07 - mov rax,[rdi]
client.dll+BBA3FC - 48 8B CF - mov rcx,rdi
client.dll+BBA3FF - FF 90 50040000 - call qword ptr [rax+00000450]
client.dll+BBA405 - 84 C0 - test al,al
client.dll+BBA407 - 74 38 - je client.dll+BBA441
client.dll+BBA409 - 48 8B 07 - mov rax,[rdi]
client.dll+BBA40C - 48 8B CF - mov rcx,rdi
client.dll+BBA40F - FF 90 A8090000 - call qword ptr [rax+000009A8]
client.dll+BBA415 - 83 F8 3F - cmp eax,3F
client.dll+BBA418 - 77 0F - ja client.dll+BBA429
client.dll+BBA41A - 8B C8 - mov ecx,eax
client.dll+BBA41C - 48 8B 85 880C0000 - mov rax,[rbp+00000C88]
client.dll+BBA423 - 48 0FA3 C8 - bt rax,rcx
client.dll+BBA427 - EB 2D - jb client.dll+BBA456 << JMP
Тестил и в лобби с ботами (на Стокгольме), и в "Тренировка с ботами". Не думаю, что в пабе будут отличия.
Без патча.
Screenshot_1.png

С патчем.
Screenshot_5.png
 
Последнее редактирование:
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Кстате, если к этому добавить допиленный патчер инжекта vpk из соседнего треда, можно изи рисовать партикли всякие, когда тебя видно.
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ля, красиво, рад что пригодилось. На чем рисуешь, кстати? Мне так в падлу в своем интернале пердолиться с панорамой.
у меня экстернал, создаю оверлей поверх окна игры и, собственно, рисую.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
у меня экстернал, создаю оверлей поверх окна игры и, собственно, рисую.
Да вот тоже думаю что-то такое делать. При чем, чтобы оверлей был как бы отдельным окном.
Эдакий режим стримера. В OBS же можно не захватывать этот оверлей и играть на стриме с читами :^)
 
Да вот тоже думаю что-то такое делать. При чем, чтобы оверлей был как бы отдельным окном.
Эдакий режим стримера. В OBS же можно не захватывать этот оверлей и играть на стриме с читами :^)
можешь тогда просто презент OBS'а хукнуть и всё)
 
Назад
Сверху Снизу