Тоесть, в чём сейчас задача. Рассматриваем чисто Орду в качестве примера.
Вот стандартный скрипт выбора героев из 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, чуть меньше бы яркости и насыщенности и было бы нормально. Но даже так - мыльноватость всё портит. Сами модельки ещё не рассчитаны на динамические тени, и выглядят ужасно. Нужно моделькам больше полигонов добавить, и сделать им текстуры нормальные, а не через нейронку сделанные мыльное говно.
Подскажите пожалуйста. Я могу оставить ссылку на скачивание в виде поста во ВК? По правилам форума, вроде как можно, потому что из ВК можно скачать файл без регистрации. Но на всякий случай уточняю. Это нужно для счётчика. И чтобы поблагодарить автора группы, который вдохновил меня на релиз второй главы.
Проблема была связана с SharpCraft. По какой-то причине у него на виртуалке, задача которой было импортировать триггеры и объекты и сохранять карту, не запускалась функция записи триггеров. Т.е. просто во время сохранения этого не происходило. И это поломало многие карты в паке. К счастью, все карты на 2-4 игрока сохранялись через обычный компьютер, и хотя бы в них можно было поиграть. А ещё были доступны некоторые другие карты на 8, 10 и 12 игроков, потому что они были пересохранены с основного компьютера.
Чтобы избежать этой ошибки, пришлось сохранять все карты через основной компьютер, и потратить кучу времени. Теперь буду думать как откатиться с SharpCraft на обычный редактор, и попробовать поработать на Better Triggers.
Ред. 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
» MM Engine / MM Engine: Warcraft III Rebirth
» Melee Campaign Heroes / Melee Campaign Heroes Pack - 167 maps
Ред. 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 / Люк Валонфорт перед встречей с Артесом
» Stormgate / Демонстрация редактора Stormgate
» WarCraft 3 / Перезапуск Warcraft III?
» Melee Campaign Heroes / Melee Campaign Heroes Pack - 167 maps
» WarCraft 3 / SharpCraft XGM Addon
» WarCraft 3 / Better Triggers
» WarCraft 3 / Перезапуск Warcraft III?