Leaderboard
Popular Content
Showing content with the highest reputation on 10/12/19 in all areas
-
Na verdade é bem simples por meio de código. Vc só precisa saber o ID do objeto e informar uma coordenada bem próxima ao objeto, não precisa ser exatamente no centro do objeto. Para descobrir o ID de um objeto que não é selecionável, dai é algo mais complexo que exige ferramentas externas. Para isso, vamos no site http://dev.prineside.com e clicamos no botão Model Search by Map Position. Após selecionada a posição no mapa, ele vai mostrar todos os objetos (selecionáveis e não selecionáveis) em um raio de 500 metros, em ordem dos mais próximos para os mais distantes. Na lista que aparecer, encontre o objeto que você deseja remover e anote o ID desse objeto. Descobrimos o ID do objeto, e agora? Agora já passou a parte mais difícil, o resto é programar um script básico de remoção de objetos por ID. Para isso vamos usar a função RemoveWorldModel. Essa função é bem simples de se usar, basta informar o ID do objeto a ser removido, o raio cuja remoção será aplicada e as coordenadas do ponto onde vai começar a remoção. Você precisa restaurar o objeto quando o script for desligado, para isso use RestoreWorldModel. O script funciona tanto em server-side quanto em client-side, mas em geral utiliza-se server-side. O Script deve ficar como esse: function removeBagulho() removeWorldModel(5681, 15, 1911.3, -1776.25, 13.38) -- Remove o objeto do lava-jato próximo ao posto de LS quando o resource é iniciado. end addEventHandler("onResourceStart", resourceRoot, removeBagulho) function restauraBagulho() restoreWorldModel(5681, 15, 1911.3, -1776.25, 13.38) -- Restaura o objeto quando o resource é desativado. end addEventHandler("onResourceStop", resourceRoot, restauraBagulho) Esse script vc adiciona junto com o resource do seu mapa. Você pode optar por deixar isso em um script separado ou deixar junto com algum script que vc já tenha no seu mapa por exemplo scripts de portões, server-side. Vlw, flw. Deixe seu LIKE se ajudou você. Dúvidas comente abaixo. Obs: Nem todos os objetos podem ser removidos com essa função, por exemplo aquelas plantas do deserto que se você bater com veículo elas podem quebrar. Isso ocorre pois elas são geradas no mapa, não possuem posição fixa. Outras plantas geradas também não podem ser removidas, mesmo se forem selecionáveis. Tanto que se você tentar procurar o ID dessas árvores seguindo os passos acima, vai perceber que o site não encontra essas árvores na pesquisa do mapa. Para remover essas plantas, utilize isso: setWorldSpecialPropertyEnabled("randomfoliage", false)1 point
-
DGS Supports GUI TO DGS Now and still under testing: https://wiki.multitheftauto.com/wiki/G2D1 point
-
I'm not sure about the nitro, I think it just gives you the nitro upgrade and that's it, the duration is handled by GTA itself. The vehicle change is here: https://github.com/multitheftauto/mtasa-resources/blob/master/[gamemodes]/[race]/race/race_client.Lua#L510 So it should be 1 metre.1 point
-
Tá aqui o loop: for theType=0, 17 do local texture, model = getPedClothes( localPlayer, theType ) if texture then addPedClothes(thePed, texture, model, theType) end end1 point
-
Você está misturando funções server com client. Para as teclas você pode fazer isto: local blockedKeys = { ["F1"] = true, ["F2"] = true, ["F3"] = true, ["F4"] = true, ["F5"] = true, ["F6"] = true, ["F7"] = true, ["F8"] = true, ["F9"] = true, ["F10"] = true, ["F11"] = true } function playerPressedKey(button, press) if (press) and blockedKeys[button] then cancelEvent() end end addEventHandler("onClientKey", root, playerPressedKey) addEvent("onLogin:allowBinds", true) addEventHandler("onLogin:allowBinds", root, function() removeEventHandler("onClientKey", root, playerPressedKey) end) E chamar o evento "onLogin:allowBinds" no evento server onPlayerLogin: addEventHandler("onPlayerLogin", root, function() triggerClientEvent(source, "onLogin:allowBinds", source) end)1 point
-
O próprio freeroam fornece os seus comandos incluídos por meio do resource helpmanager que é acessado pela tecla F9 se não me engano. Caso o servidor que você joga esteja com ele desativado, você pode ver os comandos aqui: https://github.com/multitheftauto/mtasa-resources/blob/master/[gameplay]/freeroam/help.xml1 point
-
/cv não é um comando de atalho do MTA. Isso é do resource freeroam. (assim como /st, /sw, /rp, /flip, /au etc) Caso você queira saber os comandos nativos do MTA, aqui estão os links: CLIENT - https://wiki.multitheftauto.com/wiki/Client_Commands SERVER - https://wiki.multitheftauto.com/wiki/Server_Commands1 point
-
Obtenha o timestamp atual com getRealTime().timestamp em seguida, some com a quantidade de segundos do tempo VIP e salve na conta do jogador. A verificação do fim do VIP será comparando o timestamp atual (getRealTime().timestamp) com o do VIP do jogador. Segue um código de exemplo: local vip_segundos = 30000 -- tempo de vip em segundos addCommandHandler("darvip", function( p,_, thePlayer) thePlayer = thePlayer and getPlayerFromName(thePlayer) or false if thePlayer then -- armazenar na conta o timestamp de duração do vip setAccountData( getPlayerAccount(thePlayer), "tempo:vip", getRealTime().timestamp + vip_segundos ) end end) -- verificação do vip das contas setTimer(function() for i,player in pairs(getElementsByType("player")) do local vip = getAccountData(getPlayerAccount(player), "tempo:vip") -- obter tempo de vip na conta if type(vip) == "number" then -- verificar se existe na conta, isto é, se consta o vip if getRealTime().timestamp - vip < 0 then -- verifica se o timestamp (segundos atuais) é maior que o tempo de vip outputChatBox("O seu pacote VIP expirou", player) -- notifica o jogador setAccountData(getPlayerAccount(player), "tempo:vip", false) -- remove da conta o vip end end end end, 1000, 1)1 point
-
client: addCommandHandler ("testar", function (cmd) triggerServerEvent ("eventoS", resourceRoot) -- Pode ser QUASE qualquer nome. end) addEvent ("eventoC", true) -- Pode ser QUASE qualquer nome. addEventHandler ("eventoC", root, function () outputChatBox ("Comando funcionou.") end) server: addEvent ("eventoS", true) addEventHandler ("eventoS", root, function () local accName = getAccountName (getPlayerAccount (client)) -- Obtém o nome da conta do jogador que executou o triggerServerEvent lá no client. if isObjectInACLGroup ("user."..accName, aclGetGroup ("Console")) then -- Verifica se está na ACL Group Console, pode ser qualquer outro grupo. triggerClientEvent (client, "eventoC", source) -- Ativa esse evento no client. else outputChatBox ("Comando não funcionou.", client) end end)1 point
-
Basta verificar se ambos existem, se um deles não existir, mande um feedback de erro pro jogador. function soma (thePlayer, commandName, um, dois) local num1 = tonumber(um) -- Converte a string 'um' para número. Será false se não for possível. local num2 = tonumber(dois) -- O mesmo com 'dois'. if (not num1) or (not num2) then -- Se num1 não existe ou num2 não existe, então: (ocorre também se o que foi declarado no comando não foi número) return outputChatBox ("É obrigatório informar 2 números após o comando.", thePlayer, 255) -- Para a execução aqui e cancela a função. end local resultado = num1 + num2 -- A soma só pode ser feita com valores numéricos, 'um' e 'dois' são strings e não podem ser somados. outputChatBox ("A soma entre "..um.. "e "..dois.." é igual a: "..resultado..".", thePlayer, 255, 255, 255) -- Não precisa do true se não existir códigos #hex na mensagem. end addCommandHandler ("somar", soma)1 point
-
estou com um problema nela, nao ta funcionando 100% eu coloco o hitElement ele pega as vezes o tiro fiz ate um teste aqui mais quando uso o element da função ele funciona certinho addEventHandler("onClientPlayerWeaponFire", getLocalPlayer(), function(wap,mag,ClipM,x,y,z,element,startX, startY, startZ) hitElement, x, y, z, elementHit, nx, ny, nz, mat, light, bodypart = processLineOfSight ( startX, startY, startZ, x, y, z, false, false, true) if (hitElement) then if (getElementType (element) == "player") then if bodypart == 9 then outputChatBox("HEADSHOT") else outputChatBox("Acerto") end end else outputChatBox("FORA DO HIT") end end) ELE APARECE A MENSAGEM "FORA DO HIT" e tipo quero que ele pega certeiro o HS e no peito sem que apareça o "FORA DO HIT" ele falha as vezes ele fica como nil1 point
-
Introduction Vehicle indicators are mostly seen on other GTA modifications where the mod 'IVF - Improve Vehicle Features' is compatible. This mod allows for light modifications such as police flashlights, custom LED flashers, indicators and much more. These features are sought after by MTA roleplaying servers a lot. This guide aims to introduce 3D modelers to prepare models for customisable lights, which then requires coded shaders to work. Anything related to scripting is not included in this guide. The guide assumes that the modeler has basic understanding of importing and exporting models. Editing existing Huntley for indicator lights With Huntley imported into 3ds Max, isolate the mesh called 'chassis' as it is the only component that needs working lights. As seen the car has 4 lights; right tail light, left tail light, right headlight and left headlight. All 4 has their own material assigned for them to act each their own way. The material color codes are hardcoded in the game telling it when to show illuminated brake lights for when the car brakes and so on. For this custom vehicle however, any geometry meant for custom vehicle lighting needs white color code and a custom texture name for shadering to work. Before anything, it's required to get the custom lighting texture ready. For this guide, vehiclelights128 and its illuminated version works perfectly fine. These needs be renamed to customRRLightsOff and customRRLightsOn and so forth. The 'RR' is for 'right rear', where as 'LR' would be 'left rear'. This needs be done for front too, so in total 4 'off' images are needed while only one 'on' is needed, as it can simply be instanced when shadering. Below is a step-step process on editing Huntley's geometry and adding custom indicators. Add an 'Editable Poly' modifier to the model. Press '5' key on keyboard which enables 'Select by Element'. Select the two rear light meshes, ensure they are both highlighted. On 'Modify Panel' scroll down and find 'Slice Plane', click that. This creates a rectangle that has a line-preview for the cut. Align the plane to the lights and create two cuts for the indicator lights. Select one side of the geometry that was cut by using 'Select by Polygon'. On the modifier stack, click 'Collapse all', leaving only 'Editable mesh' on the stack. Press 'M' key for 'Material browser'. Create a new GTA material. In the texture slot, add in the 'customRRLightsOff'. On material browser, click 'Assign material to Selection'. Note that this needs be done for the left side too but with different material and texture. Apply a new modifier on the model called 'Unwrap UVW'. Press 'Open UV editor'. On the UV editor, enable 'Select by polygon'. Grab the UV island and drag it onto the orange section of the image, which is for indicator lights. On modifier stack, collapse all, to save the new UV's. Above: example of what can be achieved. Front lights section already has indicator lights, so all that needs doing is 2 new materials with each their own light texture, like done on rear side. The 4 new textures needs be added to the car's .txd file. Model is now ready for export. Now all that's needed is MTA scripting for the light shaders to work. Exact same process can be applied for creating custom emergency lights. Note that it is not necessary to have these 128x128 textures in the model. They can be downscaled to 4x4 in the .txd and then a MTA shader script can apply the originals, which greatly reduces the size of download. This means it'll download 4 images which are then instanced onto every custom model using the lights. To put it short, each .txd will have 4 placeholder-images of 4x4 resolution rather than 4 images of 128x128 resolution.1 point
-
Está correto? function prender(player,attackerWeapon) local Arma = getPlayerWeapon (source) local ArmaID = getWeaponIDFromName (Arma) local Data = getElementData(source) if ArmaID == 3 then if Data == "Polícia Militar" then outputChatBox("Você prender o "..getPlayerName(player),source,255,255,255) outputChatBox("Você foi preso pelo "..getPlayerName(source),player,255,255,255) end end end addEventHandler ( "onPlayerDamage", root, prender)0 points
-
Sobre: Olá galera estou começando a programar e achei um incomodo tudo em inglês porque não entende nada então traduzir aqui! Os recursos são uma parte fundamental da MTA. Um recurso é essencialmente um arquivo zip ou pasta que contém uma coleção de arquivos, além de um arquivo que descreve meta para o servidor como o recurso deve ser carregado e que arquivos que ele contém. Um recurso pode ser visto como sendo, em parte, equivalente a um programa rodando em um sistema operacional - que pode ser iniciado e interrompido, e vários recursos podem ser executados ao mesmo tempo. Tudo o que tem a ver com scripting acontece em recursos, o que um recurso não define se é um modo de jogo, um mapa ou qualquer outra coisa. MTA vem com recursos que você pode, opcionalmente, utilizar na sua gamemodes, como maplimits para manter playings dentro de uma área de jogo ou para criar deathpickups pickups arma. Seu primeiro passo para começar a Lua scripting deve estar usando um editor de Lua. Isto torna muito mais fácil de script. Recomendamos Notepad + +ou LuaEdit . Há também um não-oficial Script Editor MTA (em estado de trabalho em andamento) que você pode testar para fora. Criar um roteiro de trabalho Vamos primeiro aprender como fazer um script básico que permite que o jogador andar na cidade, passo a passo. Onde estão todos os scripts? Vamos dar uma olhada na estrutura do script arquivo. Vá para a pasta do servidor MTA, e siga o caminho abaixo: / Seu MTA Server / mods / deathmatch / resources / Você vai ver um monte de arquivos. Zip, que são os scripts de exemplo embalados enviado com MTA DM. Cada arquivo é um "recurso", e todos eles vão ser descompactado e carregado pelo servidor quando for iniciado. Para criar o seu próprio recurso, basta fazer uma pasta com seu nome preferido. Usaremos "myserver" para este tutorial. Agora você deve estar sob este diretório: / Seu MTA Server / mods / deathmatch / resources / myserver / Identificar o seu recurso A fim de deixar o servidor saber o que está no recurso, uma meta.xml arquivo deve ser criado para listar o conteúdo do recurso. Ele deve estar localizado no diretório raiz do recurso, que é o "myserver" pasta em nosso caso. Portanto, criar um arquivo de texto com o nome "meta.xml", e abri-lo com o notepad. Digite os seguintes códigos na meta.xml arquivo: <meta> <info author="Seu nick" type="gamemode" name="Nome do seu gm" description="Descrição do seu gm" /> <script src="script.lua" /> </meta> No /> O tag indica os arquivos de script contido no recurso, que criaremos a seguir. Criando um simples script Note que no /> function joinHandler() local x = 1959.55 local y = -1714.46 local z = 10 spawnPlayer(source, x, y, z) fadeCamera(source, true) setCameraTarget(source, source) outputChatBox("Bem vindo ao meu servidor!", source) end addEventHandler("onPlayerJoin", getRootElement(), joinHandler) O script vai gerar-lhe na coordenada (x, y, z) acima referidos, quando você entrar no jogo. Note que o fadeCamera função deve ser usada ou a tela ficará preta. Além disso, nas versões após DP2, você precisa definir o destino da câmera (caso contrário, todos os jogadores a vontade é ver o céu azul). A fonte de variável indica que disparou o evento. Uma vez que um jogador juntou-se quando o código é acionado, você usa esta variável para olhar que se juntou. Por isso vai gerar esse jogador em vez de todo mundo ou uma pessoa aleatória. Se tivermos um olhar mais atento sobre AddEventHandler , você pode ver três coisas: 'onPlayerJoin', que indica quando é acionado. getRootElement (), que mostra por que / quem ele pode ser acionado. (GetRootElement () é tudo / todos) E joinHandler, o que indica a função que tem que ser desencadeada depois do evento é disparado. Outros detalhes serão explicados mais tarde, em outro exemplo, agora vamos executar o servidor e experimentá-lo! Executar o script Para ter o servidor começou, basta executar o arquivo executável no diretório DM MTA. A lista de estatísticas do servidor será mostrado em primeiro lugar, observe o número da porta, que você vai precisar de quando entrar no jogo. Em seguida, o servidor carrega todos os recursos sob o diretório / recursos / e "pronto para aceitar conexões!" Antes de se conectar ao servidor, você deve executar o modo de jogo. Tipo "modo de jogo myserver" e pressione Enter. O servidor irá iniciar o modo de jogo que você acabou de criar, e também irá mostrar os erros e advertências a partir deste ponto. Agora você pode iniciar o cliente MTA DM, e "Quick Connect", usando o endereço IP do seu servidor eo número da porta que você viu anteriormente. Se tudo correr bem, depois de alguns segundos o seu personagem vai estar andando nas ruas de Los Santos. Em seguida, vamos adicionar um comando ao seu script que os jogadores podem usar para gerar um veículo ao lado de sua posição. Você pode ignorá-lo e confira mais scripting avançado com o Map Manager , que continua neste tutorial. Outro ramo deste tutorial é Introdução ao Scripting GUI , você pode segui-lo para ver como interface gráfica do usuário no MTA: DM é desenhada e escrita. Criando um simples comando Vamos voltar ao conteúdo do script.lua arquivo. Como mencionado acima, queremos proporcionar um comando para criar um veículo ao lado de sua atual posição no jogo. Em primeiro lugar precisamos criar uma função que deseja chamar e um manipulador de comando que cria o comando, o jogador será capaz de entrar no console. -- Criar a função de chamadas manipulador de comando, com os argumentos: thePlayer, comando, vehicleModel function createVehicleForPlayer(thePlayer, command, vehicleModel) -- Criar um veiculo end -- create a command handler addCommandHandler("criarcarro", createVehicleForPlayer) Nota: Nomes de funções são clicáveis em exemplos de código no wiki e ligado a documentação das funções ". Sobre manipuladores de comando O primeiro argumento de addCommandHandler é o nome do comando, o jogador será capaz de entrar, o segundo argumento é a função deste será chamada, neste caso createVehicleForPlayer . Se você já tiver experiência em scripting, você vai saber que você chamar uma função como esta: functionName ( argumento1, argumento2, argument3, .. ) functionName ( thePlayer, commandName, argument3, .. ) Se tivermos um olhar mais atento na parte inferior do exemplo acima, podemos ver argument1 é thePlayer e argument2 o CommandName. thePlayer é simplesmente aquele que digitou o comando, então o que você chamá-lo, a variável conterá o jogador que ativou o comando. commandName é simplesmente que o comando digitado. Então, se eles digitei "/ greet", este argumento irá conter "saudar". Argumento 3 é algo extra que o jogador digitou, você vai aprender um pouco mais no tutorial. Nunca se esqueça que os primeiros dois argumentos são argumentos padrão, mas você pode nomeá-los para o que quiser. Chamamos o addCommandHandler função desta forma e desde já createVehicleForPlayer é uma função também, ele pode ser chamado dessa maneira também. Mas nós estamos usando um manipulador de comando para isso, que chama-lo de forma similar, internamente. Por exemplo: tipos de Alguém "createvehicle 468" no jogo no console para gerar uma Sanchez, o manipulador de comando chama a função createVehicleForPlayer, como se tivéssemos esta linha de código no script: createVehicleForPlayer(thePlayer, "criarcarro" , "468") - É o elemento thePlayer jogador do jogador que entrou com o comando Como podemos ver, ele fornece vários parâmetros: o jogador que chama o comando, o comando ele entrou e qualquer texto que tivesse depois disso, neste caso "468" como ID de veículo para a Sanchez. Os dois primeiros parâmetros são os mesmos com todos os manipuladores de comando, que você pode ler sobre o AddEventHandler página. Por este fato, você sempre tem que definir pelo menos os dois parâmetros para usar qualquer depois disso (por exemplo, para processar o texto que foi digitado após o comando, como em nosso exemplo a id modelo do veículo). Nota: Você tem que adicionar o manipulador de comando depois que você definiu a função do manipulador, senão ele não pode encontrá-lo. A ordem das questões de execução. Escrever a função A fim de preencher a função que nós criamos, nós precisamos pensar sobre o que temos de fazer: Obter a posição de jogadores, por isso sabemos onde desovar o veículo (que quer que ele apareça ao lado do jogador) Calcular a posição que queremos para desovar o veículo no (não queremos que ele seja exibido no player) Desovar o veículo Verificar se ele foi gerado com sucesso, ou uma mensagem de saída Para atingir nossos objetivos, temos que usar várias funções. Para encontrar a função que precisamos de usar, que deve visitar o Server List Functions . Primeiro precisamos de uma função para obter a posição de jogadores. Como os jogadores são Elements, que pular para o primeiro elemento funções onde encontramos a getElementPosition função. Clicando no nome da função na lista, você começa com a descrição da função. Lá podemos ver a sintaxe, o que ele retorna e, geralmente, um exemplo. A sintaxe nos mostra o que podemos ou argumentos têm de apresentar. Para getElementPosition , a sintaxe é: float, float, float getElementPosition ( element theElement ) Os três float(flutuar) na frente do nome da função são o tipo de retorno. Neste caso significa que a função retorna três números de ponto flutuante. (X, y e z) Dentro dos parênteses, você pode ver quais os argumentos que você tem que submeter-se. Neste caso, apenas o elemento cuja posição você deseja obter, que é o jogador em nosso exemplo. function createVehicleForPlayer(thePlayer, command, vehicleModel) --obter a posição e colocá-lo no x, y, z variáveis --(meios locais, as variáveis só existem no escopo atual, neste caso, a função) local x,y,z = getElementPosition(thePlayer) end Em seguida, queremos garantir que o veículo não vai gerar diretamente no player, então adicionamos algumas unidades para o x variável, o que irá torná-lo desovar leste do jogador. function createVehicleForPlayer(thePlayer, command, vehicleModel) local x,y,z = getElementPosition(thePlayer) -- Obter a posição do jogador x = x + 5 -- Adicionar 5 unidas na posição x end Agora precisamos de uma outra função, uma para desovar um veículo. Mais uma vez, procure-a na lista de funções do servidor , desta vez - já que estamos falando de veículos - no veículo funções seção, onde vamos escolher createVehicle . Na sintaxe desta função, só temos um tipo de retorno (que é mais comum), um elemento de veículo que aponta para o veículo que acabou de criar. Além disso, vemos que alguns argumentos são colocados dentro de [] o que significa que esses são opcionais. Nós já temos todos os argumentos de que precisamos para createVehicle na nossa função: A posição que apenas calculado no x, y, z variáveis eo id modelo que nós fornecemos através do comando ("createvehicle 468") e pode acessar na função como vehicleModel variável. function createVehicleForPlayer(thePlayer, command, vehicleModel) local x,y,z = getElementPosition(thePlayer) -- Obter posição do jogador x = x + 5 -- Add mais 5 uni -- - criar o veículo e armazenar o elemento do veículo retornado na variável''''createdVehicle local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) end É claro que este código pode ser melhorado em muitas maneiras, mas pelo menos queremos adicionar uma verificação se o veículo foi criado com êxito ou não. Como podemos ler no createVehicle página em Returns , a função retorna falso quando foi incapaz de criar o veículo. Assim, vamos verificar o valor do createVehicle variável. Agora temos nosso script completo: function createVehicleForPlayer(thePlayer, command, vehicleModel) local x,y,z = getElementPosition(thePlayer) -- Pegar posição do jogador x = x + 5 -- add 5 unidade no comando x local createdVehicle = createVehicle(tonumber(vehicleModel),x,y,z) -- Chekar a value retun ''false'' if (createdVehicle == false) then -- Erro ao criar o veiculo aparecer a mensagem abaixo. outputChatBox("Erro ao criar o veiculo.",thePlayer) end end addCommandHandler("criarcarro", createVehicleForPlayer) Como você pode ver, nós introduzimos uma outra função com outputChatBox . Até agora, você deve ser capaz de explorar a função de página de documentação do mesmo. Para mais avançado scripting, confira o Map Manager . O que você precisa saber Você já leu algumas coisas sobre recursos, manipuladores de comando e funções de busca na documentação no primeiro parágrafo, mas há muito mais para aprender. Esta seção lhe dará uma visão geral bastante curto sobre algumas dessas coisas, ao ligar para páginas relacionadas, se possível. Clientside scripts e Serverside Você já deve ter notado esses termos ou similar (Server / Client) em algum lugar deste wiki, principalmente em conjunto com funções. MTA não só suporta scripts que são executados no servidor e fornecer comandos (como o que escrevi acima) ou outros recursos, mas também scripts que são executados no cliente MTA os jogadores usam para se conectar ao servidor. A razão para isto é, que fornece algumas características MTA tem que ser clientside (como um GUI - Graphical User Interface), outros devem ser, porque eles trabalham melhor e outros ainda estão em melhor situação para ser serverside ou simplesmente não funcionam clientside. A maioria dos scripts que você vai fazer (gamemodes, mapas) será, provavelmente, serverside, como o que escreveu na primeira seção. Se você tiver algo que não pode ser resolvido serverside, você provavelmente terá que fazê-lo clientside. Para um script clientside por exemplo, você poderia criar um arquivo de script comuns (por exemplo chamado client.lua ) e especificá-lo na meta.xml, como este: <script src="client.lua" type="client" /> ------------------------------------------------------------------------ Traduzirei mais depois, Obg a atenção! Creditos: Wiki MTA 90% Disponibilizar o tutorial em inglês Lordsams 10% Traduzir a português0 points
