Кривые руки

  • Автор темы Автор темы qofma
  • Дата начала Дата начала

qofma

Активный
1 Апр 2016
81
0
Решил сделать итем - не получилось
Активная способность - даёт вижн вокруг героя на опр радиусе на определенное время .Наподобие котла с аганимом ,только на время .
npc
Код:
	"item_deserves"
	{
		// General
		//-------------------------------------------------------------------------------------------------------------
		"ID"							"10109"													
		"AbilityBehavior"				"DOTA_ABILITY_BEHAVIOR_NO_TARGET | DOTA_ABILITY_BEHAVIOR_IMMEDIATE"
		"ItemCost"						"500"
		"ItemQuality"					"Common"
		"ItemDeclarations"				"DECLARE_PURCHASES_TO_TEAMMATES | DECLARE_PURCHASES_TO_SPECTATORS | DECLARE_PURCHASES_IN_SPEECH"
		"ItemAlertable"					"0"
		"BaseClass"						"item_datadriven"
		"Model"							"models/props_gameplay/red_box.vmdl"
		"AbilityCooldown"        "5" 
	  "AbilityManaCost"         "0" 
		
		// Special
		//-------------------------------------------------------------------------------------------------------------
		"AbilitySpecial"
		{
			"01"
			{
				"var_type"				"FIELD_INTEGER"
				"bonus_day_vision"			"500"
			}
			"02"
			{
				"var_type"				"FIELD_INTEGER"
				"vision_range"			"1000"
			}
			"03"
			{
				"var_type"				"FIELD_FLOAT"
				"duration"				"6"
			}
		}
		"OnSpellStart"
		{
			"RunScript"
			{
				"ScriptFile"				"items/deserves_lua.lua"
				"Function"					"DeservesCast"

				"modifier_unrealvision"				"modifier_unrealvision"
				"sound_cast"				"DOTA_Item.ghost_sceptre.Activate"
			}
		}

		"Modifiers"
		{
			"modifier_item_deserves"
			{
				"Passive"					"1"
				"IsHidden"					"1"
				"IsBuff"					"1"
				"IsPurgable"				"0"

				"EffectName" "particles/econ/items/shadow_fiend/sf_fire_arcana/sf_fire_arcana_wings_grow_rope.vpc"
      	"EffectAttachType" "follow_origin"
		
				"Attributes"				"MODIFIER_ATTRIBUTE_MULTIPLE"

				"Properties"
				{
					"MODIFIER_PROPERTY_BONUS_DAY_VISION"					"%bonus_day_vision"
				}
			}

			"modifier_item_deserves_unrealvision"
			{
				"Passive"					"0"
				"IsHidden"					"0"
				"IsBuff"					"1"
				"IsPurgable"				"0"
				
				"Range"						"%vision_range"
				"Duration"					"%duration"

				"Attributes"				"MODIFIER_ATTRIBUTE_IGNORE_INVULNERABLE"

				"OnAbilityExecuted"
				{
					"RemoveModifier"
					{
						"ModifierName"		"modifier_item_deserves_unrealvision"
						"Target"
						{
							"Center"		"CASTER"
							"Teams"			"DOTA_UNIT_TARGET_TEAM_FRIENDLY"
							"Types"			"DOTA_UNIT_TARGET_HERO"
							"Flags"			"DOTA_UNIT_TARGET_FLAG_INVULNERABLE | DOTA_UNIT_TARGET_FLAG_OUT_OF_WORLD"
						}
					}
				}
			}
			"States"
			{
					"MODIFIER_STATE_FLYING"					"MODIFIER_STATE_VALUE_ENABLED"
					"MODIFIER_STATE_NO_HEALTH_BAR"			"MODIFIER_STATE_VALUE_ENABLED"
			}
		}
	}
vscript
Код:
function DeservesCast( keys )
	local caster = keys.caster
	local ability = keys.ability
	local sound_cast = keys.sound_cast

	EmitSoundOnLocationForAllies(caster:GetAbsOrigin(), sound_cast, caster)

	local nearby_units = FindUnitsInRadius(caster:GetTeamNumber(), caster:GetAbsOrigin(), nil, 1200, DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_CREEP, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, FIND_ANY_ORDER, false)
	for _, unit in pairs(nearby_units) do
		if unit:CanEntityBeSeenByMyTeam(caster) then
			EmitSoundOnLocationForAllies(caster:GetAbsOrigin(), sound_cast, unit)
			return nil
		end
	end

end

function DeservesUnrealVisionCancel( keys )
	local caster = keys.caster

	caster.deserves_active = nil
end

function DeservesUnrealVision( keys )
	local caster = keys.caster
	local ability = keys.ability
	local ability_level = ability:GetLevel() - 1
	local modifier_unrealvision = keys.modifier_unrealvision

	local unrealvision_duration = ability:GetLevelSpecialValueFor("unrealvision_duration", ability_level)
	local unrealvision_vision_range = ability:GetLevelSpecialValueFor("unrealvision_vision_range", ability_level)

	ability:ApplyDataDrivenModifier(caster, caster, modifier_unrealvision, {})
	caster:AddNewModifier(caster, ability, "modifier_unrealvision", {duration = unrealvision_duration} , {range = unrealvision_vision_range})
end

function ShadowBladePhaseCooldownEnd( keys )
	local caster = keys.caster
	local ability = keys.ability
	local modifier_unrealvision = keys.modifier_unrealvision

	if caster:HasModifier(modifier_unrealvision) and caster:IsAlive() then
		ability:ApplyDataDrivenModifier(caster, caster, modifier_unrealvision, {})
	end
end
Помогите пожалуйста
 
Последнее редактирование модератором:
Из косяков заметил ток это
Код:
caster:AddNewModifier(caster, ability, "modifier_unrealvision", {duration = unrealvision_duration} , {range = unrealvision_vision_range})

Верно было бы так:
Код:
local modifier_params = {
  duration = unrealvision_duration,
  range = unrealvision_vision_range,
}
caster:AddNewModifier(caster, ability, "modifier_unrealvision", modifier_params)

Или так

Код:
caster:AddNewModifier(caster, ability, "modifier_unrealvision", { duration = unrealvision_duration, range = unrealvision_vision_range,})

Так же убери у "modifier_item_deserves" IsHidden и погляди, накладывается ли он на юнита вообще, и если накладывается, то дает ли он вижен. Просто есть идея что на датадривене не прикручен MODIFIER_PROPERTY_BONUS_DAY_VISION
 
Последнее редактирование модератором:
Реклама: