Оптимизация спелла

  • Автор темы Автор темы den4iccc
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.

den4iccc

Друзья CG
20 Сен 2014
440
1
Проект
Survival in Taiga XE
Помогите оптимизировать спелл. На данный момент скил наносит урон своему владельцу при нажатии один раз клавиши, после этого образуется цикл урона даже когда герой умирает спелл продолжает работать при респавне начинает опять работать как сделать так чтобы скил работал без цикла

Код:
"po_degen_aura"
{
	// General
	//-------------------------------------------------------------------------------------------------------------
	"BaseClass"				    "ability_datadriven"
	"AbilityBehavior"				"DOTA_ABILITY_BEHAVIOR_NO_TARGET"
	"AbilityUnitTargetTeam"			"DOTA_UNIT_TARGET_TEAM_FRIENDLY"
	"AbilityUnitDamageType"			"DAMAGE_TYPE_MENTHAL"
	"AbilityCooldown"				"1 1 1 1"
	"SpellImmunityType"				"SPELL_IMMUNITY_ENEMIES_YES"
	"AbilityTextureName"			"po_pass"

	// Casting
	//-------------------------------------------------------------------------------------------------------------
	"AbilityCastRange"				"3500"

	// Special
	//-------------------------------------------------------------------------------------------------------------
	"AbilitySpecial"
	{
		"01"
		{
			"var_type"				"FIELD_INTEGER"
			"chance"			  "100 100 100 100"
		}
		"02"
		{
			"var_type"				"FIELD_INTEGER"
			"hp_remove"	"5 5 5 5"
		}
		"03"
		{
			"var_type"				"FIELD_INTEGER"
			"cooldown"				"1 1 1 1"
		}
	}
	
	
	
	"OnSpellStart"
	{
		"ApplyModifier"
		{
			"ModifierName"		"modifier_degen_aura_po"
			"Target"			"CASTER"
		}
	}
	
	"Modifiers"
	{
		"modifier_degen_aura_po"
		{

			"IsHidden" 			"1"
			"IsBuff"			"1"


			"Aura" 				"modifier_po_degen_aura_effect"
			"Aura_Radius" 		"3500"
			"Aura_Teams" 		"DOTA_UNIT_TARGET_TEAM_FRIENDLY"
			"Aura_Types" 		"DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC | DOTA_UNIT_TARGET_MECHANICAL"
		}
		"modifier_po_degen_aura_effect"
		{
			"IsDebuff"			"1"
			"IsHidden"     "1"
		

	   	"EffectName"		"particles/units/heroes/hero_omniknight/omniknight_degen_aura_debuff.vpcf"	
		  "EffectAttachType"	"follow_origin"
			"ThinkInterval" 		"%cooldown"
      	"OnIntervalThink"
      	{
      	"RunScript"
      	{
      		"ScriptFile"			"batman.lua"
      		"Function"				"Po" 
      	}

      }
			
    
		}
	}
	
}
и сам скрипт скила
Код:
function Po(keys)
		local caster = keys.caster
		local ability = keys.ability
		local chance = ability:GetLevelSpecialValueFor( "chance" , ability:GetLevel() - 1 )
    local hp_remove = ability:GetLevelSpecialValueFor( "hp_remove" , ability:GetLevel() - 1 )*0.01
		local cooldown = ability:GetLevelSpecialValueFor( "cooldown" , ability:GetLevel() - 1 )
		local passives = FindUnitsInRadius(caster:GetTeamNumber(), caster:GetAbsOrigin(), nil, 3500, DOTA_UNIT_TARGET_TEAM_FRIENDLY, DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_NONE, FIND_ANY_ORDER, false)
		
		for i = 1, #passives do
			local vic = passives[i]
				local side_rand = RandomInt(0, 100)
				if side_rand <= chance then
					ApplyDamage({victim = vic, attacker = caster, damage = vic:GetHealth()*hp_remove, damage_type = DAMAGE_TYPE_PURE})
					ability:StartCooldown(cooldown)
				end
		end
end
 
Последнее редактирование модератором:
Ну так убрать цикл))

Сам же ставишь ему цикл, а теперь убрать хочешь:

Код:
"ThinkInterval" 		"%cooldown"
      	"OnIntervalThink"
      	{
      	"RunScript"
      	{
      		"ScriptFile"			"batman.lua"
      		"Function"				"Po" 
      	}
 
Последнее редактирование модератором:
сарян за некорректный вопрос я имел ввиду чтобы цикл не запускался после смерти или ни как его не пофиксить кроме того как его убрать
 
Вообще, если у тебя это Toogle способность, то все еще проще.

Вот тебе пример одной моей старой абилки, что урон наносит.

Код:
power_of_faith = class({})

function power_of_faith:OnToggle()


Timers:CreateTimer(1,function()
	local mana = self:GetCaster():GetMana()
	local mana_cost = self:GetCaster():FindAbilityByName("power_of_faith"):GetSpecialValueFor("mana_cost_per_second")	
	if mana > mana_cost then
		local dmg = self:GetCaster():FindAbilityByName("power_of_faith"):GetSpecialValueFor("damage")
		self:GetCaster():SpendMana(mana_cost,self:GetCaster():FindAbilityByName("power_of_faith"))
		local id1 = ParticleManager:CreateParticle("particles/units/heroes/hero_techies/techies_land_mine_ball_explosion.vpcf", PATTACH_ABSORIGIN, self:GetCaster())
		--Timers:CreateTimer(1,function()
		--	ParticleManager:DestroyParticle(id1, false)
		--	return nil
		--end)
		power_of_faith:damage(self,dmg)	
	end
	if self:GetToggleState() then
		return 1
	else
		return nil
	end
	end)		
	
end


function power_of_faith:damage(self,dmg)
	local units = FindUnitsInRadius( self:GetCaster():GetTeamNumber(), self:GetCaster():GetAbsOrigin(), self:GetCaster(), 500 ,DOTA_UNIT_TARGET_TEAM_ENEMY, DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_HERO + DOTA_UNIT_TARGET_BUILDING, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, 0, false )
	for i = 1, #units do		
	if units[ i ] then 
		if units[ i ]:GetUnitName() ~= "pig" and units[ i ]:GetUnitName() ~= "sheep" then
			--StartSoundEvent("Hero_Spirit_Breaker.GreaterBash", units[ i ])

			local id2 = ParticleManager:CreateParticle("particles/dire_fx/tower_bad_face_end_ball.vpcf", PATTACH_OVERHEAD_FOLLOW , units[ i ])
			
			Timers:CreateTimer(1,function()
				ParticleManager:DestroyParticle(id2, false)
				return nil
			end)
		

			local damage = {
				victim = units[ i ],
				attacker = self:GetCaster(),
				damage = dmg,
				damage_type = DAMAGE_TYPE_PURE,
				ability = this,
			}
			ApplyDamage( damage )	
		end
	end
	end
end


function power_of_faith:IsHiddenWhenStolen()
	return true
end
 
Последнее редактирование модератором:
А так ты по сути иммитируешь toogle через таймеры: создаешь таймер, что будет проверять жив ли герой и если жив, то тогда наносишь урон и повторяешь все через какое-то время.
 
Скажи пожалуйста, почему у тебя мой код, МОЯ абилка По, мой код рандомных башей, и мой batman.lua, зачем воровать?
Какие то школьники решили своровать коды, норм
 
Ххахах, ну взял чувак твой код, ну что в этом такого? Ты же не патентовал его, так что нету ограничений по его использованию.

Вообще права на моды принадлежат тем, чей "платный" движок ты используешь. Ибо в соглашении говорилось, что мы делаем моды исключительно для бесплатного пользования. Твоя только идея. Интеллектуальная собственность. Поэтому те же blizzard ничего не сделали valve, когда последние переманили к себе создателя дотки тем, что будут ему платить, если он на их движке сделает эту карту и будет сотрудничать.

Пока ты используешь официально открытое чужое, но бесплатно распространяешь свое, что сделано на этом чужом - к тебе предъяв не будет. А когда ты начинаешь деньги требовать с пользователей твоего "нечистого" продукта, тогда к тебе предъявы выдвинут: якобы, чем ты занимаешься и где наш процент?
 
Последнее редактирование модератором:
Ххахах, ну взял чувак твой код, ну что в этом такого? Ты же не патентовал его, так что нету ограничений по его использованию.

Вообще права на моды принадлежат тем, чей "платный" движок ты используешь. Ибо в соглашении говорилось, что мы делаем моды исключительно для бесплатного пользования. Твоя только идея. Интеллектуальная собственность. Поэтому те же blizzard ничего не сделали valve, когда последние переманили к себе создателя дотки тем, что будут ему платить, если он на их движке сделает эту карту и будет сотрудничать.

Пока ты используешь официально открытое чужое, но бесплатно распространяешь свое, что сделано на этом чужом - к тебе предъяв не будет. А когда ты начинаешь деньги требовать с пользователей твоего "нечистого" продукта, тогда к тебе предъявы выдвинут: якобы, чем ты занимаешься и где наш процент?
Почему нормально не попросить??Я бы скинул бы без б, но воровать...ладно были бы знания в луа, так и этого нет
 
Последнее редактирование модератором:
Почему нормально не попросить??Я бы скинул бы без б, но воровать...ладно были бы знания в луа, так и этого нет
Да ладно ты не бомби :) почему сразу своровал просто позаимствовал тем более у тебя была аура, я просто подредактировал твою способность тут каждый 2-ой смотрит и вскрывает ресурсы на это должны быть хотябы авторские права как упомянул выше Илья. Я даже не знал что ты автор этой карты (хз мне кажется школьник бы не смог подсмотреть код у них бы давно пригорело бы создавать карту)
 
Последнее редактирование модератором:
Почему нормально не попросить??Я бы скинул бы без б, но воровать...ладно были бы знания в луа, так и этого нет

Ну, ты в праве, конечно, наезжать на него.
Но лично я бы даже немного порадовался, что у кого-то мой код :D
 
Последнее редактирование модератором:
Ну, ты в праве, конечно, наезжать на него.
Но лично я бы даже немного порадовался, что у кого-то мой код :D
Я код для себя писал)Нафиг мы тут вообще что то делаем?Давайте украдем все коды от ангел арены у Края. А может вообще взять весь архив да залить ака Angel Arena 2, а что?Норм идея...так получается?
 
Последнее редактирование модератором:
Ахаха чел я конечно понимаю что у тебя горит, но я твой код не буду выкладывать никуда не бойся просто для себя взял поизучать в чём проблема
 
А что там в ангел арене смотреть? Коды абилок? Ну так они же только для его мода, у других модов свои абилки.
А так я туда лазил, когда изучал взаимодействие js с lua и Cry знает об этом))
Он как истинный ценитель всего "доступного" даже комменты оставлял для гостей))
 
Последнее редактирование модератором:
У меня вместе со скриптами идет разрешение(в виде текстовика) на полное использование(но не клонирование карты) всех скриптов и т.д. Да и смотреть там нечего толком, сильно интересных велосипедов там мало, и все в основном пишется именно для нее ._.
Мне собственно, пофиг. Код есть код, и тут наврятле сидят те кто создали уникальный алгоритм который будет важно скрывать xD
 
Статус
В этой теме нельзя размещать новые ответы.
Реклама: