Добавлен Svintus
Хочу начать писать свой ИИ, начиная от базовых команд с переходом на более сложные.
Так, например, попытался пройтись по инструкциям этого урока: xgm.guru/p/wc3/melee_ai_creating1 и начать с простого вывода сообщения на экран:
Так, например, попытался пройтись по инструкциям этого урока: xgm.guru/p/wc3/melee_ai_creating1 и начать с простого вывода сообщения на экран:
function main takes nothing returns nothing
call Sleep( 2 ) // <--- Чтобы удостовериться, что игра готова записать приветствие.
call DisplayTimedTextToPlayer( GetLocalPlayer(), 0.0, 0.0, 3600, "Hello World!" )
endfunction
Пытался по инструкции менять содержимое файла в движке игры human.ai - не помогло (но к такому методу теста отношусь скептически).
Открыл карту для сражений, поставил триггер, который срабатывает каждые 2 секунды и вызывает код моего .ai, с содержимым:
Открыл карту для сражений, поставил триггер, который срабатывает каждые 2 секунды и вызывает код моего .ai, с содержимым:
function main takes nothing returns nothing
call Sleep( 2 ) // <--- Чтобы удостовериться, что игра готова записать приветствие.
call DisplayTimedTextToPlayer( GetLocalPlayer(), 0.0, 0.0, 3600, "Hello World!" )
endfunction
Но сообщение на экран не выводится.
А при попытке сделать по инструкции со статьи - игра крашится моментально.
Попытался создать карту с нуля. Поставил точки респавна красного и синего игрока. Включил всё тот же триггер на запуск своего .ai скрипта каждые 2 секунды, который выводит сообщение на экран. Но после запуска карты у меня победа, жму продолжить игру - сообщение не выводится.
Попытался вставить этот код (вывода сообщения на экран) в нестандартный код карты (который до всех триггеров) - но WorldEdit в итоге не компилирует карту даже.
А при попытке сделать по инструкции со статьи - игра крашится моментально.
Попытался создать карту с нуля. Поставил точки респавна красного и синего игрока. Включил всё тот же триггер на запуск своего .ai скрипта каждые 2 секунды, который выводит сообщение на экран. Но после запуска карты у меня победа, жму продолжить игру - сообщение не выводится.
Попытался вставить этот код (вывода сообщения на экран) в нестандартный код карты (который до всех триггеров) - но WorldEdit в итоге не компилирует карту даже.
Ошибка: Отсутствует название функции call Sleep( 2 ) <--- Чтобы удостовериться, что игра готова записать приветствие.
Я пробовал искать ответы ответы на свои вопросы в гугле, но не смог получить нужного результата. Какой-либо гайд отсутствует, который мог облегчить порог вхождения в моддинг варкрафта.
Официальная сборка Warcraft 3 1.27 TFT
Принятый ответ
Проблема в русских символах.
Даже если они закомментированы.
Даже если они закомментированы.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Можно проверить это в карте
Ред. Makeba
Ред. Makeba
То есть стандартный ИИ переписывает мой ИИ.
Но в случае если я уберу код из mpq архива в файле human.ai и заменю на эти строки, то карта просто не запускается.
При выборе другой расы - всё нормально.
Можно предположить, что теперь происходит чтение этого ai файла. Но происходит краш
Ред. fenathesnake
Жаль что не получилось добиться нужного результата, но спасибо за проявленный интерес!
А как мне понять, что такой функции нет? Я импортировал список функций из движка в JassCraft, и там отображается, что она есть
Ред. fenathesnake
Кстати, увидел там же common.ai, видимо нативки как раз для ИИ, и вот в нем есть нативка Sleep. В общем, как и говорил, я с этим не работал, так что дальше хз, код выглядит валидным.
Ред. Svintus
common.ai есть в war3.mpq, в War3Patch.mpq, в War3x.mpq и все они разные. Какой из них используется?
war3.mpq - ассеты варкрафта 3 (ROC)
war3x.mpq - ассеты дополнения (TFT)
war3Patch.mpq - ассеты патча
Скрипт AI можно запустить только для игрока бота, если слотом управляет человек - всё AI не стартанет, убираешь все стандартные триггеры сражения и создаешь запуск твоего ии для конкретного игрока если им управляет компьютер.
Так я именно это и делаю, что изучаю как работает ИИ. Нашёл статью, и по ней пытаюсь запустить первые функции. Которые не работают
Ред. Svintus
call Sleep( 2 ) <--- Чтобы удостовериться, что игра готова записать приветствие.
call DisplayTimedTextToPlayer( GetLocalPlayer(), 0.0, 0.0, 3600, "Hello World!" )
endfunction
Если подгружать этот файл пустым - краша нет. Крестьяне просто начинают добывать золото.
Если подгрузить в этот файл извлечённый из mpq код humans.ai - то он работает, краша нет.
Если в этот же файл в конце добавить код, что написан выше - игра крашится.
Я попытался вызвать просто:
call Sleep( 2 ) <--- Чтобы удостовериться, что игра готова записать приветствие.
Но получил краш. Добавил его к human.ai оригинальный - краш (хотя функция слипа там используется, и она не крашит).
Теперь этот код:
function main takes nothing returns nothing
call Sleep( 2 )
call DisplayTimedTextToPlayer( GetLocalPlayer(), 0.0, 0.0, 3600, "Hello World!" )
endfunction
Но и не исполняется.
Я не уверен, но возможно файл .ai не имеет доступа к функциям common.j. Ведь функция DisplayTimedTextToPlayer расположена там.
Если ты просто пишешь ИИ для своей карты/карт, можно просто через JASS его написать, разве так будет не проще?
Ред. Svintus
Если то-то, делают то-то, если это, делают это, во время того-то, делают это или то-то и т.д.
Даже если они закомментированы.