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

Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Я понял, значит получается так :
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 );
 
Начинающий
Статус
Оффлайн
Регистрация
15 Дек 2018
Сообщения
146
Реакции[?]
9
Поинты[?]
0
У меня почему то крашит, сделал так, хэдр с функцией создать партикль
C++:
#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++:
    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();
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
У меня почему то крашит, сделал так, хэдр с функцией создать партикль
реально советую тебе перестать такой говнокод писать с 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);//а прибавляешь то не к виртуальной таблице))
 
Начинающий
Статус
Оффлайн
Регистрация
15 Дек 2018
Сообщения
146
Реакции[?]
9
Поинты[?]
0
Бл*, спасибо, я невнимательный, я код раз 30 чекал свой чтобы понять почему крашит
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
А почему еще такое может быть? Там вон в стеке интересная строчка
MS_VC_EXCEPTION = говнокод у тебя там...
Пожалуйста, авторизуйтесь для просмотра ссылки.
хуево с памятью обращаешься, стек засираешь, возвращая например указатель на локальную переменную после ее смерти, либо еще что-то не так делаешь. кароче код в студию
 
Начинающий
Статус
Оффлайн
Регистрация
15 Дек 2018
Сообщения
146
Реакции[?]
9
Поинты[?]
0
MS_VC_EXCEPTION = говнокод у тебя там...
Пожалуйста, авторизуйтесь для просмотра ссылки.
хуево с памятью обращаешься, стек засираешь, возвращая например указатель на локальную переменную после ее смерти, либо еще что-то не так делаешь. кароче код в студию
Отправил в лс
 
Последнее редактирование:
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Странно, что здесь этого не увидел, но найти нужную функцию можно проще же. Тупо через CE искать.
Если не видим = 06 (radiant) или 10 (dire). Видим = 14.
И тупо как мудак в экстернал-чите циклом проверять значение по сиге :kek:
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Странно, что здесь этого не увидел, но найти нужную функцию можно проще же. Тупо через CE искать.
Если не видим = 06 (radiant) или 10 (dire). Видим = 14.
И тупо как мудак в экстернал-чите циклом проверять значение по сиге :kek:
на локалхеро онли работает этот нетвар. на остальных сущностей там netvarchangecallback юзается а само значение нетвара выбрасывается(то есть там не "сущность видна"/"сущность не видна", а "СУЩНОСТЬ УВИДЕЛИ" и "СУЩНОСТЬ ПЕРЕСТАЛИ ВИДЕТЬ", то есть увидели - нарисовалась сущность на экране, перестали видеть - перестала рисоваться). сам коллбек можно с хрефа найти и без CE.
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
на локалхеро онли работает этот нетвар. на остальных сущностей там netvarchangecallback юзается а само значение нетвара выбрасывается(то есть там не "сущность видна"/"сущность не видна", а "СУЩНОСТЬ УВИДЕЛИ" и "СУЩНОСТЬ ПЕРЕСТАЛИ ВИДЕТЬ", то есть увидели - нарисовалась сущность на экране, перестали видеть - перестала рисоваться). сам коллбек можно с хрефа найти и без CE.
Не, я для такого пока слишком тупой. Сейчас основная задача -- понять, что там Вальве сделали с инжектом панорамы (ну как crutches\d2js делали).
Как-то те же d2js это обходят.
 
Новичок
Статус
Оффлайн
Регистрация
4 Фев 2021
Сообщения
1
Реакции[?]
0
Поинты[?]
0
В чем проблема, почему бы сразу не вызывать готовый CreateParticle с удобными параметрами и возвращаемым значением ? Всего лишь нужно пропатчить одну проверку.
 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
326
Реакции[?]
24
Поинты[?]
12K
Будет гайд на автоюз способностей( ну например типа чекает сколько хп у каждого вражеского героя и если < 350 то наш герой(напримре зевс) ультанет)?
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
а шо тебе мешает 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(если еще работает не тестил)
Пожалуйста, авторизуйтесь для просмотра ссылки.
(тут хреф)
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
(все ссылки довольно старые но думаю разберешься)
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Еще нашел такой вариант, если кому пригодится. Не знаю, для экстернала, например.
Легко можно сделать так, чтобы 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
 
Последнее редактирование:
smoking on that #pragma pack
Пользователь
Статус
Оффлайн
Регистрация
10 Янв 2018
Сообщения
325
Реакции[?]
96
Поинты[?]
1K
Последнее редактирование:
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Кстате, если к этому добавить допиленный патчер инжекта vpk из соседнего треда, можно изи рисовать партикли всякие, когда тебя видно.
 
Последнее редактирование:
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
smoking on that #pragma pack
Пользователь
Статус
Оффлайн
Регистрация
10 Янв 2018
Сообщения
325
Реакции[?]
96
Поинты[?]
1K
Ля, красиво, рад что пригодилось. На чем рисуешь, кстати? Мне так в падлу в своем интернале пердолиться с панорамой.
у меня экстернал, создаю оверлей поверх окна игры и, собственно, рисую.
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
у меня экстернал, создаю оверлей поверх окна игры и, собственно, рисую.
Да вот тоже думаю что-то такое делать. При чем, чтобы оверлей был как бы отдельным окном.
Эдакий режим стримера. В OBS же можно не захватывать этот оверлей и играть на стриме с читами :^)
 
smoking on that #pragma pack
Пользователь
Статус
Оффлайн
Регистрация
10 Янв 2018
Сообщения
325
Реакции[?]
96
Поинты[?]
1K
Да вот тоже думаю что-то такое делать. При чем, чтобы оверлей был как бы отдельным окном.
Эдакий режим стримера. В OBS же можно не захватывать этот оверлей и играть на стриме с читами :^)
можешь тогда просто презент OBS'а хукнуть и всё)
 
Сверху Снизу