НетФиксится как то? (Я про шмотки) ((Disable Wearables стоит 1))
НетФиксится как то? (Я про шмотки) ((Disable Wearables стоит 1))
SetIntervakThink OnIntervalThinkА если через .lua
LinkLuaModifier("modifier_oracle_add_int", "abilities/oracle/oracle_add_int.lua", LUA_MODIFIER_MOTION_NONE)
if oracle_add_int == nil then
oracle_add_int = class({})
end
function oracle_add_int:GetAOERadius()
return 100
end
function oracle_add_int:OnSpellStart()
local target = self:GetCursorTarget()
GridNav:DestroyTreesAroundPoint( target:GetOrigin(), 1, false )
local caster = self:GetCaster()
local current_stack = nil
if caster:HasModifier( "modifier_oracle_add_int" ) then
current_stack = caster:GetModifierStackCount( "modifier_oracle_add_int", self )
caster:AddNewModifier(caster, self, "modifier_oracle_add_int", { duration = inf})
caster:SetModifierStackCount( "modifier_oracle_add_int", self, current_stack + 1 )
else
caster:AddNewModifier(caster, self, "modifier_oracle_add_int", { duration = inf})
caster:SetModifierStackCount( "modifier_oracle_add_int", self, 1 )
end
if current_stack == nil then current_stack = 1 end
local int = self:GetSpecialValueFor("int")
local bonus_int = int*current_stack
end
if modifier_oracle_add_int == nil then
modifier_oracle_add_int = class({})
end
function modifier_oracle_add_int:DeclareFunctions()
local funcs = {
MODIFIER_PROPERTY_STATS_INTELLECT_BONUS,
}
return funcs
end
function modifier_oracle_add_int:IsDebuff()
return false
end
function modifier_oracle_add_int:IsHidden()
return false
end
function modifier_oracle_add_int:IsPurgable()
return false
end
function modifier_oracle_add_int:GetModifierBonusStats_Intellect( params )
return bonus_int
end
Я думаю стоит создать 1 команду и уже потом распределять всех игроков по командам. Я таким не занимался, но скорее всего делается через эту процедуру SetTeamДень добрый. Как ограничить выбор команды для игроков? Чтобы в начале игры, при загрузке ни у кого не было возможности выбирать сторону Dire или Radiant. Либо оставить лишь одну сторону для выбора, либо вообще убрать этот экран с выбором команды.
Если я всё правильно понял то в local bonus_int = int*current_stack ты создаешь переменную с интой, но потом она очищается из-за того что она выходит из зоны видимости, а когда ретурн делаешь возвращаешь nilЗдравствуйте. Пишу скил, который за каждое съеденное дерево должен давать интеллект (5, 10, 15), но модификатор стакается, а интеллект не даётся.
Lua:LinkLuaModifier("modifier_oracle_add_int", "abilities/oracle/oracle_add_int.lua", LUA_MODIFIER_MOTION_NONE) if oracle_add_int == nil then oracle_add_int = class({}) end function oracle_add_int:GetAOERadius() return 100 end function oracle_add_int:OnSpellStart() local target = self:GetCursorTarget() GridNav:DestroyTreesAroundPoint( target:GetOrigin(), 1, false ) local caster = self:GetCaster() local current_stack = nil if caster:HasModifier( "modifier_oracle_add_int" ) then current_stack = caster:GetModifierStackCount( "modifier_oracle_add_int", self ) caster:AddNewModifier(caster, self, "modifier_oracle_add_int", { duration = inf}) caster:SetModifierStackCount( "modifier_oracle_add_int", self, current_stack + 1 ) else caster:AddNewModifier(caster, self, "modifier_oracle_add_int", { duration = inf}) caster:SetModifierStackCount( "modifier_oracle_add_int", self, 1 ) end if current_stack == nil then current_stack = 1 end local int = self:GetSpecialValueFor("int") local bonus_int = int*current_stack end if modifier_oracle_add_int == nil then modifier_oracle_add_int = class({}) end function modifier_oracle_add_int:DeclareFunctions() local funcs = { MODIFIER_PROPERTY_STATS_INTELLECT_BONUS, } return funcs end function modifier_oracle_add_int:IsDebuff() return false end function modifier_oracle_add_int:IsHidden() return false end function modifier_oracle_add_int:IsPurgable() return false end function modifier_oracle_add_int:GetModifierBonusStats_Intellect( params ) return bonus_int end
Собственно поэтому и задал вопрос, ибо не знаю как это пофиксить.Если я всё правильно понял то в local bonus_int = int*current_stack ты создаешь переменную с интой, но потом она очищается из-за того что она выходит из зоны видимости, а когда ретурн делаешь возвращаешь nil
тебе все значения внутри модификатора нужно получать, а ты их пытаешься достать вообще из другой функции в абилкеСобственно поэтому и задал вопрос, ибо не знаю как это пофиксить.
Я уже с этим разобрался, но у меня возник другой вопрос. Почему в OnSpellStart используется self для передачи абилки, а в модификаторе нужно указывать self:GetAbility()?тебе все значения внутри модификатора нужно получать, а ты их пытаешься достать вообще из другой функции в абилке
local damage = {
victim = self:GetCursorTarget(),
attacker = self:GetCaster(),
damage = self:GetSpecialValueFor("damage") + Intellect,
damage_type = DAMAGE_TYPE_MAGICAL,
ability = self
}
ApplyDamage( damage )
self - это переменная в которой содержится объект, у которого вызывается функция. Тоесть внутри абилки это сама абилка, а внутри модификатора это уже не абилка, а сам модификатор, поэтому у модификатора нужно спросить, чтобы он дал абилкуЯ уже с этим разобрался, но у меня возник другой вопрос. Почему в OnSpellStart используется self для передачи абилки, а в модификаторе нужно указывать self:GetAbility()?
Вот из другого скила
Код:local damage = { victim = self:GetCursorTarget(), attacker = self:GetCaster(), damage = self:GetSpecialValueFor("damage") + Intellect, damage_type = DAMAGE_TYPE_MAGICAL, ability = self } ApplyDamage( damage )
И ability = self:GetAbility() уже не работает. Просто не очень понимаю этого
Это многое объясняет, спасибо большое.self - это переменная в которой содержится объект, у которого вызывается функция. Тоесть внутри абилки это сама абилка, а внутри модификатора это уже не абилка, а сам модификатор, поэтому у модификатора нужно спросить, чтобы он дал абилку
А если через .lua
"heartstopper_aura_datadriven"
{
"BaseClass" "ability_datadriven"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_AURA"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES"
"AbilityTextureName" "necrolyte_heartstopper_aura"
"AbilityCastRange" "900"
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_INTEGER"
"aura_radius" "900" // If you change this, also change the AbilityCastRange above
}
"02"
{
"var_type" "FIELD_FLOAT"
"aura_damage" "-0.6 -1.0 -1.4 -1.8"
}
"03"
{
"var_type" "FIELD_FLOAT"
"aura_damage_interval" "0.2"
}
}
"Modifiers"
{
"modifier_heartstopper_aura_datadriven"
{
"Passive" "1"
"IsHidden" "1"
"Aura" "modifier_heartstopper_debuff_datadriven"
"Aura_Radius" "%aura_radius"
"Aura_Teams" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"Aura_Types" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
"Aura_Flags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES"
}
"modifier_heartstopper_debuff_datadriven"
{
"IsDebuff" "1"
"IsHidden" "1"
"ThinkInterval" "%aura_damage_interval"
"OnIntervalThink"
{
"RunScript"
{
"ScriptFile" "heroes/hero_necrolyte/heartstopper_aura.lua"
"Function" "HeartstopperAura"
"visibility_modifier" "modifier_heartstopper_debuff_visibility"
}
}
"OnDestroy"
{
"RemoveModifier"
{
"ModifierName" "modifier_heartstopper_debuff_visibility"
"Target" "TARGET"
}
}
}
"modifier_heartstopper_debuff_visibility"
{
"IsDebuff" "1"
"IsHidden" "0"
"IsPurgable" "0"
"Passive" "0"
}
}
}
function HeartstopperAura( keys )
local caster = keys.caster
local ability = keys.ability
local target = keys.target
local target_max_hp = target:GetMaxHealth() / 100
local aura_damage = ability:GetLevelSpecialValueFor("aura_damage", (ability:GetLevel() - 1))
local aura_damage_interval = ability:GetLevelSpecialValueFor("aura_damage_interval", (ability:GetLevel() - 1))
-- Shows the debuff on the target's modifier bar only if Necrophos is visible
local visibility_modifier = keys.visibility_modifier
if target:CanEntityBeSeenByMyTeam(caster) then
ability:ApplyDataDrivenModifier(caster, target, visibility_modifier, {})
else
target:RemoveModifierByName(visibility_modifier)
end
local damage_table = {}
damage_table.attacker = caster
damage_table.victim = target
damage_table.damage_type = DAMAGE_TYPE_PURE
damage_table.ability = ability
damage_table.damage = target_max_hp * -aura_damage * aura_damage_interval
damage_table.damage_flags = DOTA_DAMAGE_FLAG_HPLOSS -- Doesnt trigger abilities and items that get disabled by damage
ApplyDamage(damage_table)
end
Можно увеличить максимальный уровень героев в кастомкеМожно ли как-то в кв увеличить максимальное количество скилпоинтов? Добавил герою одну способность, теперь даже на максимальном уровне не хватает четырех очков до макс. прокачки всех способностей и талантов.
Мне не это нужно. Например у инвокера предусмотрено 25 апгрейдов на 25 уровней, т.к. сферы имеют по 7 уровней. У остальных героев - 19 апгрейдов, причем на 17 уровне очко улучшения не дается. Если дать сферы инвокера другому герою, он их не сможет прокачать все до конца, т.к. не хватает скилпоинтов. У меня похожая ситуация, только мне не макс уровень способностей увеличить надо, а добавить пятую.Можно увеличить максимальный уровень героев в кастомке
мб выдавать в ручную через слушателя?Мне не это нужно. Например у инвокера предусмотрено 25 апгрейдов на 25 уровней, т.к. сферы имеют по 7 уровней. У остальных героев - 19 апгрейдов, причем на 17 уровне очко улучшения не дается. Если дать сферы инвокера другому герою, он их не сможет прокачать все до конца, т.к. не хватает скилпоинтов. У меня похожая ситуация, только мне не макс уровень способностей увеличить надо, а добавить пятую.
Я так и сделал, просто в других кастомках с измененным количеством апгрейдов такого слушателя нет (во всяком случае в тех, которые я посмотрел), и в кв тоже ничего с этим связанного, тем не менее прокачка работает нормально. Скорее всего это решает SetUseCustomHeroLevels. А способ через слушателя не работает для нон-плеер героев, в принципе пофиг, но все равно не приятно.мб выдавать в ручную через слушателя?