15

» WarCraft 3 / Адекватная невосприимчивость к магии

PT153, огромная благодарность! Разобрался и настроил, все замечательно! Держи плюс, друг)
15

» WarCraft 3 / Иконки на заказ

Всем доброго времени суток. Нужна иконка для этого здоровяка. Заранее благодарю!
Загруженные файлы
15

» WarCraft 3 / Нужна модель? - Вам сюда!

Garfor, вот здесь есть серокожий грунцер www.hiveworkshop.com/threads/dire-grunts.292939. Остается только кому-нибудь накинуть ему меха, что называется.
15

» WarCraft 3 / Нужна модель? - Вам сюда!

Всем доброго времени суток! Нужна модель портрета для данной модели: www.hiveworkshop.com/threads/ice-spider.88977
Заранее благодарю!
15

» WarCraft 3 / Как заставить ИИ использовать ополченцев

Принятый ответ
В общем порядком намучившись, все же пришел к выводу, что ребята писавшие АМАИ неспроста не юзали экспрешены, по всей видимости они по какой то причине(кривизна варкрафта привет) не работают в скриптах ИИ. Пришлось написать свой велосипед, очень похожий на то, что есть у них в принципе. Функция выборки рабочих игрока:
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
Возможно кому то будет полезно.
15

» WarCraft 3 / Как заставить ИИ использовать ополченцев

quq_CCCP, фильтр должен пахать как надо, даже в Blizzard.j есть подобный фильтр. По поводу дебага: честно говоря не знаю, как тут правильно заниматься этим, я и пытаюсь вместо него хотя бы на экран выводить количество юнитов, чтобы понять, сколько рабочих он занес в группу.
15

» WarCraft 3 / Как заставить ИИ использовать ополченцев

quq_CCCP, в самом скрипте ИИ. По поводу дирижаблей знаю, близзы не особо заморачивались конечно. А может хотели исключить ситуацию, чтобы игрок просек фишку с покупкой дирижаблей и подлавливал бота на покупке дирижабля(как можно подловить АМАИ у таверны на покупке героя или у лавки гоблина на покупке предметов).
15

» WarCraft 3 / Как заставить ИИ использовать ополченцев

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))
, где функция GetPlayerWorkersExpression:
function GetPlayerWorkersExpression takes nothing returns boolean
	return GetOwningPlayer(GetFilterUnit()) == thisPlayer
endfunction
Это работает, работники стали записываться в ополчение, но пока у меня не получается разрешить 2 проблемы:
  1. Я не могу осознать, что не так с экспрешеном, функция возвращает всегда False, предположительно причина в функции GetFilterUnit, полагаю, что она всегда возвращает null. А без экспрешена выбираются вообще все работники на карте, вне зависимости от того, какому игроку они принадлежат и бегут к ратушам хвататься за оружие.
  2. По совершенно не ясной для меня причине криво работает функция конвертации целого числа в строку. Мне выводится пустота, т.е. Count:
Я пробовал выводить разные числа для интереса, он начинает выводить всякую дичь: frostarmor, music, имя одного из игроков, что угодно, но не числа.
15

» WarCraft 3 / Как заставить ИИ использовать ополченцев

Нет, там точно не то, я помню меня интересовал этот вопрос и я ковырял ИИ компьютеров в этой главе. Там точно в атакующих волнах нет рабов хаоса и рабы сами в редакторе объектов без изменений, там баг самой игры, почему то кодои хаоса отображаются как незанятые рабы по какой то причине. Поэтому думаю с ними ИИ путает обычных рабов, вроде бы кодои хаоса не ходят вообще в атаку как раз, насколько я помню.

Черт, еще порядком подбешивает, что скрипты ИИ не понимают функций из blizzard.j. Так можно было бы триггерно выбрать рабочих, отдать приказ мобилизоваться в ополчение, конвертнуть в текст и использовать в скрипте. Эх.
15

» WarCraft 3 / Как заставить ИИ использовать ополченцев

quq_CCCP, да вот по поводу того, что данная абилка юзается главным зданием альянса лишь тогда, когда рабочие начинают терпеть поблизости от него - я знаю, сам замечал неоднократно. Я попробовал вчера еще из интереса заставить ИИ не защищать пока что лагерь ополченцами, а отправить их в атаку, но тоже потерпел фиаско:
call CampaignAttackerEx(6, 6, 5, MILITIA)
call CampaignAttackerEx(3, 3, 3, RIFLEMAN)
В атаку пошли только стрелки. Разумеется, перед этим приказом я перераспределил рабочих на ресурсах:
call ClearHarvestAI()
call HarvestGold(0, 0)
call HarvestWood(0, (lumberjacks - 2))
Попробую сейчас функцию SetBuildUnit вызвать перед CampaignAttackerEx

Триггерный вариант использования способности рассматриваю как крайний случай, потому как это будет уже не в скрипте ИИ и потому как будут мобилизовываться в ополчение все рабочие.

Попробовал SetBuildUnit, к сожалению, результат тот же.

Жаль, что у AMAI весь код обфусцирован, было бы интересно у них глянуть, как они заставляют компьютер крипить золотые шахты с ополченцами.
15

» WarCraft 3 / Как заставить ИИ использовать ополченцев

PraetorianSM, ополчение стандартное, это для того, чтобы работники принимали участие в обороне окраин лагеря. Стандартное ополчение обычно задействуется тогда, когда бой идет неподалеку от главного здания. А тут задумка в том, чтобы работники не ждали, когда противники вырежут войска и доберутся до них.
Ev3nt, благодарю, нашел данную функцию, но что странно, в моем Blizzard.j отсутствует условие
if (townHall != null) then
Но идея понятна, нужно подходить со стороны ратуши, а не со стороны работника. Однако, в скриптах ИИ нельзя юзать функции из Blizzard.j, все мои попытки заканчивались тем, что скрипт становился нерабочим.
15

» WarCraft 3 / Бета версия Warcraft III Reforged 1.32

Интересно, следы дождя на воде и всплески от попаданий артиллерии в воду завезут или нет?
15

» WarCraft 3 / Официально стал доступен PTR 1.31

Еще немного багов: иллюзии наносят 1 единицу урона и применение одержимости баньшами приводит в десинку. Баг с баньшами обнаружил Хэппи на стриме, можете в его группе прочитать об этом. Пока что известно точно, что баг проявляется, если воровать работников у хумов и использовать посох телепортации + свиток телепорта. Я пробовал с компом, с орками, было все нормально, с хумами словил краш после выхода из игры.
15

» WarCraft 3 / Официально стал доступен PTR 1.31

KingMaximax, я удивляюсь, что они когда это делали, туда не посмотрели. Совсем бараны что ли. Клепают патчи и в каждом патче баги новые каждый раз. Ладно еще поначалу они только разбирались с игрой, но уже больше года прошло, сколько уже можно было нормально во все вникнуть.
15

» WarCraft 3 / Официально стал доступен PTR 1.31

Обнаружил баг в 1.31. Из-за того, что близзы изменили ауру от барабанов, любой герой, у которого есть анимация Stand Channel при подбирании этого предмета начинает бесконечно воспроизводить эту анимацию.
Баг начинается после движения юнита.
15

» WarCraft 3 / Перестали запускаться все карты, кроме стандартных

Принятый ответ
В общем удалил папку с варкрафтом, скопировал с винта 1.30. Обновился. Вообще варкрафт стал запускаться и тупо черный экран. Редактор тоже не запускался. Ну ок, я даже не удивлен, все по классике, дадим додикам еще один шанс. Удалил еще раз, еще раз скопировал, обновился, теперь вроде карты стали запускаться. Живем до очередного найденного бага.
15

» WarCraft 3 / Перестали запускаться все карты, кроме стандартных

8gabriel8, нет. Причем из редактора карты запускаются, что самое интересное.
И да может поможет эта инфа, если пытаться создать карту на батлнет, пишет, что файл карты не найден. Возможно такая же ошибка при запуске обычной карты, но тогда почему она не отображается, не знаю.
15

» Мир безумного / World of Warcraft: «Новый дом»

Я не слежу за сюжетом ВОВ, поэтому объясните кто-нибудь пожалуйста, куда делся Молот Рока, почему Тралл вытащил какой то топор, вместо него.