Направление эффекта

EnDronist

Продвинутый
28 Апр 2016
231
0
Проект
Защитники Изобилия | Defenders of Abundance
Как направить эффект, накладывающийся на юнита в сторону от или к игроку, модификатор скилла/айтема которого и создаёт этот эффект?
 
Илья, Можно попродробнее? Я ничего не нашёл по этому делу
 
Вот тебе кусочек из моей старой абилки, когда просто летит снаряд:

Код:
function shotgun_shoot:OnSpellStart()
	--print("shotgun_shoot OnSpellStart")
	local caster = self:GetCaster()
	local point = self:GetCaster():GetAbsOrigin() + (self:GetCaster():GetForwardVector() * 200)	
	
	vDirection = point - caster:GetAbsOrigin()
	vDirection = Vector(vDirection.x, vDirection.y, 0) --LIMIT MOTION TO ONLY ONE PLANE
	vDirection = vDirection:Normalized()
	
	local id1 = ParticleManager:CreateParticle("particles/econ/events/league_teleport_2014/teleport_end_dust_league.vpcf", PATTACH_ABSORIGIN, caster)

	Timers:CreateTimer(3,function()
		ParticleManager:DestroyParticle(id1, false)
		return nil
	end)	
	
	local info = {
		EffectName	= "particles/units/heroes/hero_lina/lina_spell_dragon_slave.vpcf",
		Ability = self,
		Source = caster,
		vSpawnOrigin = caster:GetAbsOrigin(),
		vVelocity = vDirection * 3000 * 0.7, -- EFFECT TRAVELS TOO FUCKING FAST
		fStartRadius = 70,
		fEndRadius = 100,
		fDistance = 300,
		Source = caster,
		iUnitTargetTeams = DOTA_UNIT_TARGET_TEAM_ENEMY,
		iUnitTargetTypes = DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_HERO,
		iUnitTargetFlags = DOTA_UNIT_TARGET_FLAG_NONE,
		iVisionTeamNumber = caster:GetTeamNumber(),
		iVisionRadius = 65
	}
	first = 0
	ProjectileManager:CreateLinearProjectile( info )
	StartSoundEvent("Hero_Sniper.MKG_attack", self:GetCaster())
	self:GetCaster():Stop()	

end
 
Последнее редактирование модератором:
А вот я недавно делал свою ice arrow (таргетовский снаряд):

Код:
LinkLuaModifier("modifier_movespeed_slow", "modifiers/modifier_movespeed_slow.lua", LUA_MODIFIER_MOTION_NONE )

ice_arrow = class({})


function ice_arrow:OnSpellStart()

	local caster = self:GetCaster() 

    local info = {
      EffectName = "particles/units/heroes/hero_drow/drow_frost_arrow.vpcf",
      Ability = self,
      Target = self:GetCursorTarget(),
      Source = caster,
      bDodgeable = true,
      bProvidesVision = false,
      vSpawnOrigin = caster:GetAbsOrigin(),
      iMoveSpeed = 1200,
      iVisionRadius = 0,
      iVisionTeamNumber = caster:GetTeamNumber(),
      iSourceAttachment = DOTA_PROJECTILE_ATTACHMENT_ATTACK_1
    }
    ProjectileManager:CreateTrackingProjectile(info)

end


function ice_arrow:Animation(self,target)
	
	local id1 = ParticleManager:CreateParticle("particles/units/heroes/hero_ancient_apparition/ice_temp.vpcf", PATTACH_ABSORIGIN_FOLLOW, target)
	
	GameRules:GetGameModeEntity():SetContextThink(string.format("CreatureThink_%d", RandomInt(1, 99999)), 
		function()
		ParticleManager:DestroyParticle(id1, false)
		return nil
		end,
		0.2)	
		
end


function ice_arrow:OnProjectileHit( target, location )
ice_arrow:Animation(self,target)
ice_arrow:Damage(self,target)
end


function ice_arrow:Damage(self,target)

	local caster = self:GetCaster()
	local dmg = caster:GetAgility()/2
	EmitSoundOn("MU.ice", caster)
			

	local damage = {
		victim = target,
		attacker = caster,
		damage = dmg,
		damage_type = DAMAGE_TYPE_MAGICAL,
		ability = this,
		}
		ApplyDamage( damage )
		target:AddNewModifier( caster, self, "modifier_movespeed_slow", {duration = 3} )			
	
end
 
Последнее редактирование модератором:
Илья, Направление такого эффекта, не летящего
IAGKjH4.png

(P.S. + Рядом же не работает свап скиллов, можешь найти проблему? Мучаюсь уже 3 часа)
Код:
"phantom_assassin_stifling_dagger_ult" // Есть
"phantom_assassin_stifling_dagger" // Есть
Код:
	"OnToggleOn"
	{
		"ApplyModifier"
		{
			"ModifierName"	"modifier_coup_de_grace_1"
			"Target" 		"CASTER"
		}
		"RunScript"
		{
			"ScriptFile"	"heroes/modifier_coup_de_grace_1.lua"
			"Function"	"modifier_coup_de_grace_toogle"
		}
		"RunScript"
		{
			"ScriptFile"	"heroes/modifier_coup_de_grace_1.lua"
			"Function"	"swap"
		}
	}


	"OnToggleOff"
	{
		"RemoveModifier"
		{
			"ModifierName"	"modifier_coup_de_grace_1"
			"Target" 		"CASTER"
		}
		"RemoveModifier"
		{
			"ModifierName"	"modifier_coup_de_grace_crit_1"
			"Target"		"CASTER"
		}
		"RunScript"
		{
			"ScriptFile"	"heroes/modifier_coup_de_grace_1.lua"
			"Function"	"ult_swap"
		}
	}
Код:
function swap(keys)
	local caster = keys.caster
	local ability = keys.ability
	caster:SwapAbilities( keys.phantom_assassin_stifling_dagger, keys.phantom_assassin_stifling_dagger_ult, false, true )
end

function ult_swap(keys)
	local caster = keys.caster
	local ability = keys.ability
	caster:SwapAbilities( keys.phantom_assassin_stifling_dagger_ult, keys.phantom_assassin_stifling_dagger, false, true )
end
 
Последнее редактирование модератором:
Я не понял, чего ты хочешь.


Насчет свапа: ты уверен, что в keys есть параметры с именами phantom_assassin_stifling_dagger и phantom_assassin_stifling_dagger_ult?
 
Илья, С ивентами тоже не работало
 
Какими "ивентами", ты о чем?
 
Последнее редактирование модератором:
Илья,
function *** (event)
Свап(event.название скилла, event.название скилла, трушки и фолсы).
Может быть, перед названиями скиллов надо приписать ability. ?
Насчёт эффекта: есть для него в файле только место его появления с характеристикой его дальнейшего поведения (следует за целью или остаётся на месте) ("TARGET" "follow_origin" и подобные) и нет направления
 
Последнее редактирование модератором:
Я не пойму, что ты хочешь сделать... Что за абилку?

В kesy (она же event и она же data и вообще как хочешь ее назвать можешь), которые принадлежат событиям лежат эти данные.

data принадлежащую абилкам ты формируешь сам.
Чтобы ты мог вызвать phantom_assassin_stifling_dagger из keys, ты должен ее туда положить, например:

Код:
		"RunScript"
		{
			"ScriptFile"	"heroes/modifier_coup_de_grace_1.lua"
			"Function"	"swap"
			"blabla"	"phantom_assassin_stifling_dagger"
		}

И тогда можешь делать так: keys.blabla (это будет стрка со значением "phantom_assassin_stifling_dagger"). Только, нафига это тебе если ты знаешь, что это будет именно она и можно просто в коде писать ту строку, без использования переменных.


Код:
caster:SwapAbilities( "phantom_assassin_stifling_dagger", "phantom_assassin_stifling_dagger_ult", false, true )


data - это таблица. Здесь нет какой-либо магии. Это программирование, а оно в свою очередь является смесью математики (какой конкретно - зависит от области) , информатики школьного курса и логики.
 
Последнее редактирование модератором:
Илья, Т.е. сам скрипт не может найти ни в кейс, ни в ивентс, а если указать ему, что пусть "этапеременная" "скилл", то сам датадрайвен найти сможет этот скилл и дать знать скрипту, что нужно брать?
 
Последнее редактирование модератором:
фцнкции SwapAbilities нужно четыре аргумента:
string pAbilityName1 - строка, что есть имя абилки 1
string pAbilityName2 - строка, что есть имя абилки 2
bool bEnable1, bEnable2 -булевские переменная, т.е. true или false. За что они отвечают без понятия. На гитхабе в основном первую делают true, вторую false.


А теперь, давай сначала: что у тебя за идея? Что твоя абилка должна уметь делать? Как ты ее видишь (не код, а именно результат).
 
Илья, Всё, что нужно, у меня уже работает. Мне не нравится только то, что эффект (в данном случае кровь от крита Мортры), накладываемый на юнита, направлен не в ту сторону. Эффект идёт со стороны зада юнита, а нужно со стороны атакующего (кастера). Скрин в "Ответе №5"
 
Последнее редактирование модератором:
Код:
  "OnToggleOn"
  {
     "RunScript"
   {
     "ScriptFile"  "heroes/modifier_coup_de_grace_1.lua"
     "Function"  "swap"
     "skill_normal"  "phantom_assassin_stifling_dagger"
     "skill_ult"  "phantom_assassin_stifling_dagger_ult"
   }
  }
  "OnToggleOff"
  {
   "RunScript"
   {
     "ScriptFile"  "heroes/modifier_coup_de_grace_1.lua"
     "Function"  "ult_swap"
     "skill_normal"  "phantom_assassin_stifling_dagger"
     "skill_ult"  "phantom_assassin_stifling_dagger_ult"
   }
  }
Код:
function swap(keys)
	local caster = keys.caster
	caster:SwapAbilities( keys.skill_normal, keys.skill_ult, true, false )
end

function ult_swap(keys)
	local caster = keys.caster
	caster:SwapAbilities( keys.skill_ult, keys.skill_normal, true, false )
end
Немного не робит этот свап, почему же?
 
Последнее редактирование модератором:
Что касательно направления партиклей - я те скинул два примера.
Ты сам анимацию крови накладываешь, или это анимация со стандартной ульты фантомки? Если второй вариант, то тут ничего не поделаешь. Если первы - меняй направление партикля крови на противоположное и все.


Во первых, тебе нафиг не сдались переменные skill_normal и skill_ult:

Код:
  "OnToggleOn"
  {
     "RunScript"
   {
     "ScriptFile"  "heroes/modifier_coup_de_grace_1.lua"
     "Function"  "swap"
   }
  }
  "OnToggleOff"
  {
   "RunScript"
   {
     "ScriptFile"  "heroes/modifier_coup_de_grace_1.lua"
     "Function"  "ult_swap"
   }
  }

Код:
function swap(keys)
	local caster = keys.caster
	caster:SwapAbilities( "phantom_assassin_stifling_dagger", "phantom_assassin_stifling_dagger_ult", true, false )
end

function ult_swap(keys)
	local caster = keys.caster
	caster:SwapAbilities( "phantom_assassin_stifling_dagger_ult", "phantom_assassin_stifling_dagger", true, false )
end


И ты снова сбрасываешь кусочек кода. Как же тогда понять, в чем проблема? Скинь весь код.

Например, я вижу, что у тебя почему-то вызывается модификатор:
"ScriptFile" "heroes/modifier_coup_de_grace_1.lua"
Хотя модификаторы работают не так. Видимо это не модификатор, а просто ты так назвал скриптовый файл. Мне не понятно.

И что ты подразумеваешь под "чуть не работает"? Блин, ну я же не экстрасенс....
 
Последнее редактирование модератором:
Илья,
Свап работает в ульте под OnToogleOn и обратный Свап, когда ульту выключать. Свапать должно два других скилла у того же героя. Почему не свапаются, я хз, будто скрипт не может найти эти скиллы.
Представь, что ты захотел сделать кастомную ульту мортры с теми же эффектами, но они должны быть направлены в сторону твоей атаки, а не ориентироваться, куда повёрнута эта цель.
 
Если хочешь ульт со своей анимацией - делай свою абилку.


Насчет свапа я так и не понял: свап - замена.
Как я понимаю: у тебя персонаж имеет две абилки - "phantom_assassin_stifling_dagger" и"phantom_assassin_stifling_dagger_ult".
Ты их описал в npc_abilities_custom.txt и добавил своему герою в npc_heroes_custom.txt.
Ты апнул им уровень, чтобы они стали работать.
Теперь пытаешься с помощью какой-то вещи или другой абилки (что имеет тип toogle, т.е. переключателя) менять местами на панели его скиллов эти две?
 
Последнее редактирование модератором:
Илья, Я вот и не знаю, куда их надо добавлять в npc_heroes_custom.txt и надо ли вообще? Если надо, то как их не показывать и отключать, чтоб нельзя было ими пользоваться?
(Для свапа обязательно нужно, чтоб они были хотя бы 1-го уровня?)
____________________________________________________________
Направление Эффекта Крита Мортры При Накладывании Его На Таргет
(скрин на прошлой странице (куда вызывается эффект и куда надо))
 
Блин, ты так и не объяснил, зачем тебе свапы и что ты хочешь сделать... Почему надо из тебя инфу вытаскивать.....

Вот как я вижу твою мысль (например): есть акс. У него есть его ульт. И у него есть вместо первой абилки какая-то абилка кнопочка. Когда эту абилку включают - его ульт заменяется на ульт разора. Когда выключают - его ульт возвращается на свое место. Ты этого добиваешься??
 
Реклама: