Meta Table Anlatımı

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı foreigner26

  • Yeni Üye
  • *
    • İleti: 34
: 14 Mayıs 2020, 05:03:28
Buyrun.

« Son Düzenleme: 16 Mayıs 2020, 22:52:54 Gönderen: Narkoz »
"It doesnt even matter"
 


MTASATURK

Meta Table Anlatımı
« : 14 Mayıs 2020, 05:03:28 »

Çevrimdışı kedibakgit

  • Yeni Üye
  • *
    • İleti: 47
  • .
Yanıtla #1 : 14 Mayıs 2020, 07:52:25
eline sağlık cidden çok yararlı
 


Çevrimdışı Leaver

  • laravel <3
  • Uzman Üye
  • *
    • İleti: 511
    • Esppa Software
Yanıtla #2 : 14 Mayıs 2020, 10:48:39
Abi ellerine sağlık, bunu kesinlikle sunucumda kullanacağım.
 


Çevrimdışı ByCash

  • Admin
  • *
    • İleti: 986
Yanıtla #3 : 14 Mayıs 2020, 12:54:38
Fark ne? :D
Kod
local tablo = {

{ id = 411, pos = {0, 0, 0}, rot = {0, 0, 0}, color = {255, 255, 255} },

}

local arabalar = {}
function arabaOlustur(id, x, y, z, rx, ry, rz, r, g, b)
local i = (#arabalar)+1
if not arabalar[i] then arabalar[i] = {} end
arabalar[i] = createVehicle(id, x, y, z, rx, ry, rz)
setVehicleColor(arabalar[i], r, g, b)
end

for i, v in ipairs(tablo) do
arabaOlustur(v.id, v.pos[1], v.pos[2], v.pos[3], v.rot[1], v.rot[2], v.rot[3], v.color[1], v.color[2], v.color[3])
end
 


Çevrimdışı TahaGG

  • Bilgin Üye
  • *
    • İleti: 228
Yanıtla #4 : 14 Mayıs 2020, 13:07:31
Ben az biliyorum izleyim biraz öğrenirim dedim daha da unuttum. :D Bölüm 1 e göre çok zor bence kolaydan başlamalıydın hiçbir şey anlamadım ben :D :D

Dipnot = Dalga geçme amaçlı demedim anlatmak istediğim zordan başlamışsın.
"Türk olmak zordur, çünkü dünya ile savaşırsın. Türk olmamak daha zordur çünkü, Türk ile savaşırsın."
 


Çevrimdışı ertrldtcu

  • Uzman Üye
  • *
    • İleti: 589
Yanıtla #5 : 14 Mayıs 2020, 13:57:20
Linki görebilmek için Kayıt olun yada Giriş yapın.
Fark ne? :D
Kod
local tablo = {

{ id = 411, pos = {0, 0, 0}, rot = {0, 0, 0}, color = {255, 255, 255} },

}

local arabalar = {}
function arabaOlustur(id, x, y, z, rx, ry, rz, r, g, b)
local i = (#arabalar)+1
if not arabalar[i] then arabalar[i] = {} end
arabalar[i] = createVehicle(id, x, y, z, rx, ry, rz)
setVehicleColor(arabalar[i], r, g, b)
end

for i, v in ipairs(tablo) do
arabaOlustur(v.id, v.pos[1], v.pos[2], v.pos[3], v.rot[1], v.rot[2], v.rot[3], v.color[1], v.color[2], v.color[3])
end
Burada anlatılmak istenen bi tabloya 3 5 değer girip bu değerler ile araç oluşturmak değil. Videoyu izlersen anlarsın.

Video düzenlenerek daha kısa ve öz bir hale getirilebilirdi. Her neyse içerik olarak güzel bi video olmuş. Eline sağlık.
« Son Düzenleme: 14 Mayıs 2020, 14:00:50 Gönderen: ertrldtcu »
system
 


MTASATURK

Ynt: 10DK'da LUA (MTA:SA) metatable nedir?
« Yanıtla #5 : 14 Mayıs 2020, 13:57:20 »

Çevrimdışı ByCash

  • Admin
  • *
    • İleti: 986
Yanıtla #6 : 14 Mayıs 2020, 14:47:23
Linki görebilmek için Kayıt olun yada Giriş yapın.
Burada anlatılmak istenen bi tabloya 3 5 değer girip bu değerler ile araç oluşturmak değil. Videoyu izlersen anlarsın.

Video düzenlenerek daha kısa ve öz bir hale getirilebilirdi. Her neyse içerik olarak güzel bi video olmuş. Eline sağlık.
Anlatılmak isteneni anladım zaten ben burda farkı sordum (Neden buna ihtiyaç duyulacağını), kötü birşey söylemedim her lafa atlama.
« Son Düzenleme: 06 Haziran 2020, 20:03:52 Gönderen: ByCash »
 


Çevrimdışı foreigner26

  • Yeni Üye
  • *
    • İleti: 34
Yanıtla #7 : 17 Mayıs 2020, 09:44:03
Linki görebilmek için Kayıt olun yada Giriş yapın.
Anlatılmak isteneni anladım zaten ben burda farkı sordum (Neden buna ihtiyaç duyulacağını), Kötü birşey söylemedim her lafa atlama.

Element bazlı fonksiyon ve veri depolaması sağlıyor.
Örneklendirmem gerekirse ben bir elementin üzerine veri depolayacağın zaman memcache yapamazsın, setElementData kullanmak zorundasın. (Tablolar ile ElementData sınıfları için wiki üzerinde araştırma yapabilirsin ikisinin depolandığı kısımlar farklı)
Ben bir elementin üzerine depoladığım elementi daha hızlı getirebilirim, bir fonksiyonla işleyebilir ve ardından kullanıcıya sunabilirim ve ancak sen bunların her biri için ayrı ayrı fonksiyon yazmak zorundasın.

Örnekler için alta iki adet kod bıraktım;


Dinamik SQLite sınıfı;
Kod
database = setmetatable({}, {
    __newindex = function(t, k, v)
        if type(v) == 'function' then
            rawset(t, k, v)
            return
        end
        v[2] = 'database/storage/'..k..'.db';
        v.dbElement = Connection(unpack(v))
       
        rawset(t, k, v)
    end
})

function database:pull(name, isElement)
    if isElement then
        return self[name].dbElement or false
    end
    return self[name] or false
end

function database:create(name, credentials, callback)
    self[name] = self[name] or credentials or error('Beklenmedik bir hata oluştu') --> if not connection then create new connection to /storage/[...].db

    local __assign = self[name]; --> declare variable
    function __assign:build(n, t) --> for create tables inside;
        n = n or error('Args error!')
        t = t or error('Args error!')

        local queryString = 'CREATE TABLE IF NOT EXISTS ? ('
        local sortColumns = {}

        table.foreach(t,
        function(col, row)

            if next(t, col) == nil then
                queryString = queryString .. ' ? ' .. row .. ');'
            else
                queryString = queryString .. ' ? ' .. row .. ','
            end
            table.insert(sortColumns, col)
        end)
       
        self.dbElement:query(
        function(qh, err)
            local res, _, err = qh:poll(0)
        end,
        self.dbElement:prepareString(queryString, n, unpack(sortColumns))

    return self
    end

    function __assign:query(string, args, callback)
        self.dbElement:query(
        function(qh, err)
            local res, rows, err = qh:poll(0)
            callback(res, rows, err)
        end, self.dbElement:prepareString(string, unpack(args)) )
    end

    if callback then
        return callback(self[name].dbElement)
    end

return self[name]
end

Kullanım;
Kod
    --> Create's database connection & creation with table
    database:create('internal', {"sqlite"}, false)
    :build('coins', {
        ['rowid']   = 'INTEGER PRIMARY KEY AUTOINCREMENT',
        ['accName'] = 'TEXT NOT NULL',
        ['amount']  = 'INTEGER NOT NULL'
    })
    :build('skinlist', {
        ['rowid']   = 'INTEGER PRIMARY KEY AUTOINCREMENT',
        ['accName'] = 'TEXT NOT NULL',
        ['skins']   = 'TEXT NOT NULL'
    })

    internal = database:pull('internal')

    internal:query('SELECT * FROM skinlist WHERE accName = ?', {account:getName()},
    function(res, rows, err)
        pl:setData('w:skinlist', res, false)
        triggerClientEvent(pl, 'onClientPlayerWeaponsLoaded', pl, res)
    end)

Yukardaki örneklerdeki gibi metod yazabilmek için metatables'a muhtaçsın.

Dinamik Shader sınıfı;

Kod
shaders = setmetatable({}, {
    __newindex = function(t, k, v)
        if type(v) == 'function' then
            rawset(t, k, v)
            return
        end
       
        v.shader = DxShader('dist/shader.fx')
        rawset(t, k, v)
    end
})

function shaders:create(element)
    self[element] = self[element] or {} or error('Somethings went wrong')
   
    local __assign = self[element];
    function __assign:setValue(...)
        self.shader:setValue(...)
    return self
    end

    function __assign:render()
        self.shader:applyToWorldTexture(element)
    end

    function __assign:pause()
       
    end

return self[element]
end

function shaders:pull(element)
    return self[element]
end

--Shaders:create(localPlayer.vehicle)

Kodlar bana ait olduğundan ötürü burada kalmasında bir sıkıntı yok, umarım örnekler ile durumu pekiştirebilmişsindir dostum Linki görebilmek için Kayıt olun yada Giriş yapın.
"It doesnt even matter"
 


Çevrimdışı Ghostemane

  • real muthaphuckkin' g
  • Acemi Üye
  • *
    • İleti: 179
Yanıtla #8 : 20 Mayıs 2020, 16:49:00
bize birşeyler kattığın için, öğrettiğin için canı gönülden tşk.