Добавлен DragonSpirit,
опубликован
Вступление
Итак, дамы и господа, представляю вашему вниманию первую из цикла статей по работе с RtC. Кто не знает что это, то может самостоятельно ознакомиться с данным продуктом. Сам я толком его вдоль и поперёк не вкурил, поэтому буду делиться знаниями, которыми владею на данный момент.
Первые шаги
Итак, что нам понадобится:
- Warcraft 3 1.24e, alexprey как-то запиливал независимость от версии, но я ещё не смотрел как это можно сделать
- Знание c/c++/delphi
- Собственно, сам RtC
- Прямые руки
Если всё это имеется, то можно приступать: скачиваем rtc и распаковываем в удобное для вас место.
Можно осмотреть взглядом содержимое папки
Можно осмотреть взглядом содержимое папки
Пробежимся по основным папкам:
- logs - название говорит само за себя, сюда складываются логи(подключения наших dll к процессу, перехват функций...)
- plugins - сюда стоит класть наши dll после их компиляции(именно из этой папки лаунчер и присоединяет их к процессу war3)
- sources - примеры простого плагина на c/c++/delphi и и исходники готовых плагинов(от разработчиков RtC) таких как например stopwatch, userinput, vector
Немного практики
Попробуем подключить dll и вызвать функцию. Для примера я возьму TimeGetYear из библиотеки TimeAPI .
Для начала нам нужна карта, на которой будем тестировать.
Я например создал новую. Дальше надо определяться каким образом образом объявить нестандартные нативки.
Есть 2 пути:
Есть 2 пути:
- Импортировать нестандартный common.j
- Объявить функцию прямиком в триггере
Я пойду по второму пути и в созданный триггер добавлю строчку
native TimeGetYear takes nothing returns integer
Для проверки результата я использую обычный callback из cJass
В итоге код получился довольно таки простым
В итоге код получился довольно таки простым
native TimeGetYear takes nothing returns integer
callback onInit ()
{
BJDebugMsg(I2S(TimeGetYear()));
}
Запускаем warcraft через launcher.exe и выбираем нашу карту(можно привинтить запуск напрямую из JNGP, но мне было лень копать в эту сторону)
Ну и собственно результат
Ну и собственно результат
По такому же принципу можно использовать и другие стандартные плагины(отлов клавиатуры и мыши, stopwatch(проверка скорости алгоритма) и т.п)
Ну на этом вступительная статья окончена, во второй я уже опишу работу напрямую с кодом на примере генерации md5 суммы вводимой строки и вывод её в MessageBox.
Также прикрепляю готовую карту, не знаю зачем(вдруг у кого-то не получится)
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован DragonSpirit
Отредактирован влад10011
local wayMap=string.sub(cmdline,string.len(path.."war3.exe")+12,string.len(cmdline)) --в самом начале
local wayMap=mappath
+12 это пропуск двух кавычек, одного пробела и слова -loadfile в cmdline