• Добро пожаловать на сайт - wlux.net!

    FAQ по форуму

    1. Все сообщения до группы местный проходят модерацию от 1 минуты до 24 часа

    2. Сообщения учитываються в следующих разделах: Читать

    3.Что-бы скачать вложение нужно 2 сообщения.

    4.Личные переписки работают только с Администрацией форума

    5. Запрещено: Просить скрытый текст , спам, реклама, скам, ддос, кардинг и другая чернуха, нарушать любые законы РФ/СНГ = бан аккаунта

    6. Внимание! Мы не удаляем аккаунты с форума! Будьте внимательны ДО регистрации! Как удалить аккаунт на форуме?!

    5.Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Free Исходник Dota 2 External Python

Оффлайн

wlux.net

Где волчьи уши, там волчьи зубы.
Команда форума
LV
7
 
20.06.2022
23 868
218
36
Награды
10
Пол
Муж.

Репутация:

  • Автор темы
  • Администратор
  • Модератор
  • Команда форума
  • #1
Есть готовое смещение на хп объекта, остальное легко найти по адресу объекта.

Для работы используйте режим в окне 1600x900.



Python:
import pymem
import pymem.process
from externaloverlayrep import Overlay

entilist = []
overlay = Overlay('Dota 2', 0.0001)
dota = pymem.Pymem("dota2.exe")
client = pymem.process.module_from_name(dota.process_handle, "client.dll")
client = client.lpBaseOfDll

offset_entity = 0x3B944B0
offset_hp = 0x324
offset_entity_x = 0x13F8
offset_entity_y = 0x13FC
offset_entity_z = 0x1400
offset_cam_x = 0x39D0750
offset_cam_y = 0x39D0754


def entity_finder():

    elist = dota.read_longlong(client + offset_entity)

    for i in range(1, 5000):
        try:
            entity = dota.read_longlong(elist + i * 0x04)
            if len(str(entity)) > 8 and len(str(entity)) <= 13:
                entilist.append(entity)

        except Exception as error:
            # print(error)
            pass

    print(entilist)
    main()


def main():
    while True:
        camera_x = dota.read_float(client + offset_cam_x)
        camera_y = dota.read_float(client + offset_cam_y)
        # print(hex(client + offset_cam_y))

        for entity in entilist:
            try:
                hp = dota.read_int(entity + offset_hp)

                #  print(hp)

                entity_x = dota.read_float(entity + offset_entity_x)
                entity_y = dota.read_float(entity + offset_entity_y)
                entity_z = dota.read_float(entity + offset_entity_z)

                o_entity_x = (entity_x - camera_x) / 1.7 + 750
                o_entity_y = (camera_y + 600 - entity_y) / 2 + 450

                if o_entity_x < 1920 and o_entity_y < 1080:
                    overlay.draw_text(f'[{hex(entity)}]', ('Arial', 16), o_entity_x, o_entity_y, (0, 255, 0), False)
                # overlay.draw_text(f'x [{entity_x}] y [{entity_y}]', ('Ebrima', 14), o_entity_x, o_entity_y + 20, (0, 255, 0), False)

                overlay.draw_text(f'cam_x: {int(camera_x)} | cam_y: {int(camera_y)}', ('Ebrima', 20), 15, 50, (255, 255, 255), False)

            except Exception:
                # print(hex(entity))
                pass

        overlay.update_overlay()


if __name__ == "__main__":
    entity_finder()

Стоит понимать, что в Доте при виде сверху, камера - это трапеция, т.е нормальное положение будет только у тех объектов, которые оказались по середине экрана на средней линии, остальные же получат сумасшедшие искажения по всем осям. Это заметно даже на скриншоте по тому, что только герои на средней линии имеют координаты в ногах, у других же, они сдвинуты

Максимальный FOV в доте - 1.(7), мин - 1.1, вообще максимальный FOV по Y - 2.2, но тогда придется перестраивать вычисления и вообще это всё очень долго, так что сочтём за погрешность

Вот код коррекции X и Y координаты, конечно же есть ещё, что можно улучшить

Python:
#Генерация графика перехода
u = []
x = 1.0
for i in range(0,1080):
    u.append(x)
    x+= 0.78/1080

# e - entity, c - camera
x = (e_x-c_x)/1.78 + 1920/2
y = (c_y+560-e_y)/1.78  + 1080/2

#Преобразование Y координаты
if y >= (c_y + 560 - e_y) + 1080 / 2:
    y = (c_y + 560 - e_y) / 1.78 + 1080 / 2 #Для координат до средней линеей
else:
    y = (c_y + 560 - e_y) / 1.2 + 1080 / 2 #Для координат после средней линеей

#Преобразование X координаты с помощью Y
x = (e_x - c_x) / u[-int(y)] + 1920 / 2

Вот собственно говоря результат, как я уже говорил - не идеально, но с этим уже можно работать и даже попробовать написать какой - нибудь автокаст:

 
V Оффлайн

Visualpl

Участник
LV
3
 
11.12.2022
4
0
25
Награды
3
33

Репутация:

На какой версии питона адекватно работает? Ибо на 3.07 пишет что не удается скачать pymem,а на 3.11 ошибки в externaloverlayrep
 
Оффлайн

wlux.net

Где волчьи уши, там волчьи зубы.
Команда форума
LV
7
 
20.06.2022
23 868
218
36
Награды
10
Пол
Муж.

Репутация:

  • Автор темы
  • Администратор
  • Модератор
  • Команда форума
  • #3
1 Оффлайн

1337resn

Участник
LV
0
 
02.02.2023
20
0
15
24

Репутация:

Чет оно так себе работает, безсмысленно
 
A Оффлайн

asdfgqwerty

Местный
Участник
LV
3
 
27.04.2023
101
0
40
Награды
5
25

Репутация:

а его уже пофиксили?
 

Поиск по форуму

Похожие темы:

Данный сайт использует cookie. Вы должны принять их для продолжения использования. Узнать больше....