Jump to content

xLive

Scripting Moderators
  • Posts

    458
  • Joined

  • Days Won

    21

Everything posted by xLive

  1. .فنكشن خاص بمدة الدقيقة باللعبة، تخلي قيمته صفر والوقت ماراح يتغير setMinuteDuration .ما اعرف اذا الصراحة انت تطلب الفنكشنات/كيف تسوي الشيء ولا تبي اكواد جاهزة، لأن هدف القناة الاساسي نساعد المبرمجين بالبرمجة، مو نعطيهم اشياء جاهزة .وإذا كان قصدك الثاني انصحك تتعلم ببرمجة، لأن مع الوقت راح تضطر تتعلم أو أحد يسوي الأشياء لك بشكل كامل، لأن ما راح تقدر تبني كل شيء بنسخ ولصق .وفي الأخير براحتك طبعًا، لكن لا تستغرب في حال طلبت شي معين وما احد قرر يساعدك بالتوفيق ماكان موجود أفضل شي تستعمل التايمر وتشغله كل دقيقة setMinuteDuration ملاحظة بسيطة، حاول دائمًا تتجنب إستخدام الرندر بدون لازم لأنه يجلس يستهلك بالمعالج عالفاضي عالسبيل مثال هنا لو %0.1-0.3ممكن حدث الرندر يستهلك لحاله إذا ماكان يسوي شي ipb لأن جرب شيك على سكربت .عاد تخيل سكربتات كثيرة تستعمله بدون حاجة، كم راح توصل النسبة هذي؟ طبعا النتيجة أداء سيء ولاق
  2. setPedStat .الأيدي الخاص بالحد الأقصى للصحة هو 26 والقيمة يلي تحطها هي بين 0-200. الوظيفة مثل ما هي مذكورة بالويكي يمكن إستخدامها في جانب السيرفر سايد فقط بالنسبة للاعبين .ولازم تستعمل هذي الوظيفة بعد القيم مود ما يرسبن الاعب عشان تاخذ التأثير، لأن ممكن القيم مود يلغي التغيير على أي حال، إذا ما خاب ظني قيم مود التكتيك له إعدادات خاصة فيه ومن ضمنها الصحة جرب غيرها من 100 لـ 200
  3. trinf? كودك تمام كذا ومفروض الاعب يقدر يجاوب مرة واحدة ويمديك تحط سؤال آخر.. متأكد ما عندك اكود آخرى في جانب الخادم يعدل متغير نفس الشيء في جانب الكلاينت، هل فيه تحققات حاطها هناك؟
  4. .اطرح كودك، لو سويته تمام مفروض يشتغل، لكن غالبًا فيه شي مسويه خطأ، الأفضل تطرحه عشان نكتشفه لك
  5. تسوي صندوقين كتابة واحد للسؤال والثاني الإجابة، بعد ماترسل القيم للسيرفر عبر التريقر (اتوقع تعرف الشيء هذا صحيح؟) تخرج القيمة الأولى (السؤال) بالشات مثلًا بالنسبة للقيمة الثانية(الجواب) تخليها متغير عام مثل كذا function(question,answer) outputChatBox(question,........) theAnswer = answer -- theAnswer صار متغير عام وتقدر تستخدمه خارج الوظيفة هذي onPlayerChat حاليًا عشان تعرف إذا الاعب كتب شي في الشات عبر حدث راح يعطيك هذا الحدث الرسالة يلي رسلها الاعب قبل ما تتحقق إن الإجابة صحيحة تحقق إن المتغير حقك يلي فيه الإجابة موجود بتحقق صغير مثل كذا if myAnswer then الكود كله ما راح يشتغل عشان شخص واحد فقط يجاوب nil ليش نحتاج هذا التحقق؟ لأن لو كانت قيمة هذا المتغير nil = لا شيء، بمعنى إن المتغير مافيه قيمة بعدها نتحقق إن الرسالة يلي كتبها الاعب == المتغير يلي سويناه عشان يصير المتغير فارغ وما راح يشتغل مرة ثانية لأن عندنا تحقق مثل ماقلنا فوق nil وبعدها نعطيه فلوس ونغير قيمة المتغير حقنا لـ
  6. https://riptutorial.com/lua/example/20315/lua-pattern-matching
  7. getNearestElement راح يجيب لك الاعب القريب منك فقط .تحتاج تستعمل وظيفة تشغيل الحركة مرتين عشان تشغل له الحركة ولك
  8. getNearestElement هذي وظيفة مفيدة، تعطيه الاعب يلي هو أنت، ونوع الكائن يلي يبحث عنه (لاعب)، والمسافة وراح يعطيك أقرب كائن لك .؟ وظيفة غير موجودة بشكل إفتراضي، شخص ما سواها ونشرها في صفحة الويكي، عشان تستعملها لازم تنسخ الكود حقها وتحطه عندك(Useful Function) وش معنى وظيفة مفيدة setPedAnimation .راح يشغل حركة
  9. ،وعليكم السلام ،إذا كان معاك فترة طويلة غالبًا أي، لكن متأكد المشكلة 100% من الهارد نفسه؟ تأكد إن مثلًا الأسلاك يلي توصله ما خربت .وحاول تجرب تشغله على جهاز ثاني عشان تتأكد أكثر، في حال اشتغل يعني عندك مشكلة بالبايوس. أو لو عندك وصلة تركبه بمنفذ اليو اس بي جرب SSD جرب توديه بعض المحلات بعض الأحيان فيه إمكانية يتصلح أو يقدر يرجع بعض الملفات أحيانًا، لكن لو ،HDD لو كان ما أعتقد (ممكن اكون خطأ لكن هذا يلي اعرفه من واقع تجربة)
  10. يبغالك كل فترة عشان تخليه يلحقك ويطلق عليك بشكل صحيح تستعمل هذه الوظائف setPedAimTarget يخلي البيد يصوب على مكان معين getElementRotation تجيب إتجاه الاعب المطلوب setElementRotation تعدل إتجاه البيد setPedControlState تتحكم بالبيد من ناحية الطلق، تخليه يمشي أو يوقف Slothbot اشوف الأفضل انك تستعمل سكربت
  11. .الخطأ هذا غالبًا يظهر في حال كانت ملفات السكربت مشفرة، والتشفير المستعمل يتطلب إصدار معين، في حال كان إصدار الخادم أقل من المطلوب sver إصدار الخادم المحلي غالبًا يكون آخر إصدار(لأنه يتحدث مع المشغل نفسه) إلا لو انت محمل ملفات خادم قديمة من الإنترنت. تقدر تتأكد من الإصدار؟ عبر كتابة أمر
  12. إذا سويت تعريف لهم جميعهم تحتاج تشغل وظيفة إضافة الحدث كل مرة مثل كذا addEventHandler("onColShapeHit",var1,hill_Enter) addEventHandler("onColShapeHit",var2,hill_Enter) addEventHandler("onColShapeHit",var3,hill_Enter) resourceRoot أو مثل ما قال الأخ اوسكار تلصق الحدث بـ addEventHandler("onColShapeHit",resourceRoot,hill_Enter)
  13. الأخ يلي فوق ممكن توضيحه كان ناقص شوي لكن خذها معلومة عامة ،الكلاينت(جهاز الاعب) ما يقدر يسوي أي تأثير لأي لاعب غير نفسه، الاعبين الآخرين موجودين في جانب الكلاينت ..لكن الاشياء يلي تقدر تسويها محدودة مثل جلب معلومات عنهم مثل الاسم، البنق، المكان إلخ .هل اقدر اسوي عليهم بعض الفنكشنات مثل تغيير السكن؟ أي طيب انت قلت الكلاينت يشغل وظائف لنفسه فقط؟ صحيح، تقدر تغير السكن حقهم لكن يلي راح يشوف التغيير فقط أنت الباقين راح يشوفونه مثل ما هو بالنسبة للسورس(المصدر) لازم تشوف كل حدث لأن كل حدث يختلف المصدر حقه على سبيل المثال onClientMarkerHit إذا تحسب المصدر حقه هنا الاعب أقولك خطأ لازم تشوف الويكي راح تلقى إن المصدر حقه هو كائن الماركر يلي دخله الكائن وليس الاعب نفسه حتى بعض الأحداث ماعندهم مصدر اساسًا يختلف على حسب الحدث، على سبيل المثال حدث دخول الماركر زي ما قلنا المصدر حقه هو الماركر يلي دخله الاعب، نعرف فنكشن الايفنت له ارقمنت ثاني لكن وش يفرق؟ addEventHandler("onClientMarkerHit",root,myFunction) -- راح يشتغل الحدث لجميع الماركرات addEventHandler("onClientMarkerHit",resourceRoot,myFunction) -- راح يشتغل الحدث لجميع الماركرات التي تم إنشاءها من قبل نفس السكربت addEventHandler("onClientMarkerHit",myMarker,myFunction) -- راح يشتغل الحدث للماركر المعين فقط لاحظ كيف الفرق؟ كلها في الارقمنت الثاني حق المصدر، هذي توضحها شجرة الكائنات لأن الاعب لا يتم إنشاءه من قبل سكربت، لو استخدمتها ما راح يشتغل الايفنت ،resourceRoot تحته كل شيء، ولاحظ إن الاعب مو ضمن root تقريبًا الصورة توضح كل شي (حدث إذا مات لاعب) onClientPlayerWasted وتقدر تستعمل الروت حتى في الكلاينت لبعض الأحداث على سبيل المثال طبعًا مو كل الأحداث يلي تخص الاعب أحيان تشتغل، تحتاج تشيك السورس والوصف حق الوظيفة على سبيل المثال الحدث يلي فوق مذكور إن يمديك تستخدمه وزي ما ذكرنا ما راح تقدر تسوي أي تأثير يشوفه الآخرين في جانب الكلاينت، راح يشتغل لك الحدث، لكن أي شي تسويه الاعبين الآخرين ما راح يشوفونه لأنه جانب الكلاينت جهازك فقط
  14. :عشان اوضح حاجة ممكن انت فاهمها خطأ، local var1 = functionTest1(),functionTest2(),functionTest3() .انت كذا مو جالس تعرفهم جميع القيم هنا، راح تعرف متغير واحد فقط وهو الأول :طيب اوك وش الحل كيف أعرفهم جميعهم؟ عندك طريقتين :كل واحد منهم متغير خاص مثل كذا local var1,var2,var3 = functionTest1(),functionTest2(),functionTest3() :تصنع جدول فيه الاحداثيات وتسوي لوب له، عشان تصنع الكول شيب، وتضيف الايفنت لهم ذا مثال بسيط local myTable = { {1252.5432128906, 1211.8337402344, 5, 456.9}, {1256.3558349609, 1199.0007324219, 200.5, 3.5}, -- ونقول باقي الإحداثيات إنضافت } -- الحين معنا جدول بسيط نبي نطلع القيم هذي عشان نصنع الكول شيب for index,value in ipairs(myTable) do -- نسوي لوب(تكرار) للجدول عشان نصنع الكول شيب -- value حاليًا هي عبارة عن جدول إحداثيات بنفك القيم يلي داخلها local x, y, width, height = unpack(value) -- هذي احد فنكشنات الخاصة بالجداول عشان تفك القيم وتعرفها بالطريقة هذي local heliArea = createColRectangle(x, y, width, height) addEventHandler(...) -- طبعا تضيف الحدث هنا حق الدخول وبكذا الثلاث اسطر هذي راح تشتغل لكل قيمة بالجدول مثلًا الحين معنا صفين بالجدول يعني راح يشتغل مرتين end .عالعموم أي طريقة تسويها بكل الحالتين تحتاج تضيف جميع الكائنات للحدث عشان يشتغل لجميعهم
  15. nil على حسب السكربت تحتاج تشوفه مثلًا الساعات ممكن عشان تصفرها تحط القيمة 0، لكن لو تبي تحذف الداتا نهائيًا غير قيمتها لـ يوم تضيف شي مثل سيارات الاعب انت ما راح تضيف قيمة واحدة فقط راح تكون أكثر من سيارة ومعلومات كثير عنها؟ صعب جدًا تضيفها تحت مفتاح واحد، قاعدة بيانات خاصة فيك راح تقدر تضيف كل شي بسهولة
  16. registry.db لو سويت إعادة تشغيل للسكربت ما راح تنحذف، لأن الفنكشن راح يحفظ القيمة والمفتاح في ملف قاعدة بيانات الحسابات SQL الأفضل تستخدم فنكشنات قواعد البيانات Account data راح يحفظها لكن صعب جدًا تتعامل مع شي مثل كذا لأن هو مفتاح وقيمة واحدة فقط، لكن قاعدة البيانات راح تقدر تسوي جدول كامل وتضيف عواميد وكذا :ذا مثال بسيط يوضح الكلام يلي اقصده على سبيل المثال ايدي حسابي 1 والباقي اظن واضحة لمن تطلب بقاعدة البيانات راح تجيب ايدي الحساب حق الاعب وتطلب من قاعدة البيانات تعطيك العواميد يلي الحساب فيها يتطابق 1، وراح يعطيك قائمة السيارات يلي عنده بجدول مو لغة برمجة لكن سهلة جدًا تتعلمها وممكن تقدر تشوف شروحات لها في الإنترنت أو هنا ،SQL عشان تستخدمها، تحتاج تتعلم لغة الـ ما راح أقول إن مالها فايدة، راح تحتاجها في حال كنت تبي تحفظ البيانات مؤقتًا وتحتاج تحصل على المعلومة في أسرع وقت أو في أكثر من سكربت مثل ما شرحت سابقًا
  17. خطأ، مو مثلهم تختلف عنهم setElementData تحفظ قيمة معينة على كائن معين مؤقتًا وتقدر تزامنها للجانب الآخر كلاينت-سيرفر / سيرفر-كلاينت بحيث يمديك لو حطيت القيمة بالسيرفر تقدر تجيبها بالكلاينت مباشرة تقدر تشوف توضيح أكثر هنا خاصة عالمزامنة لأنها مهمة طبعًا يمديك تستخدم الجداول عشان تحفظ القيم مؤقتًا بدال الوظيفة يلي بالأعلى وهي الأفضل لأنها اسرع في الحصول فيه شرح اجنبي لو تعرف اللغة الإنجليزية جدًا ممتاز شرح الموضوع هذا setAccountData / SQL و وظائف قواعد البيانات كلاهما تحفظ القيم بقاعدة البيانات بحيث تقدر تجيبها بأي وقت حتى لو طلع الاعب لكن عيب قاعدة البيانات إنها سيرفر سايد فقط، وبطيئة في الحصول ف مفروض ماتستخدمها في شي يتكرر كل فترة يلي ذكرناها فوق element data على سبيل المثال عندك نقاط تبي تحفظها إذا سجل الاعب الدخول تحصل على النقاط من قاعدة البيانات وبعدها تحفظها مؤقتًا عليه عبر الجداول أو وإذا جيت تعدل النقاط تعدلهم عبرها، وتحفظهم في قاعدة البيانات عند الخروج طبعا وش الفرق بين setAccountData و SQL وظائف الـ؟ SQL اصلا تستخدم الـ account data element data وعيبها الوحيد إنها تستخدم المفاتيح مثل الـ بتكون لك حرية كاملة بتحديد الأشياء يلي تحتاج تحفظها SQL وظائف الـ setAccountData وفيه اشياء ملزم إنك تستخدمها مثلًا لو راح تسوي نظام حسابات خاص فيك ما راح يشتغل لأنه يشتغل على نظام الحسابات الإفتراضية فقط
  18. :بالبداية، شوف هذا الموضوع إذا حطيت اكواد برمجية، عشان كودك يكون أسهل للقراءة للأعضاء .ماتحتاج تعدل موضوعك حاليًا لأن عدلت لك الموضوع وضبطتها لك ذي المرة :بالنسبة لأكوادك قبل ماتستعمل أي وظيفة باللعبة، شوف الجانب حقها وين يشتغل بالضبط سيرفر أو كلاينت أو كلاهما؟ كيف أعرف؟ getServerName تفتح صفحة الويكي حقت الفنكشن يلي بتستعمله على سبيل المثال getPlayerCount لاحظ؟ مكتوب جانب السيرفر فقط، نفس الشي لـ الوظيفة الثانية طيب اوك وش الحل حاليًا؟ بالنسبة لعدد الاعبين تقدر تجيب عدد الاعبين كذا local players = #getElementsByType("player") -- getElementsByType يعطينا جدول فيه الاعبين المتصلين بالخادم -- علامة الـ # راح تظهر لك حجم الجدول وعدد القيم داخله (عدد الاعبين في الحالة هذي) onClientRender طبعًا الطريقة يلي سويتها أنت وهي تحديث عدد الاعبين في حدث سيئة، لأن الفنكشن هذا يشتغل كل فريم وأنت ماتحتاجه أبدًا الأفضل تحديث الليبل حق عدد الاعبين عند دخول/خروج لاعب onClientPlayerJoin onClientPlayerQuit بالنسبة للحصول على اسم الخادم عطاك موضوع مشابه الأخ اوسكار
  19. تنبيه بسيط السورس كذا ماراح يكون معرف في الانيموس فنكشن، ممكن انت جربته وطلع الشات وحسبته ضبط ،والارقمنت له قيمة إفتراضية يلي هي الروت، عشان كذا طلع لك nil لكن لا، قيمة السورس ? تقدر تجرب تطبع القيمة حقت السورس عشان تتأكد :المفروض يكون كذا function hi() bindKey(source, "n", "down", function (player) outputChatBox ("testt", player, 255, 255, 255, true) end) end addEventHandler ("onPlayerLogin", root, hi) تقريبا @SCiأكتشف المشكلة بالكود يلي عرضه قبل شوي هذا الحدث إذا اشتغل مود، الايفنت نفسه ماراح يعطيك أي معلومة عن الاعب لأنه خاص بالمودات فقط getElementsByType لازم تجيب كل الاعبين وتسوي لهم لوب هذا الفنكشن يجيبهم لك :مثال بسيط -- server function keymes() local players = getElementsByType("player") -- راح يعطيك جدول يتكون من الاعبين المتصلين بالخادم for index,player in ipairs (players) do -- نسوي لوب (تكرار) على جدول الاعبين bindKey(player, "e", "down", function (player) outputChatBox ("test", player, 255, 255, 255, true) end) end end addEventHandler ("onResourceStart", resourceRoot, keymes) لاحظ إني عدلت بعد في أخر سطر استبدلت root -> resourceRoot لجميع الكائنات وبما إن الحدث هذا يشتغل للمودات فقط راح يشتغل لأي مود مو لسكربتك فقط root ليش؟ لكائنات المود نفسه وبما إن الحدث زي ماقلنا يشتغل للمودات راح يشتغل الايفنت لنفس المود فقط ،resourceRoot لكن ممكن تفهم أكثر مع رسمة شجرة الكائنات لا تنسى تضيف الزر بعد في حدث الدخول onPlayerJoin أو onPlayerLogin لأن الايفنت زي ماذكرت راح يشتغل في حالة السكربت اشتغل فقط لو فيه لاعب دخل بعدها ما راح يشتغل له يمديك حتى تخلي فنكشن الزر بحدث منفصل عشان ماتكرر الكود كل شوي مثال function myFunction(player) -- تطلع شات هنا أو تسوي يلي تبغاه end -- بعدها في أي ايفنت تقدر تتكتب اسم الفنكشن فقط، بدون ماتحتاج تعيد كتابة الفنكشن من جديد bindPlayer(player,"e","down",myFunction)
  20. ممكن مسوي شي خطأ أطرح اكوادك نشوفها
  21. ? مثال حلو، يعتمد بعد على الفكرة يلي بتسويها على سبيل المثال فكرتك يلي سويتها راح تشتغل بالسيرفر والكلاينت ومايهم التأخير، لكن وش يفرق؟ لو سويتها بالسيرفر جميع الاعبين راح يشوفونه، وإذا كلاينت راح يشوفه هو نفسه فقط (لأن الكلاينت يعتبر جهاز الاعب)
  22. ،أي بالضبط، لكن ما أنصحك تستعمله بالسيرفر إذا ماكنت تحتاجه .لأن راح تشوف تأخير وممكن يكون كبير إذا كان الاعب عنده مشاكل بلاتصال على سبيل المثال تبي تخلي السيارة تقفز، سويها كلاينت، لأن الاعب يتوقع إن السيارة تقفز على طول
  23. هذا متغير عبارة عن الاعب يلي طلب التريقر من الكلاينت client التريقر يلي يكون من الكلاينت يكون فيه متغير خفي اسمه triggerServerEvent("getCar",localPlayer) الثاني هنا عبارة عن مصدر الحدث Argument sourcePlayer عشان كذا قيمة Parameter ف التريقر حقك مافيه أي وما اشتغل كودك ،nil
  24. :إذا جيت تسوي وظيفة(فنكشن) تقدر تسميهم أي شي تبغاه لكن تلتزم بشروط تسمية المتغيرات بداية الاسم ماتبدأ برقم يمكن إستعمال حروف اللغة الإنجليزية وأرقام ورمز _ فقط مايتعدى حد معين أعتقد 256 end مايكون الاسم اسم محجوز باللغة مثل
×
×
  • Create New...