Jump to content

Recommended Posts

# السسلام عليكم ورحمة الله وبركاته ~

فـ بهذي الداتا تقدر تسوي اي شي تبيه Element data set / get حبيت اشرح عن الـ

* واشياء تتعلق بها

نبدأ بـ الشرح .... :

# اول شي نتعرف على السينتكس حق الداتا

Syntax

bool setElementData ( element theElement, string key, var value [, bool synchronize = true ] )

var getElementData ( element theElement, string key [, inherit = true] )

توضضيح بسيط للارقمنات ... :

element theElement = الألمنت اللي تبي تحط عليه الداتا

string key = اسم الداتا .. وبأمكانك وضع اي اسم

var value = وهي قيمة الداتا نفسها .. وبامكانك تحط قيمة الداتا اي قيمة بـ راسك او قيمة فعلية كـ انك تحط قيمة الداتا اسم اللاعب ولا اللاعب نفسه وتجيب اللاعب عبر الداتا

# طيب الحين نتعرف على الداتا وش فاديتها فـ وش تسخدم

# الدأتا : هي وظيفة لمساعدتك للتحقق من شرط ما وتسوي كودك + الداتا هي وهمية يعني مجرد ما اللاعب بخرج او يدخل فـ الداتا بتروح والداتا مهمة تفديك فـ اي شي تبغاه

local vehicle = createVehicle ( id, x, y, z )  ---# قمنا بـ صنع سيارة جديدة 
setElementData( vehicle, "Anything", true ) ---# وضعنا الداتا على السيارة وقيمة الداتا ترو 
  
addCommandHandler( "GetDataVeh", function ( )  ---# امر جديد بـ الكونسل 
   if ( isElement( vehicle ) ) then  ---# نتحقق من وجود السيارة 
         if not ( getElementData ( vehicle, "Anything" ) == true ) then  ---#  وهذي تعني عكس الشرط اللي مسويه يعني هنا يقول الشرط لو ما كانت الداتا ترو not نلاحظ وجود اول الشرط 
                  outputChatBox( "** Data Not Found" ) ---# لو كانت مو ترو يجي لم يتم ايجاد الداتا 
            else     ----  لو كانت الداتا قيمتها ترو . 
                  outputChatBox( "** Data Found" )  ---# يجي بالشات الداتا موجودة . 
             end 
       end 
end ) 

marker = createMarker ( .... ) 
  
addEventHandler ( "onMarkerHit", marker, function ( element ) 
    if getElementType ( element ) == 'player' then -- نتحقق إن الشي إللي دخل الماركر الي هو لاعب 
        if getElementData ( element, "ZA7F" ) == "MTA" then --- MTA اذا كانت قيمتها  ZA7F نتحقق هنا من الداتا الي هي   
            outputChatBox ( "لقد قمت بالدخول مسبقاً", element ) 
            return 
        else --- # MTA هنا نسوي لو مو مسوين الداتا الي ما ماخذاة قمية 
            setElementData ( element, "ZA7F", "MTA" ) --- # عشان ما يستخدم الماركر مرة ثانية MTA هنا نسوي الداتا قيمتها  
            givePlayerMoney ( element, 100 )  -- نعطي اللاعب 100             
        end 
    end 
end ) 

مثألين بسيطين للتوضيح اكثر مع الشرحح ... :

addEventHandler ( "onClientMarkerHit", marker, function( element )  --- حدث دخول الالمنت للماركر 
    if ( element == localPlayer ) then  --- نتحقق من الشي اللي دخل هل هو لاعب 
         setElementData ( element, "NamePlayer", getPlayerName( element ) ) --- نحط داتا للالمنت اللي دخلت قيمتها اسم اللاعب 
       end 
end ) 

addEventHandler ( "onClientMarkerLeave", marker, function( element )  --- حدث الخروج من الماركر 
    if ( element == localPlayer ) then  --- نتحقق من الشي اللي خرج . 
      if ( getElementData( element, "NamePlayer" ) == getPlayerName( element ) ) then --- نتحقق انه قيمة الداتا اللي على اللاعب اللي خرج انها ع اسمه 
               setElementData ( element, "NamePlayer", nil ) --- لا شي , بدون قيمة ذذ nil نحط قيمة الداتا للاعب اللي خرج  
           end 
       end 
end ) 

.... true - false طبعأ ملأحظين انه بـ اخر مثالين قيمة الداتا هي اسم اللاعب .. يعني مو ضروري تكون قيمة الداتا

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

وفي شي مهم حبيت اوضحه .. انه يمديكـ تحفظ اكثر من قيمة بالداتا كيف ؟ بالتيبل يكون قيمة الداتا تيبل

مثال بسيط ... :

addCommandHandler ( "getPosToData", function (  ) --- # اضافة امر جديد للكونسل 
  if ( getElementData ( localPlayer, "TablePos" ) ) then --- # التحقق من وجود الداتا   
      return outputChatBox ( "Your Position In Data"..unpack ( getElementData ( localPlayer, "TablePos" ) ) ) 
      --- # لو موجودة نسوي مخرج شات ونجيب الاحداثيات  
      --- # طبعا استخدام ان باكـ .. وظيفتها تجيب القيم كلها بالترتيب من الجدول وقيمة الداتا ذي جدول 
  else --- # لو كانت الداتا موب موجودة 
      local x, y, z = getElementPosition ( localPlayer ) --- # جلبنا احداثيات اللاعب 
      setElementData ( localPlayer, "TablePos", { x, y, z } ) --- # سوينا المنت داتا للاعب قيمتها جدول والجدول به احداثيات اللاعب 
     end --- # اغلأق if 
end ) --- # اغلا الفنكشن واغلاق قوس الحدث 

موب ضروري استخدم ان باكـ .. بامكانك تسوي لوب

بس ملاحظة مهمة

Each element that is loaded is able to have element data values attached to it. These are values that can be accessed using a keyword string and directly correspond to the element's attributes in the map file, unless changed via scripting. Element data is a good way to store distributed information you want associated with an element, for example you could use it to associate a score with a player, or a team with a vehicle.

Element data is synchronized between the server and the client. Setting data from any of the two sides will force an update in the other, triggering the corresponding element data change events. This is very useful, as it provides a simple way to keep element properties synced without having to set special events to do it manually. This also means that excessive use of element data to store variables that are not required by both server and client becomes a waste of bandwidth.

Since not all datatypes can be packetized to be transferred, there are some restrictions. The types that cannot be stored as element data are non-element userdata (see MTA Classes), functions and threads. Also, you may not send tables which contain one or more values of any of these types.

وهذا ايضضضا .. :

As element data is synced to all clients, it can generate a lot of network traffic and consume server CPU. Events are much more efficient for sending data from a client to the server only, or from the server to a specific client.

CPU فـ استخدم الداتا ياخذ من الـ ..

لا تستخدمها الا للضرورة .

ووظيفته بسيطة جدا انه وقت الداتا تتغير onElementDataChange : طبعأ مع الداتا يوجود حدث خاص بها وهو

Parameters

string theName, var theOldValue 

نلاحظ انه في عندنا 2 بارتمنت .. الاول هو اسم الداتا اللي تغير _ والثاني قيمة الداتا القديمةة

مع هذأ الحدث لجلب القيمة الجديدة للداتا getElementData البعض يسال انه طيب والقيمة الجديدة للداتا ؟ .. تقوم بأستخدام

Global parameters

source: The source of this event is the element whose element data changed

client: The client global variable is set to the client that called setElementData, or nil if it was called on the server.

sourceResource: The resource which changed the element data. (Only works in versions above 1.3.4-5937)

.. هذي الكتأبات مهمة جدأ .. نشرحها سطر سطر > اول سطر يقول سورس هذا الافنت وش هو ؟ هو الالمنت اللي الداتا عليه وتغيرت _ ممكن يكون لاعب - سيارة الخ

: وهذا ليس خاص بـ الحدث هو موجود بـ اي مكان بس له وظيفة بـ لو تستخدمه بـ هذا الحدث وظيفة مختلفة وهي client السطر الثاني وهو ما يسمى بـ

لو تقوم بأستخدامه تجيب اللاعب اللي غير الداتا .. او الجهة اللي غيرت الداتا ذذ

Only works in versions above 1.3.4-5937 السطر الثالث بسيط جدأ .. هو عبارة عن السكربت اللي فيه الداتا هذي اللي تغيرت > نلاحظ حاط بين قوسين

يعني هذي الخاصية تعمل على اصدار 5937-1.3.4 وما فوق

Cancelling

This event cannot be cancelled using cancelEvent. To reverse the effect, use setElementData with the old value.

setElementData بس تقدر تكنسله بـ طريقة مختلفة بـ استخدام cancelEvent وش يقول هنا ؟ .. هنا يقول ما تقدر تكنسل الحدث بـ استخدم

مثال بسيط للفهم اكثر .. :

addEventHandler( "onElementDataChange", root, function( dataName, OldValue )      ----# اضافة حدث تغير الداتا مع تعريف البارتمنت الاثنين 
   if ( dataName == "Anything" ) then    ----# Anything نتحقق من اسم الداتا اللي تغيرت هل هي 
     if ( source and getElementType( source ) == "vehicle" ) then ----# نتحقق من السورس وانه نوع السورس سيارة 
            setElementData( source, dataName, oldValue ) ----# قمنا بوضع قيمة الداتا اللي تغيرت بـ القيمة القديمة يعني ما تغيرت 
         end 
     end 
end ) 

متعلق بالمثال اللي بأول الشرح onElementDataChange طبعا نسوي مثال بسيط عن

addEventHandler( "onElementDataChange", root, function( dataName, OldValue )      ----# اضافة حدث تغير الداتا مع تعريف البارتمنت الاثنين 
   if ( dataName == "Anything" ) then    ----# Anything نتحقق من اسم الداتا اللي تغيرت هل هي 
     if ( source and getElementType( source ) == "vehicle" ) then ----# نتحقق من السورس وانه نوع السورس سيارة 
          local Nv = getElementData( source, dataName ) ----# قمنا بجلب قيمة الداتا الجديدة 
          outputChatBox( data.." ** Has Been Change From "..OldValue.." To "..Nv, root, 255, 0, 0, true ) ----# نقوم بـ اضهار رسالة للكل ب اسسم الداتا والقيمة القديمة والجديدة 
         end 
     end 
end ) 

وظيفته ازالة الداتا عن الالمنت : removeElementData طبعا بعد ما انتهينا من الحدث هذا .. في اخر شي فنكشن يتعلق بـ الداتا وهو

bool removeElementData ( element theElement, string key )

element theElement, string key = الالمنت اللي بتشيل منه الداتا , اسم الداتا

ممثال بسيط .. :

addCommandHandler( "RemoveMyData", function( player,_,data )  ---- # اضافة امرة للكونسل وتعريف البلير ونسوي فراغ بين الامر والداتا اللي يكتب اسمها 
  if ( data ) then ---- # نتحقق من كتابته لاسم الداتا 
     if ( getElementData( player, tostring( data ) ) ) then ---- # نتحقق من وجود الداتا على اللاعب اللي كتب الامر 
        if ( getElementData( player, tostring( data ) ) ~= nil ) then ---- # او ما لها وجود او تعني لأ شي nil نتحقق انه الداتا قيمتها مو  
                removeElementData( player, tostring( data ) ) ---- # نسوي ازالة للداتا اللي كتبها 
               end 
           end 
       end 
   end 
) 

معلومة مهمة : اخر حد للاحرف 31 حرف للمفتاح #

# واخر شي اقول انه الداتا سهلة جدا .. ومفيدة بـ اشياء كثيرة واكيد بـ تحتاجها يومأ ما .

والسسلأم

Edited by Guest
  • Like 3
Link to comment
  • 2 months later...
  • 3 months later...

مشكور شرح جميل بس عندي سؤال

الحين لو اموت تروح الداتا مني و لما اطلع و اعاود ادخل تروح مني

و

مثال لما اعص على زر ادخل في الداتا طيب ابي لو اعص زر تاني اطلع منها كيف؟؟

و

بنفع اسوي هيك ولا لا

  
setElementData(ZA7F,"Anything",true) 
تسير هيك 
setElementData(ZA7F,true) 
او هيك 
setElementData(ZA7F) 
  

Link to comment
مشكور شرح جميل بس عندي سؤال

الحين لو اموت تروح الداتا مني و لما اطلع و اعاود ادخل تروح مني

و

مثال لما اعص على زر ادخل في الداتا طيب ابي لو اعص زر تاني اطلع منها كيف؟؟

و

بنفع اسوي هيك ولا لا

  
setElementData(ZA7F,"Anything",true) 
تسير هيك 
setElementData(ZA7F,true) 
او هيك 
setElementData(ZA7F) 
  

لو تموت ما تروح منكـ .. بس لو مجرد انك تخرج من السيرفر فـ الداتا تروح

: بالنسبة للزر قيمة الداتا بأمكانك انك تحطها اي شي براسك .. فـ مثلا انت هنا حاطها ترو .. تبي تخرج منها .. تسوي كذا على سبيل المثال

setElementData(ZA7F,"Anything",false) 

ووقت تتجي بتتحق من الداتا انها موجود على اللاعب او انها قيمتها ترو وتسوي كودكـ كذا تسوي

if ( getElementData( .... ) == true ) then 

بـ هالحالة تتحق لو ترو وانت وقت حطيتها فلس يعني كودك ما بصير

اي شي ما فهمته تبي تستفسر عنه .. تفضل .

Edited by Guest
Link to comment

شوف يعني هيك

addEventHandler('onPlayerQuit',root,  
function() 
    local vAcc = getPlayerAccount(source) 
        if not vAcc or isGuestAccount(vAcc) then return end  
                setAccountData(vAcc,'DATA',getElementData ( MRE,"Anything" ) == true) 
    end  
) 
  
addEventHandler('onPlayerLogin',root, 
function(_,acc) 
    local v_Data = getAccountData(acc,'DATA') 
        if ( v_Data ) then  
            setElementData(MRE,"Anything",true) 
        end  
    end 
) 

Link to comment

-- Server Side # 
addEventHandler('onPlayerQuit',root,function() 
    local vAcc = getPlayerAccount(source) 
    local vData = getElementData(source,'Anything') 
        if not ( vAcc ) or not ( vData ) or ( isGuestAccount(vAcc) ) then return end 
            setAccountData(vAcc,'DATA',vData) 
    end 
) 
  
addEventHandler('onPlayerLogin',root,function(_,acc) 
    local v_Data = getAccountData(acc,'DATA') 
        if ( v_Data ) then 
            setElementData(source,'Anything',v_Data) 
        end 
    end 
) 
Link to comment

Serial Data نعم في طريقة وجاهزة .. وهو فنكشن مجنون فيكـ

setSerialData

* واضحة من الاسم

setSerialData(serial , key , value) 

function setSerialData(serial,key,value) 
 if( value and type(serial) == "string") then 
  setElementData(root,serial.."&"..key,value) 
  end 
end 

getSerialData

getSerialData(serial , key) 

function getSerialData(serial,key) 
 if ( key and type(serial) == "string") then 
  value = getElementData(root,serial.."&"..key) 
 end 
 return value 
end 

هو عبارة عن انه الداتا تتخزن على سيريال اللاعب .. والفنكشن جميل جدا بانه جاهز بس عليك تحط الداتا ولو خرج ودخل اللاعب فـ هي محفوظةة .

Link to comment
  • 2 weeks later...

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...