- 22 Июл 2019
- 1
- 0
Здравствуйте. Решил я посмотреть на одну из кастомок, которые шли вместе с инструментами, а именно lua_ability_example. Создав копию, я заметил, что некоторые способности не работали и решил, что стоит попробовать их починить, заодно приобрести базовое понимание lua скриптов в доте. Дошёл до взаимодействия с талантами. Начал с пассивки лины и тут же застрял. Решил брать значения из таланта через FindAbilityByName, но похоже на клиенте какие-то обрезанные структуры... Или я что-то не понял. Посоветуйте, как обойти такую напасть?
Lua:
function modifier_lina_fiery_soul_lua:OnCreated( kv )
self.fiery_soul_attack_speed_bonus = self:GetAbility():GetSpecialValueFor( "fiery_soul_attack_speed_bonus" )
self.fiery_soul_move_speed_bonus = self:GetAbility():GetSpecialValueFor( "fiery_soul_move_speed_bonus" )
self.fiery_soul_max_stacks = self:GetAbility():GetSpecialValueFor( "fiery_soul_max_stacks" )
self.duration_tooltip = self:GetAbility():GetSpecialValueFor( "duration_tooltip" )
self.flFierySoulDuration = 0
print("")
print("Created")
print("Server: ", IsServer())
--Поиск названия таблиц, на которые ссылаются базовые классы
searchtype(_G, self["BaseClass"])
searchtype(_G, self:GetAbility()["BaseClass"])
searchtype(_G, self:GetAbility():GetCaster()["BaseClass"])
local talent = self:GetAbility():GetCaster():FindAbilityByName("special_bonus_unique_lina_2")
if talent and talent:GetLevel() > 0 then
self.fiery_soul_attack_speed_bonus = self.fiery_soul_attack_speed_bonus + talent:GetSpecialValueFor("value")
self.fiery_soul_move_speed_bonus = self.fiery_soul_move_speed_bonus + talent:GetSpecialValueFor("value2")
end
if IsServer() then
self.nFXIndex = ParticleManager:CreateParticle( "particles/units/heroes/hero_lina/lina_fiery_soul.vpcf", PATTACH_ABSORIGIN_FOLLOW, self:GetParent() )
ParticleManager:SetParticleControl( self.nFXIndex, 1, Vector( self:GetStackCount(), 0, 0 ) )
self:AddParticle( self.nFXIndex, false, false, -1, false, false )
end
end
--------------------------------------------------------------------------------
function modifier_lina_fiery_soul_lua:OnRefresh( kv )
self.fiery_soul_attack_speed_bonus = self:GetAbility():GetSpecialValueFor( "fiery_soul_attack_speed_bonus" )
self.fiery_soul_move_speed_bonus = self:GetAbility():GetSpecialValueFor( "fiery_soul_move_speed_bonus" )
self.fiery_soul_max_stacks = self:GetAbility():GetSpecialValueFor( "fiery_soul_max_stacks" )
self.duration_tooltip = self:GetAbility():GetSpecialValueFor( "duration_tooltip" )
print("")
print("Refresh")
print("Server: ", IsServer())
--Поиск названия таблиц, на которые ссылаются базовые классы
searchtype(_G, self["BaseClass"])
searchtype(_G, self:GetAbility()["BaseClass"])
searchtype(_G, self:GetAbility():GetCaster()["BaseClass"])
local talent = self:GetAbility():GetCaster():FindAbilityByName("special_bonus_unique_lina_2")
if talent and talent:GetLevel() > 0 then
self.fiery_soul_attack_speed_bonus = self.fiery_soul_attack_speed_bonus + talent:GetSpecialValueFor("value")
self.fiery_soul_move_speed_bonus = self.fiery_soul_move_speed_bonus + talent:GetSpecialValueFor("value2")
end
if IsServer() then
ParticleManager:SetParticleControl( self.nFXIndex, 1, Vector( self:GetStackCount(), 0, 0 ) )
end
end
--Прокачка пассивки
Created
Server: true
CDOTA_Modifier_Lua
CDOTA_Ability_Lua
Can't find this type
Refresh
Server: true
CDOTA_Modifier_Lua
CDOTA_Ability_Lua
Can't find this type
Created
Server: false
C_DOTA_Modifier_Lua
C_DOTA_Ability_Lua
Can't find this type
Script Runtime Error: ...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:135: attempt to call method 'FindAbilityByName' (a nil value)
stack traceback:
...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:135: in function <...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:119>
--Использование способности и появление эффекта
Refresh
Server: false
C_DOTA_Modifier_Lua
C_DOTA_Ability_Lua
Can't find this type
Script Runtime Error: ...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:164: attempt to call method 'FindAbilityByName' (a nil value)
stack traceback:
...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:164: in function <...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:150>
--Исчезновение эффекта
Refresh
Server: false
C_DOTA_Modifier_Lua
C_DOTA_Ability_Lua
Can't find this type
Script Runtime Error: ...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:164: attempt to call method 'FindAbilityByName' (a nil value)
stack traceback:
...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:164: in function <...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:150>
Created
Server: true
CDOTA_Modifier_Lua
CDOTA_Ability_Lua
Can't find this type
Refresh
Server: true
CDOTA_Modifier_Lua
CDOTA_Ability_Lua
Can't find this type
Created
Server: false
C_DOTA_Modifier_Lua
C_DOTA_Ability_Lua
Can't find this type
Script Runtime Error: ...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:135: attempt to call method 'FindAbilityByName' (a nil value)
stack traceback:
...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:135: in function <...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:119>
--Использование способности и появление эффекта
Refresh
Server: false
C_DOTA_Modifier_Lua
C_DOTA_Ability_Lua
Can't find this type
Script Runtime Error: ...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:164: attempt to call method 'FindAbilityByName' (a nil value)
stack traceback:
...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:164: in function <...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:150>
--Исчезновение эффекта
Refresh
Server: false
C_DOTA_Modifier_Lua
C_DOTA_Ability_Lua
Can't find this type
Script Runtime Error: ...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:164: attempt to call method 'FindAbilityByName' (a nil value)
stack traceback:
...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:164: in function <...y_copy\scripts\vscripts\modifier_lina_fiery_soul_lua.lua:150>