Привет всем! Прошу сделать морскую вариацию обычного голема. Т.е. нужен по сути ретекстур, покрасить обычного голема в голубой цвет и накидать на него каких-нибудь морских звезд/кораллов/водорослей, чего-нибудь такого. Благодарю!
Парни, всех благодарю за ответы! Всем проставил плюсы) Каждый ответ хорош по-своему, к тому же у меня в вопросе сразу 2 вопроса по факту, так что даже не знаю как быть с выбором ответа.
Выберу пожалуй ответ prog, так как он ответил по пунктам, что выглядит более наглядно для человека, который в последствии может найти этот вопрос. Но, повторюсь, другие ответы так же полезны и достойны. В данный момент я использую функцию rsfghd, возможно временно, после работы попробую взять больший интервал, как посоветовал prog.
Сам намучился как раз сегодня с этим, подгорел с того, что обычный джасс не содержит в себе таких элементарных вещей, как Count или Size для массива и что нет функции Contains, а так же директивы continue. Так что да, сделал, как написали выше, обычным перебором.
В общем порядком намучившись, все же пришел к выводу, что ребята писавшие АМАИ неспроста не юзали экспрешены, по всей видимости они по какой то причине(кривизна варкрафта привет) не работают в скриптах ИИ. Пришлось написать свой велосипед, очень похожий на то, что есть у них в принципе. Функция выборки рабочих игрока:
globals
constant player thisPlayer = Player(1) // В моем случае синий игрок
...
endglobals
...
//============================================================================
// Выбираем работников нашего игрока
//============================================================================
function GetPlayerWorkers takes nothing returns group
local group playerWorkers = null
local group allWorkers = null
local unit regularWorker = null
set playerWorkers = CreateGroup()
set allWorkers = CreateGroup()
call GroupEnumUnitsOfType(allWorkers, "Peasant", null)
loop
set regularWorker = FirstOfGroup(allWorkers)
exitwhen regularWorker == null
if GetOwningPlayer(regularWorker) == thisPlayer then
call GroupAddUnit(playerWorkers, regularWorker)
endif
call GroupRemoveUnit(allWorkers, regularWorker)
endloop
return playerWorkers
endfunction
И юзаем нашу функцию:
//============================================================================
// Отряды защиты лагеря
//============================================================================
function Defenders takes nothing returns nothing
local group playerWorkers = null
...
set playerWorkers = GetPlayerWorkers()
call GroupImmediateOrder(playerWorkers, "militia")
call GroupClear(playerWorkers)
call CampaignDefender(1, goldMiners + lumberjacks, MILITIA)
...
endfunction
quq_CCCP, фильтр должен пахать как надо, даже в Blizzard.j есть подобный фильтр. По поводу дебага: честно говоря не знаю, как тут правильно заниматься этим, я и пытаюсь вместо него хотя бы на экран выводить количество юнитов, чтобы понять, сколько рабочих он занес в группу.
quq_CCCP, в самом скрипте ИИ. По поводу дирижаблей знаю, близзы не особо заморачивались конечно. А может хотели исключить ситуацию, чтобы игрок просек фишку с покупкой дирижаблей и подлавливал бота на покупке дирижабля(как можно подловить АМАИ у таверны на покупке героя или у лавки гоблина на покупке предметов).
quq_CCCP, я думаю мы оба понимаем, что это костыли. У меня почти получилось, я раскопал на гитхабе исходники АМАИ, правда их методика не совсем мне нравится, но все же я убедился в том, что надо вызывать способность напрямую, сам комп этого не сделает без прямого приказа. Пока что так:
local group workers = null
local unit regularPeasant = null
local boolexpr expression = null
...
set workers = CreateGroup()
set expression = Filter(function GetPlayerWorkersExpression)
call GroupEnumUnitsOfType(workers, "Peasant", expression)
call GroupImmediateOrder(workers, "militia")
// Проверка
set countUnits = 0
loop
set regularPeasant = FirstOfGroup(workers)
exitwhen regularPeasant == null
set countUnits = countUnits + 1
call GroupRemoveUnit(workers, regularPeasant)
endloop
call DisplayTextToPlayer(GetLocalPlayer(), 0.0, 0.0, "Count: " + I2S(countUnits))
Это работает, работники стали записываться в ополчение, но пока у меня не получается разрешить 2 проблемы:
Я не могу осознать, что не так с экспрешеном, функция возвращает всегда False, предположительно причина в функции GetFilterUnit, полагаю, что она всегда возвращает null. А без экспрешена выбираются вообще все работники на карте, вне зависимости от того, какому игроку они принадлежат и бегут к ратушам хвататься за оружие.
По совершенно не ясной для меня причине криво работает функция конвертации целого числа в строку. Мне выводится пустота, т.е. Count:
Я пробовал выводить разные числа для интереса, он начинает выводить всякую дичь: frostarmor, music, имя одного из игроков, что угодно, но не числа.
Нет, там точно не то, я помню меня интересовал этот вопрос и я ковырял ИИ компьютеров в этой главе. Там точно в атакующих волнах нет рабов хаоса и рабы сами в редакторе объектов без изменений, там баг самой игры, почему то кодои хаоса отображаются как незанятые рабы по какой то причине. Поэтому думаю с ними ИИ путает обычных рабов, вроде бы кодои хаоса не ходят вообще в атаку как раз, насколько я помню.
Черт, еще порядком подбешивает, что скрипты ИИ не понимают функций из blizzard.j. Так можно было бы триггерно выбрать рабочих, отдать приказ мобилизоваться в ополчение, конвертнуть в текст и использовать в скрипте. Эх.
quq_CCCP, да вот по поводу того, что данная абилка юзается главным зданием альянса лишь тогда, когда рабочие начинают терпеть поблизости от него - я знаю, сам замечал неоднократно. Я попробовал вчера еще из интереса заставить ИИ не защищать пока что лагерь ополченцами, а отправить их в атаку, но тоже потерпел фиаско:
Попробую сейчас функцию SetBuildUnit вызвать перед CampaignAttackerEx
Триггерный вариант использования способности рассматриваю как крайний случай, потому как это будет уже не в скрипте ИИ и потому как будут мобилизовываться в ополчение все рабочие.
Попробовал SetBuildUnit, к сожалению, результат тот же.
Жаль, что у AMAI весь код обфусцирован, было бы интересно у них глянуть, как они заставляют компьютер крипить золотые шахты с ополченцами.
PraetorianSM, ополчение стандартное, это для того, чтобы работники принимали участие в обороне окраин лагеря. Стандартное ополчение обычно задействуется тогда, когда бой идет неподалеку от главного здания. А тут задумка в том, чтобы работники не ждали, когда противники вырежут войска и доберутся до них.
Ev3nt, благодарю, нашел данную функцию, но что странно, в моем Blizzard.j отсутствует условие
if (townHall != null) then
Но идея понятна, нужно подходить со стороны ратуши, а не со стороны работника. Однако, в скриптах ИИ нельзя юзать функции из Blizzard.j, все мои попытки заканчивались тем, что скрипт становился нерабочим.
» WarCraft 3 / Иконки на заказ
» WarCraft 3 / Нужна модель? - Вам сюда!
» WarCraft 3 / Нужна модель? - Вам сюда!
» WarCraft 3 / Определение чётности числа и рандом
Выберу пожалуй ответ prog, так как он ответил по пунктам, что выглядит более наглядно для человека, который в последствии может найти этот вопрос. Но, повторюсь, другие ответы так же полезны и достойны. В данный момент я использую функцию rsfghd, возможно временно, после работы попробую взять больший интервал, как посоветовал prog.
» WarCraft 3 / Определение чётности числа и рандом
» WarCraft 3 / Определение чётности числа и рандом
» WarCraft 3 / Определение чётности числа и рандом
Ред. Meddin
» WarCraft 3 / Наличие типа юнита в массиве
» WarCraft 3 / Иконки на заказ
» WarCraft 3 / Адекватная невосприимчивость к магии
» WarCraft 3 / Иконки на заказ
» WarCraft 3 / Нужна модель? - Вам сюда!
» WarCraft 3 / Иконки на заказ
» WarCraft 3 / Нужна модель? - Вам сюда!
Заранее благодарю!
» Хроники Вальдиона. Начало / Хроники Вальдиона. Начало
Ред. Meddin
» WarCraft 3 / Как заставить ИИ использовать ополченцев
» WarCraft 3 / Как заставить ИИ использовать ополченцев
Ред. Meddin
» WarCraft 3 / Как заставить ИИ использовать ополченцев
Ред. Meddin
» WarCraft 3 / Как заставить ИИ использовать ополченцев
» WarCraft 3 / Как заставить ИИ использовать ополченцев
Ред. Meddin
» WarCraft 3 / Как заставить ИИ использовать ополченцев
Ред. Meddin
» WarCraft 3 / Как заставить ИИ использовать ополченцев
» WarCraft 3 / Конвертер карты в 1.26
» WarCraft 3 / Перевод карты с более новой версии Warcraft на более старую
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32