Sign in to follow this  
Kenix

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

Recommended Posts

Возвращает угол и направление заноса транспортного средства

float getVehicleDriftAngle ( element theVehicle ) 

function getVehicleDriftAngle(theVehicle) 
    if getElementType(theVehicle) ~= "vehicle" then 
        return false 
    end 
  
    local vX, vY = getElementVelocity(theVehicle) 
    if (vX == 0.0 and vY == 0.0) then 
        return 0.0 
    end 
  
    local rotX, rotY, rotZ = getElementRotation(theVehicle) 
     
    local moveDirection = math.deg(-math.atan2(vX, vY)) 
  
    if rotZ > 180 then 
        rotZ = rotZ - 360 
    end 
     
    local driftAngle = moveDirection - rotZ; 
  
    if driftAngle < -180.0 then 
        driftAngle = driftAngle + 360.0 
    elseif driftAngle > 180.0 then 
        driftAngle = driftAngle - 360.0 
    end 
    return driftAngle 
end 

http://pastebin.com/T8xzNcDD

Share this post


Link to post

Создаем таблички с помощью Lua. С примером, кто знает, что и как работает - измените сами. Возможно кому то интересно будет.

  
-- Ваше подключение в БД, не забудьте изменить, пожалуйста! 
local pDBConnection = dbConnect ( "mysql", "dbname=dbName;host=127.0.0.1", "username", "password", "share=0" )  
local aTables = 
{ 
    ["tunning"] =  
    { 
         { name="id", type="INT", length=11, unsigned=true, allowNull=false, default="AI", primaryKey=true }, 
         { name="vehicleID", type="TINYINT", length=3, unsigned=true, allowNull=false, default=false, primaryKey=false }, 
         { name="loginName", type="VARCHAR", length=64, allowNull=false, default=false }, 
         { name="JSON", type="VARCHAR", length=1024, allowNull=false, default=false }, 
    } 
} 
  
addEventHandler ( "onResourceStart", resourceRoot, 
    function() 
        for tableName, tableInfo in pairs ( aTables ) do 
            -- Размер таблицы 
            local iSize = table.size ( tableInfo ) 
            -- Индекс PRIMARY KEY 
            local iPrimaryKeyIndex = 0 
            -- Сам запрос 
            local sQuery = "CREATE TABLE IF NOT EXISTS `"..tableName.."` (\n" 
            for i = 1, iSize do 
                sQuery = sQuery.."`"..tableInfo[i].name.."` " 
                sQuery = sQuery..tableInfo[i].type 
                if tableInfo[i].length then 
                    sQuery = sQuery.."("..tableInfo[i].length..") " 
                else 
                    sQuery = sQuery.." " 
                end 
                if tableInfo[i].unsigned then 
                    sQuery = sQuery.."UNSIGNED " 
                end 
                if not tableInfo[i].allowNull then 
                    sQuery = sQuery.."NOT NULL " 
                else 
                    sQuery = sQuery.."NULL " 
                end 
                if tableInfo[i].default then 
                    if tableInfo[i].default == "AI" then 
                        sQuery = sQuery.."AUTO_INCREMENT " 
                    else 
                        sQuery = sQuery.."DEFAULT '"..tableInfo[i].default.."' " 
                    end 
                end 
                if tableInfo[i].primaryKey then 
                    iPrimaryKeyIndex = i 
                end 
                local iLen = string.len ( sQuery ) 
                sQuery = string.sub ( sQuery, 1, iLen - 1 ) 
                sQuery = sQuery..", \n" 
                if i == iSize then 
                    sQuery = sQuery.."PRIMARY KEY (`"..tableInfo[iPrimaryKeyIndex].name.."`)\n)" 
                end  
            end 
            dbExec ( pDBConnection , sQuery ) 
        end 
    end 
) 

Share this post


Link to post

Недавно мне понадобилась функция для разделения массива на несколько кусков (рандомно).

Может кому понадобится.

  
local function size( a ) 
    local i = 0; 
     
    for _ in pairs( a ) do 
        i = i + 1; 
    end 
     
    return i; 
end 
  
function table.slice( t ) 
    if size( t ) > 0 then 
        local New       = {}; 
        local iRand    = math.random( 1, size( t ) ); 
  
        local iCount    = 0; 
         
        for i, v in pairs( t ) do 
            if iCount < iRand then 
                table.insert( New, v ); 
                 
                t[ i ] = nil; 
            else 
                break; 
            end 
             
            iCount = iCount + 1; 
        end 
  
        return New; 
    end 
  
    return false; 
end 

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

  
local a = {}; 
for i = 1, 20 do 
 table.insert( a, i ); 
end 
  
while true do 
 local take = table.slice( a ); 
 if not take then break; end 
 print( unpack( take ) ); 
end 
  
--[[ 
Результат 
  
1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17 
18  19 
20 
]] 

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.