Leaderboard
Popular Content
Showing content with the highest reputation since 25/05/24 in Posts
-
Hello all. The holiday season is finally here, and we have prepared a more compact summary post for you than usual. Please read on to see, what we have been up to lately. GTA VI The upcoming year will bring us the next game from the Grand Theft Auto series - GTA VI. Planned to launch in Fall 2025 on consoles, it will likely arrive on PC as well, just some months later. The second trailer for GTA VI is also rumoured to be shown soon, with some elaborate fan theories backing these rumours. Will the game be good? Only the time will tell, but looking back, there was not a major GTA game release from Rockstar Games that was bad (for the sake of this argument, let's consider the Trilogy as a minor release ). That alone makes it worth to look forward to it, and it will be also nice to re-visit Vice City similar to how we did it with Liberty City and San Andreas. MTA Status and Updates Not much to report in regards of MTA - we have been focusing on improving various parts of our infrastructure, which is not immediately visible at first glance. Still, since there are many areas that need the attention, there is a lot of work involved. Thankfully, CiBeR, Botder, Lopsi, Dutchman and others have been looking into it. Thanks to the hard work done by our Helper - FileEX, we have also refreshed the Lua syntax highlighting system on our Wiki. For a long time it was unmaintained, causing many of the recent MTA scripting functions and events to be not correctly highlighted in the code snippet examples on the wiki. This has changed though, and it should be working much better now. We have been also tinkering with our #MTASpotlights hashtag on X / Twitter. We are still exploring this idea, but nonetheless, thank you for your submissions so far. If you would like to share some media that we could promote, you can do so on our Discord, just please make sure to read the guidelines beforehand. And, naturally, there have been additions to the mod's source code now and then, bringing in new scripting functions and bugfixes. Similarly, we have been pushing those as client updates for you, also now and then. Player Counts and Other Statistics Type Amount of players Date / Time Recent peak number of concurrent unique players 24,808 players 2024.12.22 (at 18.13 GMT) Highest recorded number of concurrent unique players 52,098 players 2020.04.02 (at 18.00 GMT) Recent number of daily unique players 95,445 players 2024.12.15 (Sunday) Highest recorded number of daily unique players 185,818 players 2018.02.03 (Saturday) Recent number of monthly unique players 478,736 players September, 2024 Highest recorded number of monthly unique players 805,903 players January, 2018 For a mod for a game that is nearly 20 years old now, these are fairly good numbers. Smaller than last year, but still impressive. We are glad that you are still with us. MTA:SA version or series Percentage of players using that version or series as of 24th of December, 2024 1.6.0 99.5% 1.5.9 0.4% <1.5.9 0.1% Also, as of 24th of December, 2024: there are over 90,000 members on our Discord server, we have got 13,790 followers on X/Twitter, 58,000 users follow our Facebook fanpage , and our Steam Community group has nearly 50,000 members. --- To end this post on a high note, we would like to take this moment to wish you all Happy Holidays and a Happy New Year. Enjoy the Season and take care. -MTA Team19 points
-
Hi. Here's my latest creation in MTA:SA, an NPC piloted Helicopter Tour activity. Allowing for as many helicopter paths as you want, running at 1-1.5% client CPU. You can setup a flight if one is not already setup, and then your friends or other players can pay to join the flight, allowing a maximum of 4 players to be flown on a selected path around San Andreas. This resource was made possible by @IIYAMA's resource: "servertimesync" @TMTMTL7 points
-
Hello MTA players, I realised that I had to create this post because I got a lot of feedback, I stopped all my activities in MTA and I don't play MTA anymore because I had to make some changes in my life and change my life direction, I saw MTA in 2010 and I started playing, during this time I made very good friends, developers and players, so I would like to thank you all endlessly, 3 months ago I stopped all my activities in MTA, but I was still receiving a lot of message requests (for paid development or other issues) after that I gave everyone goodwill feedback, but I had to stop this because I was receiving a lot of messages from MTA servers and players, Anyway I have to say that I will miss all MTA players and developers, I will visit from time to time but I won't have much time for that, for some players who will try to contact me I have to say that I don't have a discord server and I don't answer private messages, I think you will be understanding and thanks for that... I have reached the end of my career in MTA. I have worked voluntarily on many servers and participated in numerous projects. I have sold all the projects I worked on, both paid and free, and I would like to announce that I will no longer be continuing my projects. I had a great time on many servers, and for that, I want to express my gratitude. Finally, I am deeply grateful to the valuable members of the MTA team, as they have helped me in many ways. Some of them include @Sarrum, @Vinyard, @Citizen, @IIYAMA, @AlexTMjugador, and myonlake (Patrik). I will miss you, guys!6 points
-
Lua Metatables Guide Introduction Hello, I’m Shady, and I’m here with a new tutorial. At the bottom of this section, in the credits, you will find all the links to my other tutorials. Those should be your first priorities. I have prepared a tutorial that will help you explore metatables at an advanced level and set you on your way,The Lua programming language has gained popularity for its simple yet powerful syntax, making it a common choice for both game development and general-purpose programming. This guide will enable you to delve deep into the metatable feature of Lua and demonstrate how to apply object-oriented programming (OOP) concepts using metatables. Metatables are used to customize the behavior of tables in Lua and manage complex data structures. In this guide, we will focus on the following topics: What is a Metatable?: We will understand the concept of metatables and why they are used. Creating Classes with Metatables: We will create a simple Vector class and explore operator overloading methods. Inheritance: We will learn how to implement inheritance and override functions using metatables. Complex Scenarios: We will create more complex structures, such as a character class, using metatables in real-world applications. By the end of this guide, you will learn how to effectively utilize metatables in Lua, enhancing the functionality of your games or applications. So, let's step into the world of Lua metatables! What is Metatable? A metatable is a special table used to change the behavior of tables in Lua. With a metatable, you can inherit between tables and perform special operations. Creating Metatable... First, we need to create a metatable. We can define it as a simple table. myMetatable = {} Using Metatable in a Table To assign a metatable to a table, we use the setmetatable function myTable = {} setmetatable(myTable, myMetatable) Operator Overloading with Metatable Metatables can also be used for operator overloading. For example, let's define the __add function for addition. myMetatable.__add = function(t1, t2) return t1.value + t2.value end Adjusting the Values of Tables We can use the __index and __newindex methods in the metatable to set the values of tables. myMetatable.__index = function(table, key) return "Key not found: " .. key end myMetatable.__newindex = function(table, key, value) rawset(table, key, value) end Example of Use myTable.value = 5 local anotherTable = { value = 10 } setmetatable(anotherTable, myMetatable) local result = myTable + anotherTable print(result) -- 15 Metatable and Mapping Functions Metatables are used to provide functionality and inheritance relationships between tables in Lua. With special keys provided by the metatable, we can map between tables. Operator overloading functions like __index, __newindex, __add, and __sub allow us to change the behavior of tables. An Example in Depth: Vector Class Below, we will create a Vector class. This class will support addition, subtraction, and other vector operations. -- Creating the vector metatable Vector = {} Vector.__index = Vector -- Create a new vector function Vector:new(x, y) local vec = setmetatable({}, Vector) vec.x = x or 0 vec.y = y or 0 return vec end -- Vector addition function Vector:__add(other) return Vector:new(self.x + other.x, self.y + other.y) end -- Vector subtraction function Vector:__sub(other) return Vector:new(self.x - other.x, self.y - other.y) end -- Calculate vector length function Vector:length() return math.sqrt(self.x^2 + self.y^2) end -- Usage example local v1 = Vector:new(3, 4) local v2 = Vector:new(1, 2) local v3 = v1 + v2 print("Sum Vector:", v3.x, v3.y) -- 4, 6 print("Length of Vector 1:", v1:length()) -- 5 Metatables control the operations listed next. Each operation is identified by its corresponding name. The key for each operation is a string with its name prefixed by two underscores, '__'; for instance, the key for operation "add" is the string "__add". The semantics of these operations is better explained by a Lua function describing how the interpreter executes the operation. add": the + operation. The function getbinhandler below defines how Lua chooses a handler for a binary operation. First, Lua tries the first operand. If its type does not define a handler for the operation, then Lua tries the second operand. function getbinhandler (op1, op2, event) return metatable(op1)[event] or metatable(op2)[event] end By using this function, the behavior of the op1 + op2 is function add_event (op1, op2) local o1, o2 = tonumber(op1), tonumber(op2) if o1 and o2 then -- both operands are numeric? return o1 + o2 -- '+' here is the primitive 'add' else -- at least one of the operands is not numeric local h = getbinhandler(op1, op2, "__add") if h then -- call the handler with both operands return (h(op1, op2)) else -- no handler available: default behavior error(···) end end end "sub": the - operation. Behavior similar to the "add" operation. "mul": the * operation. Behavior similar to the "add" operation. "div": the / operation. Behavior similar to the "add" operation. "mod": the % operation. Behavior similar to the "add" operation, with the operation o1 - floor(o1/o2)*o2 as the primitive operation. "pow": the ^ (exponentiation) operation. Behavior similar to the "add" operation, with the function pow (from the C math library) as the primitive operation. "unm": the unary - operation. function unm_event (op) local o = tonumber(op) if o then -- operand is numeric? return -o -- '-' here is the primitive 'unm' else -- the operand is not numeric. -- Try to get a handler from the operand local h = metatable(op).__unm if h then -- call the handler with the operand return (h(op)) else -- no handler available: default behavior error(···) end end end "concat": the .. (concatenation) operation. function concat_event (op1, op2) if (type(op1) == "string" or type(op1) == "number") and (type(op2) == "string" or type(op2) == "number") then return op1 .. op2 -- primitive string concatenation else local h = getbinhandler(op1, op2, "__concat") if h then return (h(op1, op2)) else error(···) end end end "newindex": The indexing assignment table[key] = value. function settable_event (table, key, value) local h if type(table) == "table" then local v = rawget(table, key) if v ~= nil then rawset(table, key, value); return end h = metatable(table).__newindex if h == nil then rawset(table, key, value); return end else h = metatable(table).__newindex if h == nil then error(···) end end if type(h) == "function" then h(table, key,value) -- call the handler else h[key] = value -- or repeat operation on it end end "call": called when Lua calls a value. function function_event (func, ...) if type(func) == "function" then return func(...) -- primitive call else local h = metatable(func).__call if h then return h(func, ...) else error(···) end end end Override and Inheritance We can achieve inheritance using metatables in Lua. By creating subclasses and using the superclass's metatable, we can override some functions. -- 2D Vector Metatable Vector2D = setmetatable({}, Vector) Vector2D.__index = Vector2D -- Create a new 2D vector function Vector2D:new(x, y) local vec = Vector:new(x, y) setmetatable(vec, Vector2D) return vec end -- Rotate the 2D vector function Vector2D:rotate(angle) local cosA = math.cos(angle) local sinA = math.sin(angle) local newX = self.x * cosA - self.y * sinA local newY = self.x * sinA + self.y * cosA return Vector2D:new(newX, newY) end -- Usage example local v2d = Vector2D:new(1, 0) local v2dRotated = v2d:rotate(math.pi / 2) print("Rotated Vector:", v2dRotated.x, v2dRotated.y) -- 0, 1 More Complex scripts Metatables can be used to model complex data structures and behaviors. For example, we can create a class representing the attributes of a game character. -- Character metatable Character = {} Character.__index = Character function Character:new(name, health, power) local char = setmetatable({}, Character) char.name = name or "Unknown" char.health = health or 100 char.power = power or 10 return char end function Character:attack(target) target.health = target.health - self.power print(self.name .. " attacked " .. target.name .. "!") end -- Usage example local hero = Character:new("Hero", 150, 20) local monster = Character:new("Monster", 80, 15) hero:attack(monster) print(monster.name .. " remaining health: " .. monster.health) -- 60 NOT : Metatables form one of the foundations of object-oriented programming in Lua, allowing you to create complex structures and functionalities. In this guide, you learned how to create classes using metatables, inherit from them, and perform operator overloading. Metamethods: metatables and metamethods offer powerful functionality that enhances the flexibility and behavior of tables. Metatables allow you to customize the behavior of tables, while metamethods are functions that define this behavior. This tutorial will explore the fundamentals of these concepts with fun and practical examples,Metamethods are special functions defined within a metatable that get triggered when specific operations occur. Credits and Additional Resources Official Lua Documentation; Explore the official Lua documentation for comprehensive details on Lua features, including metatables. https://www.lua.org/manual/5.4/manual.html#2.4 https://www.lua.org/manual/5.1/manual.html#2.8 Lua 5.1 Reference Manual Lua 5.4 Reference Manual Metatable Events https://devdocs.io/lua~5.1/5 points
-
To take away some confusion, understand that the changes being announced here are mostly focussed on cutting out the 'community front' of AC team operations, so that we can optimize limited manpower and rebalance expectations for our users to accept there will be periods we can't make waves, if you were able to move yourself into our perspective on how people always want everything solved, fixed, sorted out immediately on their whim, and how persistent they are in that (and in most cases bring something misconceived/invalid, after which they can't even be convinced otherwise or that would take from our time disproportionally), you'd be straight out scared and quickly stressed out. OP was clarified by adding in this segment 1 day after the topic was made: We will continue to bring AC improvements and get rid of emerging cheats and cheaters, but at our own pace, without external pressure or too high community expectations, from now on everything is on a best-effort basis and the point is that there may be periods during which we can't make any waves due to manpower constricts. You can see that this topic intends to lower your expectations and respect the amount of free time we (as volunteers) are able to invest, and get off our backs for things being different compared to some years ago. We're also OK to restrict ban appeals and player reports so we can delegate all of the manpower that's left on our new strategy, breaking cheats (patching them) and just preventing them from working to begin with, instead of permanently banning cheat users and having to deal with them "regretting" in ban appeals. We are also OK to restrict reporting cheaters as our focus shifts to breaking the cheats, and to get the required information to break one, we have our own methods and channels so much that we don't need any sort of reports. Due to the state of anticheat and heuristics, we always have a good picture of abnormalities and what cheats are doing, so the main limiting factor is manpower to get to work with what we have & know. After all, cheating on MTA will not be left alone, and AC team will disrupt it and raise the border even more whenever manpower allows it to do so. Cheaters should realize that their fun may come to an end at any unexpected moment, and that if they're too used to being able to cheat, they will be very upset to have to adapt to playing normally for as long it takes the cheat devs to catch back up to us again.4 points
-
Dear Multi Theft Auto players and supporters! Today is the 20 Year Anniversary of Multi Theft Auto! On the February 9th 2003, a rudimentary GTA3 multiplayer prototype was released by our founder, IJsVogel. It did not take long for contributors to join the effort and turn it into a real multiplayer mod. The mod IJsVogel created was originally named “GTA3: Alternative Multiplayer”, but soon after it became “GTA3: Multi Theft Auto”. The Multi Theft Auto (MTA) name became the identity of all following projects. As new GTA games were released, new projects were created for GTA3, GTAVC, GTASA and GTAIV. Respectively, the main project names are: GTA3:MTA, MTA:VC, MTA:SA, MTA:IV. The development during GTA3 showed what the team was capable of with enough learning and reverse engineering. At this time, game modes were made for deathmatch and vehicle stunts. These game modes were hard-coded into the mod and could not be altered. It was not perfect, but it was an amazing accomplish for the time. Not only was it the first multiplayer for GTA, but it was an unprecedented undertaking. An early version of GTA3:MTA 0.2 (client and server). Some time in the first half of 2003. The working experience on GTA3 laid the framework for the second project, MTA:VC. It did not take long after GTA: Vice City for the 1st version of MTA:VC to release. The MTA Team succeeded in creating the basic multiplayer functionality much quicker through past-experience. At this point, MTA was well-known and there were mentions on gaming websites, magazines and even a TV interview on the gaming channel G4TV. Even Rockstar Games developers, the creators of GTA, contacted the MTA Team from time to time. The MTA:VC mod still offered a hard-coded deathmatch and vehicle stunting game mode that could not be altered. However, it had better synchronization and supported many new features. When GTA:SA came out, the contributors to the project were much more seasoned and mature. The 3rd project, MTA:SA, was much more ambitious. Although the first release was restricted to racing in vehicles, it was a proof of concept for a vastly superior framework that empowered users to make their own content. An editor was produced to allow in-game editing for the first time. When the full-featured product began development, a constantly evolving Lua-based scripting system accompanied it. This allowed the user to manipulate game code and modify various settings, elements and added features to create unique servers and game modes. Some added features include: voice chat, custom GUIs, web browser components. The MTA Team had the foresight to release this modification to the public as Open-Source code to attract future developers and embraced many new tools of game development that have become commonplace today such as installers, bug reporting, nightly builds, wiki documentation, anti-cheat, and Steam version support to name a few. MTA:SA 1.1 public tests. August, 2011. The release of GTA:IV did result in the beginning stages of MTA:IV, but once Rockstar released their official multiplayer, many of MTA’s most seasoned developers and contributors were ready to move on with their professional lives. Providing the same level of quality to GTA:IV would have been an extreme undertaking. It was decided that the best course of action would be to discontinue further projects and continue making MTA:SA better. The MTA:SA project still receives Open-Source contributions and still retains a consistent player base that is large enough to make developers of new games jealous! Thank You We would like to thank everyone who helped and participated over the years: developers, community/clan leaders, moderators, patch contributors, helpers, donators, testers, translators, scripters, mappers, server hosts/owners, streamers, players and fans. There were hundreds of thousands of such people over the years and they all had their place here. Many people have come and gone. Some are still very young and some are quite old now! Some of us have even developed life careers from our experiences working on this modification. We had the honor of befriending a lot of wonderful people in various stages of the project and many were just as enthusiastic about MTA as we were. Multi Theft Auto would not be here right now, had it not been for their hard work, interest and dedication. No seats? No problem. Screenshot from MTA:SA 1.0.5, taken by Zango. August, 2011. The social aspect has always been strong in MTA. No one knows what the future will bring, but there are things that will remain regardless of anything - and that is the time you all have spent here and your memories. Feel free to share your MTA stories in the comments! Feel free to say hi to us in Discord as well! Thank you all past and present MTA staff members, players and fans for sticking with us! Happy Birthday, Multi Theft Auto! Onwards to the next 20 years or more! -MTA Team3 points
-
modloader_reborn is a resource for servers to replace game models with little effort. Easy to use. Optimized script. No configuration required. Drag & drop DFF/TXD files to the correct folders. Readme & Download: https://github.com/Fernando-A-Rocha/mta-modloader-reborn3 points
-
We are planning to open source Sphene around Q4 of 2025. I'd like to set some expectations: Sphene is still heavily in development, by no means will Sphene be something you can just run and enjoy on a server. While a lot of features have been added to Sphene, a lot of the storyline is not fully playable yet. There are still a lot of glitches, and missing functionality. You WILL run into major issues. We are working through some of the last hurdles that kept us from open sourcing the project. We will only provide support on getting Sphene to run to those with clear intent to help its development. By open sourcing the project later this year, we hope to accelerate its development. We hope to work together as a community to better understand how the underlying game code operates and how to implement missing functionality into Sphene. We look forward to working together with all of you!3 points
-
Hey, here's something I started creating a few years ago now but hit a roadblock with. I decided to pick it back up again recently and see what I could do, and here's where I'm up to with it. This script is still a W.I.P.3 points
-
Hey there, i wanted to post here about something I've been messing around with a bit, an AI assistant (named Helena after one of CJ's gfs) what makes this one bit special is that it can access in-game data and players' stats, locations and it can also execute any function to retrieve information about the server/player in real time to cut the hustle of having to remember different commands for it, you just ask and the assistant delivers. Currently in its very very early stages! and it needs some more work, but whats really exciting is that you can use custom functions, like you can write any script then add it to a functions file that Helena can access and there you go it will understand when to use it and how to run the function to return the output without the need for you to use any command handlers or anything. This assistant uses Groq API (llama model) for fast interactions. using their free plan for quite a generous amount of requests. I just wanted to have some different thoughts and suggestions about this script, and when it's all done I'm planning to post it here for free so anyone can custom modify it for his own use. Shot video showcase :3 points
-
The shared side is a way to share variables and functions between the client and server in the MTA. However, it is important to understand how it works to avoid errors and unexpected behavior. When you define a variable on the shared side, it is shared between the client and the server. However, the variable is not automatically synchronized between the two. This means that if you change the variable on the server, it will not automatically be updated on the client, and vice versa. To synchronize shared variables, you need to use a synchronization mechanism, such as an event handler or a command. This is necessary because the MTA does not automatically synchronize shared variables between the client and the server. In your example, you defined the SCRIPT_activity and SCRIPT_text variables on the shared side and tried to access them on the server without using an event handler or command. This did not work because the variables were not synchronized between the client and the server. When you used an event handler (onResourceStart) or a command (writeText), you synchronized the shared variables between the client and the server. This allowed the variables to be accessed correctly on the server.3 points
-
Hi there, Today, I would like to present you with my latest Old School map creation: "Knave." Inspired by my admiration for G.I character Arlecchino, I decided to create a map centered around her instead of basing it on a region. Arlecchino has become one of my favorite characters due to her intriguing backstory, past, and captivating character design. Known as the Fourth of the Fatui Harbingers and also known as “Knave”, Arlecchino is the Director and Owner of the House of the Hearth, an orphanage in Snezhnaya. Enjoy the video! Inspiration I was inspired by the Arlecchino character demo video to create the map. The video starts in Mondstadt Cathedral and moves through Inazuma and the Sumeru desert region known as Mausoleum of King Deshret before ending in the Opera Epiclese of Fontaine. After the next part, we don't know where she went, only that she is sitting on a throne. I tried to replicate the scenes from the character demo video and synchronize the map's music with the atmosphere like as in my previous concept old school maps, Inazuma, Sumeru, Mausoleum of King Deshret & Fontaine However, I made a reinterpretation of one part. When the song becomes soft again with clouds and kids, I instead created a green zone covered with a hundreds of flowers. I added Arlecchino's character ascend material flower, the rainbow rose. Credits Video & Edit by VonKasty Detailed credits can be found in the video's description. You may subscribe to Nakvie's YouTube channel as the owner of the Channel) Special thanks to Nico for assisting me with fixing the Red Flash part in the map! Best regards, Nebla3 points
-
Hello, Effective immediately it's no longer possible to: - Report players to AC team - Appeal any global bans Please do not attempt to report players to MTA staff team, or appeal any bans. A) If you need to report a player, please contact admins on the server they are playing on. Server admins should pay the amount of attention that staff in other multiplayer games (with hosted servers) typically pay, and owners should be mindful of script security and scripted anti-cheat solutions to fill in some cracks that started to be created over the past few years, and continue to do so as a result of lowered manpower within the MTA AC team. B) Appealing bans is no longer needed as permanent bans have been removed last month, and any of the handful of cases not covered aren't meant to ever be appealed, without exception. Temporary bans were never meant to be appealed, although some staff member's intepretation of that (while redirecting users) has varied - if you got a temporary ban, wait for it to expire and surely you got a feeling of what not to do/not to run next time while MTA is opened, to avoid getting banned again. AC team is actively monitoring the reliability & integrity of standard detections that may lead to temporary bans, that's one of the things its manpower still allows it to do, so you can see why we're confident to go this route - any leakage of appeals in places they don't belong/users contacting MTA about their bans anyways, our experience has learned is 99.9% users that know why they got banned but won't accept it and are persistent.. as before, all such inquiries won't lead anywhere, but especially now we said "No appeals anymore" there will be zero interaction and certain behaviors may also lead to removal from the respective platforms where inquiries are made in a persistent or disruptive fashion. We don't want to come across as rude, but there was simply too much spam and people not accepting no for an answer. Finally, regarding cheaters - the level of sophistication that our AC has reached due to years of playing a cat mouse game with cheaters, is a hugely raised border for cheats to be made and will continue to do so (as methods that were used in the past were patched as per the spoilered text in this topic, so they can't be re-used). However, with the loss of dedicated AC developers within AC team, comes that we can no longer keep up as before, this situation has existed for the past 2 years so as of this post nothing is abruptly changing, it's just the point of admitting we won't be tryharding as much as in the past to be known as totally cheater-free game, a reputation we held for long. If you look around in the gaming industry, you'll see that we held up pretty well in comparison, but the cheating industry (due to toxicity demand) has also hardened, and after 20 years we are low on manpower which is fully understandable. We will continue to bring AC improvements and get rid of emerging cheats and cheaters, but at our own pace, without external pressure or too high community expectations, from now on everything is on a best-effort basis and the point is that there may be periods during which we can't make any waves due to manpower constricts. You can see that this topic intends to lower your expectations and respect the amount of free time we (as volunteers) are able to invest, and get off our backs for things being different compared to some years ago. We're also OK to restrict ban appeals and player reports so we can delegate all of the manpower that's left on our new strategy, breaking cheats (patching them) and just preventing them from working to begin with, instead of permanently banning cheat users and having to deal with them "regretting" in ban appeals. We are also OK to restrict reporting cheaters as our focus shifts to breaking the cheats, and to get the required information to break one, we have our own methods and channels so much that we don't need any sort of reports. Due to the state of anticheat and heuristics, we always have a good picture of abnormalities and what cheats are doing, so the main limiting factor is manpower to get to work with what we have & know. Enjoy the game, and remember that player desires make the market for servers - so if you see too many cheaters, ask server owners to invest their time in training server admins to be on the lookout for cheaters and ban them, script protection/alert systems, and after all, have some peace of mind because cheating in MTA will always be a raised border and still won't be as common as in directly competing projects. // Note: using the bug bounty program for security bugs remains possible, end user security will always be among MTA team's top priorities. The program has been frozen for cheats, though, and documentation will soon reflect that.3 points
-
It is indeed a kind of attack. It means that the player is able execute clientside-code on demand. The attacker is triggering 'known generic events' which might be handled by the server. The ones that are unknown are in your logs, the ones that are known and trigger able are not. But that does not mean that the ones that did trigger didn't cause unwanted results. You might want to consider to restart the resources, just to make sure there is no memory leak. The event which AngelAlpha mentioned can indeed help with detecting that kind of attacks. As an extend you can also add a honeypot, which in this case are 'unkown' events for your server but know for other servers. When a player uses this kind of attack again, you can ban them automatic. You might want take a closer look at your logs for candidates (for example money related). There is also this event: https://wiki.multitheftauto.com/wiki/OnPlayerTriggerEventThreshold But be careful with automating things, always test these kind of stuff or you might accidentally nuke your own player base.2 points
-
MTA:SA - Claire Anticheat Claire is a modular, lightweight anticheat resource for MTA:SA, designed to improve the integrity and fairness of servers. Its core philosophy is simple: organize detections into clean, independent modules, make them easy to configure, and build an open platform that others can expand and improve. Claire runs silently in the background, acting as a guardian layer — constantly monitoring player behavior, network conditions, and client-side integrity without interfering with gameplay or degrading performance. Its design favors discretion and precision, targeting cheats without disrupting legitimate users. If you're looking for a solid, customizable way to secure your MTA:SA server, try out Claire. Why does it matter? By being fully open-source, Claire gives server owners an accessible and transparent tool to detect common exploits and improve their server environment. But more than that, it invites collaboration. The idea is that, together — through testing, feedback, improvements, and shared knowledge — we can create a more solid, trustworthy anticheat resource that benefits the entire MTA community. Current features Claire currently includes over 20 independent detection modules, covering movement, combat, environment manipulation, network spoofing, and more. All detections are modular, configurable, and designed to operate silently in the background with minimal performance impact. False positives are rare thanks to tolerance-based logic, score systems, and heuristic analysis. Overall reliability across all modules is expected to be around 95%, all features are listed at our GitHub page. Contributing Claire is an open-source project — contributions are welcome! Feel free to contribute with PRs, reports, or suggestions at our GitHub page. You can also reach out to us on Discord. Download Download from MTA Community: latest release - 1.1.5 from 2025/04/22 Download from GitHub: latest release - 1.1.5 from 2025/04/22 Please check our GitHub page before downloading it, I'm open for suggestions.2 points
-
2 points
-
Hey everyone! I've completed a character customization script that works with all gamemode and easy to setup, and I'm excited to share its features! Key Features: Male & Female character models Loads character data directly from SQL Ensures data sync for real-time updates Smooth character loading in the selection screen Extensive customization options, with a wide variety of textures for male and female characters These features let you create a truly unique character with a broad range of personalization options! Additional Features: Integrated clothing store Accessories store Barbershop for detailed character styling Future Plans (V2): Specialized models for Police, Medic, and Mechanic characters (both Male & Female) Important Note: This script isn’t free. If you’re interested or have any questions, feel free to reach out for more information. Thanks for checking it out, and stay tuned for updates as I plan to add even more customization options! Discord: .undrr Discord: .undrr2 points
-
The SCM Interpreter (New Discord server: https://discord.gg/GBPZ9GvVdw) Filled with excitement I am here to announce a project that I have been working on together with @GTX named Sphene. In this post I will be talking about SCM, what Sphene has to do with it, our current development and what we plan for the future. Before I tell you what Sphene is I first need to give you some background on what SCM is as this plays an important factor in this project. I will not keep you waiting so let's get starting! What is SCM? Many of you may have heard, seen or even tampered with a well known file "main.scm" in your GTA: San Andreas installation. This file (notice the '.scm' extension) contains all the mission scripts that are available in singleplayer. Essentially the whole story-line and its side-missions are stored in here. The reality for side-missions is a bit more complicated but for the sake of this explanation we'll keep that aside as to keep it simple. SCM is the name of the language this file has been written in by Rockstar Games. Since it was made by them and the file is compiled (converted into a format that can be easily read by the game but not easily by a human) we unfortunately do not know what the original code looked like. Modders all across the world use a tool named SannyBuilder to write SCM themselves but this is very unlikely to look anywhere near the original format created by Rockstar Games. But, this does not matter much to us as it still compiles into the same format readable by the game. Essentially a compiled SCM file contains a big variety of "instructions" which tell the game what to do. For example there is an instruction that makes the game spawn a car on specific coordinates, tell a ped to drive or that tells the game to jump to a different location in the script and execute the instructions on this new position. For those wanting more in-depth information I highly recommend to read the SCM section in the "GTA SA modding book" by fastman92 which can be found here. So, what does Sphene have to do with this? Sphene is a SCM Interpreter, as in, it can run files created in the SCM language and which are compiled, including the "main.scm" file from the singleplayer game. This means that we can recreate all of singleplayer within Multi Theft Auto and further extend it with a big variety of features and improvements. Sounds great, doesn't it? It sounds easier than it is in reality however. The reality is that, as explained in the SCM section, these scripts tell the game what steps to perform, but the game still has to perform them. What does this mean? Well, it means we have to implement each instruction ourselves and make sure we stick as close to the actual game while doing so. Some instructions are fairly easy and quick to implement while others are a lot more complicated. Why? Because on many instructions the game doesn't perform just a single action. Let us take the instruction (or as we commonly refer to an instruction: opcode) to make a car drive as an example: 0704: car $car_pointer drive_to 1250 -75.5 13.25 Taken from 'SASCM.ini' included in SannyBuilder 3. The identifier for this instruction is '0704', through this Sphene knows this is the car_drive_to instruction and how many parameters (information given together with this instruction, in this case what car we want to get driving and to which location) to expect. Seems easy enough, except that there is no simple MTA function to get a car driving to a specific location. No, instead we have to write our own logic to make this possible. This can become very complex very quickly, especially as the exact functionality of many instructions isn't even known. Reverse engineering Because of this complexity and the need to make Sphene work as close to the actual game as possible we have started to reverse engineer GTA SA. Reverse engineering means that we try to make sense of the compiled code of the actual game and try to turn it into human readable code. This is easier said than done though, it's a lot more complex than reverse engineering a SCM file is. Luckily the big modding community (including MTA devs/contributors) have managed to reverse engineer big chunks of the game already, we just have to fill in the gaps that hasn't been reverse engineered yet but that contains chunks of code we require to make Sphene as accurate as possible. Contributing to Multi Theft Auto Using this knowledge and to make development easier for us (and simultaneously contributing to the MTA community as a whole) we have started contributing to the Multi Theft Auto codebase. There already is a work in progress pull request (a request for code to be added to MTA) to make it possible for players to drive client-side vehicles, damage them and other improvements. This is not only useful for us but many other servers as well. Okay, what is the purpose then? Why don't we just play singleplayer? Good question. Sphene will introduce many new options to make the game behave differently. This can be a setting to have much smarter ped AI's (making the game more difficult) to other settings to enhance the gameplay or raise its difficulty. We're not just interpreting the SCM but can actively improve it. There surely must be more to it? Oh, you bet. Did you ever want to play the storyline together with a friend (or multiple friends)? We are introducing Co-Op which allows exactly this. Naturally this version of the game will contain small changes to accommodate for the existence of multiple players and will be a lot harder. Although extra settings can raise that difficulty even more (1 HP limit anyone?). (Click to enlarge) This is a concept design of the Co-Op lobby designed by AnarchY. Anything else? Did I forget to mention that we are also planning support for GTA III and GTA Vice City (data files will have to be provided by yourself in order to load these in, to make sure you do own these games legitimately) into Sphene? I did? Well, I am happy to announce that we have already start adding basic support for these games and are hoping to make them available not long after we complete the support for GTA: San Andreas. The difficulty of implementing support for these games is of course greater as we have to import their full maps, recreate their controls, etc... That's nice, but how is the current development going? I am glad that you are asking. Sphene started out as a personal experiment but has quickly grown into a big and stable project. We started with implementing support for basic instructions and basic game logic that allowed us to fully get a tiny, custom, SCM file with a small mission working. This mission consisted of the following steps: Step in the nearly exploding car marked by the arrow. Drive the car to a checkpoint without further damaging it. Get out of the car and kill the NPC with the arrow above its head. Mission passed Very simple, but great for initially testing the interpreter. Screenshots were taken from an internal video at the time of said development. A small debug panel (improved in later stages) is seen on the right showing the instructions being executed by the interpreter. (Click to enlarge) This worked great, so now it was time to start implementing the instructions for the actual game. This proved to be challenging very quickly due to the high amount of instructions the game calls before even visually showing anything to you. But, eventually we did implement the instructions and proper text drawing support for the well known start of the game. That was a great start. Although it didn't go as well as planned as this text kept disappearing and re-appearing in a loop. Great. Now I had to figure out why this was the case. In order words, I had to start reverse engineering all the instructions Sphene was going through and manually going through the compiled SCM file instruction by instruction to make sure Sphene was interpreting everything correctly. Eventually I managed to find the issue and resolved it. A larger version of the debug panel was then being developed (for more in-depth information) and later on improved multiple times. It didn't take too long before everything was implemented to allow us to get to the famous "Grove Street -Home." sequence. Complete with audio! (Click to enlarge) We then proceeded to improve performance further and mostly do bug fixing. Currently the interpreter can handle instructions up to the sequence in the first mission where you need to get on a bike after a Ballas drive-by occurs. Although due to the amount and type of instructions implemented we did already make it possible for Sphene to run the Kickstart and Bloodring (partially) minigames as well. This truly shows that when we implement more and more instructions a lot more of the game will automatically start becoming available. (Click to enlarge) Future development We are of course still implementing a lot of instructions, improving our overall code (fixing bugs and improving performance), adding more game logic, etc. Not only that, we actually have attempted (and will continue working on it in the future) to implement cutscenes. This did not go well at first as it caused a lot of crashes, misaligned objects, etc. But we got it reasonably working, aside from the NPC's that are not animated whatsoever and float weirdly in the air. We hope to get cutscenes up and running soon. The lobby (for Co-Op) will also be implemented soon and similarly we will start develop on the Co-Op portion of Sphene. After we launch a first version (with GTA: San Andreas support) we will continue development on the GTA: Vice City and GTA III portions. We also plan (and slowly started) to develop a decompiler and compiler for SCM straight into Sphene and build our own language around it that compiles to SCM. This will allow for user created storyline's, missions, etc that also work in singleplayer if you so desire. The reason we'll be building our own language rather than using the SannyBuilder syntax is simply the fact that there is no standard SCM coding syntax out there and the SannyBuilder one is often too complex and not intuitive for most people. We want our implementation of it to be closer to what people expect from modern programming languages. (Click to enlarge) That's it for this post. Please leave any questions and/or remarks in the comments! Sincerely, Megadreams2 points
-
Coopera San Andreas Online Gang War And Police Server Main Language: Arabic (Other languages could be spoken through our language-chat) Server Game-mode: Gang War Server IP: mtasa://23.88.73.88:35369 Discord Link: Click Here :سيرفر حرب العصابات تبع ميمون كاش https://www.youtube.com/@MimounX Gangs: { 11 Gangs } Gangs Clothes: Some Gangs Headquarters: Police: Vagos: Triads: Rifa: Jobs: Cleaner Job Dustman Job Icecream Job Pizza Job Towtruck Job Rob Bank: Clothes Store: Ammunition Store: Pizza Shop: and you can to play DeathMatch: Map DeathMatch: والمزيد من الاشياء رح اخليكم تستكشفونها في سيرفر اتمنى ان يعجبكم محتوى السيرفر ورح تكون هناك تحديثات قوية ومستمرة انشاء الله2 points
-
I don't need to describe Reinc online, because everything is as it appears in the video, so words cannot vouch, I can say that it is the best project and presenter ever in MTA, so a big applause to Danihe as a masterpiece2 points
-
@Dadinho Só é possível mexer no chat nativo para você mesmo. Não é possível alterar via script. Caso queira, vá no menu ESC > Opções > Interface > Lá em baixo em Layout > Então vc tem acesso às opções de posição e tamanho dele, além de fonte.2 points
-
Quick update, project is very much alive and loads of progress has been made since this topic was made. I'll add a new comment soon outlining the work we've done over these 6 years. I usually just do updates on our Discord server but realized that there's possibly a group of people out there that might be trying to get their updates on the project here.2 points
-
Hi!, my name is Laxante101, I'm a .Lua developer, And today I will try to help you understand SQlite WHAT IS SQLITE? SQLite is a relational database management system (RDBMS) that does not require a separate server to function. Unlike database systems like MySQL or PostgreSQL, which need an active server process, SQLite is "embedded" (that is, the database is stored in a local file on disk), and operations with they are made directly within the program that uses it. Luckily for us, SQLite is already built into the MTA. This means that you can use SQLite databases directly in your MTA Lua codes without having to install anything additional "external" or configure an external database server. SQLite support is native to MTA, facilitating the use of databases for persistent storage of in game information. It is normally used on servers that do not use the login panel, they use SQlite so their information that would be saved in accounts is now saved in the .db file. Or on servers that don't use the original game money, they create other types of “money” like diamonds, stars which are all saved every day, well that's usually the case IMPORTANT DETAILS • Simplicity: Doesn't require anything other than a notepad • Portabilidade: Data is stored in a single .db file, which makes backup and migration easier. SQlite Global Structure Connect to Database with dbConnect Execute Queries using dbExec to modify data and dbQuery to recover data. 3. Manipulate Results with dbPoll and process the returned data. Connection to the Database the database file can be created automatically when connecting. The database file is saved in the server's root folder. local db = dbConnect("sqlite", "storage.db") or if you want to automatically create a folder for your file, or to save your .db files, if it is not created it creates it automatically, if it is created it just puts the file in the path. local db = dbConnect("sqlite", "db/storage.db") in this case the "db" folder will be created Creating Tablese data, you first need to create tables in the database. This is done using normal SQL commands like consulta local = [[ CREATE TABLE IF NOT EXISTS players ( id INTEGER PRIMARY KEY AUTOINCREMENT , name TEXT , score INTEGER ) ]] dbExec ( db , query ) Create a player table if it doesn't already exist In this case, we are creating a players table with three columns: ID Name Score Table Structure TEXT: STRINGS INTEGER: STORAGE NUMBERS REAL:STORES FLOATING POINT NUMBERS BLOB: STORES BINARY DATA (images, files). NULL: NIL VALUE If you don't understand what a string or Boolean values are, learn about data types VIDEO HERE Entering Data To add data to the database we use the SQL command INSERT INTO function AddPlayerLX1(name, score) local query = "INSERT INTO jogadores (name, score) VALUES (?, ?)" dbExec(db, query, name, score) end AddPlayerLX1("juninho", 100) The INSERT INTO command inserts a new player with the name "juninho" and score 100 into the players table. Note: The question marks (?) are placeholders for the values that will be passed to dbExec. This helps prevent SQL injection. Deleting Data To remove data from the database, we use the SQL DELETE command DELETE function DeletePlayerLX2(name) local query = "DELETE FROM players WHERE name = ?" dbExec(db, query, name) end DeletePlayerLX2("juninho") Error Handling It is important to verify that database operations were successful. MTA doesn't automatically return detailed errors other than "/debugscript (1, 2, 3)" so let's add checks. function AddPlayerLX3(name, score) local query = "INSERT INTO jogadores (name, score) VALUES (?, ?)" local sucess = dbExec(db, query, name, score) if sucess then outputDebugString("Sucess.") else outputDebugString("Error.") end end IF SUCESS THEN the success variable stores the result of the dbExec function. If the SQL command execution was successful (i.e. the player was added to the database), success will be true. If success is true, the code inside the if block will be executed. else If the success value is false (that is, if the player's insertion fails for some reason, such as an error in the database connection or SQL query), the code inside the else block will be executed Optimizations and Best Practices Optimizations are great for your day-to-day life as a developer, this makes your code more beautiful, less likely to give you server overload errors, etc... Remember to use dbFree to flush queries after use, especially if you are not using dbPoll. local LX4 = dbQuery(db, "SELECT * FROM players") dbFree(LX4) There are several ways to create clean code, I left just one of them Let's be clear: Since the SQLite database is a flat file, you can back it up by simply copying the .db file. To restore the database, simply replace the old file, this is a big advantage of using SQlite instead of using external databases. OBS: All codes were made based on an example of player name and id points, not made in a real project. (just to make it clear That's all I remembered, if there's anything I didn't make clear here you can say it and I'll edit it or respond to you2 points
-
Ayy I used to work on MTA wayyyyy back when it started and everyone was figuring it out. With all the reverse-engineering and hacking, coding etc it was actually a bit of an adventure. I started working on a multiplayer GTA myself because I wanted it so bad (ill equipped but determined), and ended up joining with some of the early team. Really proud of everyone getting it together and keeping it going. I remember when we first got shooting working and we were all shooting each other outside that Vice City club that was the default spawn point for a while. I'll always remember the feeling of being the first people that ever played multiplayer GTA... wanting it so bad we manifested it. - Personally I just kept programming and doing random game dev stuff, I released a game made in Unreal Engine using the voxel plugin: https://store.steampowered.com/app/1079300/Goblin_Keep/ I felt incapable of supporting the game after release but I did it for the same reason at MTA, I just wanted to do it. Thanks to the team for keeping this going, who all did a lot more work on it than me2 points
-
A new fix has been released for Cinema Experience. Due to another update to Youtube TV a few major bugs were introduced again, unfortunately. Changelog: - Fixed video playback due to guest screen not being clicked through - Fixed an issue where skipping a video would prevent the next video from playing. - Improved button check performance On going issues: - Ads are no longer blocked (The MTA client used to block them, hopefully it's a per client issue and not a global thing) - Very long 20-40 second ads sometimes keep appearing everytime a new video starts Let me know if you find any other issues or if you exerperience any problems with the ads or none at all. All feedback is appreciated, good or bad. Get the latest version (v2.3.3) here: https://community.multitheftauto.com/index.php?p=resources&s=details&id=129502 points
-
I have designed a Snake game in my Multi Theft Auto project using the Lua programming language, implementing all functionalities and dynamics. Additionally, I have designed the controls to be very functional, allowing gameplay with either a keyboard or Xbox/PlayStation controllers. Here’s a link for you to watch.2 points
-
2 points
-
Hello there, Today, I am excited to present my latest Old School map named "Dragonspine" My aim was to capture the beauty and atmosphere of this stunning location. The area is particularly cold, just like in the game, with a bar strategically placed to remind you of the cold surroundings. Unlike the game, I have incorporated several cozy fireplaces to ensure warmth is always within reach. As promised, I am working diligently to bring the regions I mentioned to this game. The next region to come may be Natlan, the nation of Pyro element. If all goes according to plan, I also plan to bring the region of Liyue, known as the "Nation of Geo" and famous for its epic archon quests, along with the Girdle of the Sands, a subregion located within the desert area of Sumeru. I am undecided on making a map for Mondstadt as it contains mainly long forests, rocks, and other less interesting features aside from its main city center and Stormterror's lair. The region does have a calming atmosphere and music, but I'm unsure if it would be enough for a unique and engaging map. Although Dragonspine serves as a bridge region between Liyue and Mondstadt, it is technically connected to Mondstadt because the Statue of the Seven located there is an Anemo element. This connection is explained by the fact that the Anemo ruler's dragon friend Dvalin fought the evil dragon Durin in this region. The remains of Durin's bones are visible in this area. Even his heart can be found here. The map incorporates features and environmental elements borrowed from the game: Sheer Cold Just like in the game's mechanics, a bar will appear at the middle bottom of your screen to remind you of the coldness of the area while you are playing the map. Camp Bonfires These fires have been lit intentionally by someone or something. When you come across them while freezing in the cold, they provide instant relief as their strong flames quickly warm you up. (You don't need to get too close to them.) Snow of Wind Despite being a snowy region, you might not see much snow because when you acquire the Anemo element, the wind will blow away most of the snow in the area. Snowfall occurs only in specific areas. And to prevent any drops in FPS during driving, the heavy snow effect in the first part of the map has been removed and restricted to specific areas. Jade Chamber? or Celestia? In the video, at timestamp 1:28, you can spot a flying, land-shaped object resembling the Jade Chamber (the upcoming Liyue map). Additionally, one could speculate that Celestia might be visible from Dragonspine. Not to mention, the broken pillar at the video’s end is said to have fallen from Celestia. Despite having a dark lore, Dragonspine was released early into the game’s lifespan, thus it lacks epic music compared to other later areas. As such, I chose to blend in calming music of the area to capture its tranquility. Credits Video & Edit by VonKasty Detailed credits can be found in the video's description. I would like to express my sincere thanks to VonKasty for being kind enough to record my maps so far! He is planning to start recording again. If you'd like to show your support, be sure to subscribe to his channel! About Sheer Cold Behind the Cool Bar system in this map is the hard work of Megadreams, who wrote the scripts for it. On my part, I focused on designing the User Interface (UI) and sounds to complete the overall experience. I must give a big shoutout to Megadreams from the MTA Team! While I was in the process of creating the map, not only listened to my Cool Bar idea but also helped me bring it to life Beta testers Following the tradition of hosting beta testers for maps, just like in Fontaine, I would like to thank those who tested the map for the first time and provided their suggestions and feedback on areas for improvement and fixes. @Megadreams @Esp4wN @Nico834 @Leoo123x @Jenga @iamcthulhu Your contributions are greatly appreciated! If you wish to participate in the beta versions of my upcoming maps, reach out to me on Discord. Whenever I share a map with the caption "Coming Soon," it's a sign that the beta test is complete. Something more to add: FDD Maps Update I have noticed some players are experiencing FPS drops playing my FDD maps when the room is full or crowded. To address this issue, I plan to use a method that minimizes the number of objects used. By using fewer objects, the lag will be kept to a minimum. I will create my own 3D models to achieve this. Of course, I will not rely solely on 3D models for decoration; I plan to reduce the overuse of excessive decorative elements by incorporating 3D models. Additionally, I will optimize the textures to further enhance performance and reduce lag. For example, in the Nebla - Tenshukaku map, the file size of the Electro symbol is 436 KB. By optimizing the texture, it can be reduced significantly to 60 KB. I will implement this optimization technique for my future maps. I do not plan to make any modifications to the maps I've already released. However, if necessary, I will intervene and optimize them to the best of my ability. Feel free to report to me Best regards, Nebla2 points
-
Salutare, @FlorinSzasz! O temă de discuție foarte inspirată, felicitări! Alături de @Diaz și @benzema100, ulterior împreună cu @Louie și @Skyler (Raulito), am demarat în 2016 proiectul Los Santos Roleplay în comunitatea românească de MTA, ca o alternativă la acea vreme pentru ceea ce se regăsea pe SA-MP și totodată pentru a aduce un server serios de hard-roleplay în lista de servere românești. tl,dr: pasiunea pentru roleplay, dorința de a oferi o experiență de joc calitativă, cadrul creativ și de problem-solving, dar și oportunitatea de a învăța lucruri noi au stat de la bun început la baza eforturilor de a deschide comunitatea Los Santos Roleplay în România. Specific pentru platforma MTA a fost gradul de inovație, flexibilitate și siguranță/securitate pe care nu cred că îl puteam atinge pe alte platforme precum SA-MP. Deși am activat foarte mult timp pe SA-MP în administrația unei comunități populare la acea vreme, începuturile mele legate de scripting, multiplayer și roleplay în general au avut loc aici, pe MTA, unde am considerat întotdeauna că există o organizare mai bună, posibilități tehnice & creative infinit mai numeroase și per total o experiență cu potențial mult mai calitativ față de ceea ce a oferit și, într-o măsură restrânsă, oferă și acum SA-MP. În ciuda faptului că platforma MTA se confruntă aproape dintotdeauna cu un soi de stigmatizare eronată din partea românilor crescuți și obișnuiți pe SA-MP (care reprezintă și majoritatea comunității românești), am trăit mereu cu speranța că prezența unui proiect construit pe rigori similare celor de acolo va atrage interes din partea acestora și, poate, o schimbare în abordare față de platforma MTA. Am avut plăcerea și oportunitatea să activez în acest domeniu (într-o capacitate foarte implicată) în ceea ce consider vremurile cele mai prospere pentru text-based roleplay în România și am putut avea termen de comparație privind de-a lungul anilor asupra modului cum s-au modificat așteptările, nevoile și interesele jucătorilor. Indiferent de platformă, sfera de roleplay a fost, este și va rămâne mult timp de acum încolo pilonul central al comunităților românești, alături de RPG și alte câteva tipuri de gamemode. Fiindcă aveam know-how în acest domeniu (tehnic și administrativ), plus niște oameni extraordinari alături de mine, am decis să încercăm să punem bazele unui astfel de proiect. De-a lungul anilor am avut diverse încercări și de fiecare dată am plecat de la aceeași premiză și anume să oferim o experiență de joc care să întrunească standardele și principiile pe care noi le considerăm calitative, fără să facem rabat de la acestea pe parcurs. Faptul că am avut oportunitatea de a intra în contact cu diverse fațete a ceea ce presupune administrarea unei comunități (forum, hosting, programare, marketing etc.) care au fost cu totul noi pentru mine a reprezentat, de asemenea, un mare avantaj. Există totodată un entuziasm și un sentiment plăcut să poți împărtăși inovațiile și munca (de multe ori asiduă) depusă la nivel de echipă pentru a construi ceva care (cel puțin în teorie) ar trebui să fie pe placul jucătorilor. În contextul actual (să nu uităm că GTA:SA împlinește 20 de ani în octombrie și GTA VI bate la ușă!) și după atâta timp în care am activat în acest domeniu, pot spune că cel mai important lucru care ar trebui să stea la baza oricărui fel de demersuri legate de un server este satisfacția personală, care poate dobândi bineînțeles diverse forme și abordări (ambiții financiare/non-financiare, popularitate, împlinire intrinsecă etc.). Totuși, atâta vreme cât ești mulțumit de munca și rezultatele tale (obiectivele pe care ți le propui în spatele unor eforturi de acest gen) și cel mai important: privești aceste proiecte ca un hobby/plăcere în timpul liber, consider că restul aspectelor nu mai au atâta relevanță și lucrurile devin extrem de simple, întrucât vei face lucrurile din pasiune și asta va reprezenta cea mai bună motivație posibilă. În prezent, în echipa lsrp considerăm că am ajuns într-un punct în care (în plus față de toate cele de mai sus) ne dorim să aducem un suflu proaspăt din punct de vedere tehnic și să schimbăm paradigma clasică care bântuie de atâta timp comunitatea românească; ne place ceea ce facem și depășirea provocărilor care vin la pachet cu un astfel de țel reprezintă cea mai mare motivație pentru noi.2 points
-
Lua Language Server - Definition files The Lua language server is a powerful tool that enhances the development experience for Lua programming. It provides a comprehensive set of code editing features, including suggestions, auto-completion, and error checking. With the Lua language server, developers can effortlessly navigate through their resource files, access documentation easily, and ensure code correctness by giving warnings. Why should you care? The language server will inform you about all sorts of problems: type mismatches, missing function arguments, missing variables, etc. You have access to a lot of MTA syntax/autocomplete out of the box. The syntax information will remain while writing. You do not have to restart your resource so often in order to validate if everything is working. Type validation Having value type validation in your code editor is one of the main key features of the Lua Language Server. When working with variables, parameters, and arguments in Lua, you are not restricted to specific value types. This flexibility can make mistakes more likely to happen. However, being able to validate those mistakes instantly saves you a lot of time and frustration. Type annotations for your own functions Adding type annotations to your own functions can help improve validation and catch logic mistakes. It is particularly useful when calling functions from different parts of your code, as the annotations provide clarity on the expected input (arguments) and output (return values). Additionally, comments that are placed above or adjacent to a variable or function are visible when hovering over them in another file or line. This can provide helpful information and context when working with the code. How that looks like: How can I quickly add annotations in less than a second? Open the spoiler: AddEventHandler auto-complete Most MTA addEventHandler functions have full eventName autocompletion. And the attached anonymous function is fully autocompleted and typed as well. Navigation features of Lua Language Server It can be time consuming to find out where a (global) function or variable is located. Being able to jump right to it, saves you a lot of time. Other information which you can find in the readme Installation for the Lua Language Server How to use the definition files? Known issues Make sure to always have an empty new line at the end of your files, as recommended in this issue. Currently, the Lua server language definition files do not have a clear separation between serverside functions/events and clientside functions/events. However, it is possible to enforce this separation for specific functions if needed. outputChatBox--[[@as outputChatBox_server]]("Serverside", player) In certain cases, certain functions in the Lua server language definition files may return multiple types, even if you have selected a different syntax. To handle this situation, you can use the `cast` or `as` notation to explicitly specify the desired type or adjust the returned type. See `Casting and as` syntax below. Casting and as In certain situations, you may have a strong understanding of the type(s) that a variable or expression will have. This is where the keywords "cast" and "as" come into play. These keywords enable you to explicitly specify the intended type, ensuring proper type handling. local varName = exampleFunc() ---@cast varName string local varName = exampleFunc() ---@cast varName string | number local varName = exampleFunc() --[[@as string]] local varName = exampleFunc() --[[@as string | number]] Download The definition files can be downloaded here.2 points
-
Did you know that the definition file counts up to a whopping 1364 unique functions? While the actual value might be higher or lower (missing, unknown, class/OOP or deprecated functions). Having this amount of functions in MTA is an incredible accomplish by this community. Some other statistics: 125 client unique events 88 server unique events2 points
-
Looking forward to seeing how this turns out, you know I love me some newmodels2 points
-
Yes, you can only track the client's resources download progress using that event ^ Downloading resource(s) can happen immediately when the player joins the server (downloaded resources are started progressively as their downloads finish) or during the gameplay if an admin/dev restarts a resource or starts a new resource that needs to be downloaded. To make a Loading/Downloading panel that appears when the player joins you just need to wait & check if the player is downloading, track the progress, and when done, initiate the next step (can be a login panel). Tracking download progress later during gameplay doesn't really matter.2 points
-
@IIYAMA I think OP was referring to the status of the download. @Whizz You can get the download status with the OnClientTransferBoxProgressChange event See here: https://wiki.multitheftauto.com/wiki/OnClientTransferBoxProgressChange2 points
-
Normally you use a table. But if you aren't able to work with those yet. Here is a very dirty way of doing it: for index=1,50 do guiSetVisible ( _G["button_"..index.."_img"], true ) end The _G accesses global variables. (variables without the keyword local in front of them) It is not recommended to use this method more than once. It is purely to demonstrate how to do it your way. But not the way Lua intended it to be used For working with tables, please take a look at:2 points
-
Debugging Do you know what debugging is? You might think you do, but unfortunately (in my opinion) only ~15% of the scripters in the community do know the full definition of it. Many people think that debugging code is the same as looking in to the Debug Console and waiting for warning + errors to show up. That's indeed debugging and yet it never provide all information you need to build your scripts. It only can say what goes wrong at a certain line. With other words, the Debug Console by default will only show a limited amount of mistakes you have made in your code. So what is next? You fixed all warnings and errors and yet it doesn't work. You start with making your code visible! I guess 70% would think: Making code visible? Ehhh how??? Let me write it down a little bit different: By using Debug Information making the behaviour of the code visible. I guess 50% would think: Eh what? behaviour of code????? Let me give you an example. Example: (1) outputDebugString("the script has started") -- < this is a debug line if true then outputDebugString("code works here") -- < this is a debug line else outputDebugString("code shouldn't be working here") -- < this is a debug line end Debug console "the script has started" "code works here" The debug console is NOT information for players, it is information for YOU developers! BTW this is a debug line outputDebugString("test") -- < this is a debug line In this case it is just a piece of code that shows information in the debug console. Example: (2) local playerName1 = "snake1" local playerName2 = "cow" if playerName1 == playerName2 then outputDebugString("players playerName1 and playerName2 do share the same name. Name: " .. tostring(playerName1)) -- < this is a debug line else outputDebugString("players playerName1 and playerName2 do NOT share the same name. playerName1: " .. tostring(playerName1) .. ", playerName2: " .. tostring(playerName2)) -- < this is a debug line end Debug console "players playerName1 and playerName2 do NOT share the same name. playerName1: snake1, playerName2: cow" Easy isn't? The concept behind this debug method is to see what the code does / doesn't execute. Is this method handy? It is actually the very basic of debugging, for code that doesn't contain any errors/warnings. I would say it is handy and it is a very powerful method too. It is also handy for people who do not know how to script. If you want people to help you with your code, but you do not know what is wrong with it. You can add those debug lines and point out to where the code stops working. This will make it more efficient for you and the scripter to work out the problem, because the scripter knows where to look. How much debug lines do you have to add to your script? 1? 10? 100? 1000? You could start with around 100 debug lines and as you learn how to script, you can reduce it to 10+ debug lines. Too much debug lines are not always good, because they will give you too much information and it will cost time to manually filter them. So I recommend you to remove some of them afterwards. When you are finished with the tested code, you can remove 90+% of them. Feel free to disable them instead of removing them, if you know that you are going to need them again. For complex code, I use around 25 debug lines, SO DON'T HOLD BACK! Render events It is strongly recommended to remove debug lines that are executed on onClientRender/render events when you are finished with your code. Because that can have influence on the smooth fps.(It will not drop much of the fps, but it can make it feel unsmooth) Clearing the debug console? /cleardebug Know your tools: outputDebugString -- Show a message on the Debug Console bool outputDebugString ( string text, [ int level=3, int red=255, int green=255, int blue=255 ] ) --- outputConsole -- Show a message on the F8 panel. bool outputConsole ( string text ) -- client bool outputConsole ( string text, [ element visibleTo=getRootElement() ] ) -- server --- inspect -- Convert one mixed value to a string. string inspect ( mixed var ) --- print -- Show a message on the terminal / serverwindow / Debug Console. bool print ( string var1[, string var2, string var3...] ) --- tostring() -- Convert a value in to a string. (but for objects/elements, inspect works better) --- iprint -- Show a message on the terminal / serverwindow / Debug Console (convert multiple mixed values automatic to string, no need for tostring or inspect) bool iprint ( mixed var1[, mixed var2, mixed var3...] ) --- outputChatBox -- You can also debug with outputChatBox (even though it is less efficient) bool outputChatBox ( string text [, int r=231, int g=217, int b=176, bool colorCoded=false ] ) -- client bool outputChatBox ( string text [, element visibleTo=getRootElement(), int r=231, int g=217, int b=176, bool colorCoded=false ] ) -- server Debug message levels 0: Custom message 1: Error message 2: Warning message 3: Information message (default) Addition by @Hale https://wiki.multitheftauto.com/wiki/OutputDebugString Advanced tools: local line = debug.getinfo(1).currentline -- get the line of the script where the code has been executed. 1 = current function. (can be useful if you want to get the line where this function has been called from) https://www.lua.org/pil/23.1.html WIKI MTA: WIKI MTA debugging tutorial/information. https://wiki.multitheftauto.com/wiki/Debugging2 points
-
Hi, I've published a few resources related to GTA San Andreas IPL parsing and loading on MTA:SA. Load and convert IPL map files in MTA:SA to spawn objects in your server! https://github.com/Fernando-A-Rocha/mta-ipl-map-loader Convert Map Editor (.map) to IPL format: https://github.com/Fernando-A-Rocha/mta-map-to-ipl Convert Binary GTA:SA IPL files to the text IPL format: https://github.com/Fernando-A-Rocha/mta-binary-ipl-to-text Enjoy!2 points
-
There have been some updates for the new 1.6 functions, but it is still an ongoing process. Feel free to pull for newest version if you want to try out some of the new stuff with it's up to date syntax. Of course for the patches as well. Special thanks to: @srslyyyy @FernandoMTA Known syntax to-do's in the near future: fxCreateParticle (wiki link) Done! by FileEX EngineSet/GetPoolCapacity by TheNormalnij2 points
-
Hi there! Today, I would like to share with you my texture pack, which I have utilized in my previous maps. I will be updating this thread after every ten maps I create, as planned. I truly hope you enjoy using these textures! Eternal Lightning (Nebla - Inazuma) Sumeru's breath (Nebla - Sumeru) Memorial of Deshret (Nebla - Mausoleum of King Deshret Trial of Fontaine (Nebla - Fontaine) Mars Mission (Nebla - Mars Effect) Reaper Chase (Nebla v.7 - Mass Effect) Academic tactics (Nebla - Akademiya) Iram's Past (Nebla - Iram of The Pillars) Fresh Pool (Nebla ft. ZeRoXy - Revolt: Pool Days) Virtualist (Nebla ft. DiatroN - VirtuaL) Download Full Pack Installation (For Testing & Preview) Download any texture file(s) you liked Extract zip files and put them into server/mods/deathmatch/resources Get in game and type /refresh & then type /start [Texture file name] For example, /start EternalLightning Installation for engaging the texture with your map Copy all the files in the file except meta.xml and then put them into your map file open the meta.xml in the texture file and copy the codes paste them into your map's meta.xml without lines below If the texture file has extra brown.dff & grey.dff put the code below into your map's meta.xml <script src="client.lua" type="client" /> <file src="grey.dff" type="client" /> <file src="brown.dff" type="client" /> <file src="vgehshade.txd" type="client" /> <file src="vgsehseing1.txd" type="client" /> If there aren't extra grey.dff & brown.dff files, simply remove them in meta.xml code like as below <script src="client.lua" type="client" /> <file src="vgehshade.txd" type="client" /> <file src="vgsehseing1.txd" type="client" /> In some files, there may only be 'vgsehseing1.txd.' So, you need to remove 'vgehshade.txd' from the meta.xml because that file does not exist. Be cautious with this part; if you test your map with a defined texture that is not present in the map, it may don't start your map. If that happens, simply don't panic. And read below Solution: go to server/mods/deathmatch/resources and delete everything in editor_dump & editor_test files. Then get in game and type /restart editor_main /restart editor_gui /restart editor_dump And done, you can play your map now. Don't worry, your map is not gone; it's actually bugged due to including a texture in the meta.xml file as if it exists in the map, even though it does not exist in the actual files. Your sincerely, Nebla2 points
-
Made a 10 minute showcase video of it today, as I feel it helps to show it better than a handful of screenshots! TM2 points
-
This is where I keep a list of all the free & open source MTA resources/projects I've created and made available to the community. Join my Discord community where I post updates of all my projects! https://discord.gg/eUK7HcnT2J Click the images to access each project's landing page. All resources are available on community.mtasa.com (unless otherwise specificed). Other releases: IPL Tools: GTA:SA & SAMP .IDE Search Tool: https://github.com/Fernando-A-Rocha/mta-ide-search I hope you find my contributions useful. Suggestions are always welcome as well as criticism. Enjoy!2 points
-
With the rise of specialised anti-DDoS solutions, it is possible to make your MTA server almost immune to DDoS attacks, should you know how to isolate your other services & ports properly so that the specialised DDoS protection can absorb everything. For example, the market-leading soyoustart and OVH GAME anti-DDoS provides 100% protection with MTA natively supported through their protection layer (if you enable it for your specific MTA server UDP ports in their Hosting Control panel).. so that you can't be DDoSed if the following circumstances are met: * There is no attack method that your hoster, e.g OVH still needs to patch (they surface every now and then, it's a cat and mouse game) * You managed to isolate other services and ports, this requires a serious extent of skill and understanding of networking (like being a sysop or having studied for it) As part of 1 of the isolation steps, securing your HTTP resource download interface can be important. This guide is for that particular thing. If you use the internal HTTP server in MTA server, you aren't protected at all (except for maybe your hoster's general traffic firewall).. if an attacker can't deal serious damage through sending DDoS to your UDP ports, they will usually carry out TCP attacks next. More details on isolating other services & ports may follow in the future in Reserved posts to this topic. Let's get to the point: Basic tutorial for setting up Cloudflare for HTTP server in MTA 1. Add your domain to CloudFlare, using it as your DNS provider. It will tell you what nameservers to assign to your domain 2. Under the DNS tab create an A record for either your subdomain or the domain itself that should point to your Nginx. In here add the IP address to the Nginx server. (NOTE: You should use the standard HTTP port in your Nginx config and use that subdomain as your server_name). Make sure to tick the proxy status to on so that the request is proxied 3. In your mtaserver.conf set httpdownloadurl to whichever (sub)domain you assigned for the downloads You can then further modify your CloudFlare settings to have https, a firewall setup etc. But that's a lot more specific than what you may go with initially. Under "caching", then "configuration" you can setup how the caching itself should work Extra info (to help you understand the logic of this infrastructure): - For using CloudFlare in this way, you need just a domain, no webhost (other than the nginx External HTTP server itself). You need to be able to point the nameservers to Cloudflare. You will have to modify the DNS records at Cloudflare, and point it to your nginx External HTTP server. Since you can't just upload that data to Cloudflare and have them handle it that way The subdomain is essentially just used for Cloudflare to proxy request through, when it has that data cached it will serve it itself If not it will go further to your Nginx server to fetch it, then caches it - It is recommended to use a separate machine (VPS/dedicated server) to host your External HTTP, which Cloudflare is connected to on its time. Why? Because it helps you to isolate from DDoS attacks.. for reasons like these: * keeping your real host IP hidden is crucial to benefit from the added protection of Cloudflare. If you use a host on the same machine as your MTA Server is, it's easy to leak the IP, rendering your CloudFlare useless should they attack it directly rather than where it gets served from (Cloudflare hosts). * if an attack hits your HTTP server after all, load won't get forwarded to your main MTA server machine and immediately freeze its CPU with 100% usage/disconnect all players2 points
-
These skins are only for displaying purposes atm, both Gwen blue & orange are already into MTA -- this might change in the future as I have invested a lot of time into them, some are pre-made like serpent & gwen, as I managed to import what can be imported, they might feel different than the original versions and missing some components. Glossy Seprent Minecraft goldsrc Windows98 Gwen Blue Gwen Orange2 points
-
What is a Helper? Helpers are regular members of the Community who dedicate some of their time to help others. They are recognized by MTA for standing out as friendly and helpful support for scripting, technical and other topics. Helpers serve as role models for the Community and are easily approachable for general advice, problem solving or pointing to the right direction. Helpers can move threads into the correct sections, but cannot assist with moderation, unless they are also a Moderator. They can be identified by their unique rank and colored name. How can I become a Helper? Helpers are recruited through invitation only. There is no way to apply for this role, however we are on constant lookout for, and pick members who provide solid, helpful advice over a longer period of time. To make communication easier between MTA Staff and Helpers, they have their own private channels to liaise and discuss general Forum and Discord issues. It is required to have a Forum account in order to become a Helper, but there are no activity requirements. List of Helpers Tekken iDannz Cuervo_fi Paweł The_GTA Reyomin Vampire Abasalt_Yar Nico834 Kecskusz TMTMTL2 points
-
You can multiply the blur if you render the screen source multiple times on a render target. Beware, it has a huge peformance impact. Lua Script: http://pastebin.com/10DumXhb Blur Shader: http://pastebin.com/VfAnetdB2 points
-
Thanks IIYAMA, FindRotation3D worked for the getting rotation. Did not achieve the desired result with a rocket projectile (19) though. Even after rotating it directly at point_B the projectile eventually starts heading out in a different direction, not exactly sure whats up with that. I think an easy way to fix that is using createObject along with moveObject and stuff, but in this case, what should I use to properly send projectiles from point A to point B since createProjectile only has starting position arguments to work with?1 point
-
1 point
-
Hi, Please provide your game serial. This is needed so the anticheat team can further investigate your case. You can grab your serial by launching MTA, opening the console (F8 key by default) and typing 'serial' without any quotes.1 point