#DRAGON!FIRE Posted July 12, 2013 Share Posted July 12, 2013 (edited) # السسلام عليكم ورحمة الله وبركاته ~ فـ بهذي الداتا تقدر تسوي اي شي تبيه 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 July 25, 2014 by Guest 3 Link to comment
./BlackBird# Posted July 12, 2013 Share Posted July 12, 2013 مشكور شرح رائع بس لو انك شرحت اكوانت داتا كان اكتمل الشرح ^^ مع انهم زي بعض Link to comment
PaiN^ Posted July 12, 2013 Share Posted July 12, 2013 شرحك رآئع وجميل ومفهوم لآهنت عالموضوع يا بطل Link to comment
فاّرس Posted July 12, 2013 Share Posted July 12, 2013 شرح واضح ومفهوم , يعطيك العافيه Link to comment
#DRAGON!FIRE Posted July 12, 2013 Author Share Posted July 12, 2013 # : - مشـكورين على الردود # : - بالنسبة للاكاونت داتا نششالله نسوي شرح عنها بس قلت نخلي الشرح ذا خاص بالداتا . Link to comment
aL.Kfo Posted October 10, 2013 Share Posted October 10, 2013 امااااااا الموضوع من لارمضان ومافيه الا 3 ردود لا هنت ع الششرح صراحه يبي له جلسسه و افهمه صح الحين دايخ سهران Link to comment
shwaeki Posted February 12, 2014 Share Posted February 12, 2014 مشكور شرح جميل بس عندي سؤال الحين لو اموت تروح الداتا مني و لما اطلع و اعاود ادخل تروح مني و مثال لما اعص على زر ادخل في الداتا طيب ابي لو اعص زر تاني اطلع منها كيف؟؟ و بنفع اسوي هيك ولا لا setElementData(ZA7F,"Anything",true) تسير هيك setElementData(ZA7F,true) او هيك setElementData(ZA7F) Link to comment
#DRAGON!FIRE Posted February 12, 2014 Author Share Posted February 12, 2014 (edited) مشكور شرح جميل بس عندي سؤالالحين لو اموت تروح الداتا مني و لما اطلع و اعاود ادخل تروح مني و مثال لما اعص على زر ادخل في الداتا طيب ابي لو اعص زر تاني اطلع منها كيف؟؟ و بنفع اسوي هيك ولا لا setElementData(ZA7F,"Anything",true) تسير هيك setElementData(ZA7F,true) او هيك setElementData(ZA7F) لو تموت ما تروح منكـ .. بس لو مجرد انك تخرج من السيرفر فـ الداتا تروح : بالنسبة للزر قيمة الداتا بأمكانك انك تحطها اي شي براسك .. فـ مثلا انت هنا حاطها ترو .. تبي تخرج منها .. تسوي كذا على سبيل المثال setElementData(ZA7F,"Anything",false) ووقت تتجي بتتحق من الداتا انها موجود على اللاعب او انها قيمتها ترو وتسوي كودكـ كذا تسوي if ( getElementData( .... ) == true ) then بـ هالحالة تتحق لو ترو وانت وقت حطيتها فلس يعني كودك ما بصير اي شي ما فهمته تبي تستفسر عنه .. تفضل . Edited September 11, 2014 by Guest Link to comment
shwaeki Posted February 12, 2014 Share Posted February 12, 2014 اها يعني ما دخل زي الاكود false--مطفي true --شغال MTA بس المهم التحقق يعني زي ما سوت انتا فوق Link to comment
#DRAGON!FIRE Posted February 12, 2014 Author Share Posted February 12, 2014 اها يعني ما دخل زي الاكود false--مطفي true --شغال MTA بس المهم التحقق يعني زي ما سوت انتا فوق يب .. الداتا تقدر لها اي قيمة مو ضروري ترو و فلس اي قيمة براسك تحطها Link to comment
shwaeki Posted February 12, 2014 Share Posted February 12, 2014 طيب عشين اذا ابي احطها في الكلن يلي عص على الزر كيف احطها getLocalPlayer() ولا اشي تاني و لو سيرفر ايش احطها Link to comment
#DRAGON!FIRE Posted February 12, 2014 Author Share Posted February 12, 2014 طيبعشين اذا ابي احطها في الكلن يلي عص على الزر كيف احطها getLocalPlayer() ولا اشي تاني و لو سيرفر ايش احطها getLocalPlayer( ) = localPlayer Client setElementData(localPlayer,"Anything",false) وسيرفر على حسب كودكـ . Link to comment
shwaeki Posted February 16, 2014 Share Posted February 16, 2014 بسالكم سؤال في طريقة انو اخلية لو دخل و طلعنحفظ الداتا معة Link to comment
al-Kobra Posted February 16, 2014 Share Posted February 16, 2014 بسالكم سؤال في طريقة انو اخلية لو دخل و طلعنحفظ الداتا معة setAccountData Link to comment
shwaeki Posted February 16, 2014 Share Posted February 16, 2014 طيب كيف استدخدمة مع setAccountData Link to comment
al-Kobra Posted February 16, 2014 Share Posted February 16, 2014 viewtopic.php?f=164&t=62247 تقدر تستخدمها بدال الالمنت داتا او استخدم executeSQLQuery طبعا هي الافضل في الحفظ ^ Link to comment
shwaeki Posted February 16, 2014 Share Posted February 16, 2014 شوف يعني هيك 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
al-Kobra Posted February 16, 2014 Share Posted February 16, 2014 انت مسوي داتا حق ويش ؟ Link to comment
shwaeki Posted February 16, 2014 Share Posted February 16, 2014 وظيفة اذا طلع و عاود دخل يرجعة على الداتا Link to comment
فاّرس Posted February 16, 2014 Share Posted February 16, 2014 -- 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
#DRAGON!FIRE Posted February 17, 2014 Author Share Posted February 17, 2014 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
#DRAGON!FIRE Posted February 27, 2014 Author Share Posted February 27, 2014 # Updated Link to comment
Mostafa,) Posted February 27, 2014 Share Posted February 27, 2014 ما فهمت قيمه الي بل داتا Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now