Доброго времени суток!
Мною был написан простенький ИИ-скрипт на JASS для компухантера, в стиле ИИ в кампаниях метелицы. Т.е. ИИ создает отряд деферов, гардианов и еще юнитов для фаерпати, а затем посылает это самое фаерпати на базу противника. И так волна за волной.
Вот сам скрипт:
смотреть сюда
//==================================================
globals
    player RedTeam = Player(0)
    constant integer SKEL_MAGE = 'uskm'
endglobals
//==================================================
//  CONFIGURE
//==================================================
function ConfigureAI takes nothing returns nothing
    call SetSlowChopping( true )
    call SetPeonsRepair( true )
    call SetHarvestLumber( false )
    call DoCampaignFarms( false )
endfunction
//==================================================
//  MAIN
//==================================================
function main takes nothing returns nothing
    call CampaignAI( ZIGGURAT_1, null )
    call ConfigureAI()
    //====================
    //  UNITS
    //====================
    call SetBuildUnit( 1, NECROPOLIS_1 )
    call SetBuildUnit( 1, ACOLYTE )
    call SetBuildUnit( 1, UNDEAD_MINE )
    call SetBuildUnit( 1, UNDEAD_ALTAR )
    call SetBuildUnit( 3, CRYPT )
    call SetBuildUnit( 2, GRAVEYARD ) 
    call SetBuildUnit( 5, ACOLYTE )
        call SetBuildUnit( 1, LICH )  
    call SetBuildUnit( 20, ZIGGURAT_1 )
    call SetBuildUnit( 6, ZIGGURAT_2 )
    call SetBuildUnit( 6, ZIGGURAT_FROST )
    call SetBuildUnit( 1, NECROPOLIS_2 )
    call SetBuildUnit( 2, DAMNED_TEMPLE )
    call SetBuildUnit( 2, SLAUGHTERHOUSE )
    call SetBuildUnit( 1, NECROPOLIS_3 )
    
    call AddGuardPost( GHOUL, -6124, 4468 )
    call AddGuardPost( GHOUL, -5977, 4490 )
    call AddGuardPost( GHOUL, -5461, 4556 )
    call AddGuardPost( GHOUL, -5304, 4568 )
    call AddGuardPost( GHOUL, -3766, 4595 )
    call AddGuardPost( GHOUL, -3715, 4717 )
    call AddGuardPost( GHOUL, -3675, 4820 )
    call AddGuardPost( GHOUL, -3662, 4939 )
    call AddGuardPost( GHOUL, -3532, 7206 )
    call AddGuardPost( GHOUL, -3462, 7126 )
    call AddGuardPost( GHOUL, -3382, 6992 )
    call AddGuardPost( GHOUL, -3262, 6861 )
    call AddGuardPost( ABOMINATION, -6090, 4600 )
    call AddGuardPost( ABOMINATION, -5411, 4705 )
    call AddGuardPost( ABOMINATION, -3836, 4799 )
    call AddGuardPost( NECRO, -6173, 4772 )
    call AddGuardPost( NECRO, -5336, 4891 )
    call AddGuardPost( NECRO, -4014, 4735 )
    call AddGuardPost( NECRO, -3579, 7059 )
    call AddGuardPost( NECRO, -3467, 6879 )
    
    call CampaignDefenderEx( 8, 8, 8, GHOUL )
    call CampaignDefenderEx( 4, 4, 4, SKEL_WARRIOR )
    call CampaignDefenderEx( 4, 4, 4, SKEL_MAGE ) 
    call CampaignDefenderEx( 4, 4, 4, NECRO )
    call CampaignDefenderEx( 4, 4, 4, ABOMINATION )
        call CampaignDefenderEx( 1, 1, 1, LICH )
    //====================
    //  ATTACK
    //====================
    call WaitForSignal()
    
    //*** WAVE 1 2min***    
    call InitAssaultGroup()
    call CampaignAttackerEx( 2, 2, 2, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, SKEL_WARRIOR )
    call SuicideOnPlayer(M2, RedTeam )
    //*** WAVE 2 5min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 3, 3, 3, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 3 8min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4, 4, 4, GHOUL )
    call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 4 11min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4, 4, 4, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, ABOMINATION )
    call CampaignAttackerEx( 2, 2, 2, SKEL_WARRIOR )
    call CampaignAttackerEx( 1, 1, 1, NECRO )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 5 14min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4, 4, 4, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
    call CampaignAttackerEx( 1, 1, 1, ABOMINATION )
    call CampaignAttackerEx( 2, 2, 2, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
        call CampaignAttackerEx( 1, 1, 1, LICH )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 6 17min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4, 4, 4, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
    call CampaignAttackerEx( 2, 2, 2, ABOMINATION )
    call CampaignAttackerEx( 2, 2, 2, SKEL_WARRIOR )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 7 20min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4, 4, 4, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
    call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 8 23min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 8, 8, 8, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, ABOMINATION )
    call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 9 26min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 8, 8, 8, GHOUL )
    call CampaignAttackerEx( 3, 3, 3, ABOMINATION )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
        call CampaignAttackerEx( 1, 1, 1, LICH )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 10 29min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 6, 6, 6, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, ABOMINATION )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
    call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 11 32min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 6, 6, 6, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
    call CampaignAttackerEx( 3, 3, 3, ABOMINATION )
    call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 12 35min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 7, 7, 7, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
    call CampaignAttackerEx( 2, 2, 2, ABOMINATION )
    call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
    call CampaignAttackerEx( 4, 4, 4, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 13+ ***    
    loop
        call InitAssaultGroup()
        call CampaignAttackerEx( 8, 8, 8, GHOUL )
        call CampaignAttackerEx( 2, 2, 2, NECRO )
        call CampaignAttackerEx( 3, 3, 3, ABOMINATION )
        call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
        call CampaignAttackerEx( 4, 4, 4, SKEL_MAGE )
        call CampaignAttackerEx( 1, 1, 1, LICH )
        call SuicideOnPlayer(M3, RedTeam )

        call InitAssaultGroup()
        call CampaignAttackerEx( 6, 6, 6, GHOUL )
        call CampaignAttackerEx( 2, 2, 2, NECRO )
        call CampaignAttackerEx( 4, 4, 4, ABOMINATION )
        call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
        call CampaignAttackerEx( 4, 4, 4, SKEL_MAGE )
        call CampaignAttackerEx( 1, 1, 1, LICH )
        call SuicideOnPlayer(M3, RedTeam )
    endloop    
endfunction
И работает он по сути нормально, за исключением одного. На какой-нибудь волне может прибежать целая толпа деферов в придачу, что сносит к чертям базу, чердак, Звезду Смерти и т.д.
Это происходит не всегда, может вообще ни разу не произойти. И вот этот фактор рандома меня обескураживает.
Вот скриншот базы для этого бота:
смотреть сюда
Из юнитов заранее созданы лишь Лич и послушники. А далее бот сам начинает расставлять по заданным координатам стражу, на базе держит деф-отряд, и еще генерирует очередную атакующую волну.
Вот как это выглядит:
смотреть сюда
Ну и гардианы:
смотреть сюда
Т.е. все как и задумано, повторюсь.
Но порой вся вот эта деф-пати начинает идти в атаку. Как-будто какой-то деф юнит случайно попал в фаерпати и ИИ решил, что на базу напали и он начал посылать в место атаки отряд деферов.
Вчера словил этот баг и он повел себя наилучшим из всех возможных образов: пока мой отряд разбивал эту дефпати, ИИ начал создавать новых и посылать в атаку. Т.е. был бесконечный такой поток вражеских юнитов. Такого еще не было, ограничивалось лишь одной пачкой.
Сегодня же пытался для скрина заснять как этот баг выглядит, но за 40 минут так и не словил его. Но думаю, что суть ясна.
Лично я пока вижу путь решения в уменьшении количества боевых единиц в дефпати, может какой-то юнит из фаерпати застревает среди дефпати (ну фаерпати же генерится из всех юнитов вокруг, включая гардианов) и впоследствии, т.к. остался на базе, получил еще и статус дефера... Тогда при атаке он мог бы действительно стать причиной такого поведения ИИ. Не знаю...
Кто-нибудь сталкивался с таким?

Принятый ответ


Попробовал оставить только одну бойню и храм. И это сработало. Вот только теперь 2 вурдалака лишних. Точнее единственных, ведь я убрал всех деферов. Если оставлю и один склеп, то и с ними проблем не должно быть. Но вот это число 2... Похоже, что с 3 склепами было бы 3 лишних вурдалака. Получается, что ИИ начинает закупать юнитов разово и похоже сбиваясь со счета, если подготовка проходит одновременно в нескольких зданиях. И вот тогда он этот избыток отправляет автоматом в деф-отряд.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
3
5 лет назад
Отредактирован ImbaState
2
Zahanc:
Да я тоже сталкивался с тем что ИИ посылает защитников в атаку. Насколько я смог понять это из-за того что ему кажется что его база под угрозой.
Никогда не сталкивался с лишними юнитами в защите, впрочем. Может просто не обновили скрипт в карте как полагается?
Не знаю, сейчас еще раз перепроверю)
Но суть в том, что я убрал всех абомов и некров, чтобы посмотреть: будут ли эти лишние некр и абом, если их вообще не должно быть в деф-отряде. Изменения вступили в силу, но конечно же эти некр и абом там оказались %)
0
22
5 лет назад
0
Но они есть среди атакующих и "стражников". Может они просто стоят там и ждут своей очереди или что-то в этом роде? Хотя мне все ещё кажется что это скорее ошибка обновления.
По главному вопросу, я сам так и не нашел решения. Вероятно это ошибка в коде по ту сторону API. У меня были куда более странные проблемы.
Могу разве что посоветовать разделить базу на несколько владельцев.
2
3
5 лет назад
Отредактирован ImbaState
2
Снес скрипт, зашел в игру. База бездействует. Т.е. отключил.
Затем поставил заново, вот конкретно этот:
смотреть сюда
//==================================================
globals
    player RedTeam = Player(0)
    constant integer SKEL_MAGE = 'uskm'
endglobals
//==================================================
//  CONFIGURE
//==================================================
function ConfigureAI takes nothing returns nothing
    call SetSlowChopping( true )
    call SetPeonsRepair( true )
    call SetHarvestLumber( false )
    call DoCampaignFarms( false )
    call SetCaptainHome( ATTACK_CAPTAIN, -6047, 5644 )
endfunction
//==================================================
//  MAIN
//==================================================
function main takes nothing returns nothing
    call CampaignAI( ZIGGURAT_1, null )
    call ConfigureAI()
    //====================
    //  UNITS
    //====================
    call SetBuildUnit( 1, NECROPOLIS_1 )
    call SetBuildUnit( 1, ACOLYTE )
    call SetBuildUnit( 1, UNDEAD_MINE )
    call SetBuildUnit( 1, UNDEAD_ALTAR )
    call SetBuildUnit( 3, CRYPT )
    call SetBuildUnit( 2, GRAVEYARD ) 
    call SetBuildUnit( 5, ACOLYTE )
        call SetBuildUnit( 1, LICH )  
    call SetBuildUnit( 20, ZIGGURAT_1 )
    call SetBuildUnit( 6, ZIGGURAT_2 )
    call SetBuildUnit( 6, ZIGGURAT_FROST )
    call SetBuildUnit( 1, NECROPOLIS_2 )
    call SetBuildUnit( 2, DAMNED_TEMPLE )
    call SetBuildUnit( 2, SLAUGHTERHOUSE )
    call SetBuildUnit( 1, NECROPOLIS_3 )
    
    call AddGuardPost( GHOUL, -6124, 4468 )
    call AddGuardPost( GHOUL, -5977, 4490 )
    call AddGuardPost( GHOUL, -5461, 4556 )
    call AddGuardPost( GHOUL, -5304, 4568 )
    call AddGuardPost( GHOUL, -3766, 4595 )
    call AddGuardPost( GHOUL, -3715, 4717 )
    call AddGuardPost( GHOUL, -3675, 4820 )
    call AddGuardPost( GHOUL, -3662, 4939 )
    call AddGuardPost( GHOUL, -3532, 7206 )
    call AddGuardPost( GHOUL, -3462, 7126 )
    call AddGuardPost( GHOUL, -3382, 6992 )
    call AddGuardPost( GHOUL, -3262, 6861 )
    call AddGuardPost( GHOUL, -5776, 5857 )
    call AddGuardPost( GHOUL, -6016, 5545 )
    call AddGuardPost( GHOUL, -5619, 5621 )
    call AddGuardPost( GHOUL, -5724, 5257 )
    call AddGuardPost( GHOUL, -5420, 5055 )
    call AddGuardPost( GHOUL, -4587, 5342 )
    call AddGuardPost( GHOUL, -4646, 5030 )
    call AddGuardPost( ABOMINATION, -6090, 4600 )
    call AddGuardPost( ABOMINATION, -5411, 4705 )
    call AddGuardPost( ABOMINATION, -3836, 4799 )
    call AddGuardPost( ABOMINATION, -5025, 5517 )
    call AddGuardPost( ABOMINATION, -4796, 5285 )
    call AddGuardPost( NECRO, -6173, 4772 )
    call AddGuardPost( NECRO, -5336, 4891 )
    call AddGuardPost( NECRO, -4014, 4735 )
    call AddGuardPost( NECRO, -3579, 7059 )
    call AddGuardPost( NECRO, -3467, 6879 )
    call AddGuardPost( NECRO, -6707, 4863 )
    call AddGuardPost( NECRO, -5033, 5139 )
    call AddGuardPost( SKEL_WARRIOR, -6404, 4733 )
    call AddGuardPost( SKEL_WARRIOR, -6388, 4943 )
    call AddGuardPost( SKEL_WARRIOR, -5373, 5686 )
    call AddGuardPost( SKEL_WARRIOR, -4971, 5781 )
    call AddGuardPost( SKEL_WARRIOR, -4717, 5556 )
    call AddGuardPost( SKEL_WARRIOR, -4992, 5272 )
    call AddGuardPost( SKEL_WARRIOR, -4862, 5038 )
    call AddGuardPost( SKEL_MAGE, -6565, 4807 )
    call AddGuardPost( SKEL_MAGE, -5162, 5055 )	
    
    call CampaignDefenderEx( 4, 4, 4, GHOUL )
    call CampaignDefenderEx( 2, 2, 2, SKEL_WARRIOR )
    call CampaignDefenderEx( 2, 2, 2, SKEL_MAGE ) 
        call CampaignDefenderEx( 1, 1, 1, LICH )
    //====================
    //  ATTACK
    //====================
    call WaitForSignal()
    
    //*** WAVE 1 2min***    
    call InitAssaultGroup()
    call CampaignAttackerEx( 2, 2, 2, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, SKEL_WARRIOR )
    call SuicideOnPlayer(M2, RedTeam )
    //*** WAVE 2 5min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 3, 3, 3, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 3 8min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4, 4, 4, GHOUL )
    call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 4 11min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4, 4, 4, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, ABOMINATION )
    call CampaignAttackerEx( 2, 2, 2, SKEL_WARRIOR )
    call CampaignAttackerEx( 1, 1, 1, NECRO )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 5 14min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4, 4, 4, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
    call CampaignAttackerEx( 1, 1, 1, ABOMINATION )
    call CampaignAttackerEx( 2, 2, 2, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
        call CampaignAttackerEx( 1, 1, 1, LICH )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 6 17min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4, 4, 4, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
    call CampaignAttackerEx( 2, 2, 2, ABOMINATION )
    call CampaignAttackerEx( 2, 2, 2, SKEL_WARRIOR )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 7 20min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 4, 4, 4, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
    call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 8 23min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 8, 8, 8, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, ABOMINATION )
    call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 9 26min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 8, 8, 8, GHOUL )
    call CampaignAttackerEx( 3, 3, 3, ABOMINATION )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
        call CampaignAttackerEx( 1, 1, 1, LICH )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 10 29min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 6, 6, 6, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, ABOMINATION )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
    call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 11 32min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 6, 6, 6, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
    call CampaignAttackerEx( 3, 3, 3, ABOMINATION )
    call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
    call CampaignAttackerEx( 2, 2, 2, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 12 35min***
    call InitAssaultGroup()
    call CampaignAttackerEx( 7, 7, 7, GHOUL )
    call CampaignAttackerEx( 2, 2, 2, NECRO )
    call CampaignAttackerEx( 2, 2, 2, ABOMINATION )
    call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
    call CampaignAttackerEx( 4, 4, 4, SKEL_MAGE )
    call SuicideOnPlayer(M3, RedTeam )
    //*** WAVE 13+ ***    
    loop
        call InitAssaultGroup()
        call CampaignAttackerEx( 8, 8, 8, GHOUL )
        call CampaignAttackerEx( 2, 2, 2, NECRO )
        call CampaignAttackerEx( 3, 3, 3, ABOMINATION )
        call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
        call CampaignAttackerEx( 4, 4, 4, SKEL_MAGE )
        call CampaignAttackerEx( 1, 1, 1, LICH )
        call SuicideOnPlayer(M3, RedTeam )

        call InitAssaultGroup()
        call CampaignAttackerEx( 6, 6, 6, GHOUL )
        call CampaignAttackerEx( 2, 2, 2, NECRO )
        call CampaignAttackerEx( 4, 4, 4, ABOMINATION )
        call CampaignAttackerEx( 4, 4, 4, SKEL_WARRIOR )
        call CampaignAttackerEx( 4, 4, 4, SKEL_MAGE )
        call CampaignAttackerEx( 1, 1, 1, LICH )
        call SuicideOnPlayer(M3, RedTeam )
    endloop    
endfunction
ИИ всех юнитов расставил на своих местах, вот только эти двое все портят. Что я упускаю в скрипте? Не вижу от слова совсем я этого лишнего некра с абомом...
Попробую совсем убрать деферов. Не удивлюсь, если будет непобедимый деф-отряд из этой двоицы...
UPD
Попробую совсем убрать деферов. Не удивлюсь, если будет непобедимый деф-отряд из этой двоицы...
Ну вот как?!
а вот так
Вот фрагмент кода с деферами:
Загруженные файлы
0
22
5 лет назад
Отредактирован Zahanc
0
Значит они в атакующей группе. Я думал что может они остаются потому что количество юнитов в атакующей группе превышает 12, но перечитав скрипт не вижу такой проблемы.
+
О, они точно производятся ИИ? Или они создаются при инициализации карты?
+
Попробуйте ещё поменять количество начальных ресурсов, может быть. Я уже просто угадываю к этому моменту.
3
3
5 лет назад
Отредактирован ImbaState
3
О, они точно производятся ИИ? Или они создаются при инициализации карты?
Да-да, точно. Я в топике прикрепил первым скрином вид в редакторе. Никак триггерно мобов я не создаю, ИИ сам этим занимается.
Я тут попробовал гардианов убрать и в деферах поставить 2 абома, 2 некра, 4 вурда и 4 скелетона.
Все отлично, лишних мобов нет.
Значит проблема кроется где-то в гардианах, методом тыка буду смотреть...
UPD
В общем загадочный баг с лишними юнитами у меня пропал после того, как я убрал деферов и гардианов, и запустил игру с таким скриптом.
Затем я вернул дефферов, обнаружил, что лишних юнитов нет. Начал поочередно возвращать каждый тип гардианов в скрипт. И бага нет. Все работает. Я совсем ничего не менял, лишь заново добавил функции вызова постройки юнитов и их распределения. Написал, вдруг кому-то поможет в будущем.
Тем не менее вопрос насчет агрессивных дефферов все еще остается открытым :(
UPD2
Ан нет... Я в последние тесты уже warpten подключал. Сейчас посмотрел финальную версию скрипта и обнаружил, что он только с warpten нормально работает. Без него так же создает лишнего некра и абома. Обычно читы ломают игру, а тут... Ладно, буду дальше искать корень проблемы...
UPD3
Короче... Не знаю как это исправить. Если добавить хоть одного гардиана некра, то сразу же летит в деферы еще один. Аналогично и с абомом, судя по всему.
Начудила с патчем метелица, конешн...
0
22
5 лет назад
0
У меня были такие проблемы с 1.27 тоже.
3
3
5 лет назад
3

Попробовал оставить только одну бойню и храм. И это сработало. Вот только теперь 2 вурдалака лишних. Точнее единственных, ведь я убрал всех деферов. Если оставлю и один склеп, то и с ними проблем не должно быть. Но вот это число 2... Похоже, что с 3 склепами было бы 3 лишних вурдалака. Получается, что ИИ начинает закупать юнитов разово и похоже сбиваясь со счета, если подготовка проходит одновременно в нескольких зданиях. И вот тогда он этот избыток отправляет автоматом в деф-отряд.
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.