Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 28/06/21 in Posts

  1. -- HELI CRASH SIDES local fgCrashSpawns = { ["helicrash"] = { {1146.16,1221.79,10.1}, }, } local fgLootItems = { ["helicrashLoots"] = { -- WEAPONS {"M4",1}, {"AK-47",1}, -- ITEMS {"Toolbox",2}, {"Infrared Goggles",1}, {"Night Vision Goggles",1}, {"GPS",2}, {"Map",2}, -- MED {"Painkiller",8}, {"Morphine",8}, -- CLOTH {"Punk Clothing",2}, {"Ghillie Suit",3}, -- BACKPACK {"Alice Pack",1}, {"Czech Backpack",1}, {"Coyote Backpack",1}, {"OS Backpack",1}, }, ["helicrashMags"] = { {"M4 Mag",1}, {"AK Mag",1}, }, } function math.percentChance( percent, repeatTime ) local hits = 0 for i = 1, repeatTime do local number = math.random( 0, 200 ) / 2 if number <= percent then hits = hits + 1 end end return hits end function createHeliCrashSite( ) if heliCol then destroyElement( getElementData( heliCol, "parent" ) ) destroyElement( heliCol ) destroyElement( heliBlip ) end local item_id = math.random( 1, #fgCrashSpawns["helicrash"] ) local x,y,z = fgCrashSpawns["helicrash"][item_id][1],fgCrashSpawns["helicrash"][item_id][2],fgCrashSpawns["helicrash"][item_id][3] helicrash = createVehicle( 417, x,y,z+1,0,0,90, nil, nil, nil ) blowVehicle( helicrash ) setElementFrozen( helicrash, true ) heliCol = createColSphere( x,y,z, 6 ) heliBlip = createBlip( x,y,z, 5 ) outputChatBox( "#ffdf32[Klarice] #e5e5e5New Heli-Crash has been destroyed!", root, 0, 255, 0, true ) setElementData( heliCol, "parent", helicrash ) setElementData( heliCol, "helicrash", true ) setElementData( heliCol, "MAX_Slots", 0 ) for i, item in ipairs( fgLootItems["helicrashLoots"] ) do local value = math.percentChance( item[2] * 3.5, 15 ) setElementData( heliCol, item[1], value ) end for i, item in ipairs( fgLootItems["helicrashMags"] ) do setElementData( heliCol, item[1], math.random( 10, 30 ) ) end setTimer( createHeliCrashSite, 3600000, 1 ) end createHeliCrashSite( ) meta.xml : <meta> <info author="shady" name="heliCrash" version="1.0" type="script" /> <script src="helicrashes.lua" type="server" /> </meta>
    1 point
  2. Veículos criados client-side servem apenas para visualização. Eles não podem ser usados por jogadores. O evento onPlayerVehicleEnter é server-side, então não vai funcionar em scripts client-side.
    1 point
  3. You can solve this problem by creating an event on client side and running it with triggerClientEvent on server side client: local sound addEventHandler("onClientResourceStart", resourceRoot, function() setTimer(function() sound = playSound("winsound.mp3") end, 2000, 1) end ) addEvent("stopLoginMusic", true) addEventHandler("stopLoginMusic", root, function() if isElement(sound) then stopSound(sound) end end ) server: addEventHandler("onPlayerLogin", root, function() triggerClientEvent(source, "stopLoginMusic", source) end )
    1 point
  4. Eai, tudo certo? Existem diversas maneiras de atingir esse objetivo, vou tentar te explicar a maneira que eu usaria. Na resource em que você faz a troca de linguagens: -- Adicione um evento, que será chamado sempre que houver mudança na seleção de idioma addEvent('onChangeLanguage', true) -- Adicione alguma maneira de trocar o idioma enquanto joga, já que no seu caso ele só está sendo setado entrar no jogo -- Por exemplo: ao clicar em um combobox de seleção de linguagens, chame a funçao abaixo SetNewLanguage = function(newLang) setElementData(localPlayer, 'language', newLang) -- Chame o evento (depois de atualizar o valor da linguagem atual) triggerEvent('onChangeLanguage', localPlayer) end Na outra resource (onde você criou alguma interface GUI): -- Incie uma tabela para armazenar os dados local toTranslate = {} -- Crie uma função para inserir os elementos dentro da tabela AssignTranslation = function(element, value) toTranslate[element] = value end -- Crie uma função para traduzir todos os elementos da tabela TranslateUI = function() for elem, value in pairs(toTranslate) do guiSetText(elem, exports.DayZ:getLanguageTextClient(value)) end end -- Adicione um handler para o evento de quando se troca de idioma, para forçar a tradução dos elementos que estão na tabela addEventHandler('onChangeLanguage', localPlayer, TranslateUI) -- Crie os elementos gui e configure uma tradução pra eles local guiWindow CreateUI = function() local w, h = 500, 500 guiWindow = guiCreateWindow((sW - w) / 2, (sH - h) / 2, w, h, '', false) AssignTranslation(guiWindow, 'settingsL') guiSetVisible(guiWindow, false) local label = guiCreateLabel(100, 100, 200, 200, '', false, guiWindow) AssignTranslation(label, 'playL') end addEventHandler('onClientResourceStart', resourceRoot, CreateUI) -- Adicione um comando para exibir/esconder a janela addCommandHandler('toggle', function() if (not isElement(guiWindow)) then return false end local state = not guiGetVisible(guiWindow) -- Caso vá exibir a janela, chamamos a função para traduzir os textos if state then TranslateUI() end guiSetVisible(guiWindow, state) showCursor(state) end) Dessa forma, sempre que você trocar de linguagem ou abrir a interface, todos os elementos GUI serão traduzidos para a linguagem atual do jogador. No caso de funções DX (como dxDrawText), não é necessário fazer esse procedimento, já que elas são chamadas a cada frame com o valor atualizado, a única recomendação que eu deixaria é que você crie uma função para fazer cache das traduções, justamente para evitar ficar chamando via exports o tempo todo, que pode causar uma grande perda de desempenho. Algo como: local cache = {} Translate = function(text) if (cache[text] == nil) then cache[text] = exports.DayZ:getLanguageTextClient(text) end return cache[text] end Dessa forma, ao invés de ficar sempre chamando o exports, voce chamaria diretamente a função Translate. Boa sorte
    1 point
  5. Lua tutorial for absolute beginners This tutorial can also be viewed on GitHub This tutorial aims to teach the Lua scripting language to those with 0 previous experience with programming / scripting. This guide will start with explaining some Lua concepts, and will later on move to explaining MTA:SA specific concepts. Table of contents: Lua Scripts Variables Data types Operators If statements Functions Return values scopes & locals For loops Tables Iterators (pairs/ipairs) Callbacks Anonymous functions MTA Server & Resources Server vs client MTA functions & wiki Elements (userdata) Command handlers Event handlers predefined globals server <-> client communication Now what? Lua This part of the tutorial discusses Lua itself. No MTA-specific concepts will be discussed here. Scripts The Lua scripting language is a language which is interpreted by a "Lua interpreter". MTA:SA's resources use such an interpreter to run Lua code. For the beginning of this tutorial you can use the online Lua interpreter available on https://www.Lua.org/demo.html. Any code in the Lua part of the tutorial can be run on this website. Lua is written in "plain text". This means it exists of regular characters like any other text you are writing. To edit Lua files you will require a text editor. You could use Notepad, but there are many far better alternatives. My personal favourite is Visual Studio Code, but there are many other good options, to name a few: Atom, sublime text, notepad++ Lua files are usually saved with the .Lua file extension Variables The first concept we're going to discuss is variables. Variables allow you to store a value in your code. For example: x = 10 print(x) print(x) will output the value of the x variable. We will get into what exactly print is later in the tutorial. Variables can have any name you want, as long as you follow some specific rules. variable names must start with a letter (lower or upper case), or an underscore (_) variable names may contain letters (lower and upper case), numbers and underscores. x = 10 y = 20 z = 30 print(x) print(y) print(z) The convention in Lua is to name your variables in "camelCase". This means if a variable exists of multiple words you start every word with a capital letter, except for the first one. camelCaseVariable = 5 Data types So far we've seen variables used to store numeric values, but there are many different types of data Lua can handle. These are: number Any numeric value string A piece of text, a string is surrounded by " or '. For example "Hello world" or 'Hello world' boolean A boolean is a data type that has only 2 options, true and false. nil nil is a value indicating nothing. It's the absence of a value. (Not the be confused with 0) table Tables will be discussed later in the tutorial userdata Userdata will be discussed later in the tutorial function Functions will be discussed later in the tutorial thread Threads are out of scope for this tutorial and won't be discussed So we can use these different data types, and store them in variables: numberVariable = 10 stringVariable = "Hello world" booleanVariable = true nilVariable = nil Operators Operators are symbols in Lua which can be used to do "things" with variables. Here's a list of operators and an example for each: + operator Adds two values together x = 10 + 10 print(x) y = 20 print(y) z = x + y print(z) - operator Subtracts a value from another value x = 10 - 10 print(x) * operator Multiplies two values x = 10 * 10 print(x) / operator Divides a value by another value x = 10 / 10 print(x) % operator This is the "modulo" operator. This will divide a value by another, and return the leftover. x = 10 % 4 print(x) The result of this is 2 and operator The and operator will return true if both variables are "truthy". Otherwise it returns false (A "truthy" value is anything except for false and nil) x = true and false print(x) y = true and true print(y) or operator The and operator will return true if one of the variables are "truthy". Otherwise it returns false x = true or false print(x) y = false or false print(y) == operator The == (equals) operator will return true if both of the variables are the same. Otherwise it returns false x = "hey there" == "hello there" print(x) y = 150 == 150 print(y) ~= operator The ~= (does not equal) operator will return true if both variables are not the same. Otherwise it returns false x = "hey there" ~= "hello there" print(x) y = 150 ~= 150 print(y) > operator The > (greater than) operator will return true if the first value is greater than the second value. Otherwise it returns false x = 10 > 5 print(x) y = 10 > 15 print(y) y = 10 > 10 print(y) >= operator The >= (greater than or equals) operator will return true if the first value is greater than, or equal to, the second value. Otherwise it returns false x = 10 > 5 print(x) y = 10 > 15 print(y) y = 10 > 10 print(y) < operator The < (less than) operator will return true if the first value is less than the second value. Otherwise it returns false x = 10 < 5 print(x) y = 10 < 15 print(y) y = 10 < 10 print(y) <= operator The <= (less than or equals) operator will return true if the first value is less than, or equal to, the second value. Otherwise it returns false x = 10 < 5 print(x) y = 10 < 15 print(y) y = 10 < 10 print(y) .. operator The .. (string concatanation) operator allows you to add two strings together. x = "Hello" z = "World!" combined = x .. " " .. z print(combined) If statements An if statement allows your code to decide to do something, or not. Depending on a value. Often times if statements are used in combination with some of the above operators. An if statement is written as : if <expression> then <code> end x = 10 if x > 5 then print("X is higher than 5") end Any code between then and end will only be executed when the expression is true. You might also have noticed that the code between the then and end is moved over a bit to the right. This is called "indentation". Whenever we open a new scope (scopes will be discussed later in the tutorial) we move our code to the right. This is usually done by either a tab or several spaces . Many code editors will convert a tab to spaces. Else Within an if statement, you can also add an else block. The code in such a block will be executed when the code in the if block is not executed. x = 10 if x > 5 then print("X is higher than 5") else print("X is not higher than 5") end Elseif If you want to do multiple if statements, you can use an elseif: x = 15 if x > 10 then print("X is higher than 10") end if x > 5 then print("X is higher than 5") end x = 15 if x > 10 then print("X is higher than 10") elseif x > 5 then print("X is higher than 5") end The difference between the first example and the second is that if x is higher than 10 in the first example both lines "X is higher than 10" and "X is higher than 5" will be output. Whilst in the second example only "X is higher than 10" will be output. And if statement must always start with an if, can contain multiple elseifs, and may only have one else. name = "NanoBob" if name == "NanoBob" then print("Hello world!") elseif name == "Brophy" then print("Black 123") elseif name == "Tombaa" then print("Stupid") else print("I have no idea") end Functions Functions allow you to write less code, by reusing pieces of code. The syntax to create a function is function <name>(<parameters>) <code> end function foo() print("Hello world #1") print("Hello world #2") end In order to execute code in the function, you "call" the function. You do this by writing the function name followed by (). function foo() print("Hello world #1") print("Hello world #2") end foo() foo() foo() Functions also allow you to send a variable to the function, for it to do something with. This is what's called a function parameter. Function parameters are defined in the brackets () after the function name. function foo(x) print(x) end foo(10) foo("50") You may notice that this looks a lot like the print() we have been using. This is because print is a built-in Lua function. Return values A function not only can execute code, it can also give something back to where it was called. This is called a return value. In order to return something from a function you use the return keyword. function foo() return 10 end x = foo() print(x) print(foo()) Just like in an if statement, all code within a function is indented. Now let's combine everything we have learnt so far: function foo(x) if x > 10 then return "X is higher than 10" elseif x > 5 then return "X is higher than 5" else return "X is not higher than 5" end end y = foo(15) print(y) print(foo(10)) print(foo(0)) Scopes & locals We quickly encountered scopes before, and said we indent our code whenever we enter a new scope. But scopes allow you to do more than that. Most importantly, "local" variables. A local variable is only available in the scope it was defined in (or scopes that were created from within that scope) You can create a new scope using a do block (functions and if statements also have their own scope). do local x = 5 print(x) end print(x) do local x = 5 do local y = 10 print(x) print(y) end print(y) end For loops (For) loops are ways in scripting / programming to have code executed multiple times, without having to write the same thing multiple times. An example of such a loop: for i = 1, 10 do print(i) end The first part : i = 1, 10 defines a variable called i. Which start at 1. This will be incremented by 1, until it reaches 10. The code within the loop then can use this variable. You can also increment with a different number than 1 (including negative numbers) using this construct. for i = 20, 0, -2 do print(i) end This code sample will start with i at 20, and keep adding -2 (thus subtracting 2), until it reaches 0 Tables Tables are a datatype in Lua which allows for lists of things. Here's an example: x = { [1] = 100, [2] = 200, [3] = 300 } print(x[1]) print(x[2]) print(x[3]) Tables consist of key/value pairs. In the example above the key 1, has the value 100, 2 has the value 200, and 3 has the value 300. You can get the value in a table, by putting the key in between square brackets []. Like in print(x[1]). x = { 100, 200, 300 } print(x[1]) print(x[2]) print(x[3]) You can choose to not include the keys in a table. Doing so will automatically add numbers as keys, starting at 1. So the above example would be the exact same as the first example. Table keys and values can be of any data type, including other tables. This allows you to create (very) complex table structures. t = { [1] = { 100, 200, 300 }, ["x"] = 100, [true] = "something" } print(t["x"]) print(t[true]) print(t[1][1]) print(t[1][2]) print(t[1][3]) When using a string as the key in a table, you can leave out the square brackets and the quotes. This goes for both when defining the table, and for indexing it (getting a value from it). For example t = { x = 100, y = 200, z = 300 } print(t.x) print(t.y) print(t.z) A table's values can be modified / set after creating the table as well. t = {} t[1] = 10 t[2] = 20 t[3] = 30 t["x"] = "banana" t[true] = false t.x = "banana" When using tables you will often want to add something to the "end" of a table. This is most common when you are using tables with numeric keys. In order to do this you can use a # to get the amount of items currently in the table. t = { 10, 20, 30 } t[#t + 1] = 40 This will store the value 40 on the key 4 , because #t is 3. Iterators (pairs/ipairs) Iterators are a mechanism that allow you to make a loop, which goes over a set of values. Writing your own iterators won't be discussed in this tutorial. But there are two functions which are often used to create an iterator to iterate over a table. These are pairs and ipairs. t = { 10, 20, 30, 40, 50 } for key, value in ipairs(t) do print(key, value) end The difference between pairs and ipairs is the order in which the key/value pairs are iterated over, and which of the key/value pairs are iterated over. Where ipairs will always use numeric keys, starting at 1, and going up by 1 every time, until there is no entry in the table. This also means it won't iterate over anything key that is not numeric. t = { ["x"] = 5, [1] = 10, [2] = 20, [3] = 30, [5] = 50, } for key, value in ipairs(t) do print(key, value) end A pairs loop will iterate over any value in a table, but the order is not guaranteed. Meaning that between different runs of the script the order could be different. t = { ["x"] = 5, [1] = 10, [2] = 20, [3] = 30, [5] = 50, } for key, value in pairs(t) do print(key, value) end Callbacks Callbacks are when you pass a function as an argument to another function. To have the function you passed be called later on. This is used often within MTA. An example of a Lua function which uses a callback is table.sort. table.sort will sort a tables values, by default these values are sorted numerically. But you can use a callback to change this behaviour. values = { 5, 4, 3, 6, 8, 1, 2, 9, 7 } function sortFunction(a, b) return b > a end function reverseSortFunction(a, b) return a > b end table.sort(values, sortFunction) print("Sorted: ") for _, v in ipairs(values) do print(v) end table.sort(values, reverseSortFunction) print("\nReverse sorted: ") for _, v in ipairs(values) do print(v) end In the first call to table.sort (table.sort(values, sortFunction)) you can see the sortFunction function is passed as second argument to the function. Note that we don't write sortFunction() here (notice the brackets difference) because that would call the sortFunction function, and pass its return value to table.sort. table.sort will then call this function when it compares two different values, this function should return true or false depending on whether its second argument (b in this case) is larger than it's first argument (a), in the context of sorting. Anonymous functions It is also possible to use an "anonymous function" when passing a callback to a function. values = { 5, 4, 3, 6, 8, 1, 2, 9, 7 } table.sort(values, function(a, b) return b > a end) print("Sorted: ") for _, v in ipairs(values) do print(v) end table.sort(values, function(a, b) return a > b end) print("\nReverse sorted: ") for _, v in ipairs(values) do print(v) end MTA This part of the tutorial discusses MTA specific constructs. Code in this part of the tutorial won't run in the online Lua interpreter. You will need to set up a (local) server for this. Server & Resources By default when installing MTA:SA a server is installed as well. This server is located in the "server" directory of your MTA directory. This is usually at C:\Program Files (x86)\MTA San Andreas 1.5\server. This directory contains an MTA server.exe file, running this file will start a server. Scripts on a server are grouped by resources, a single resource can consist of multiple script files and other assets such as images, sounds, fonts, mods and more. Resources are placed in your mods\deathmatch\resources folder in your server folder. A resource is always in its own directory. A resource must always have a single meta.xml file. This file tells the server (among others) what script files to load. A typical meta.xml file looks like this: <meta> <script src="vehicleSystem.Lua" type="server"/> <script src="vehicleMods.Lua" type="client"/> </meta> You will need an entry for every .Lua file you want to have executed on the server. You can start a resource by typing start <resource name> in the server console (the window that opened when you started MTA Server.exe). The resource name is the name of the directory your meta.xml is in. (This may not have spaces). Starting a resource will start running the Lua scripts, if you've changed your scripts you will need to restart the resource for the changes to take effect. (restart <resource name>). Server vs client Lua code can be executed in one of two places. The server, or the client. Server sided scripts are executed on the actual machine that is running the MTA server.exe process. Client sided scripts are executed on the computer of every player that connects to your server. Server sided and client sided scripts have a distinct difference in responsibility and possibility. Some functions for example are only available on the client, whilst others are available only on the server (and many on both). Note: Some of these functions which are available both server sided and client sided are different on server and client MTA functions & wiki In plain Lua there's not much you can do to affect a game engine like MTA:SA. This is why MTA:SA offers a (large) list of functions available for you to use in your scripts which interact with the actual GTA world. You can find a list of all of these, what they do and how to use them on the MTA wiki. Server sided functions Client sided functions shared functions An example of such a function is createObject(). This function will create a physical object in the game. The wiki page contains information on how to use it (what arguments it expects, and in what order). And often shows an example of how to use it. createObject(1337, 0, 0, 3) Elements (userdata) At the start of this tutorial we quickly mentioned userdata data types. These are data types configurable by the implementation of Lua. In this case, MTA. MTA uses userdata to represent "elements". Many things in MTA are elements, like objects, markers, peds, players, user interfaces, vehicles, etc. On the MTA wiki you will notice many functions either return elements, or require an element as arguments. A list of different types of elements can be found on the MTA wiki. Elements also have a hierarchical structure to them. Elements can have a "parent", and multiple "children". This will result in a tree of elements, the element at the top of this tree (and thus the grandparent of all elements) is called the root element. Command handlers Often times in MTA you want certain things to happen when a player enters a command. This is done using command handlers, command handlers use a callback, which we previously discussed. The wiki contains a page for the addCommandHandler() function. For this example we will be using the server side version. function handler(player, command, argument) outputChatBox("You entered " .. command) if argument ~= nil then outputChatBox("You used the argument " .. argument, player) end end addCommandHandler("banana", handler) This example also uses the outputChatBox() function, this will output a piece of text to the chat.(in this case, only for the player who executed the command) The callback function passed to addCommandHandler will be called every time a player uses the /banana command ingame. Event handlers Besides having your script do things when a user executes a command you likely want the game to respond to many different types of things that happen in the game. Like players taking damage, coming close to something, etc. These things are called events. Whenever an event is triggered you can run a piece of Lua code. You do this using event handlers. Event handlers are created using the addEventHandler(). The first argument to the addEventHandler() function is the string name of the event. These can be found on the MTA wiki as well. Server sided events Client sided events An event is always triggered for a specific element, for example "onPlayerWasted" is triggered on the player that was wasted (killed). You can attach an event handler to a single element to only have your callback function be called when the event is triggered on that specific element. But you could also use the root element here and your function will be called for every element the event is triggered on. function handlePlayerDeath() outputChatBox("You died!!", source) end addEventHandler("onPlayerWasted", getRootElement(), handlePlayerDeath) The getRootElement() function used in this example returns the root element discussed earlier. You can also see source is used in this code snippet, we'll talk about that some more in the next section. predefined globals MTA has some predifined global variables for you to use in your script. A list of them can be found on the wiki. Here's a couple notable ones and what they're used for root The root element, same as the return value of getRootElement()) source The element an event handler was called on. An event's wiki page always describes what the event source will be for the event. localPlayer The player element for the player whose client the script is running on. (Thus only available client sided) client Will be discussed in the next section server <-> client communication As stated earlier in this tutorial scripts can run either on the server, or one of the connected clients. However often times you would want to trigger something on the server from a client, or the other way around. An example of this would be when the user clicks the login button on a GUI (Graphical user interface) the server should try to log that person in, and send him back whether or not this was successful. This can be done using events. MTA allows you to create and trigger your own events, and these events can be triggered from server to client (and the other way around). You can do this using the addEvent() function. Once an event has been added (and marked as remotely triggerable by passing true as second argument to addEvent()) you can call it from server/client. You do this using [triggerClientEvent()]https://wiki.multitheftauto.com/wiki/TriggerClientEvent() and triggerServerEvent() respectively. Server sided: function handlePlayerLogin(username, password) outputChatBox("You tried to log in with the username " .. username, client) end addEvent("LuaTutorial.Login", true) addEventHandler("LuaTutorial.Login", root, handlePlayerLogin) Client sided: function pretendLogin() triggerServerEvent("LuaTutorial.Login", localPlayer, "username", "password") end pretendLogin() This example will trigger the "LuaTutorial.Login" event from the client sided script. And passes the "username" and "password" arguments to the event. The server then handles this event in the handlePlayerLogin() function, which in our case just outputs something to the chatbox. In this example you can see the previously mentioned client global variable. This variable is set to the player element corresponding to the client the event was triggered from. (And is thus only usable when used in an event handler which has been triggered from a client). Now what? With this information you should be able to start scripting, and making things in MTA! If you didn't understand it all in one go, or you have any more questions there is no shame in that! You can find myself and many others willing to help you with your scripting questions in the #scripting channel on the MTA discord. Another good source for programming / scripting related questions is stack overflow.
    1 point
  6. Forum Rules for Multi Theft Auto: Forums Welcome to Multi Theft Auto: Forums. Please follow these rules to ensure your stay here. TL;DR version Please use common sense and do not do anything which would cause us trouble and we will do our best to not cause you trouble either. Also, be nice. How to contact the Forum Staff MTA Forums are maintained by a team of volunteer administrators and moderators, later referred to as Forum Staff. Please respect their work, as they do it in their spare time and are not getting paid for it. The Forum Staff consists of all active Moderators (section-specific Moderators and forum-wide Moderators) and MTA Team members and is lead by Lead Global Moderators. Their job is to keep these forums in check. You can find the list of Forum Staff members in the Staff section of the Forum. If you need to contact us, you can use following communication channels: Discord (recommended for general questions): Server details | Click to join Forum Messages (PM; recommended for account actions requests and private queries): Staff List Twitter (you can highlight us in your tweets if you would like to receive a reply): @MTAQA Steam Group: Steam Community A. General Forum Rules This is an international forum so all posts should be in English and should also be placed in appropriate sections. Discussions in other languages are allowed, but only within the designated section. By posting to this board, you agree that any content (including code snippets) posted by you will stay visible indefinitely unless decided otherwise by the Forum Staff. Requests for release dates, beta tester positions and demands for information regarding future MTA features may be refused or ignored. Racism, discrimination, bigotry, obscenity and illegal activities are unacceptable in any form, whether it be posts, images or signatures. This includes pornographic and racist images, violent and insulting language of any kind, and posting copyrighted content and warez. Breaking this rule may result in an immediate ban. Do not disclose personal details (eg. names, addresses, telephone numbers, photos) of other users. Do not insult or impersonate other forum members. Do not post religious content on these boards (and on the other services we provide). This is a forum for a multiplayer mod, and not the one to discuss religions. We have no problem with whatever you believe (or whatever you do not believe), just do not drag us into it. Flaming and 'flame wars' will not be tolerated. Ban evasion will not be tolerated either and will be dealt with severely. Backseat moderation² is not allowed. If you see that something should be done about a certain topic, post or user, please report it and leave the decision to the Forum Staff. Do not post anything that is against our EULA. Any advertisement, discussion or sales which appears heavily based on content from existing servers, may be subject to deletion at the discretion of forum staff. Do not post any software that could be used for cheating in MTA gameplay. However, if you have such software in your possession and you would like to share it with MTA Developers, please send it directly to Anti-Cheat Team members via PM (currently ccw & Dutchman). If it is an unknown cheat, we may offer you a compensation for it. Do not advertise non-MTA related products, services and websites on our forums and other pages. MTA-related products, services and websites can be advertised in the following sections: MTA gameservers and communities that you can play on – please use the Servers to play on section hosting companies that can host a MTA server for you – please use the Hosting solutions section paid scripting, mapping, administration, web-design and similar offers – please use the Looking for staff section You can appeal a ban or a decision made by the Forum Staff member – see tips below on how to do it correctly. Insulting a Forum Staff member or getting in an argument with them are not the best ways of doing so. You can expect further actions from us if you do that. B. User Accounts Rules The Forum Staff will never ask you for passwords to your forum account, game server or other services. Quite contrary – we urge you to keep your user account credentials safe, and if possible, to use unique passwords in our forums. If you lost credentials for your old forum account and you can not use the forum’s built-in Password Recovery form, then we can attempt to recover your account manually for you. Please contact us in such a case and make sure to provide us as much information about the account as possible (eg. possible associated e-mail addresses, registration and used IP addresses / ISPs / countries, last activity dates or usage patterns). It is possible to merge two or more accounts into a single forum account, provided that you own all of them. Please contact us and we will do it for you – all of the content will then be moved to that single account. It is possible to rename your forum account, although only once per a while. Please read this topic to find out how to do it and how often it can be changed. Users can own more than one forum account, as long as these accounts are not used for breaking forum rules or other malicious actions (eg. evading a ban, tampering with forum statistics or poll results, disrupting topic discussions). Using multiple forum accounts for posting fake feedback or opinions on servers/server hosters/resources/etc. is strictly forbidden. Similarly, we allow sharing accounts, with the exception of the following cases: Shared account has moderator permissions – sharing such an account is strictly disallowed. One of the users involved in sharing an account is banned. Account is shared with an intention of personal gain by one of the involved users (eg. by tampering with forum statistics). Account is shared with an intention of derailing an existing forum topic by posting off topic comments. Very rarely, we may use special counter-measures against spam bots and ban evaders, such as manual account activation. When this is in effect, new user accounts may not be activated instantly. Please do not create an additional account as it will not be activated faster in such a case, (unless you need an additional account). Instead, please contact us by using any of the communication channels listed at the top of this article and provide your username or e-mail address. Similarly, new and junior Forum accounts must use the Forums for a period of time before being granted all Forum features. These restrictions are to combat spam and abuse. C. Posting Rules and Advice Please use the Forum Search feature to see if your question had been asked before. Additionally, please consult the online documentation if you have problems with the mod or Lua scripting before you post. If you cannot locate your topic or post, please search for it. It could have been moved to another section. If you want to create a topic, please use the sub-forum which suits best for it. You can find the list of sub-forums on the main page of the forum. Make sure to use descriptive titles for your topics. Topic titles which consist just of words such as 'HELP', 'Help me' or 'Please read' are not descriptive at all. Please keep in mind that when you make a post, you may not be able to edit it after 2 hours since it was posted pass. This is done to prevent users from removing the original post content right after they received a satisfactory reply. There are exceptions to this though – see this topic for more details. Please avoid making double posts. Do not post the same topic or content multiple times or re-post it to different sub-forums. It is okay re-post the translation of the content which was originally in English to Other Languages sub-forum as long as this does not violate other rules. Likewise, it is okay to re-post a foreign language topic to main forums, but it needs to be translated to English and posted in the correct section. If there is a topic similar to the one you wish to create, please reply in that topic rather than making a new one. You may bump¹ an old topic if it was created by you, or if the topic is about a problem you are also having. Please do that sparingly though, and only after some time has passed since you have posted. If you intend to bump a support topic then please provide some additional details about the problem in the new post, if available. Please use the [ quote] tag sparingly. Usually there is no need to quote the full message of the original poster, or the message of the poster directly above your post, so please do not do that. If you need to include a source code snippet in your post, always put it inside the [ code] tag. This makes your code easier to read and provides syntax highlighting where applicable, also makes it possible to automatically provide wiki links to MTA scripting functions where needed. Do not reply to spam posts or other posts severely breaking the rules, please report them instead! The reason for this is, that if you reply to a spam bot, your posts will remain even after we delete all posts made by such a bot. Not only this leaves us with more work, but it may also lead to mistakenly flagging your account for removal for posting unwanted content. At the same time, please keep in mind that we will ignore post reports which are related to an argument between some forum users and ask us to support either side. Similar to User Accounts Rules, very rarely we may use special counter-measures against spam bots and ban evaders, which may lead to hiding newly posted content until it is approved by the Forum Staff. In such a case please wait patiently until we approve the post – there is no need to re-post it. D. User Profile Rules Total size of images in your signature must be within either 500x150 OR 720x80 pixels. Anything larger may be removed when noticed. Signatures should use reasonably sized fonts and only a limited number of hyper-links. E. Moderator Decision Appeals Please do not contact several Forum Staff members regarding the same subject. You can contact another Forum Staff member if you do not get a reply to your first message in a timely manner (eg. within 48 hours). Our Moderators are chosen from talented, respectful and active members of our community. We are confident in decisions they make. However, if you are not satisfied with a certain moderator's decision, you can contact them directly about your concerns. Make sure to be polite and explain your point well. If you are still not satisfied with the decision, you can ask a moderator with a higher rank to mediate for you. Just like above, be polite and try to explain your point even better. See Appendix C below for a more extensive explanation of the appeal process. F. Ban appeals Please do not create a new forum account once you get banned from the forum. If you do so, you will be banned again for ban evading and the duration of your original ban will be extended. Instead of evading the ban, you can try appealing it on our Discord’s #support channel. If you were also banned on Discord, please do not try to evade your ban there. Ask someone to contact us for you (or use another communication method as listed at the top of this article). Based on your infractions, we might decide to issue a cooling off period for your ban, during which you should not access the forums. Once it expires and you have followed our suggestions, you can ask us again to remove your ban. If you are looking for an appeal for a ban from a certain MTA server, please contact the server owner of that server. We can not unban you as we have no power over that server. Easiest way to contact the server owner would be to go to that server's website or look for the contact details for that server in Servers to play on sub-forum. G. Section Specific Rules a. General MTA -> Other languages (non-English) section and its sub-forums Basic guidelines. Additional rules may apply, depending on the section. You can only post in these sections if you speak the language which is used in the specific section. Do not post there otherwise. Additionally, English discussions are generally not allowed in those sections. Posting in English in these sections may result in a forum warning. Exceptions apply – if a Moderator starts a topic in such section in English, then other users (only those who speak the language of that section) can post in English in such topic too. Posting in English is also allowed (and preferred) in the General Multi Language discussion sub-forum. Moderation in some sections might be limited if we do not have moderators fluent in such languages. b. MTA:SA -> Support for Client & Server sections Client - How to ask for help in the Client Section Client - Introduction to MTADiag utility c. Community -> Scripting sub-forum Guidelines and formatting tips Additional guidelines d. Community -> Resources sub-forum Community regulations & guidelines Stolen resource accusations are not allowed e. Community -> Other Creations & GTA Modding -> Modelling sub-forum Purpose and usage of this section f. Community -> Competitive gameplay / Gangs sub-forums You may only post in another gang's thread to: ask for a match, arrange time for a match, cancel a match, apply to join, or to offer assistance such as refereeing or providing a server/web space. You may NOT post in another gang's thread for any other reason. Arguments and disagreements should be taken up elsewhere, such as the gang's own forums, for instance. g. Community -> Servers -> Servers to play on sub-forum Only one thread per server is allowed. This makes it easier to find information about a certain server, as it will all be available in a single topic – just make sure to keep it updated. Stolen resource accusations and other causes for fighting are not allowed. Click here for a detailed explanation. In addition to above, we may take extra measures against users who are server owners and are trying to pick a fight in topics of competing server owners. Make sure to report such posts instead of replying to them. h. Community -> Servers -> Looking for staff sub-forum Rules and formatting for this section i. Community -> Servers -> Hosting solutions sub-forum This sub-forum can be used by companies who sell MTA-related hosting services. This also includes web-hosting and virtual/dedicated server hosting, as long as they can be utilized by MTA servers or for hosting them. It can also be used by users to discuss their experiences with a certain host, or who are looking for a server host. We have additional rules in place for entities who would like to offer hosting services to our users. You can find them here. j. Other -> B.L.A.S.T. sub-forum This section is reserved for off-topic fun chat. Blind spamming, however, is not allowed. Posts made in this section do not count for post count or rank improvement. k. Other -> Multi Theft Auto 0.5r2 and Older MTA:VC/GTA3 versions sub-forums These sections are all about our older creations – MTA for GTA3 (also known as GTA3MTA) and for GTA: Vice City (MTA:VC). We no longer maintain these mods, so you may not receive support for them. These mods may also not work on newer PCs at all. You might notice some third party MTA derivatives that are listed in this section, which may or may not be supported by said third parties. While these attempt to recreate the experience of our older creations, they were not made by us so use them at your own risk. l. Other -> Third party GTA mods sub-forum Rules page H. Other Notes If you no longer intend to visit our forums, we can remove your forum account on request. You can ask any Lead Global Moderator for an account removal. See Appendix D for details on how this is done. We are constantly looking for new moderators, especially for the sub-forums in the Other Languages section which do not have any moderators yet. Remember though, you have to be an active forum member with a significant amount of contributions to the forum to even consider applying for the position. What we consider as contributions to the forum: posting useful or original content, providing help to other forum members, reporting troublesome posts and topics and helping us with organizing the forums. What we do not consider as a contribution: having a huge post count gained by posting (at best) normal content or by posting in (at best) regular discussions. Not to even mention gaining it by spammy ways. To apply, please contact a Forum Staff member via a forum PM or ask us on our Discord. However, please keep in mind that by sending your application you agree that it will be shared with other Forum Staff members. This is to ensure that your application is evaluated and handled properly. If you fail to comply with these rules, your post or topic may be immediately deleted from this board without a warning and/or you may face additional consequences depending on the severity of your actions. Thank you for your understanding. -- MTA Team Appendix A – Glossary ¹ Bumping a topic happens when a user posts in a topic solely with an intention of putting it at the top of the list of topics in a sub-forum. ² Backseat moderation is an occurrence when a person who is not a moderator tries to act like one, eg. by posting messages such as 'This topic is dumb and should be locked' or 'This user should be banned' and so on. It is a generally unwelcome behavior on Internet forums. Appendix B – List of possible moderation actions for rule violations A Private Message with a complaint from the Forum Staff member (usually this is the only thing that happens, providing that user is co-operative with us) Forum Warning (expires over time, can be seen in a user's forum profile; having 3 or more warnings at the same time disables user's ability to post) Posting Restrictions (any new posts or topics made by a user may require an approval by a forum moderator) Temporary Forum Ban (user can not access the forums during a specified period; each further ban has a longer duration) Permanent Forum Ban (same as above, except that it does not expire over time; has to be appealed in order to be removed) Global Ban on all of our services (given to extreme cases of rule abusing, using exploits, hack or cheat tools, or posting potentially dangerous resources; generally disallows user from accessing any MTA-related service, including playing the mod itself) Abuse Letter to user's ISP abuse department (last resort if user is still causing us problems) Appendix C – Moderator Decision Appeal process Forum Staff member made a decision which you did not like or think that it might have been biased. You contact this Forum Staff member about it, stating why do you think this decision is wrong and what should be done instead. Forum Staff member adjusts their decision and now both of you are happy about it and no further action is needed. ✓ Alternatively, they sustain or adjust their decision, but you are still not satisfied with it. X You contact a second Forum Staff member with a higher rank than the one who made the initial decision. You explain the situation well and ask this Forum Staff member to review the situation again. Second Forum Staff member evaluates the situation from both yours and original Forum Staff member’s point of views. Once that is done, they give their decision (which is final) as well as an explanation to this decision which should hopefully satisfy all of the parties. Notes: If the original decision is going to be changed, a Lead Global Moderator should be notified about it by the second Forum Staff member before any changes are made. As mentioned above, the appeal should be made to a Forum Staff member with a higher rank than the original one (or another Lead Global Moderator if there are none available). It should not be made to the Forum Staff member with the same rank/level. Appendix D – Forum Account Removal process If you decide that you no longer need your forum account then we can remove it for you. Keep in mind though that we reserve the right to not remove your posts when your account is removed, as they might be still useful for other forum users. Whether your posts will remain or will be removed, will be announced to you by a Forum Staff member who will handle your case. This depends on the amount of the posts on your account and their actual content. If your posts will remain, you will have a choice of them being listed either under your nickname, or under a “Guest” nickname. To remove a forum account: Send a PM on Forums to a Lead Global Moderator (alternatively, you can send it to any Forum Staff member and they will forward it accordingly) asking for an account removal. A Forum Staff member will handle this request and will attempt to verify whether you are the rightful owner of the account. This might be done in various ways and not all of them will require any interaction from your side. Once verified, you will receive a response, giving you terms for removing your account. If you agree to these terms, you will be asked to confirm the removal by sending an e-mail message from the same e-mail address that is associated with the forum account to an address given by the Forum Staff member. Such an e-mail should at least contain the forum username and the account removal request. Once you have sent an e-mail message, you will receive an e-mail message stating that your account will be removed after 14 days, provided that you will no longer access the account during that time. Once you receive this message, you should log out from the account on Forums and no longer try to log in to this account again. Simply log out using the Forum Log Out feature and you are done. After 14 days have passed and the account was not accessed during that time, it will be removed by the Forum Staff member and you will receive an e-mail message, stating that forum account was removed. If the account is accessed any time during the removal period then the process is cancelled.
    1 point
  7. APPENDIX DATA SYNCHRONIZATION. What is it? MTA's synchronization methods. Optimization tips. DATA SYNCHRONIZATION 1. What is it? Since unmemorable times humanity have faced problems caused mainly due to the storage of different ideas in almost each human. But thank God, machines storage methods are different and they have the possibility of having stored the same values in more than 100 machines. Well this is great, but those values must be set by someone, and here's where the server-side and client-side can be used as example of data synchronization. The server-side store's all the values given by each client-side and give's back those values to the all the client-sides ending up into something like this ( Figure 1 ). This is a way to get the same data in all the client-side, but there's also other methods well known like P2P. Figure 1. 2. MTA's synchronization methods. Since data sync it's a base element of every multiplayer game or mod, MTA is not an exception. That's why MTA scripting interface gives us two core ways to sync the server data with the client data or client data with server data. Well this two methods are the following one's. Element Data, it consists of assigning values to an element that are being stored under a key ( the key usually being a string like "health" ). This way is being used by a great amount of scripters in MTA because it's easy to use. But there are also negative points if this way is not being used properly like saving small amount of data in just one key and syncing it with the server or client's. An example of it would be: [[--CLIENT.LUA--]] local value = 0 local function handleStart() value = getTickCount() -- WE GET THE TIME THE SERVER HAS BEEN WORKING WHEN THE RESOURCE START setElementData( localPlayer, "start_tick", value, true ) -- WE SAVE THE 'value' VARIABLE INTO THE 'localPlayer' ELEMENT WITHIN THE KEY 'start_tick' AND WE SYNC IT TO GET THIS DATA TO THE SERVER. end addEventHandler( "onClientResourceStart", getResourceRootElement( getThisResource() ), handleStart ) [[--SERVER.LUA--]] local function handleCMD( thePlayer ) local mineTick = getElementData( thePlayer, "start_tick" ) -- WE RETRIEVE THE DATA, THAT HAS BEEN SAVED INTO 'thePlayer' DATA. local resultTick = getTickCount() - mineTick -- GET HOW MUCH TIME HAS PASSED SINCE THE RESOURCE STARTED FOR THE PLAYER outputChatBox( resultTick, thePlayer ) -- PRINT INTO THE CHAT THE RESULT end addCommandHandler( "mytime", handleCMD ) -- IN CASE YOU WANT TO TRY IT SAVE THE CODE WITH THE NAME MARKED ABOVE THEM. [[--META.XML--]] <meta> <script src="server.lua" type="server"/> <script src="client.lua" type="client"/> </meta> Events, this method is the one that elementData's one bases on, which means this is a 'rawer' method which can also be faster than elementData if it's being used efficiently. An event is just a message that's being send to one or various systems, if these systems handle the message then when the message is sent to the system there's a trigger which calls the functions that are defined like a reaction to that message that has been sent. It's pretty easy to understand, just think of this. You say hello to someone, the message in this case is 'Hello' and the system where is pointed to mainly is the person, the person gets the message and handles it by calling some cognitive functions, these functions at their time trigger another message as result which in the most common case would be 'Hello' or just a strange face motion because he or she doesn't know you. Maybe you will ask yourself about what does a hello to someone have to do with Events in MTA. Well let's convert the situation above into script. We've got to define first the message by using addEvent( "Hello" ), good we have defined our message, but if we stop here then we have made some useless stuff that's not going to be used ever, that's why we have to use this message somewhere and here is when we simulate the action of saying something the message by using triggerEvent( "Hello" ) but... wait who's supposed to say the message? Let's make it look like the localPlayer was saying the message so it would be like triggerEvent( "Hello", localPlayer ), okay we have said the message but do we talk alone? Maybe but it's not pretty normal, so we must find a receptor which in this case will be a ped so we add the a ped to the game by using createPed( 0, 105, 20, 5.5 ) supposing we are located in the position 104, 20, 5.5. Okay we have the receptor now but it won't answer to our message so let's obligate him to answer us by adding a handler for the message to the ped like this addEventHandler( "Hello", thePed ), okay but this way it will do the same as we wouldn't have used addEventHandler that's why we need to pass also a function to call like an argument which in this case is going to be called 'answerToHello' and we would finish up with addEventHandler( "Hello", thePed, answerToHello ). All this and little bit more of code below for simulating an answer to hello from a person in a non-realistic way. [[--CLIENT--]] -- EVENTS addEvent( "Hello", false ) -- LET'S MAKE IT LIKE JUST THE CLIENT CAN TRIGGER IT SO WE MAKE SURE JUST WE ARE GOING TO TALK TO THE PED -- VARIABLES local thePed = createPed( 0, 105, 20, 5.5 ) -- WE ADD THE PED SO WE DON'T FEEL LONELY -- FUNCTIONS -- SAY HELLO local function sayHello() -- THIS FUNCTION WILL BE USED TO SEND UP THE MESSAGE TO THE PED triggerEvent( "Hello", thePed ) -- WE SAY HELLO TO THE PED end -- ANSWER local function answerToHello() -- WE DEFINE THE MESSAGE HANDLER SO WE MAKE SURE THE PED ANSWERS TO US outputChatBox( "Hello to you too!" ) -- THE PED GET'S THE MESSAGE AND GIVES US BACK A MESSAGE THAT WE CAN CHECK INTO THE CHAT. end -- COMMANDS addCommandHandler( "sayit", sayHello ) -- WE'VE GOT TO SAY SOMEHOW HELLO TO THE PED SO LET'S USE A COMMAND -- EVENT HANDLERS addEventHandler( "Hello", thePed, answerToHello ) 3. Optimization tips. Well both methods can be used in large development but there are some tips you can follow to make sure your script will run in an efficient way. Pack reasonable amount of data into one's element data key, don't save values like ( health, armor, money ) into different keys, compress them into an only one by using tables, by using this method we pass 3 values packed in one sync meanwhile separating each value with one key creates upon 3 different syncs which would end up in a greater amount of packets sent between the server and the client. This tip can be used for both methods [ elementData, Events ]. local basic_data = { health = 100, armor = 100, money = 100 } -- COMPRESSED PLAYER INFO setElementData( thePlayer, "main", basic_data, true ) -- WE GIVE 3 DIFFERENT VALUES TO 'main' KEY BY USING JUST A VARIABLE THAT'S A TABLE 'basic_data' triggerClientEvent( thePlayer, "onSync", thePlayer, basic_data ) -- WE SEND A MESSAGE TO THE CLIENT IN ORDER TO MAKE IT SYNC THE DATA OF THE PLAYER TO THE ONE THAT IS BEING STORED IN THE SERVER Lua is a garbage collection language so the reduce the amount of global variables as much as possible in order to make it run faster. Hope you enjoyed the tutorial, if you have any question just feel free to ask it in this post or by PM, Skype ( killer.68x ) or Email ( [email protected] ) or Discord ( Simple01#1106 ).
    1 point
  8. 1 point
  9. ********** Changes (10 July 2023): Updated the Forum Rules to reflect the removal of the ban appeal option for Global Bans. For more information see our post on that. ********** Changes (8th November 2021): Added a new rule in B. User Accounts Rules which adds certain user restrictions to recently created and junior Forum profiles Changes (29th June 2021): Added a new rule in A. General Forum Rules regarding advertising and posting content heavily based on other servers ********** Changes (6th October 2019) (qaisjp): remove duplicate entry ********** Changes (23 January 2019): Refreshed the Forum Rules again so that they hopefully better reflect our current needs. They should also look better visual-wise. changed the layout of the Forum Rules to suit our IPS board more added ordered lists to rules sections and content to make it easier to refer to specific rules (eg. E-1 for people contacting multiple Moderators at once) added a paragraph about Forum Staff and means of contacting us to the Forum Rules replaced IRC references with Discord changed order of main rule paragraphs, merged some points added a note about bounties for Cheating Software in A-12 added a note about not sharing user personal details (A-5) added a note regarding user's passwords security in B-1 added a note about changing usernames (B-4) added a note about restrictions when editing own posts and topics (C-5) split and re-phrased notes regarding our anti spam-bot measures into B-7 and C-14 added previously written Section Specific rules which were already enforced but not listed and re-ordered the entire section added full processes for Moderator Decision Appeals and Forum Account Removal in Appendices C and D to make these processes be more transparent to users re-phrased A-4, tweaked A-14, A-15, B-2, B-3, B-5, minor tweaks in A-3, A-10, C-1 other grammar tweaks and re-wordings over the entire article added a note about global MTA ban appeals (F-6) ********** Changes (12 May 2018): Added a link to new rules for the Hosting solutions section ********** Changes (10 October 2016): Grammar fixes. Also made minor adjustments to the layout of the Forum Rules so that they show correctly in new forum software ********** Changes (12 May 2015): Added a note regarding sharing moderator applications with other Moderators ********** Changes (23 April 2015): Made it clear that re-posting same topic or content multiple times to different sections is disallowed (with an exception) ********** Changes (31 March 2015): Forum rules have been greatly rewritten to become more clear and straight forward to our users. Summary of changes: Various changes Added a TL;DR note at the top of the forum rules as a summary for lazy users Added a list of potential moderator actions for rule violations, also introduced a posting restriction moderator action Added information about moderator applications Major stylistic changes - grammar fixes, rewordings and moving some rules to new (or other) paragraphs New and improved sections and rules Added a new rules section (User Accounts) along with a note, stating that we will never ask for users' passwords Added an information about our way of handling of new forum accounts (including a potential manual account activation) Added notes about recovering old forum accounts and merging posted content from multiple accounts Made it more clear that users should not create new accounts to evade a ban Listed scenarios in which account sharing is disallowed, otherwise it should be considered as allowed Added a note about account removals Added a new section with posting tips for forum users (Posting Advice) Added a note encouraging users to post their topics in correct sections Added a note suggesting use of code and Lua tags when posting code snippets Added an information about publicly posted code snippets Listed scenarios in which users can bump topics (also added an explanation of the phrase 'bump a topic') Added an explanation for why users shouldn't reply to topics/posts made by spam bots Added a section about the forum staff members who maintain the forums Described ways of contacting moderators Added a note about moderator decision and ban appeals and also the ways how to do them (and how not to do them) Added a note about insulting and impersonation - both are not allowed on these forums Made clear that posting obscene and religious content on the forums is not allowed Made adjustments for rules for the Other Languages Section: Disallowed posting of users who do not speak a certain language in specific international sections Disallowed posting in English in the International section (with exceptions). Added notes about MTA0.5 and Hosting Solutions forum sections and made tweaks to rules for other forum sections ********** Changes (1 September 2013): made it clear that using multiple forum accounts for posting fake feedback and opinions is disallowed ********** Changes (7 May 2012): backseat moderation is disallowed ********** Changes (15 March 2012): added more tips to general advices (topic titles, double posting, using quote tags, dealing with spam posts) made it clear that ban evasion and posting cheating software are forbidden multiple forum accounts are allowed made rules for signatures less restrictive added section-specific rules for Other languages and Servers to play on sections added notes about ban appeals (forum/irc)
    1 point
×
×
  • Create New...