Popular Content

Showing content with the highest reputation since 24/10/18 in all areas

  1. 23 points
    Hi there. The Winter Holidays are here, so as usual we have got a new recap and status update post for you. Here is the summary of what has happened this year. 📰 2018 in Recap We made efforts towards the new release through the first half of the year, so there was not much to talk about. There was an incompatibility issue with the 360 Total Security software which we advised you about and later in the year, there was a similar issue with McAfee. Late July, we have asked you about your thoughts about refreshing the community.mtasa.com portal. We have received some interesting feedback from you and we are still thinking about ways of implementing it, while considering our current resources. Also in July, we have migrated our bug tracking services to GitHub Issues, making it easier to track specific issues and link them to GitHub commits and pull requests. This has also allowed us to clean up our bug tracker - the old system had nearly 8000 tracked issues, some of which were 13 years old or so. On 7th of September, we have released Multi Theft Auto: San Andreas 1.5.6. This release added support for custom IFP animations among other things, like fixing the input and FPS lag reported by some of our users. Then a few days later, we have advised you to upgrade your MTA:SA servers to the latest version due to a server crash exploit that was discovered. There were some additional issues with this hotfix that were spotted later, but they have been all fixed within few days. If you have not yet upgraded your servers though, we still urge you to do so. 📺 A bunch of interesting MTA:SA-related YouTube videos from this year nX_ Vol.18 - CodeNX™ - 첫 장 - video by ElCrowMvs / map by nX [GTA:DM] Wonder - Interstellar - by Wonder MTA [MTA] Vice City - Map Preview #1 (JStreamer v3) - by Liberty City Roleplay Multi Theft Auto - Tactics - by LoG4nTG Multi Theft Auto - MTA CIT / GTA SA - San Andreas Police Department's 7th Anniversary (Dance Show) - video by PeteyFTW / server: CIT Multi Theft Auto San Andreas Fail + Funny moments #1 - by Mr. Green Gaming Multi Theft Auto: San Andreas - MTA DD - Map: Orgazm Cross - video by Game Master / map by Orgazm MTA:SA Fast And Furious Paradise Trailer ! - by SDRIFTER Abdlmounaim 📈 Current player counts and version fragmentation statistics Type Amount of players Date / Time Recent peak number of concurrent unique players 30625 players 2018.12.16 (at 16.30 GMT) Highest recorded number of concurrent unique players 34653 players 2018.02.03 (at 17.30 GMT) Recent number of daily unique players 150390 players 2018.12.01 (Saturday) Highest recorded number of daily unique players 185818 players 2018.02.03 (Saturday) Recent number of monthly unique players 605834 players November, 2018 Highest recorded number of monthly unique players 805903 players January, 2018 Player counts were just slightly lower than last year, but we have also had some nice peak values at the beginning of the year. Good to see that there is still an interest in old but great games. MTA:SA Version or series Percentage of players using that version or series as of 24th of December, 2018 1.6.0 (alpha) 0.05% 1.5.6 97.20% 1.5.5 2.00% 1.5.4 (and older) 0.40% 1.4.x 0.20% 1.3.x 0.15% Similar to last year, two of our most recent releases are used by over 99% of our player base. It means that there is little fragmentation between our releases and that players in general upgrade to the newest release once it is available. Also, there seems to be some interest in the newest alpha version as well - that is nice too. 📟 Status updates Community-wise, our Discord has expanded this year - currently we have got 10 language-specific sections available for you there, as well as the active as usual English ones. We have also opened a new forum section recently to keep appeals for global game bans in one place. Over the next few weeks we intend to refresh our forum rules to better suit the current forum needs. As for mod's development, we will continue working on the next release. We are thinking of integrating a new version of the client installer to reduce amount of issues encountered when installing MTA:SA (as well as to make it easier to investigate the remaining ones). We will also consider adding new features provided by our community members, such as editing collisions and adjusting surface properties by CrosRoad95. That's it for now. 🎄❄Happy Holidays and all the best to you in 2019! 🎉✨ -- MTA Team
  2. 12 points
    Hi! I am Ciastuuś(Ciastuus) and today I present the construction system, which is visible in the film below. One day I came up with the idea of creating something that was not there. Namely, we wanted to create a server based on Rustie, but due to lack of time and limitations, we created a demonstration script that will exist on the server that we will open if we find the time. What can the script do? We will answer this question! Building on a designated area Creating all available elements visible in the video Removing manually created items Destroying elements by hitting a vehicle or shooting it with a gun And many more in subsequent versions! The visible zone has been modeled in its entirety, and checking whether an element is in the zone is part of the script. Same as effects. The effects are part of modeling and scripting them. If you have an idea what to add, please write in a comment, thank you! Credits: * Ciastuus(me) * Vagos * x0nx * xS3nd * Kavp * ... more
  3. 12 points
    بسم الله الرحمن الرحيم السلام عليكم ورحمه الله وبركاته.. كيفكم جميعاً؟ ان شاء الله تكونون طيبين [UIKit] راح يتم الإعلان عن مكتبة واجهة المستخدم الحديثة تحت أسم -: التي هي من تطوير عربي بالكامل تحت طاقم مكون من 3 أفراد الا وهم @iMr.WiFi..! @H25 @#,xiRocKyz المكتبة تم تطويرها خلال اسبوع.. وتعتبر أقل مكتبة استهلاكاً للرام والذاكرة وهذا ماحرصنا عليه في المكتبة وكذلك التصميم الجيد للمكتبة الذي يعطي جمالية للمستخدم المكتبة ولا ننسى التأثيرات الجيدة -: وهنا صور توضح المكتبة وخصائصها وكذلك بعضاً من مميزاتها -: وهنا فيديو على اليوتيوب يظهر تأثيرات المكتبة -: (هذه هي كائنات المكتبة الحالية (سيتم أضافة الكثير مستقبلاً سيتم أضافة جميع كائنات الجيو في المكتبة بشكل فريد من نوعه بأذن الله تعالى.. وما يميز مكتبتنا بقلة الأستهلاك أو حتى يمكن الاطلاق عليها بعديمة الأستهلاك ..وفي الختام نتمنى ان تضعو أجابةً للأستطلاع اعلاه وكذلك وضع الاقتراحات سيتم نشر المكتبة في القريب العاجل
  4. 11 points
    This script has been stolen from a server by taking the uncompiled client.lua from the client resources directory while playing there. As this happens to be my server, I took this opportunity to publish the script on community rather than having someone else show off with work that isn't theirs. Said server has been running this script for a couple of years already. You can download the resource at https://community.mtasa.com/index.php?p=resources&s=details&id=15749 now (open source). Topic locked because this practice isn't allowed on the forums Arabic translation (not by me): هذا السكربت تمت سرقته من السيرفر الخاص بي عن طريق سرقة ملف الكلاينت الغير مشفر من مجلد المودات أثناء اللعب هناك, وبالصدفة هذا السكربت خاص بسيرفري لذلك استغليت الفرصة وقمت بنشر السكربت في الكوميونيتي بدلاً من تظاهر شخص بعمل ليس له, هذا السكربت يعمل بالسيرفر لعدة سنين حالياً https://community.mtasa.com/index.php?p=resources&s=details&id=15749 : ( تحميل السكربت ( مفتوح المصدر .هذا الموضوع مغلق لأن هذا التصرف ممنوع في المنتدى
  5. 9 points
    Olá pessoal. Fiz um vídeo bem detalhado sobre os painéis CEGUI, abordando algumas das principais dúvidas e também algumas propriedades que podem ajudar muito na hora de criar um painel GUI. Recomendo que assistam com fones de ouvido, ou então que ativem as legendas no YouTube. Críticas, sugestões, opiniões, perguntas relacionadas ao vídeo, podem fazer por aqui ou então deixar nos comentários do vídeo. (Deu muitíssimo trabalho de produzir o vídeo, deixe seu like neste post e no vídeo. Se puder, se inscreva no canal e acompanhe a página Lord Henry Entertainment no facebook.) Links e funções que aparecem no vídeo em ordem de aparição: http://static.cegui.org.uk/docs/0.8.7/ guiGetScreenSize guiCreateWindow guiCreateButton http://static.cegui.org.uk/static/WindowsLookProperties.html guiSetProperty http://static.cegui.org.uk/static/WindowsLookProperties.html#FrameWindow http://static.cegui.org.uk/static/WindowsLookProperties.html#Button isMouseOnGUICloseButton Standard_GUI_Font_Names guiSetEnabled guiSetAlpha guiEditSetReadOnly guiEditSetMasked Tenham todos uma boa semana.
  6. 9 points
    الله يأخذ من أسس المنتدى .. ويأخذ مشرفين وأعضاء وعضوات المنتدى ....السلام عليكم ورحمة الله وبركاته ::لو أن السلام مو سنة كان ما سلمت ..!! قولوا ...آمــــــــــــييين الله ياخذ من أسس المنتدى ..ويآخذ مشرفين المنتدى...ويأخذ مشرفات المنتدى ...وياخذ أعضاء المنتدى ...ويآخذ عضوات المنتدى ...وياخذ زوار المنتدى ...وياخذ من يقرأ الموضوع ..وياخذني معاهم ..........:::: إلى ::::...........جنـــــــة عرضها السماوات والأرض ..لا هرم فيها ولا مرض لا تعب فيها ولا نصب ..لا هم فيها ولا وصب .. لا خوف فيها ولا هلعلا سأم فيها ولا جزع ......:: .. بعد عمـر طويـــــل مديــــد على الطاعة بإذن الله ..::.......آمــــــــــــــــــــيين ...
  7. 9 points
    ياخي ليه احبك ؟؟ ❤️ ههههههههههههه اياك ان تفهم غلط بالنسبة لي الناس الي اتعرفت عليها من اول ما دخلت اللعبة وهم مب كلهم بس اغلبهم موجودين بالمنتدي هنا @*RayaN-Alharbi. @MR.StoRm @ibrahim# @[T]|O|[P]George @Rakan# @#,xiRocKyz @Master_MTA @#Soking @Abdul KariM @Aln3mani @iMr.WiFi..! @SuperX @#StrOnG_,) @*AnGeL @#SnpêŘ @MrKAREEM @TOUNSI | ا̍ڸــڛۣــ؏ــٰٱ̍دہ @#5Mr'aLMuteRi. والي نسيته بالقلب ❤️
  8. 9 points
    ماكنت اسوي صداقات ايام زمان كنت انسان اعزل.. ولكن بعد ما سويت حساب بالمنتدى بديت اكون بعض الصداقات واغلبها مستمرة حتى الآن والله يديم علينا الصداقة الحلوة @Master_MTA @N3xT @</Mr.Tn6eL> @Mr.CoR @#,xiRocKyz @Dr.Marco @Rakan# @coNolel @H25 @#DesTroeyR والي ماذكرته موجود في القلب -
  9. 8 points
    السسسسسسسسسسلام عليكم ورحمة الله وباركته كيف حالكم يا اخواني يا احبابي لكم وحشه بعد اعتزالي وان شاءالله كلكم بخيـــــــــر ودراسه بخيـــــــــر نخش فالموضوع وعلى بركة الله بسم الله الرحمان الرحيم ولا حول ولا قوة الا بالله حسيت حالي داخل لحرب احم احم المهم 🤣 بطرح عليكم شيء ما انطرح من قبل وطبعا هاذا الشيء من صنعي من 0 ومن بداية البرمجة كنت بدي اتعلمه والحمدالله خلصته قبل 4 اشهر - لوق ادمين الكامل - تم صنع هذه اللوحة لى عدم الظلم من بين اللاعبين - واضافة الميوت ، الكيك ، عالم الوهمي ، سحب السيارة ، تفجير السيارة ، سحب اللاعب ، الإنتقال الى اللاعب ، تغيير الشخصية ، الى غيرهـ ويمكنكـ البحث على شيء الذي تريده من خلال اللوحة ويمكنكـ أيضا حذف اللوق واضافة وقت باللوحة على سبيل المثال 16:00-25-10-2018 لـ معرفة الوقت امتى انصك اللاعب الصورة للسكريبت : ❤️ وقريبا الرجوع من الإعتزالي الذي حزنكم ادري انو مافي احد حزن ادري ادري راجع معليكم 🤣 وسيتم تشغيل القناة ونشر مودات طبعا موادت غير الوزارة يمكن انشر مودات الوناسة وسيارتها ومودات كنق طاره وسيارتها 😂أقسم برب العزة انو انا امزح بنشر مودات غير موجوده وتكون تفيدكم بإذن الله وشكرا ❤️ بدي تعليقكم وارائكم ونصائحكم الهامة وبالله عليكم ما ابي اي شخص يخرب موضوعي الجميل القمة الجمال تحياتي لكم : اخوكم MR.TOUNSI #للبيع @ للتواصل واتس اب +21625915707
  10. 8 points
    بسم الله الرحمن الرحيم الصلاة والسلام على اشرف الانبياء والمرسلين نبينا محمد عليه افضل الصلاة واتم التسليم, اما بعد: أقدم لكم دورتي لـ تعلم لغة برمجة لوا.. ملاحظة: توجد مشكلة في الدرس الثاني الا وهي صغر الخط, وتم حلها ولن تتكرر في الدروس القادمة باذن الله تعالى MTA الدورة لا تتوجه لـلعبة ولكنها تتكلم عن البرمجة بشكل عام بالاضافة لتعليم وتدريس في لغة لوا اذا كان فيه نوع من الاقبال والتفاعل سأتخصص بـ برمجة ام تي ايه بالاضافة لبرمجة الديسكورد وشرح بعض اللغات الاخرى دمتم سالمين في أمان الله..
  11. 8 points
    كيف حالكم عساكم بخير , مثل ماهو معروض بعنوان الموضوع للبيع سكربت اوبر للي مايعرف وش اوبر , تطلب سيارة وتختار مكان ويجي شخص يوصلك للمكان الي اخترته الي انا سويته خليت بيد تلقائي يجي يوصلك للمكان الي تبغاه طبعا هذا اول سكربت اعرضه للبيع تفتحلك لوحة وفيها الاماكن وانت تضيف الاماكن والسعر بيكون على حسب بعدك عن المكان الي تبي تروح له سعر الميل انا حاطه 2 ويمديك تغيره بس تشتري السكربت , الاماكن القريبة لك ماراح تظهر لازم يكون بعدك 150 عن المكان عشان يظهر هذا الحد الادنى وطبعا تقدر تغير البعد تقدر تخلي السكربت يفتح من زر وتقدر تخليه يفتح من امر من اف8 صور من السكربت طبعا في حال استعجالك عشان تروح للمكان تضغط انتر وراح ينتقلك للمكان الي تبيه بثانية الخصائص الموجودة بالسكربت ولو يتبرع واحد من الشباب يسوي فديو ويحطه بأكون شاكر له الي يبي يجرب السكربت وياخذ صورة اوضح منه يخش السيرفر mtasa:// uber او اكتب باف8 m طبعا بس تخش راح يعطيك فلوس واضغط حرف حاب اقولك ماخذت من السكربت الا احداثيات الطرق traffic وجرب لين تقتنع , الي يجي يسوي نفسه محقق كونان ويقول نسخ لصق من سكربت السكربت يحتوي على ملفين كلينت وسيرفر وملف احداثيات الطرق مثل ماذكرت فوق التحميل حق السكربت قليل مره لان احداثيات الطرق سيرفر واغلب الشغل على السيرفر والمعروف ان ملفات السيرفر ماتتحمل على جهاز الاعب الكلينت عليه اللوحة وبعض الامور البسيطة , السكربت مبرمج بأفضل الطرق ومافيه ولا بق ان شاء الله والحين نجي للسعر صراحة انا معطيه سعر مو من حقه مقارنة بالسكربت ومواصفاته السعر بالريال السعودي : 100 السعر بالدولار الامريكي : 26 طرق الدفع واول 3 اشخاص يشترون السكربت بيحصلون على الاصدار الثاني من السكربت مجانا الاصدار الثاني بيكون مختلف جذريا والسعر راح يكون اغلى من هذا واتمنى مايكون فيه ردود خارجا عن صياغ الموضوع واي استفسار بخصوص السكربت حط ردك : طرق التواصل معي وهذا وصل الله وسلم على نبينا محمد
  12. 8 points
    السلام عليكم ورحمة الله وبركاته اعتذر للجميع عما بدر مني في الأيام او الشهور السابقة وأقدم اعتذاري الشديد لـ الأخ كيلر و ديستروير والباقيين مبدأنا نغلط ونرجع عن غلطنا كلنا ناقصين والكمال لله عز وجل اعتذر لكم بما بدر مني من كلام , ساعة غضب وكن عفوا فالله عفو يحب العفو واستودعكم الله الذي لا تضيع ودائعه , اراكم على خير ❤️
  13. 7 points
    -: اعضاء فريق مجتمع العرب @justboy @#CroSs @NX_CI @ibrahim# @Rakan#
  14. 7 points
    @#5Mr'aLMuteRi. -- اخوي الي ما ولدته امي @*AnGeL -- اخوي الثاني كمان @*RayaN-Alharbi. -- اختي و اعزها جدا @#DesTroyeR -- صقيقي الصقوق @Rakan# -- اخو ابوي @iMr.Storm -- حيواني الاليف @8HR -- مجهول الشخصية @KillerX -- حب من طرف ثالث @#Soking -- البيج بوس @iMr.WiFi..! -- ماي فاذر @Master_MTA -- اه نايس فريند شيب ويذ هيم ذي عيلتي و الي ناسيه ياريت لا يزعل دايم في مكان بالعيلة
  15. 6 points
    Regeneration (health) This resource lets you regenerate player and vehicle* health. It is not an unique idea, I know... but there weren't good implementations for it at the community resource list. So that's why I share this with YOU. * Vehicle regeneration for the driver only. Version 1.0.0 Not compiled! Smooth health regeneration No UI, just the manager Settings (Admin panel) Settings Regeneration [on/off] (player/vehicle) Regeneration value (player/vehicle) Regeneration delay (player/vehicle) Regeneration [on/off] while the vehicle is burning Download link: https://community.multitheftauto.com/?p=resources&amp;s=details&amp;id=15757 Take a quick look into the source code (v1.0.0) Client Server Meta
  16. 6 points
    السلام عليكم اليوم حابب اقلكم ابيكم كلكم تجون سيرفري واتمني تزوروني كلكم تنوروني ❤️ وهذا العدد قبل ساعة ايبي السيرفر : mtasa:// وسيتم وضع بعض الصور من السيرفر في نفس هذا الموضوع قريب
  17. 6 points
    After a worrying discussion on Discord last night regarding password storage and remember me functionality I've decided to write a tutorial on how it should be done. This guide assumes you are not using MTA's built in account system, but a custom one. Any code shown in this tutorial is purely for illustrative purposes, and is not finished code, you should use it as a guideline, not a solution. The following topics will be discussed in this tutorial: How to hash and salt passwords (register) How to validate a hashed password (login) How to add "remember-me" functionality How to offer password recovery How to migrate from an older hashing algorithm, to a newer one Using a password policy (Extra) How to handle database leaks (Extra) What even is hashing and salting? For the purpose of this tutorial we expect a database structure which is somewhat similar to this: How to hash and salt passwords When you have a user register on your service, that user expects of you to keep their password safe. Whilst it is generally bad practice to use the same password for multiple services there are many users that still do so. Because of this it's crucial that you save the user's passwords in a way that an attacker will be unable to find out the original password the user typed. This includes if they have full access to your database. In order to do this we do what is called "Password hashing" When a user registers, your server receives the user's intended username, (email) and password. Before you save that password to the database you have to hash and salt this, luckily MTA has a function that takes care of this. If you wish to know more about what exactly it does, there's more information at the end of this tutorial. In order to hash this password you use the passwordHash function. This function is relatively slow (by design), so it is highly recommended you pass a callback to this function, so your entire script doesn't wait for it to complete. https://wiki.multitheftauto.com/wiki/PasswordHash local mysqlHandle -- we're assuming this value is set somewhere else in code function register(username, email, password) local player = client passwordHash(password, "bcrypt", {}, function(hashedPassword) -- callback function for hashing the password local handle = dbExec(function(handle) -- callback function for storing the user in the database if (handle) then triggerClientEvent(player, "registrationSuccess") -- inform the user that registration was successful else triggerClientEvent(player, "registrationFailed") end end,mysqlHandle, "INSERT INTO users (email, username, password) VALUES (?, ?, ?)", email, username, hashedPassword) end) end addEvent("passwordTutorial:register", true) addEventHandler("passwordTutorial:register", getRootElement(), register) How to validate a hashed password Once you've saved the hashed pasword to your database you need to do a little bit of additional work when authenticating the user. Luckily MTA offers a passwordVerify() function, which is the counterpart of the previously discussed passwordHash(). What this function does it basically hashes the password in the same way, resulting in the same output hash. https://wiki.multitheftauto.com/wiki/passwordVerify In order to get the account the user is trying to log in to you have to do a query for an account which has the user submitted username, and of which the password matches through passwordVerify. PasswordVerify is also a relatively slow function, thus you should use a callback. function login(username, password) local player = client dbQuery(function (handle) -- callback for the query selecting the user by username local results = dbPoll(handle, -1) if (#results == 0) then triggerClientEvent(player, "loginFailed") return end passwordVerify(password, results[1].password, {}, function(matches) -- callback function for the password verify if (matches) then -- Do anything you wish with the database result to log the player in with the rest of your scripts triggerClientEvent(player, "loginSuccess") else triggerClientEvent(player, "loginFailed") end end) end, mysqlHandle, "SELECT * FROM users WHERE username = ?", username) end addEvent("passwordTutorial:login", true) addEventHandler("passwordTutorial:login", getRootElement(), login) How to add "remember me" functionality When users on your server log in, they often do not want to have to enter their username and password every time they want to log in. In order to satisfy this need you can implement a "remember me" function. What I've seen happen in the past, is people would store the user's password (encrypted) on the client. This is NOT safe, and should never be done! In order to properly use remember me functionality what you would do is upon login in, generate a random string. The longer the better. This random string is what we call an access token. You would then allow the user to log in with such an access token, preferably only once generating a new access token each time one is used. To implement this you would generate that token every time the user logs in, whilst they have "remember me" enabled. You will have to save this token in your database alongside your user. For extra security you could also store the user's serial alongside the access token, you can then validate that the access token is being used from the same device. https://wiki.multitheftauto.com/wiki/Filepath function login(username, password) -- This code should be put in the callback to the dbQuery function, but to keep the example clean that's not shown here if (rememberMe) then local token = generateRandomToken() dbExec(function() triggerClientEvent(player, "loginSuccess", token) end,mysqlHandle, "INSERT INTO access_tokens (user_id, token) VALUES (?, ?)", results[1].id, token) end end function rememberMeLogin(username, accessToken) -- this function handles a user's login attempt dbQuery(function(handle) local result = dbPoll(handle, -1) if (#result == 0) then triggerClientEvent(player, "loginFailed") else -- Do anything you wish with the database result to log the player in with the rest of your scripts triggerClientEvent(player, "loginSuccess") end end,mysqlHandle, "SELECT users.* FROM access_tokens JOIN users ON users.id = access_tokens.user_id WHERE users.username = ?", username) end addEvent("passwordTutorial:loginRememberMe", true) addEventHandler("passwordTutorial:loginRememberMe", getRootElement(), login) How to offer password recovery Offering password recovery requires a little bit more than just your MTA server. Generally password recovery is done with emails. So you would need access to an email server / service which you can use to send an email from an HTTP request. (Like you can do with fetchRemote()). When a user requests a password reset, have them enter the email you registered with. You then fetch a user from the database with this email address. You would then store a password recovery token for this user. This token, just like the remember me token, is a random string. Ideally, you would send the user a link with a password reset form that goes to a webpage where the user can reset their password. You could do this with an external service, like a webserver. Or you could use MTA's Resource web access for it, but if you do make sure you handle permissions properly for anything else that uses this. However another option would be to have the user copy paste the generated token from the email into you server's login window. Which of the two solutions you pick is up to you, my personal preference goes to the one with the link in the email. But in either case the server side logic is the same. When the user attempts to perform password recovery, verify that the token they give you belongs to a user, and then change the password to the newly requested password. Make sure you hash this password the same way you do in your login. function requestPasswordRecovery(email) dbQuery(function (handle)) local result = dbPoll(handle, -1) if (#result == 0) then triggerClientEvent(player, "passwordTutorial:passwordRecoveryRequestFailed") else local token = generateRandomToken() dbExec(mysqlHandle, "UPDATE user_data SET recovery_token = ?", token) -- mail the token to the user, mail implementation depends on the mail server/service you use triggerClientEvent(player, "passwordTutorial:passwordRecoveryRequestSuccess") end end, mysqlHandle, "SELECT * FROM users WHERE email = ?", email) end function recoverPassword(recoveryToken, password) dbQuery(function (handle) local result = dbPoll(handle, -1) if (#result == 0) then -- this is only valid if you have the user request password recovery from ingame triggerClientEvent(player, "passwordTutorial:passwordRecoveryFailed") else passwordHash(password, "bcrypt", {}, function(hashedPassword) -- callback function for hashing the password local handle = dbExec(function(handle) -- callback function for storing the new password in the database if (handle) then -- this is only valid if you have the user request password recovery from ingame triggerClientEvent(player, "passwordTutorial:passwordRecoverySuccess") -- inform the user that registration was successful else -- this is only valid if you have the user request password recovery from ingame triggerClientEvent(player, "passwordTutorial:passwordRecoveryFailed") end end,mysqlHandle, "UPDATE user_data SET password = ? WHERE recovery_token = ?", username, recoveryToken) end) end end, "SELECT * FROM users WHERE recovery_token = ?", recoveryToken) end Besides changing the password, it's important you also delete any access tokens that user might have if you're using remember me functionality. It is also good practice to make recovery tokens expiry after a certain amount of times, and not allow a recovery token to be created whilst one is already in prgoress. This prevents a user from sending a large number of emails from your service. How to migrate from an older hashing algorithm, to a newer one Maybe after reading this topic you realise that your password security is not what it should be. So you want to change your old password hashing / validation logic to the ones explained in this topic. And due to the nature that hashes can not be "unhashed", you can't simply migrate your passwords over. So in order to migrate the passwords what you have to do is when a user logs in, first validate their password with the old hashing algorithm. If this matches, then hash (and salt) it with your new hashing algorithm and save it in your database. Make sure to delete the old password otherwise your password security is not any better than before. Using a password policy Passwords policies are important to prevent your users from picking a password that is too easily cracked / brute forced. Many password policies come in the form of "Must have at least one capital letter, one digit and one number". But that discards that fact that the best way to make your password more difficult to crack, is making your password longer. So in the code snippet below is a function that measures the 'search space' of a password. The search space of a password is the amount of possible passwords there are with a certain combination of characters. In order to use this, you would have to set a minimum password search space when a user registers for an account. This minimum is up for you to set, but be reasonable, you shouldn't expect a user's password to be impossible to remember / create. I recomend playing with the function a bit to see what values you get out of it, and pick something you believe is sensible. function getPasswordSearchSpace(password) local lowerCase = password:find("%l") and 26 or 0 local upperCase = password:find("%u") and 26 or 0 local digits = password:find("%d") and 10 or 0 local symbols = password:find("%W") and 32 or 0 local length = password:len() return (lowerCase + upperCase + digits + symbols) ^ length end -- The below function calls are to indicate the difference in search space for a set of passwords print(getPasswordSearchSpace("a")) print(getPasswordSearchSpace("abc")) print(getPasswordSearchSpace("Abc")) print(getPasswordSearchSpace("Ab!")) print(getPasswordSearchSpace("Ab!0")) print(getPasswordSearchSpace("Mu#9A0h.")) print(getPasswordSearchSpace("This is a demonstration of how easy an incredibly strong password is to remember")) How to handle database leaks If you have reason to believe that your database has been leaked or otherwise compromised, it is important that your first course of action is removing any access tokens stored in your database. Once you have done that you have to inform your users. Whilst when properly hashed and salted it's extremely difficult / time consuming to find out a user's password it is still a possibilty. So you should inform your users of the breach, tell them that their passwords were properly hashed, and they do not need to fear for their passwords immediately. However you should suggest to your users that they change their password either way, just in case. What even is hashing and salting? Hashing has been brought up several times in this tutorial, whilst you do not need to know what it is / does, you might be interested in knowing regardless. I won't be going too far in depth as I simply do not have the knowledge, but the basic idea of hashing is this: When you hash anything, you turn it into a string of characters (or other value) that has no relation to the original input, other than when you hash the original input again, it will always generate the same hash. For example, when you hash the stirng 'banana' using the sha512 hashing algorithm, it will always yield the output: "F8E3183D38E6C51889582CB260AB825252F395B4AC8FB0E6B13E9A71F7C10A80D5301E4A949F2783CB0C20205F1D850F87045F4420AD2271C8FD5F0CD8944BE3" Now hashing can not be reverted, you can not "unhash" a hash, so in order to verify someone's password you hash it again, and see if the two hashes are the exact same. Now this is great, passwords are safely stored. However there is still more to do, salting. Salting is adding some random data to your password prior to hashing it. This prevents when two users (on the same service, or on others) have the same password, that their hashes are also the same. Meaning if one password is compromised, the other password is not. It is important that a salt is random for every user in your application, not one salt for your entire application. Now you might think we didn't do any salting in the code / tutorial above. This is not true, we just didn't do it ourselves. MTA's passwordHash function actually hashes the passwords and salts it, this salt is then stored in the output hash it self, just before the actual password hash. In the case of bcrypt it actually stores a little bit more info in the resulting hash, but you need not worry about that.
  18. 6 points
    Since 1 week ago, We was worked hard on this library. Then finally we've finished from it! It will publish soon, But now we collecting all of your suggestions then we'll adding it on our library, Our library is the best on Memory Usage because of it coding focusing to don't take a lot of Memory usage The team are: @H25 @#,xiRocKyz @iMr.WiFi..! Anyways the photos of library:- A video shows effects on library:- Objects in our library (Based as GUI objects):- We'll add more objects in future, At the end please vote on the poll above, and comment below that what do you like/dislike to improve our design
  19. 6 points
    As the original website designer from approaching 10 years ago(!), I agree it needs an update. But I don't feel this is quite enough. The key art at the top is less interesting, and the rest is just a bit more square. I'm not really involved these days, so whatever I say has very little importance, but I think a more substantial redesign could be worthwhile.
  20. 5 points
    Render events enchanting Having a lot of render events in your resource? Easier attach and remove? Or do you want to pass arguments in to a function which is attached to a render event? Then this might be something for you. Syntax: addRenderEvent bool addRenderEvent(function functionVar [, string eventName, arguments ...]) Arguments: The function you want to attach/target. The event you want to use. ( "onClientRender", "onClientPreRender", "onClientHUDRender") If you do not fill in one of these three, it will automatic fallback to "onClientRender". Fool proof. Arguments you can pass to the target function. (which isn't possible with the default addEventHandler + onClientRender function) Returns: true when added, and false otherwise. Syntax: removeRenderEvent bool removeRenderEvent(function functionVar [, string eventName]) Arguments: The function you want to attach/target. The event you want to use. ( "onClientRender", "onClientPreRender", "onClientHUDRender") If you do not fill in one of these three, it will automatic fallback to "onClientRender". Fool proof. Returns: true if found + removed, and false otherwise. (Not recommended to execute this function every frame > performance) onClientPreRender + timeslice If you use "onClientPreRender", just like the default event, it will pass the timeSlice to the attached/targetted function. https://wiki.multitheftauto.com/wiki/OnClientPreRender I am not sure if attached is the right word for this example, because it isn't really attached to the event. It is saved in a table which gets looped every frame. Performance Is this code bad for performance? The answer to that is NO. I ran a test for it, and it seems that addRenderEvent used less CPU AFTER adding the events. (addRenderEvent: 31% CPU, addEventHandler 99/100% CPU) Adding the event will probably use more CPU, but that is only one execution. Feel free to re-test this example, I am interested how it would perform on your pc's. Performance test code (Not the source code ) Source code:
  21. 5 points
    https://backnite.com WHO ARE WE? We are a group of young developers known on the stage of Multi Theft Auto, who wants to throw in a few interesting and innovative plans for the development of our server. WHAT IS BACKNITE? Backnite is an international server based on the Battle Royale mode. This mode is known mainly from games like PUBG, Fortnite or the newest version of Call of Duty Black Ops 4. Probably your first question that comes to your mind will be: “Will the game be based only on Battle Royale?” Of course not, because it would be too boring for long-time playing. To prevent this, we added Story Mode. In this mode you must simply do quests and empathize with the story. BACKNITE DEVELOPMENT CONCEPT Login and Register System System of logging and registration was designed to be simple and easy to use, because we want to create server that everyone will find in it easily. At the beginning, you can set your main language that will be supported during the game. All of your data that you leave with us is fully secured thanks to the latest encryption techniques, so nothing can get out of our database. GUI A simple interface can be found not only in the login panel, but in every place of our GUI. Whole concept of lobby design has been inspired by the PUBG and Fortnite. You can find many of similarities, but nothing was cloned 1:1. Friends system Don’t play alone! We create a brilliant friends system, which is a simply way to play with your friends After you add your friend to a friends list, you can see, is he online or in a game. If he is not in a game you can invite him to a lobby and play together against another people. Shop At the start of creating Backnite we won’t to create a another Pay2Win game. The only things you can buy on our server are visual changes It’s just only a skin customization including weapons, parachute skins and everlasting designs. You can find a lot of them in beautiful designs. The also have rarity lecels like most popular, epic and legendary. The don’t give you any bonus or advantage to be better at the game. Cabinet Here you can search and equip your purchased skins. The possibilities of customization are infinite. Each of our weapons may have a different skin, but nothing stands in the way to color all weapons same! Lobby settings In left down corner of your screen you can find lobby settings. There you can change game mode and number of players. After you setup the game lobby you can invite you friends to it and play together reliving amazing adventure. AFTER THE GAME START After the game start in Battle Royale mode, you will be moved to the waiting room and wait for all players to be connected. Current status of the player you can find in upper right corner. Time to start the game is under the map. Game will not start until enough people connect. SERVER SUPPORT PAGE To better know some problem of our players we create a support website, on which you can directly inform us about your ideas, or found bugs or any kind of problems. You can always search our database to find needed solutions, or just simply create a new ticket to find a solution as fast as possible. SERVER STATUS PAGE Can not join the server? Have problem to reach our homepage? Go to status page to check current server status, planned maintenance work, or a latency between you and the server. HELP US TRANSLATE BACKNITE! Want to be part of our server and translate it on our native language? In that case, we need you very much! Backnite is a international serwer, that’s why we need translators to reach more people and countries all around the world! Current status of translation to other languages you can check clicking to this link. WANT TO BE PART OF THE BACKNITE TEAM? To create that big project like Backnite we still searching for new talented people, that can help us. If you are programmer, 3D modeler, graphic designer we are waiting for you! Simpy send us message on Discord and attach to it your portfolio. If you are not good at this things, you can also give us your propositions. At the end of the advertisement. If you reach to this part of our ad, and you read it all, we hope that you are now interested in our project. That’s not all things that we can offer you. We are reading all of your suggestions and we try to implement all of them to create server that will make you happy. If you want to follow our project and enjoy its community you need to arrive on our Discord, Facebook, Twitter and forum. See you in game! Backnite Team. © OUR BEST TEAM @Backer - CEO of the project, Lead LUA Developer @Pumelowsky - 3D Object Creator, Polish Translator @KingMoses - Web Developer, System Administrator @QuoVaids - Map maker, Story mode designer, Polish Translator @DHXtR - Graphic designer Stay tuned with our project, following us on our Social Media! https://backnite.com https://forum.backnite.com
  22. 5 points
    السلام عليكم ورحمة الله وبركاته -:في هذا الموضوع يمكنك تقديم طلب للانضمام لفريق مجتمع العرب, يجب عليك قبل كل شيء اتباع شكل التقديم التالي :اذا كنت تريد التقديم كـ مصمم في مجتمع العرب, الرجاء اتباع الشكل التالي :اذا كنت تريد التقديم كـ مبرمج في مجتمع العرب, الرجاء اتباع الشكل التالي الآن السؤال الذي يدور في بال الكثيرين, ماهو المقابل, الراتب الذي ستوفرونه؟ الفلوس (الراتب) تستطيع ان تربحهم فقط من المشاريع التي ستشارك في تطويرهم ولاتوجد طريقة أخرى
  23. 5 points
    حي الله اللي انضمو معنا @justboy @#CroSs @!#DesTroyeR_,) @Rakan# @*RayaN-Alharbi. @ibrahim# @Abu-Solo @iMr.WiFi..!
  24. 5 points
  25. 5 points
    My Friend's @MoDeR2014 @N3xT @Master_MTA مقدر انساك @سعد الغامدي @MrSAUD1 @Abdul KariM @Tapleto-Host ❤️❤️❤️ @iPrestege @SuperX يامن يراقبني بصمت أحبك @iMr.WiFi..! The New @#DesTroeyR والي نسيته في دمي يجري