RtC. Первые шаги

Добавлен , опубликован

Вступление

Итак, дамы и господа, представляю вашему вниманию первую из цикла статей по работе с 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 пути:
  1. Импортировать нестандартный common.j
  2. Объявить функцию прямиком в триггере
Я пойду по второму пути и в созданный триггер добавлю строчку
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.
Также прикрепляю готовую карту, не знаю зачем(вдруг у кого-то не получится)
`
ОЖИДАНИЕ РЕКЛАМЫ...
Этот комментарий удален
0
29
11 лет назад
Отредактирован DragonSpirit
0
alexprey как-то запиливал независимость от версии, но я ещё не смотрел как это можно сделать
подмена ехе
Этот комментарий удален
0
24
11 лет назад
0
DragonSpirit, няша, когда сделаешь мне поддержку ртк ласт версией и норм пак, в котором сразу работает? :)
2 комментария удалено
0
29
11 лет назад
0
кст, не в курсе как запилить, чтобы из редактора сразу можно было запускать, а то копался в скриптах, так и не нашел пункта, который отвечает за обработку нажатия на кнопку теста карты?
0
22
11 лет назад
0
кст, не в курсе как запилить, чтобы из редактора сразу можно было запускать, а то копался в скриптах, так и не нашел пункта, который отвечает за обработку нажатия на кнопку теста карты?
попробуй редактированием startwar3.bat и wehack.lua как описано тут
0
29
11 лет назад
0
плохо копался
0
29
11 лет назад
0
Doc, хммм. Да нет, хорошо копался
0
29
11 лет назад
0
alexprey,
  1. У тебя какой-то неканоничный вехак.
  2. И что мешает туда вставить свои аргументы?
0
29
11 лет назад
0
аргументы вставить не мешает. А вот поменять команду проблематично. Сюда уже подается строка типа
war3.exe -loadfile maps\test.w3x
0
29
11 лет назад
0
alexprey, лол?
cmdline = "spindeluxe.exe" не?
0
29
11 лет назад
0
а путь до карты?
0
29
11 лет назад
0
alexprey, а вытащить? Да и скорее всего он где-то в переменных есть.
local testmaparglist = argsplit(cmdline)
local len = table.getn(testmaparglist)
local map = ""
for i = 0, len do
    if testmaparglist[i] == "-loadfile" then
        map = testmaparglist[i + 1]
        break
    end
end
0
8
11 лет назад
Отредактирован влад10011
0
путь до карты(в функции тест):
local wayMap=string.sub(cmdline,string.len(path.."war3.exe")+12,string.len(cmdline)) --в самом начале
путь до карты при компиляции:
local wayMap=mappath
+12 это пропуск двух кавычек, одного пробела и слова -loadfile в cmdline
0
14
11 лет назад
0
за 10 лет существования варика, можно было уже запилить свой движок с совершенным редактором
0
8
11 лет назад
0
да и вообще есть функция wehack.findmappath()
0
24
11 лет назад
0
кст, не в курсе как запилить, чтобы из редактора сразу можно было запускать, а то копался в скриптах, так и не нашел пункта, который отвечает за обработку нажатия на кнопку теста карты?
Посмотри пак дракона, у него запускается. Правда перед этим нужно сохранить карту.
0
5
11 лет назад
0
а где продолжение?
0
34
11 лет назад
0
Проще уже переконвертировать все модели в формат sc2, выпустить спец. мод и делать на его основе крутые карты =)
0
24
11 лет назад
0
Переход в wc3 на sc2 - рак головного мозга. Если уж куда переходить, то сразу на серьезные платформы.
0
22
11 лет назад
0
у меня сессия, возможно позже, как руки дойдут
0
6
11 лет назад
0
Где найти RtC для 1.26 ?
Чтобы оставить комментарий, пожалуйста, войдите на сайт.