XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
LordSerga

offline
Опыт: 3,809
Активность:
AI система - смотрим код и обсуждаем.
Вот я год назад летом за 2 недели накатал АИ движок для героев. По сути этот движок может работать одновременно с 12 героями за каждого игрока.
Вот код. И ещё год назад я только начинал изучать vjass ну и выучил этот программязык за недельку.
» код (осторожно первые 1-1171 строк кода)
scope AIsetup initializer Init_AI //by LordSerga

globals
private boolean array AI
private boolean array AI_attack
private integer array AI_line
private region rectRegion
private real x1
private real y1
private real x2_a
private real y2_a
private real x2_b
private real y2_b
private real x3
private real y3
private boolean array REGEN
private unit array u
private integer array a1
private integer array a2
private integer array a3
private integer array a4
private boolean array A1
private boolean array A2
private boolean array A3
private boolean array A4
private string array S1
private string array S2
private string array S3
private string array S4
private string array S1_bonus
private string array S2_bonus
private boolean array c1
private boolean array c2
private boolean array c3
private boolean array c4
private group array g
private integer array difficulty
private timer array t
private trigger GO
private trigger IA_create
private integer temp_integer
private string array color_players
private trigger Ability
private integer I
private integer array id_hero
private trigger control_line
private trigger new_line
private trigger attack_hero
private trigger RGN_hero
private trigger Life_Heros
private boolean temp_boolean
private string array go_base
private integer end_go_base=0
private string array init_text
private integer end_init_text=0
private trigger Un_attack
private string array attack_text
private integer end_attack_text=0
private trigger cool_control=CreateTrigger()
private real BaseX1=-5000
private real BaseX2=5000
private real BaseY1=4700
private real BaseY2=-5200
private boolean array walk
private trigger kill_creeps=CreateTrigger()
private unit temp_unit
private trigger kc=CreateTrigger()
private trigger sa=CreateTrigger()
endglobals

private function UnitIsStunned takes unit q returns boolean
 return IsUnitType(q,UNIT_TYPE_STUNNED)==false
endfunction

private function PercentLifeUnit takes unit q returns real
 return GetUnitState(q,UNIT_STATE_LIFE)/GetUnitState(q,UNIT_STATE_MAX_LIFE)
endfunction

private function LifeUnit takes unit q returns real
 return GetUnitState(q,UNIT_STATE_LIFE)
endfunction

private function TextPlayer takes integer i,string s returns nothing
    if i<3 then
        call DisplayTextToPlayer(Player(0),0,0,ColorPlayer(i)+GetPlayerName(Player(i))+"|r: |cffffcc00Союзникам:|r "+s)
        call DisplayTextToPlayer(Player(1),0,0,ColorPlayer(i)+GetPlayerName(Player(i))+"|r: |cffffcc00Союзникам:|r "+s)
        call DisplayTextToPlayer(Player(2),0,0,ColorPlayer(i)+GetPlayerName(Player(i))+"|r: |cffffcc00Союзникам:|r "+s)
    else
        call DisplayTextToPlayer(Player(3),0,0,ColorPlayer(i)+GetPlayerName(Player(i))+"|r: |cffffcc00Союзникам:|r "+s)
        call DisplayTextToPlayer(Player(4),0,0,ColorPlayer(i)+GetPlayerName(Player(i))+"|r: |cffffcc00Союзникам:|r "+s)
        call DisplayTextToPlayer(Player(5),0,0,ColorPlayer(i)+GetPlayerName(Player(i))+"|r: |cffffcc00Союзникам:|r "+s)
    endif
endfunction

private function TextPlayerAll takes integer i,string s returns nothing
        call DisplayTextToPlayer(Player(0),0,0,ColorPlayer(i)+GetPlayerName(Player(i))+"|r: |cffffcc00Всем:|r "+s)
        call DisplayTextToPlayer(Player(1),0,0,ColorPlayer(i)+GetPlayerName(Player(i))+"|r: |cffffcc00Всем:|r "+s)
        call DisplayTextToPlayer(Player(2),0,0,ColorPlayer(i)+GetPlayerName(Player(i))+"|r: |cffffcc00Всем:|r "+s)
        call DisplayTextToPlayer(Player(3),0,0,ColorPlayer(i)+GetPlayerName(Player(i))+"|r: |cffffcc00Всем:|r "+s)
        call DisplayTextToPlayer(Player(4),0,0,ColorPlayer(i)+GetPlayerName(Player(i))+"|r: |cffffcc00Всем:|r "+s)
        call DisplayTextToPlayer(Player(5),0,0,ColorPlayer(i)+GetPlayerName(Player(i))+"|r: |cffffcc00Всем:|r "+s)
endfunction

private function CoordsInMapArea takes real x, real y,rect r returns boolean
 return (GetRectMinX(r)<=x)and(x<=GetRectMaxX(r))and(GetRectMinY(r)<=y)and(y<=GetRectMaxY(r))
endfunction

//************************//

private function Stop_Attack_Creeps takes nothing returns nothing
    local integer i=GetPlayerId(GetOwningPlayer(GetAttacker()))
    if AI[i] then
    if GetAttacker()==u[i] then
    if GetHeroLevel(u[i])<=11 then
    if LifeUnit(GetTriggerUnit())>55+2*GetHeroLevel(u[i]) then
        call IssueImmediateOrder(u[i],"stop")
    endif
    endif
    endif
    endif
endfunction

private function AI_Creeps_target takes integer i returns unit
    local group g=CreateGroup()
    local group gr=CreateGroup()
    local integer count=0
    local unit z
    call GroupEnumUnitsInRange(g,GetUnitX(u[i]),GetUnitY(u[i]),450,null)
    
    loop
        set z=FirstOfGroup(g)
        exitwhen z==null
        if GetOwningPlayer(z)!=Player(9) then
        if GetUnitTypeId(z)!='u002' or GetUnitTypeId(z)!='u003' or GetUnitTypeId(z)!='u005' or GetUnitTypeId(z)!='h002' then
        if IsUnitType(z,UNIT_TYPE_STRUCTURE)==false then
        if IsUnitType(z,UNIT_TYPE_HERO)==false then
        if LifeUnit(z)>0.405 and LifeUnit(z)<55+2*GetHeroLevel(u[i]) then
            call GroupAddUnit(gr,z)
        endif
        endif
        endif
        endif
        endif
        call GroupRemoveUnit(g,z)
    endloop
    
    call DestroyGroup(g)
    set g=null
    
    set z=FirstOfGroup(gr)
    
    call DestroyGroup(gr)
    set gr=null
    return z
endfunction

private function AI_COUNT_CREEPS takes integer i returns integer
    local group g=CreateGroup()
    local group gr=CreateGroup()
    local integer count=0
    local unit z
    call GroupEnumUnitsInRange(g,GetUnitX(u[i]),GetUnitY(u[i]),450,null)
    
    loop
        set z=FirstOfGroup(g)
        exitwhen z==null
        if GetOwningPlayer(z)!=Player(9) then
        if GetUnitTypeId(z)!='u002' or GetUnitTypeId(z)!='u003' or GetUnitTypeId(z)!='u005' or GetUnitTypeId(z)!='h002' then
        if IsUnitType(z,UNIT_TYPE_STRUCTURE)==false then
        if IsUnitType(z,UNIT_TYPE_HERO)==false then
        if LifeUnit(z)>0.405 and LifeUnit(z)<55+2*GetHeroLevel(u[i]) then
            call GroupAddUnit(gr,z)
        endif
        endif
        endif
        endif
        endif
        call GroupRemoveUnit(g,z)
    endloop
    
    call DestroyGroup(g)
    set g=null
    
    loop
        set z=FirstOfGroup(gr)
        exitwhen z==null
        set count=count+1
        call GroupRemoveUnit(gr,z)
    endloop
    
    call DestroyGroup(gr)
    set gr=null
    return count
endfunction

private function kill_creeps_action takes nothing returns nothing
    local unit t=temp_unit
    local integer i=temp_integer
    //Action Starting
        call IssueTargetOrder(u[i],"attackonce",t)
    //Action End
    set t=null
endfunction

private function KILL_CREEPS takes nothing returns nothing
    local integer index=0
    //Добивание крипов
    loop
        if AI_attack[index] and AI_COUNT_CREEPS(index)>=1 and AI[index] then
        if REGEN[index]==false then
        
            set temp_unit=AI_Creeps_target(index)
            set temp_integer=index
            call TriggerExecute(kc)
            
        endif
        endif
    set index=index+1
    exitwhen index==6
    endloop
endfunction

private function RGN_HERO takes nothing returns nothing
local integer i=0
    loop
        if AI[i] and REGEN[i] then
            if i==0 or i==1 or i==2 then
                        call IssuePointOrder(u[i],"move",BaseX1,BaseY1)
            endif
            
            if i==3 or i==4 or i==5 then
                        call IssuePointOrder(u[i],"move",BaseX2,BaseY2)
            endif
        endif
    
    set i=i+1
    exitwhen i==6
    endloop
endfunction

private function GoldPlayer takes integer i returns integer
 return GetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD)
endfunction

private function AddGold takes integer i,integer gold returns nothing
 call SetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD)+gold)
endfunction

private function AddItem takes integer i, integer id,integer gold,integer slot returns nothing
    call RemoveItem(UnitItemInSlot(u[i],slot))
    call UnitAddItemToSlotById(u[i],id,slot)
    call SetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD,GetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD)-gold)
endfunction

private function EffectItems takes unit u returns nothing
    call DestroyEffect( AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIem\\AIemTarget.mdl",u, "origin") )
endfunction

private function bi takes integer i, integer id,integer gold,integer slot returns nothing
if GetItemTypeId(UnitItemInSlot(u[i],slot))==null and GoldPlayer(i)>=gold then
    call AddItem(i,id,gold,slot)
    call EffectItems(u[i])
endif
endfunction

private function si takes integer i,integer slot,integer gold returns nothing
    call RemoveItem(UnitItemInSlot(u[i],slot))
    call AddGold(i,gold)
endfunction
    
private function ItemOfHero takes integer i returns nothing
if LifeUnit(u[i])>25 then
//Action Items
    call bi(i,'I008',600,0)
    call bi(i,'I008',600,1)
    call bi(i,'I008',600,1)
    call bi(i,'I00C',550,2)
    call bi(i,'I00C',550,3)
    call bi(i,'I00G',500,4)
//Setup Slot N1
if GoldPlayer(i)>=1400 and GetItemTypeId(UnitItemInSlot(u[i],0))=='I008' then
    call si(i,0,300)
    call bi(i,'I00J',1700,0)
endif

if GoldPlayer(i)>=850 and GetItemTypeId(UnitItemInSlot(u[i],4))=='I00G' and GetItemTypeId(UnitItemInSlot(u[i],0))!='I00L' then
    call si(i,4,250)
    call bi(i,'I00K',1100,4)
endif

if GoldPlayer(i)>=1300 and GetItemTypeId(UnitItemInSlot(u[i],4))=='I00K' and GetItemTypeId(UnitItemInSlot(u[i],0))=='I00J' then
    call si(i,0,1700)
    call si(i,4,1100)
    call bi(i,'I00L',4100,0)
endif

//EndActions
endif
endfunction

private function Test_Life_Hero takes nothing returns nothing
local integer i=0
    loop
        if AI[i] and REGEN[i]==false then
            if GetUnitState(u[i],UNIT_STATE_MAX_LIFE)-GetUnitState(u[i],UNIT_STATE_LIFE)>=200 then
                if ItemOfUnit(u[i],'I00A') and GetUnitAbilityLevel(u[i],'B00C')<1 then
                    call UnitUseItemTarget(u[i],UnitItemInSlot(u[i],5),u[i])
                endif
            endif
            
            if AI_attack[i] and (GetUnitState(u[i], UNIT_STATE_LIFE) / GetUnitState(u[i], UNIT_STATE_MAX_LIFE))<.35 and GetUnitState(u[i],UNIT_STATE_LIFE)>0.405 then
                set REGEN[i]=true
                set AI_attack[i]=false
                call TextPlayer(i, go_base[GetRandomInt(0,end_go_base)])
            endif
            
        endif
    
    set i=i+1
    exitwhen i==6
       //***//
    endloop

set i=0
    loop
        if AI[i] and REGEN[i] and (GetUnitState(u[i], UNIT_STATE_LIFE) / GetUnitState(u[i], UNIT_STATE_MAX_LIFE))>.8 then
            if i==0 or i==1 or i==2 then
                if CoordsInMapArea(GetUnitX(u[i]),GetUnitY(u[i]),gg_rct_HeroSwap1) then
                    call SetUnitState(u[i],UNIT_STATE_MANA,GetUnitState(u[i],UNIT_STATE_MAX_MANA))
                    set REGEN[i]=false
                    set AI_attack[i]=true
                endif
            endif
            
            if i==3 or i==4 or i==5 then
                if CoordsInMapArea(GetUnitX(u[i]),GetUnitY(u[i]),gg_rct_HeroSwap2) then
                    call SetUnitState(u[i],UNIT_STATE_MANA,GetUnitState(u[i],UNIT_STATE_MAX_MANA))
                    set REGEN[i]=false
                    set AI_attack[i]=true
                endif
            endif
            
            call RemoveItem(UnitItemInSlot(u[i],5))
            call UnitAddItemToSlotById(u[i],'I00A',5)
            call SetItemCharges(UnitItemInSlot(u[i],5),GetRandomInt(2,4))
            call ItemOfHero(i)
        endif
    set i=i+1
    exitwhen i==6
    
    endloop

endfunction

private function tl takes integer i,unit t returns nothing
    //*** Проверка здоровья и шанс на победу ***
    if LifeUnit(t)-LifeUnit(u[i])>300 then
        set AI_attack[i]=true
        return
    endif
    if LifeUnit(u[i])>LifeUnit(t) then
        call TextPlayer(i,attack_text[GetRandomInt(0,end_attack_text)])
    endif
    //*** Конец проверки ***
endfunction

private function Attack_On takes integer i,unit t returns nothing

//Капитан - интеллект на атаку
    if GetUnitTypeId(u[i])==id_hero[1] then
        set AI_attack[i]=false
        
            //*** Попытка оглушить врага ***
            if GetUnitAbilityLevel(u[i],a2[i])>1 then
            if c2[i] and UnitIsStunned(u[i]) then
                call SetPlayerAbilityAvailable(Player(i),a2[i],true)
                call IssueTargetOrder(u[i],S2[i],t)
                call TriggerSleepAction(.4)
                call SetPlayerAbilityAvailable(Player(i),a2[i],false)
            endif
            endif
            //*** Оглушение закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Попытка оглушить врага ***
            if GetUnitAbilityLevel(u[i],a2[i])>1 then
            if c2[i] and UnitIsStunned(u[i]) then
                call SetPlayerAbilityAvailable(Player(i),a2[i],true)
                call IssueTargetOrder(u[i],S2[i],t)
                call TriggerSleepAction(.4)
                call SetPlayerAbilityAvailable(Player(i),a2[i],false)
            endif
            endif
            //*** Оглушение закончено ***
            
            call tl(i,t)
            
            //*** Попытка нанести урон врагу ***
            if GetUnitAbilityLevel(u[i],a1[i])>3 then
            if c1[i] and UnitIsStunned(u[i]) then
            if DistanceBetweenUnits(u[i],t)<300 then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueTargetOrder(u[i],S1[i],t)
                call TriggerSleepAction(.4)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
            endif
            endif
            endif
            //*** Нанесение урона врагу закончено ***
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Попытка оглушить врага ***
            if GetUnitAbilityLevel(u[i],a2[i])>1 then
            if c2[i] and UnitIsStunned(u[i]) then
            if DistanceBetweenUnits(u[i],t)<125 then
                call SetPlayerAbilityAvailable(Player(i),a2[i],true)
                call IssueTargetOrder(u[i],S2[i],t)
                call TriggerSleepAction(.4)
                call SetPlayerAbilityAvailable(Player(i),a2[i],false)
            endif
            endif
            endif
            //*** Оглушение закончено ***
            
            call tl(i,t)
            
            //*** Применение Ульты ***
            if LifeUnit(t)>0.405 then
            if c4[i] then
            call SetPlayerAbilityAvailable(Player(i),a4[i],true)
            call IssueImmediateOrder(u[i],S4[i])
            call TriggerSleepAction(.4)
            call SetPlayerAbilityAvailable(Player(i),a4[i],false)
            endif
            endif            
            //*** Применение ульты закончено ***
            
            //*** Начало атаки + Ульта ***
            call IssueImmediateOrder(u[i],S1_bonus[i])
            call TriggerSleepAction(.1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueImmediateOrder(u[i],S1_bonus[i])
            call TriggerSleepAction(.1)
            call IssueTargetOrder(u[i],"attack",t)
            call IssueImmediateOrder(u[i],S1_bonus[i])
            call TriggerSleepAction(.1)
            call IssueTargetOrder(u[i],"attack",t)
            //*** Конец атаки ***
            
            //*** Начало атаки + Ульта ***
            call IssueImmediateOrder(u[i],S1_bonus[i])
            call TriggerSleepAction(.1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueImmediateOrder(u[i],S1_bonus[i])
            call TriggerSleepAction(.1)
            call IssueTargetOrder(u[i],"attack",t)
            call IssueImmediateOrder(u[i],S1_bonus[i])
            call TriggerSleepAction(.1)
            call IssueTargetOrder(u[i],"attack",t)
            //*** Конец атаки ***
            
            //*** Начало атаки + Ульта ***
            call IssueImmediateOrder(u[i],S1_bonus[i])
            call TriggerSleepAction(.1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueImmediateOrder(u[i],S1_bonus[i])
            call TriggerSleepAction(.1)
            call IssueTargetOrder(u[i],"attack",t)
            call IssueImmediateOrder(u[i],S1_bonus[i])
            call TriggerSleepAction(.1)
            call IssueTargetOrder(u[i],"attack",t)
            //*** Конец атаки ***
            
            set AI_attack[i]=true
    endif
//Интеллект капитана закончен

//Таур Грозный - интеллект на атаку
    if GetUnitTypeId(u[i])==id_hero[4] then
        set AI_attack[i]=false
        
            //*** Попытка оглушить врага ***
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
            if DistanceBetweenUnits(u[i],t)<250 then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueImmediateOrder(u[i],S1[i])
                call TriggerSleepAction(.5)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
            endif
            endif
            endif
            //*** Оглушение закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Попытка оглушить врага ***
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
            if DistanceBetweenUnits(u[i],t)<250 then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueImmediateOrder(u[i],S1[i])
                call TriggerSleepAction(.5)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
            endif
            endif
            endif
            //*** Оглушение закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Попытка оглушить врага ***
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
            if DistanceBetweenUnits(u[i],t)<250 then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueImmediateOrder(u[i],S1[i])
                call TriggerSleepAction(.5)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
            endif
            endif
            endif
            //*** Оглушение закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            set AI_attack[i]=true
    endif
//Интеллект Таура закончен

//Король плети - интеллект на атаку
    if GetUnitTypeId(u[i])==id_hero[2] then
        set AI_attack[i]=false
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Попытка оглушить врага *** VER 1.0
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueTargetOrder(u[i],S1[i],t)
                call TriggerSleepAction(.6)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
            endif
            endif
            //*** Оглушение закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Попытка оглушить врага *** VER 2.0
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
            if DistanceBetweenUnits(u[i],t)>300 then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueTargetOrder(u[i],S1[i],t)
                call TriggerSleepAction(.6)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
            endif
            endif
            endif
            //*** Оглушение закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Попытка оглушить врага *** VER 2.0
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
            if DistanceBetweenUnits(u[i],t)>300 then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueTargetOrder(u[i],S1[i],t)
                call TriggerSleepAction(.6)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
            endif
            endif
            endif
            //*** Оглушение закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Попытка оглушить врага *** VER 2.0
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
            if DistanceBetweenUnits(u[i],t)>300 then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueTargetOrder(u[i],S1[i],t)
                call TriggerSleepAction(.6)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
            endif
            endif
            endif
            //*** Оглушение закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Попытка оглушить врага *** VER 2.0
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
            if DistanceBetweenUnits(u[i],t)>300 then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueTargetOrder(u[i],S1[i],t)
                call TriggerSleepAction(.6)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
            endif
            endif
            endif
            //*** Оглушение закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Попытка оглушить врага *** VER 2.0
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
            if DistanceBetweenUnits(u[i],t)>300 then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueTargetOrder(u[i],S1[i],t)
                call TriggerSleepAction(.6)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
            endif
            endif
            endif
            //*** Оглушение закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            set AI_attack[i]=true
    endif
//Интеллект короля плети

//Неруб - интеллект на атаку
    if GetUnitTypeId(u[i])==id_hero[0] then
        set AI_attack[i]=false
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Применение Ульты ***
            if c4[i] then
            if GetUnitAbilityLevel(u[i],a4[i])>1 then
            if LifeUnit(u[i])<450 then
            call SetPlayerAbilityAvailable(Player(i),a4[i],true)
            call IssueImmediateOrder(u[i],S4[i])
            call TriggerSleepAction(.5)
            call SetPlayerAbilityAvailable(Player(i),a4[i],false)
            endif
            endif
            endif            
            //*** Применение ульты закончено ***
            
            call tl(i,t)
            
            //*** Попытка нанести урон врагу ***
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueImmediateOrder(u[i],S1[i])
                call TriggerSleepAction(.1)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
                if GetUnitAbilityLevel(u[i],'B001')==1 then
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssueTargetOrder(u[i],"attack",t)
                    call IssueTargetOrder(u[i],"attack",t)
                    call IssueTargetOrder(u[i],"attack",t)
                endif
            endif
            endif
            //*** Нанесение урона врагу закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Попытка нанести урон врагу ***
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueImmediateOrder(u[i],S1[i])
                call TriggerSleepAction(.1)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
                if GetUnitAbilityLevel(u[i],'B001')==1 then
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssueTargetOrder(u[i],"attack",t)
                    call IssueTargetOrder(u[i],"attack",t)
                    call IssueTargetOrder(u[i],"attack",t)
                endif
            endif
            endif
            //*** Нанесение урона врагу закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Применение Ульты ***
            if c4[i] then
            if GetUnitAbilityLevel(u[i],a4[i])>1 then
            if LifeUnit(u[i])<525 then
            call SetPlayerAbilityAvailable(Player(i),a4[i],true)
            call IssueImmediateOrder(u[i],S4[i])
            call TriggerSleepAction(.5)
            call SetPlayerAbilityAvailable(Player(i),a4[i],false)
            endif
            endif
            endif            
            //*** Применение ульты закончено ***
            
            call tl(i,t)
            
            //*** Попытка нанести урон врагу ***
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueImmediateOrder(u[i],S1[i])
                call TriggerSleepAction(.1)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
                if GetUnitAbilityLevel(u[i],'B001')==1 then
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssuePointOrder(u[i],"move",GetUnitX(t),GetUnitY(t))
                    call TriggerSleepAction(.1)
                    call IssueTargetOrder(u[i],"attack",t)
                    call IssueTargetOrder(u[i],"attack",t)
                    call IssueTargetOrder(u[i],"attack",t)
                endif
            endif
            endif
            //*** Нанесение урона врагу закончено ***
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            set AI_attack[i]=true
    endif
//Интеллект Неруба

//Мастер Клинка - интеллект на атаку
    if GetUnitTypeId(u[i])==id_hero[3] then
        set AI_attack[i]=false
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Применение Ульты ***
            if c4[i] then
            if GetUnitAbilityLevel(u[i],a4[i])>1 then
            call SetPlayerAbilityAvailable(Player(i),a4[i],true)
            call IssueImmediateOrder(u[i],S4[i])
            call TriggerSleepAction(.5)
            call SetPlayerAbilityAvailable(Player(i),a4[i],false)
            endif
            endif            
            //*** Применение ульты закончено ***
            
            call tl(i,t)
            
            //*** Попытка нанести урон врагу ***
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
            if DistanceBetweenUnits(u[i],t)<300 then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueImmediateOrder(u[i],S1[i])
                call TriggerSleepAction(.25)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.8)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.7)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.6)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.5)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.4)
                    call IssueTargetOrder(u[i],"attack",t)
            endif
            endif
            endif
            //*** Нанесение урона врагу закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Попытка нанести урон врагу ***
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
            if DistanceBetweenUnits(u[i],t)<300 then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueImmediateOrder(u[i],S1[i])
                call TriggerSleepAction(.25)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.8)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.7)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.6)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.5)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.4)
                    call IssueTargetOrder(u[i],"attack",t)
            endif
            endif
            endif
            //*** Нанесение урона врагу закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Применение Ульты ***
            if c4[i] then
            if GetUnitAbilityLevel(u[i],a4[i])>1 then
            call SetPlayerAbilityAvailable(Player(i),a4[i],true)
            call IssueImmediateOrder(u[i],S4[i])
            call TriggerSleepAction(.5)
            call SetPlayerAbilityAvailable(Player(i),a4[i],false)
            endif
            endif            
            //*** Применение ульты закончено ***
            
            call tl(i,t)
            
            //*** Попытка нанести урон врагу ***
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
            if DistanceBetweenUnits(u[i],t)<300 then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssueImmediateOrder(u[i],S1[i])
                call TriggerSleepAction(.25)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.8)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.7)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.6)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.5)
                    call IssueTargetOrder(u[i],"attack",t)
                    call TriggerSleepAction(.4)
                    call IssueTargetOrder(u[i],"attack",t)
            endif
            endif
            endif
            //*** Нанесение урона врагу закончено ***
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            set AI_attack[i]=true
    endif
//Интеллект Мастер Клинка

//Драска - интеллект на атаку
    if GetUnitTypeId(u[i])==id_hero[5] then
        set AI_attack[i]=false
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Применение Ульты ***
            if c4[i] then
            if GetUnitAbilityLevel(u[i],a4[i])>0 then
            call SetPlayerAbilityAvailable(Player(i),a4[i],true)
            call IssueImmediateOrder(u[i],S4[i])
            call TriggerSleepAction(.5)
            call SetPlayerAbilityAvailable(Player(i),a4[i],false)
            endif
            endif            
            //*** Применение ульты закончено ***
            
            call tl(i,t)
            
            //*** Попытка нанести урон врагу ***
            if GetUnitAbilityLevel(u[i],a1[i])>=1 then
            if c1[i] and UnitIsStunned(u[i]) then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssuePointOrder(u[i],S1[i],GetUnitX(t),GetUnitY(t))
                call TriggerSleepAction(1)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
            endif
            endif
            //*** Нанесение урона врагу закончено ***
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Попытка нанести урон врагу ***
            if GetUnitAbilityLevel(u[i],a1[i])>=1 then
            if c1[i] and UnitIsStunned(u[i]) then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssuePointOrder(u[i],S1[i],GetUnitX(t),GetUnitY(t))
                call TriggerSleepAction(1)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
            endif
            endif
            //*** Нанесение урона врагу закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Применение Ульты ***
            if c4[i] then
            if GetUnitAbilityLevel(u[i],a4[i])>1 then
            call SetPlayerAbilityAvailable(Player(i),a4[i],true)
            call IssueImmediateOrder(u[i],S4[i])
            call TriggerSleepAction(.5)
            call SetPlayerAbilityAvailable(Player(i),a4[i],false)
            endif
            endif            
            //*** Применение ульты закончено ***
            
            call tl(i,t)
            
            //*** Попытка нанести урон врагу ***
            if GetUnitAbilityLevel(u[i],a1[i])>1 then
            if c1[i] and UnitIsStunned(u[i]) then
                call SetPlayerAbilityAvailable(Player(i),a1[i],true)
                call IssuePointOrder(u[i],S1[i],GetUnitX(t),GetUnitY(t))
                call TriggerSleepAction(.8)
                call SetPlayerAbilityAvailable(Player(i),a1[i],false)
            endif
            endif
            //*** Нанесение урона врагу закончено ***
            
            call tl(i,t)
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            //*** Начало атаки ***
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            call IssueTargetOrder(u[i],"attack",t)
            call TriggerSleepAction(1)
            //*** Конец атаки ***
            
            set AI_attack[i]=true
    endif
//Интеллект Драска

endfunction
LordSerga добавил:
Продолжение, часть 2.
» код (1171-2000 строки)
private function New_Line takes nothing returns nothing
if GetTriggerUnit()==u[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] then
call IssueImmediateOrder(u[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))],"stop")
endif
set AI_line[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]=2
endfunction

private function Control_Line takes nothing returns nothing
local integer i=0
loop
if AI[i] then
    set AI_line[i]=GetRandomInt(1,3)
endif
set i=i+1
exitwhen i==6
endloop
endfunction

function Control_Line_Set takes integer i, integer num returns nothing
set AI_line[i]=num
endfunction

private function Set_Ability takes integer i returns nothing
    set c1[i]=true
    set c2[i]=true
    set c3[i]=true
    set c4[i]=true
    //   Герой [Неруб]
if GetUnitTypeId(u[i])==id_hero[0] then
    set a1[i]='A000'
    set a2[i]='A00D'
    set a3[i]='A002'
    set a4[i]='A00I'
        //Пояснене: [true] - Способность активная, [false] - пассивная способность
    set A1[i]=true
    set A2[i]=false
    set A3[i]=false
    set A4[i]=true
        //Приказ данной способности
    set S1[i]="windwalk"
    set S2[i]=""
    set S3[i]=""
    set S4[i]="fanofknives"
    set S1_bonus[i]=""
    set S2_bonus[i]=""
endif

    //   Герой [Капитан]
if GetUnitTypeId(u[i])==id_hero[1] then
    set a1[i]='A004'
    set a2[i]='A00N'
    set a3[i]='A00M'
    set a4[i]='A007'

    set A1[i]=true
    set A2[i]=true
    set A3[i]=false
    set A4[i]=true
    
    set S1[i]="breathoffire"
    set S2[i]="thunderbolt"
    set S3[i]=""
    set S4[i]="metamorphosis"
    set S1_bonus[i]="divineshield"
    set S2_bonus[i]=""
endif

        //   Герой [Король Плети]
if GetUnitTypeId(u[i])==id_hero[2] then
    set a1[i]='A01B'
    set a2[i]='A018'
    set a3[i]='A019'
    set a4[i]='A01A'

    set A1[i]=true
    set A2[i]=false
    set A3[i]=false
    set A4[i]=false
    
    set S1[i]="thunderbolt"
    set S2[i]=""
    set S3[i]=""
    set S4[i]=""
    set S1_bonus[i]=""
    set S2_bonus[i]=""
endif

if GetUnitTypeId(u[i])==id_hero[3] then
    set a1[i]='A00O'
    set a2[i]='A00Z'
    set a3[i]='A00W'
    set a4[i]='A015'

    set A1[i]=true
    set A2[i]=false
    set A3[i]=false
    set A4[i]=true
    
    set S1[i]="whirlwind"
    set S2[i]=""
    set S3[i]=""
    set S4[i]="frenzy"
    set S1_bonus[i]=""
    set S2_bonus[i]=""
endif

if GetUnitTypeId(u[i])==id_hero[4] then
    set a1[i]='A01V'
    set a2[i]='A01W'
    set a3[i]='A01T'
    set a4[i]='A01Y'

    set A1[i]=true
    set A2[i]=false
    set A3[i]=false
    set A4[i]=false
    
    set S1[i]="stomp"
    set S2[i]=""
    set S3[i]=""
    set S4[i]=""
    set S1_bonus[i]=""
    set S2_bonus[i]=""
endif

if GetUnitTypeId(u[i])==id_hero[5] then
    set a1[i]='A01P'
    set a2[i]='A01R'
    set a3[i]='A01S'
    set a4[i]='A01Q'

    set A1[i]=true
    set A2[i]=false
    set A3[i]=false
    set A4[i]=true

    set S1[i]="shockwave"
    set S2[i]=""
    set S3[i]=""
    set S4[i]="windwalk"
    set S1_bonus[i]=""
    set S2_bonus[i]=""
endif
endfunction

private function A takes integer i,integer id returns nothing
if id==1 then
 call SetPlayerAbilityAvailable(Player(i),a1[i],true)
 call SelectHeroSkill(u[i],a1[i])
 call SetPlayerAbilityAvailable(Player(i),a1[i],not A1[i])
endif
if id==2 then
 call SetPlayerAbilityAvailable(Player(i),a2[i],true)
 call SelectHeroSkill(u[i],a2[i])
 call SetPlayerAbilityAvailable(Player(i),a2[i],not A2[i])
endif
if id==3 then
 call SetPlayerAbilityAvailable(Player(i),a3[i],true)
 call SelectHeroSkill(u[i],a3[i])
 call SetPlayerAbilityAvailable(Player(i),a3[i],not A3[i])
endif
if id==4 then
 call SetPlayerAbilityAvailable(Player(i),a4[i],true)
 call SelectHeroSkill(u[i],a4[i])
 call SetPlayerAbilityAvailable(Player(i),a4[i],not A4[i])
endif
endfunction

private function HeroAbility takes nothing returns nothing
local integer i=0

    loop
        if AI[i] then
            if GetHeroSkillPoints(u[i])>0 and GetUnitState(u[i],UNIT_STATE_LIFE)>100 then
            
                // hero (Kapitan)
                if GetUnitTypeId(u[i])==id_hero[1] then
                 call A(i,4)
                 call A(i,2)
                 call A(i,3)
                 call A(i,1)
                endif
                
                // hero (Nerub)
                if GetUnitTypeId(u[i])==id_hero[0] then
                 call A(i,4)
                 call A(i,3)
                 call A(i,1)
                 call A(i,2)
                endif
                
                // hero (Skeleton)
                if GetUnitTypeId(u[i])==id_hero[2] then
                 call A(i,4)
                 call A(i,3)
                 call A(i,1)
                 call A(i,2)
                endif
                
                // hero (Daise)
                if GetUnitTypeId(u[i])==id_hero[3] then
                 call A(i,4)
                 call A(i,1)
                 call A(i,2)
                 call A(i,3)
                endif
                
                // hero (Tauren Chieft)
                if GetUnitTypeId(u[i])==id_hero[4] then
                 call A(i,4)
                 call A(i,1)
                 call A(i,2)
                 call A(i,3)
                endif
                
                // hero (Dragon Swim - Draska)
                if GetUnitTypeId(u[i])==id_hero[5] then
                 call A(i,4)
                 call A(i,2)
                 call A(i,3)
                 call A(i,1)
                endif
            endif
        endif
    set i = i + 1
    exitwhen i == 6
    endloop
endfunction

private function AI_TOWER takes integer i returns boolean
    local group g=CreateGroup()
    local group gr=CreateGroup()
    local integer count=0
    local unit z
    call GroupEnumUnitsInRange(g,GetUnitX(u[i]),GetUnitY(u[i]),900,null)
    
    loop
        set z=FirstOfGroup(g)
        exitwhen z==null
        if IsPlayerEnemy(Player(i),GetOwningPlayer(z)) then
        if LifeUnit(z)>0.405 then
        if GetUnitTypeId(z)=='u004' or GetUnitTypeId(z)=='u000' or GetUnitTypeId(z)=='u001' then
            call GroupAddUnit(gr,z)
        endif
        endif
        endif
        call GroupRemoveUnit(g,z)
    endloop
    
    call DestroyGroup(g)
    set g=null
    
    loop
        set z=FirstOfGroup(gr)
        exitwhen z==null
        set count=count+1
        call GroupRemoveUnit(gr,z)
    endloop
    
    call DestroyGroup(gr)
    set gr=null
    if count>0 then
        return false
    else
        return true
    endif
endfunction

private function AI_walking_test takes integer i, boolean bl returns integer
    local group g=CreateGroup()
    local group gr=CreateGroup()
    local integer count=0
    local unit z
    call GroupEnumUnitsInRange(g,GetUnitX(u[i]),GetUnitY(u[i]),900,null)
    
    loop
        set z=FirstOfGroup(g)
        exitwhen z==null
        if IsPlayerEnemy(Player(i),GetOwningPlayer(z))!=bl then
        if GetOwningPlayer(z)!=Player(9) then
        if GetUnitTypeId(z)!='u002' or GetUnitTypeId(z)!='u003' or GetUnitTypeId(z)!='u005' or GetUnitTypeId(z)!='h002' then
        if IsUnitType(z,UNIT_TYPE_STRUCTURE)==false then
        if IsUnitType(z,UNIT_TYPE_HERO)==false then
        if LifeUnit(z)>0.405 then
            call GroupAddUnit(gr,z)
        endif
        endif
        endif
        endif
        endif
        endif
        call GroupRemoveUnit(g,z)
    endloop
    
    call DestroyGroup(g)
    set g=null
    
    loop
        set z=FirstOfGroup(gr)
        exitwhen z==null
        set count=count+1
        call GroupRemoveUnit(gr,z)
    endloop
    
    call DestroyGroup(gr)
    set gr=null
    return count
endfunction

private function AI_walking takes nothing returns nothing
local integer i=0
local string o

    loop
        if AI[i] then
        set walk[i]=true
            if AI_walking_test(i,true)<AI_walking_test(i,false) then
            if AI_walking_test(i,true)==1 then
                set walk[i]=false
            endif
            endif
        endif
    set i=i+1
    exitwhen i==6
    endloop
    
set i=0
        loop
            if AI[i] then
                if walk[i] then
                    if AI_attack[i] and REGEN[i]==false then
                        set o=OrderId2String(GetUnitCurrentOrder(u[i]))
                        if o!="attack" then
                            if AI_line[i]==1 then
                                call IssuePointOrder(u[i],"attack",x1,y1)
                            endif
                            if AI_line[i]==3 then
                                call IssuePointOrder(u[i],"attack",x3,y3)
                            endif
                            if AI_line[i]==2 then
                                if i<=2 then
                                    call IssuePointOrder(u[i],"attack",x2_a,y2_a)
                                else
                                    call IssuePointOrder(u[i],"attack",x2_b,y2_b)
                                endif
                            endif
                        endif
                    endif
                else  //walk[num_player]==false
                    if i<=2 then
                        call IssuePointOrder(u[i],"move",BaseX1,BaseY1)
                    else
                        call IssuePointOrder(u[i],"move",BaseX2,BaseY2)
                    endif
                endif
            endif
        set i = i + 1
        exitwhen i == 6
    endloop
    
endfunction

private function Condition_Attack_Hero takes nothing returns boolean
    return IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()),GetOwningPlayer(GetAttacker())) and IsUnitType(GetAttacker(),UNIT_TYPE_HERO) and (GetTriggerUnit()==u[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]) and AI_attack[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))] and REGEN[GetPlayerId(GetOwningPlayer(GetTriggerUnit()))]==false
endfunction

private function Attack_Hero takes nothing returns nothing
    local integer i=GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
    if PercentLifeUnit(u[i])>.1 then
    if AI_walking_test(i,true)==0 and AI_walking_test(i,false)>1 then
    else
    if AI_TOWER(i) then
        call Attack_On(i,GetAttacker())
    endif
    endif
    endif
endfunction

private function HeroCreate takes nothing returns nothing
local integer i=temp_integer
    call TriggerSleepAction(GetRandomInt(12,17))
            if i==0 or i==1 or i==2 then
            set udg_hero[i+1]=CreateUnit(Player(i),id_hero[GetRandomInt(0,I)],GetRectCenterX(gg_rct_HeroSwap1),GetRe​ctCenterY(gg_rct_HeroSwap1),270)
            else
            if i==3 or i==4 or i==5 then
            set udg_hero[i+1]=CreateUnit(Player(i),id_hero[GetRandomInt(0,I)],GetRectCenterX(gg_rct_HeroSwap2),GetRe​ctCenterY(gg_rct_HeroSwap2),270)
            endif
            endif
    call TriggerSleepAction(.0)
    set u[i]=udg_hero[i+1]
    call Set_Ability(i)
    call TextAllPlayers(color_players[i]+GetPlayerName(Player(i))+" выбрал: Герой - "+GetUnitName(u[i])+"|r")

    call IssuePointOrder(u[i],"patrol",GetUnitX(u[i])+GetRandomReal(-150,150),GetUnitY(u[i])+GetRan​domReal(-150,150))

    call UnitAddItemToSlotById(u[i],'I00A',5)
    call SetItemCharges(UnitItemInSlot(u[i],5),GetRandomInt(2,4))
    
    call ItemOfHero(i)
    
    call SetPlayerHandicapXP(Player(i), 1+.25*difficulty[i])
    call SetPlayerAbilityAvailable(Player(i),a1[i],not A1[i])
    call SetPlayerAbilityAvailable(Player(i),a2[i],not A2[i])
    call SetPlayerAbilityAvailable(Player(i),a3[i],not A3[i])
    call SetPlayerAbilityAvailable(Player(i),a4[i],not A4[i])
    call TriggerSleepAction(GetRandomReal(3,12))
    call TextPlayerAll(i,init_text[GetRandomInt(0,end_init_text)])
    call TriggerSleepAction(GetRandomReal(5,10))
    set AI_attack[i]=true
    set AI_line[i]=GetRandomInt(1,3)
    set REGEN[i]=false
endfunction

private function CreepsAttackTest takes nothing returns boolean
local integer i=GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
 return IsUnitType(GetAttacker(),UNIT_TYPE_HERO)==false and AI[i] and AI_attack[i] and REGEN[i]==false
endfunction

private function CreepsAttackActions takes nothing returns nothing
    local integer i=GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
        if i<=2 then
            call IssuePointOrder(u[i],"move",BaseX1,BaseY1)
        else
            call IssuePointOrder(u[i],"move",BaseX2,BaseY2)
        endif
endfunction


private function Num_Cool_Ability takes integer i returns integer
if GetSpellAbilityId()=='A01B' or GetSpellAbilityId()=='A000' or GetSpellAbilityId()=='A01P' or GetSpellAbilityId()=='A00O' or GetSpellAbilityId()=='A004' then
    return 1
endif

if GetSpellAbilityId()=='A00N' then
    return 2
endif

if GetSpellAbilityId()=='A015' and GetSpellAbilityId()=='A007' or GetSpellAbilityId()=='A01Q' then
    return 4
endif
    return 0
endfunction

private function Time_Cool_Ability takes integer i returns real
    if GetSpellAbilityId()=='A01B' or GetSpellAbilityId()=='A01P' then
        return 8.
    endif
//---//
    if GetSpellAbilityId()=='A000' then
        return 13-GetUnitAbilityLevel(GetTriggerUnit(),GetSpellAbilityId())
    endif
//---//
    if GetSpellAbilityId()=='A004' then
        return 10.
    endif
//---//
    if GetSpellAbilityId()=='A00O' then
        return 30.
    endif
//---//
    if GetSpellAbilityId()=='A00N' then
        return 7.
    endif
//---//
    if GetSpellAbilityId()=='A015' then
        return 45-5*GetUnitAbilityLevel(GetTriggerUnit(),GetSpellAbilityId())
    endif
//---//
    if GetSpellAbilityId()=='A007' then
        return 115
    endif
//---//
    if GetSpellAbilityId()=='A01Q' then
        return 55-10*GetUnitAbilityLevel(GetTriggerUnit(),GetSpellAbilityId())
    endif
//---//
    if GetSpellAbilityId()=='A00I' then
        return 70-10*GetUnitAbilityLevel(GetTriggerUnit(),GetSpellAbilityId())
    endif
//---//
    if GetSpellAbilityId()=='A01V' then
        return 12
    endif
//---//
    if GetSpellAbilityId()=='A01Q' then
        return 55-10*GetUnitAbilityLevel(GetTriggerUnit(),GetSpellAbilityId())
    endif
//---//
    if GetSpellAbilityId()=='A01P' then
        return 8
    endif
//---//
        return 0.
endfunction

private function AI_COOL_CONTROL takes nothing returns nothing
    local integer i=GetPlayerId(GetOwningPlayer(GetTriggerUnit()))
    if Num_Cool_Ability(i)==1 then
        set c1[i]=false
        call TriggerSleepAction(Time_Cool_Ability(i))
        set c1[i]=true
    endif
    if Num_Cool_Ability(i)==2 then
        set c2[i]=false
        call TriggerSleepAction(Time_Cool_Ability(i))
        set c2[i]=true
    endif
    if Num_Cool_Ability(i)==3 then
        set c3[i]=false
        call TriggerSleepAction(Time_Cool_Ability(i))
        set c3[i]=true
    endif
    if Num_Cool_Ability(i)==4 then
        set c4[i]=false
        call TriggerSleepAction(Time_Cool_Ability(i))
        set c4[i]=true
    endif
endfunction

    ////Init AI 
private function Init_AI takes nothing returns nothing
    local integer i = 0
    loop
        //   Проверка на игрока
        if GetPlayerController(Player(i))==MAP_CONTROL_COMPUTER then
        set AI[i]=true   //   установка переменной на [ДА]
                //   Тест сложности компьютера
                if GetAIDifficulty(Player(i))==AI_DIFFICULTY_NEWBIE then
                set difficulty[i]=1
                else
                if GetAIDifficulty(Player(i))==AI_DIFFICULTY_NORMAL then
                set difficulty[i]=2
                else
                set difficulty[i]=3
                endif
                endif
                //   Конец теста сложности

        else
        set AI[i]=false
        endif
        set i = i + 1
        exitwhen i == 6
    endloop
    //   trigger GO - это [Триггер, управляющий приказами ИИ-героев]
set GO=CreateTrigger()
call TriggerRegisterTimerEvent(GO,1.5,true)
call TriggerAddAction(GO, function AI_walking)

set Un_attack=CreateTrigger()
call TriggerRegisterPlayerUnitEvent(Un_attack,Player(0), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerRegisterPlayerUnitEvent(Un_attack,Player(1), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerRegisterPlayerUnitEvent(Un_attack,Player(2), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerRegisterPlayerUnitEvent(Un_attack,Player(3), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerRegisterPlayerUnitEvent(Un_attack,Player(4), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerRegisterPlayerUnitEvent(Un_attack,Player(5), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerAddCondition(Un_attack,Condition( function CreepsAttackTest))
call TriggerAddAction(Un_attack, function CreepsAttackActions)
    
set IA_create=CreateTrigger()
call TriggerAddAction(IA_create, function HeroCreate)

set Ability=CreateTrigger()
call TriggerAddAction(Ability, function HeroAbility)
call TriggerRegisterTimerEvent(Ability,3,true)

set control_line=CreateTrigger()
call TriggerAddAction(control_line, function Control_Line)
call TriggerRegisterTimerEvent(control_line,90,true)

set rectRegion=CreateRegion()
call RegionAddRect(rectRegion, gg_rct_Down)
call RegionAddRect(rectRegion, gg_rct_Up)
set new_line=CreateTrigger()
call TriggerAddAction(new_line, function New_Line)
call TriggerRegisterEnterRegion(new_line, rectRegion, null)

set RGN_hero=CreateTrigger()
call TriggerAddAction(RGN_hero, function RGN_HERO)
call TriggerRegisterTimerEvent(RGN_hero,1,true)

call TriggerAddAction(kc, function kill_creeps_action)

call TriggerAddAction(sa, function Stop_Attack_Creeps)
call TriggerRegisterPlayerUnitEvent(sa,Player(6),EVENT_PLAYER_UNIT_ATTACKED,null)
call TriggerRegisterPlayerUnitEvent(sa,Player(7),EVENT_PLAYER_UNIT_ATTACKED,null)

set Life_Heros=CreateTrigger()
call TriggerAddAction(Life_Heros, function Test_Life_Hero)
call TriggerRegisterTimerEvent(Life_Heros,1,true)

call TriggerAddAction(kill_creeps, function KILL_CREEPS)
call TriggerRegisterTimerEvent(kill_creeps,1,true)

call TriggerAddAction(cool_control, function AI_COOL_CONTROL)
call TriggerRegisterPlayerUnitEvent(cool_control,Player(0),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(cool_control,Player(1),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(cool_control,Player(2),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(cool_control,Player(3),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(cool_control,Player(4),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
call TriggerRegisterPlayerUnitEvent(cool_control,Player(5),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)

set attack_hero=CreateTrigger()
call TriggerAddAction(attack_hero, function Attack_Hero)
call TriggerAddCondition(attack_hero,Condition( function Condition_Attack_Hero))
call TriggerRegisterPlayerUnitEvent(attack_hero, Player(0), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerRegisterPlayerUnitEvent(attack_hero, Player(1), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerRegisterPlayerUnitEvent(attack_hero, Player(2), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerRegisterPlayerUnitEvent(attack_hero, Player(3), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerRegisterPlayerUnitEvent(attack_hero, Player(4), EVENT_PLAYER_UNIT_ATTACKED, null)
call TriggerRegisterPlayerUnitEvent(attack_hero, Player(5), EVENT_PLAYER_UNIT_ATTACKED, null)

    //   Настройка линий, их 3
    set x1=GetRectCenterX(gg_rct_Down)
    set y1=GetRectCenterY(gg_rct_Down)
    set x2_a=4200
    set y2_a=-4200
    set x2_b=-4200
    set y2_b=4200
    set x3=GetRectCenterX(gg_rct_Up)
    set y3=GetRectCenterY(gg_rct_Up)
    // END-Настройка линий

//   Настройка цвета
set color_players[0]="|cFFFF0303"   //красный
set color_players[1]="|cFF0042FF"   //синий
set color_players[2]="|cFF1CE6B9"   //голубой
set color_players[3]="|cFF540081"   //фиолетовый
set color_players[4]="|cFFFFFC01"   //жёлтый
set color_players[5]="|cFFFE8A0E"   //оранжевый

    //Создание ИИ-героев, настройка переменных
//   ***
    set I=0
    set id_hero[I]='Ux01'
    set I=I+1
    set id_hero[I]='Ux06'
    set I=I+1
    set id_hero[I]='O001'
    set I=I+1
    set id_hero[I]='O000'
    set I=I+1
    set id_hero[I]='O002'
    set I=I+1
    set id_hero[I]='H001'
//   ***
    set i=0
    loop
        if AI[i] then
        set temp_integer=i
        call TriggerExecute(IA_create)
        endif
            set i = i + 1
        exitwhen i == 6
    endloop
    
    
// SET STRING !!!
set i=0
set go_base[i]="От Чёрт, Меня коцануло!!! я захилица пойду"
set i=i+1
set go_base[i]="Я на базу. Ща приду"
set i=i+1
set go_base[i]="Ща придём"
set i=i+1
set go_base[i]="Огого, мои палки!!! где то 200. Усё я домой"
set i=i+1
set go_base[i]="Я на базу, отдохну =)"
set i=i+1
set go_base[i]="гнида, тот, кто меня отправил на базу =/"
set i=i+1
set go_base[i]="ну всё, я за предметами"
set i=i+1
set go_base[i]="мана, жизни... надо-бы восполниться, пока"
set i=i+1
set go_base[i]="Нубы хреновы, чё не помогли мне?"
set i=i+1
set go_base[i]="Вот баклан. Не хочу на базу а придётся"
set i=i+1
set go_base[i]="ЭЭЭй, я с линии нафиг сваливаю, на фонтан пора"
set i=i+1
set go_base[i]="Я за колечком =)"
set i=i+1
set go_base[i]="Я на базу, в общем я пошол"
set i=i+1
set go_base[i]="Млин! чуть не заломали, на базу пора"
set i=i+1
set go_base[i]="я на фонтан, а создатель этого интеллекта - LordSerga"
set i=i+1
set go_base[i]="оставляю линию. прощаёте.. ну я же скоро приду"
set end_go_base=i

// ***   ***
set i=0
set init_text[i]="Всем привет, я из МАРСА!!!"
set i=i+1
set init_text[i]="Хай пацаны"
set i=i+1
set init_text[i]="ОГО! "+GetPlayerName(Player(GetRandomInt(0,5)))+" да ты псих, я видел как ты играешь"
set i=i+1
set init_text[i]="Эт, а чё покупать =О"
set i=i+1
set init_text[i]="Кажись опять нубов понабрали"
set i=i+1
set init_text[i]="От сцуко!!! ща заиграем"
set i=i+1
set init_text[i]="Внимание!!! Играет псих... ЭТО Я"
set i=i+1
set init_text[i]="Если с нами есть ЛордСерга, то врагам Армагедец!"
set i=i+1
set init_text[i]="Эх, надёюсь мой создатель интеллекта не намудрил с атакой =)"
set i=i+1
set init_text[i]="А, вот чёрт, я героя с закрытыми глазами выбрал"
set i=i+1
set init_text[i]="А LordSerga живёт в челябинске, и ещё он крутой"
set i=i+1
set init_text[i]="Это НЕ ДОТА!!!, чёрт как ливнуть!!! ААА ПОДСКАЖИТЕ"
set i=i+1
set init_text[i]="Эй, хост не ливай, иначе МЫ ливнём"
set i=i+1
set init_text[i]="Надёюсь я буду всех нести, ведь мне уже 7 лет!"
set i=i+1
set init_text[i]="Ну что, за работу!! Кстати привет всем =)"
set end_init_text=i

//   ***   ***

set i=0
set attack_text[i]="Я под атакой!!! но я побеждаю"
set i=i+1
set attack_text[i]="ХЕЛП МИ!!! Едрёна херь!"
set i=i+1
set attack_text[i]="скажи мне прощай!!!"
set i=i+1
set attack_text[i]="я тебя щас убью"
set i=i+1
set attack_text[i]="Тебе Армагедец, щас УмрЁшь!"
set i=i+1
set attack_text[i]="ХАХАХА я его щас уломаю"
set i=i+1
set attack_text[i]="ААА- -помогите - убивают же"
set i=i+1
set attack_text[i]="ЭЙ ну помогите"
set i=i+1
set attack_text[i]="Щас его доламаю, и другова пойду бить"
set i=i+1
set attack_text[i]="А вот млин, как магия называется то. А Вспомнил - СДОХНИ"
set i=i+1
set attack_text[i]="ХАХАХА я сильней тебя. Ты меня ну хоть как не убьёшь"
set i=i+1
set attack_text[i]="меня НУБИЛА мочит ААА"
set i=i+1
set attack_text[i]="Ну кто же так делает? посмотрите на мя!!! я ПРО"
set i=i+1
set attack_text[i]="ДЕЛАЙТЕ СТАВКИ!!! Я его заламаю"
set i=i+1
set attack_text[i]="АЙ АЙ АЙ он меня мочит"
set i=i+1
set attack_text[i]="захильте меня плиз!!!"
set i=i+1
set attack_text[i]="Вот блин!!! Я инвокером и то лучше играю, чем этим говном"
set i=i+1
set attack_text[i]="что мне бы прочесть на него?"
set i=i+1
set attack_text[i]="Я разумник ? или нет?"
set i=i+1
set attack_text[i]="ЩАС УЛЬТОЙ УБЬЮ"
set i=i+1
set attack_text[i]="Я его зафигарил"
set i=i+1
set attack_text[i]="Ну всё, ща голды получу"
set end_attack_text=i

///*** ***

endfunction

endscope



function InitTrig_AI takes nothing returns nothing
endfunction
[+] замечание от XimikS: 4.5 (тема не в том разделе)
Старый 11.07.2010, 20:11
Enein
Silenced by ZlaYa1000
offline
Опыт: 43,453
Активность:
зачем нам ии для какой-то карты? он же ни капли не универсальный
// ну а код офк страшный
Старый 11.07.2010, 20:13
LordSerga

offline
Опыт: 3,809
Активность:
В ближайшем времени полностью буду периписывать все коды в карте. Щас уже переписал 30% в крте оаталось ещё 8000-9000 строк переделать из убогово в нормальный вид. И да один триггер - много условий и много от него действий.
Старый 11.07.2010, 20:19
Icy
Это Я!
offline
Опыт: 1,785
Активность:
Примерчег бы, а то действительно непонятно для какого типа карты он, да и поглазеть на его возможности охота, как никак 2к строк оО, наверное стихи сочинять умеет?
Старый 11.07.2010, 21:48
H
hello world
offline
Опыт: 130,725
Активность:
наверное стихи сочинять умеет?
Только бредовые фразы типо "С нами играет PlayerName(random(1..5)), а он очень КРУТОЙ, АААА!"
2000 строк это не много, тем более что видел много ерунды в коде. Во первых у тебя по 200-300 строк на каждого героя, заместо одной системы на всех o_O ( не за парился 100 раз одно и тоже писать? )
Во вторых в перемещении нет никакой логики, AI будет бегать в небольшом радиусе, это значит подойдет только для арены. Где именно находится фонтан должные будет указывать сам триггерщик, а разобраться в твоем коде в 100500 раз сложнее чем написать свой. Тоже самое могу сказать про предметы.. Кстати а где они? Где описываются какие предметы должен покупать герой? o_O
Не пойму зачем это выкладывать тут. Все равно если вставить это в свою карту, то нужно будет переписать половину, а те кто знает что именно переписывать могут и свой код написать, гораздо удобнее.
Старый 12.07.2010, 00:59
LordSerga

offline
Опыт: 3,809
Активность:
Я писал год назад, тогда vjass не понимал то толком, да и АИ система работает) я её буду сокращать и желательно в 400-500 строк.
Старый 12.07.2010, 03:58
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
LordSerga, напиши как с этим работать, иначе в теме нет смысла.
Старый 12.07.2010, 04:04
YellowStar
poon
offline
Опыт: 15,144
Активность:
Автор, ты уверен что писал код ты, и мне не стоит бросаться пруфами? Даже имена функций идентичные. Только на русский переведено и удалены сомнительные функции.
Старый 22.09.2010, 23:22
xpadd91

offline
Опыт: 10,739
Активность:
LordSerga,тип жанр: Arena ????
Старый 25.09.2010, 16:31
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 09:43.