Всем привет! Использую модельки: www.hiveworkshop.com/threads/spiders.317868. 1 и 4 вариации. К сожалению, при проигрывании анимации смерти, вылезает черный квадрат. Был бы очень благодарен тому, кто возьмется пофиксить!
Привет всем! Прошу сделать морскую вариацию обычного голема. Т.е. нужен по сути ретекстур, покрасить обычного голема в голубой цвет и накидать на него каких-нибудь морских звезд/кораллов/водорослей, чего-нибудь такого. Благодарю!
Парни, всех благодарю за ответы! Всем проставил плюсы) Каждый ответ хорош по-своему, к тому же у меня в вопросе сразу 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 весь код обфусцирован, было бы интересно у них глянуть, как они заставляют компьютер крипить золотые шахты с ополченцами.
» WarCraft 3 / Иконки на заказ
» WarCraft 3 / Не работает модель? - Вам сюда!
» WarCraft 3 / Не работает модель? - Вам сюда!
» WarCraft 3 / Иконки на заказ
» 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 / Как заставить ИИ использовать ополченцев