Если юнит 1 в радиусе x от юнита 2, применить заклинание.

  • Автор темы Автор темы Epselot
  • Дата начала Дата начала
  • Официальное уведомление администрации CustomGames.RU
    В связи с масштабным техническим сбоем в инфраструктуре прежнего хостинг-провайдера (Beget), работа форума CustomGames.RU была оперативно перенесена на новую серверную площадку и развёрнута из резервной копии базы данных.

    • Безопасность данных: учётные записи и данные пользователей находятся в полной безопасности. Все пароли и защищаемые параметры хранятся исключительно в криптографически зашифрованном (хэшированном) виде — никаких критических инцидентов для аккаунтов пользователей не произошло.
    • Временные технические ограничения: на этапе синхронизации файлового хранилища часть статических материалов (пользовательские аватары и архивные вложения) временно недоступна. По мере получения доступа к файловым архивам все материалы будут восстановлены в полном объёме.

Epselot

Пользователь
11 Янв 2017
34
0
Здравствуйте. Как сделать скрипт: если юнит 1 в радиусе x от юнита 2, то юнит 2 применяет заклинание на юнит 1, либо начать атаковать?
И куда его вписывать? И рассчитано что таких юнитов будет очень много.
 
Здравствуйте. Как сделать скрипт: если юнит 1 в радиусе x от юнита 2, то юнит 2 применяет заклинание на юнит 1, либо начать атаковать?
И куда его вписывать? И рассчитано что таких юнитов будет очень много.
https://developer.valvesoftware.com..._Tools/Scripting/API/Global.FindUnitsInRadius
https://developer.valvesoftware.com...ls/Scripting/API/Global.ExecuteOrderFromTable
 
Последнее редактирование модератором:
Способов много. Например можешь искать юнитов через FindUnitsInRadius() и кастовать способность. Либо можешь почитать Datadriven Creature AI.
 
В итоге сделал через автокаст. Первоначальное забыл про него, а потом вспомнил как в варике делал подобное.
 
Код:
function modifier_black_flash_speed_blast_aghanim:OnIntervalThink()
  if IsServer() then
  	if self:GetCaster():HasScepter() then
	  	local units = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetOrigin(), self:GetCaster(), 400, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO, 0, FIND_CLOSEST, false )
			if #units > 0 then
				for _,target in pairs(units) do
					if self:GetAbility():IsCooldownReady() then
						local info = {
								EffectName = "particles/units/heroes/hero_vengeful/vengeful_magic_missle.vpcf",
								Ability = self:GetAbility(),
								iMoveSpeed = self:GetAbility():GetSpecialValueFor( "missile_speed" ),
								Source = self:GetAbility():GetCaster(),
								Target = target,
								iSourceAttachment = DOTA_PROJECTILE_ATTACHMENT_ATTACK_2
							}

						ProjectileManager:CreateTrackingProjectile( info )
						EmitSoundOn( "Hero_VengefulSpirit.MagicMissile", self:GetCaster() )
						self:GetAbility():StartCooldown(self:GetAbility():GetCooldown(self:GetAbility():GetLevel()))
						break
					end
				end
			end
		end
  end
end
 
Последнее редактирование модератором:
Реклама: