Jump to content

Полезные функции/классы.


Recommended Posts

bd7d1bbaed08.png


  • Математические функции
    • Функция: math.equation
        Reveal hidden contents
    • Функция: math.double
        Reveal hidden contents

      [*]Функция: math.rating

        Reveal hidden contents

      [*]Функция: math.float

        Reveal hidden contents

      [*]Функция math.decl

        Reveal hidden contents

      [*]Функция math.clamp

        Reveal hidden contents

Функции для работы с таблицами

  • Функция: table.sortIndex
      Reveal hidden contents

    [*]Функция: table.max

      Reveal hidden contents

    [*]Функция: table.min

      Reveal hidden contents

    [*]Функция: table.serialize

      Reveal hidden contents

    [*]Функция: table.deserialize

      Reveal hidden contents

    Примеры к этим 2 функциям.

      Reveal hidden contents

    [*]Функция: table.replace

      Reveal hidden contents

    [*]Функция для удаления значения из таблицы по маске индекса

      Reveal hidden contents

    [*]Функция: table.random

      Reveal hidden contents

    [*]Функция: table.last

      Reveal hidden contents

    [*]Функция: table.empty

      Reveal hidden contents

    [*]Функция: table.size

      Reveal hidden contents

    [*]Функция: table.find

      Reveal hidden contents

Функции для работы со строками

  • Функция: string.transfer
      Reveal hidden contents

    [*]Функция: string.trim

      Reveal hidden contents

Функции для работы с цветом

  • Функция: HSLtoRGB
      Reveal hidden contents

    [*]Функция: tocolorHSB

      Reveal hidden contents

Прочие функции

  • Функция: getAllWeapons
      Reveal hidden contents
  • Функция: getPlayerCount
      Reveal hidden contents
  • Функция: takeMoney
      Reveal hidden contents

    [*]Функция: getWeaponModelFromID

      Reveal hidden contents

    [*]Функция: getWeaponStatFromWeaponID

      Reveal hidden contents

    [*]Функция: setRandomMap

      Reveal hidden contents

    [*]Функция: getRandomPlayer

      Reveal hidden contents

    [*]Функция: elementRotationToPoint

      Reveal hidden contents

    [*]Функция: isRussianText

      Reveal hidden contents

 

Классы

  •  
  • Небольшой класс по работе с файлами. Стандартные функции MTA + возможность читать файл построчно.
      Reveal hidden contents

Библиотека для реализации класса от Lua Dev с обновлением от Kernell и Setuper

Если у кого нибудь есть ещё функции или классы или ещё что-то, выкладывайте сюда. :)

Edited by Guest
  • Like 1
Link to comment

В последнее время очень пригодилась эта функция, т.к. я работаю с таблицами как с объектами класса.

Удаляет из таблицы значения по маске индекса.

function fRemoveTableFieldsByPattern ( t, sPattern ) 
    if type(t) ~= 'table' or type(sPattern) ~= 'string' then 
        return false 
    end 
  
    for index, _ in pairs(t) do 
        if string.find( tostring(index), sPattern ) then 
            if type(index) == 'number' then 
                table.remove(t, index) 
            else 
                t[index] = nil 
            end 
        end 
    end 
  
    return true 
end 

Примеры

local t = { [123] = 1, [456] = 2, [789] = 3, ["159"] = 4, last = 4 } 
fRemoveTableFieldsByPattern( t, '^%d+$' ) -- удалить все индексы, состоящие только из цифр 
-- в таблице t осталось только поле 'last' 

local t = { 
    ['playerHealth'] = 100, 
    ['playerArmour'] = 0, 
    ['playerMoney'] = 123456, 
    ['onlinePlayersCount'] = 0 
} 
  
fRemoveTableFieldsByPattern( t, '^player' ) -- удалить все индексы, начинающиеся со слова 'player' 
-- в таблице t осталось только поле 'onlinePlayersCount' 

По желанию можно также удалять по маске значения, а не индекса. У меня просто в таблицах некоторые группы полей начинают с одного и того же слова, их много, и вручную каждый раз удалять их - слишком много места в коде.

Link to comment
  • 2 weeks later...

Синтаксис

int, int, int, int tocolorHSB ( float hue [, float saturation = 1.0, float brightness = 1.0, int alpha = 255 ] ) 

Обязательные аргументы

Необязательные аргументы

  • saturation: Значение насыщенности цвета (0-1).
  • brightness: Значение яркость цвета (0-1).
  • alpha: Значение прозрачности цвета (0-255).

Возврат

Возвращает первое число hex-цвет и ещё три это его составляющие в RGB формате.

Код функции

function tocolorHSB(hue,saturation,brightness,alpha) 
    if (not saturation) then saturation = 1 end 
    if (not brightness) then brightness = 1 end 
    if (not alpha) then alpha = 255 end 
    local rr,gg,bb = 255,255,255 
    if (hue <= 60) then 
        rr = 255 
        gg = math.floor(255*hue/60) 
        bb = 0 
    elseif (hue <= 120) then 
        rr = math.floor(255*(1 - (hue - 60)/60)) 
        gg = 255 
        bb = 0 
    elseif (hue <= 180) then 
        rr = 0 
        gg = 255 
        bb = math.floor(255*(hue - 120)/60) 
    elseif (hue <= 240) then 
        rr = 0 
        gg = math.floor(255*(1 - (hue - 180)/60)) 
        bb = 255 
    elseif (hue <= 300) then 
        rr = math.floor(255*(hue - 240)/60) 
        gg = 0 
        bb = 255 
    else 
        rr = 255 
        gg = 0 
        bb = math.floor(255*(1 - (hue - 300)/60)) 
    end 
    rr = rr + (255-rr)*(1-saturation) 
    gg = gg + (255-gg)*(1-saturation) 
    bb = bb + (255-bb)*(1-saturation) 
    rr = rr*brightness 
    gg = gg*brightness 
    bb = bb*brightness 
    local color = tonumber(string.format("0x%02X%02X%02X%02X",alpha,rr,gg,bb)) 
    return color,rr,gg,bb 
end 

Edited by Guest
Link to comment
  • 5 weeks later...

Синтаксис

float math.clamp ( float value, float lower, float upper ) 

Аргументы

  • value: Значение
  • lower: Нижнее значение
  • upper: Верхнее значение

Возврат

Возвращает число в пределах lower и upper значений.

Код

function math.clamp ( value, lower, upper ) 
 if type ( value ) == "number" and type ( lower ) == "number" and type ( upper ) == "number" then 
  if value < lower then  
   value = lower 
  elseif value > upper then  
   value = upper  
  end 
  return value 
 end 
 return false 
end 

Link to comment
function math.clamp ( value, lower, upper ) 
    value = tonumber( value ) 
    lower = tonumber( lower ) 
    upper = tonumber( upper ) 
     
    if value and lower and upper then 
        value = math.min( lower, value ); 
        value = math.max( upper, value ); 
        return value 
    end 
     
    return false 
end 

Link to comment
  Kernell said:
    value = math.min( lower, value ); 
        value = math.max( upper, value ); 
        return value 

1. Всегда будет возвращать upper, разве нет?

2. При желании можно еще больше "схлопнуть" код:

function math.clamp ( value, lower, upper ) 
    value = tonumber( value ) 
    lower = tonumber( lower ) 
    upper = tonumber( upper ) 
    if value and lower and upper then 
        return value < lower and lower or value > upper and upper or value 
    end 
    return false 
end 

3. А зачем вообще? :-s, когда можно как написано в 6 строчке? Чуточку длиннее по синтаксису, но зато без вызова функции.

Link to comment

Действительно косяк..

Ну можно кстати ещё больше "схлопнуть" код:

  
function math.clamp ( value, lower, upper ) 
    value = tonumber( value ); 
    lower = tonumber( lower ); 
    upper = tonumber( upper ); 
  
    return value and lower and upper and ( value < lower and lower or value > upper and upper or value ) or false; 
end 
  

crazy.gif

Link to comment
  • 2 months later...
  • 3 months later...

Функция склонения чисел

Синтаксис

string math.decl ( int nubmer, string declin1, string declin2, string declin3 ) 

Код

function math.decl( number, declin1, declin2, declin3 ) 
    if number % 10 == 1 and number % 100 ~= 11 then 
        return declin1; 
    elseif number % 10 >= 2 and number % 10 <= 4 and ( number % 100 < 10 or number % 100 >= 20 ) then 
        return declin2; 
    end 
     
    return declin3; 
end 

Пример использования

print( "Вы были тут 13 " .. math.decl( 13, 'час', 'часа', 'часов' ) .. ' назад' ); -- Вы были тут 13 часов назад 

print( "Забанен на 124 " .. math.decl( 124, 'минуту', 'минуты', 'минут' ) ); -- Забанен на 124 минуты 

Link to comment
  Kenix said:
  
local label = guiCreateLabel( 0.5,0.5,0.9,0.9,"",true ) 
guiLabelSetHexColor ( label, "#2e88f9Текст",true ) 

так работаеть будет?

local speclabel = guiCreateLabel(screenWidth/2 - 100, screenHeight - 100, 200, 70, '', false) 
guiLabelSetHexColor ( speclabel, "Currently spectating:\n" .. getPlayerName(SpectatePlayer),true ) 

Чтобы ник с цветом был

Link to comment

Эта функция будет окрашивать весь лейбл в один цвет.

Если нужно разные цвета

function dxDrawColoredText(str, ax, ay, bx, by, color, scale, font,left,top) 
left = "left" 
if not top then top = "top" end 
  local pat = "(.-)#(%x%x%x%x%x%x)" 
  local s, e, cap, col = str:find(pat, 1) 
  local last = 1 
  while s do 
    if cap == "" and col then color = tocolor(tonumber("0x"..col:sub(1, 2)), tonumber("0x"..col:sub(3, 4)), tonumber("0x"..col:sub(5, 6)), 255) end 
    if s ~= 1 or cap ~= "" then 
      local w = dxGetTextWidth(cap, scale, font) 
      dxDrawText(cap, ax, ay, ax + w, by, color, scale, font,left,top,true) 
      ax = ax + w 
      color = tocolor(tonumber("0x"..col:sub(1, 2)), tonumber("0x"..col:sub(3, 4)), tonumber("0x"..col:sub(5, 6)), 255) 
    end 
    last = e + 1 
    s, e, cap, col = str:find(pat, last) 
  end 
  if last <= #str then 
    cap = str:sub(last) 
    local w = dxGetTextWidth(cap, scale, font) 
    dxDrawText(cap, ax, ay, ax + w, by, color, scale, font,left,top,true) 
    end 
end 

Link to comment

Проверка текста на русский язык

function isRussianText( text ) 
  
    local len   = utfLen( text ) 
    local code  = nil 
         
    for i = 1, len do 
        code = utfCode( utfSub( text, i, i ) ) 
                 
        if code < 1040 or code > 1103 then          -- 'А'-'Я' 'а'-'я' 
            if code ~= 1105 and code ~= 1025 then   -- 'ё' 'Ё' 
                return false 
            end 
        end 
    end 
  
    return true  
end 

Link to comment
  • 4 weeks later...

Небольшой класс по работе с файлами. Стандартные функции MTA + возможность читать файл построково.

Скачать: Pastebin

Пример использования:

    local file = File:new( "test.txt" ) 
    file:open( ) 
     
    --[[while true do 
        local line = file:readLine( ) 
        if not line then 
            break 
        else 
            print( line ) 
        end 
    end]] 
    local line = nil 
    repeat 
        line = file:readLine( ) 
        if line then 
            print( line ) 
        end 
    until not line 
     
    file:close( ) 

Edited by Guest
Link to comment
  • 2 weeks later...

Удаляет пробелы в начале и в конце строки.

function string.trim( str ) 
    if type( str ) == "string" then 
        str = string.gsub( str, "^%s*", "" ) 
        str = string.gsub( str, "%s*$", "" ) 
        return str 
    end 
    return false 
end 

Обновил класс File: Смотреть

Link to comment

table.serialize - преобразует таблицу в строку (для удобства хранения данных). Функция более совершенна чем table.string поскольку корректно работает с типами данных и вложенными таблицами. Поля содержащие userdata, thread или function игнорируются.

string table.serialize(table t) 

Обязательные аргументы: t - таблица для сериализации

Возвращает: строку сериализованной таблицы либо nil

table.deserialize - функция обратная сериализации, позволяет получить из строки таблицу

table table.deserialize(string s) 

Обязательные аргументы: s - строка для десериализации

Возвращает: таблицу либо nil

Pastebin (здесь подсветка кода обрезает '\')

Пример:

local test = {[1] = 'dw', ['2'] = 123, [3] = {1,2,'ere'}} 
local tString = table.serialize(test) 
print(tString)--> {[1] = 'dw', [3] = {[1] = 1, [2] = 2, [3] = 'ere'}, ['2'] = 123} 
local sTable = table.deserialize(tString) 
print(sTable[1]..', '..sTable['2'])--> dw, 123 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...