Получение PlayerID на модификаторе

  • Автор темы Автор темы ascento
  • Дата начала Дата начала

ascento

Пользователь
11 Ноя 2021
23
5
ascento-rpg.ru
Проект
Ascento RPG
При попытке получить PlayerID в модификаторе возникает ошибка: attempt to call method 'GetPlayerID' (a nil value)
И всё бы ничего, он в итоге каким-то образом продолжает работать и получает SteamID, даже работают атрибуты, которые он выдаёт, вот только они перестают отображаться (только сила, ловкость и интеллект отображаются правильно), но работают


Lua:
function modifier_custom_shmot_attr:OnCreated()


    local caster = self:GetCaster()
    if caster:IsRealHero() and caster ~= nil and caster:IsNull() == false then
        local playerId = caster:GetPlayerID()


        print("PlayerID: " .. tostring(playerId))
        local steamID = PlayerResource:GetSteamID(playerId)


        print( "Steam Community ID: " .. tostring( steamID ) )
 
В процессе изучения проблемы понял что функция выполняется дважды и во второй раз не может получить значение из local playerId = caster:GetPlayerID()
И видимо второй круг как раз отвечает за отображение характеристик героя в игре
 
Полный код выглядит так:

Lua:
function modifier_custom_shmot_attr:OnCreated()
    local caster = self:GetCaster()
    if caster:IsRealHero() and caster ~= nil and caster:IsNull() == false then
        local playerId = caster:GetPlayerID()

        print("PlayerID: " .. tostring(playerId))
        local steamID = PlayerResource:GetSteamID(playerId)

        print( "Steam Community ID: " .. tostring( steamID ) )

        if tostring(steamID) ~= nil then
            steamID = tostring(steamID)
            local shmotload = CustomNetTables:GetTableValue( "custom_shmot", steamID)
            print("shmotload info msg1")
            
            if shmotload ~= nil then
                print( "Steam Community ID от shmotload: " .. shmotload.steamid)
          

                if shmotload.steamid == steamID and shmotload.steamid ~= nil then

                    print("Steam ID совпадает со Steam ID с сайта. shmotload Success!")


                    local ability = self:GetAbility()
                      
                        self.bonus_damage = tonumber(shmotload.damage or 0)
                        self.bonus_attack_speed = tonumber(shmotload.attack_speed or 0)
                        self.bonus_hit_hp = tonumber(shmotload.hit_hp or 0)
                        self.bonus_hit_mp = tonumber(shmotload.hit_mp or 0)
                        self.bonus_creep_damage = tonumber(shmotload.creep_damage or 0)
                        self.bonus_all_stats = tonumber(shmotload.all_stats or 0)
                        self.bonus_status_resistance = tonumber(shmotload.status_resistance or 0)
                        self.bonus_health_percent = tonumber(shmotload.health_percent or 0)
                        self.bonus_spell_range = tonumber(shmotload.spell_range or 0)
                        self.bonus_movement_speed = tonumber(shmotload.movement_speed or 0)
                        self.bonus_armor = tonumber(shmotload.armor or 0)
                        self.bonus_hp = tonumber(shmotload.hp or 0)
                        self.bonus_mp = tonumber(shmotload.mp or 0)
                        self.bonus_cooldown_reduction = tonumber(shmotload.cooldown_reduction or 0)
                        self.bonus_spell_amplify = tonumber(shmotload.spell_amplify or 0)
                        self.bonus_spell_lifesteal = tonumber(shmotload.spell_lifesteal or 0)
                        self.bonus_strength = tonumber((shmotload.strength or 0) + (shmotload.all_stats or 0))
                        self.bonus_intellect = tonumber((shmotload.intellect or 0) + (shmotload.all_stats or 0))
                        self.bonus_agility = tonumber((shmotload.agility or 0) + (shmotload.all_stats or 0))

                        _G.znzad = 1

                        print("Значения модификатора шмотки заданы")

                        local hero = self:GetCaster()
                        if hero ~= nil and hero:IsNull() == false and hero.CalculateStatBonus then
                            self:GetCaster():CalculateStatBonus(true)
                            print("CALCULATAAA")
                        end
                end
            end
        end
    end
end
 
Есть функции которые только на сервере
Можешь на старте кода прописать
if not IsServer() then return end
Главное чтоб переменные были перед этим, а то не будут отображаться на худе
 
Есть функции которые только на сервере
Можешь на старте кода прописать
if not IsServer() then return end
Главное чтоб переменные были перед этим, а то не будут отображаться на худе
Вот прикол то как раз в том, что в функции я получаю steamid игрока и на его основе делаю выборку из CustomNetTables. И переменным задаются значения оттуда, а если я в обход делаю, то в худе не отображается. Вечером буду дома попробую как ты сказал
 
Есть функции которые только на сервере
Можешь на старте кода прописать
if not IsServer() then return end
Главное чтоб переменные были перед этим, а то не будут отображаться на худе
Не помогает...в переменные всё равно не могу понять как загрузить steamid
 
GetPlayerOwnerID() есть и на клиенте и на сервере
 
Код:
caster:GetPlayerOwnerID()
вернёт тебе playerID и на клиенте и на сервере, но для получение таблицы из CustomNetTables в твоём коде нужен steamID64 который легко можно получить на сервере(PlayerResource:GetSteamID(playerId)), но сложно на клиенте(в клиент API такой функции нет так что думаю проще всего через CustomNetTables).
Так что тут выбирай:
Либо передавай связки playerID - steamID64 на клиент.
Либо немного переделай свой CustomNetTables так что бы можно было получать таблицу по playerID. - думаю это будет легче
 
Код:
caster:GetPlayerOwnerID()
вернёт тебе playerID и на клиенте и на сервере, но для получение таблицы из CustomNetTables в твоём коде нужен steamID64 который легко можно получить на сервере(PlayerResource:GetSteamID(playerId)), но сложно на клиенте(в клиент API такой функции нет так что думаю проще всего через CustomNetTables).
Так что тут выбирай:
Либо передавай связки playerID - steamID64 на клиент.
Либо немного переделай свой CustomNetTables так что бы можно было получать таблицу по playerID. - думаю это будет легче
по твоим советам получилось заставить его работать, осталось проверить как оно будет с несколькими игроками
 
Реклама: