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
Очень интересная работа. Только непонятно, откуда столько ресурсов его сделать? WAA всё пытались и пытались, но так и не смогли доделать мод. Близзы пытались, но так и не перерисовали нормально классику. А тут просто фаны взяли и кучу моделек нарисовали. Удивительно.
Идея классная, но проблема в мыльности. Вроде как разрешение увеличилось, но на деле смотрится мыльнее оригинала. При этом шарплёно, что режет глаз.
Точно такая же проблема и у Reforged 2.0. Через нейронки невозможно сделать нормальный апскейл. Нужны нормальные художники, которым показать референс, под который они нарисуют такие же текстуры, но лучше. На такое деньги есть только у Близзов. Но даже если они не стали это делать, то у этой идеи 0 шансов.
ScorpioT1000, забавно, у меня не открывается "You do not have permission to view this page or perform this action." Возможно Близзы удалили, чтобы ты с их Рефорджем не конкурировал))
Ha_Do6poM, это пушка в представлении фанов, и на бумаге у маркетологов. На деле же они эти тени запороли. Их просто не видно. Если сравнить с классикой, тени, как и вся картинка, были темнее. В этом их промах. Снова не спецов привлекли на проект.
nastiolink, да у вас глаз вытечет в это играть. Текстуры хорошо смотрятся новые. Но картинка пересвечена и перенасыщена. Мне больше даже на скрины смотреть, не то что играть. Посмотрите какой тёмной была графика в простом классике. Если они смогут добиться такой же яркости при новом освещении + добавят полигоны в модели, то это уже будет весомый повод перейти на Reforged.
AMark, я не понимаю. Не уже ли у близзов нет нормальных исходников? Они же наверняка разрабатывали все текстуры в большем разрешении, чем в самой игре. Зачем было прогонять всё через непонятную нейронку, которая всё перешарпливает?
nastiolink, чуть меньше бы яркости и насыщенности и было бы нормально. Но даже так - мыльноватость всё портит. Сами модельки ещё не рассчитаны на динамические тени, и выглядят ужасно. Нужно моделькам больше полигонов добавить, и сделать им текстуры нормальные, а не через нейронку сделанные мыльное говно.
Подскажите пожалуйста. Я могу оставить ссылку на скачивание в виде поста во ВК? По правилам форума, вроде как можно, потому что из ВК можно скачать файл без регистрации. Но на всякий случай уточняю. Это нужно для счётчика. И чтобы поблагодарить автора группы, который вдохновил меня на релиз второй главы.
» 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 0.9.7 Warships
» Мастерская модификаций / Warcraft III: Rebirth - Мод на графику
» Melee Campaign Heroes / Melee Campaign Heroes 0.9.7 Warships
Ред. WilliamBz
» WarCraft 3 / SCHQ TerrainArt
» WarCraft 3 / SCHQ TerrainArt
» WarCraft 3 / Blizzard объявили Reforged 2.0 и ещё
» WarCraft 3 / Blizzard объявили Reforged 2.0 и ещё
» WarCraft 3 / Blizzard объявили Reforged 2.0 и ещё
» WarCraft 3 / Blizzard объявили Reforged 2.0 и ещё
» WarCraft 3 / Blizzard объявили Reforged 2.0 и ещё
Ред. WilliamBz
» WarCraft 3 / Blizzard объявили Reforged 2.0 и ещё
» WarCraft 3 / Blizzard объявили Reforged 2.0 и ещё
» WarCraft 3 / Люк Валонфорт перед встречей с Артесом