[Lua] Микрофриз при получении способности
Привет, друг! :)
При получении способности происходит микрофриз, однако при повышении уровня способности или достижения максимума этого нет.
Суть в том, что при покупке предмета герою даётся способность. Реализовано это через создание способности с именем в виде равкода, а ниже берётся предмет который был куплен, парсится строчка его имени и отправляется в FourCC() для преобразования в integer. Но почему-то это вызывает фриз именно при получении новой способности. В каком месте я перегрузил систему? :) Может есть вариант это сделать проще?
Видео:
        -- [TRIGGER] Item To Ability System
        local BackSoldItem = CreateTrigger()
        TriggerRegisterPlayerUnitEvent(BackSoldItem,Player(PLAYER_NEUTRAL_PASSIVE),EVENT_PLAYER_UNIT_SELL_IT​EM)
        TriggerAddAction(BackSoldItem,function()
        local ABrawcode = FourCC(GetItemName(GetSoldItem()))
        local Hero = GetBuyingUnit()
        local ABlevel = GetUnitAbilityLevel(Hero,ABrawcode)

        if ABlevel == 0 then UnitAddAbility(Hero,ABrawcode)  
        elseif ABlevel < 20 then SetUnitAbilityLevel(Hero,ABrawcode,GetUnitAbilityLevel(Hero,ABrawcode) + 1)
        elseif ABlevel >= 20 then
            local hOwner = GetOwningPlayer(Hero)
            local aName = GetAbilityName(ABrawcode)
            SetPlayerState(hOwner,PLAYER_STATE_RESOURCE_LUMBER,GetPlayerState(hOwner,PLAYER_STATE_RESOURCE_LUMBE​R)+100)
            ErrorMessage(hOwner,'Достигнут максимальный уровень '..aName..'!')
        end
        AddItemToStock(GetTriggerUnit(),GetItemTypeId(GetSoldItem()),0,0)
        end)
        -- [END TRIGGER]

Лучший ответ:
Видимо у спосбности много уровней. Чтобы избежать микрофриза при получении, создайте юнита в начале игры, дайте ему способность и удалите его.


Views: 293

Nelloy #1 - 11 months ago 1
Голосов: +1 / -0

Видимо у спосбности много уровней. Чтобы избежать микрофриза при получении, создайте юнита в начале игры, дайте ему способность и удалите его.
quq_CCCP #2 - 11 months ago 2
Голосов: +2 / -0
Вас не смущает уровень способности - 20? Можно доигратся чтобы карта 40 минут загружалась...
Настоятельно не рекомендую делать абилки на 4+ уровней, в слк таблице место только для 4 уровней, все остальное в тхт файлах, а их вар распаковывает жутко долго. Так же не мешает делать подгрузку, чтобы все необходимое было либо изначально на карте, либо использовать preload.
DarkLigthing #3 - 11 months ago 0
Голосов: +0 / -0
Nelloy:
Видимо у спосбности много уровней. Чтобы избежать микрофриза при получении, создайте юнита в начале игры, дайте ему способность и удалите его.
В точку, это из-за уровней способности. Сбросил до трёх, фризы ушли спасибо! )

quq_CCCP:
Вас не смущает уровень способности - 20? Можно доигратся чтобы карта 40 минут загружалась...
Настоятельно не рекомендую делать абилки на 4+ уровней, в слк таблице место только для 4 уровней, все остальное в тхт файлах, а их вар распаковывает жутко долго. Так же не мешает делать подгрузку, чтобы все необходимое было либо изначально на карте, либо использовать preload.
Да, это в корни неверная система вместо уровней я лучше напишу кодом таблицу изменений характеристик способностей. Если это будет реально...