Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 25/03/24 in all areas

  1. Eu testei e funciona. Ele inicia o fogo para explodir, depois conserta, depois inicia o fogo e fica nesse loop até você descapotar o carro. Mas não explode.
    2 points
  2. Download (Github) https://github.com/gta191977649/MTASA-SkyGfx Note: the resource updates frequently, please always check the github for the latest verion SkyGfx (Sky is name of Renderware for the PS2, any semblance to the actual sky is purely accidental) brings accurate PS2 and Xbox graphics to the PC version of San Andreas, Vice City and III. if you enjoy vanilla San Andreas graphic, this mod is essential to have. to learn more about it from the original author (AAP), please see here. Now i will straight go through the documentation. Screenshots The Thanks List ren712 - for shaders & coronas help aap - for the original work & renderware engine help What have done or working in progress? Not Start yet/ not invesgate ? Partically Works Done & Fully Supported Pre-request Library Timecyc Parser Rendering the timecyc interpolation directly from timecyc.dat, interpretation algorithm conveted from librwgta. custom_coronas For rendering the classicFX, like VC style vehicle big headlight, trail light effect. DGS - (Optional) for the debugTools, But you're need dgs to work, i just a bit lazy with gui things Features Postfx Trails(Blur) - blurLeft,blurTop,blurRight,blurBottom works! Radiosity - Color Filter - ? PS2 PC Mobile - Night Version Goggles - Infrared Goggles - Building Pipeline SimplePS - BuildingVS - ? partially, some engine data requires to work, still working on that BuildingVSFX - For model with specular lighting property Not even start yet Vehicle Pipeline PS2 Pipeline - Done, you happy? Xbox Pipeline - ? Only specular lighting works. Pipeline tweaks radiosityFilterPasses - radiosityRenderPasses - radiosityIntensity - zwriteThreshold - detailMaps - leedsShininessMult - neoShininessMult - neoSpecularityMult - envShininessMult - envSpecularityMult - envPower - envFresnel - sunGlare - just see my feature PR. ps2ModulateBuilding - World Effect Dual Pass Render - Yeah, it's done, thanks to ren712 PS2 Alpha Test not even start yet Grass dualPassGrass - it overrides by dual pass render. grassBackfaceCull - grassAddAmbient - grassFixPlacement - only can do it via modify the mta engine ps2ModulateGrass - Shadows pedShadows - stencilShadows - Misc disableClouds - disableGamma - neoWaterDrops(xbox rain postfx) - neoBloodDrops - transparentLockon - lightningIlluminatesWorld - toogle timecyc lighting on world object. fixPcCarLight - coronaZtest - ? partially works, however this will breaks and bugs up the other corona's ztesting in mta. needs to work on a new solution. fixShadows - Special Misc FX (Unique addon by nurupo) vehicleClassicFx Show VC/III liked vehicle big headlight and light trails when you rotate the screen vehicleTrailLength Length of light trails (buffered frame) vehicleTrailDrawDist What distance should trails start visiable? vehicleHeadLightAlpha Alpha multiplier for head light vehicleRearLightAlpha Alpha multiplier for rear light buildingExtraBrightness Multiplier for building extra brightness vehicleExtraBrightness Multiplier for building extra brightness stochasticFilter Make repeative texture look better, ported from Valdir da Costa Júnior Bugs/Issue Sun can see through by walls -> Due to zTest disabled fixed by manually re-create sun from shader, thanks to Ren712 Element garbage collection for vehicle classic fx
    2 points
  3. A new arena? Youuu betcha! Get ready to experience a new and exciting way to play in San Andreas. Become one of the first ever to play GeoGuesser inside the world of San Andreas. TRY IT OUT NOW! Server: mtasa://mta.ffs.gg:22003 Website: https://ffs.gg/ Discord: https://ffs.gg/discord How It Works GeoGuessr is a popular game where you are dropped into a random location on the globe, and you are supposed to guess your position on the map. Well, that is essentially what our new arena GeoGuesser is, except... You are in San Andreas! Join or Create your own room Each round, right-click on the map to mark where you think you are Click on GUESS! button or press Spacebar to make your guess At the end of each round you get a score based on how close your guess was The winner is the player with the highest score at the end of the game Room Features Categories: choose the locations you want to play in (see list below) Lock Camera Rotation: want to make it more challenging? You can restrict players from looking around their surroundings Time & Weather: you can set the time and weather for everyone in your room. Sandstorm, anyone? Categories San Andreas (all categories) Los Santos San Fierro Las Venturas Los Santos & San Fierro & Las Venturas Countryside Badlands Desert Countryside & Badlands & Desert Los Santos & Countryside San Fierro & Badlands Las Venturas & Desert Map Controls Zoom: use the Mouse Wheel or the and buttons to zoom in and out Resize: shrink or enlarge the map using the and buttons Lobby Creating a Room Joining a Room Waiting Room Help Page HUD Best regards, -ffs-PLASMA, -ffs-JessePinkman, -ffs-NitroN & -ffs-Leadership
    1 point
  4. Pretty unique! Definitely going to try this one out.
    1 point
  5. Só para complementar, recentemente foi criado uma nova propriedade para a função setWorldSpecialPropertyEnabled. Basta você usar desta maneira e nenhum carro do servidor irá pegar fogo e/ou explodir ao capotar. -- Server addEventHandler("onResourceStart", resourceRoot, function() setWorldSpecialPropertyEnabled("burnflippedcars", false) end)
    1 point
  6. If It was a roleplay server use Owl Gaming to do it easily
    1 point
  7. Out of video memory. This can happen on servers with unoptimized mods and (faulty) scripts that abuse video memory, or even when you have a powerful graphics card in case the stuff on a server is extremely unoptimized so that it starts hitting GTA limits. If you have a powerful graphics card and more players suffer from this crash type, inform the server owner of this problem as it probably means their scripters & designers don't know what they are doing.
    1 point
  8. Please disregard the post above.. This is a working code ----server addCommandHandler("adminchat", function(player, _, ...) local account = getAccountName(getPlayerAccount(player)) --get the player account for _,v in ipairs(getElementsByType("player")) do if isObjectInACLGroup("user." .. account, aclGetGroup("Staff")) then --- this section you can customize which ACL role they are. outputChatBox("#7D6608[Admin]#9A7D0A"..getPlayerName(player):gsub("#%x%x%x%x%x%x", "").."#7D6608: #FFFFFF"..table.concat({...}, " "):gsub("#%x%x%x%x%x%x", ""), v, 255, 255, 255, true); --- thisplay chat you can customize as well. else outputChatBox("You don't have enough access to use this chat!") end end end ) ---client bindKey("h", "down", "chatbox", "adminchat"); Please hit like on 2 of my posts if these helped you
    1 point
  9. It should be possible, just a concept, not sure it works with this code, but you can modify the rest. --- server addCommandHandler("adminchat", function(player, _, ...) for _,v in ipairs(getElementsByType("player")) do if isObjectInACLGroup("user."..account,aclGetGroup("Staff")) then --- uses ACL to determine who is able use. if (getElementData(v, "adminchat") == getElementData(player, "adminchat")) then outputChatBox("#7D6608[Admin]#9A7D0A"..getPlayerName(player):gsub("#%x%x%x%x%x%x", "").."#7D6608: #FFFFFF"..table.concat({...}, " "):gsub("#%x%x%x%x%x%x", ""), v, 255, 255, 255, true); end end end end); --- client bindKey("u", "down", "chatbox", "adminchat");
    1 point
  10. @JPzin deixa o like nas respostas, já que eu fiz o resource inteiro pra vc kkkkkkkk
    1 point
  11. Desta forma: Client-side: local screenW, screenH = guiGetScreenSize() local painel = false -- Layout Fixo: (centralizado) local layout = { -- posX, posY, sizeX, sizeY, colorRGBA, text, textColorRGBA, fontSize, fontFamily, alignX, alignY {-320, -180, 640, 360, tocolor(75, 75, 75, 255)}, -- Window {-320, -190, 426, 20, tocolor(23, 209, 248, 255)}, -- Tittle Line {-300, -160, 600, 60, tocolor(20, 20, 20, 255), "Arsenal", tocolor(255, 255, 255, 255), 3, "bankgothic", "center", "center"}, -- Tittle {-300, -80, 186, 100, tocolor(43, 43, 43, 255), "M4", tocolor(255, 255, 255, 255), 2, "pricedown", "center", "center"}, -- Button 1 {-300, 40, 186, 100, tocolor(43, 43, 43, 255), "AK", tocolor(255, 255, 255, 255), 2, "pricedown", "center", "center"}, -- Button 2 {-93, -80, 186, 100, tocolor(43, 43, 43, 255), "GLOCK", tocolor(255, 255, 255, 255), 2, "pricedown", "center", "center"}, -- Button 3 {-93, 40, 186, 100, tocolor(43, 43, 43, 255), "Skin 1", tocolor(255, 255, 255, 255), 2, "pricedown", "center", "center"}, -- Button 4 {114, -80, 186, 100, tocolor(43, 43, 43, 255), "Skin 2", tocolor(255, 255, 255, 255), 2, "pricedown", "center", "center"}, -- Button 5 {114, 40, 186, 100, tocolor(43, 43, 43, 255), "VEICULO", tocolor(255, 255, 255, 255), 2, "pricedown", "center", "center"}, -- Button 6 {-320, 140, 640, 40, false, "Para fechar aperte 'Backspace'", tocolor(255, 255, 255, 255), 2, "default", "center", "center"}, -- Close info } function paineldx () for i, infos in ipairs (layout) do -- Para cada item da tabela layout, faça: local posX, posY, sizeX, sizeY, colorRGBA, text, textColorRGBA, fontSize, fontFamily, alignX, alignY = unpack (infos) -- Separa as infos em variáveis. -- Layout Fixo: posX = (screenW / 2) + posX -- Faz com que o centro da tela seja a posição 0, 0. Centralizando as posições. posY = (screenH / 2) + posY -- Converte as posições centralizadas da tabela para posições absolutas. if colorRGBA then -- Só faz dxDrawRectangle se tiver o parâmetro colorRGBA. Se não tiver, é só um texto isolado. if i >= 4 and i <= 9 then -- Se for um botão, então: (se for do item 4 até o 9) if isMouseInPosition (posX, posY, sizeX, sizeY) then -- Se o mouse está em cima do botão, então: colorRGBA = tocolor(0, 0, 0, 255) -- Torna a cor do botão preto. end end dxDrawRectangle(posX, posY, sizeX, sizeY, colorRGBA, false) end if text then -- Só faz dxDrawText se tiver o parâmetro texto. sizeX = posX + sizeX sizeY = posY + sizeY dxDrawText(text, posX, posY, sizeX, sizeY, textColorRGBA, fontSize, fontFamily, alignX, alignY) end end end addEvent("HitM", true) addEventHandler("HitM", root, function() -- Função chamada pelo servidor quando este jogador colide no marker do server. if not painel then addEventHandler("onClientRender", root, paineldx) painel = true showCursor(true) end end) bindKey("backSpace", "down", function() -- Tecla que fecha o painel. if painel then removeEventHandler("onClientRender", root, paineldx) painel = false showCursor(false) end end) addEventHandler("onClientClick", root, function(button, state) if button == "left" and state == "down" then if painel then for i, infos in pairs (layout) do -- Neste caso uso pairs pois a ordem dos itens não importa. local posX, posY, sizeX, sizeY = unpack (infos) -- Separa as infos em variáveis. -- Layout Fixo: posX = (screenW / 2) + posX -- Converte a posição centralizada da tabela para posição absoluta. posY = (screenH / 2) + posY if isMouseInPosition(posX, posY, sizeX, sizeY) then if i == 4 then -- Se for o botão de M4, então: triggerServerEvent("setarAlgo", localPlayer, "weapon", 31, 9999) -- giveWeapon (source, 31, 9999) -- Não funciona client-side. elseif i == 5 then -- Se for o botão de AK, então: triggerServerEvent("setarAlgo", localPlayer, "weapon", 30, 9999) elseif i == 6 then -- Se for o botão de Glock, então: triggerServerEvent("setarAlgo", localPlayer, "weapon", 24, 9999) elseif i == 7 then -- Se for o botão de Skin 1, então: triggerServerEvent("setarAlgo", localPlayer, "skin", 28) elseif i == 8 then -- Se for o botão de Skin 2, então: triggerServerEvent("setarAlgo", localPlayer, "skin", 29) elseif i == 9 then -- Se for o botão de Vehicle, então: triggerServerEvent("setarAlgo", localPlayer, "vehicle", 560) end end end end end end) function isMouseInPosition (x, y, width, height) -- Função útil. if not isCursorShowing() then return false end local sx, sy = guiGetScreenSize() local cx, cy = getCursorPosition() local cx, cy = (cx * sx), (cy * sy) return ((cx >= x and cx <= x + width) and (cy >= y and cy <= y + height)) end Server-side: local m1 = createMarker(2027.903, 1545.603, 10.819 -1, "cylinder", 1.5, 0,195,255, 100) local vehicles = {} addEventHandler("onMarkerHit", m1, function(hit) if getElementType(hit) == "player" then -- Se quem colidiu no marker for um jogador, então: if isObjectInACLGroup ("user."..getAccountName (getPlayerAccount (hit)), aclGetGroup ("Admin")) then -- Se o jogador está na ACL Admin, então: setTimer(triggerClientEvent, 250, 1, hit, "HitM", hit) else outputChatBox("Acesso negado.", hit, 255, 0, 0) end end end) addEvent("setarAlgo", true) addEventHandler("setarAlgo", root, function (tipo, id, ammo) -- Função chamada pelo client. Seta algo no jogador. if tipo == "weapon" then giveWeapon(client, id, ammo, true) elseif tipo == "skin" then setElementModel (client, id) elseif tipo == "vehicle" then local x, y, z = getElementPosition(client) if isElement (vehicles[client]) then -- Se já existe um veículo criado por este jogador, então: destroyElement(vehicles[client]) -- Destrói esse veículo antes de criar outro. end vehicles[client] = createVehicle(id, x, y, z + 1) -- Cria o veículo em cima do jogador. end end) function limpaVehicle() -- Destrói o veículo criado pelo jogador quando ele sair do servidor. if isElement (vehicles[source]) then destroyElement(vehicles[source]) vehicles[source] = nil end end addEventHandler("onPlayerQuit", root, limpaVehicle) addEventHandler("onPlayerDisconnect", root, limpaVehicle)
    1 point
  12. what i mostly want from vehicles.ide is to make vehs load with an 'mtruck'.
    1 point
  13. Server-side scripts are not downloaded by players, so setting the cache does not change anything. Setting the cache means that the script is not downloaded to the player's disk, but is still loaded into memory so that it can run. It can still be manipulated by the client, so you should never trust data from the client. More about it here https://wiki.multitheftauto.com/wiki/Script_security
    1 point
  14. I see, thanks how do I make the gui that when i press the key again it closes? addEvent("playerOnClick", true) addEventHandler("playerOnClick", root, function() guiGridListClear ( w.gridList.main ) for i,veh in ipairs(getElementsByType("vehicle")) do if veh ~= vehicle then local row = guiGridListAddRow ( w.gridList.main ) local x,y,z = getElementPosition(veh) guiGridListSetItemText ( w.gridList.main, row, w.gridList.column1, getVehicleName ( veh ), false, false ) guiGridListSetItemText ( w.gridList.main, row, w.gridList.column2, x, false, false ) guiGridListSetItemText ( w.gridList.main, row, w.gridList.column3, y, false, false ) guiGridListSetItemText ( w.gridList.main, row, w.gridList.column4, z, false, false ) end end guiSetVisible(w.main, true) showCursor(true) end ) function hasPermission(key,keyState) if getElementData(localPlayer, "logedin") then triggerServerEvent("hasPermissionEvent",localPlayer,key,keyState) end end bindKey("p", "down", hasPermission) Edit : you can disregard these, I made if else statement and created to false. function playerOnClick(key,keyState) if (keyState == "down") then if (guiGetVisible(w.main) == false) then guiGridListClear ( w.gridList.main ) for i,veh in ipairs(getElementsByType("vehicle")) do if veh ~= vehicle then local row = guiGridListAddRow ( w.gridList.main ) local x,y,z = getElementPosition(veh) guiGridListSetItemText ( w.gridList.main, row, w.gridList.column1, getVehicleName ( veh ), false, false ) guiGridListSetItemText ( w.gridList.main, row, w.gridList.column2, x, false, false ) guiGridListSetItemText ( w.gridList.main, row, w.gridList.column3, y, false, false ) guiGridListSetItemText ( w.gridList.main, row, w.gridList.column4, z, false, false ) end end guiSetVisible(w.main, true) showCursor(true) else guiSetVisible(w.main, false) showCursor(false) end end end addEvent("playerOnClick",true) addEventHandler("playerOnClick",root,playerOnClick) but of course, If you can recommend a better way than what I did please feel free to share your opinion I would very much appreciate it.
    1 point
  15. Olá @Mischief-1, como vai? Adicione uma verificação adicional para garantir que os blips sejam removidos quando os jogadores deixarem os grupos. playerBlibs = {} amouunt = 0 function updateGPS() amouunt = 0 local gangname = getElementData(getLocalPlayer(), "gang") -- Remover todos os blips existentes for i, blip in ipairs(playerBlibs) do if isElement(blip) then destroyElement(blip) end end -- Verificar se o jogador pertence a um grupo if gangname == "none" then return end playerBlibs = {} -- Criar blips para os jogadores no mesmo grupo for i, player in ipairs(getElementsByType("player")) do if gangname == getElementData(player, "gang") and player ~= localPlayer then amouunt = amouunt + 1 playerBlibs[amouunt] = createBlipAttachedTo(player, 2, 2) setBlipVisibleDistance(playerBlibs[amouunt], 1000) end end end setTimer(updateGPS, 5000, 0) Acredito que isso ajude a resolver o problema. Qualquer dúvida, volte a perguntar. Tmj! Att,
    1 point
  16. Olha... vc só mudou 1 variável. Mas não trocou os getElementData/setElementData para getPlayerMoney/setPlayerMoney. Além disso, getPlayerMoney e setPlayerMoney devem ser feitos server-side somente. Então você precisará de triggerServerEvent ali no script client-side para chamar um evento lá no server-side para mexer no dinheiro no jogador. Até pq tentar setar dinheiro no jogador via client-side só mudará na Hud, mas não vai mudar no servidor, então o dinheiro que aparece na Hud não será a quantidade real que ele tem no servidor.
    1 point
  17. About Us ArdicGaming Roleplay is an English-based MTA Server. The community is here to provide quality roleplay along with a welcoming experience. ArdicGaming has been in dormant existence from 2017, when a brief release was available to the public. Years later I co-owned a player's favorite, San Andreas Roleplay with Fernando (Nando) - a household name within MTA at this point. You can read more about San Andreas Roleplay (SA-RP) here. ArdicGaming is supposed to give that nostalgic feeling to players and a warm and welcoming community based in Red County (Los Santos County) to support newcomers, and oldtimers alike. We are here to ensure that we can keep the English MTA Roleplaying scene alive, even if it's only on a small scale! We are determined to show true passion towards the roleplaying scene. Goal Our goals are easy... create a community for all to enjoy, hang out, meet new friends and rekindle with old friends. The English RP community is something that is closely-knit and often brings familiar faces around. We're not here to compete against other gamemodes, we're just here to provide what the players want. With that being said, we are always happy to take suggestions and feedback so that we can provide a community that the players can call home. Staff Team Our staff team is combined with hardened veterans in the roleplaying community, along with newcomers. We have some interesting and talented folk that are with us on this project. Our staff team is the driving force behind the works, keeping the cogs turning so that players can enjoy a fluid experience. Some of our key staff members have returned to take the reigns once again to ensure that the players can achieve the experience they desire. Useful Information We have decided to stick with the SA-RP gamemode along with a day-of-closure database so that players can hop in-game and still have all of their characters and assets. Some players may not have their assets due to removal of powerplay factions and powerplay characters in an aid to balance the economics. This only affected a select few within the server so it's unlikely that you will be impacted by this if you played SARP. We hope to add media to this post so you can see what to expect from us when we officially open to showcase to those who didn't have the opportunity to visit SA-RP when it was around. Useful Links UCP: https://ardicgaming.com/ Forums: https://forums.ardicgaming.com/ Community Rules: https://wiki.ardicgaming.com/ Discord: https://ardicgaming.com/discord/ Server IP: mtasa://164.132.200.104:22003 Thank You! Thanks for taking the time to read. We hope that you stop by and check us out. We are always looking to interact with the community, because at the end of the day, without the people, a community is nothing. From the bottom of our hearts, the ArdicGaming Staff do truly appreciate the time that people take to play, interact and contribute to the community. If you have made it this far, thank you for reading. Your time and patience is greatly appreciated. We look forward to seeing you on launch! Please visit the Forums or our Discord to stay up to date for the server's release.
    1 point
  18. function onClientSuccessBuysItem(target,item,currency,amount,price) setElementData(target,item,getElementData(target,item)+amount) setElementData(target,"money",getElementData(target,"money")-price) -- or takePlayerMoney(target, price) end addEvent("DayZPH:onClientSuccessBuysItem",true) addEventHandler("DayZPH:onClientSuccessBuysItem",getRootElement(),onClientSuccessBuysItem)
    1 point
  19. Você não precisa upar as imagens no drive. Você pode upá-las no imgur.com e mandar o link direto da publicação aqui.
    1 point
  20. Proszę local screenX, screenY = guiGetScreenSize(); local barW,barH = (108/1080) * screenY, (25/1080) * screenY; local barX,barY = screenX / 2 - barW / 2, screenY * 0.8; local ballX,ballY; local ballSize = (17/1080) * screenY; local ballCenterX = barX + barW / 2 - ballSize / 2; local ballY = barY + barH / 2 - ballSize / 2; local bar = dxCreateTexture("pasek.png"); local ball = dxCreateTexture("kulka.png"); addEventHandler('onClientRender', root, function() local veh = getPedOccupiedVehicle(localPlayer); if (veh and getVehicleType(veh) == 'Plane') then local _,ry = getElementRotation(veh); ry = ry % 360; local offset = 0; if (ry <= 90) then offset = ry; elseif (ry <= 180) then offset = (180 - ry); elseif (ry <= 270) then offset = -(ry - 180); else offset = -(360 - ry); end ballX = math.max(barX, math.min(barX + barW - ballSize, barX + barW / 2 + (offset/90) * (barW / 2) - ballSize / 2)); dxDrawImage(barX, barY, barW, barH, bar, 0, 0, 0, 0xFFFFFFFF); dxDrawImage(ballX, ballY, ballSize, ballSize, ball, 0, 0, 0, 0xFFFFFFFF); end end); Musisz sobie jedynie dopasować pozycje w osi Y oraz zmienić X do swojego paska. Ja obciąłem grafikę paska aby nie miała pustego tła wokół https://imgur.com/M0F1zdp
    1 point
  21. there is no unban and your ban is a temporary ban, so you just have to wait, don't forget to check your programs running in the background,if you have other questions or problems, you can create a new topic and bother me if you wish. Topic about bans :
    1 point
  22. If you don't want the files to be saved on the players disk, set the cache to false in meta.xml. <script src="client.lua" type="client" cache="false" />
    1 point
  23. Hello, you can encrypt your script so people cant read it. You can't avoid people downloading client side script since it runs on their pc. As far as i know its the only solution but i could be wrong
    1 point
  24. There is no property called "Rotated" in CEGUI. The properties related to rotation are: "Rotation" or "XRotation", "YRotation", "ZRotation". Try using one of them http://static.cegui.org.uk/static/WindowsLookProperties.html#StaticImage
    1 point
  25. objeto = createObject (1337, 2502, -1667, 12.36) -- Cria um objeto qualquer na Grove Street. addEventHandler("onClientRender", root, function() -- for _, objeto in ipairs(getElementsByType("object")) do -- DESATIVADOS APENAS PARA TESTES. -- if (getElementData(objeto,"objeto.element")) then -- local ID = getElementData(objeto, "objeto.id") -- local PD = getElementData(objeto, "objeto.produtos") local ID = 1337 -- APENAS PARA TESTES local PD = 1234567890 -- APENAS PARA TESTES local localPos = {getElementPosition(localPlayer)} local objetoPos = {getElementPosition(objeto)} local worldPosition = {getScreenFromWorldPosition(objetoPos[1], objetoPos[2], objetoPos[3] + 0.50)} local distance = getDistanceBetweenPoints3D(localPos[1], localPos[2], localPos[3], objetoPos[1], objetoPos[2], objetoPos[3]) if distance <= 15 then if worldPosition[1] and worldPosition[2] then dxDrawText("ID: "..ID.." | PD: "..PD, worldPosition[1], worldPosition[2], worldPosition[1], worldPosition[2], tocolor(255, 255, 255, 255), 1.0 , "default-bold", "center") end end -- end -- end -- DESATIVADOS APENAS PARA TESTES. end)
    1 point
  26. O seu 4º e 5º parâmetros não fazem sentido. (10, 20) Também não faz sentido vc colocar "center" fora de aspas duplas. Este parâmetro é uma string, portanto precisa estar entre aspas, exatamente como mencionei na minha resposta anterior. O primeiro "center" faz ele centralizar o texto na horizontal, o segundo "center" faz ele centralizar na vertical, mas não é necessário centralizar na vertical nesse caso, pois é só aumentar o diminuir aquele offset do + 0.50 para mudar a altura do texto. Então utilize apenas o primeiro "center" e delete o que tem depois.
    1 point
  27. Adicione o parâmetro , "center" depois do nome da fonte ali no dxDrawText.
    1 point
  28. Hi, onClientPlayerVehicleEnter first paramater is theVehicle element you entered addEventHandler("onClientPlayerVehicleEnter", localPlayer, function(theVehicle) You can get the model id of this vehicle using getElementModel(theVehicle) and check if the vehicule you entered is a valid model It is faster to use a table with key as id of the vehicle and set a boolean true as value because it allows you to check by calling the table with the id of vehicule you entered as key instead of checking with a loop. validModels = { [124] = true, [126] = true, -- etc } addEventHandler("onClientPlayerVehicleEnter", localPlayer, function(theVehicle) local id = getElementModel(theVehicle) if (validModels[id]) then -- your stuff end end) Cya,
    1 point
  29. For the Last 3 years MTA SA serial validation worked flawlessly on wine/linux via running the mta-server64 as root, but recently that confusingly broke. This happens on all my 4 systems all used to work for the Last 3 years and now they don't.
    1 point
  30. DataSystem Links: Github: https://github.com/PWisniaNE/MTA-SA-DataSystem Authors: P.Wiśnia (https://github.com/PWisniaNE) Rick (https://github.com/httpRick/) Server-Side functions: setCustomData(element,name,variable,key) getCustomData(element,name,key) getAllCustomData(element,key) getElementsByCustomData(name,key) hasCustomData(element, selectedKey, name, variable) removeCustomData(element,name,key) Client-Side functions: getCustomData(element,name) setCustomData(element,name,variable) hasCustomData(element,name,variable) KeyTypes: Server (non-synchronization, data only storage on server) Synced (synchronization with all players) Client (synchronization from server to one player) Group (synchronization from server to group of players)
    1 point
  31. Hi, I started slowly creating an alternative elementdat system. Link: https://github.com/PWisniaNE/MTA-SA-UserDataSystem/ If you have any suggestions how to improve or optimize the system, I will be happy to listen to your suggestions. I would like the code to be as optimal and safe as possible.
    1 point
  32. Nenhum desses exemplos vai funcionar pois faltou fechar o parênteses do addEventHandler. Adicione um ) depois do último end.
    1 point
  33. Hello everybody I'm currently working on a server and have been playing around with loads of different resources and scripts, but I've just come across one that has properly grounded all my gears completely. I downloaded this promising looking resource called "housing_system" which turned out to be a massive headache. It's great, it's simple to use, but it doesn't save any of the properties and as soon as you close "MTA Server", all your work goes. This is very annoying when you spend a night doing almost 400+ properties, just for them to all disappear. Nothing in the readme or description that may hint in any way for you to save anything yourself. Here's a link https://community.multitheftauto.com/index.php?p=resources&s=details&id=1841 Quite disappointed after loosing all that progress, and has genuinely put me off doing the server a bit as I now have to go all around LS (when I find a resource that works as described) It's been uploaded by a guy called "TheTurboCow" but apparently got permission from "JasperNL=D" to edit it and re-upload it. Any help would be much appreciated as the author hasn't linked a thread to it so you can't ask them for support. I don't know if I'm doing anything wrong or if I should be doing something else, as the uploader isn't really much help. Cheers everyone!
    1 point
  34. After a worrying discussion on Discord last night regarding password storage and remember me functionality I've decided to write a tutorial on how it should be done. This guide assumes you are not using MTA's built in account system, but a custom one. Any code shown in this tutorial is purely for illustrative purposes, and is not finished code, you should use it as a guideline, not a solution. The following topics will be discussed in this tutorial: How to hash and salt passwords (register) How to validate a hashed password (login) How to add "remember-me" functionality How to offer password recovery How to migrate from an older hashing algorithm, to a newer one Using a password policy (Extra) How to handle database leaks (Extra) What even is hashing and salting? For the purpose of this tutorial we expect a database structure which is somewhat similar to this: How to hash and salt passwords When you have a user register on your service, that user expects of you to keep their password safe. Whilst it is generally bad practice to use the same password for multiple services there are many users that still do so. Because of this it's crucial that you save the user's passwords in a way that an attacker will be unable to find out the original password the user typed. This includes if they have full access to your database. In order to do this we do what is called "Password hashing" When a user registers, your server receives the user's intended username, (email) and password. Before you save that password to the database you have to hash and salt this, luckily MTA has a function that takes care of this. If you wish to know more about what exactly it does, there's more information at the end of this tutorial. In order to hash this password you use the passwordHash function. This function is relatively slow (by design), so it is highly recommended you pass a callback to this function, so your entire script doesn't wait for it to complete. https://wiki.multitheftauto.com/wiki/PasswordHash local mysqlHandle -- we're assuming this value is set somewhere else in code function register(username, email, password) local player = client passwordHash(password, "bcrypt", {}, function(hashedPassword) -- callback function for hashing the password local handle = dbExec(function(handle) -- callback function for storing the user in the database if (handle) then triggerClientEvent(player, "registrationSuccess") -- inform the user that registration was successful else triggerClientEvent(player, "registrationFailed") end end,mysqlHandle, "INSERT INTO users (email, username, password) VALUES (?, ?, ?)", email, username, hashedPassword) end) end addEvent("passwordTutorial:register", true) addEventHandler("passwordTutorial:register", getRootElement(), register) How to validate a hashed password Once you've saved the hashed pasword to your database you need to do a little bit of additional work when authenticating the user. Luckily MTA offers a passwordVerify() function, which is the counterpart of the previously discussed passwordHash(). What this function does it basically hashes the password in the same way, resulting in the same output hash. https://wiki.multitheftauto.com/wiki/passwordVerify In order to get the account the user is trying to log in to you have to do a query for an account which has the user submitted username, and of which the password matches through passwordVerify. PasswordVerify is also a relatively slow function, thus you should use a callback. function login(username, password) local player = client dbQuery(function (handle) -- callback for the query selecting the user by username local results = dbPoll(handle, -1) if (#results == 0) then triggerClientEvent(player, "loginFailed") return end passwordVerify(password, results[1].password, {}, function(matches) -- callback function for the password verify if (matches) then -- Do anything you wish with the database result to log the player in with the rest of your scripts triggerClientEvent(player, "loginSuccess") else triggerClientEvent(player, "loginFailed") end end) end, mysqlHandle, "SELECT * FROM users WHERE username = ?", username) end addEvent("passwordTutorial:login", true) addEventHandler("passwordTutorial:login", getRootElement(), login) How to add "remember me" functionality When users on your server log in, they often do not want to have to enter their username and password every time they want to log in. In order to satisfy this need you can implement a "remember me" function. What I've seen happen in the past, is people would store the user's password (encrypted) on the client. This is NOT safe, and should never be done! In order to properly use remember me functionality what you would do is upon login in, generate a random string. The longer the better. This random string is what we call an access token. You would then allow the user to log in with such an access token, preferably only once generating a new access token each time one is used. To implement this you would generate that token every time the user logs in, whilst they have "remember me" enabled. You will have to save this token in your database alongside your user. For extra security you could also store the user's serial alongside the access token, you can then validate that the access token is being used from the same device. https://wiki.multitheftauto.com/wiki/Filepath function login(username, password) -- This code should be put in the callback to the dbQuery function, but to keep the example clean that's not shown here if (rememberMe) then local token = generateRandomToken() dbExec(function() triggerClientEvent(player, "loginSuccess", token) end,mysqlHandle, "INSERT INTO access_tokens (user_id, token) VALUES (?, ?)", results[1].id, token) end end function rememberMeLogin(username, accessToken) -- this function handles a user's login attempt dbQuery(function(handle) local result = dbPoll(handle, -1) if (#result == 0) then triggerClientEvent(player, "loginFailed") else -- Do anything you wish with the database result to log the player in with the rest of your scripts triggerClientEvent(player, "loginSuccess") end end,mysqlHandle, "SELECT users.* FROM access_tokens JOIN users ON users.id = access_tokens.user_id WHERE users.username = ?", username) end addEvent("passwordTutorial:loginRememberMe", true) addEventHandler("passwordTutorial:loginRememberMe", getRootElement(), login) How to offer password recovery Offering password recovery requires a little bit more than just your MTA server. Generally password recovery is done with emails. So you would need access to an email server / service which you can use to send an email from an HTTP request. (Like you can do with fetchRemote()). When a user requests a password reset, have them enter the email you registered with. You then fetch a user from the database with this email address. You would then store a password recovery token for this user. This token, just like the remember me token, is a random string. Ideally, you would send the user a link with a password reset form that goes to a webpage where the user can reset their password. You could do this with an external service, like a webserver. Or you could use MTA's Resource web access for it, but if you do make sure you handle permissions properly for anything else that uses this. However another option would be to have the user copy paste the generated token from the email into you server's login window. Which of the two solutions you pick is up to you, my personal preference goes to the one with the link in the email. But in either case the server side logic is the same. When the user attempts to perform password recovery, verify that the token they give you belongs to a user, and then change the password to the newly requested password. Make sure you hash this password the same way you do in your login. function requestPasswordRecovery(email) dbQuery(function (handle)) local result = dbPoll(handle, -1) if (#result == 0) then triggerClientEvent(player, "passwordTutorial:passwordRecoveryRequestFailed") else local token = generateRandomToken() dbExec(mysqlHandle, "UPDATE user_data SET recovery_token = ?", token) -- mail the token to the user, mail implementation depends on the mail server/service you use triggerClientEvent(player, "passwordTutorial:passwordRecoveryRequestSuccess") end end, mysqlHandle, "SELECT * FROM users WHERE email = ?", email) end function recoverPassword(recoveryToken, password) dbQuery(function (handle) local result = dbPoll(handle, -1) if (#result == 0) then -- this is only valid if you have the user request password recovery from ingame triggerClientEvent(player, "passwordTutorial:passwordRecoveryFailed") else passwordHash(password, "bcrypt", {}, function(hashedPassword) -- callback function for hashing the password local handle = dbExec(function(handle) -- callback function for storing the new password in the database if (handle) then -- this is only valid if you have the user request password recovery from ingame triggerClientEvent(player, "passwordTutorial:passwordRecoverySuccess") -- inform the user that registration was successful else -- this is only valid if you have the user request password recovery from ingame triggerClientEvent(player, "passwordTutorial:passwordRecoveryFailed") end end,mysqlHandle, "UPDATE user_data SET password = ? WHERE recovery_token = ?", username, recoveryToken) end) end end, "SELECT * FROM users WHERE recovery_token = ?", recoveryToken) end Besides changing the password, it's important you also delete any access tokens that user might have if you're using remember me functionality. It is also good practice to make recovery tokens expiry after a certain amount of times, and not allow a recovery token to be created whilst one is already in prgoress. This prevents a user from sending a large number of emails from your service. How to migrate from an older hashing algorithm, to a newer one Maybe after reading this topic you realise that your password security is not what it should be. So you want to change your old password hashing / validation logic to the ones explained in this topic. And due to the nature that hashes can not be "unhashed", you can't simply migrate your passwords over. So in order to migrate the passwords what you have to do is when a user logs in, first validate their password with the old hashing algorithm. If this matches, then hash (and salt) it with your new hashing algorithm and save it in your database. Make sure to delete the old password otherwise your password security is not any better than before. Using a password policy Passwords policies are important to prevent your users from picking a password that is too easily cracked / brute forced. Many password policies come in the form of "Must have at least one capital letter, one digit and one number". But that discards that fact that the best way to make your password more difficult to crack, is making your password longer. So in the code snippet below is a function that measures the 'search space' of a password. The search space of a password is the amount of possible passwords there are with a certain combination of characters. In order to use this, you would have to set a minimum password search space when a user registers for an account. This minimum is up for you to set, but be reasonable, you shouldn't expect a user's password to be impossible to remember / create. I recomend playing with the function a bit to see what values you get out of it, and pick something you believe is sensible. function getPasswordSearchSpace(password) local lowerCase = password:find("%l") and 26 or 0 local upperCase = password:find("%u") and 26 or 0 local digits = password:find("%d") and 10 or 0 local symbols = password:find("%W") and 32 or 0 local length = password:len() return (lowerCase + upperCase + digits + symbols) ^ length end -- The below function calls are to indicate the difference in search space for a set of passwords print(getPasswordSearchSpace("a")) print(getPasswordSearchSpace("abc")) print(getPasswordSearchSpace("Abc")) print(getPasswordSearchSpace("Ab!")) print(getPasswordSearchSpace("Ab!0")) print(getPasswordSearchSpace("Mu#9A0h.")) print(getPasswordSearchSpace("This is a demonstration of how easy an incredibly strong password is to remember")) How to handle database leaks If you have reason to believe that your database has been leaked or otherwise compromised, it is important that your first course of action is removing any access tokens stored in your database. Once you have done that you have to inform your users. Whilst when properly hashed and salted it's extremely difficult / time consuming to find out a user's password it is still a possibilty. So you should inform your users of the breach, tell them that their passwords were properly hashed, and they do not need to fear for their passwords immediately. However you should suggest to your users that they change their password either way, just in case. What even is hashing and salting? Hashing has been brought up several times in this tutorial, whilst you do not need to know what it is / does, you might be interested in knowing regardless. I won't be going too far in depth as I simply do not have the knowledge, but the basic idea of hashing is this: When you hash anything, you turn it into a string of characters (or other value) that has no relation to the original input, other than when you hash the original input again, it will always generate the same hash. For example, when you hash the stirng 'banana' using the sha512 hashing algorithm, it will always yield the output: "F8E3183D38E6C51889582CB260AB825252F395B4AC8FB0E6B13E9A71F7C10A80D5301E4A949F2783CB0C20205F1D850F87045F4420AD2271C8FD5F0CD8944BE3" Now hashing can not be reverted, you can not "unhash" a hash, so in order to verify someone's password you hash it again, and see if the two hashes are the exact same. Now this is great, passwords are safely stored. However there is still more to do, salting. Salting is adding some random data to your password prior to hashing it. This prevents when two users (on the same service, or on others) have the same password, that their hashes are also the same. Meaning if one password is compromised, the other password is not. It is important that a salt is random for every user in your application, not one salt for your entire application. Now you might think we didn't do any salting in the code / tutorial above. This is not true, we just didn't do it ourselves. MTA's passwordHash function actually hashes the passwords and salts it, this salt is then stored in the output hash it self, just before the actual password hash. In the case of bcrypt it actually stores a little bit more info in the resulting hash, but you need not worry about that.
    1 point
  35. Thank you for answer, i have 24gb memory ram and have this problem, What do you think we should do to solve this problem? Because it is really annoying
    1 point
  36. Hello, All global bans have been removed, everyone is unbanned * Legend: "global ban" = Manual ban for bad activity or AntiCheat "Banned by MTA" MTA wishes everyone a happy new year. To show our good intentions and willingness to forgive those in which we previously lost faith, everyone that received a global ban in the past 15 years has been given a final chance to be a normal player, and redeem themselves. This is not a joke, we removed all bans (except for a handful of the worst cases, up to 20 users), and will only happen once in MTA's lifetime. Everyone that used paid hacks, or was a cheat developer, can play again. We are extra confident in this because we recently patched (detected, blocked) the major paid hacks on MTA, unbanning paid hack users in this scenario was our traditional approach which we however shifted away from. Everyone that did basic malicious activity against MTA, its users or a server, can play again. Of course, except for the absolute worst of cases, which is unlikely to include you. So for a bit of context, besides giving everyone a chance to redeem themselves (if they had previously insisted they realized their mistakes and wouldn't repeat.. but got rejected as we have different experiences with such users), we realized that the system used was prone to false positive bans that accumulate during periods of lowered AC Team manpower. Even when manpower went up, it was a huge leap to catch up with the growing so-called technical debt to fix up on false positives, leading to, as I must admit, a bunch of unfairly banned people with appeals that wouldn't be attended to. This is the compassionate move. - Those that know what they did to get banned, should know that this is their final chance, and that should you draw AC team's attention again you are done for. You are certainly one of those that fully realize the strength of our anti-ban evade measures to which point you can't do anything to evade bans, as when you get such a manual ban not even spoofers will work to evade.. so, don't make the same mistake again, don't put yourself in the same situation of being defeated, AC team will really come after you if you repeat. You can consider the ban amnesty as a peace offering, as long you are willing to be a normal user from now on. Not a toxic cheat developer, hacker, DDoS attacker or so on, whatever behavior got you banned. Redeem yourself, learn from your past mistakes, and make a fresh start. - Those that know they are innocent and were caught in the crossfire of their appeals not being handled in a timely manner or at all, we extend our deepest apologies to you, and reassure you that 99% of all measures (intended for other banned users) which could lead to such a false positive ban are now removed along with the Ban Amnesty. You are cleared and very much welcome back to play MTA: San Andreas. I am well aware how many dreams of past players were ruined by unfortunate mistakes. Disclaimer: Anyone that notices they are still banned after today, is one of the up to 20 people in the list of exceptions, and shouldn't bother to appeal. It has been double checked that only intended remaining bans still exist, there is no such thing as a 'mistake' to be reconsidered. Community bans (Discord/Forums) are also not included other than on a case by case basis such as through the use of our Discord Ban Appeals board, unless otherwise stated in the near future. At last, if you have any friends that are permanently banned, please inform them about the good news, but caution them to behave this time, because like I wrote at the top, this is an extremely rare event that won't occur in MTA's future, as it has never done so in the past 15 years.
    1 point
  37. Model encrypter BETA Protect your models easily. https://mtaclub.eu/pcrypt When it's done, don't forget to read HOW_TO_USE.txt! Please let me know if you find a bug!
    1 point
  38. This crash is caused by running out of video memory. https://wiki.multitheftauto.com/wiki/Famous_crash_offsets_and_their_meaning, Ctrl+F and search for 0x003C91CC. Most likely some script creates textures (fonts, etc), but does not remove them when they are not needed. Or it does not check that some element already exists. How can this be monitored: There is a showmemstat command that displays the free video memory for MTA and how much is used by fonts, textures, RTs (+ Screen Sources); There is a function dxGetStatus, which allows you to monitor this with a script. How to know which resource is using a texture/font/etc: 2 options: the performancebrowser resource that allows you to monitor the performance in the browser and the ipb resource that allows you to do it directly in the game. Then you need to select the Lua memory category and specify Client as the target*. By columns DxFonts (= dxCreateFont), GuiFonts (= guiCreateFont), Textures (= dxCreateTexture), RenderTargets (= dxCreateRenderTarget) and ScreenSources (= dxCreateScreenSource) you can understand whether there is a memory leak or not. *You can select any client only in the browser.
    1 point
  39. There is another solution that doesn't require render targets, and it's closer to dxDrawImageSection in the way it works: dxDrawMaterialPrimitive. dxDrawImageSection only operates on rectangular sections. dxDrawMaterialPrimitive allows you to draw triangles, specifying the texture coordinates for each vertex, and since triangles can be put together to form other shapes, you can do what dxDrawImageSection does but not limited to rectangular sections. There isn't an example in the wiki page on how to use it, but dxDrawPrimitive has one, and dxDrawMaterialPrimitive works in a similar way, only it takes image as second argument, and each vertex has 5 parameters instead of 3 (2 extra parameters are for image coordinates). I came up with some function, for drawing a radially cut out section of an image. I only tested it as much as I could test it in standalone Lua interpreter so I don't know if it works in MTA, but if it does, someone may put it on useful functions page in wiki ? It uses trianglefan primitive type, puts the first vertex in the center and other vertices around it. local white = tocolor(255, 255, 255, 255) local degToRad = math.pi/180 local function makeVertexAtAngle(centerX, centerY, halfWidth, halfHeight, angle, color) local angleRad = angle*degToRad local xAdd, yAdd = math.sin(angleRad), -math.cos(angleRad) local maxAdd = math.max(math.abs(xAdd), math.abs(yAdd)) xAdd, yAdd = xAdd/maxAdd, yAdd/maxAdd return { centerX+xAdd*halfWidth, centerY+yAdd*halfHeight, color, 0.5+xAdd*0.5, 0.5+yAdd*0.5 } end function dxDrawRadialImageSection(posX, posY, width, height, image, startAngle, stopAngle, color, postGUI) if color == nil then color = white end if postGUI == nil then postGUI = false end local halfWidth, halfHeight = width*0.5, height*0.5 local centerX, centerY = posX+halfWidth, posY+halfHeight local roundedStartAngle = math.floor((startAngle-45)/90+1)*90+45 local roundedStopAngle = math.ceil((stopAngle-45)/90-1)*90+45 local vertices = {{centerX, centerY, color, 0.5, 0.5}} table.insert(vertices, makeVertexAtAngle(centerX, centerY, halfWidth, halfHeight, startAngle, color)) for angle = roundedStartAngle, roundedStopAngle, 90 do table.insert(vertices, makeVertexAtAngle(centerX, centerY, halfWidth, halfHeight, angle, color)) end table.insert(vertices, makeVertexAtAngle(centerX, centerY, halfWidth, halfHeight, stopAngle, color)) dxDrawMaterialPrimitive("trianglefan", image, postGUI, unpack(vertices)) end This example should display a looping 5-second animation of image going from 0 to 360 (if I didn't screw anything up): function drawAnimatedRadialSection() local angle = (getTickCount() % 5000) / 5000 * 360 dxDrawRadialImageSection(100, 100, 200, 200, "your_image.png", 0, angle) end addEventHandler("onClientRender", root, drawAnimatedRadialSection)
    1 point
  40. Hello developers and all members of the MTA Community. im looking to buy a fresh, optimazed npc hlc traffic system for my roleplay community. If there is anyone who has a intrest or a resource that he could sell to me - let me know. Regards
    1 point
  41. Cześć, mam problem z edytorem. Nic już nie pomaga, nawet reinstalacja gry. Nie wiem kompletnie co z tym robić. Może ktoś ma jakiś pomysł? = Server name : Map Editor Server = Server IP address: auto = Server port : 22010 = = Log file : ..rver/mods/deathmatch/logs/editor_server.log = Maximum players : 1 = HTTP port : 22011 = Voice Chat : Disabled = Bandwidth saving : None ================================================================== [13] Resource 'acpanel' requests some acl rights. Use the command 'aclrequest list acpanel' [13] Resource 'guieditor' requests some acl rights. Use the command 'aclrequest list guieditor' [13] ERROR: Couldn't find map StadiumMapping.map for resource maps [13] Loading of resource 'maps' failed [13] ERROR: Problem with resource: assault; Failed to link to scoreboard [13] ERROR: Not processing resource 'briefcase' as it has duplicates on different paths: Path #1: "resources\briefcase" Path #2: "resources\[gamemodes]\[briefcaserace]\briefcase" [13] ERROR: Problem with resource: briefcaserace; Failed to link to scoreboard [13] ERROR: Problem with resource: cdm; Failed to link to scoreboard [13] ERROR: Problem with resource: ctf; Failed to link to scoreboard [13] ERROR: Problem with resource: ctf-bombsite; Failed to link to scoreboard [13] ERROR: Problem with resource: ctf-canals; Failed to link to scoreboard [13] ERROR: Problem with resource: ctf-hydrastrike; [13] ERROR: Problem with resource: ctf-tbd; Failed to link to scoreboard [13] ERROR: Problem with resource: ctv; Failed to link to scoreboard [13] ERROR: Problem with resource: deathmatch; Failed to link to scoreboard [13] ERROR: Problem with resource: editor; [13] ERROR: Problem with resource: editor_main; Failed to link to freecam [13] ERROR: Problem with resource: fallout; Failed to link to freecam [13] ERROR: Not processing resource 'freecam' as it has duplicates on different paths: Path #1: "resources\freecam" Path #2: "resources\[editor]\freecam" [13] ERROR: Problem with resource: hay; Failed to link to scoreboard [13] ERROR: Not processing resource 'ipb' as it has duplicates on different paths: Path #1: "resources\ipb" Path #2: "resources\[admin]\ipb" [13] ERROR: Problem with resource: maps; Couldn't find map StadiumMapping.map for resource maps [13] ERROR: Not processing resource 'parachute' as it has duplicates on different paths: Path #1: "resources\parachute" Path #2: "resources\[gameplay]\parachute" [13] ERROR: Problem with resource: race; Failed to link to scoreboard [13] ERROR: Not processing resource 'scoreboard' as it has duplicates on different paths: Path #1: "resources\scoreboard" Path #2: "resources\[gameplay]\scoreboard" [13] ERROR: Problem with resource: scores; Failed to link to scoreboard [13] ERROR: Problem with resource: stealth; Failed to link to scoreboard [13] ERROR: Problem with resource: tdm; Failed to link to scoreboard [13] ERROR: Problem with resource: tdma; Failed to link to scoreboard [13] Resources: 336 loaded, 20 failed [13] Starting resources... [13] Server minclientversion is now 1.3.5 [13] ERROR: Couldn't find resource parachute. Check it exists. [13] Server started and is ready to accept connections! [13] To stop the server, type 'shutdown' or press Ctrl-C [13] Type 'help' for a list of commands. [13] CONNECT: Karol998 connected (IP: bla bla bla Serial: nie pokoze Version: 1.5.6-9.16588.5) * Connected! [MTA:SA Server 1.5.6 [Windows]] [13] JOIN: Karol998 joined the game (IP: 127.0.0.1) [13] WARNING: [editor]\edf\scriptreader.Lua:88: Bad argument @ 'getElementData' [Expected element at argument 1, got boolean] Server FPS limit: 50 Server AC info: [Allowed client files: None] [Disabled AC: None] [Enabled SD: None] GUI load time measures (ms): createWorldDetector() : 0
    1 point
  42. This implication is incorrect, as the current situations is as follows: - Towtruck can tow empty vehicles (as far I know, there's no MTA version in which vehicles occupied by players could be towed.. probably a technical limitation) - Towtruck can tow an infinite amount of other towtrucks. Contrary to what you think, these additional towtrucks can be chained together in the way you described. If i misunderstand, you could upload a video with reproduction of the latter, to clarify. *Note: i wrote the tone of this post with TS's recent activity in mind
    1 point
  43. It won't look as cool as this decision.
    1 point
  44. I think crash has disappear i was playing through 2hours and no crash Thank you so much for your help.I thnik it is end, unless you want something else :v . @Dutchman101
    1 point
  45. It's a system issue, (if you're interested, take a look at https://pastebin.com/wk5D5rBT -D3D9.dll @ 0x0010EA8F, as you can see no MTA calls are involved in the crash) what I advise is to update your GPU driver, and repair a potentially corrupt D3D9.dll: - Open commandprompt (cmd) as Administrator and type: dism /online /cleanup-image /restorehealth After it finishes, reboot your PC and open commandprompt once again. This type, type: sfc /scannow and wait for it to complete. When that is done, proceed to updating your drivers. To assist you with that, do the following: Please download and run MTADiag (rightclick > Run as Administrator) and follow the instructions. Press 'y' when asked to allow making changes, and 'n' when otherwise asked to. Post any Pastebin URL MTADiag gives you in this topic. Also when you look at this, https://www.google.com/search?q=0x0010EA8F even while it's a rare problem, you can see the underlying system issue is also capable of crashing other games. Edit - Btw, alternative for the Pastebin link at the beginning, about the specifics of this crash issue so others on the web that are affected can find it in the future.. in below spoiler. .. As per the last post in this topic, it turned out to be Windows OS / system file / d3d9.dll (either in system32 or the affected software's installation folder) corruption or non-original file problem
    1 point
  46. How am I supposed to know the bullet speed,location, etc. Also how can I apply the fx as a shader to the bullet(first time i mess with shaders)
    1 point
  47. You most likely crashed as a result of memory problems. This can happen when you are using a mid-tier PC to play on a server loaded with heavy mods, unoptimized scripts, or just as often a combination of both. DISCLAIMER: some players would argue that their PC is good enough and has plenty of RAM memory, like 6GB or more. So much that they don't expect to run out of memory. So here's the story - GTA SA is an old game from 2005, and you can run MTA with hardware from that era on most decent servers with ease. But servers that are not decent, but "bad" in the sense described earlier, are able to turn this old game into a more demanding one than modern titles. One that even hits limits of this 2005 game, which wasn't designed for what is being done. We mean that any usage on gta_sa.exe above 3.2GB, even if you have much more RAM memory available, will not be stable. SOLUTIONS: Find another server to play on Upgrade your PC's hardware (most important is the amount of RAM memory) and perform some OS mainentance, limit the amount of processes using up memory. If you're on a 32-bit OS, install a 64-bit version. For more information, please read https://forum.mtasa.com/topic/78081-32-bit-windows-crashing/ If being able to play on a certain server is really important to you, and you decide to upgrade, then please note that unless you get a gaming PC, depending on the severity things are "bad" on said server, it might only extend the duration you can play at once without crashing. If things are bad enough, you can crash within an hour from connecting while using the baddest gaming PC available. Example: a lot of russian total conversion servers. If you cannot upgrade your PC or improve your situation by one of the above steps, then unfortunately there's no option other than mind the (type of) servers you're playing on.
    0 points
  48. I can't help you because I don't know this gamemode or the "D modu" or "turf" resource
    0 points
  49. LuaRocks is the package manager for Lua modules. Small tricks allow you to use it on MTA server. Installing Linux x64: Windows x86: Usage example: Installing packages is done by typing commands such as: Linux: luarocks install lua-cjson Windows: luarocks.exe install lua-cjson Now you are ready to load this package from MTA. Do this in your Lua script file: -- You should run this function once in your resource initLuaPackage() -- Load library local json = require "cjson" -- Use it print( json.encode({ key = "example" }) ) It's done. Tell me in PM, if you have any remarks and additional information for this tutorial. Thx
    0 points
×
×
  • Create New...