Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

Вопрос Inject, вопросы новичка.

Раз уж пошло такое дело, тоже задам глупый вопрос. Хочу тут одну штуку сделать.
В popup_accept_match, как известно, добавляется onload="DOTAPlayAcceptMatch()".
Так вот я хочу сюда навесить свою функцию, но так, чтобы и автопринималка осталась.
Вроде очевидно, что нужно сделать что-то типа onload="MyAwesomeFunc()" и ниже
JavaScript:
Expand Collapse Copy
<script>
    function MyAwesomeFunc() {
    // Делаю свои дела и
    DOTAPlayAcceptMatch()
    }
</script>
Но тогда я получаю DOTAPlayAcceptMatch is not defined. ЧЯДНТ?
PopupAcceptMatch onload="myfunc() DOTAPlayAcceptMatch()" попробуй. либо "myfunc();DOTAPlayAcceptMatch();" либо какой-нибудь "(function(){my_code})();DOTAPlayAcceptMatch()" если там такой синтаксис поддерживается
сам не пробовал, но в оригинале строка есть там так же несколько функций вызывается в одном коллбеке, поэтому должно работать
<Panel id="ButtonContainer">
<Button id="Button0" class="LargeButton" onactivate="DOTAPlayAcceptMatch() AddStyle( PopupAcceptDeclineMatchPanel, Accepted ) AddStyle( PopupReadyUpPlayersPanel, Accepted )">
<Label text="#dota_accept_match_accept_button" />
</Button>
<Panel class="DeclineContainer">
<Panel class="InfoIcon" onmouseover="UIShowTextTooltip( #dota_accept_match_decline_info )" onmouseout="UIHideTextTooltip()"/>
<Button id="Button1" onactivate="DOTAPlayDeclineMatch()">
<Label text="#dota_accept_match_decline" />
</Button>
</Panel>
</Panel>
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Nah, две функции навесить не получилось -- тогда вообще кнопка принятия ломается, лол.
Но получилось повесить не на сам PopupAcceptMatch, а ниже. Типа такого:
JavaScript:
Expand Collapse Copy
<PopupAcceptMatch class="PopupPanelEffects Hidden" popupbackground="dim" defaultfocus="Button0" hittest="false" onload="DOTAPlayAcceptMatch()">
<DOTAScenePanel id="ModelUIAccept" map="backgrounds/accept_popup_test" camera="shot_camera" hittest="false" particleonly="true" onload="MyFunc()"/>

Осталось только бота для Вк дописать, чтобы он уведомлял о найденной игре. Ну так чисто, по приколу :^)
 
Nah, две функции навесить не получилось -- тогда вообще кнопка принятия ломается, лол.
Но получилось повесить не на сам PopupAcceptMatch, а ниже. Типа такого:
JavaScript:
Expand Collapse Copy
<PopupAcceptMatch class="PopupPanelEffects Hidden" popupbackground="dim" defaultfocus="Button0" hittest="false" onload="DOTAPlayAcceptMatch()">
<DOTAScenePanel id="ModelUIAccept" map="backgrounds/accept_popup_test" camera="shot_camera" hittest="false" particleonly="true" onload="MyFunc()"/>

Осталось только бота для Вк дописать, чтобы он уведомлял о найденной игре. Ну так чисто, по приколу :^)
Попробуй так

function MyFunc(DOTAPlayAcceptMatch){
DOTAPlayAcceptMatch()
//свой код
}

а на элементе
onload="MyFunc(DOTAPlayAcceptMatch)"
 
Радар хака как такового на доту нет(только на виспа), есть приколы по типу, где и кто фармят споты в лесу, кто и где скилы юзает, вообщем полного радар хака тебе никто не даст. Ну на сегодняшний день)
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Эмм ору людей не трави пжпжпжпж
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Чет не получается у меня одна штука, может кто подскажет.
Играюсь тут с редактирование памяти (решил отказаться от js\панорамы), вроде даже что-то получается.
Нашел и могу менять, скажем, cl_weather или dota_use_particle_fow. А вот с dota_camera_distance и r_farz не выходит.
Значение из памяти читается, если я через консоль доты меняю -- получаю новое.
А вот изменить не могу. Я так понимаю, оно в память пишется, но не читается.
Да, по хорошему, мне бы через ClientCmd (?) слать эти команды, но я для такого пока слишком тупой.
Я вообще на шарпе пишу, юзая
Пожалуйста, авторизуйтесь для просмотра ссылки.
XD
 
Чет не получается у меня одна штука, может кто подскажет.
Играюсь тут с редактирование памяти (решил отказаться от js\панорамы), вроде даже что-то получается.
Нашел и могу менять, скажем, cl_weather или dota_use_particle_fow. А вот с dota_camera_distance и r_farz не выходит.
Значение из памяти читается, если я через консоль доты меняю -- получаю новое.
А вот изменить не могу. Я так понимаю, оно в память пишется, но не читается.
Да, по хорошему, мне бы через ClientCmd (?) слать эти команды, но я для такого пока слишком тупой.
Я вообще на шарпе пишу, юзая
Пожалуйста, авторизуйтесь для просмотра ссылки.
XD
у конваров есть коллбеки на изменение, поэтому ничего и не происходит при изменении квара не через VEngineCvar007.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
либо VEngineCvar007->FindCommand("r_farz")->SetValue("20000")
либо через ClientCMD(
Пожалуйста, авторизуйтесь для просмотра ссылки.
наверн)(правда нахуя когда квары есть)
альтернативно именно камера
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ого. Спасибо! Может, из этого действительно что-то да получится. Энивей, главное -- интересно :З
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ну а вообще, ищи в IDA текст "Can't change replicated ConVar %s from".
Жми на вот эту красную стрелочку.

1611762387782.png


Там выше (4 снизу) нужная функция, тебе нужен jz (0x74), меняй его на jmp (0xeb).
Можешь нажать на нужный бай, потом в верхнем меню Jump => Jump to offset, и скопировать то, что оно тебе выдаст.
Это и есть тот самый оффсет. А еще лучше, заюзай
Пожалуйста, авторизуйтесь для просмотра ссылки.
, он тебе сигу сделает.

1611762458920.png
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Спасибо, но как я понял в твоей программе не разблокируется св_читс чтобы дать конечному пользователю свободу ввода команд в консоль, а это единственное что мне нужно :pensive:
А зачем, если я меняю конвары напрямую? Так просто открой CE, подключись к доте, зайди в локальное лобби, введи что-то типа sv_cheats 228322.
Найди, отсей. Вот тебе и статичный указатель. До следующей обновы либы будет работать. А хочешь -- сделай сигу,вообще кайф будет.
Можешь, например,
Пожалуйста, авторизуйтесь для просмотра ссылки.
использовать для этого.

Ну и вообще, я же описал, как sv_cheats анлокнуть. Даже двумя способами.
 
Подскажите пожалуйста новые значения для байт патча там сига поменялась
два хрефа в engine2.dll есть, вариантов патча дофига и больше можешь их стакать как резерв.
примерный псевдокод:
C++:
Expand Collapse Copy
CInputService::ProcessCommand(..., command ,...)
    ...
    IsValid(command)
    no->
        ConMsg("Unknown command or convar '%s'!\n")
        return
    IsCommand(command)
    yes->
        IsCheatCommand(command)//cl_ent_find и подобные наверно не помню уже
        yes->
            Host_IsSinglePlayerGame()
            yes->
                ExecuteCommand(command)
                return
            no->
                CanCheat()
                yes->
                    ExecuteCommand(command)
                    return
                no->
                    IsPlayingDemo()
                    yes->
                        ExecuteCommand(command)
                        return
                    no->
                        ConMsg("SV: Cheat command '%s' ignored.\n")
                        return
        no->
            ExecuteCommand(command)
            return
    no->
        IsConvarCheatProtected(command)//dota_camera_distance etc.
        yes->
            Host_IsSinglePlayerGame()
            ->yes
                SetConvarValue(blablabla)
                return
            ->no
                CanCheat()
                ->yes
                    SetConvarValue(blablabla)
                    return
                ->no
                    IsPlayingDemo()
                    ->yes
                        SetConvarValue(blablabla)
                        return
                    ->no
                        ConMsg("SV: Convar '%s' is cheat protected, change ignored.\n")
                        return
        IsConvarReplicated(command)//sv_cheats и т.д.
        yes->
            CNetworkClientService::IsConnected()
            ->yes
                CNetworkClientService::DisconnectGameQueued()
                ->yes
                    SetConvarValue(blablabla)
                    return
                ->no
                    IsPlayingDemo()
                    ->yes
                        SetConvarValue(blablabla)
                        return
                    ->no
                        ConMsg("Can't change replicated ConVar %s from console of client, only server operator can change its value\n")
                        return
            ->no
                SetConvarValue(blablabla)
                return
        no->
            SetConvarValue(blablabla)
            return
как видишь мест где можно пропатчить невероятно много.
для сведения:
CanCheat() - стоит ли в настройках лобби галочка "включить читы"
Host_IsSinglePlayerGame() - не мультиплеер игра(хз, мб это типо режим опробовать героя или что-то такое не тестил)
IsPlayingDemo() - когда смотришь за чужой(или своей) игрой можно менять дистанцию камеры и прочую хрень.
IsConnected() - находишься ли ты на сервере или сидишь вне матча в дешборде(в главном меню)
DisconnectGameQueued() - уже выходишь с сервера в дешборд
более читаемый псевдокод:
C++:
Expand Collapse Copy
If(IsCommand(command))
    if(CanCheat() || Host_IsSinglePlayerGame() || IsPlayingDemo())
        ExecuteCommand(command)
    else ConMsg("blablabla cheat command ignored"); return;
else
    If(IsCheatProtected(command))
        if(CanCheat() || Host_IsSinglePlayerGame() || IsPlayingDemo())
            SetConvarValue(blablabla)
        else ConMsg("blablabla cheat protected cvar"); return;
    else
        if(IsReplicated(command))
            if(!IsConnected() || DisconnectGameQueued() || IsPlayingDemo())
                SetConvarValue(blablabla)
            else ConMsg("blablabla replicated");return;
в итоге либо делаешь сигу на CInputService::ProcessCommand и юзаешь оффсеты от нее, либо делаешь сиги конкретно на нужные тебе прыжки, либо патчишь/хукаешь какие-либо из функций
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Разобрался.
/del
 
Последнее редактирование:
Назад
Сверху Снизу