Leaderboard


Popular Content

Showing content with the highest reputation on 02/07/20 in all areas

  1. 3 points
    I can reproduce the problem, uploading resources to the community is currently broken. Thanks for the report, now that we're aware we will post here again when it's fixed.
  2. 1 point
    An API to send messages to your Discord server from MTA:SA STEP I. Create a webhook in a discord room STEP II. Copy the webhook URL STEP III. Change the string variable to your URL STEP IV. Start the resource, and now you can test your script with /dcmessage <your message> command, or you can use the sendDiscordMessage function with export (on serverside) exports.webhook:sendDiscordMessage("string")
  3. 1 point
    Salutări tuturor, Având în vedere contextul actual din cadrul comunității românești la nivelul platformei, am decis să desfășor un sondaj de opinie pentru a observa și înțelege mai bine unde se situează diferite aspecte ale comunității din punctul vostru de vedere. Prezentare generală a demersului Sondajul de opinie se desfășoară prin intermediul unui chestionar compus din cinci secțiuni scurte, majoritatea cuprinzând întrebări închise cu unul sau mai multe răspunsuri prestabilite (cu posibilitatea de a adăuga un răspuns propriu). În urma și pe baza răspunsurilor primite vom putea avea cu toții o imagine concretă cu privire la o parte dintre subiectele care în prezent sunt, după caz, de mare interes la nivelul comunității românești. Prezentul sondaj de opinie nu reprezintă un demers oficial aferent echipei administrative MTA. Tocmai din acest motiv, aveți în vedere faptul că desfășurarea acestui sondaj de opinie nu înseamnă neapărat și o schimbare în viitorul apropiat asupra aspectelor aduse în discuție prin intermediul întrebărilor din chestionar, însă poate deveni un punct important de referință pe viitor. Perioada și modalitatea de completare & publicarea rezultatelor Intenționez să mențin deschisă participarea în cadrul sondajului de opinie până în data de 5 iulie 2020, ora 09:00. Ulterior voi reveni cu o actualizare care să cuprindă rezultatele propriu-zise, cât și analiza acestora și eventuale concluzii pe care le putem trage de pe urma lor. Răspunsurile acordate în lipsă de seriozitate nu vor fi luate în considerare. Analiza și interpretarea rezultatelor se va face în mod colectiv, toate răspunsurile acordate vor fi tratate în mod anonim tocmai pentru a încuraja completarea chestionarului în mod sincer și fără bariere. Chestionarul poate fi completat accesând următorul link: https://forms.gle/w8nawZqn4jQFoDGN7 Distribuirea chestionarului Vă invit pe toți cei interesați să distribuiți mai departe chestionarul către persoanele despre care știți că activează în mod constant pe comunitățile românești de MTA și care pot trata acest demers cu seriozitate. Deși este important să obținem cât mai multe puncte de vedere, este important să punem accent și pe calitatea răspunsurilor tocmai pentru a nu periclita acuratețea rezultatelor. Vă mulțumesc pentru interesul acordat!
  4. 1 point
    pDownloader version 1.0 Better looking progress bar and players can play while downloading files. Video: https://streamable.com/bedf40 How to use If you want to enable pDownloader for a resource. (for example for the vehiclemodels) 1) Open vehiclemodels/meta.xml. 2) Add <pDownloader>true</pDownloader> tag to enable it. 3) Disable downloading for every file, which you want to download with pDownloader, instead of the default one. Example: (vehiclemodels/meta.xml) <meta> <pDownloader>true</pDownloader> <!-- STEP 2 - enable pDownloader --> <script src="client.Lua" type="client" /> <!-- STEP 3 - disable downloading with download="false" attribute --> <file src="files/infernus.txd" download="false" /> <file src="files/infernus.dff" download="false" /> </meta> (IMPORTANT) You can load models just after when every file was downloaded. (when pOnDownloadComplete called) Example: (vehiclemodels/client.Lua) Note: use resouceRoot for event's source addEvent("pOnDownloadComplete", true) addEventHandler("pOnDownloadComplete", resourceRoot, function() local txd = engineLoadTXD("files/infernus.txd") engineImportTXD(txd, 411) local dff = engineLoadDFF("files/infernus.dff") engineReplaceModel(dff, 411) end) Thats all, now if somebody connect to your server, selected files are downloaded by pDownloader. Events pOnFileDownloaded (client) Called when: file downloaded successfully. Event's source is: root element of the resource that downloaded file. Parameters: - path: File's path. pOnDownloadComplete (client) Called when: every file downloaded successfully inside a resource. Event's source is: root element of the resource that downloaded file. pOnDownloadFailed (server) Called when: file download failed and player get kicked. Event's source is: player who can't download the file. Parameters: - path: File's path. Download Priority You can set the priority in meta.xml by replace true to a number. Resources with higher priority are downloaded before others. Note: default priority is 1 (when value is just `true`) <pDownloader>10<pDownloader> ⬇️ Download from Community Please rate the resource on community.
  5. 1 point
    Hello, Today I tried to upload an uncompiled resource to the community site and it said that the upload was successful but when I clicked on the "View resource" link it gave me a link which ended with "id=0". When I went to My View to check the resource was not there but there is an empty space right where the resource should have been at the top. I did "Inspect Element" on it and it can be seen that there is no value assigned to the "id" attribute of the highlighted link. The empty space can be seen as well. When I tried to upload the same resource again without changing its version it again said that it was successful but it didn't show up in My View and was again with "id=0".
  6. 1 point
    السلام عليكم ورحمة الله تعالى وبركته لوحة تسجيل لدخول للرولي بلاي تصميم جديد و ميجيب لاق رابط التحميل في الفيديو BY MR POP
  7. 1 point
    Hello user As in the subject, I will make a server on the Multi Theft Auto + platform and prepare it for the ready game. I have been programming in Lua for many years. I approach each job individually and perform it precisely. I make a quote after receiving a list of resources + a description of what and how it should look like. Signing a contract for any back-up in case of fraud is an option. (If you are from around Piaseczno, I can drive up to discuss the details) Payments are accepted only by bank transfer I prefer telephone contact More information and portfolio on the contact email: forall.gaming@onet.pl (I reply almost immediately) I put the post at the user's request At the user's request, I add an additional form of contact. GG: 71285129 In addition, I can put the site / forum on the IPS engine fully legally, because I have a license. Cheap, please contact me (contact given above) My work: https://imgur.com/a/Wd6F1MT Burczus#1637
  8. 1 point
    No, only with <files/>. Scripts are different, and hard to load them well. No, but here is a modified version, to load files easier. pDownloader-model.zip Example: (vehiclemodels/meta.xml) local files = {} addEvent("pOnFileDownloaded", true) addEventHandler("pOnFileDownloaded", resourceRoot, function(path, model) if model then table.insert(files, { path = path, model = model, extension = path:match("^.+(%..+)$") }) end end) addEvent("pOnDownloadComplete", true) addEventHandler("pOnDownloadComplete", resourceRoot, function() table.sort(files, function(a, b) return a.extension > b.extension end) for i = 1, #files do if files[i].extension == ".txd" then local txd = engineLoadTXD(files[i].path) engineImportTXD(txd, files[i].model) elseif files[i].extension == ".dff" then local dff = engineLoadDFF(files[i].path) engineReplaceModel(dff, files[i].model) elseif files[i].extension == ".col" then local col = engineLoadCOL(files[i].path) engineReplaceCOL(col, files[i].model) end end files = nil end) Example: (vehiclemodels/client.Lua) <meta> <pDownloader>true</pDownloader> <!-- STEP 2 - enable pDownloader --> <script src="client.Lua" type="client" /> <!-- STEP 3 - disable downloading with download="false" attribute --> <!-- and set model id --> <file src="files/infernus.txd" download="false" model="411" /> <file src="files/infernus.dff" download="false" model="411" /> </meta> Just set model ID in meta, and its load for you.
  9. 1 point
    I brought you bakaGaijin and Ash Now I bring Discord integration with MTA scripts. MTA already has this for IRC Shoutout to the people who made the Sockets module, you're awesome. Features: -Scripts can echo messages to any Discord text channel of their choosing. -Any Discord channel can be set up to echo all messages to an ingame script. (Including the name of the person who said it, and his role) -One MTA server can send/receive to multiple Discord guilds. Example use: To show how this is useful, I made a small program to echo all global chat to a "global" Discord channel, and all team chats to individual "team" Discord channels. These Discord channels ofc echo messages back when someone posts. As proof of concept for commands, if a Discord user types "!ban name" then his role is checked, and if it includes Founder, the chat outputs "name was banned!" This is the client side script I used for this example: local SECRET_KEY = "15-A-53CR3T-K3Y" --The script works even if your server IP changes. You are mapped to a unique key. local function onopen(self) self:send(SECRET_KEY) --Your MTA server logs in addEventHandler("onResourceStop", resourceRoot, function() self:close() --Break off from Discord end) addEventHandler("onPlayerChat", getRootElement(), function(message, type) --Example hook to capture player chats local name = getPlayerName(source) local channel = "global" --Send to global channel if global chat if type==2 then channel = getTeamName(getPlayerTeam(source)) end --Or team channel if teamchat --Format to send messages is ("discord", channelName, message) self:send("discord", channel, name..": "..message) end) end function onmessage(self, data) local channelName, name, role, message = data[3], data[4], data[5], data[6] local orginal_message = message --The message we got from discord message = "("..role..") "..name..": "..message --Make it pretty if channelName=="global" then --Output to global chat or team chat outputChatBox("(DISCORD) "..message) else local team = getTeamFromName(channelName) local members = getPlayersInTeam(team) or {} local r, g, b = getTeamColor(team) --Color the output for lulz for _, player in ipairs(members) do outputChatBox( "(DISCORD) (TEAM) "..message, player, r, g, b) end end local commandExample = string.match(orginal_message, "^!ban (.+)") --If message started with !ban... if role=="Founders" and commandExample then -- ...and the person who said it had the right Role outputChatBox(commandExample.." was banned!", getRootElement(), 255, 0, 0) end end local function onclose() outputChatBox("The Discord link was closed") end local discord = Discord.new(onopen, onmessage, onclose) That's 41 lines of code, now let's see it in effect. I would love to hear what you think about it.
  10. 1 point
  11. 1 point
    فيه فانكشن مفيد للطلب حقك getDistanceBetweenPoints3D
  12. 1 point
    Unfortunately that might not be the case. For example if you have 2 of those red boxes in each other and rotate 1 of them. There is another method that might be helpful if only 0, 90, 180 270 are used. Step 1, normalize the width, height and depth. So that rotation doesn't play any role anymore. https://wiki.multitheftauto.com/wiki/GetElementBoundingBox getPositionFromElementOffset < https://wiki.multitheftauto.com/wiki/GetElementMatrix Not required: Change your ^imationary^ camera from top to bottom. Get the center position X from both. Compare the distance: distanceX = [positionX_box1, positionX_box2] if distanceX < (sizeX_box1 / 2) + (sizeX_box2 / 2) then Do the same for the Y and Z axis. When all are true, there is a collision.
  13. 1 point
    UPDATE: -Smoke grenades will now explode after 5 seconds and eject smoke that is synced from the creator to all other players to prevent smoke desync -Fixed non-working mortar smoke shells -Fixed satchel detonator not working when the player is sitting in a vehicle -Satchels can now be detonated with any weapon equipped (No longer needed to equip satchels specifically) -Satchels can now be "defused" by shooting them or by exploding something in their proximity (Beware, satchels have no collision, you have to hit the surface that is next to the satchel) -Players can no longer switch first person mode while reviving to cancel the revive animation -Changed default key for "Sonar Ping" to "J" -Changed default key for "Toggle vehicle light" to "O" -Changed default key for "Detonate satchels" to "P" -Added new key "Call artillery", default key is "lalt" (I separated artillery call from satchel detonator) I will soon upload the new maps Westerplatte and Budapest. I wont create a new post for that and i dont know when they will be added exactly. Also we have currently a problem with missing killer information when a satchel explodes. I will fix this soon.
  14. 1 point
    Long time this dont get update. Is any way to make this possible without using relay node.js server (externar things) because people buy the server and dont have acess to install that things.
  15. 1 point
  16. 1 point
    أ، ب، ت، ث، ج، ح، خ، د، ذ، ر، ز، س، ش، ص، ض، ط، ظ، ع، غ، ف، ق، ك، ل، م، ن، هـ، و، ي تصير لي جارية ؟
  17. 1 point
    You need to change "param" into a table to catch all other subsequent params by using "..." then using table.concat to join them. -- Test the function function test(player, command, ...) local msg = table.concat({...}," ") sendDiscordMessage(msg) end addCommandHandler("dcmessage", test)
  18. 1 point
    كيف حالكم عساكم بخير , مثل ماهو معروض بعنوان الموضوع للبيع سكربت اوبر للي مايعرف وش اوبر , تطلب سيارة وتختار مكان ويجي شخص يوصلك للمكان الي اخترته الي انا سويته خليت بيد تلقائي يجي يوصلك للمكان الي تبغاه طبعا هذا اول سكربت اعرضه للبيع تفتحلك لوحة وفيها الاماكن وانت تضيف الاماكن والسعر بيكون على حسب بعدك عن المكان الي تبي تروح له سعر الميل انا حاطه 2 ويمديك تغيره بس تشتري السكربت , الاماكن القريبة لك ماراح تظهر لازم يكون بعدك 150 عن المكان عشان يظهر هذا الحد الادنى وطبعا تقدر تغير البعد تقدر تخلي السكربت يفتح من زر وتقدر تخليه يفتح من امر من اف8 صور من السكربت طبعا في حال استعجالك عشان تروح للمكان تضغط انتر وراح ينتقلك للمكان الي تبيه بثانية الخصائص الموجودة بالسكربت ولو يتبرع واحد من الشباب يسوي فديو ويحطه بأكون شاكر له الي يبي يجرب السكربت وياخذ صورة اوضح منه يخش السيرفر mtasa://178.32.99.229:22222 uber او اكتب باف8 m طبعا بس تخش راح يعطيك فلوس واضغط حرف حاب اقولك ماخذت من السكربت الا احداثيات الطرق traffic وجرب لين تقتنع , الي يجي يسوي نفسه محقق كونان ويقول نسخ لصق من سكربت السكربت يحتوي على ملفين كلينت وسيرفر وملف احداثيات الطرق مثل ماذكرت فوق التحميل حق السكربت قليل مره لان احداثيات الطرق سيرفر واغلب الشغل على السيرفر والمعروف ان ملفات السيرفر ماتتحمل على جهاز الاعب الكلينت عليه اللوحة وبعض الامور البسيطة , السكربت مبرمج بأفضل الطرق ومافيه ولا بق ان شاء الله والحين نجي للسعر صراحة انا معطيه سعر مو من حقه مقارنة بالسكربت ومواصفاته السعر بالريال السعودي : 100 السعر بالدولار الامريكي : 26 طرق الدفع واول 3 اشخاص يشترون السكربت بيحصلون على الاصدار الثاني من السكربت مجانا الاصدار الثاني بيكون مختلف جذريا والسعر راح يكون اغلى من هذا واتمنى مايكون فيه ردود خارجا عن صياغ الموضوع واي استفسار بخصوص السكربت حط ردك : طرق التواصل معي وهذا وصل الله وسلم على نبينا محمد
  19. 1 point
    Discord seems to be the new IRC.
  20. 1 point
    MTA Lua Asynchronous Computing Description: MTA:SA Async library. If you have some heavy cyclic operations, that are dropping "Infinite/too long execution", or operations that "freeze" your server for couple seconds, you can use this library. It supports multiple running threads at a time. Installation & Instructions: https://github.com/Inlife/mta-lua-async Enable debug, if you need to (it will print some useful information in server console) Async:setDebug(true); Iterate on interval from 1 to 50,000,000 while calculating some data on every iteration (if you run standart "for" cycle, mta server will "freeze" for several seconds) Async:iterate(1, 50000000, function(i) local x = (i + 2) * i; -- heavy opreation outputServerLog(x); end); Iterate over big array of data Async:foreach(vehicles, function(vehicle) vehicle:setHealth(1000); end); There also an options for changing speed of your async caclulations: Async:setPriority("low"); -- better fps async:setPriority("normal"); -- medium async:setPriority("high"); -- better perfomance -- or, more advanced async:setPriority(500, 100); -- 500ms is "sleeping" time, -- 100ms is "working" time, for every current async thread Example: local _connection; -- initialized database connection local vehicles = {}; Async:setDebug(true); Async:setPriority("low"); dbQuery(function(qh) local data = dbPoll(qh, 0); Async:foreach(data, function(vehicle) local _vehicle = createVehicle( vehicle.model, vehicle.x, vehicle.y, vehicle.z ); -- other stuff -- ... table.insert(vehicles, _vehicle); end); -- and run dummy cycle at the same time (just for fun ) Async:iterate(0, 500000, function(num) outputServerLog(num); end); end, _connection, "SELECT * FROM vehicles");