Да.
Конечно можно. Каждый из этих ИИ содержит базу данных всех боевых единиц в игре, потребуются правки. Если на карте нет AMAI, то одинаковые фрагменты можно вынести в один файл. Это я сделаю, а подбирать последовательность строительства не хочу. С тебя минимальное знание jass (править функцию BuildSequencez).
Весь процесс создания прошел в преодолении недостатков нативных функций, до интеллекта так и не дошло.
Я не узнаю, если придет пм. Писать в комменты.
Всего скриптов ИИ существует только три = стандартный в war3.mpq, AMAI и мой. Автор статьи к ним отношения не имеет.
Потому что даже один и тот же коммент с кирилицей, после переноса в другую строку, может уже не приводить к вылету.
Имя не меняй.
Да, и, кажется, первого слипа на 1 секунду недостаточно, чтобы увидеть "Script started", надо 3 секунды.
А еще, не помню что, но было что-то такое, чего нельзя делать в теле функции main. То есть на будущее сделай так:
Дефолтный human.ai находится в архиве war3x.mpq
Мной замечено, что символы за пределами ASCII в скриптах ИИ, но не common.ai, приводят к отключению скрипта и краху. Иногда. Не важно где эти символы: в комментах или нет.
SetProduce работает без глюков. Последний параметр указывает на номер городка ИИ. А вот в нумерации городков глюки есть.
Коммент напротив слипа ошибочен. Интерпретатор всего лишь добавит паузу в 1 секунду по лимиту операций.
В джазе пробелы не важны, А вот в скаримовском папирусе да.
В моем скрипте последовательно выполнялись:
ClearCaptainTargets - отмена задач ИИ;
CaptainGoHome - отправить войска домой;
InitAssault - уволить все войска;
RemoveGuardPosition - игнор ИИ и врагов;
приказ Stop;
приказ Move;
телепорт;
RecycleGuardPosition.
И после всего этого юниты все равно бежали не к ближайшему противнику, а туда, где должны были воевать раньше.
Советы:
Галка напротив Сражение. Она отвечает за защиту союзника.
Галка напротив защита.
Добавить целям условие(кроме обычная цель) лагерь не атакован
Если я правильно помню, то цель враг главный лагерь не правильно названа и может вести к интервенту.
Обычная цель указывает на подсвеченного союзником врага. Это можно делать триггером.
Дальше JASS или выбирать все цели триггерами.
Практически одинаково.
Мои тесты дали следующие значения в единицах процессорных тактов.
Объявление локальной переменной любого типа (при каждом вызове функции): 2700
Присваивание литерала локальной переменной любого типа: 700
Присваивание литерала глобальной переменной любого типа: 6700
Присваивание литерала элементу массива: 7500
Обращение к локальной переменной любого типа или константам true, false, null: 300
Обращение к глобальной переменной: 1300
Обращение к элементу массива: 400
Обращение к формальному параметру функции: 1000
Когда в вещественном литерале забыли поставить точку: 300
Целочисленные операции +, -, *: 600
Вещественные операции +, -: 800
Вещественная операция *: 1000
Целочисленное деление: 800
Вещественное деление: 1400
Унарный минус: 3500
Операции <, >: 1300
Операции <=, >=: 1100
Операции ==, !=: 700
Операция not: 100
Вызов пустой функции и возврат по return: 8500
Вызов пустой функции и возврат по endfunction: 9200
Передача первого значения функции: 3800
Передача каждого следующего значения функции: 1700
Возврат значения из функции: 900
loop 2 000
endloop 1 600
exitwhen true 3 300
if true then endif 2 800
if false then else endif 2 800
if not false then endif 2 900
Я слухи не сею, мне правды хватает. 4 года назад Алиса посоветовала герою статьи пойти в менеджеры, тогда у него получалось. С тех пор Дуос ладит с людьми все хуже и хуже. Чего бы ему посоветовать? Может сменить логин и не признаваться, а начать заного?
На глаз: последние 3 строки левого скрина отнимут 130 000 тактов, правого - 40 000 тактов.
SetUnitX совершенно не работает с путями. Она предназначена для дамми.
SetUnitPositionLoc не имеет полноценной альтернативы.
Не эти строчки будут вызывать лаги, а те, где создаются/ воскрешаются/ получают предметы/ получают приказы юниты, эффекты и тп.
Как возможные версии: два рудника рядом; остановка выполнения ИИ из-за ошибки; ИИ не видит лес. Я дико сомневаюсь, что для ИИ включен туман войны, но если лес виден, он все равно должен быть в радиусе 2000.0 от раба.
У разных способов добычи разные наборы возможных приказов. Ставь сниффер на добытчика.
autoharvestgold = 852021 autoharvestlumber = 852022 (не ловятся, но мало ли)
harvest = 852018 resumeharvesting=852017 returnresources=852020
smart = 851971 move=851986(пока у пеона такой приказ, невозможно определить, что он делает)
AImove=851988(бывает, когда пеон в числе атакующих, как вурдалак)
Если у пеона бывает 851971 и 851986, то придется потратиться на массив юнитов и событие с периодом. 852018, 852017, 852020 - занести в массив. Не 852018, 852017, 852020, 852021, 852022, 851971, 851986, 851988, - вычеркнуть.
Обязательно указывать хотя бы одну границу области либо номер волны. А тем, кто посылает в атаку рабочих, напоминаю, что в настройках добычи ресов нужно указывать не фиксированное количество, а все, кроме атакующих.
По скринам видно, что все редакторы, включая WE смогли открыть файл модели и отобразить ее. Только нет скрина с отображением модели в WE. У меня модель открылась и отобразилась во всех перечисленных редакторах и в игре.
(?)
Если сработала CommonSuicideOnPlayer, то все юниты сразу лезут в дирижабль. Определить, по какой цели началась атака поможет такая строка
call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,20, +"attack 1")
Пишет текст на экране.
Общепринято дописывать в конце .bak, - это значит: "больше не нужно, но на всякий случай оставим".
.wai обратно переименовывал напрасно. Это нужно будет сделать перед редактированием в редакторе ИИ. Но у тебя же окончательный вариант?
Конкретно .ai файлы можно не удалять/вновь импортировать, а заменять в 1 действие через контекстное меню.
Ниже под #1 "Обычная атака" атаковать юнита, отмеченного союзником. #2 - "Новый лагерь" - ближайший рудник на котором крипы или враги.
function LaunchAttack takes nothing returns nothing
local unit target = null
local boolean setAlly = true
// Don't launch any attack while town is threatened
if (TownThreatened()) then
call Sleep( 2 )
return
endif
// Target Priority #1
if (target == null) then
set target = GetAllianceTarget()
if (target != null) then
set setAlly = false
endif
endif
// Target Priority #2
if (target == null) then
set target = GetExpansionFoe()
if (target != null) then
set take_exp = false
call CommonSuicideOnPlayer(true,true,1,Player(0),0,0)
return
endif
endif
// Target Priority #3
Еще раз по комменту #12: Да; да; да; нет; нет. А в менеджере все то же самое, но доступны только некоторые файлы, зато есть команда "заменить", позволяющая не следить за правильными именем и путем файла.
» WarCraft 3 / HonestAI
» WarCraft 3 / HonestAI
Конечно можно. Каждый из этих ИИ содержит базу данных всех боевых единиц в игре, потребуются правки. Если на карте нет AMAI, то одинаковые фрагменты можно вынести в один файл. Это я сделаю, а подбирать последовательность строительства не хочу. С тебя минимальное знание jass (править функцию BuildSequencez).
Весь процесс создания прошел в преодолении недостатков нативных функций, до интеллекта так и не дошло.
Я не узнаю, если придет пм. Писать в комменты.
» Кузня Волчачки / Потрошение XGM: Туманные события
» WarCraft 3 / ИИ на Jass'e и неработающая функция SetProduce
Потому что даже один и тот же коммент с кирилицей, после переноса в другую строку, может уже не приводить к вылету.
» WarCraft 3 / ИИ на Jass'e и неработающая функция SetProduce
Да, и, кажется, первого слипа на 1 секунду недостаточно, чтобы увидеть "Script started", надо 3 секунды.
А еще, не помню что, но было что-то такое, чего нельзя делать в теле функции main. То есть на будущее сделай так:
» WarCraft 3 / ИИ на Jass'e и неработающая функция SetProduce
Мной замечено, что символы за пределами ASCII в скриптах ИИ, но не common.ai, приводят к отключению скрипта и краху. Иногда. Не важно где эти символы: в комментах или нет.
SetProduce работает без глюков. Последний параметр указывает на номер городка ИИ. А вот в нумерации городков глюки есть.
Коммент напротив слипа ошибочен. Интерпретатор всего лишь добавит паузу в 1 секунду по лимиту операций.
В джазе пробелы не важны, А вот в скаримовском папирусе да.
» WarCraft 3 / Mdlvis - портит или меняет освещение, как и
Способ есть.
Ред. Themis
» WarCraft 3 / ИИ не защищает союзников
ClearCaptainTargets - отмена задач ИИ;
CaptainGoHome - отправить войска домой;
InitAssault - уволить все войска;
RemoveGuardPosition - игнор ИИ и врагов;
приказ Stop;
приказ Move;
телепорт;
RecycleGuardPosition.
И после всего этого юниты все равно бежали не к ближайшему противнику, а туда, где должны были воевать раньше.
Галка напротив Сражение. Она отвечает за защиту союзника.
Галка напротив защита.
Добавить целям условие(кроме обычная цель) лагерь не атакован
Если я правильно помню, то цель враг главный лагерь не правильно названа и может вести к интервенту.
Обычная цель указывает на подсвеченного союзником врага. Это можно делать триггером.
Дальше JASS или выбирать все цели триггерами.
» WarCraft 3 / Умножение типов real
Мои тесты дали следующие значения в единицах процессорных тактов.
Объявление локальной переменной любого типа (при каждом вызове функции): 2700
Присваивание литерала локальной переменной любого типа: 700
Присваивание литерала глобальной переменной любого типа: 6700
Присваивание литерала элементу массива: 7500
Обращение к локальной переменной любого типа или константам true, false, null: 300
Обращение к глобальной переменной: 1300
Обращение к элементу массива: 400
Обращение к формальному параметру функции: 1000
Когда в вещественном литерале забыли поставить точку: 300
Целочисленные операции +, -, *: 600
Вещественные операции +, -: 800
Вещественная операция *: 1000
Целочисленное деление: 800
Вещественное деление: 1400
Унарный минус: 3500
Операции <, >: 1300
Операции <=, >=: 1100
Операции ==, !=: 700
Операция not: 100
Вызов пустой функции и возврат по return: 8500
Вызов пустой функции и возврат по endfunction: 9200
Передача первого значения функции: 3800
Передача каждого следующего значения функции: 1700
Возврат значения из функции: 900
loop 2 000
endloop 1 600
exitwhen true 3 300
if true then endif 2 800
if false then else endif 2 800
if not false then endif 2 900
» Кузня Волчачки / Что мешает дуосу выполнять свои обещания?
» WarCraft 3 / BLP плагин
» WarCraft 3 / BLP плагин
» WarCraft 3 / Альфа-канал: прозрачность и цвет игрока
» WarCraft 3 / Вопрос про снижение лагов
SetUnitX совершенно не работает с путями. Она предназначена для дамми.
SetUnitPositionLoc не имеет полноценной альтернативы.
Не эти строчки будут вызывать лаги, а те, где создаются/ воскрешаются/ получают предметы/ получают приказы юниты, эффекты и тп.
» WarCraft 3 / Проблема с ИИ
» WarCraft 3 / Отследить добычу ресурсов
harvest = 852018 resumeharvesting=852017 returnresources=852020
smart = 851971 move=851986(пока у пеона такой приказ, невозможно определить, что он делает)
AImove=851988(бывает, когда пеон в числе атакующих, как вурдалак)
Если у пеона бывает 851971 и 851986, то придется потратиться на массив юнитов и событие с периодом. 852018, 852017, 852020 - занести в массив. Не 852018, 852017, 852020, 852021, 852022, 851971, 851986, 851988, - вычеркнуть.
Ред. Themis
» WarCraft 3 / Вариации декораций
» WarCraft 3 / Опять же интерфейс
Ред. Themis
» WarCraft 3 / Атака на дирижабле для ИИ
» WarCraft 3 / Атака на дирижабле для ИИ
» WarCraft 3 / ИИ не атакует некоторое время
integer timerVarz=0
call LaunchAttack( ) заменить на
» WarCraft 3 / Проблема с моделью ( не работает в редакторе карт) / mdlvis и тд
(?)
» WarCraft 3 / AI редактор и дирижабли
call DisplayTimedTextToPlayer(GetLocalPlayer(),0,0,20, +"attack 1")
Пишет текст на экране.
Ред. Themis
» WarCraft 3 / AI редактор и дирижабли
.wai обратно переименовывал напрасно. Это нужно будет сделать перед редактированием в редакторе ИИ. Но у тебя же окончательный вариант?
Конкретно .ai файлы можно не удалять/вновь импортировать, а заменять в 1 действие через контекстное меню.
Ниже под #1 "Обычная атака" атаковать юнита, отмеченного союзником. #2 - "Новый лагерь" - ближайший рудник на котором крипы или враги.
» WarCraft 3 / как в MPQ открыть фаил wai для редактирования?