[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 3 из 3«123
Форум » Программирование и WEB-дизайн » C++ » [SA|C++]Plugin SDK. Обсуждение.
[SA|C++]Plugin SDK. Обсуждение.
DK22Pac
Друзья
TOP Скриптер
04.08.15 09:35
Offline
Сейчас работаю над обновлением для sdk.
Пришлось отказаться от кое-каких принципов предыдущей версии в сторону стабильности и простоты.
Улучшена работа с расширениями для игровых структур (CVehicle, CPed, CObject), добавлены новые События (в пред. версии - Функции).
Небольшой пример - покраска пешеходов в рандомный цвет. Цвет генерируется при создании пешехода (конструктор PedColor).
Прикрепления: TestDll.txt(3Kb)

wmysterio
Администраторы
Скриптер
13.08.15 19:14
Offline
отлично! обновишь ссылку в теме, когда обновление будет готово.

Код
CPools::ms_pPedPool->m_Size
я так понял, это выражение возвращает текущее количество актёров. Думаю неплохо было бы сделать упрощение, например в
Код
CPed::Count
Или что-то в этом духе.

DK22Pac
Друзья
TOP Скриптер
14.08.15 14:01
Offline
Поле m_Size - это кол-во элементов в пуле (т.е. макс. количество педов в игре).
Пытаюсь делать так, как было у R*. К тому же, сделать это статической переменной довольно проблематично.
При желании можно обойтись этим
Код
#define MAX_PEDS CPools::ms_pPedPool->m_Size

DK22Pac
Друзья
TOP Скриптер
14.08.15 14:14
Offline
Ещё один пример, похожий на предыдущий.
Сканируем обькеты, проверяем на соприкосновение с игроком.
У обьектов, с которыми соприкасался игрок, выводим надпись "Touched". Если обьект и игрок не пересекались - "Not touched".
Для записи статуса соприкосновения выделяем дополнительное поле для класса CObject (bPlayerTouchedMe).

Отредактировал DK22Pac - Пятница, 14.08.15, 14:15
Прикрепления: object_extensio.txt(2Kb)

wmysterio
Администраторы
Скриптер
14.08.15 19:17
Offline
Цитата DK22Pac ()
т.е. макс. количество педов в игре
В текущий момент или вообще в игре?
Цитата DK22Pac ()
Пытаюсь делать так, как было у R*. К тому же, сделать это статической переменной довольно проблематично.
Ну, можно и метод сделать, например:
Код
int CPed::Count(){
     return CPools::ms_pPedPool->m_Size;
}
Можно схитрить smile И получится немного короче чем вызов поля статического экземпляра для класса CPools. В принципе здесь и так ясно, но раз решил сделать для простоты, то пример вполне подходит.

Вот ещё вопросец:
Код
Events::drawingEvent += CheckAndDraw;
Выражение подписывается на событие рисования. Возможно я плохо учил С/С++, но разве есть поддержка событий вообще в этом ЯП? Или это от Майкрософт фишка используется?

DK22Pac
Друзья
TOP Скриптер
14.08.15 21:17
Offline
Цитата wmysterio ()
В текущий момент или вообще в игре?
Вообще. Кол-во слотов в пуле.
Из кода можно понять, что мы "проходимся" по всем слотам пула (Итерация от 0 до CPool::m_Size). Вызываем метод CPool::GetAt. Этот метод возвращает элемент по его индексу. Если слот с этим индексом не занят, то метод возвращает нулевой указатель. Отсюда и проверка
Код
if (object) {

Цитата wmysterio ()
Выражение подписывается на событие рисования. Возможно я плохо учил С/С++, но разве есть поддержка событий вообще в этом ЯП? Или это от Майкрософт фишка используется?
На самом деле, здесь просто перегружен оператор +=. Ну а далее уже sdk делает магию - инжектит хуки и добавляет функцию на стек вызовов.
Что-то вроде такого
Код
template <typename FunctionType> class EventHandler {
public:
      vector<FunctionType> functions;

      EventHandler& operator+=(FunctionType function) {
          ::Inject_if_not_injected_yet();
          functions.push_back(function);
          return *this;
      }
};
Отредактировал DK22Pac - Пятница, 14.08.15, 21:29

wmysterio
Администраторы
Скриптер
15.08.15 19:48
Offline
Цитата DK22Pac ()
На самом деле, здесь просто перегружен оператор +=.

Ну это я понял. В шарпе тоже так используется оператор для подписки.
Цитата DK22Pac ()
Ну а далее уже sdk делает магию - инжектит хуки и добавляет функцию на стек вызовов.
А вот это уже интересно. Получается, программа/игра просто вызывает зарегистрированные методы со списка "functions" где-то в коде цикла либы, а регистрация методов происходит при вызове перегруженного оператора +. Это мне нравится! Простой и удобный механизм! Я читал о похожем способе, но до этих пор никак не мог понять как всё устроено, но теперь я получил +1 к методам проектирования smile

DK22Pac
Друзья
TOP Скриптер
15.05.16 19:43
Offline
Обновленная версия plugin-sdk
https://github.com/DK22Pac/plugin-sdk
Работает с Visual Studio 2015.
Есть 3 примера и шаблон проекта для студии.
PS сайт жутко тормозит.

wmysterio
Администраторы
Скриптер
17.05.16 20:51
Offline
Цитата DK22Pac ()
Обновленная версия plugin-sdk
Есть какие-то детали, или там просто небольшие/большие ошибки исправлены?
Цитата DK22Pac ()
PS сайт жутко тормозит.
Работаю над оптимизацией. Для начала, попробуй удалить все личные сообщения(входящие и исходящие) в профиле. Сайт намного быстрее работает, когда таких сообщений нет или мало.

DK22Pac
Друзья
TOP Скриптер
26.06.16 14:41
Offline
У меня пустой список ЛС.

Добавлено (26.06.16, 13:41)
---------------------------------------------
Теперь plugin-sdk доступен и для Vice City.


Уже есть первый пример - рисование с ID3DXFont.
https://github.com/DK22Pac/plugin-sdk/tree/master/examples/VC_DXFont


wmysterio
Администраторы
Скриптер
12.07.16 19:27
Offline
Цитата DK22Pac ()
У меня пустой список ЛС.
Тогда придётся изменить дизайн, что конечно уже поднадоело :(
Цитата DK22Pac ()
еперь plugin-sdk доступен и для Vice City.
Отлично! Правда я так и не понял как-же сделать плагин(вовсе любой). Постоянно каких-то файлов не хватает. Этот С++ меня убьёт скоро своей требовательностью smile

DK22Pac
Друзья
TOP Скриптер
29.07.16 21:57
Offline
wmysterio, у тебя 2015 студия?

PS небольшое видео
Отредактировал DK22Pac - Суббота, 30.07.16, 00:40

wmysterio
Администраторы
Скриптер
03.09.16 18:44
Offline
Цитата DK22Pac ()
у тебя 2015 студия?
Да, но у меня нет плагина в меню "Templates". И я понятия не имею как правильно его так прислинить к этим шаблонам.

GoldFish
Пользователи
17.01.17 05:30
Offline
Цитата DK22Pac ()
wmysterio, у тебя 2015 студия?PS небольшое видео


DK22Pac, с горем пополам заставил видеть пути инклудов. Возможно не доглядел, но описание установки проекта в студии не полное. Для того, чтобы подружить пути нужно еще править эти пути



Просмотрел еще раз тему про настройку проекта. Вроде понятно. Изночально читал README.MD на гитхабе)
Отредактировал GoldFish - Вторник, 17.01.17, 18:13

DK22Pac
Друзья
TOP Скриптер
21.01.17 00:58
Offline
Смотри вики
https://github.com/DK22Pac....%D1%8F)
И тему на ещё одном форуме.
http://forum.gtabuilder.ru/index.php?topic=337.0

Форум » Программирование и WEB-дизайн » C++ » [SA|C++]Plugin SDK. Обсуждение.
Страница 3 из 3«123
Поиск: