[Lua Библиотека] FF_Api

FF Api планирую поддерживать как базу для своих функций, не создавая локальные функции в каждом файле.

В изначальную версию FF Api входят:

timer single.lua
_table_fast.lua

Спойлер

*timer single.lua
добавляет функцию:
timer.Single(время,функция)- аналог Timer.Simple
При использовании более 1 раза помещает дальнейшие таймера в очередь
позволяя не просчитывать множество таймеров за их время существования.
Пример:

for i=1,10 do 
--Создаст 10 раздельных таймеров.
timer.Simple(1,function()
print(i)
end)
--Будет работать как 1 таймер
timer.Single(1,function()
print(i)
end)
end

*_table_fast.lua добавляет 3 функции:
table.F_remove и table.F_insert работают в 2-3 раза быстрее чем их аналоги table.remove,table.insert,
в table.F_remove добавлен аргумент last – если не указать использует #table, нужен для уменьшение затраты времени процессора, если уже в коде получали #table
table.F_remove(таблица,ключ, last)
пример:

local T={}
for i=1,math.random(5,15) do 
T[i]=i
end
local ct=#T
print('в таблице ',ct,'строк')
--Быстрее
print(table.F_remove(T,5,ct))
-- чем
print(table.F_remove(T,5))

Так же новая функция table.F_fix
исправляет пустоты в таблице, смещая значения:

local T={}
T[1]=1
T[3]=3
T[20]=20
PrintTable(T) 
-[1]: 1
-[3]: 3
-[20]:20
table.F_fix(T)
PrintTable(T) 
-[1]: 1
-[2]: 3
-[3]:20

Сам FF api использует отдельную папку lua\FF_API
работает аналогично autorun
По этому все новые файлы нужно закидывать lua\FF_API Изредка буду дополнять api функции отдельными сообщениями в теме.
FF_api.zip (3,0 КБ)

29.10.2024
FF_api.zip (2,1 КБ)

Изменения
  • _table_fast
    Убрал лишнее действие в table.F_remove
    Добавил аргумент last для table.F_insert (t, T, n,last)
    –t - таблица
    –T - то что в ставляем в таблицу
    –n на какое место ставим, если установить nil то будет последним
    –last сколько ключей в таблице (#table)

Дополнения:
bone_ff.lua и _findmeta.lua

Лучше прямо в посте опубликуй отдельно исходники каждой отдельной функции. Их не много, зато каждая из них создает кучу вопросов

я планировал новые модули|функции отдельным сообщением делать, что бы можно было обозначать зависимости от других модулей|функций. А основную API добавлять в главное сообщение с сохранением старых версий

тогда не удивляйся, если эта тема никому не пригодится

*bone_ff.lua – Требует _findmeta.lua
bone_ff.lua (1,1 КБ)

добавляет 2 мета функции
  1. id (int) ,model (string) ← Entity:FF_FindBone(имя кости)
    ищет кость у сущности по не полному названию, после чего кэширует по моделе и названию, из за чего в постоянном использовании будет эффективней чем постоянное использование перебора:

    for i = 0, entity:GetBoneCount() - 1 do
        if entity:GetBoneName( i ) == name then return i end 
    end
-- или
entity:LookupBone(name)
local PL=Entity(1)
local id,mdl=PL:FF_findbone('HEad')--head,HEAD и т.д
-- хоть полное название может быть ValveBiped.Bip01_Head1
-- id это id кости, mdl это модель сущности, мало ли нужно будет дальше в коде.
  

  1. Vector,Angle ← Entity:FF_GetBonePosition(id кости)
    замена GetBonePosition, так как она привязана к Тику SV части, из за чего если частота игрока выше чем у сервера, то при использовании GetBonePosition будут видны разрывы

*_findmeta.lua
_findmeta.lua (473 байта)

добавляет 4 функции
  1. metaTable ← FF_meta(название мета таблицы, ключ таблицы)
    использует FindMetaTable
local met = 'Entity'
local GetModel = FF_meta(met, 'GetModel') -- вернёт функцию Entity:GetModel()
local FF_meta(met) -- вернёт Мета Таблицу Entity
  1. metaTable ← FF_AddBindMeta(название ключа,название мета таблицы, ключ таблицы)
    Позволяет кэшить нужную мета таблицу или её ключ.
-- так же возвращает указанный ключ/мета таблицу.
local get_model =FF_AddBindMeta('ent_m','Entity','GetModel')

  1. metaTable ← FF_BindMeta (название ключа)
    нужен для получения кэшированной мета таблицы
local get_model =FF_BindMeta('ent_m')

4)FF_AddMeta (название мета таблицы, ключ таблицы, функция)
нужна что бы вставлять в кэшированную мета таблицу новую функцию
Кэшированная мета таблица то же самое что и обычная

FF_AddMeta('Entity', 'RetrunHeal', function(self)
return self:Heal()
end)
-- это то же самое что и 
local ENT=FindMetaTable('Entity')
ENT.RetrunHeal=function(self)
return self:Heal()
end
-- или 
function ENT:RetrunHeal()
return self:Heal()
end

-- но не будет кэшится в каждом файле (Мета таблица)