Jump to content

طلب بسيط


Recommended Posts

السلام عليكم شباب انا شفت بعض السكربتات يجي فيها التيبل زي كذا

ExampleTable = {} 
  
function ()  
    if not ExampleTable[source] then 
        ExampleTable[source] = {} 
    end  
    local car = createVehicle (....) 
    table.insert ( ExampleTable[source], car) 
end  

طبعا الكود ماله داعي ولكن انا اوصل الفكرة كيف يتحقق اذا ماعنده جدول ويسوي جدول ويضيف داخله الموتر وزي كذا ؟

واتمني من اهل الخبره يشرحونه بالتفصيل الممل ويعطونا امثله عليه وشكرا

Link to comment

هذي طريقة مبسطة بشكل بسيط ع اللي سواهـ

سوينا جدول وداخل الجدول جدول للسورس مثلأ

table =  
{  ZA7F = { }, 
   RmDj = { }, } 

وضاف لـ جدول زاحف مثلأ قيمة

table.insert( table[ZA7F], car ) 

اتمنى فهمت هذي طريقة بسيطة جدا .. لو عندك اي اسالة او ما فهمت تفضل قول

Edited by Guest
Link to comment

لا تكون للاعب نفسه .. والمثال اللي عطيتك ما بيشتغل شي اكيد بس انا وضحت لك وش يسوي هو

هذا مثال وجرب .. اكتب اول مرة الكوماند ما يصير شي لانه مو موجود بالتيبل يعني سوا انسيرت .. اكتب مرة ثانية بتلقى اسمكـ - سيريالكـ جا بالشات .

local tablePlayers = {   }; 
  
addCommandHandler( "insert", function (  player  ) 
 if ( tablePlayers[player] ) then 
       return outputChatBox ( "* Your Name in table "..getPlayerName( tablePlayers[player][1] ).." and serial "..getPlayerSerial( tablePlayers[player][1] ).."" , player, 255, 255, 0 ) 
  else  
      tablePlayers[player] = {    } 
      table.insert( tablePlayers[player], player ) 
   end 
end ) 

+ مداكـ تسويها بطريقة ثانية مختصرة اكثر

Link to comment

وعليكم السلام ورحمه الله وبركاته,

اولا عندك خطأ , الوظيفه تحتاج اسم .

ثانيا : هذي تسوي جدول داخل جدول بغرض حفظ قيمه للاعب نفسه ,

كمثال :

t = { 
    t2 = {}; 
} 

كذا انا سويت جدول داخل جدول , وتقدر تضيف قيمه للجدول الثاني.

هذا مثال كامل :

-- Server Side # 
local commander = {} 
  
addCommandHandler('insertMe', function ( player ) 
    if not commander [ player ] then -- اذا لم يكن اللاعب في الجدول 
        commander [ player ] = {}; -- نسوي جدول للاعب 
            table.insert ( commander [ player ], player )  -- نضيف اللاعب داخل الجدوله حقه 
    end 
end) 

طبعا الجدول تقدر تقول صار كذا :

local commander = { 
    TheBest = { player }; 
} 

* TheBest : طبعا ماراح يكون الاسم كذا , فقط للتوضيح , وهو راح يكون اللاعب .

* player : هذي القيمه داخل جدول اللاعب , وهي اللاعب نفسه , وتعتبر القيمه الاولى داخل جدول اللاعب , تقدر تضيف قيم اخرى.

طيب كيف اقدر استدعي اللاعب من الجدول حقه؟

هذا مثال :

-- Server Side # 
addCommandHandler ( 'Health', function ( plr ) 
    if commander [ plr ] then -- نتحقق هل اللاعب عنده جدول ؟ 
        setElementHealth ( commander [ plr ] [ 1 ], 10 ) 
    end 
end) 

* commander -- الجدول الرئيسي.

* [ plr ] -- جدول اللاعب .

* [ 1 ] -- القيمه الاولى من جدول اللاعب.

تقدر تقول وش الفايده من الطريقه ؟ هي مجرد طريقه للحفظ , تحفظ اسم اللاعب او اي شيء .

اتمنى وصلت الفكره .

Link to comment

اخوي ذا بست شرحك 100 % 100 ويدخل العقل ولكن بسالك لو مثلا اذا انا كتبت كلمه وجاء اوبجكت

وكتبت كلمه اخري وجاء اوبجكت ولكن اذا كتبت كلمة يختفي بعطيك مثاال علي كلامي

مثلا انا كتبت الكلمه ذي

door1 تجي بوابه

واذا كتبت

door2 تجي بوابه ثانيه

واذا كتبت

removedoor1 تروح البوابه الاولي

واذا كتبت

removedoor2 تروح البوابه الثانيه كيف ؟

يعني ماني فاهم فكرة كيف ادخل اكثر من قيمة بل جدول وزي كذا وشكرا ع الشرح

Link to comment

شوف حبيبي ذا مثال كل مره يضيف ماركر داخل جدول اللاعب ,

-- Server Side # 
local commander = {} -- جدول عام 
local markers = {} -- جدول للماركرات 
  
addCommandHandler('insertMe', function ( player ) 
    if not commander [ player ] then -- اذا ما كان اللاعب له جدول 
        commander [ player ] = {}; -- نضيف جدول للاعب 
    end 
        local x,y,z = getElementPosition ( player ) 
            markers [ player ] = createMarker ( x, y, z, 'cylinder', 2, 255,0,255, 177 ) 
            table.insert ( commander [ player ], markers [ player ] )  -- نضيف الماركر الي سواه اللاعب , كل ما يسوي ماركر يضيفه بالجدول حق اللاعب 
end) 

يعني تقدر تقول الجدول بيصير كذا لو سويت ثلاثه ماركرات :

local commander = { 
    TheBest = { marker1, marker2, marker3 } 
} 

طيب الحين مثلا ابي احذف الماركرات , هذا مثال :

addCommandHandler ( 'destroyMarker', function ( plr, _, id ) 
    if commander [ plr ]  and id and tostring ( id ) then -- نتحقق هل اللاعب عنده جدول وهل كتب الايدي وهل هو رقم؟ 
        destroyElement ( commander [ plr ] [ tonumber(id) ] ) -- نحذف الماركر حسب الرقم الي كتبه في اف8 , وهو رقم قيمه الماركر داخل الجدول 
        commander [ plr ] [ tonumber(id) ] = nil; -- نحذف القيمه , اشرحها تحت 
    end 
end) 

* commander -- الجدول الرئيسي.

* [ plr ] -- جدول اللاعب .

* [ tonumber(id) ] -- ؟ tostring طبعا ليش استخدمت

.عشان ارقومنت الكوماند يكون سترنق فـ لازم احوله الى رقم , لأن القيمه رقم وليست سلسله نصيه

commander [ plr ] [ tonumber(id) ] = nil;

^ طبعا اعتقد موب واضحه فـ اشرحها بالتفصيل :

* commander -- الجدول الرئيسي.

* [ plr ] -- جدول اللاعب .

* [ tonumber(id) ] -- ؟ tonumber طبعا ليش استخدمت

.عشان ارقومنت الكوماند يكون سترنق فـ لازم احوله الى رقم , لأن القيمه رقم وليست سلسله نصيه

* = nil -- ليش خليت القيمه تساوي نيل ؟ يعني تساوي لا شيء بمعنى الحذف ؟

لأنه لو ما سويت كذا , راح تصير مشاكل وهي :

لو سويت الماركر الاول وسويت ماركر ثاني وماركر ثالث , وحذفتها كلها ,

.destroyMarker 1 ورجعت سويت ماركر آخر , راح تكتب في اف8 كذا

!تتفاجأ انه راح يطلع خطأ بالديبوق , لأن مافيه قيمه

بمعنى ان آخر ماركر سويته بيكون رقمه 4 وليس 1 مع انك حذفتها , فـ لازم تسوي الي انا سويته عشان ترجع القيمه تعد من اول.

اتمنى تكون وصلت الفكره .

Edited by Guest
Link to comment

شككرا اخوي ذا بست افدتني كثيرر جزاك الله خير وشوف هذا الكود صحيح ولا لا مجرد مثال علي الي فهمته

local tablePlayers = {}  
local objects = {} 
  
addCommandHandler('addO', function ( player ) 
    if not tablePlayers [ player ] then  
        tablePlayers [ player ] = {} 
    end 
    local x,y,z = getElementPosition ( player ) 
    objects [ player ] = createObject ( 382,x,y+2,z ) 
    table.insert ( tablePlayers [ player ], objects [ player ] )  
end) 
  
  
  
addCommandHandler('whomach', function ( player ) 
    if ( objects [ player ] ) then 
        outputChatBox('total objects is '..#objects[ player ] ,player) 
    else 
        outputChatBox("you don't have any Objects ",player) 
    end 
end) 
  
  
  
addCommandHandler('delete', function ( player,_,id ) 
    if ( objects [ player ] ) then 
        destroyElement(objects [ player ][id] ) 
        objects [ player ][id] = nil 
    end 
end) 

Link to comment

صحيح .. بس عندك كم خطا .

+ لو ركزت شوية بـ كلامي كان فهمت وركز بالمثال اللي باول الموضوع وجرب المثال الثاني وبتفهم السالفة

بشرح لكـ بالتفصيل

local table = {      }; 

عندكـ ذا التيبل فاضي ..

وجيت تبي تسوي للاعب جدول بـ ذا التيبل

تسوي كذا

table[player] = { } 
---Ex : table[za7f] = { } 

الحين التيبل صار بـ الشكل ذا .. :

local table = {       
  ZA7F = { }, 
}; 

من وين جت ZA7F ؟

يوم سويت table[player] = { }

مو شرط جدول يمديكـ قيمة اي شي

table[player] = true 

عشانكـ حطيت { }

فـ صارت جدول للاعب

وجيت اضفت نفسكـ صار كذا

local table = {       
  ZA7F = { }, 
  RmDj = { }, 
}; 

طبعا اللاعب بالجدول هو مفتاح .. والقيمة حق المفتاح ذي هي القيمة اللي حطيتها فـ يعني قيمة المفتاح لكل لاعب هو الجدول

ومداكـ تحط اللي تبيه بالجدول ذا

مثلأ بتحط تكست لـ مفتاح زاحف ..

table.insert( table[ZA7F], "Test insert To ZA7F Table" ) 

table[ZA7F] = ?

table[ZA7F] = هو الجدول حق مفتاح زاحف ..

يوم صار انسيرت صار القيمة حق مفتاح زاحف كذا ..

local table = {       
  ZA7F = { "Test insert To ZA7F Table" }, 
  RmDj = { }, 
}; 

طيب تبي تضيف قيمة ثانية ثالثة الخ .. يب يمديك تضيف اللي تبي

طيب لو ضفنا شي ثاني .. مثلأ قيمة ترو ..

table.insert( table[ZA7F], true ) 

صار كذا .. :

local table = {       
  ZA7F = { "Test insert To ZA7F Table", true }, 
  RmDj = { }, 
}; 

تبي تحذف اول قيمة بـ جدول حق مفتاح زاحف .. تسوي كذا

table[ZA7F][1] = nil 

table[ZA7F] = جلبنا القيمة حق مفتاح زاحف

[1] = اول قيمة بـ جدول حق مفتاح زاحف

تبي تحذف الثانية

[2]

الثالثة .. :

[3]

وكذأ

تبي تشيل الجدول حق مفتاح زاحف ..

table[ZA7F] = nil 

طبعا تشوفنا نستخدم نل .. مداك تستخدم تيبل ريموف

يعني بـ اختصار

table.remove = nil 

وطبعا نل لها استخدامات اخرى .

Link to comment
شككرا اخوي ذا بست افدتني كثيرر جزاك الله خير وشوف هذا الكود صحيح ولا لا مجرد مثال علي الي فهمته
local tablePlayers = {}  
local objects = {} 
  
addCommandHandler('addO', function ( player ) 
    if not tablePlayers [ player ] then  
        tablePlayers [ player ] = {} 
    end 
    local x,y,z = getElementPosition ( player ) 
    objects [ player ] = createObject ( 382,x,y+2,z ) 
    table.insert ( tablePlayers [ player ], objects [ player ] )  
end) 
  
  
  
addCommandHandler('whomach', function ( player ) 
    if ( objects [ player ] ) then 
        outputChatBox('total objects is '..#objects[ player ] ,player) 
    else 
        outputChatBox("you don't have any Objects ",player) 
    end 
end) 
  
  
  
addCommandHandler('delete', function ( player,_,id ) 
    if ( objects [ player ] ) then 
        destroyElement(objects [ player ][id] ) 
        objects [ player ][id] = nil 
    end 
end) 

عندك اخطاء بسيطه :

* الايدي حق الاوبجكت غلط .

* tablePlayers سطر 17 , المفروض تجيب القيمه داخل الجدول.

* سطر 26 المفروض تتحقق ان اللاعب عنده جدول , لأن لو عنده جدول اكيد بيكون عنده قيمه .

* objects وليس tablePlayers سطر 27 , المفروض تحذف القيمه من الجدول

* سطر 28 , ^ نفس الكلام

* لازم تحولها الى رقم لأنها من الاصل سترنق id , سطر 27 و 28 ,

التصحيح :

-- Server Side # 
local tablePlayers = {} 
local objects = {} 
  
addCommandHandler('addO', function ( player ) 
    if not tablePlayers [ player ] then 
        tablePlayers [ player ] = {} 
    end 
    local x,y,z = getElementPosition ( player ) 
    objects [ player ] = createObject ( 3822 ,x + 10 ,y,z ) 
    table.insert ( tablePlayers [ player ], objects [ player ] ) 
end) 
  
  
  
addCommandHandler('whomach', function ( player ) 
    if ( objects [ player ] ) then 
        outputChatBox('total objects is '..#tablePlayers [ player ], player) 
    else 
        outputChatBox("you don't have any Objects ", player) 
    end 
end) 
  
  
  
addCommandHandler('delete', function ( player,_,id ) 
    if ( tablePlayers [ player ] ) then 
        destroyElement(tablePlayers [ player ][tonumber(id)] ) 
        tablePlayers [ player ][tonumber(id)] = nil 
    end 
end) 
Link to comment

شككرا اخوي ذا بست ولكن انا رقم الاوبجكت عارف انه خطأ جايبه من رأسي انا قلت فقط مثال ض1 وشكرا ع التصحيح مره اخري

وبالنسبة ل اخ زااحف شرحك مفهوم وماااقصرت ي شننب ويعطيك العاافيه ولكن سالفة انك تشيله من التيبل مافهمتها هاذي

table.remove = nil 

يعني شوف كذا

local table = {       
  ZA7F = { }, 
  RmDj = { }, 
}; 

اذا ابي احذف نفسي ابيه يكون بهذا الشكل

local table = {       
  ZA7F = { }, 
}; 

كيف ؟ مافهمتها

Link to comment
شككرا اخوي ذا بست ولكن انا رقم الاوبجكت عارف انه خطأ جايبه من رأسي انا قلت فقط مثال ض1 وشكرا ع التصحيح مره اخري

وبالنسبة ل اخ زااحف شرحك مفهوم وماااقصرت ي شننب ويعطيك العاافيه ولكن سالفة انك تشيله من التيبل مافهمتها هاذي

table.remove = nil 

يعني شوف كذا

local table = {       
  ZA7F = { }, 
  RmDj = { }, 
}; 

اذا ابي احذف نفسي ابيه يكون بهذا الشكل

local table = {       
  ZA7F = { }, 
}; 

كيف ؟ مافهمتها

القصد انه نل .. = ازالة القيمة من الجدول

تيبل ريموف = ازالة القيمة من الجدول

نل تعني انه لا شي او بلا قيمة .. ويوم تستخدم نل بالجداول بيحذف لك القيمة من الجدول

يعني الاثنين يسون نفس الوظيفة تقريبا

لو تبي تشيل نفسكـ من التيبل

table[RmDj] = nil 

بـ هذهـ الطريقة شلت المفتاح حقكـ كله

Link to comment

اها طيب لو بطلعه من التيبل من خلال الكود هذا وبطريقة هاذي

  
function dele(player) 
    if tablePlayers [ player ] then 
        table.remove ( tablePlayers [ player ], player ) 
    end 
end 
addCommandHandler("removeme",dele) 
  

هل الطريقة هاذي صحيحه ؟

Link to comment

لا خطأ ,

حط رقم القيمه , كمثال :

table.remove ( tablePlayers [ player ], 1 ) -- القيمه الاولى 

اما لو تبي تحذف جدول اللاعب ,

tablePlayers [ player ] = nil; 

يصير الجدول كذا :

tablePlayers = {} -- فاضي , الا لو كان فيه اكثر من جدول . 
Edited by Guest
Link to comment

addCommandHandler( "remove", function ( player ) 
   for k, v in ipairs( tablePlayers ) do 
      if ( v == player ) then 
         if ( table.remove( tablePlayers, k ) ) then 
                outputChatBox( "deleted", player ) 
           break 
         end 
      end 
   end   
end ) 
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...