Настройка проекта
Создание проекта описано здесь. Необходимые файлы можно скачать там же.

Файл plugin.dll надо поместить в папку с игрой.

Рекомендую перенести папку SA Plugin SDK куда-то в папку с MSVS. Например, сюда:
Код
MSVS\VC\SA Plugin SDK

В настройках проекта добавляем эту директорию в список "видимых":
Заходим в свойства проекта, Конфигурация проекта -> Каталоги VC++. Добавляем папку SA Plugin SDK в Каталоги включения, Каталоги библиотек и Каталоги ссылок. Теперь можно подключать нужные нам файлы.
Код
#include <Windows.h>
#include "plugin\plugin.h"
#include "game_sa\CMessages.h"
#include "game_sa\CClock.h"

Регистрация плагина
Система плагинов позволяет зарегистрировать плагин. Делаем это функцией:
Код
PLUGIN_API static CPlugin const * RegisterPlugin(char *name, char *author, char *filename, char *version, unsigned int versionId, unsigned int game, void *additionalData);

Для чего это нужно?
Мы можем также найти зарегистрированный ренее плагин:
Код
PLUGIN_API static CPlugin const * GetPluginByName(char *name);

Таким образом, мы можем синхронизировать разные плагины - модификации. Например, если мы сделали плагин "TimeControl", а затем расширили его и выпустили "TimeAndWeatherControl":
Код
if(plugin::System::GetPluginByName("TimeControl"))
{
  // Уведомить пользователя модификации о том, что ему желательно удалить старую модификацию
}

Регистрация функций
Ядро плагина позволяет зарегистрировать функцию, которую надо вызвать на определённом этапе игры. Этот этап определяется параметром type (перечисление eFuncType):
Код
PLUGIN_API static void RegisterFunc(eFuncType type, void (*func)());

Второй параметр - нужная функция.
Код
Текущие возможности SDK позволяют сделать не так уж и много. Но он всё ещё разрабатывается.
Мы сделаем изменение времени после нажатия клавиши Delete. Вот так будет выглядеть наш код:
Код
#include <Windows.h>
#include "plugin\plugin.h"
#include "game_sa\CMessages.h"
#include "game_sa\CClock.h"

void OurFunc();

// Функция, которая выполняется при загрузке .asi-плагина.
BOOL APIENTRY DllMain(HMODULE module, DWORD reason, LPVOID reserved)
{
  if(reason == DLL_PROCESS_ATTACH)
  {
  // Регистрируем наш плагин
  plugin::System::RegisterPlugin("SetTimeTo12", "DK", "time.asi", "1.0", 1, GAME_SA_1_0_US, 0);
  // Регистрируем нашу функцию, на этапе, когда мы можем вывести сообщение (FUNC_DRAWING)
  plugin::Core::RegisterFunc(FUNC_DRAWING, OurFunc);
  }
  return TRUE;
}

void OurFunc()
{
  // Если нажата клавиша Delete
  if(HIBYTE(GetKeyState(VK_DELETE)) == 0xFF)
  {
  // Устанавливаем время
  CClock::SetGameClock(12, 0, CClock::ms_nGameClockDayOfWeek);
  // Выводим сообщение
  CMessages::AddMessageJumpQ("You have set time to ~b~12:00", 3000, 0, false);
  }
}

Итак, что мы получаем в случае использования Plugin SDK? Чистые хуки без явно видимых патчей и работы напрямую с адресами памяти.

SHooZ   (23.06.14 00:32)
Обновление SDK есть?
Вход на сайт

Поиск
Категории раздела
Мини-чат
Пожалуйста, все вопросы по скриптингу задавать на форуме!
Наш опрос
Что скажете о GTA V?
Всего ответов: 51
Активность на сайте
Пожертвования
Кошельки WebMoney:
U859420971000
R407741810602
Z331072372430
E314272616890
Друзья сайта
Полезные ресурсы
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Сегодня нас посетили:
wmysterio
Реклама