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),GetRectCenterY(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),GetRectCenterY(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])+GetRandomReal(-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 (тема не в том разделе)
|