Выцепляем номер команды среди не проигравших;
Проверяем на соответствие к команде;
Если какой-то из игроков не соответствует, то пропускаем оставшиеся условия.
konvan5, а как это сделать? Взять случайного игрока, и сравнить его тиму с тимами оставшихся? Ну можно и так. Но проблема всё равно оказалось в другом - что я рукожоп. Как обычно. Заменил игрока для убитого юнита, а потом удивлялся почему ничего не работает.
Нашёл в чём косяк. На скрине видны триггеры которые отключены. Я их отключил для наглядности, чтобы вы понимали где формула. Короче там все юниты игрока меняют игрока на пассивного. И соответственно дальше в моей формуле считается уже пассивный игрок. Поэтому ничего не работало. А так всё работает.
konvan5, с назначением побед проблем нет. У меня стандартный модификатор Melee, который сам проверяет проигравших и победивших. Но мне понадобилось отследить, если кто-то победил. Но как триггерно это сделать - хз. Вроде бы сделал, но почему-то не запускается.
quq_CCCP, мне эти объекты на карте не нужны, они никак не связаны с триггерами. Ни юниты, ни декорации, ни предметы. Всё отслеживается триггерами через переборы и различные события.
ID пересекаться ничей не должен, в теории. Мне надо перенести триггеры в стандартную чистую карту-сражение, не открывая при этом редактор. Потому что карт много, они слишком долго открываются и сохраняются.
Понятно, что перед переносом придётся файл .j немного почистить от лишней инфы. Это допустимо.
Задача очень специфичная. Для этого наверно надо свой софт изобретать...
Разработка MCH продолжается. В новом патче вернутся герои, которые были временно скрыты, с улучшенными способностями. Например Гул-дан и Праудмур. Задачей патча 0.9.2 будет доработать всё то, что было сделано, чтобы выпустить стабильную версию.
Ваши предложения учитываются. Так, мы вернём в игру Капитана альянса, но уже в виде героя. Будет добавлено больше ИИ, играющих за новых героев. Будет исправлен баг, из-за которого хуман ИИ играл только за эльфов. И многое другое.
Некоторые жалуются на баланс. Что ж, у нас нет столько ресурсов, чтобы затестить все возможные ситуации. Карту разрабатывает один человек и тестирует её с братом. Поэтому в балансе есть промахи, и это исправляется. Например мы пофиксим Ведьмаков и собак Архимонда, благодаря вашим отзывам.
Но вот что нужно знать о специфике баланса. Имбовые герои будут. Гул-дан, Иллидан, Кенариус, Архимонд, Король лич Артес и некоторые другие. Все они по лору невероятно сильные. И это нужно отразить в игре. В этом и всё веселье, попытаться например выступить в несколько человек и против врага Кенариуса сделать хоть что-то. Или проверить, кто сильнее: Лич или Иллидан. Это также полезно для игры новичка против опытного игрока, чтобы сравнять шансы.
Однако, мы стремимся к тому, чтобы до 10 уровня включительно, в игре был стандартный баланс, и имбовые герои проявляли себя только на 11 уровне. Чтобы у тех, у кого нет топовых героев, были шансы победить до раскачки противника.
Так что по-тихоньку работаем над картой, наполняем контентом.
quq_CCCP, а разве нельзя адаптировать имеющийся ИИ под кастомных героев?
Я знаю что в common.ai есть функция PickMeleeHero, которая отвечает за рандом пик героя, и результат записывает героя в переменную hero. Можно ведь сделать похожую функцию, назвать её условно PickCustomHero, называя результат cuctomhero. Затем уже в самом orc.ai проверять доступность customhero для игрока. Если ответ отрицательный, тогда покупает hero. Если положительный, тогда нанимает cuctomhero.
Только я пока не знаю как это сделать внури скрипта. Я не понимаю логику работу ai скриптов. Они не похожи на стандартный триггерный джасс. Через скрипты вообще можно проверить уровень доступности технологий и юнитов?
А ещё при попытке создать новую функцию и сохранить common.ai или orc.ai, у меня иногда отваливается один .ai скрипт, который был сделан вообще только с помощью ИИ-редактора. И от этого я ещё больше не понимаю логику работы всей этой фигни. Я вообще в игру могу свои функции вписывать? Или может это надо сделать в триггерах, а не пытаться изменить common.ai? Если я на джасс напишу в триггерах новую функцию, она подхватится в .ai скрипте?
EugeAl, а как это поможет при переносе? Мне даже триггеры не обязательно переносить, а чтобы в .j записались все скрипты из другой карты, но при этом не заменялась информация о количестве игроков, названии и описании карты, етц. Чтобы переносились чисто триггерные скрипты + инфа об объектах вся.
Нейронка какую-то фигню странную тебе написала)) точнее, полный бред. Особенно где UnitAddAbility
EugeAl, спасибо за инфу! Больше не буду ей пользоваться :D
а зачем копировать common.ai?
Ты можешь в самом своем скрипте использовать как и переменные из common, так и свои прописать, так и использовать равкоды типа Obla
hero_id и camp_hero_id это переменная, а не равкод
Да что-то не получается у меня ничего, если я пробую orc.ai отредактировать. Он тупо ничего не делает. А вот если common.ai отредактированный вставить, он подхватывается.
Я попробую повозиться с этим. Поредачить свой код в orc.ai, может разбирусь как он работает. И если что задам уже новый вопрос в ветке вопрос ответ. Так будет проще.
Тоесть, в чём сейчас задача. Рассматриваем чисто Орду в качестве примера.
Вот стандартный скрипт выбора героев из common.ai:
//============================================================================
// PickMeleeHero
//============================================================================
function PickMeleeHero takes race raceid returns integer
local integer first
local integer second
local integer third
local integer last
local integer array heroes
//------------------------------------------------------------------------
elseif raceid == RACE_ORC then
//------------------------------------------------------------------------
set heroes[1] = BLADE_MASTER
set heroes[2] = FAR_SEER
set heroes[3] = TAUREN_CHIEF
set heroes[4] = SHADOW_HUNTER
else
set hero_id = 0
endif
set last = 4
set first = GetRandomInt(1,last)
set second = GetRandomInt(1,last-1)
set third = GetRandomInt(1,last-2)
set hero_id = heroes[first]
set heroes[first] = heroes[last]
set hero_id2 = heroes[second]
set heroes[second] = heroes[last-1]
set hero_id3 = heroes[third]
return hero_id
endfunction
Мне сейчас нужно сделать так, чтобы ИИ сначала подобрал себе список из 3 героев кампании. Я это реализовал следующим образом:
//============================================================================
// PickCampaignHero
//============================================================================
function PickCampaignHero takes race raceid returns integer
local integer first
local integer second
local integer third
local integer last
local integer array heroes
//------------------------------------------------------------------------
elseif raceid == RACE_ORC then
//------------------------------------------------------------------------
set heroes[1] = GROM
set heroes[2] = THRALL
set heroes[3] = CAIRNE
set heroes[4] = GULDAN
set heroes[5] = WARLORD
else
set hero_id = 0
endif
set last = 5
set first = GetRandomInt(1,last)
set second = GetRandomInt(1,last-1)
set third = GetRandomInt(1,last-2)
set camp_hero_id = heroes[first]
set heroes[first] = heroes[last]
set camp_hero_id2 = heroes[second]
set heroes[second] = heroes[last-1]
set camp_hero_id3 = heroes[third]
return hero_id
endfunction
Теперь мне нужно каким-то образом в orc.ai вписать код, который бы на момент первой покупки, проверял бы доступность героя кампании, например:
Если герой доступен, то купить его, и использовать hero_id = camp_hero_id
А если герой не доступен, тогда нанимать hero_id по старинке.
Проблема в том, что после покупки героя кампании, у всех игроков на карте срабатывает функция
SetPlayerTechMaxAllowedSwap( 'Obla', 0, Player(0)
Т.е. герой становится недоступен никому из игроков. И вот для текущего ИИ в том числе. Так что нужно проверять ещё не купил ли он УЖЕ героя. Чтобы он продолжал оперировать им.
EugeAl, да, всё верно. У меня кроме стандартных героев, можно покупать героев из кампании. И хочется сделать поддержку ИИ для каждого героя.
Я сейчас зашёл в .ai и обнаружил что герои покупаютя через hero_id. Т.е. нет запечатанных в ИИ героев типа Obla - Блейд Мастера. Всё это прописано в common.ai. Надеюсь, если я отредактирую его, он импортнётся. И надеюсь что в случае если компу будет недоступен какой-то из героев кампании (пикнуть их можно единожды на всех игроков), то он не будет фризить, а просто купит другого. upd: По всей видимости если выбранный им герой недоступен, то он просто никого не покупает.
И ещё момент. У меня герои кампании вынесены в альтернативный алтарь, который вызывается через Crow Form. Я вот думаю, может для ИИ проще добавить всех героев в один алтарь, чтобы не мучиться. Deep Seek подсказал мне следующий скрипт:
function AddHeroToAltar takes nothing returns nothing
unit altar = GetTriggerUnit() // Получаем алтарь
integer heroId = 'Oshd' // ID Shadow Hunter (замените на нужный ID героя)
// Добавляем героя в список доступных для найма
call UnitAddAbility(altar, heroId)
endfunction
// Инициализация триггера
function InitTrig_AddHeroToAltar takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEvent(t, EVENT_PLAYER_UNIT_CONSTRUCT_FINISH)
call TriggerAddCondition(t, Condition(function IsAltar))
call TriggerAddAction(t, function AddHeroToAltar)
endfunction
// Проверка, что построенное здание — алтарь
function IsAltar takes nothing returns boolean
return GetUnitTypeId(GetTriggerUnit()) == 'oalt'
endfunction
Но я не совсем понимаю как им пользоваться. Обычно скрипты которые он мне советует - не работают. Либо я их неправильно использую.
На крайняк, буду просто делать разные типы алтарей для компов и людей, чтобы не возиться с jass лишний раз.
EugeAl, а по какому пути мне импортировать common.ai чтобы он применился к карте? Я пробовал кидать скрипты от AMAI в Scripts/ в саму карту, но новый ИИ почему-то не заменял стандартный. Боюсь, как бы здесь не получилось того же.
ZergLanda, если версия игры 1.29.2 и выше, значит возможно вы скачали версию карты 0.9. В 0.9.1 эта проблема исправлена.
Чтобы проверить, какую версию карты вы скачали, попробуйте запустить любую карту до 4 игроков. Если она откроется, значит у вас 0.9. Просто перекачайте пак.
А версия варкрафта написана мелким шрифтом справа внизу сразу, как запускаете игру. Скачать 1.29.2 можно тут. disk.yandex.ru/d/_kI4qPkP5w2t0g
Ред. WilliamBz
» WarCraft 3 / Самый простой способ заставить ИИ пикать кастом героя, при условии что герой доступен
» WarCraft 3 / Делаю рандом на пик героев но почемуто герои повторяюся.
Ред. WilliamBz
» WarCraft 3 / Проверка победил ли кто-нибудь из игроков
Проверяем на соответствие к команде;
Если какой-то из игроков не соответствует, то пропускаем оставшиеся условия.
» WarCraft 3 / Проверка победил ли кто-нибудь из игроков
» WarCraft 3 / Проверка победил ли кто-нибудь из игроков
» WarCraft 3 / Проверка победил ли кто-нибудь из игроков
Ред. WilliamBz
» WarCraft 3 / Проверка победил ли кто-нибудь из игроков
» WarCraft 3 / Проверка победил ли кто-нибудь из игроков
» WarCraft 3 / Проверка победил ли кто-нибудь из игроков
Ред. WilliamBz
» WarCraft 3 / Слияние двух war3map.j в один
» WarCraft 3 / Слияние двух war3map.j в один
» Melee Campaign Heroes / Melee Campaign Heroes Pack - 167 maps
» WarCraft 3 / Crow Form после смерти
» WarCraft 3 / Стандартный ИИ и атакующие юниты
Ред. WilliamBz
» WarCraft 3 / Как грамотно отредактировать ИИ скрипт, чтобы он выбирал кастомного героя, который не всегда может быть доступен
Ред. WilliamBz
» WarCraft 3 / Как грамотно отредактировать ИИ скрипт, чтобы он выбирал кастомного героя, который не всегда может быть доступен
Ред. WilliamBz
» WarCraft 3 / Есть ли способ перенести триггеры и объекты в карту без редактора WC3?
» WarCraft 3 / Способы заменить героя для игрока-компьютера
Ред. WilliamBz
» WarCraft 3 / Способы заменить героя для игрока-компьютера
А если герой не доступен, тогда нанимать hero_id по старинке.
Ред. WilliamBz
» WarCraft 3 / Способы заменить героя для игрока-компьютера
Ред. WilliamBz
» WarCraft 3 / Способы заменить героя для игрока-компьютера
» WarCraft 3 / Можно вопрос задать?
» WarCraft 3 / Jass Highlighter for Notepad++
» WarCraft 3 / Как запустить 2 копии World Editor
Ред. WilliamBz
» Melee Campaign Heroes / Melee Campaign Heroes Pack - 167 maps