Jump to content

DNL291

Retired Staff
  • Posts

    3,875
  • Joined

  • Days Won

    67

Everything posted by DNL291

  1. Tem esse resource aqui: https://community.multitheftauto.com/index.php?p=resources&s=details&id=488 Mas acho que não funciona quando warpa num veículo, nesse caso você precisaria usar um evento onClientRender e detectar quando o jogador acabar de entrar num veículo. Ou modificar o resource admin, adicionar um evento novo e chamar ele quando um veículo for dado ao jogador.
  2. "onClientMarkerHit" guiSetVisible
  3. Mod editar; clique abaixo para abrir o spoiler (desculpe, explicação em inglês sobre o problema exato aqui) Certifique-se de tudo esteja de acordo com estas etapas: Verifique se o seu GTA:SA está com modificações instaladas, se este for o caso, reinstale-o Verifique também o seu MTA: pode ser uma mudança feita nele por meio de customização, ou algum erro em um arquivo causando isso; Você pode tentar reinstalar o MTA pra tentar corrigir Pode ser algum programa como antivírus ou qualquer outro software interferindo a funcionalidade do MTA. O Anti-Cheat do MTA pode estar detectando alguma coisa falsa como vírus Pode ser que o seu PC esteja infectado com um vírus; Veja:
  4. What are you trying to do exactly? By looking at the code, it looks like you're making the ped go backwards at the same time he should go to the right.
  5. You can try using setControlState. If the player is away from the vehicle, force him to follow until he's close to police car.
  6. No, I mean, make a table and store each weapon and the current ammo. After that, use toJSON to convert that table to string so you can store it using setAccountData. Like this: local weapons = {} for i=1,12 do weapons[i] = { getPedWeapon( player, i ), getPedTotalAmmo( player, i ) } end setAccountData( acc, "test.weps", toJSON( weapons ) ) For the money, just use tostring.
  7. The data stored with setAccountData must be a string. Use toJSON to store weapons and fromJSON when you get the value.
  8. "onPlayerDamage" killPed Só usar o parâmetro do evento e verificar se é a Sniper.
  9. Os comentários ajudam a entender o código, mas neste caso, acho que seria melhor você deixar toda explicação fora do código - até pra se adequar ao propósito que é um tutorial. Fora que os comentários dentro do código Lua perdem o destaque e não é o ideal pra alguém enxergar. A propósito, vou falar o método que eu uso, que é mais simples, e ajusta o tamanho sem problemas: -- res: 1280 x 800 local sx,sy = guiGetScreenSize() local tamanho_da_fonte = 2.5 local X, Y = 450, 550 local dxWidth = (sx/1280) * (X + 150) local dxHeight = (sy/800) * (Y + 40) local dxScale = ((sx/1280) / (sy/800)) * tamanho_da_fonte dxDrawText( "Teste", (sx/1280)*X, (sy/800)*Y, dxWidth, dxHeight, tocolor(255,255,255), dxScale, "default-bold", "left", "center" ) Eu defini essas variáveis pra deixar mais fácil de entender, mas recomendo poucas variáveis pra uma melhor performance do script sempre. Pra facilitar mais, você pode definir uma variável pra sx/1280 e sy/800 embaixo da função guiGetScreenSize.
  10. Vai precisar editar o scoreboard.
  11. DNL291

    /login

    You can use the event "onPlayerCommand" with the command "login", and check if the player is logged in or not, so you assume that he couldn't log into their account. Not sure if that will work, but you can try it yourself.
  12. I did a code using the createElement function. To be honest, I don't know if it works 100% but by the small test I did it seems so. local serverTeams = createElement( "server:customTeams" ) function CreateTeam( name, c ) outputChatBox("@CreateTeam") return setElementData( serverTeams, tostring(name), { color = c, ID = (#getAllElementData(serverTeams) or 0) + 1, members = {}, friendlyFire = false } ) end function SetPlayerTeam( player, teamName ) if player and isElement(player) and teamName then if getElementData( serverTeams, tostring(teamName) ) then outputChatBox("@SetPlayerTeam ") if GetPlayerTeam( player ) and GetPlayerTeam( player ) ~= tostring(teamName) then updateTeamMembers( GetPlayerTeam( player ), player ) end updateTeamMembers( tostring(teamName), player, true ) return setElementData( serverTeams, tostring(name), { color = c, ID = id, members = {}, friendlyFire = ff } ) end end end function GetPlayerTeam( player ) if player and isElement(player) then for teamName, t in pairs( getAllElementData(serverTeams) ) do for i, p in pairs(t.members) do if player == p then return teamName end end end end return false end function updateTeamMembers( teamName, player, add ) if teamName and getElementData( serverTeams, tostring(teamName) ) then local team = getElementData( serverTeams, tostring(teamName) ) if type(team) ~= "table" then return false end; if add then table.insert( team.members, player ) outputChatBox("table index 1: "..tostring(team.members[1])) else local membersTable = {} for i, p in pairs( team.members ) do outputChatBox("i: "..tostring(i).." p: "..tostring(getPlayerName(p))) if p ~= player then table.insert( membersTable, p ) end end end return setElementData( serverTeams, tostring(teamName), { color = team.color, ID = team.ID, members = add and team.members or membersTable, friendlyFire = team.friendlyFire } ) end return false end addEventHandler( "onPlayerQuit", root, function() if GetPlayerTeam( source ) then updateTeamMembers( GetPlayerTeam( source ), source ) end end ) addCommandHandler("setmyteam", function(p, cmd) SetPlayerTeam( p, "testTeam1" ) end) addCommandHandler("getmyteam", function(p, cmd) outputChatBox( tostring( GetPlayerTeam(p) ) ) end) addEventHandler( "onResourceStart", resourceRoot, function() CreateTeam( "testTeam1", {30, 240, 30} ) end ) Basically it works as the MTA's team system and It isn't finished of course.
  13. Então pelo que entendi, você precisa adicionar o jogador que matou o outro numa tabela (dentro evento "onPlayerWasted"), esse valor será só pra conferir se o jogador que atingiu o pickup é o killer. O resto é simples: usa setElementData e passa essas "moedas vip" usando getElementData pra obter os dados do jogador que foi morto e depois remove o valor do jogador morto.
  14. Verifica se o 'som' já existe quando usar playSound. Você também pode marcar qual o tipo da música tocando atualmente, isso vai te ajudar pra não ocorrer bugs como esse. Fora isso, remova o loop na tabela.
  15. Se você quer criar em 3 locais em vez de todos, você precisa de um loop; o math.random que você usou está errado porque estava o mesmo que isto: math.random( 3, 4 ). Tente isto: SpwanLoot = { {252.67047,1802.4464,7.4140625}, {219.33887,1826.9991,6.4140625}, {261.08423,1853.5132,8.7578125}, {280.4285,1838.0157,17.648058}, } function removeLootsMilitarys (blip,Military,LootMility) if isElement(blip) then destroyElement(blip) end if isElement(Military) then destroyElement(Military) end if isElement(LootMility) then destroyElement(LootMility) end end function LootMilitarys() for i=1, 3 do local ri = math.random( #SpwanLoot ) local x,y,z = SpwanLoot[ri][1], SpwanLoot[ri][2], SpwanLoot[ri][3] local Military = createObject(964,x,y,z, 0, 0, 0) outputChatBox("CRIADO") local blip = createBlip ( x,y,z, 23 ) local LootMility = createColSphere(x,y,z,3) attachElements(LootMility, Military, 0, 0, 0) setElementData(Military,"parent",LootMility) setElementData(LootMility,"parent",Military) setElementData(LootMility,"Loot Militar",true) setElementData(LootMility,"MAX_Slots",0) setElementData(LootMility, "MAX_Slots", 0) setTimer(removeLootsMilitarys,120000,1,blip,Military,LootMility) end end setTimer(LootMilitarys,120000,0) Me avise se essas posições aleatórias tiver que ser uma diferente da outra, aí nesse caso vai precisar fazer uma mudança pro math.random.
  16. Se o jogador realmente insistir em um nick curto, em primeiro lugar eu posso tratar ele como alguém que entra no servidor pra bagunçar apenas e não leva a sério o jogo-limpo. Então, talvez fazer um sistema mais específico nesse caso. A propósito, eu nunca tive um servidor de MTA com fluxo alto de jogadores, creio que quem têm deve conhecer bem como é lidar com jogadores problemáticos. Em alguns servidores RPs é obrigatório o uso de nicks que estão de acordo com o servidor, então a ideia da marca d'água não vai se aplicar. Por isso mesmo eu pensei nessa outra forma: O jogador entra, verifica seu nick, caso não seja aceito no servidor, mostre-o um painel e ele só joga quando trocar para outro nick válido. No caso de alguns membros da Equipe do servidor agir dessa forma pra algum tipo de investigação, vai do consenso da Equipe não usar um sistema desses e adotar outro tipo de ideia mais apropriada.
  17. Você podia ter explicado melhor sobre o que você quer fazer e qual valor vai ser salvo no element-data. Seria mais ou menos isto? function createDeathPickup ( totalammo, killer, killerweapon, bodypart ) local x, y, z = getElementPosition ( source ) local aPickup = createPickup ( x, y, z, 3, 1279 ) setElementData( aPickup, "pickup-playerValue", (getElementData(source,"valorData") or "0"), false ) end addEventHandler ( "onPlayerWasted", getRootElement(), createDeathPickup ) addEventHandler( "onPickupUse", resourceRoot, function ( player ) if getElementData( source, "pickup-playerValue" ) then setElementData( player, "valorData", getElementData( source, "pickup-playerValue" ), false ) end end )
  18. É eu sei. Nunca mexi em configurações de resource muito, então não tenho ideia do que pode ser, mas te recomendo testar de várias formas pra tentar descobrir porque acontece isso. Até porque não ocorre nos resources do MTA que vem com configurações, então pode ser alguma falha do seu resource.
  19. Eu faria um painel pequeno, apenas para ele trocar o nick e usar um válido. Também poderia usar um sistema que gera um nick aleatório assim como o do MTA quando instala - seria perca de tempo com coisa pequena, na minha opinião, o primeiro método dá pra criar rápido e sem dificuldade.
  20. Já tentou removendo * da frente do nome ou usando apenas os atributos name e value? Se o erro continuar, pode ser outra coisa causando isso, como a função set.
  21. Tente: function nickChangeHandler (oldNick, newNick) local nick = getPlayerName(source) if eventName == "onPlayerJoin" then if string.len( nick:gsub("#%x%x%x%x%x%x","") ) <= 4 then outputChatBox("[#ff0000"..nick.."#ffffff] Seu Nickname é muito curto.",source,255,255,255,true) kickPlayer(source,"Nickname muito curto!") end return end if string.len( newNick:gsub("#%x%x%x%x%x%x","") ) <= 4 then outputChatBox("[#ff0000"..oldNick.."#ffffff] Seu nick deve ter mais que 4 caracteres.",source,255,255,255,true) cancelEvent( true, "nick curto" ) end end addEventHandler("onPlayerJoin", getRootElement(), nickChangeHandler) addEventHandler("onPlayerChangeNick", getRootElement(), nickChangeHandler) Você disse que é menos de 4 caracteres, mas o código está verificando se o nick tem 4 ou menos - se o mínimo for realmente 3 pra baixo, troque <= para <. Sobre a expulsão do jogador, eu não te aconselho fazer isso. Se você quer que entre mais jogadores, porque você expulsa do servidor o jogador só porque ele tem poucas letras no nick? Claro, a ideia é ele trocar o nick manualmente e reentrar, mas nem todos certamente farão. Só mais um aviso, use esta ferramenta e selecione a linguagem Lua quando postar algum código Lua:
  22. Use: guiEditSetMaxLength Ou dependendo do seu caso, tente isto: addEventHandler("onClientGUIChanged", VGUI.edit[1],function() local t = guiGetText(source) if string.len(t) > 10 then guiSetText( source, t:sub( 1, #t-1 ) ) end end) Lembre-se de postar na seção Portuguesa da próxima vez: https://forum.multitheftauto.com/forum/127-programação-em-lua/ Caso contrário, ninguém vai te entender e você não vai receber nenhuma ajuda.
  23. About line 43, check if 'veh' is a vehicle element: function rotate_object() local veh = getPedOccupiedVehicle ( localPlayer ) if veh then local _,_,rz = getVehicleComponentRotation(veh, "misc_a") local rx,_,_ = getVehicleComponentRotation(veh, "misc_b") if getElementData(localPlayer,"obj") then triggerServerEvent("rotateWeapon", localPlayer, veh,getElementData(localPlayer,"obj"),rx,rz) end end end
  24. Não entendi o porque do setElementData se está no client. Mas se o código está funcionando sem erros então sem problemas. Lembre-se se desativar a sincronização com o lado server se não haver necessidade. Edit: Você também pode enviar o jogador local usando triggerServerEvent.
  25. Next time post on the Portuguese section: https://forum.multitheftauto.com/forum/127-programação-em-lua/ Btw, use setElementModel instead of setPlayerSkin as it's a deprecated function.
×
×
  • Create New...