
-- 特殊太卡，弃用
function OnHina02Think(keys)
	local caster = EntIndexToHScript(keys.caster_entindex)
	if keys.ability:GetLevel() < 1 then return end	

	-- caster:EmitSound("Hero_TrollWarlord.WhirlingAxes.Melee")

	local effect = "particles/econ/items/troll_warlord/troll_ti10_shoulder/troll_ti10_whirling_axe_melee.vpcf"
	local damage = 1000
	local damage_tick = 0.1
	local damage_duration = 3.0
	local max_count = math.floor(damage_duration/damage_tick + 0.5)
	local radius = 1000 - 200
	local elapsed_duration = 0
	local enemies_hit = {}

	local caster_pos = caster:GetAbsOrigin()
	local caster_direction = caster:GetForwardVector()
	local effectIndexList = {}
	local effectPointList = {}
	for i = 1,5 do
		local axe_target_point = RotatePosition(caster_pos, QAngle(0, i * 72, 0), caster_pos + caster_direction * 175)
		local effectIndex = ParticleManager:CreateParticle(effect, PATTACH_ABSORIGIN_FOLLOW, caster)
		ParticleManager:SetParticleControl(effectIndex, 0, caster_pos + Vector(0, 0, 100))
		ParticleManager:SetParticleControl(effectIndex, 1, axe_target_point + Vector(0, 0, 100))
		ParticleManager:SetParticleControl(effectIndex, 4, Vector(damage_duration, 0, 0))		
		effectIndexList[i] = effectIndex
		effectPointList[i] = axe_target_point
	end

	local count = 1
	caster:SetContextThink(DoUniqueString("dota_timer"), 
		function() 
			if GameRules:IsGamePaused() then return 0.1 end

			for i = 1,5 do
				local axe_target_point = RotatePosition(caster_pos, QAngle(0, 360 * count/max_count, 0), effectPointList[i])
				axe_target_point = axe_target_point	+ (axe_target_point - caster_pos):Normalized() * radius * count/max_count			
				ParticleManager:SetParticleControl(effectIndexList[i], 1, axe_target_point + Vector(0, 0, 100))
			end			

			local targets = THTD_FindUnitsInRadius(caster,caster_pos,1200)
			local damage = 1200
			for k,v in pairs(targets) do		
				if v~=nil and v:IsNull()==false and v:IsAlive() then	
					if enemies_hit[v:entindex()] ~= true then
						enemies_hit[v:entindex()] = true
						local DamageTable = {
							ability = keys.ability,
							victim = v, 
							attacker = caster, 
							damage = damage, 
							damage_type = keys.ability:GetAbilityDamageType(), 
							damage_flags = DOTA_DAMAGE_FLAG_NONE
						}							
						UnitDamageTarget(DamageTable)
					end	
				end
			end

			-- If the duration is over, end
			if count < max_count then
				count = count + 1
				return damage_tick
			else
				for i = 1,5 do
					ParticleManager:ReleaseParticleIndex(effectIndexList[i])
				end
				return nil
			end
		end, 
	0.1)
end


function OnSpellStartHina02(keys)
	local caster = EntIndexToHScript(keys.caster_entindex)
	local targetPoint = keys.target_points[1]

	local range = keys.range
	local bonus_crit = keys.bonus_crit
	local chance = keys.chance
	local duration = math.floor(keys.duration * 100 + 0.5)/100
	local tick = math.floor(keys.tick * 100 + 0.5)/100

	local effect = "particles/econ/items/troll_warlord/troll_ti10_shoulder/troll_ti10_whirling_axe_melee.vpcf"
	local effectIndex = ParticleManager:CreateParticle(effect, PATTACH_ABSORIGIN_FOLLOW, caster)
	ParticleManager:SetParticleControl(effectIndex, 0, caster:GetAbsOrigin() + Vector(0, 0, 100))
	ParticleManager:SetParticleControl(effectIndex, 1, targetPoint + Vector(0, 0, 100))
	ParticleManager:SetParticleControl(effectIndex, 4, Vector(duration + 4, 0, 0))

	local powerChance = 0
	local pv = caster:GetAbilityPowerValue("thtd_hina_02")
	if pv ~= nil then 					
		powerChance = pv[1]	
	end
		
	local crit666 = 1
	if caster:IsPower666() then crit666 = 5 end

	local time = duration
	caster:SetContextThink(DoUniqueString("dota_timer"), 
		function() 
			if GameRules:IsGamePaused() then return 0.1 end
			time = time - tick
			if time < 0 then 
				ParticleManager:DestroyParticleSystem(effectIndex,true)
				return nil
			end

			local targets = THTD_FindUnitsInRadius(caster,targetPoint,range)
			local damage = caster:THTD_GetAbilityPowerDamage(keys.ability)
			for k,v in pairs(targets) do
				local crit = 1
				v.thtd_hina_02_debuff_count = math.min(999, (v.thtd_hina_02_debuff_count or 0) + 1)
				local count = v.thtd_hina_02_debuff_count
				if caster:IsPower999() then 
					for _,tar in pairs(targets) do
						if v ~= tar then 
							count = count + (tar.thtd_hina_02_debuff_count or 0) * 0.4
						end
					end
				end
				if RollPercentage(chance + powerChance) then 
					crit = 1 + count * (bonus_crit + powerChance)/100				
				end
				local DamageTable = {
					ability = keys.ability,
					victim = v, 
					attacker = caster, 
					damage = damage * crit * crit666, 
					damage_type = keys.ability:GetAbilityDamageType(), 
					damage_flags = DOTA_DAMAGE_FLAG_NONE
				}							
				UnitDamageTarget(DamageTable)	
			end
			
			return tick
		end, 
	tick)

end
