Эксклюзив [WIP] AsiLoader

user31883

Потрачен
101
219
45282

Запуск от админа не помогает, запуск в режиме совместимости тоже. Win10, видеокарта Intel интегрированная
 

SR_team

like pancake
Автор темы
BH Team
4,719
6,362
Обновил - оптимизирован режим разработки, за счет отказа от отслеживания файлов на основе таймеров в пользу системного вызова
 

SR_team

like pancake
Автор темы
BH Team
4,719
6,362
чем отличается от этого
  • gta_sa only
  • развивается
  • Версии идут не с 1.0
  • проще пересборка для не подготовленного юзера
  • не использует не стандартных экстеншинов
  • позволяет настроить этап загрузки, включая самый ранний до crtMain
  • режим разработчика, позволяющий заменять плагины "на горячую"
  • Состоит из одного VorbisFile.dll и больше ничего
  • имеет встроенный для плагинов API, хоть пока и очень скудный
  • не херит права доступа к страницам памяти
  • имеет предзагрузку произвольных либ, что позволяет, например, запускать samp из командной строки
  • двусторонняя поддержка proxy-библиотеки
 
  • Нравится
Реакции: FYP

#kerosin

🔥
Проверенный
241
152
игра умирает после посадки в транспорт, сборка чистая.
 

SR_team

like pancake
Автор темы
BH Team
4,719
6,362
игра умирает после посадки в транспорт, сборка чистая.
Проверил - баг действительно присутствует. Связан с использованием оригинального VorbisFile из памяти.
Закинь содержимое данного архива в папку с игрой, что бы использовать оригинальный VorbisFile с диска - баг пройдет.


UPD: Напиздел. Ошибка в MemoryModule. MemoryGetProcAddress не отрабатывает как надо
 
Последнее редактирование:
  • Нравится
Реакции: #kerosin

SR_team

like pancake
Автор темы
BH Team
4,719
6,362
Проверил - баг действительно присутствует. Связан с использованием оригинального VorbisFile из памяти.
Закинь содержимое данного архива в папку с игрой, что бы использовать оригинальный VorbisFile с диска - баг пройдет.


UPD: Напиздел. Ошибка в MemoryModule. MemoryGetProcAddress не отрабатывает как надо
Исправил, больше не крашит при посадку в авто без оригинальной либы в папке с игрой
 
  • Нравится
Реакции: .SADBOYS. и #kerosin

Johnny_Faster

Новичок
4
0
у меня скрипты перестали работать... и еще как создать папку с этой хуйней, ну VorbisFile.ini?
 

Bomj264

Участник
27
7
NIH-синдром процветал и я начал писать свой AsiLoader.

Всем известно, что asi это те же самые dll, но с другим расширением. Вероятно другое расширение было выбрано, что бы было проще грузить пользовательские библиотеки, но при этом не загружать лишних библиотек от всяких редакторов ресурсов, которые пользователь может установить в директорию с игрой. AsiLoader от silent способен так же грузить и dll, однако их надо прописать в специальном файле конфигураций, о котором по самым оптимальным оценкам не знает 95% пользователей. И меня пичалил данный факт. Дело в том, что файл с расширением dll имеет одно маловажное, но очень приятное преимущество над asi - проводник windows умеет показывать дополнительную информацию в свойствах для .dll файлов. Вроде мелочь, но в этих свойствах можно указать ряд полезной информации: версию, автора и краткое описание. Данные поля могут быть крайне полезны, по скольку не все пользователи могут с ходу сказать какой версии у них плагины, и что именно они делают, пример тому куча тем, когда пользователи спрашивают что делает тот или иной asi или пытаются использовать не совместимые версии библиотек (почитай самп, сф и плагины к сф).

Таким образом было решено, что нужен новый asi-loader, который будет грузить dll-плагины и будет иметь понятный ini-файл. Таки примерно такое и получилось, однако в процессе планирования вылезли дополнительные идеи, которые могут быть в нем реализованы:
  • Ручная перезагрузка плагинов не выходя из игры
  • Небольшое базовое API, которое могли бы использовать плагины (с этой идеей @FYP носится наверно последние 2 года, что ж попробую реализовать)
Вот что есть сейчас:
  • Загрузка asi и dll на самой ранней стадии, перед выполнением функции _CrtMain
  • Выполнение функции `load` из dll-плагинов, данная функция должна дать безопасный аналог выполнению кода в DllMain::DLL_PROCESS_ATTACH
  • Выполнение функции `unload` из dll-плагинов
  • Возможность загружать плагины в отложенной стадии, когда кишки игры уже инициализированы
  • Возможность успользовать произвольную прокси-библиотеку для VorbisFile, что позволяет использовать несколько asi-loader'ов одновременно
  • Возможность предзагрузки любых библиотек (можно указать samp.dll в предзагрузку и запускать samp из командной строки без лончера)
  • Возможность отлючения автоматических загрузчиков asi и dll
  • Наличие черного списка для загружаемых плагинов
  • Простой ini с подсказками, который создается после первого запуска игры
  • Режим разработчика:
    • Плагины не блокируются на диске (можно обновлять не закрывая игру)
    • Авто-перезагрузка плагинов при изменении
    • Авто-выгрузка удаленных плагинов
    • Авто-загрузка новых плагинов

Скачать asi-loader можно тут: AsiLoader

Пример использования функций `load` и `unload` в dll-плагине:
C++:
#include <windows.h>

#define crtMainLoad 0
#define GetStartupInfoALoad 1
#define mainloopLoad 2
#define devCrtMainLoad 3
#define devGetStartupInfoALoad 4
#define devMainloopLoad 5
#define devLoad 6
#define load 7

void load(char loadType)
{
   switch (loadType){
       case crtMainLoad:
           MessageBoxA(0, "crtMainLoad", "Test", 0);
           break;
       case GetStartupInfoALoad:
           MessageBoxA(0, "GetStartupInfoALoad", "Test", 0);
           break;
       case mainloopLoad:
           MessageBoxA(0, "mainloopLoad", "Test", 0);
           break;
       case devCrtMainLoad:
           MessageBoxA(0, "devCrtMainLoad", "Test", 0);
           break;
       case devGetStartupInfoALoad:
           MessageBoxA(0, "devGetStartupInfoALoad", "Test", 0);
           break;
       case devMainloopLoad:
           MessageBoxA(0, "devMainloopLoad", "Test", 0);
           break;
       case devLoad:
           MessageBoxA(0, "devLoad", "Test", 0);
           break;
       case load:
           MessageBoxA(0, "load", "Test", 0);
           break;
   };
}

void unload()
{
   // safe some data (example write ini file)
}
Это код на C, для C++ перед void надо будет дописать еще extern "C"
А если вы используете студийный компилятор, то надо еще перед void дописать __declspec(dllexport)

Установка
на чистую игру:
  • переместить скаченый VorbisFile в папку с игрой
  • согласится на замену файла
Установка на игру с другим asi-loader'ом без удаления старого asi-loader'а (вариант №1 - использование данного asi-loader'а как proxy):
  • переименовать скаченный VorbisFile в VorbisHooked
  • переместить VorbisHooked (тот что переименовали из VorbisFile) в папку с игрой
  • согласится на замену файла
  • создать в папке с игрой файл VorbisFile.ini со следующим содержанием:
INI:
[AsiLoader]
enable="false"
[DllLoader]
loadState="GetStartupInfoA"
У данного вариант есть недостаток - в зависимости от того какой у Вас установлен asi-loader, может не работать стадия загрузки crtMain и запуск сампа из консоли. Решение - использовать вариант №2 (см. ниже), либо не использовать 2 asi-loader'а одновременно.
Установка на игру с другим asi-loader'ом без удаления старого asi-loader'а (вариант №2 - использование имеющегося asi-loader'а как proxy):
  • переименовать VorbisFile в папке с игрой в AsiLoader
  • переместить скаченный VorbisFile в папку с игрой
  • создать в папке с игрой файл VorbisFile.ini со следующим содержанием:
INI:
[Config]
proxy="AsiLoader"
[AsiLoader]
enable="false"


Запуск SAMP из консоли:
  • Если ранее игра не запускалась, то запустить и выйти.
  • В файле VorbisFile.ini в секции Config в preload записать samp.dll, что бы было так: preload="samp.dll"
  • В папке с игрй убедившись что нет выделеных файлов, а если есть, то сняв выделение, зажать Шифт и не отпуская нажать правую кнопку мыши, после чего в появившемся контестном меню выбрать пункт "Командная строка" (или как-то иначе он называется, не помню)
  • Набрать в командной строке следующее: gta_sa.exe -c -n Kalcor -h 127.0.0.1 -p 7777
Сукаааа бомбит как эту хуйню скачать куда его блять кинуть ааааааааааааааааа
 

Ghost-Pro

Новичок
8
0
  1. Помогите что делать если я копирую текст через этот аси и пишет вот это что делать
 

Spanika

Участник
37
19
Скиньте пожалуйста скомпилированную версию в архиве. Спасибо!