Флаги на модификаторах атаки

EnDronist

Продвинутый
28 Апр 2016
231
0
Проект
Защитники Изобилия | Defenders of Abundance
Можно ли как приписывать флаги (и поведение) на модификаторы атаки (не орбы)?
 

CryDeS

Друзья CG
14 Июл 2015
1,210
11
Можно ли как приписывать флаги (и поведение) на модификаторы атаки (не орбы)?
В каком смысле флаги? Флаги нужны для конкретизации цели. А атаковать ты можешь почти любую цель за исключением двух/трех состояний.
 
Последнее редактирование модератором:

EnDronist

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

EnDronist

Продвинутый
28 Апр 2016
231
0
Проект
Защитники Изобилия | Defenders of Abundance
[quote author=CryDeS link=topic=1011.msg5524#msg5524 date=1469806563]
Критические атаки(а это MODIFIER_PROPERTY_PREATTACK_CRITICALSTRIKE) не работают на строения вообще. Это не флаги)
[/quote]
А, отлично, значит мой ремейк Coup de Grace по таворам вызывает только лишь эффект кровяки. Попробую исправить
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
EnDronist, у тебя крит написан не на луа, правильно?
 

EnDronist

Продвинутый
28 Апр 2016
231
0
Проект
Защитники Изобилия | Defenders of Abundance
[quote author=I_GRIN_I link=topic=1011.msg5581#msg5581 date=1469970307]
EnDronist, у тебя крит написан не на луа, правильно?
[/quote]
На люа из спеллов ничего никогда ещё не писал
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
EnDronist, ну вот зря, на луа очень легко проверять, что за цель и настраивать условия
 

EnDronist

Продвинутый
28 Апр 2016
231
0
Проект
Защитники Изобилия | Defenders of Abundance
I_GRIN_I, Тогда научи меня писать на люа модификаторы. Допустим, вот такие:
Код:
     "modifier_item_desolator_skadi_corruption"
     {
      "Passive"      "0"
      "IsHidden"      "1"
      "IsDebuff"      "1"
      "IsPurgable"      "1"
      "StatusEffectName"   "particles/status_fx/status_effect_frost.vpcf"
      "StatusEffectPriority" "10"
     
      "Properties"
      {
        "MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT"   "%cold_attack_speed"
        "MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE"   "%cold_movement_speed"
      }
      "OnCreated"
      {
        "ApplyModifier"
        {
         "Target"   "TARGET"
         "ModifierName"   "modifier_item_desolator_corruption_for_desolator_skadi"
        }
        "RunScript"
        {
         "Target"   "TARGET"
         "ScriptFile"   "items/item_desolator_1.lua"
         "Function"   "modifier_item_desolator_skadi_corruption"
        }
      }
     }
     "modifier_item_desolator_corruption_for_desolator_skadi"
     {
      "Duration"      "%corruption_duration"
      "Passive"      "0"
      "IsHidden"      "0"
      "IsDebuff"      "1"
      "IsPurgable"      "1"
      "TextureName"      "desolator_skadi_corruption"
     
      "Properties"
      {
        "MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS"   "%corruption_armor"
      }
     }
 
Последнее редактирование модератором:

EnDronist

Продвинутый
28 Апр 2016
231
0
Проект
Защитники Изобилия | Defenders of Abundance
[quote author=Илья link=topic=1011.msg5632#msg5632 date=1470484398]
Просто лазий по гитхабу. Вот тебе мои примеры.
[/quote]
А орбы?
 

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
EnDronist, создаешь модификатор свой, который не делает ничего, а просто висит в хайдене и если этот модификатор висит на герое, то остальные модификаторы просто не будут накидываться, код для твоего датадрайвена попробую написать, я пока его даже не смотрел, сейчас времени нет.
 

EnDronist

Продвинутый
28 Апр 2016
231
0
Проект
Защитники Изобилия | Defenders of Abundance
[quote author=I_GRIN_I link=topic=1011.msg5634#msg5634 date=1470487660]
EnDronist, создаешь модификатор свой, который не делает ничего, а просто висит в хайдене и если этот модификатор висит на герое, то остальные модификаторы просто не будут накидываться, код для твоего датадрайвена попробую написать, я пока его даже не смотрел, сейчас времени нет.
[/quote]
Ты о моих орбах? У меня там своя система. Я прошу расписать эти два модификатора на lua
 

CryDeS

Друзья CG
14 Июл 2015
1,210
11
Ты о моей системе орбов? У меня там своя система. Я прошу расписать эти два модификатора на lua
Можно создать свою систему орбов с блекджеком и десоляторами, и это довольно просто.
 
Последнее редактирование модератором:

EnDronist

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

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
EnDronist, прошу
Код:
if modifier_item_desolator_skadi_corruption == nil then
  modifier_item_desolator_skadi_corruption = class({})
end
--Определение что и как в модификаторе должно отображаться и должен ли пуржиться(как в датадрайвен)
function modifier_item_desolator_skadi_corruption:IsHidden()
  return false
end
function modifier_item_desolator_skadi_corruption:IsDebuff()
  return true
end
function modifier_item_desolator_skadi_corruption:IsPurgable()
  return true
end
function modifier_item_desolator_skadi_corruption:GetTexture()
  return "desolator_skadi_corruption"
end
--получаем значения из абилитиспешл датадрайвена
function modifier_item_desolator_skadi_corruption:OnCreated( kv )
  self.cold_as = self:GetAbility():GetSpecialValueFor("cold_attack_speed")
  self.cold_ms = self:GetAbility():GetSpecialValueFor("cold_movement_speed")
  self.minus_arm = self:GetAbility():GetSpecialValueFor("corruption_armor")
end
function modifier_item_desolator_skadi_corruption:OnRefresh( kv )
  self.cold_as = self:GetAbility():GetSpecialValueFor("cold_attack_speed")
  self.cold_ms = self:GetAbility():GetSpecialValueFor("cold_movement_speed")
  self.minus_arm = self:GetAbility():GetSpecialValueFor("corruption_armor")
end
--получили.
--снизу определяем, кидается ли модификатор на неуязвимых к магии. Еще в аттрибутах можно указать, будет ли модификатор стакаться, спадать при смерти и все такое.
function modifier_item_desolator_skadi_corruption:GetAttributes ()
  return MODIFIER_ATTRIBUTE_IGNORE_INVULNERABLE
end
--определяем функции модификатора, как в датадрайвене, но тут значения пишутся не напротив, а в отдельных функциях.
function modifier_item_desolator_skadi_corruption:DeclareFunctions()
  local funcs = {
   MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT,
   MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE,
   MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS
  }
  return funcs
end
--определяем значения функций модификатора
function modifier_item_desolator_skadi_corruption:GetModifierMoveSpeedBonus_Percentage()
  return self.cold_ms
end
function modifier_item_desolator_skadi_corruption:GetModifierPhysicalArmorBonus()
  return self.minus_arm
end
function modifier_item_desolator_skadi_corruption:GetModifierAttackSpeedBonus_Constant()
  return self.cold_as
end

Это потребовало у меня минут 10 времени

Партиклы надо накидывать в скрипте. Я с партиклами не очень дружу, так что извиняй.

Еще партиклы можно и в таких функциях накидывать(почти как в датадрайвене):

Код:
function modifier_bh_crush:OnAttackLanded( params )
	if IsServer() then
		if params.attacker == self:GetParent() and ( not self:GetParent():IsIllusion() ) then
			if self:GetParent():PassivesDisabled() then
				return 0
			end
			local target = params.target
			local damageTable = {
				victim = params.target,
				attacker = params.attacker,
				damage = self.damage,
				damage_type = DAMAGE_TYPE_PHYSICAL,
			}
			if target:IsMagicImmune() then
				return 0
			else
				if self:GetAbility():IsCooldownReady() then
					if target ~= nil and target:GetTeamNumber() ~= self:GetParent():GetTeamNumber() and target:HasModifier("modifier_markenemy") then
						ApplyDamage(damageTable)
						target:AddNewModifier(params.attacker,self,"modifier_crush_bush",{duration = self.bash})
						self:GetAbility():StartCooldown(self.cooldown)
					end
				end
			end
		end
	end
	return 0
end
 
Последнее редактирование модератором:

CryDeS

Друзья CG
14 Июл 2015
1,210
11
Ну, мне потребовалось 10 часов, чтоб эту систему придумать, и ещё 6 часов, чтоб отшлифовать полученный и пока ещё не объёмный результат до идеала
Создаешь отдельный файл библиотеку с двумя функциями внешними -
bool RegisterOrbModifier(sModifierName)
и
nil ApplyOrbModifier(sModifierName, tModifierData, hCaster, hTarget)
Потому из луа скила вызываешь при создании регистрацию модификатора по имени, а потом накладываешь через ApplyOrbModifier, все.
Ну конечно можно навешать тысячу и одну доп функцию вроде
bool IsModifierOrb(sModifierName)

[quote author=I_GRIN_I link=topic=1011.msg5640#msg5640 date=1470490866]
EnDronist, прошу
Это потребовало у меня минут 10 времени

Партиклы надо накидывать в скрипте. Я с партиклами не очень дружу, так что извиняй.

Еще партиклы можно и в таких функциях накидывать(почти как в датадрайвене):

[/quote]
Это же не орб-модифаер, не?)
 
Последнее редактирование модератором:

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
CryDeS, так он сам сказал, что у него какаета своя система, да и он кидал модификаторы без орба
 

EnDronist

Продвинутый
28 Апр 2016
231
0
Проект
Защитники Изобилия | Defenders of Abundance
[quote author=I_GRIN_I link=topic=1011.msg5644#msg5644 date=1470491641]
CryDeS, так он сам сказал, что у него какаета своя система, да и он кидал модификаторы без орба
[/quote]
А, чёт протупил)
Вот орб, а то, что выше, мне тоже пригодится, сяп
Код:
			"modifier_item_desolator_skadi_orb"
			{
				"IsHidden"			"0"
				"TextureName"			"desolator_skadi_orb"
	
				"Orb"
				{
					"Priority"				"DOTA_ORB_PRIORITY_ITEM"
					"ProjectileName"		"particles/items2_fx/desolator_skadi_projectile.vpcf"
					"CastAttack"			"0"
				}

				"OnOrbFire"
				{
					"ApplyModifier"
					{
						"Target"			"TARGET"
						"ModifierName"		"modifier_item_desolator_corruption"
					}

					"RunScript"
					{
						"ScriptFile"			"items/item_desolator_1.lua"
						"Function"			"modifier_item_desolator_skadi_orb"
						"ColdDurationMelee"		"%cold_duration_melee"
						"ColdDurationRanged"		"%cold_duration_ranged"
					}

					"FireSound"
					{
						"EffectName"		"Item_Desolator.Target"
						"Target"			"TARGET"
					}
				}
			}
Жду ответа к утру ::)
 
Последнее редактирование модератором:

I_GRIN_I

Друзья CG
15 Мар 2016
1,335
105
EnDronist, если тебе прям нужен датадрайвенский орб, то делается это просто: наполовину в датадрайвене, наполовину в луа.
Вот измененный датадрайвен:
Код:
"modifier_item_desolator_skadi_orb"
{
  "IsHidden"           "0"
  "TextureName"         "desolator_skadi_orb"
  "Orb"
  {
   "Priority"         "DOTA_ORB_PRIORITY_ITEM"
   "ProjectileName"      "particles/items2_fx/desolator_skadi_projectile.vpcf"
   "CastAttack"        "0"
  }
  //Когда орб только вылетел
  "OnOrbFire"
  {
   "RunScript"
   {
     "ScriptFile"      "путь/item_desolator_skadi_orb.lua"
     "Function"        "desolator_skadi_orb_on_orb_fire"
   }
   "FireSound"
   {
     "EffectName"      "Item_Desolator.Target"
     "Target"        "TARGET"
   }
  }
  //Когда орб вошел во врага
  "OnOrbImpact"
  {
    "RunScript"
    {
      "ScriptFile"        "путь/item_desolator_skadi_orb"
      "Function"         "desolator_skadi_orb_on_orb_impact"
    }
  }
}
//тут, я думаю, ты все поймешь
"modifier_zamedlenie_ot_ranged"
{
  "Duration"    "%cold_duration_ranged"
  "Passive"     "0"
  "IsHidden"    "0"
  "IsBuff"     "0"
  "IsDebuff"    "1"
  "IsPurgable"   "1"
  "TextureName"   "item_desolator_skadi_orb"
   
  "EffectName"      "particles/items2_fx/твой_партикль.vpcf"
  "EffectAttachType"    "follow_origin"
   
  "Properties"
  {
    "MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE"  "%zamedlenie_ot_ranged"
  }
}
"modifier_zamedlenie_ot_melee"
{
  "Duration"    "%cold_duration_melee"
  "Passive"     "0"
  "IsHidden"    "0"
  "IsBuff"     "0"
  "IsDebuff"    "1"
  "IsPurgable"   "1"
  "TextureName"   "item_desolator_skadi_orb"
   
  "EffectName"      "particles/items2_fx/твой_партикль.vpcf"
  "EffectAttachType"    "follow_origin"
   
  "Properties"
  {
    "MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE"  "%zamedlenie_ot_melee"
  }
}
"modifier_minus_armor"
{
  "Duration"    "%minus_armor_dur"
  "Passive"     "0"
  "IsHidden"    "0"
  "IsBuff"     "0"
  "IsDebuff"    "1"
  "IsPurgable"   "0"
  "TextureName"   "item_desolator_skadi_orb"
   
  "EffectName"      "particles/items2_fx/твой_партикль.vpcf"
  "EffectAttachType"    "follow_origin"
   
  "Properties"
  {
    "MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS"  "%minus_armor"
  }
}
Вот луа:
Код:
function desolator_skadi_orb_on_orb_impact(keys)
  --если цель без неуязвимости(вообще это по-идее для здания нужно, хз)
  if keys.target.GetInvulnCount == nil then
   --проверка на строение, я описал свое мнение ниже.
   if not keys.target:IsBuilding() then
     --если цель уже имеет один из модификаторов, то навесить тот модификатор, который она имеет(это сделанно для того, чтобы модификатор дальника и ближника не стакались)
     if keys.target:HasModifier("modifier_zamedlenie_ot_ranged") then
      keys.ability:ApplyDataDrivenModifier(keys.caster, keys.target, "modifier_zamedlenie_ot_ranged", nil)
     elseif keys.target:HasModifier("modifier_zamedlenie_ot_melee") then
      keys.ability:ApplyDataDrivenModifier(keys.caster, keys.target, "modifier_zamedlenie_ot_melee", nil)
     --[[идет проверка на то, дальней ли атаки юнит(я об этом и говорил, здесь очень легко проверять что за юнит перед тем, как совершать какие-то действия,
     например можно легко проверить, что это не строение просто написав if not keys.target:IsBuilding() then и дальше уже навешивать партиклы и делать звуки)]]
     else
      if keys.caster:IsRangedAttacker() then
        keys.ability:ApplyDataDrivenModifier(keys.caster, keys.target, "modifier_zamedlenie_ot_ranged", nil)
      else
        keys.ability:ApplyDataDrivenModifier(keys.caster, keys.target, "modifier_zamedlenie_ot_melee", nil)
      end
     end
   end
  end
end
--[[Дезоль накидывается при начале атаки, а скади, уже когда атака дошла до противника, поэтому я перенес дезоль в отдельную функцию, 
если твой предмет работает по-другому, то легко перенести это в верхнюю функцию]]
function desolator_skadi_orb_on_orb_fire(keys)
  if keys.target.GetInvulnCount == nil then
    keys.ability:ApplyDataDrivenModifier(keys.attacker, keys.target, "modifier_minus_armor", nil)
  end
end
 
Последнее редактирование модератором:
Реклама: