Добавлен Korm
Всем привет ребят. Помогите пожалуйста, хочу сделать ИИ для отдельных юнитов. Карта на 12 человек, но чаще всего я играю с друзьями и нас 2-4 человека, а остальные тупо стоят. Получается 12 героев из них только 2-4 человека, я хочу на каждого героя кинуть ИИ, что бы они сами все делали.
По сути мне надо примерно так.
По сути мне надо примерно так.
Уход при низком HP (инвиз + отступление)
Патруль по точкам
Атака врагов поблизости с кастом умений
Подбор предметов
Атака боссов по таймеру
Включение AI только если игрок — компьютер
Отключение по таймеру
Патруль по точкам
Атака врагов поблизости с кастом умений
Подбор предметов
Атака боссов по таймеру
Включение AI только если игрок — компьютер
Отключение по таймеру
Ищу и сам пытался сделать, максимум что могу тупо патрулирование по местности и комп просто атакует и дохнет и по новой. Хочу что бы был чуток умнее. Через ИИ эдитор не получается, шляпа там вообще какая-то.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Объявляешь таймер local timer vTimer, создаёшь таймер set vTimer = CreateTimer(), уничтожаешь потом таймер call DestroyTimer(vTimer), запускаешь таймер call TimerStart(vTimer,1,function fMyFunction). В войдоской функции fMyFunction пишешь цикл по всем игрокам и их героям. Если юнита создавал через jass, то должны сохраниться id юнитов set vHero1 = CreateUnit(Player(10),ID_HERO_1,0,0,0), объявлять юнита следующим образом local unit vHero1. Если через редактор вставлял юнитов, то они как не странно будут в jass, но id юнитов не сохраняться, если сам не подправишь код. Если хочешь искать юнитов то тебе нужен перебиратор юнитов в группе.
Вот пример:
Если нужно перебирать в радиусе то вот вот функция GroupEnumUnitsInRange(group,x,y,radius,function filter можно 0) для перебирания.
Если вражеский бос id и rect совпадают то бос определён.
Цикл по игрокам компьютерам можешь имя сравнить local string vStr, set vPlayer = Player(0..11), set vStr = GetPlayerName(vPlayer). Может есть другой способ определить ИИ, я не знаю.
Приказ кастануть спелл на цель set vBool = IssueTargetOrderById(u,ID_ORDER,u2), просто нажать кнопку set vBool = IssueImmediateOrderById(u,ID_ORDER), в точку set vBool = IssuePointOrderById(u,ID_ORDER,x,y)
Юнитов лучше сохранять в хеш таблице, и брать данные из хеш-таблицы set vHT = InitHashtable()
call SaveInteger(vHT, parentKey, childKey, value)
set vInt = LoadInteger(vHT, parentKey, childKey)
set parentKey = GetExpiredTimer()
childKey = CONST_HERO_1