Вопрос Visible by enemy

sex
Забаненный
Статус
Оффлайн
Регистрация
4 Окт 2017
Сообщения
1,071
Реакции[?]
160
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
А как сделать полосу манабара и показывать кд способности ?
ваще советую тебе открыть дебаггер, зайти в доту, проитерировать сущностей и посмотреть на них в дебаггере. ну и дотку пореверсить.

А так, тебе надо:
1)найти героев
2)найти их абилки
3)отрисовать иконки абилок их кд и прочую хрень(манабары там что угодно) на экране.

Итерация сущностей:
C++:
#define ui unsigned long long //указатель на x64
...
ui ent = GetBaseEntityFunc(CGameEntSystem, 0); //первая ентити
while (ent) {
...
*(ui*)(
            *(ui*)(ent + 0x10) + 0x58
            ) == 0 ? ent = 0 : ent = *(ui*)(
                *(ui*)(
                    *(ui*)(ent + 0x10) + 0x58
                    )
                ); //некст ентитя. если значение (значение(ent+0x10) + 0x58) равно нулю то прекращаешь итерацию. если не равно 0 значит присваиваешь ent это значение и итерируешь дальше.
}
у сущностей есть такая структура как CEntityIdentity.
у CEntityIdentity глубоко закопан базовый класс(const char*) ("C_DOTA_BaseNPC_Hero", "C_DOTABaseAbility", "C_DOTA_Item" и т.д.), по нему ты находишь тип сущности.
у CEntityIdentity есть имена(внутреннее и свое. у кого-то есть оба, у кого-то только одно.) сущностей.
у CEntityIdentity есть CHandle сущности.
CHandle это 4 байт число которое состоит из Serial и Index сущности. Index это CHandle & x7FFF
у героев есть массив CHandle Abilities[32], из него ты можешь получить индексы сущностей абилок.
из индексов сущностей абилок ты можешь получить саму сущность абилки(сравнивая индекс из CHandle героя и индекс из CEntityIdentity текущей сущности).
у абилок есть кд, левел и прочая хрень.
теперь, когда ты знаешь это, тебе осталось открыть дебаггер или рекласс или что-то там еще и посмотреть что представляет из себя сущность. найти оффсеты(оффсет дампер в этом треде есть) и ты сможешь получить всю эту информацию).
имея координаты героя( пореверси джаваскриптовый GetAbsOrigin) ты можешь перевести их в координаты экрана(WorldToScreen тебе в помощь,
Пожалуйста, авторизуйтесь для просмотра ссылки.
) и отрисовать там свой манабар или что ты там хотел + имея имя абилки ты можешь найти ее иконку и ее где-нибудь тоже рядом с манабаром отрисовать; имея оставшийся кд абилки ты можешь поверх этой иконки написать этот оставшийся кд. имея левел абилки ты можешь написать где-нибудь левел этой абилки и т. д.;
 
Последнее редактирование:
<script>alert(0);</script>
Начинающий
Статус
Оффлайн
Регистрация
21 Дек 2019
Сообщения
91
Реакции[?]
19
Поинты[?]
0
ваще советую тебе открыть дебаггер, зайти в доту, проитерировать сущностей и посмотреть на них в дебаггере. ну и дотку пореверсить.

А так, тебе надо:
1)найти героев
2)найти их абилки
3)отрисовать иконки абилок их кд и прочую хрень(манабары там что угодно) на экране.

Итерация сущностей:
C++:
#define ui unsigned long long //указатель на x64
...
ui ent = GetBaseEntityFunc(CGameEntSystem, 0); //первая ентити
while (ent) {
...
*(ui*)(
            *(ui*)(ent + 0x10) + 0x58
            ) == 0 ? ent = 0 : ent = *(ui*)(
                *(ui*)(
                    *(ui*)(ent + 0x10) + 0x58
                    )
                ); //некст ентитя. если значение (значение(ent+0x10) + 0x58) равно нулю то прекращаешь итерацию. если не равно 0 значит присваиваешь ent это значение и итерируешь дальше.
}
у сущностей есть такая структура как CEntityIdentity.
у CEntityIdentity глубоко закопан базовый класс(const char*) ("C_DOTA_BaseNPC_Hero", "C_DOTABaseAbility", "C_DOTA_Item" и т.д.), по нему ты находишь тип сущности.
у CEntityIdentity есть имена(внутреннее и свое. у кого-то есть оба, у кого-то только одно.) сущностей.
у CEntityIdentity есть CHandle сущности.
CHandle это 4 байт число которое состоит из Serial и Index сущности. Index это CHandle & x7FFF
у героев есть массив CHandle Abilities[32], из него ты можешь получить индексы сущностей абилок.
из индексов сущностей абилок ты можешь получить саму сущность абилки(сравнивая индекс из CHandle героя и индекс из CEntityIdentity текущей сущности).
у абилок есть кд, левел и прочая хрень.
теперь, когда ты знаешь это, тебе осталось открыть дебаггер или рекласс или что-то там еще и посмотреть что представляет из себя сущность. найти оффсеты(оффсет дампер в этом треде есть) и ты сможешь получить всю эту информацию).
имея координаты героя(тут все не так просто. у сущности есть 4 пачки координат(float x1, float y1, float z1, float zero1, float x2,float y2,float z2,float zero2,... float zero4)(0x11d8 оффсет). когда герой стоит на месте все 4 пачки одинаковы. когда движется то его координаты лежат в "актуальной" пачке. "актуальная" пачка это такая пачка, которая имеет наиболее актуальное значение наиболее значимой оси. то есть ты находишь сначала передний вектор(пореверси джаваскриптовый Entities.GetForward ) ( передний вектор это изменение координат сущности по осям за еденицу передвижения, напимер передний вектор [0.866,0.5,0] обозначает, что сущность за еденицу передвижения изменит свой x на 0.866, y на 0.5 и z на 0. наиболее значимая ось в этом случае x, то есть ось с максимальным модулем.), потом из этого переднего вектора находишь наиболее значимую ось, потом сравниваешь у всех 4 пачек координаты на этой оси и находишь максимальное значение(если в переднем векторе изменение по оси больше 0) или минимальное значение(если в переднем векторе изменение по оси меньше 0). пачка, где значение наиболее значимой оси максимально или минимально в зависимости от знака(+ или -) оси в переднем векторе будет "актуальной". то есть тебя интересуют координаты именно этой пачки, а остальные 3 пачки тебе нафиг не нужны.) ты можешь перевести их в координаты экрана(WorldToScreen тебе в помощь,
Пожалуйста, авторизуйтесь для просмотра ссылки.
) и отрисовать там свой манабар или что ты там хотел + имея имя абилки ты можешь найти ее иконку и ее где-нибудь тоже рядом с манабаром отрисовать; имея оставшийся кд абилки ты можешь поверх этой иконки написать этот оставшийся кд. имея левел абилки ты можешь написать где-нибудь левел этой абилки и т. д.;
Артем , ты ли это?
 
Начинающий
Статус
Оффлайн
Регистрация
19 Дек 2018
Сообщения
10
Реакции[?]
0
Поинты[?]
0
ваще советую тебе открыть дебаггер, зайти в доту, проитерировать сущностей и посмотреть на них в дебаггере. ну и дотку пореверсить.

А так, тебе надо:
1)найти героев
2)найти их абилки
3)отрисовать иконки абилок их кд и прочую хрень(манабары там что угодно) на экране.

Итерация сущностей:
C++:
#define ui unsigned long long //указатель на x64
...
ui ent = GetBaseEntityFunc(CGameEntSystem, 0); //первая ентити
while (ent) {
...
*(ui*)(
            *(ui*)(ent + 0x10) + 0x58
            ) == 0 ? ent = 0 : ent = *(ui*)(
                *(ui*)(
                    *(ui*)(ent + 0x10) + 0x58
                    )
                ); //некст ентитя. если значение (значение(ent+0x10) + 0x58) равно нулю то прекращаешь итерацию. если не равно 0 значит присваиваешь ent это значение и итерируешь дальше.
}
у сущностей есть такая структура как CEntityIdentity.
у CEntityIdentity глубоко закопан базовый класс(const char*) ("C_DOTA_BaseNPC_Hero", "C_DOTABaseAbility", "C_DOTA_Item" и т.д.), по нему ты находишь тип сущности.
у CEntityIdentity есть имена(внутреннее и свое. у кого-то есть оба, у кого-то только одно.) сущностей.
у CEntityIdentity есть CHandle сущности.
CHandle это 4 байт число которое состоит из Serial и Index сущности. Index это CHandle & x7FFF
у героев есть массив CHandle Abilities[32], из него ты можешь получить индексы сущностей абилок.
из индексов сущностей абилок ты можешь получить саму сущность абилки(сравнивая индекс из CHandle героя и индекс из CEntityIdentity текущей сущности).
у абилок есть кд, левел и прочая хрень.
теперь, когда ты знаешь это, тебе осталось открыть дебаггер или рекласс или что-то там еще и посмотреть что представляет из себя сущность. найти оффсеты(оффсет дампер в этом треде есть) и ты сможешь получить всю эту информацию).
имея координаты героя( пореверси джаваскриптовый GetAbsOrigin) ты можешь перевести их в координаты экрана(WorldToScreen тебе в помощь,
Пожалуйста, авторизуйтесь для просмотра ссылки.
) и отрисовать там свой манабар или что ты там хотел + имея имя абилки ты можешь найти ее иконку и ее где-нибудь тоже рядом с манабаром отрисовать; имея оставшийся кд абилки ты можешь поверх этой иконки написать этот оставшийся кд. имея левел абилки ты можешь написать где-нибудь левел этой абилки и т. д.;

Фига ты там написал мне ) Я просто имел в виду придется делать хук на директ х и рисовать или как то по другому можно . Ну уже понял через твой ответ . спасиб .
 
<script>alert(0);</script>
Начинающий
Статус
Оффлайн
Регистрация
21 Дек 2019
Сообщения
91
Реакции[?]
19
Поинты[?]
0
Фига ты там написал мне ) Я просто имел в виду придется делать хук на директ х и рисовать или как то по другому можно . Ну уже понял через твой ответ . спасиб .
а ты че там мутишь?) есть тг?) дай в лс :roflanEbalo:
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Фига ты там написал мне ) Я просто имел в виду придется делать хук на директ х и рисовать или как то по другому можно . Ну уже понял через твой ответ . спасиб .
можешь директикс, можешь паинттраверс, можешь как угодно.
Пожалуйста, авторизуйтесь для просмотра ссылки.
тут вот есть хук паинттраверса.
 
Lamer-Programmer
Начинающий
Статус
Оффлайн
Регистрация
14 Ноя 2017
Сообщения
249
Реакции[?]
17
Поинты[?]
0
ваще советую тебе открыть дебаггер, зайти в доту, проитерировать сущностей и посмотреть на них в дебаггере. ну и дотку пореверсить.

А так, тебе надо:
1)найти героев
2)найти их абилки
3)отрисовать иконки абилок их кд и прочую хрень(манабары там что угодно) на экране.

Итерация сущностей:
C++:
#define ui unsigned long long //указатель на x64
...
ui ent = GetBaseEntityFunc(CGameEntSystem, 0); //первая ентити
while (ent) {
...
*(ui*)(
            *(ui*)(ent + 0x10) + 0x58
            ) == 0 ? ent = 0 : ent = *(ui*)(
                *(ui*)(
                    *(ui*)(ent + 0x10) + 0x58
                    )
                ); //некст ентитя. если значение (значение(ent+0x10) + 0x58) равно нулю то прекращаешь итерацию. если не равно 0 значит присваиваешь ent это значение и итерируешь дальше.
}
у сущностей есть такая структура как CEntityIdentity.
у CEntityIdentity глубоко закопан базовый класс(const char*) ("C_DOTA_BaseNPC_Hero", "C_DOTABaseAbility", "C_DOTA_Item" и т.д.), по нему ты находишь тип сущности.
у CEntityIdentity есть имена(внутреннее и свое. у кого-то есть оба, у кого-то только одно.) сущностей.
у CEntityIdentity есть CHandle сущности.
CHandle это 4 байт число которое состоит из Serial и Index сущности. Index это CHandle & x7FFF
у героев есть массив CHandle Abilities[32], из него ты можешь получить индексы сущностей абилок.
из индексов сущностей абилок ты можешь получить саму сущность абилки(сравнивая индекс из CHandle героя и индекс из CEntityIdentity текущей сущности).
у абилок есть кд, левел и прочая хрень.
теперь, когда ты знаешь это, тебе осталось открыть дебаггер или рекласс или что-то там еще и посмотреть что представляет из себя сущность. найти оффсеты(оффсет дампер в этом треде есть) и ты сможешь получить всю эту информацию).
имея координаты героя( пореверси джаваскриптовый GetAbsOrigin) ты можешь перевести их в координаты экрана(WorldToScreen тебе в помощь,
Пожалуйста, авторизуйтесь для просмотра ссылки.
) и отрисовать там свой манабар или что ты там хотел + имея имя абилки ты можешь найти ее иконку и ее где-нибудь тоже рядом с манабаром отрисовать; имея оставшийся кд абилки ты можешь поверх этой иконки написать этот оставшийся кд. имея левел абилки ты можешь написать где-нибудь левел этой абилки и т. д.;
Бро есть готовый vbe можно с устаревшими оффсетами? Потренится просто не все понятно сразу) А ты не бомж. Бомжи плюсы не знают и темболее как доту отреверсить.
 
sex
Забаненный
Статус
Оффлайн
Регистрация
4 Окт 2017
Сообщения
1,071
Реакции[?]
160
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Бро есть готовый vbe можно с устаревшими оффсетами? Потренится просто не все понятно сразу) А ты не бомж. Бомжи плюсы не знают и темболее как доту отреверсить.
Есть.Старенький колик на луа
 
<script>alert(0);</script>
Начинающий
Статус
Оффлайн
Регистрация
21 Дек 2019
Сообщения
91
Реакции[?]
19
Поинты[?]
0
Бро есть готовый vbe можно с устаревшими оффсетами? Потренится просто не все понятно сразу) А ты не бомж. Бомжи плюсы не знают и темболее как доту отреверсить.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Lamer-Programmer
Начинающий
Статус
Оффлайн
Регистрация
14 Ноя 2017
Сообщения
249
Реакции[?]
17
Поинты[?]
0
Lamer-Programmer
Начинающий
Статус
Оффлайн
Регистрация
14 Ноя 2017
Сообщения
249
Реакции[?]
17
Поинты[?]
0
<script>alert(0);</script>
Начинающий
Статус
Оффлайн
Регистрация
21 Дек 2019
Сообщения
91
Реакции[?]
19
Поинты[?]
0
Lamer-Programmer
Начинающий
Статус
Оффлайн
Регистрация
14 Ноя 2017
Сообщения
249
Реакции[?]
17
Поинты[?]
0
та я согласен. но все же)) мб и это будет полезно
Ну уому то может и поможет) У меня на данный момент есть на JS

JavaScript:
import { Entity, LocalPlayer, ParticlesSDK, Unit, Hero, WardObserver, Creep, EventsSDK, EntityManager } from "wrapper/Imports"
import { showOnAll, showOnAllies, showOnCreeps, showOnSelf, showOnWards, State, switcher } from "./Menu"

let allUnits = new Map<Unit, number>(), // <Unit, Particle>
    particlePath: string[] = [
        "particles/items_fx/aura_shivas.vpcf",
        "particles/ui/ui_sweeping_ring.vpcf",
        "particles/units/heroes/hero_omniknight/omniknight_heavenly_grace_beam.vpcf",
        "particles/units/heroes/hero_spirit_breaker/spirit_breaker_haste_owner_status.vpcf",
        "particles/units/heroes/hero_spirit_breaker/spirit_breaker_haste_owner_dark.vpcf",
        "particles/units/heroes/hero_oracle/oracle_fortune_purge.vpcf",
        "particles/units/heroes/hero_spirit_breaker/spirit_breaker_haste_owner_timer.vpcf",
    ]

State.OnValue(OnOptionToggle)
showOnAll.OnValue(OnOptionToggle)
showOnSelf.OnValue(OnOptionToggle)
showOnAllies.OnValue(OnOptionToggle)
showOnWards.OnValue(OnOptionToggle)
showOnCreeps.OnValue(OnOptionToggle)
switcher.OnValue(OnOptionToggle)

function Destroy(unit: Unit, particleID = allUnits.get(unit)!) {
    ParticlesSDK.Destroy(particleID)
    allUnits.delete(unit)
}

export function Init() {
    allUnits.clear()
}

function OnOptionToggle() {
    // loop-optimizer: KEEP
    allUnits.forEach((particle, unit) => CheckUnit(unit))
}

function IsUnitShouldBeHighlighted(unit: Unit) {
    if (unit instanceof Hero) {
        if (showOnSelf.value && unit.Owner === LocalPlayer)
            return true

        if (showOnAllies.value && unit.Owner !== LocalPlayer)
            return true
    }

    if (unit instanceof Creep && showOnCreeps.value)
        return true

    if (unit instanceof WardObserver && showOnWards.value)
        return true

    return showOnAll.value
}

export function TeamVisibilityChanged(npc: Unit) {
    CheckUnit(npc)
}

function CheckUnit(unit: Unit, isVisibleForEnemies: boolean = unit.IsVisibleForEnemies) {
    if (!State.value || unit.IsEnemy() || !unit.IsAlive || !IsUnitShouldBeHighlighted(unit)) {
        if (allUnits.has(unit))
            Destroy(unit)
        return
    }

    let particleID = allUnits.get(unit)
    if (isVisibleForEnemies && particleID === undefined)
        allUnits.set(unit, ParticlesSDK.Create(particlePath[switcher.selected_id], ParticleAttachment_t.PATTACH_ABSORIGIN_FOLLOW, unit))
    else if (!isVisibleForEnemies && particleID !== undefined)
        Destroy(unit, particleID)
}
EventsSDK.on("EntityTeamChanged", ent => {
    if (ent instanceof Unit)
        CheckUnit(ent)
    if (LocalPlayer === ent)
        EntityManager.GetEntitiesByClass(Unit).forEach(unit => CheckUnit(unit))
})

export function EntityDestroyed(ent: Entity) {
    if (!(ent instanceof Unit) || !allUnits.has(ent))
        return
    Destroy(ent)
}

export function LifeStateChanged(ent: Entity) {
    if (ent instanceof Unit)
        CheckUnit(ent)
}
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Ну уому то может и поможет) У меня на данный момент есть на JS

JavaScript:
import { Entity, LocalPlayer, ParticlesSDK, Unit, Hero, WardObserver, Creep, EventsSDK, EntityManager } from "wrapper/Imports"
import { showOnAll, showOnAllies, showOnCreeps, showOnSelf, showOnWards, State, switcher } from "./Menu"

let allUnits = new Map<Unit, number>(), // <Unit, Particle>
    particlePath: string[] = [
        "particles/items_fx/aura_shivas.vpcf",
        "particles/ui/ui_sweeping_ring.vpcf",
        "particles/units/heroes/hero_omniknight/omniknight_heavenly_grace_beam.vpcf",
        "particles/units/heroes/hero_spirit_breaker/spirit_breaker_haste_owner_status.vpcf",
        "particles/units/heroes/hero_spirit_breaker/spirit_breaker_haste_owner_dark.vpcf",
        "particles/units/heroes/hero_oracle/oracle_fortune_purge.vpcf",
        "particles/units/heroes/hero_spirit_breaker/spirit_breaker_haste_owner_timer.vpcf",
    ]

State.OnValue(OnOptionToggle)
showOnAll.OnValue(OnOptionToggle)
showOnSelf.OnValue(OnOptionToggle)
showOnAllies.OnValue(OnOptionToggle)
showOnWards.OnValue(OnOptionToggle)
showOnCreeps.OnValue(OnOptionToggle)
switcher.OnValue(OnOptionToggle)

function Destroy(unit: Unit, particleID = allUnits.get(unit)!) {
    ParticlesSDK.Destroy(particleID)
    allUnits.delete(unit)
}

export function Init() {
    allUnits.clear()
}

function OnOptionToggle() {
    // loop-optimizer: KEEP
    allUnits.forEach((particle, unit) => CheckUnit(unit))
}

function IsUnitShouldBeHighlighted(unit: Unit) {
    if (unit instanceof Hero) {
        if (showOnSelf.value && unit.Owner === LocalPlayer)
            return true

        if (showOnAllies.value && unit.Owner !== LocalPlayer)
            return true
    }

    if (unit instanceof Creep && showOnCreeps.value)
        return true

    if (unit instanceof WardObserver && showOnWards.value)
        return true

    return showOnAll.value
}

export function TeamVisibilityChanged(npc: Unit) {
    CheckUnit(npc)
}

function CheckUnit(unit: Unit, isVisibleForEnemies: boolean = unit.IsVisibleForEnemies) {
    if (!State.value || unit.IsEnemy() || !unit.IsAlive || !IsUnitShouldBeHighlighted(unit)) {
        if (allUnits.has(unit))
            Destroy(unit)
        return
    }

    let particleID = allUnits.get(unit)
    if (isVisibleForEnemies && particleID === undefined)
        allUnits.set(unit, ParticlesSDK.Create(particlePath[switcher.selected_id], ParticleAttachment_t.PATTACH_ABSORIGIN_FOLLOW, unit))
    else if (!isVisibleForEnemies && particleID !== undefined)
        Destroy(unit, particleID)
}
EventsSDK.on("EntityTeamChanged", ent => {
    if (ent instanceof Unit)
        CheckUnit(ent)
    if (LocalPlayer === ent)
        EntityManager.GetEntitiesByClass(Unit).forEach(unit => CheckUnit(unit))
})

export function EntityDestroyed(ent: Entity) {
    if (!(ent instanceof Unit) || !allUnits.has(ent))
        return
    Destroy(ent)
}

export function LifeStateChanged(ent: Entity) {
    if (ent instanceof Unit)
        CheckUnit(ent)
}
круто. че за апи? не припомню чтобы в панораме такое было.
 
Lamer-Programmer
Начинающий
Статус
Оффлайн
Регистрация
14 Ноя 2017
Сообщения
249
Реакции[?]
17
Поинты[?]
0
Lamer-Programmer
Начинающий
Статус
Оффлайн
Регистрация
14 Ноя 2017
Сообщения
249
Реакции[?]
17
Поинты[?]
0
Раньше можно было бы собрать все в vpk и ебошить. Сейчас нужно инжектить все это дело.
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Раньше можно было бы собрать все в vpk и ебошить. Сейчас нужно инжектить все это дело.
щас тоже с впк можно ебашить. с панорамой по крайней мере. -tempcontent в параметры запуска и создаешь dota 2 beta\game\dota_tempcontent\pak01_dir.vpk куда засовываешь все что надо.
 
Lamer-Programmer
Начинающий
Статус
Оффлайн
Регистрация
14 Ноя 2017
Сообщения
249
Реакции[?]
17
Поинты[?]
0
щас тоже с впк можно ебашить. с панорамой по крайней мере. -tempcontent в параметры запуска и создаешь dota 2 beta\game\dota_tempcontent\pak01_dir.vpk куда засовываешь все что надо.
Пробовал уже сам?
 
Сверху Снизу