Jump to content

#CroSs

Members
  • Posts

    275
  • Joined

  • Last visited

  • Days Won

    2

Everything posted by #CroSs

  1. التعليق يوضح لك وش كنت تبي تسوي بالضبط، أما التاب هو مجرد تنظيم حق لا ينلحس مخك من الكود
  2. اذا انت مو صبور حق تحط تاب بس، بتصبر تحط تعليق؟ بس اقول يعني لول
  3. ترا كتابة الكود سهلة، الجزء الأصعب هو انك ترجع تقرأه. الخبصة ما بتفيدك بشيء ولا بتخليك ذكي اكثر. على الأقل تنظيمه بساعد في قابلية القراءة مع أن التعليقات هي الي لها التأثير الأكبر، خاصة اذا كان الكود معقد وقف عن تطوير مود معين، وارجع له بعد مدة، شوف اذا قدرت تفهم وش كنت مسوي يمكن صح كلامك، عدم التنظيم يدل على الذكاء، لكن في البرمجة هذا شيء مختلف تماما
  4. حسب الخطأ، الوظيفة غير معرفة
  5. false اخر كود المفروض يكون كذا، عشان ما يفشل التحقق مع قيم ال function _pairs(table) return function(table, index) index = index + 1 local value = table[index] if value ~= nil then return index end end, table, 0 end
  6. يمكن قليل إلي يعرفوها 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 وأعتقد أن تنطيل طرحها من قبل وخلص الموضوع، لول .إذا ما فهمت ارجع أقرأ مرة ثانية، شيء عادي إذا ما فهمت من اول مرة
  7. التحقق غلط يصير كذا if not ( getResourceState( resource ) == "running" ) then أو كذا if getResourceState( resource ) ~= "running" then أول بعدين بتقارن القيم not لأن لوا بتنفذ عملية الـ مثال --* .أو العكس false إلى true تقلب القيمة من not ملاحظة: الـ --* .nil و false ما عدى true ملاحظة: جميع أنواع البيانات في لوا تعبر عن --:مثال1 print( not "stopped" == "running" ) --* .(not "stopped") not أول شيء لوا بتنفذ عملية الـ --* .(false) فـ راح ترجع العكس nil أو false لأنه مو true يعبر عن string نوع البيانات --* .أول not بسبب انه نفذ العملية false وبالنهاية برجع false == "running" فالتحقق يصير بهذا الشكل false رجعت not الحين يتحقق، بما أن العملية --:مثال2 print( not ( "stopped" == "running" ) ) --* .القوس في هذي الحالة يحدد أولية تنفيذ العمليات --* .false بين أقواس فالأولية حقها، فـ راح ينفذها بالأول ويرجع "stopped" == "running" بما أن العملية --* .true وبالنهاية برجع not false ويقلب القيمة إلي رجعها التحقق، فـ راح يصير كذا not الحين ينفذ العملية --* THE END. عشان كذا تحط اقواس حق تحدد الأولية بالتنفيذ . أتمنى وصلت المعلومة
  8. لو شلت الباند حقه قبل ما يطرده السيرفر ما راح يطرده ض2 addDebugHook انصحك باستخدام الوظيفة الخ.. وتسوي لها تخطي kickPlayer, addBan, banPlayer حق تكشف عن اي محاولة لاتصال لوظيفة معينة مثل :مثال للحماية من الكيك باستخدام الوظيفة local Serials = { -- السيريالات المحمية } addDebugHook( "preFunction", function( SourceResource, FunctionName, IsAllowedByACL, LuaFilename, LuaLineNumber, Player, ResponsiblePlayer ) if ( SourceResource ~= resource and IsAllowedByACL and isElement( Player ) and getElementType( Player ) == "player" and Serials[getPlayerSerial( Player )] ) then if ( isElement( ResponsiblePlayer ) and getElementType( ResponsiblePlayer ) == "player" and not Serials[getPlayerSerial( ResponsiblePlayer )] ) then banPlayer( ResponsiblePlayer, false, false, true, nil, nil, 0 ) end return "skip" end end, { "kickPlayer" } )
  9. مو ذاك الزود ولا كنت عرفت الخطأ في الكود Lua مبين أن مستواك في ...حق تعرف تسوي كود بعدها تعلم كيف تسوي مود في اللعبة و وش تسوي كل وظيفة الخ Lua خذها نصيحة مني اول شيء تعلم لغة
  10. getAccountsBySerial افرض انه خاش بجهاز آخر المفروض يكون عنده حساب بالجهاز الآخر
  11. function GetPlayerWeapons( Player ) local Weapons = {} for WeaponSlot = 1, 12 do local Weapon = getPedWeapon( Player, WeaponSlot ) if ( Weapon ~= 0 ) then Weapons[WeaponSlot] = { ID = Weapon, Ammo = getPedTotalAmmo( Player, WeaponSlot ) } end end return Weapons end function GivePlayerWeapons( Player, WeaponsTable ) for WeaponSlot = 1, 12 do local Weapon = WeaponsTable[WeaponSlot] or WeaponsTable[tostring( WeaponSlot )] if ( Weapon ) then giveWeapon( Player, Weapon["ID"], Weapon["Ammo"], true ) end end end local Players = getElementsByType( "player" ) for Index = 1, #Players do local Player = Players[Index] local PlayerAccount = getPlayerAccount( Player ) takeAllWeapons( Player ) if ( not isGuestAccount( PlayerAccount ) ) then local Weapons = getAccountData( PlayerAccount, "Weapons" ) if ( Weapons ) then GivePlayerWeapons( Player, fromJSON( Weapons ) ) end end end addEventHandler( "onPlayerLogin", root, function( _, Account ) takeAllWeapons( source ) local Weapons = getAccountData( Account, "Weapons" ) if ( Weapons ) then GivePlayerWeapons( source, fromJSON( Weapons ) ) end end ) function SavePlayerWeapons( Account, _, _, Player ) local Boolean, Player = eventName == "onPlayerLogout", Player or source Account = Boolean and Account or getPlayerAccount( Player ) if ( Boolean or not isGuestAccount( Account ) ) then setAccountData( Account, "Weapons", toJSON( GetPlayerWeapons( Player ) ) ) if ( Boolean ) then takeAllWeapons( Player ) end end end addEventHandler( "onPlayerLogout", root, SavePlayerWeapons ) addEventHandler( "onPlayerQuit", root, SavePlayerWeapons ) addEventHandler( "onResourceStop", resourceRoot, function() local Players = getElementsByType( "player" ) for Index = 1, #Players do SavePlayerWeapons( nil, nil, nil, Players[Index] ) end end ) addEventHandler( "onPlayerWasted", root, function() local Weapons = GetPlayerWeapons( source ) local function GiveWeaponsOnSpawn() GivePlayerWeapons( source, Weapons ) removeEventHandler( "onPlayerSpawn", source, GiveWeaponsOnSpawn ) end addEventHandler( "onPlayerSpawn", source, GiveWeaponsOnSpawn ) end )
  12. marker = createMarker( 295.58554, -80.14142, 1001.51563, "cylinder", 1.5, 255, 255, 0, 155 ) setElementInterior( marker, 4 ) addEventHandler( "onClientMarkerHit", marker, function( HitPlayer ) if ( HitPlayer == localPlayer ) then -- Your Code ... end end )
  13. local Gsub = string["gsub"] addEventHandler( "onClientGUIChanged", resourceRoot, function() local Boolean = source == moneyEdit return ( Boolean or source == Name ) and guiSetText( source, Boolean and ( tonumber( Gsub( guiGetText( source ), "%D", "" ).."" ) or "" ) or Gsub( guiGetText( source ), "[^!\"#%$%%&\'%(%)%*%+,%-%./0123456789:;<=>%?@ABCDEFGHIJKLMNOPQRSTUVWXYZ%[\\%]%^_`abcdefghijklmnopqrstuvwxyz{|}~]", "" ) ) end ) addEventHandler( "onClientGUIClick", sendMoney, function() local GuiMessages, Amount, Player = exports["guimessages"], tonumber( guiGetText( moneyEdit ) ), getPlayerFromName( guiGetText( Name ) ) local Boolean = Player and Player ~= localPlayer if ( Player and Amount and Boolean and getElementData( localPlayer, "J" ) >= Amount ) then triggerServerEvent( "HiEto", localPlayer, Player, Amount ) return GuiMessages:outputClient( "The Money Has Been Sent Successfully." ) end GuiMessages:outputClient( Player and ( Amount and ( Boolean and "You Don't Have Enough Money" or "You Can't Send To Youself." ) or "Invalid Amount." ) or "Player Not Found." ) end, false )
  14. addEventHandler( "onClientGUIClick", GUIEditor.button[1], function() local SelectedWeather, SelectedTime = guiGridListGetSelectedItem( GUIEditor.gridlist[1] ), guiGridListGetSelectedItem( GUIEditor.gridlist[2] ) if ( SelectedWeather ~= -1 ) then setWeather( guiGridListGetItemData( GUIEditor.gridlist[1], SelectedWeather, 2 ) ) end if ( SelectedTime ~= -1 ) then setTime( guiGridListGetItemData( GUIEditor.gridlist[2], SelectedTime, 2 ), 0 ) end end )
  15. شكراً جداً لك لكن سؤال كيف اسوي احد انواع الداتا تيجي قليل ونوع يجي اغلب الاحيان اممم ممكن تسوي كذا local Drugs = { "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "Weed", "God", "Speed", "LSD", "Steroids", "Heroin" }
  16. local Drugs = { "Weed", "God", "Speed", "LSD", "Steroids", "Heroin" } addEventHandler( "onPlayerWasted", root, function( _, Killer ) if ( Killer and Killer ~= source and getElementType( Killer ) == "player" ) then local Drug = Drugs[math.random( 6 )] setElementData( Killer, Drug, ( getElementData( Killer, Drug ) or 0 ) + math.random( 3 ) ) end end )
  17. local Drug = ( { "Weed", "God", "Speed", "LSD", "Steroids", "Heroin" } )[math.random( 6 )] addEventHandler( "onPlayerWasted", root, function( _, Killer ) if ( Killer and Killer ~= source and getElementType( Killer ) == "player" ) then setElementData( Killer, Drug, ( getElementData( Killer, Drug ) or 0 ) + math.random( 3 ) ) end end )
  18. . يسحب ، مجربه أنا
  19. جرب function CheckPlayer( Player ) local Group = aclGetGroup( "VIP" ) if ( Group ) then local PlayerAccount = getPlayerAccount( Player ) if ( not isGuestAccount( PlayerAccount ) ) then local Object, Boolean = "user."..getAccountName( PlayerAccount ), getElementData( Player, "PoliceKing" ) local Exists = isObjectInACLGroup( Object, Group ) if ( Boolean and not Exists or not Boolean and Exists ) then ( Boolean and aclGroupAddObject or aclGroupRemoveObject )( Group, Object ) end end end end for _, Player in ipairs( getElementsByType( "player" ) ) do CheckPlayer( Player ) end addEventHandler( "onElementDataChange", root, function( DataName ) if ( DataName == "PoliceKing" and getElementType( source ) == "player" ) then CheckPlayer( source ) end end )
  20. أي سكربت مسؤول أن يعطي أسلحة للاعب أو يحفظها ؟ ، اطرح اكواده هنا
  21. طلقات وش ؟ الاسلحة طلقات الأسلحة حق وش ؟ ، وضح ...
×
×
  • Create New...