Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 07/06/19 in all areas

  1. Slipe is an open source framework that enables anyone to write scripts for MTA:San Andreas in C# instead of Lua, wrapping all MTA elements and classes and including some .NET Core namespaces. It is based on CSharp.Lua by Yang Huan. Slipe features: Runs on Windows and Linux Built in continuous deployment support with (GitHub) webhooks Object oriented wrappers for all MTA elements Async/await for MTA functions that use callbacks C# style Http requests, sockets and XML methods. Use Visual Studio and its Intellisense Type safety You can find more information about the project on https://prod.mta-slipe.com. Our Discord Our Github The project is still in Alpha, and since it is open source anyone is welcome to contribute
    1 point
  2. بالتوفيق اهنيك والله
    1 point
  3. شيل اللوب من الكودين حط سورس ماله فايدة تقدر تتحقق ان اللاعب وحده معه الداتا مافي داعي تجيب كل اللاعبين سوري ^ صاحب الاسم الجميل ما شفت ردك
    1 point
  4. وش الفكرة من اللوب ؟ ما تحتاجه في هذي الحاله انت مسوي لما يموت اللاعب تحط لوب لكل اللاعبين اللي عندهم داتا ميشن المفروض تحط بدل اللوب تحقق اذا اللاعب اللي مات اللي هو السورس اذا كان عنده داتا ميشن تسوي كودك للسورس فقط مو لكل اللاعبين انت كذا قاعد تطبق الكود على كل لاعب عنده داتا ميشن حتى لو ما كان ميت
    1 point
  5. salhMark = createMarker ( 2022.85474, 1544.96985, 10.82158 -1,'cylinder',2.0, 255, 0, 0, 255 ) addEventHandler( "onClientMarkerHit", salhMark, function ( hitMarker ) local vehicle = getPedOccupiedVehicle( hitMarker ) if hitMarker == localPlayer then if ( vehicle ) then setElementPosition( vehicle, 106.6, 405.99, 1.76 ) end end end )
    1 point
  6. local salhmark = createMarker(-2439.22803, -616.13788, 132.55708, 'cylinder', 2.0, 255, 0, 0, 0) اخر الكود فيه 255,0,0 الون 0 الاخيره ذا الشفاشفيه
    1 point
  7. :سلام ، از کد زیر استفاده کنید function name(thePlayer) local acc = getPlayerAccount(source) local accName = getAccountName(acc) setPlayerName(source, accName) end addEventHandler("onPlayerLogin",getRootElement(),name) function nick() cancelEvent() end addEventHandler("onPlayerChangeNick", getRootElement(), nick) !تشکر فراموش نشه سلام، برای ریسورس Spray میتوانید سایت https://community.multitheftauto.com/ .را برسی کنید و ریسورس های زیادی را پیدا کنید .تشکر فراموش نشه
    1 point
  8. tMensagems = 1 -- TEMPO cont = 1 MensagensInfo = { "Falta 10 Minutos para acabar o Roud.", "Falta 9 Minutos para acabar o Roud.", "Falta 8 Minutos para acabar o Roud.", "Falta 7 Minutos para acabar o Roud.", "Falta 6 Minutos para acabar o Roud.", "Falta 5 Minutos para acabar o Roud.", "Falta 4 Minutos para acabar o Roud.", "Falta 3 Minutos para acabar o Roud.", "Falta 2 Minutos para acabar o Roud.", "Falta 1 Minutos para acabar o Roud.", "Roud Finalizado. X1 de Costas Será iniciado!", } setTimer(function ( ) cont = cont +1 outputChatBox ('#FF0000[INFO]: #FFFFFF'..MensagensInfo[cont] ,getRootElement(),255,255,255,true) end, tMensagems * 60000 , 0)
    1 point
  9. خطوة جيده منك ولكن لأ انصحك بان تقوم بإستنساخ الفكرة وتقوم بنشرها لأن هذا ليس بـ إبداع , الإبداع هو ان تقوم بإضافة افكار من راسك علي السكربت ليصبح عملك افضل بكثير ومرغوب اكثر من العمل الاصلي نفسه وهذه مجرد نصيحه لك بالمستقبل وبالتوفيق لك يابطل
    1 point
  10. https://wiki.multitheftauto.com/wiki/Garage
    1 point
  11. وظيفة triggerLatentClientEvent الكثير منا يتجاهلها ويستخدم triggerClientEvent والفرق اللي بينهم ان triggerClientEvent اسرع في النقل لانها بتحمل الداتا كلها مرة واحدة ولكن triggerLatentClientEvent تاخد وقت ااكثر بقليل جدا من التريقر العادي للنقل 15% CPU ولكن لما تستخدم التريقر العادي هيسحب من ال CPU ولكن بالتريقر ليتينت ما راح يسحب شئ من ال لذالك انصح باستخدام triggerLatentClientEvent بالتوفيق
    1 point
  12. فشخت الرامات يا راجل تقل على البروسيسور ماشي لكن الرامات غالبا للي بيلعبو mta بتبقى 2GB فمتقلش عليها بكل المتغيرات دي يكفيك انك تعمل return getPlayerName(plr),getPlayerSerial(plr) ...etc بالتوفيق
    1 point
  13. جميل لكن لو تسوي تحقق أن اللاعب حي مب ميت + تخليه جدول أفضل .
    1 point
  14. اليوم رجعتلكم بوظيفة جديدة والوظيفة واضحة من اسمها getPlayerInfo - Server side only الحين نجي للساينتكس playername, accountname, serial, ip, money, teamname, vehicle, health, armor, dimension, interior = getPlayerInfo(thePlayer) Source Code : function getPlayerInfo(thePlayer) if isElement(thePlayer) and getElementType(thePlayer) == "player" then local aName = getPlayerName(thePlayer) local aAcc = getPlayerAccount(thePlayer) if not isGuestAccount(aAcc) then aAccName = getAccountName(aAcc) else aAccName = "Guest" end local hisSerial = getPlayerSerial(thePlayer) local aIP = getPlayerIP(thePlayer) local hisMoney = getPlayerMoney(thePlayer) local hisTeam = getPlayerTeam(thePlayer) or false if hisTeam ~= false then hisTeamName = getTeamName(hisTeam) else hisTeamName = "N/A" end if isPedInVehicle(thePlayer) then local theVehicle = getPedOccupiedVehicle ( thePlayer ) hisVehicleName = getVehicleName(thePlayer) else hisVehicleName = "On Foot" end local hisHealth = getElementHealth(thePlayer) local hisArmor = getPedArmor(thePlayer) local hisDimension = getElementDimension(thePlayer) local hisInterior = getElementInterior(thePlayer) else error("Bad Argument At Argument #1 player not found") end return aName, aAccName, hisSerial, aIP, hisMoney, hisTeamName, hisVehicleName, hisHealth, hisArmor, hisDimension, hisInterior end مثال : function getPlayerInfo(thePlayer) if isElement(thePlayer) and getElementType(thePlayer) == "player" then local aName = getPlayerName(thePlayer) local aAcc = getPlayerAccount(thePlayer) if not isGuestAccount(aAcc) then aAccName = getAccountName(aAcc) else aAccName = "Guest" end local hisSerial = getPlayerSerial(thePlayer) local aIP = getPlayerIP(thePlayer) local hisMoney = getPlayerMoney(thePlayer) local hisTeam = getPlayerTeam(thePlayer) or false if hisTeam ~= false then hisTeamName = getTeamName(hisTeam) else hisTeamName = "N/A" end if isPedInVehicle(thePlayer) then local theVehicle = getPedOccupiedVehicle ( thePlayer ) hisVehicleName = getVehicleName(thePlayer) else hisVehicleName = "On Foot" end local hisHealth = getElementHealth(thePlayer) local hisArmor = getPedArmor(thePlayer) local hisDimension = getElementDimension(thePlayer) local hisInterior = getElementInterior(thePlayer) else error("Bad Argument At Argument #1 player not found") end return aName, aAccName, hisSerial, aIP, hisMoney, hisTeamName, hisVehicleName, hisHealth, hisArmor, hisDimension, hisInterior end addCommandHandler("getmyinfo", function(plr) local name, accountname, serial, ip, money, team, vehicle, health, armor, dimension, interior = getPlayerInfo(plr) outputChatBox("Your Name: "..name, plr,255,0,0,true) outputChatBox("Your Account name: "..accountname, plr,255,0,0,true) outputChatBox("Your Serial: "..serial, plr,255,0,0,true) outputChatBox("Your IP: "..ip, plr,255,0,0,true) outputChatBox("Your Money: "..money, plr,255,0,0,true) outputChatBox("Your Team: "..team, plr,255,0,0,true) outputChatBox("Your Vehicle: "..vehicle, plr,255,0,0,true) outputChatBox("Your Health: "..health, plr,255,0,0,true) outputChatBox("Your Armor: "..armor, plr,255,0,0,true) outputChatBox("Your Dimension: "..dimension, plr,255,0,0,true) outputChatBox("Your Interior: "..interior, plr,255,0,0,true) end ) النتيجة : _____________________________________________ ادري ان اغلبكم ما بيتهم للفنكشن ولاكن سويته للأفادة في امان الله
    1 point
  15. cin و get.cin ايش الفرق بين دالة - اولاً خلينا نسوي تجربة ونشرح خطوة بخطوة P ولم يخرج لي X ولكن خرج لي البرنامج قيمة واحد الى هيا P و X كما هما واضح في السكرين ، دخلت قيمتين تتخطى المسافات وتترجم القيم cin تترجم مسافات على اساس انهم قيم ولكن دالة get.cin دالة cin تختلف على دالة get.cin b = " " ; a = "X" ; كاني كتبت b قرأت على اساس انها قيمة مخزونة بال المتغير X P لان المسافة الى سويتها بين P ومسافة ولم تقرأ X قرأت X P ونفس شيء الي صار ب القيم الى ادخلتهم بدون مسافة بيناتهم نشوف النتيجة XP لنفترض مثلاً دخلت cin بعطيكم مثال على دالة ...اتمنى ان اكون وصلت لكم فكرة بطريقة مبسطة واي شيء ما فهمته اكتب لي وانا اشرح لك من جديد واي شيء تبيني اشرحه لك بخصوص السي بلاس بلاس اكتب وما بقصر معك ان شاء الله دمتم سالمين
    1 point
  16. Codeblocks :استخدم محرر ..تعلم اساسيات وهذه نصيحتي لك انك تكون صبور ولا تفقد الامل في اول محاولاتك كلنا نفشل في محاولات ولكن بالصبر وابذال مجهود نتطور بالتوفيق
    1 point
  17. من احد أهم الوظائف, ولكن للأسف الكثير منا يجهلها الا وهي: addDebugHook تسنح هذه الوظيفة لك بالإمكانية معرفة عند استخدام الوظيفة الفلانية في اي مود كان. وتسمح لك بمعرفة الاحداث التي استخدمت بأي مود كان يمكنك تخطي الأحداث والوظائف باسترجاع قيمة skip مثال على الوظيفة addDebugHook( "preFunction", onPreFunction, {"createVehicle"} ) function onPreFunction( _, _, _, _, _, ... ) local args = { ... } if( args[1] == 411 )then return "skip" end end النتيجة: سيتم الغاء اي محاولة لصنع سيارة بالأيدي 411, والتي هي الأنفرس
    1 point
  18. انظر ياصديقي . . لايوجد شئ صعب مادام انك تتبع نفسك وماتبي تصير احد ثاني ماتبي تصير شخصية اخري! لأن كل شخص يبرع في " مجاله " فحدد مجالك ابدأ بالاساسيات ومهما كانت اللغة البرمجية لاتستهن بالاساسيات خذ وقتك جدا في تعلم الاساسيات حتي تتمكن من الاساس كليًا. بعدها تعلم المجال الذي تريد تعلمه في اللغه ! ولا تستبق الاحداث وتنظر الي النتائج . . . لا تسأل كثيُرا فقد اقرأ وتعلم من ما تقرأه.
    1 point
  19. السلام عليكم ورحمة الله وبركاته طبعا اليوم معنا سكربت جميل لمراقبة السيرفر عند دخولك اليه معنا سكربت مراقبة الشات .. او بمعنى اصح .. لوق الشات جميع الحصريات تجدونها في الفيديو * لا تنسوا دعمي بالايك والاشتراك . ______________________________________________ الاهدائات @+1HidroNex @#[K]iLLeR<3 @Mr_SnipeR<3 @!#NssoR_) @JN[T]OoOoL @RoSsi @N3xT @*RayaN-Alharbi @بويكا @KhaledAlamri ولكل من يضع تعليق ولمن لم يضع ايضا تعليق ___________________________________________ في أمان الله
    1 point
  20. guiMoveElement السلام عليكم ورحمة الله وبركاته مش عارف اذا كان حد عمل الفكرة قبل كدة ولا لا لأني مش متابع المهم الفكرة بسيطة جداً وعبارة عن نقل العنصر بطريقة moveObject - الوظيفة كلاينت فقط - التركيبة guiMoveElement ( element guiElement, int time, float targetx, float targety [, string strEasingType ] ) -- guiElement -- العنصر الذي تريد تحريكه -- time -- الوقت اللازم لإتمام الحركة -- targetx , targety -- احداثيات الموقع الجديد الذي تريد تحريك العنصر اليه -- strEasingType -- نوع الحركة -- رابط انواع الحركة -- https://wiki.multitheftauto.com/wiki/Easing السورس كود function guiMoveElement ( element, speed, x, y, type_ ) local type_ = type_ or "Linear" if isElement ( element ) and tonumber ( speed ) and tonumber ( x ) and tonumber ( y ) and tostring ( type_ ) then if isElement ( getElementData ( element, "object" ) ) then local object = getElementData ( element, "object" ) moveObject ( object, speed, x, y, -999, 0, 0, 0, type_ ) local destroy = function ( old_object, old_gui ) if isElement ( old_object ) then destroyElement ( old_object ) end for i, gui_elements in ipairs ( table_ ) do if gui_elements[1] == old_gui then table.remove ( table_, i ) end end end setTimer ( destroy, speed, 1, object, gui_element ) else local p = { guiGetPosition ( element, false ) } local object = createObject ( 902, p[1], p[2], -999 ) setElementData ( element, "object", object ) setElementAlpha ( object, 0 ) table.insert ( table_, (#table_)+1, { element, object } ) guiMoveElement ( element, speed, x, y, type_ ) end end end function r () for i, gui_element in ipairs ( table_ ) do if isElement (gui_element[1]) and isElement (gui_element[2]) then local x, y = getElementPosition ( gui_element[2] ) guiSetPosition ( gui_element[1], x, y, false ) end end end addEventHandler ( "onClientRender", root, r )
    1 point
  21. سلام عليكم جبتلكم وظايف ما ادري بتفيدكم او لا لكن خلنا نشوف اول واحده dxDrawLiendText function dxDrawLiendText(text, x, y, width, height, color, widthofline,colorofline,textcolor,textsize, postGUI ) local finalx=x+width local textcolor=textcolor or tocolor(255,255,255,255) local textsize=textsize or 1.3 local colorofline=colorofline or tocolor(255,255,255,255) local finaly=y+height local widthofline=widthofline or 2 dxDrawLine ( x, y, finalx, y, colorofline, widthofline, postGUI ) -- Top dxDrawLine ( x, y, x,finaly, colorofline, widthofline, postGUI ) -- Left dxDrawLine ( finalx, y, finalx,finaly, colorofline, widthofline, postGUI ) -- Right dxDrawLine ( x, finaly, finalx, finaly, colorofline, widthofline, postGUI ) -- Bottom return dxDrawText(text,x,y,finalx,finaly,textcolor,textsize,"default",'left','top',true,false,postGUI) end الثانية dxDrawLiendAndBackgroundText function dxDrawLiendAndBackgroundText(text, x, y, width, height, color, widthofline,colorofbackground,colorofline,textcolor,textsize, postGUI ) local finalx=x+width local textcolor=textcolor or tocolor(255,255,255,255) local colorofbackground=colorofbackground or tocolor(0,0,0,150) local textsize=textsize or 1.3 local colorofline=colorofline or tocolor(255,255,255,255) local finaly=y+height local widthofline=widthofline or 2 dxDrawRectangle ( x, y, width,height, colorofbackground,postGUI) ---Background dxDrawLine ( x, y, finalx, y, colorofline, widthofline, postGUI ) -- Top dxDrawLine ( x, y, x,finaly, colorofline, widthofline, postGUI ) -- Left dxDrawLine ( finalx, y, finalx,finaly, colorofline, widthofline, postGUI ) -- Right dxDrawLine ( x, finaly, finalx, finaly, colorofline, widthofline, postGUI ) -- Bottom return dxDrawText(text,x,y,finalx,finaly,textcolor,textsize,"default",'left','top',true,false,postGUI) end وبس بالتوفيق انا ما جربتها صراحه لكن جت في مخي سويتها وانا جالس يا ليت اللي يقدر يجربها ويصورها ويحطها هنا اكون شاكر له بالتوفيق
    1 point
  22. يمكن قليل إلي يعرفوها for بشرح معلومة عن اللوب :شيء مثل كذا ،for أغلبنا يعرف عن كيف تسوي لوب رقمي باللوب for var = startingIndex, endingIndex, increament_discreament do end ipairsو pairs نستخدمه غالبا مع الوظيفة for ثاني للوب syntax لكن في :وإلي هو for result1, result2, r3, ... in iterator, argument1, arg2 do end تنبيه: ما يصير تحط العملية ... في هذي الحالة، حطيتها لأوضح انك تقدر تستقبل بيانات قد ما تبي والإستقبال هو أنك تستلم البيانات المرجعة من الوظيفة وتحفظها، سواء بمتغير أو جدول. في حالتنا نحفظها في متغيرات لو قلت الكلمة تمرير أعرف أني أقصد هو أنك ترسل بيانات للوظيفة، غالبا البيانات بتحطهم بين الأقواس ،المهم for بمعنى حلقة، هي عبارة عن وظيفة يسموها حلقة لما تستعملها باللوب iterator الـ كيف؟ في هذي الحالة for اولًا لازم نعرف طريقة عمل اللوب ولازم تحط على الأقل متغير واحد ،for في متغيرات لنستخدمها داخل نطاق اللوب interator هو تعريف البيانات المستقبلة من الحلقة in إلي على يسار الكلمة أما إلي على يمينها، تكون أول قيمة هي الحلقة إلي تبي تستدعيها وهي إجبارية لأن اللوب معتمد عليها، فلازم تحطها (أما القيم الباقية فهي البيانات إلي بتمررها للحلقة وقت استدعائها، وتقدر تحط 2 كحد أقصى، ولكن ما بيظهر غلط لو حطيت أكثر، لكن بتم استبعادهم (كأنك ما حطيتهم اوك، في شيء لازم نوضحه هنا متى يتم استدعاء الحلقة؟ أو حتى تُستخدَم كل الذاكرة المتوفرة، في ذاك الوقت، اللوب يوقف، أو أن البرنامج يوقف كله إذا استُخدمَت كل الذاكرة المتوفرة nil ببساطة، يتم استدعائها من بداية اللوب ويتكرر الاستدعاء إلى ما لا نهاية حتى توقف الحلقة عن إرجاع أي قيمة أو ترجع :وهي ،for في آلية معينة يتبعها اللوب أول ما يبدأ اللوب، لوا تستدعي الحلقة مع تمرير لها القيم إلي بعدها إذا وجد، ولما تنتهي الحلقة من التنفيذ، القيم إلي رجعتها الحلقة، لوا تعرفهم بالمتغيرات إلي حطيتهم على اليسار، ولازم تعرف أن أي قيمة زايدة سيتم استبعادها، بمعنى مثلا لو حطيت متغيرين والحلقة ترجع 3 قيم، القيمة الثالثة سيتم استبعادها، نفس الآلية تحدث مع استقبال عادي لبيانات وظيفة عادية هذا إلي يصير في الدورة الأولى للوب، أما من الدورة الثانية ورايح يصير تغير، وأحتاجك تركز هنا شوي للتوضيح: المقصود بالدورة الثانية هو أن تقوم لوا باستخراج الكود الخاص باللوب للمرة الثانية ،المهم إلي يصير في هذي المرحلة من اللوب هو أن أول قيمة رجعتها الحلقة من قبل في الدورة السابقة (افترض أن الدورة السابقة هي الأولى والحين احنا داخلين بالثانية) يتم إستخدامها كبرامتر ثاني بالاستدعاء الثاني للحلقة طيب والبرامتر الأول؟ (البرامتر الأول هو القيمة إلي حطيتها بعد الحلقة مباشرة (إلي في البداية for result1, result2, r3, ... in iterator, argument1, arg2 do end argument1 فمثلا، بالنسبة لهذا الكود القيمة هي قيمة المتغير طيب وإذا ما حطيتها؟ nil ببساطة، لوا بتعتبرها (الزبدة، الاستدعاء بالدورة الأولى للحلقة يكون كذا (لو افترضنا iterator(argument1, arg2) من الدورة الثانية ورايح يكون الاستدعاء كذا iterator(argument1, result1) يكون كذا argument1 لو مافي iterator(nil, result1) بنوضح كل هذا الكلام بتطبيقات function enumerateToHundred(_, number) if number == nil then number = 0 end if number < 100 then number = number + 1 return number end end for number in enumerateToHundred do print("Current number is: " .. number) end لو جربت هذا الكود، راح يحسب لك من الواحد للمئة وش إلي يصير بالضبط؟ أولًا، حطيت _ في البرامتر الأول للحلقة، لأن هذا يعبر عن القيمة الثانية (القيمة الأولى هي الحلقة)، وبما أن القيمة الثانية ثابتة ما تتغير من بداية اللوب، فأنا ما ابيها (عادة المبرمجين يحطون _ عشان يتفادون اي قيمة ما يبونها، لأن ماله داعي يحطون اسم معين)، في هذي الحالة، أنا ابي القيمة الثالثة إلي اقدر اغيرها كيف ما ابي، وإلي ترجع لي قيمتها السابقة (مو شرط، لكن ما دام أني ارجعها هي نفسها فترجع لي قيمتها السابقة) عشان اقدر ازود عليها وارجعها من جديد، وهكذا المهم، إلي يصير هو :وبدون تمرير أي قيمة، الاستدعاء (كافتراض) بكون شيء مثل كذا enumerateToHundred اللوب بالدورة الأولى يستدعي الحلقة local number = enumerateToHundred(nil, nil) فبالتالي الشرط بيتحقق وبتصير قيمته صفر، بعدها نتحقق أنه أقل من مئة، وإلي شيء طبيعي بيتحقق، ونزود عليه واحد، فبصير واحد، ونرجعه ،nill هي number لأن قيمة المتغير تمام، هذا في المرة الأولى الرقم يكون واحد nil من اللوب الثاني ورايح يتم اتباع طريقة مختلفة شوي، إلي هي ياخذ أول قيمة مرجعة ويحطها بالبرامتر الثاني، أما البرامتر الأول، فهو القيمة الثانية، وبما أنها غير موجودة، بتكون قيمتها وبكون شيء مثل كذا local number = enumerateToHundred(nil, 1) بنفس الآلية، يستدعي الحلقة، وينفذ الكود، وتقدر تتوقع أن النتيجة بتكون اثنين من الكود ويستمر هذا الشيء، حتى يوصل للدورة رقم 101 قبل ما ينفذها، الرقم السابق أكيد بكون 100 وبكون شيء مثل كذا local number = enumerateToHundred(nil, 100) هنا يتم استدعاء الحلقة، وفقًا للكود، الشرط ما يتحقق، إلي هو أن 100 أقل من 100، وبذلك، الوظيفة ما ترجع شيء، ويوقف اللوب وصلنا لنهاية الشرح تقريبًا، عسى ما طولنا عليكم هذا الكلام يشرح الطريقة هذي بعمل اللوب local t = { 1, 2, 3 } for key, value in next, t do print(key, value) end (next هو نفسه pairs لأن اصلًا الـ) pairs هذي الطريقة نفسها بالضبط بطريقة الـ next للي ما يعرف وش تسوي الوظيفة ببساطة، ترجع لك المفتاح والقيمة إلي بعد مفتاح معين في الجدول Syntax: object key, object value next(table[, object key]) table = الجدول إلي تبي تطبق عليه الوظيفة key = المفتاح إلي تبي تجيب المفتاح إلي بعده وقيمته، لو ما خليته، برجع أول مفتاح بالجدول يعني كائن، والمعنى منه هو أي نوع من البيانات object :ملاحظة ملاحظة: مو دائمًا تقدر تعرف ترتيب المفاتيح، الترتيب بالكود ما بسوي شيء، حطيت ذا اول أو حطيت ذاك أخير، يمكن الأخير يطلع الأول تقدم المفاتيح الرقمية على أنواع أخرى، (بس لكن لو حطيتهم بالترتيب في الجدول من البداية، وبعدها حطيت المفاتيح من الأنواع الثانية)، لو سويت شيء، مثل مفتاح رقمي أول وثالث وفي نصهم من نوع ثاني، بتصير خربطة next في العادة الوظيفة ،المهم الحين بنشرح آلية عمل هذا الكود local t = { 1, 2, 3 } for key, value in next, t do print(key, value) end :ما بطول كثير هنا، إلي يصير ببساطة كذا :المرة الأولى local key, value = next(t, nil) يرجع المفتاح 1 والقيمة 1 :المرة الثانية local key, value = next(t, 1) :المرة الثالثة local key, value = next(t, 2) :المرة الرابعة local key, value = next(t, 3) ويوقف اللوب nil ترجع next المرة الرابعة، بعد المفتاح 3، مافي مفتاح ثاني، فالحلقة next فمثل ما قلت لكم، هي نفسها pairs أما بالنسبة لـ nilوالجدول و next الوظيفة ترجع لك الوظيفة ،pairs لما تستخدم الوظيفة ،فيعني لما تسوي كذا local t = { 1, 2, 3 } for key, value in pairs(t) do print(key, value) end أنت كأنك مسوي كذا local t = { 1, 2, 3 } for key, value in next, t, nil do print(key, value) end ما فرق هنا ما تأثر، سواء حطيتها ولا لا nil ملاحظة: الـ pairs هذي وظيفة سهلة، لكنها تتبع آلية مختلفة عن ipairs وبالنسبة لـ :آلية عملها كالتالي function _pairs(table) return function(table, index) index = index + 1 local value = table[index] if value then return value end end, table, 0 end وأعتقد أن تنطيل طرحها من قبل وخلص الموضوع، لول .إذا ما فهمت ارجع أقرأ مرة ثانية، شيء عادي إذا ما فهمت من اول مرة
    1 point
  23. السلام عليكم ورحمة الله وبركاتة Lua هذا القسم مخصص فقط للمشاكل و الشروحات المتعلقة باي لغة برمجية بإستثناء قوانين هذا القسم كالتالي : يرجي عدم إنشاء موضوع واحد لجميع المشاكل , علي سبيل المثال ( اي مشكلة لديك يمكنك الإستفسار عنها بهذا الموضوع ) وما الي ذلك و هكذا ( Java - ممكن مساعده؟ ) يجب وضع اسم اللغة التي تواجه فيها مشكلة بجانب اسم الموضوع , علي سبيل المثال في حال تمت الإفادة وبعد فترة من الوقت تريد الإستفسار عن سؤال اخر بنفس اللغة البرمجية يرجي منك إنشاء موضوع اخر وعدم التكمله بنفس الموضوع السابق * القوانين قابلة للتعديل في اي وقت ونرجو منكم الإلتزام بقوانين القسم وبالتوفيق للجميع
    1 point
×
×
  • Create New...