Помогите сделать юнита

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

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

dofless

Новичок
16 Апр 2017
7
0
Мне нужен юнит из которого при получении урона будут выпадать мешки золота. Похожий юнит был на Дарк Мун, курица.
Как сделать его?
 
Мне нужен юнит из которого при получении урона будут выпадать мешки золота. Похожий юнит был на Дарк Мун, курица.
Как сделать его?
Что с этим делать думай сам, да и вообще мог бы сам отыскать код здесь \Steam\steamapps\common\dota 2 beta\game\dota_addons\new_bloom_2017
Код:
"creature_bonus_chicken"
	{
		// General
		//-------------------------------------------------------------------------------------------------------------
		"BaseClass"						"ability_lua"
		"AbilityTextureName"			"alchemist_goblins_greed"
		"ScriptFile"					"abilities/creature_bonus_chicken"

		"AbilityBehavior"				"DOTA_ABILITY_BEHAVIOR_PASSIVE"
		"SpellImmunityType"				"SPELL_IMMUNITY_ENEMIES_YES"

		// Special
		//-------------------------------------------------------------------------------------------------------------
		"AbilitySpecial"
		{
			"01"
			{
				"var_type"				"FIELD_INTEGER"
				"total_gold"			"10000"
			}
			"02"
			{
				"var_type"				"FIELD_FLOAT"
				"time_limit"			"60.0"
			}
		}
	}
Код:
creature_bonus_chicken = class({})
LinkLuaModifier( "modifier_creature_bonus_chicken", "modifiers/modifier_creature_bonus_chicken", LUA_MODIFIER_MOTION_NONE )

--------------------------------------------------------------------------------

function creature_bonus_chicken:GetIntrinsicModifierName()
	return "modifier_creature_bonus_chicken"
end
Код:
modifier_creature_bonus_chicken = class({})

--------------------------------------------------------------------------------

function modifier_creature_bonus_chicken:IsPurgable()
	return false;
end

--------------------------------------------------------------------------------

function modifier_creature_bonus_chicken:IsHidden()
	return true;
end

--------------------------------------------------------------------------------

function modifier_creature_bonus_chicken:OnCreated( kv )
	self.total_gold = self:GetAbility():GetSpecialValueFor( "total_gold" )
	self.time_limit = self:GetAbility():GetSpecialValueFor( "time_limit" )
	if IsServer() then
		self.flAccumDamage = 0
		self.nBagsDropped = 0
		self.bTeleporting = false
		self.vCenter = Vector( 2183, -333, 320 )
		ExecuteOrderFromTable({
			UnitIndex = self:GetParent():entindex(),
			OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION,
			Position = self.vCenter
			})

		self.flExpireTime = GameRules:GetGameTime() + self.time_limit
		self:StartIntervalThink( 3.0 )
	end
end

--------------------------------------------------------------------------------

function modifier_creature_bonus_chicken:DeclareFunctions()
	local funcs = {
		MODIFIER_EVENT_ON_TAKEDAMAGE,
		MODIFIER_PROPERTY_MOVESPEED_ABSOLUTE,
		MODIFIER_PROPERTY_MIN_HEALTH,
		MODIFIER_EVENT_ON_TELEPORTED,
	}

	return funcs
end

function modifier_creature_bonus_chicken:OnIntervalThink()
	if IsServer() then
		if not self.bTeleporting then
			ExecuteOrderFromTable({
			UnitIndex = self:GetParent():entindex(),
			OrderType = DOTA_UNIT_ORDER_MOVE_TO_POSITION,
			Position = self.vCenter + RandomVector( 3500 )
			})
		end
		

		if GameRules:GetGameTime() > self.flExpireTime then
			self:TeleportOut()
		end
	end
end

--------------------------------------------------------------------------------

function modifier_creature_bonus_chicken:OnTakeDamage( params )
	if IsServer() then
		local hUnit = params.unit
		local hAttacker = params.attacker
		if hAttacker == nil or hAttacker:IsBuilding() then
			return 0
		end
		if hUnit == self:GetParent() then		
			local flDamage = params.damage
			if flDamage <= 0 then
				return
			end
			self.flAccumDamage = self.flAccumDamage + flDamage
			if self.flAccumDamage >= 100 then
				local newItem = CreateItem( "item_bag_of_gold", nil, nil )
				local nGoldAmount = 100
				if self:GetParent():GetUnitName() == "npc_dota_creature_bonus_chicken2" then
					nGoldAmount = 35
				end
				newItem:SetPurchaseTime( 0 )
				newItem:SetCurrentCharges( nGoldAmount )
					
				local drop = CreateItemOnPositionSync( hUnit:GetAbsOrigin(), newItem )
				local dropTarget = hUnit:GetAbsOrigin() + RandomVector( RandomFloat( 50, 250 ) )
				newItem:LaunchLoot( true, 300, 0.75, dropTarget )

				self.flAccumDamage = self.flAccumDamage - 100
				self.nBagsDropped = self.nBagsDropped + 1
				self.total_gold = self.total_gold - 100
				if self.total_gold <= 0 then
					self:TeleportOut()
				end
			end
		end
	end

	return 0
end

--------------------------------------------------------------------------------

function modifier_creature_bonus_chicken:TeleportOut()
	local tower = Entities:FindByNameNearest( "dota_badguys_tower1_bot", self:GetParent():GetOrigin(), 99999 )
	if tower ~= nil then
		for i = 0, DOTA_ITEM_MAX - 1 do
			local item = self:GetParent():GetItemInSlot( i )
			if item then
				if item:GetAbilityName() == "item_travel_boots" then
					ExecuteOrderFromTable({
						UnitIndex = self:GetParent():entindex(),
						OrderType = DOTA_UNIT_ORDER_CAST_TARGET,
						AbilityIndex = item:entindex(),
						TargetIndex = tower:entindex()
					})
					self.bTeleporting = true
					return
				end
			else
				FindClearSpaceForUnit( self:GetParent(), tower:GetOrigin(), true )
				self:GetParent():ForceKill( false )
			end
		end
	end
end

--------------------------------------------------------------------------------

function modifier_creature_bonus_chicken:OnTeleported( params )
	if IsServer() then
		if params.unit == self:GetParent() then
			self:GetParent():ForceKill( false )
		end
	end
end

--------------------------------------------------------------------------------

function modifier_creature_bonus_chicken:GetModifierMoveSpeed_Absolute( params )
	if IsServer() then
		return 500 + ( self.nBagsDropped * 10 )
	end
	return 500
end

--------------------------------------------------------------------------------

function modifier_creature_bonus_chicken:GetMinHealth( params )
	return 1
end

--------------------------------------------------------------------------------

function modifier_creature_bonus_chicken:CheckState()
	local state = {}
	if IsServer() then
		state =
		{
			[MODIFIER_STATE_STUNNED] = false,
			[MODIFIER_STATE_ROOTED] = false,
		}
		if GameRules:GetGameTime() > self.flExpireTime or self.total_gold <= 0 then
			state[MODIFIER_STATE_MAGIC_IMMUNE] = true
			state[MODIFIER_STATE_INVULNERABLE] = true
			state[MODIFIER_STATE_OUT_OF_GAME] = true
		end
	end
	
	return state
end


--------------------------------------------------------------------------------

function modifier_creature_bonus_chicken:GetPriority()
	return MODIFIER_PRIORITY_SUPER_ULTRA
end
p.s. Почему тему создал в таверне?
 
Последнее редактирование модератором:
Реклама: