CustomGames.ru - Dota 2 пользовательские игры

Прошу помощи в объяснении создания некоторых скриптов

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Danis

  • Продвинутый
  • 268
  • Мощь: 2
Никак не пойму как сделать модификатор по типу мидаса только чтобы он не давал золота и не убивал крипа(сделано) но давал опыт и ловкость при касте но пишет что я не правильно написал датадрайвен модификатор, вот функция луа файла:
Код
function 	item_agi_midas_on_spell_start(keys)
keys.caster:AddExperience(keys.target:GetDeathXP() * keys.XPMultiplier, false, false)

keys.target:EmitSound("DOTA_Item.Hand_Of_Midas")
local midas_particle = ParticleManager:CreateParticle("particles/items2_fx/hand_of_midas.vpcf", PATTACH_ABSORIGIN_FOLLOW, keys.target)
ParticleManager:SetParticleControlEnt(midas_particle, 1, keys.caster, PATTACH_POINT_FOLLOW, "attach_hitloc", keys.caster:GetAbsOrigin(), false)
keys.ability:ApplyDataDrivenModifier("modifier_agi_bonus", keys.caster)
end
Или я просто не понял как делать модификатор.
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Неправильно используешь Applydatadrivenmodifier
developer.valvesoftware.com/...Modifier

Оффлайн Danis

  • Продвинутый
  • 268
  • Мощь: 2
CryDeS, Тоесть так?
Код
keys.caster:ApplyDataDrivenModifier(keys.ability, keys.caster, "modifier_agi_bonus")
Правильный код(по крайней мере рабочий):
Код
keys.ability:ApplyDataDrivenModifier(keys.caster, keys.caster, "modifier_agi_bonus", {duration = 100000})
Смог сделать только оно не стакается а только 1 раз добавляет бонус, но как сделать чтобы стакался бонус?
« Последнее редактирование: 03-07-2016, 15:32:17 от Danis »
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн Илья

  • Супермодератор
  • 1909
  • Мощь: 16
Если хочешь бесконечное время повесить, то делается так:

keys.ability:ApplyDataDrivenModifier(keys.caster, keys.caster, "modifier_agi_bonus", {})

Насчет стакания - если этот модификатор изначально рассчитан на накопление, то тебе ребята объяснят (я обычно свой пилил, поэтому ниче тут сказать не могу). В противном случае, надо пилить свой модификатор.

Оффлайн Danis

  • Продвинутый
  • 268
  • Мощь: 2
Илья, Погоди, СВОЙ модификатор? это как?
я пытался сделать через стаки но почему-то не получилось:
Код
if caster:HasModifier( modifierName ) then
ability:ApplyDataDrivenModifier(ability, caster, modifierName, {})
caster:SetModifierStackCount( modifierName, caster, current_stack + 1 )
else
ability:ApplyDataDrivenModifier(ability, caster, modifierName, {})
caster:SetModifierStackCount( modifierName, caster, 1)
end
« Последнее редактирование: 04-07-2016, 09:59:37 от Danis »
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
Илья, Погоди, СВОЙ модификатор? это как?
я пытался сделать через стаки но почему-то не получилось:
Код
if caster:HasModifier( modifierName ) then
ability:ApplyDataDrivenModifier(ability, caster, modifierName, {})
caster:SetModifierStackCount( modifierName, caster, current_stack + 1 )
else
ability:ApplyDataDrivenModifier(ability, caster, modifierName, {})
caster:SetModifierStackCount( modifierName, caster, 1)
end
Почти правильно пытался
Код
if not caster:HasModifier(modifierName) then
    ability:ApplyDataDrivenModifier(ability, caster, modifierName, {})
end
caster:SetModifierStackCount( modifierName, caster, current_stack + 1 ) -- если стаков не было а был просто модификатор то current stack будет = 0

Оффлайн Danis

  • Продвинутый
  • 268
  • Мощь: 2
CryDeS, Не понимаю почему оно не хочет работать, код из луа файла
Код
function  item_agi_midas_on_spell_start(keys)
local modifierName = "modifier_stack"
local caster = keys.caster
local ability = keys.ability
local current_stack = caster:GetModifierStackCount( modifierName, caster )



if not caster:HasModifier( modifierName ) then
ability:ApplyDataDrivenModifier(ability, caster, modifierName, {})
end

caster:SetModifierStackCount(modifierName, caster, current_stack + 1)

keys.target:EmitSound("DOTA_Item.Hand_Of_Midas")
local midas_particle = ParticleManager:CreateParticle("particles/items2_fx/hand_of_midas.vpcf", PATTACH_ABSORIGIN_FOLLOW, keys.target)
ParticleManager:SetParticleControlEnt(midas_particle, 1, keys.caster, PATTACH_POINT_FOLLOW, "attach_hitloc", keys.caster:GetAbsOrigin(), false)
end
КВ код
Код
"item_agi_midas"
{
"ID" "289"
"BaseClass" "item_datadriven"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"AbilityUnitTargetType" "DOTA_UNIT_TARGET_CREEP"
"AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_NOT_ANCIENTS | DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES"
"Model"                         "models/props_gameplay/red_box.vmdl"
"Effect"                        "particles/generic_gameplay/dropped_item.vpcf"
"AbilityTextureName"            "agi_midas"
"AbilityCooldown" "120.0"
"ItemQuality"                   "artifact" // consumable component rare epic artifact secretshop

"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_INTEGER"
"agi_per_stack" "5"
}
"02"
{
"var_type" "FIELD_INTEGER"
"bonus_attack_speed" "40"
}
"03"
{
"var_type" "FIELD_INTEGER"
"xp_multiplier" "2.7"
}
}

"OnSpellStart"
{
"RunScript"
{
"ScriptFile" "items/item_agi_midas.lua"
"Function" "item_agi_midas_on_spell_start"
}
}

"Modifiers"
{
"modifier_agi_midas"
{
"Passive" "1"
"IsHidden" "1"
"Attributes" "MODIFIER_ATTRIBUTE_MULTIPLE"

"Properties"
{
"MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT" "%bonus_attack_speed"
}
}
"modifier_stack"
{
"Passive" "0"
"IsHidden" "1"

"Properties"
{
"MODIFIER_PROPERTY_STATS_AGILITY_BONUS" "%agi_per_stack"
}
}
}
}
}
« Последнее редактирование: 04-07-2016, 15:07:05 от Danis »
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн CryDeS

  • Друзья CG
  • 1200
  • Мощь: 12
CryDeS, Не понимаю почему оно не хочет работать, код из луа файла

Если у тебя еще нет модификатора, то current_stack = nil (или нулю?), значит стаки нужно получать ПОСЛЕ накладывания модфикатора.
А так же, датадривен модификатор накладывается так:
Код
ability:ApplyDataDrivenModifier(caster, target, modifier_name, { duration = duration })

Соответственно чутка поправив твой код должно работать.

Код
[code]function  item_agi_midas_on_spell_start(keys)
local modifierName = "modifier_stack"
local caster = keys.caster
local ability = keys.ability


if not caster:HasModifier( modifierName ) then
ability:ApplyDataDrivenModifier(caster, caster, modifierName, {})
end

local current_stack = caster:GetModifierStackCount( modifierName, caster )

caster:SetModifierStackCount(modifierName, caster, current_stack + 1)

keys.target:EmitSound("DOTA_Item.Hand_Of_Midas")
local midas_particle = ParticleManager:CreateParticle("particles/items2_fx/hand_of_midas.vpcf", PATTACH_ABSORIGIN_FOLLOW, keys.target)
ParticleManager:SetParticleControlEnt(midas_particle, 1, keys.caster, PATTACH_POINT_FOLLOW, "attach_hitloc", keys.caster:GetAbsOrigin(), false)
end