GetAbilityTextureName

segamanov

Новичок
7 Окт 2024
5
0
Сори за дубликаты темы но те темы очень старые по годкам и ответа я в них не нашел. Собсна мой скрипт и ниже будут пару вопросов

dk_aura = class ({})
LinkLuaModifier( "dk_aura_modifier", "modifiers/dk_aura_modifier", LUA_MODIFIER_MOTION_NONE )
function dk_aura:Init()
if self.current_state == nil then
self.current_state = 1
end
end
function dk_aura:OnUpgrade()
if self:GetLevel() == 1 then
self:ToggleAbility()
end
end
function dk_aura:GetAbilityTextureName()
print(self.current_state)
local textures = {
[1] = "texture_01",
[2] = "texture_02",
[3] = "texture_03"
}
return textures[self.current_state]
end

function dk_aura:OnToggle()
local caster = self:GetCaster()

if self:GetToggleState() then
caster:AddNewModifier(caster, self, "dk_aura_modifier", { current_state = self.current_state })

else
caster:RemoveModifierByName("dk_aura_modifier")
if self.current_state <= 3 then
self.current_state = self.current_state + 1
else
self.current_state = 1
end
self:ToggleAbility()
end
end
Что хотелось бы узнать:
1. Какого нафигафига метод GetAbilityTextureName() запускается по тику в отличии от других методов и тех что я делаю самостоятельно?
2. Каким образом этот метод вообще работает? В коде я определяю переменную current_state. print в блоке GetAbilityTextureName() благополучно выводит эту переменную но походу не саму переменную я какую то свою копию, т.к. после изменений этой самой переменной - выводиться всегда 1. Ессесно текстурка абилки всегда будет одна и таже.
3. Как передать в метод GetAbilityTextureName() новое значение переменной?
4. Как вообще еще можно реализовать смену иконки абилки как это выглядит у троля на переключении ближний-дальний?
5. Как можно сделать эффект автоюза на абилке (когда видет крутящийся эффект на иконке к примеру сплитшот у мидузы)?

Сори если чет не так описал. Сам недавно заинтересовался модингом в доте и если честно это просто жопараздирающая боль. Проще разобраться в UE и наклепать там свю логику чем тут))
 
1. Какого нафигафига метод GetAbilityTextureName() запускается по тику в отличии от других методов и тех что я делаю самостоятельно?
Есть и другие методы, которые вызываются периодически. Например
Код:
GetModifierMoveSpeedBonus_Constant
В таких методах ничего удивительного нет


2. Каким образом этот метод вообще работает?
Выглядит страшно, я ничего не понял


3. Как передать в метод GetAbilityTextureName() новое значение переменной?
Также, через self


4. Как вообще еще можно реализовать смену иконки абилки как это выглядит у троля на переключении ближний-дальний?
У феникса, сделано через IsHidden() true скилы. у троля хз, можно смотреть в файл pak01dir или SpellLibrary на github, на форуме есть инструкции.


5. Как можно сделать эффект автоюза на абилке (когда видет крутящийся эффект на иконке к примеру сплитшот у мидузы)?
да также, только 2 состояния поддерживать
Lua:
LinkLuaModifier("modifier_wtf_mode", "additional_abilities/wtf_mode", LUA_MODIFIER_MOTION_NONE)

wtf_mode = wtf_mode or class({})

function wtf_mode:OnUpgrade()
    if not self:GetToggleState() then
        self:ToggleAbility()
    end
end

function wtf_mode:OnOwnerSpawned()
    self:OnUpgrade()
end

function wtf_mode:OnToggle()
    local caster = self:GetCaster()

    if self:GetToggleState() then
        caster:AddNewModifier(
                caster,
                self,
                "modifier_wtf_mode",
                { duration = -1 }
        )
    else
        caster:RemoveModifierByName("modifier_wtf_mode")
    end
end
 
Есть и другие методы, которые вызываются периодически. Например
Код:
GetModifierMoveSpeedBonus_Constant
В таких методах ничего удивительного нет



Выглядит страшно, я ничего не понял



Также, через self



У феникса, сделано через IsHidden() true скилы. у троля хз, можно смотреть в файл pak01dir или SpellLibrary на github, на форуме есть инструкции.



да также, только 2 состояния поддерживать
Lua:
LinkLuaModifier("modifier_wtf_mode", "additional_abilities/wtf_mode", LUA_MODIFIER_MOTION_NONE)

wtf_mode = wtf_mode or class({})

function wtf_mode:OnUpgrade()
    if not self:GetToggleState() then
        self:ToggleAbility()
    end
end

function wtf_mode:OnOwnerSpawned()
    self:OnUpgrade()
end

function wtf_mode:OnToggle()
    local caster = self:GetCaster()

    if self:GetToggleState() then
        caster:AddNewModifier(
                caster,
                self,
                "modifier_wtf_mode",
                { duration = -1 }
        )
    else
        caster:RemoveModifierByName("modifier_wtf_mode")
    end
end
3. Также, через self - не пашет. Ковыряю дальше этот луа и понял что self Это нифига не привычное object. Если вызывать DeepPrintTable(self) в разных методах то и вывод будет абсолютно разный. Т.е. он передает не объект а метод или вообще хрен знает что.

-- вшиваем переменную current_state прямо в наш класс
if dk_aura.current_state == nil then
dk_aura.current_state = 1
print(dk_aura.current_state)
end

--результат вывода. Видно что переменная current_state у нас существует
{
instanceof = function: 0x0a0a48f0 (function)
class = table: 0x0a0b8978 (table, already seen)
getclass = function: 0x0a0a2e48 (function)
initprops = table: 0x0a0a4458 (table)
{
}
current_state = 1 (number)
getbase = function: 0x0a0aced8 (function)
}

Далее я инкрементирую переменную по togle и он меняет эту переменную но метод GetAbilityTextureName() живет своей жизнью и не понятно откуда он берет значение

function dk_aura:GetAbilityTextureName()
print(dk_aura.current_state)
local textures = {
[1] = "dk_ult_power",
[2] = "dk_ult_def",
[3] = "dk_ult_void"
}
return textures[dk_aura.current_state]
end

Я хз как его заставить брать значение с моих переменных...

5. Я имел ввиду визуальный эффект кручения на иконке)) Какой метод за это отвечает?
 
Последнее редактирование:
Дай человеку рыбу и он будет сыт день. Если хочешь сделать "как сплитшот медузы", то идешь и смотришь на сплитшот медузы https://github.com/vulkantsk/SpellLibraryLua/tree/master/game/SpellLibraryLua/scripts
я в это пока не углублялся. Просто попутно хотел узнать метод. Сейчас интересует GetAbilityTextureName(). Пока не нашел решения
 
Скорее всего current_state меняется внутри dk_aura_modifier.
Покажи код этого модификатора
 
3. Также, через self - не пашет. Ковыряю дальше этот луа и понял что self Это нифига не привычное object. Если вызывать DeepPrintTable(self) в разных методах то и вывод будет абсолютно разный. Т.е. он передает не объект а метод или вообще хрен знает что.

-- вшиваем переменную current_state прямо в наш класс
if dk_aura.current_state == nil then
dk_aura.current_state = 1
print(dk_aura.current_state)
end

--результат вывода. Видно что переменная current_state у нас существует
{
instanceof = function: 0x0a0a48f0 (function)
class = table: 0x0a0b8978 (table, already seen)
getclass = function: 0x0a0a2e48 (function)
initprops = table: 0x0a0a4458 (table)
{
}
current_state = 1 (number)
getbase = function: 0x0a0aced8 (function)
}

Далее я инкрементирую переменную по togle и он меняет эту переменную но метод GetAbilityTextureName() живет своей жизнью и не понятно откуда он берет значение

function dk_aura:GetAbilityTextureName()
print(dk_aura.current_state)
local textures = {
[1] = "dk_ult_power",
[2] = "dk_ult_def",
[3] = "dk_ult_void"
}
return textures[dk_aura.current_state]
end

Я хз как его заставить брать значение с моих переменных...

5. Я имел ввиду визуальный эффект кручения на иконке)) Какой метод за это отвечает?
У тя dk_aura - глобальная таблица, ты пытаешься ей втюхать переменную, может в каких-то случаях это и будет работать, но в твоем случае надо работать с экземпляром класса, тоесть вместо dk_aura используй self ИМЕННО В БЛОКЕ функции, в названии оставь dk_aura.
Lua:
function dk_aura:OnToggle()
    if self.current_state == nil then
        self.current_state = 1
    else
        self.current_state = self.current_state + 1
        if self.current_state > 3 then
            self.current_state = 1
        end
    end
end

function dk_aura:GetAbilityTextureName()
    local textures = {
        [1] = "dk_ult_power",
        [2] = "dk_ult_def",
        [3] = "dk_ult_void"
    }

    -- self.current_state может быть nil на первом вызове
    local state = self.current_state or 1
    return textures[state]
end
 
Реклама: