создал ИИ сделал так чтоб ходили и били крипов все нормально работает создал триггер для того что бы ходили на базу если хп мало здесь возникла проблема если хп мало они дерутся до смерти как можно это реализовать вот скрины

Ты сам даешь им приказ двигаться через атаку, вместо того чтобы просто идти. Какой еще результат ожидается?
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
23
Похожие вопросы:

ответ
koloff, только что проверил, если нет анимации death у эффекта, то он исчезает спустя несколько секунд после вызова функции DestroyEffect
ответ
zontik2012 нет, не является утечкой. Если бы ты крепил эффект к точке, к примеру в позиции юнита, причем не удалял бы эту точку потом - то это была бы утечка
ответ
время смерти эффектов - игровая константа, по дефолту 5с, в константах ищи
ответ
Можно попробовать по шаманить с Blizzard.j или cheats.j в архивах игры, но только на старых версиях, до CASC.
ответ
Нет но...
Такое делал Ретера в рефордже и можно сделать через MME для, но это сильная модификация над варом и такое будет работать только у вас

7
Опять же, зачем ты это делаешь через тригеры, когда есть вполне рабочий редактор ИИ. В нем есть условия, при которых юниты уходят с боя на базу или остаются биться до конца. Внимательно изучай редактор ИИ от близов. Он простой, там мало фишек, но он работает.
Был бы за компом, скинул бы тебе функцию которая отвечает за возврат юнитов на базу, а так, времени нет искать.
ps. У тебя куча однотипных вопросов, ответы на которые тебе впадлу здесь поискать... А они точно есть.
14
mistwood:
Опять же, зачем ты это делаешь через тригеры, когда есть вполне рабочий редактор ИИ. В нем есть условия, при которых юниты уходят с боя на базу или остаются биться до конца. Внимательно изучай редактор ИИ от близов. Он простой, там мало фишек, но он работает.
Был бы за компом, скинул бы тебе функцию которая отвечает за возврат юнитов на базу, а так, времени нет искать.
ps. У тебя куча однотипных вопросов, ответы на которые тебе впадлу здесь поискать... А они точно есть.
а редакторе можно сделать ИИ для арены?
25
Ты сам даешь им приказ двигаться через атаку, вместо того чтобы просто идти. Какой еще результат ожидается?
Принятый ответ
14
Hanabishi:
Ты сам даешь им приказ двигаться через атаку, вместо того чтобы просто идти. Какой еще результат ожидается?
ой, спасибо большое)

Hanabishi:
Ты сам даешь им приказ двигаться через атаку, вместо того чтобы просто идти. Какой еще результат ожидается?
не подскажешь как сделать так чтоб боты качали спелы?
3
Помоему для вашей цели лучше всего пойдет создание AI скрипта и подключение его через функцию SetMeleeAI
Пример AI скрипта ниже (если понимаете JASS, проблем в дальнешем в написании/изменении текущего не составит проблем)
AI Script
globals
	constant integer HOLY_BOLT	= 1095264354

	constant integer FOOTMAN 	= 1751543663
	constant integer KNIGHT		= 1751871081
	constant integer PRIEST		= 1752002674
	constant integer UTHER		= 1215657064

	group	g_hHurtUnitGroup	= CreateGroup()

	integer	g_iCaptainHomeX
	integer g_iCaptainHomeY

	integer g_iFountainOfLifeX
	integer g_iFountainOfLifeY

	unit 	g_hHero
endglobals

function B2S takes boolean b returns string
    if b then
        return "true"
    else
        return "false"
    endif
endfunction

function Dig2Str takes integer i returns string
    if i == 1 then
        return "1"
    elseif i == 2 then
        return "2"
    elseif i == 3 then
        return "3"
    elseif i == 4 then
        return "4"
    elseif i == 5 then
        return "5"
    elseif i == 6 then
        return "6"
    elseif i == 7 then
        return "7"
    elseif i == 8 then
        return "8"
    elseif i == 9 then
        return "9"
    else
        return "0"
    endif
endfunction

// Courtesy of AIAndy and Tommi. See source:
// http://www.hiveworkshop.com/threads/two-custom-campaign-ais-examples.8939/
function Int2Str takes integer ic returns string
    local string s = ""
    local integer i = ic
    local integer ialt = 0
    local boolean neg = false

    if i == 0 then
      return "0"
    endif
    if i < 0 then
      set neg = true
      set i = (-1)*i
    endif
    loop
      exitwhen i == 0
      set ialt = i
      set i = i / 10
      set s = Dig2Str( ialt - 10*i ) + s
    endloop
    if neg then
      set s = "-"+s
    endif
    return s
endfunction

function Event_OnHeroLevelGain takes nothing returns integer
    local integer DEVOTION_AURA = 1095262564
    local integer DIVINE_SHIELD = 1095263347
    local integer RESURRECTION	= 1095266917

	local integer iLevel		= GetHeroLevelAI()

	if 		iLevel == 1 then
		return HOLY_BOLT
	elseif	iLevel == 2 then
		return DEVOTION_AURA
	elseif 	iLevel == 3 then
		return HOLY_BOLT
	elseif	iLevel == 4 then
		return DIVINE_SHIELD
	elseif	iLevel == 5 then
		return HOLY_BOLT
	elseif	iLevel == 6 then
		return RESURRECTION
	elseif	iLevel == 7 then
		return DIVINE_SHIELD
	elseif	iLevel == 8 then
		return DEVOTION_AURA
	elseif	iLevel == 9 then
		return DEVOTION_AURA
	elseif	iLevel == 10 then
		return DIVINE_SHIELD
	endif

	return STAT_UP
endfunction

function InitAssaultGroup takes nothing returns nothing
	call InitAssault()

	call AddAssault(GetUnitCountDone(FOOTMAN) 	- IgnoredUnits(FOOTMAN)	, FOOTMAN	)
	call AddAssault(GetUnitCountDone(KNIGHT)	- IgnoredUnits(KNIGHT)	, KNIGHT	)
	call AddAssault(GetUnitCountDone(PRIEST)	- IgnoredUnits(PRIEST)	, PRIEST	)
	call AddAssault(GetUnitCountDone(UTHER)		- IgnoredUnits(UTHER)	, UTHER		)
endfunction

function FindFountainOfLive takes nothing returns nothing
	local integer	FOUNTAIN_OF_LIFE		= 1852206952
	local integer 	PLAYER_NEUTRAL_PASSIVE 	= 15

	local group 	hGroup 					= CreateGroup()
	local unit		hUnit

	call GroupEnumUnitsOfPlayer(hGroup, Player(PLAYER_NEUTRAL_PASSIVE), null)

	loop
		set hUnit = FirstOfGroup(hGroup)

		exitwhen hUnit == null

		if UnitAlive(hUnit) then
			if IsUnitType(hUnit, UNIT_TYPE_STRUCTURE) then
				if GetUnitTypeId(hUnit) == FOUNTAIN_OF_LIFE then
					set g_iFountainOfLifeX = R2I(GetWidgetX(hUnit)) + 200
					set g_iFountainOfLifeY = R2I(GetWidgetY(hUnit)) - 200

					exitwhen true
				endif
			endif
		endif

		call GroupRemoveUnit(hGroup, hUnit)
	endloop

	call DestroyGroup(hGroup)

	set hGroup 	= null
	set hUnit 	= null
endfunction

function ChangeCaptainHome takes nothing returns nothing
	local integer 	BOTH_CAPTAINS 	= 		3

	set 			g_iCaptainHomeX = 	-3700
	set 			g_iCaptainHomeY = 		0

	call SetCaptainHome(BOTH_CAPTAINS, g_iCaptainHomeX, g_iCaptainHomeY)
endfunction

function CreateUnits takes nothing returns nothing
	local integer MASK_OF_DEATH		= 1836016756
	local integer POTION_OF_HEALTH 	= 1885825125

	set g_hHero = 	CreateUnit(g_hPlayerAI, UTHER	, -1095	, -54	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1302	, -722	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1231	, -728	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1154	, -730	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1091	, -730	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1014	, -730	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -951	, -728	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -858	, -722	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -918	, 257	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1049	, 329	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1118	, 374	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -982	, 295	, 0)
    call 			CreateUnit(g_hPlayerAI, KNIGHT	, -1099	, 106	, 0)
    call 			CreateUnit(g_hPlayerAI, KNIGHT	, -1234	, 5		, 0)
    call 			CreateUnit(g_hPlayerAI, PRIEST	, -1001	, -809	, 0)
    call 			CreateUnit(g_hPlayerAI, PRIEST	, -991	, -112	, 0)
    call 			CreateUnit(g_hPlayerAI, PRIEST	, -1152	, -818	, 0)
    call 			CreateUnit(g_hPlayerAI, PRIEST	, -1103	, -232	, 0)

    call UnitAddItemToSlotById(g_hHero, MASK_OF_DEATH	, 0)
    call UnitAddItemToSlotById(g_hHero, POTION_OF_HEALTH, 1)
endfunction

function IsEnemyInRangeXY takes integer iX, integer iY, integer iRadius returns boolean
	local boolean 	bIsFindEnemy 	= false
	local group 	hGroup 			= CreateGroup()
	local unit		hUnit

	call GroupEnumUnitsInRange(hGroup,iX, iY, I2R(iRadius), null)

	loop
		set hUnit = FirstOfGroup(hGroup)

		exitwhen hUnit == null

		if UnitAlive(hUnit) then
			if IsUnitEnemy(hUnit, g_hPlayerAI) then
				set bIsFindEnemy = true

				exitwhen true
			endif
		endif
	endloop

	call DestroyGroup(hGroup)

	set hGroup 	= null
	set hUnit	= null

	return bIsFindEnemy
endfunction

function CheckUnitHealth takes nothing returns nothing
	local integer	ORDER_SMART			= 851971
	local integer	ORDER_MOVE			= 851986
	local integer	MIN_SAFE_RANGE		= 200
	local integer	MIN_UNIT_HEALTH 	= 150

	local boolean	bIsUnitInHurtGroup

	local group 	hGroup 				= CreateGroup()

	local integer	iOffsetX
	local integer	iOffsetY

	local real 		flUnitHealth
	local unit 		hUnit

	call GroupEnumUnitsOfPlayer(hGroup, g_hPlayerAI, null)

	loop
		set hUnit = FirstOfGroup(hGroup)

		exitwhen hUnit == null

		set bIsUnitInHurtGroup = IsUnitInGroup(hUnit, g_hHurtUnitGroup)

		if UnitAlive(hUnit) then
			if not (IsUnitType(hUnit, UNIT_TYPE_SUMMONED) or hUnit == g_hHero) then
				set flUnitHealth = GetWidgetLife(hUnit)

				if 		R2I(flUnitHealth) < MIN_UNIT_HEALTH then
					set iOffsetX = GetRandomInt(-50, 50)
					set iOffsetY = GetRandomInt(-50, 50)
					call RemoveGuardPosition(hUnit)

					if not bIsUnitInHurtGroup then
						call GroupAddUnit(g_hHurtUnitGroup, hUnit)
					endif

					if IsEnemyInRangeXY(g_iFountainOfLifeX, g_iFountainOfLifeY, 1000) then
						if not IsUnitInRangeXY(hUnit, g_iCaptainHomeX, g_iCaptainHomeY, MIN_SAFE_RANGE) then
							call PrintToChat("Unit go home")

							call IssuePointOrderById(hUnit, ORDER_MOVE, g_iCaptainHomeX  + iOffsetX, g_iCaptainHomeY + iOffsetY)
						endif
					else
						if not IsUnitInRangeXY(hUnit, g_iFountainOfLifeX, g_iFountainOfLifeX, MIN_SAFE_RANGE) then
							call IssuePointOrderById(hUnit, ORDER_SMART	, g_iFountainOfLifeX + iOffsetX	, g_iFountainOfLifeY  + iOffsetY)
						endif
					endif
				elseif 	flUnitHealth * 1.5 > GetUnitState(hUnit, UNIT_STATE_MAX_LIFE) then
					if bIsUnitInHurtGroup then
						call PrintToChat("Unit back to captain control")

						call RecycleGuardPosition(hUnit)
						call GroupRemoveUnit(g_hHurtUnitGroup, hUnit)
					endif
				endif
			endif
		else
			if bIsUnitInHurtGroup then
				call GroupRemoveUnit(g_hHurtUnitGroup, hUnit)
			endif
		endif

		call GroupRemoveUnit(hGroup, hUnit)
	endloop

	if FirstOfGroup(g_hHurtUnitGroup) != null then	//NOTE: Some hurt units under attack at home
		if not CaptainIsHome() then
			if IsEnemyInRangeXY(g_iCaptainHomeX, g_iCaptainHomeY, MIN_SAFE_RANGE) then
				if not CaptainRetreating() then
					call ClearCaptainTargets()
					call CaptainGoHome()
					call SetGroupsFlee(true)	// NOTE: Tested
					call SetUnitsFlee(true)
				endif
			endif
		endif
	endif

	call DestroyGroup(hGroup)

	set hGroup 	= null
	set hUnit	= null
endfunction

function DevelopmentSequence takes nothing returns nothing
	loop
		call InitAssaultGroup()
		call CheckUnitHealth()
		call Sleep(DEFAULT_SLEEP)
	endloop
endfunction

function main takes nothing returns nothing
	set g_hPlayerAI = Player(GetAiPlayer())

	call SetHeroLevels(function Event_OnHeroLevelGain)

	call CreateUnits()

	call PrintToChat("AI Script started")

	call CreateCaptains()
	call GroupTimedLife(true)
	call SetCampaignAI()
	call SetHeroesFlee(true)
	call SetHeroesTakeItems(true)
	call SetWatchMegaTargets(true)

	call Sleep(0.1)
	call ChangeCaptainHome()

	call FindFountainOfLive()

	call StartThread(function DevelopmentSequence)

	loop
		call Sleep(1)
	endloop
endfunction
14
Vitamin:
Помоему для вашей цели лучше всего пойдет создание AI скрипта и подключение его через функцию SetMeleeAI
Пример AI скрипта ниже (если понимаете JASS, проблем в дальнешем в написании/изменении текущего не составит проблем)
AI Script
globals
	constant integer HOLY_BOLT	= 1095264354

	constant integer FOOTMAN 	= 1751543663
	constant integer KNIGHT		= 1751871081
	constant integer PRIEST		= 1752002674
	constant integer UTHER		= 1215657064

	group	g_hHurtUnitGroup	= CreateGroup()

	integer	g_iCaptainHomeX
	integer g_iCaptainHomeY

	integer g_iFountainOfLifeX
	integer g_iFountainOfLifeY

	unit 	g_hHero
endglobals

function B2S takes boolean b returns string
    if b then
        return "true"
    else
        return "false"
    endif
endfunction

function Dig2Str takes integer i returns string
    if i == 1 then
        return "1"
    elseif i == 2 then
        return "2"
    elseif i == 3 then
        return "3"
    elseif i == 4 then
        return "4"
    elseif i == 5 then
        return "5"
    elseif i == 6 then
        return "6"
    elseif i == 7 then
        return "7"
    elseif i == 8 then
        return "8"
    elseif i == 9 then
        return "9"
    else
        return "0"
    endif
endfunction

// Courtesy of AIAndy and Tommi. See source:
// http://www.hiveworkshop.com/threads/two-custom-campaign-ais-examples.8939/
function Int2Str takes integer ic returns string
    local string s = ""
    local integer i = ic
    local integer ialt = 0
    local boolean neg = false

    if i == 0 then
      return "0"
    endif
    if i < 0 then
      set neg = true
      set i = (-1)*i
    endif
    loop
      exitwhen i == 0
      set ialt = i
      set i = i / 10
      set s = Dig2Str( ialt - 10*i ) + s
    endloop
    if neg then
      set s = "-"+s
    endif
    return s
endfunction

function Event_OnHeroLevelGain takes nothing returns integer
    local integer DEVOTION_AURA = 1095262564
    local integer DIVINE_SHIELD = 1095263347
    local integer RESURRECTION	= 1095266917

	local integer iLevel		= GetHeroLevelAI()

	if 		iLevel == 1 then
		return HOLY_BOLT
	elseif	iLevel == 2 then
		return DEVOTION_AURA
	elseif 	iLevel == 3 then
		return HOLY_BOLT
	elseif	iLevel == 4 then
		return DIVINE_SHIELD
	elseif	iLevel == 5 then
		return HOLY_BOLT
	elseif	iLevel == 6 then
		return RESURRECTION
	elseif	iLevel == 7 then
		return DIVINE_SHIELD
	elseif	iLevel == 8 then
		return DEVOTION_AURA
	elseif	iLevel == 9 then
		return DEVOTION_AURA
	elseif	iLevel == 10 then
		return DIVINE_SHIELD
	endif

	return STAT_UP
endfunction

function InitAssaultGroup takes nothing returns nothing
	call InitAssault()

	call AddAssault(GetUnitCountDone(FOOTMAN) 	- IgnoredUnits(FOOTMAN)	, FOOTMAN	)
	call AddAssault(GetUnitCountDone(KNIGHT)	- IgnoredUnits(KNIGHT)	, KNIGHT	)
	call AddAssault(GetUnitCountDone(PRIEST)	- IgnoredUnits(PRIEST)	, PRIEST	)
	call AddAssault(GetUnitCountDone(UTHER)		- IgnoredUnits(UTHER)	, UTHER		)
endfunction

function FindFountainOfLive takes nothing returns nothing
	local integer	FOUNTAIN_OF_LIFE		= 1852206952
	local integer 	PLAYER_NEUTRAL_PASSIVE 	= 15

	local group 	hGroup 					= CreateGroup()
	local unit		hUnit

	call GroupEnumUnitsOfPlayer(hGroup, Player(PLAYER_NEUTRAL_PASSIVE), null)

	loop
		set hUnit = FirstOfGroup(hGroup)

		exitwhen hUnit == null

		if UnitAlive(hUnit) then
			if IsUnitType(hUnit, UNIT_TYPE_STRUCTURE) then
				if GetUnitTypeId(hUnit) == FOUNTAIN_OF_LIFE then
					set g_iFountainOfLifeX = R2I(GetWidgetX(hUnit)) + 200
					set g_iFountainOfLifeY = R2I(GetWidgetY(hUnit)) - 200

					exitwhen true
				endif
			endif
		endif

		call GroupRemoveUnit(hGroup, hUnit)
	endloop

	call DestroyGroup(hGroup)

	set hGroup 	= null
	set hUnit 	= null
endfunction

function ChangeCaptainHome takes nothing returns nothing
	local integer 	BOTH_CAPTAINS 	= 		3

	set 			g_iCaptainHomeX = 	-3700
	set 			g_iCaptainHomeY = 		0

	call SetCaptainHome(BOTH_CAPTAINS, g_iCaptainHomeX, g_iCaptainHomeY)
endfunction

function CreateUnits takes nothing returns nothing
	local integer MASK_OF_DEATH		= 1836016756
	local integer POTION_OF_HEALTH 	= 1885825125

	set g_hHero = 	CreateUnit(g_hPlayerAI, UTHER	, -1095	, -54	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1302	, -722	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1231	, -728	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1154	, -730	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1091	, -730	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1014	, -730	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -951	, -728	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -858	, -722	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -918	, 257	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1049	, 329	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -1118	, 374	, 0)
    call 			CreateUnit(g_hPlayerAI, FOOTMAN	, -982	, 295	, 0)
    call 			CreateUnit(g_hPlayerAI, KNIGHT	, -1099	, 106	, 0)
    call 			CreateUnit(g_hPlayerAI, KNIGHT	, -1234	, 5		, 0)
    call 			CreateUnit(g_hPlayerAI, PRIEST	, -1001	, -809	, 0)
    call 			CreateUnit(g_hPlayerAI, PRIEST	, -991	, -112	, 0)
    call 			CreateUnit(g_hPlayerAI, PRIEST	, -1152	, -818	, 0)
    call 			CreateUnit(g_hPlayerAI, PRIEST	, -1103	, -232	, 0)

    call UnitAddItemToSlotById(g_hHero, MASK_OF_DEATH	, 0)
    call UnitAddItemToSlotById(g_hHero, POTION_OF_HEALTH, 1)
endfunction

function IsEnemyInRangeXY takes integer iX, integer iY, integer iRadius returns boolean
	local boolean 	bIsFindEnemy 	= false
	local group 	hGroup 			= CreateGroup()
	local unit		hUnit

	call GroupEnumUnitsInRange(hGroup,iX, iY, I2R(iRadius), null)

	loop
		set hUnit = FirstOfGroup(hGroup)

		exitwhen hUnit == null

		if UnitAlive(hUnit) then
			if IsUnitEnemy(hUnit, g_hPlayerAI) then
				set bIsFindEnemy = true

				exitwhen true
			endif
		endif
	endloop

	call DestroyGroup(hGroup)

	set hGroup 	= null
	set hUnit	= null

	return bIsFindEnemy
endfunction

function CheckUnitHealth takes nothing returns nothing
	local integer	ORDER_SMART			= 851971
	local integer	ORDER_MOVE			= 851986
	local integer	MIN_SAFE_RANGE		= 200
	local integer	MIN_UNIT_HEALTH 	= 150

	local boolean	bIsUnitInHurtGroup

	local group 	hGroup 				= CreateGroup()

	local integer	iOffsetX
	local integer	iOffsetY

	local real 		flUnitHealth
	local unit 		hUnit

	call GroupEnumUnitsOfPlayer(hGroup, g_hPlayerAI, null)

	loop
		set hUnit = FirstOfGroup(hGroup)

		exitwhen hUnit == null

		set bIsUnitInHurtGroup = IsUnitInGroup(hUnit, g_hHurtUnitGroup)

		if UnitAlive(hUnit) then
			if not (IsUnitType(hUnit, UNIT_TYPE_SUMMONED) or hUnit == g_hHero) then
				set flUnitHealth = GetWidgetLife(hUnit)

				if 		R2I(flUnitHealth) < MIN_UNIT_HEALTH then
					set iOffsetX = GetRandomInt(-50, 50)
					set iOffsetY = GetRandomInt(-50, 50)
					call RemoveGuardPosition(hUnit)

					if not bIsUnitInHurtGroup then
						call GroupAddUnit(g_hHurtUnitGroup, hUnit)
					endif

					if IsEnemyInRangeXY(g_iFountainOfLifeX, g_iFountainOfLifeY, 1000) then
						if not IsUnitInRangeXY(hUnit, g_iCaptainHomeX, g_iCaptainHomeY, MIN_SAFE_RANGE) then
							call PrintToChat("Unit go home")

							call IssuePointOrderById(hUnit, ORDER_MOVE, g_iCaptainHomeX  + iOffsetX, g_iCaptainHomeY + iOffsetY)
						endif
					else
						if not IsUnitInRangeXY(hUnit, g_iFountainOfLifeX, g_iFountainOfLifeX, MIN_SAFE_RANGE) then
							call IssuePointOrderById(hUnit, ORDER_SMART	, g_iFountainOfLifeX + iOffsetX	, g_iFountainOfLifeY  + iOffsetY)
						endif
					endif
				elseif 	flUnitHealth * 1.5 > GetUnitState(hUnit, UNIT_STATE_MAX_LIFE) then
					if bIsUnitInHurtGroup then
						call PrintToChat("Unit back to captain control")

						call RecycleGuardPosition(hUnit)
						call GroupRemoveUnit(g_hHurtUnitGroup, hUnit)
					endif
				endif
			endif
		else
			if bIsUnitInHurtGroup then
				call GroupRemoveUnit(g_hHurtUnitGroup, hUnit)
			endif
		endif

		call GroupRemoveUnit(hGroup, hUnit)
	endloop

	if FirstOfGroup(g_hHurtUnitGroup) != null then	//NOTE: Some hurt units under attack at home
		if not CaptainIsHome() then
			if IsEnemyInRangeXY(g_iCaptainHomeX, g_iCaptainHomeY, MIN_SAFE_RANGE) then
				if not CaptainRetreating() then
					call ClearCaptainTargets()
					call CaptainGoHome()
					call SetGroupsFlee(true)	// NOTE: Tested
					call SetUnitsFlee(true)
				endif
			endif
		endif
	endif

	call DestroyGroup(hGroup)

	set hGroup 	= null
	set hUnit	= null
endfunction

function DevelopmentSequence takes nothing returns nothing
	loop
		call InitAssaultGroup()
		call CheckUnitHealth()
		call Sleep(DEFAULT_SLEEP)
	endloop
endfunction

function main takes nothing returns nothing
	set g_hPlayerAI = Player(GetAiPlayer())

	call SetHeroLevels(function Event_OnHeroLevelGain)

	call CreateUnits()

	call PrintToChat("AI Script started")

	call CreateCaptains()
	call GroupTimedLife(true)
	call SetCampaignAI()
	call SetHeroesFlee(true)
	call SetHeroesTakeItems(true)
	call SetWatchMegaTargets(true)

	call Sleep(0.1)
	call ChangeCaptainHome()

	call FindFountainOfLive()

	call StartThread(function DevelopmentSequence)

	loop
		call Sleep(1)
	endloop
endfunction
спасибо
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.