-
Posts
3,875 -
Joined
-
Days Won
67
Everything posted by DNL291
-
Change the resource setting autoassign_to_teams to false.
-
O erro provavelmente tá sendo na variável 'key', por conta de um problema com a tabela 'servicop' (tabela sem o devido valor) ou na condição if. Sem trecho de código maior realmente não tem como ajudar @murilo2929
-
local thePickup addEventHandler("onResourceStart", resourceRoot, function() -- chama a função quando iniciar o resource thePickup = createPickup ( -32.76953125, -138.53125, 1003.546875, 3, 1275, 1000 ) --setPedSkin ( thePlayer, 50 ) -- função obsoleta; deve ser setElementModel --setPlayerTeam ( thePlayer, teamzombie ) 'teamzombie' deve estar definido; como: getTeamFromName("teamName") setElementDimension ( thePickup, 72 ) -- use isto só se for setar uma dimensão, se for na 0 não precisa setElementInterior ( thePickup, 16 ) --setElementData ( thePlayer, "zombie", true ) end)
-
You could've created another topic since this isn't related to the original subject. Try this: function kikarplayer ( theClient, commandName, kickedName, ... ) if isPlayerStaff(theClient) then if not kickedName then return outputChatBox ("#bf2e2e* Erro: /kick [nick] [motivo]",theClient,255,255,255,true) end local reason = table.concat({...}," ") local kickerName = getPlayerName(theClient):gsub("#%x%x%x%x%x%x","") local kickedPlayer = getPlayerFromName(kickedName) if not isElement(kickedPlayer) then return outputChatBox ("#bf2e2e* Erro: Player Invalido!",theClient,255,255,255,true) end outputChatBox ( "#c9c9c9[#1a6cefFW-INFORMA#c9c9c9]O #1a6cef" .. kickerName .. " #c9c9c9Kickou o Player #1a6cef" ..getPlayerName(kickedPlayer):gsub("#%x%x%x%x%x%x","").. "#c9c9c9 | Motivo #1a6cef" ..reason.. "#c9c9c9", getRootElement(), 255, 0, 0, true ) banPlayer ( kickedPlayer, theClient, reason ) else outputChatBox ("#bf2e2e* Erro: Você Não tem Permissão!",theClient,255,255,255,true) end end addCommandHandler ( "kick", kikarplayer ) -- https://wiki.multitheftauto.com/wiki/IsPlayerStaff local staffACLs = { aclGetGroup("Admin"), aclGetGroup("Moderator"), aclGetGroup("SuperModerator"), } function isPlayerStaff(p) local acc = getPlayerAccount(p) if not acc then return false end if isGuestAccount(acc) then return false end local object = getAccountName(acc) for _,group in ipairs(staffACLs) do if isObjectInACLGroup("user."..object,group) then return true end end return false end Also, the command/function is supposed to kick the player but it's using 'banPlayer', so change it to kickPlayer.
-
Hm, this code looks fine from what I see. Try copying the code from here: https://pastebin.com/c9jyKy5y
-
Type /debugscript 3 and see if it shows errors with this code.
-
function getPlayer(player, cmd, id) if tonumber(id) then local mx, my, mz = getElementPosition(player) local player2 = getPlayerFromID ( tonumber(id) ) if not player2 or not isElement(player2) then return outputChatBox( "player not found", player ) end local rand = math.random(1, 5) setElementPosition(player2, mx+rand, my+rand, mz + 1) end end addCommandHandler("pux", getPlayer) Try it P.S: You need to have getPlayerFromID function in your code.
-
addCommandHandler getElementPosition setElementPosition
-
Não conheço outra alternativa que mexa na renderização à distância, imaginei que funcionaria com essa função... Mas por que você quer isso? sendo que a bala da sniper também tem um limite na distância.
-
Se o script for vazado/roubado nós não daremos suporte aqui no fórum, @gil
-
As already mentioned, MTA does not handle bans on servers, please contact the server admins instead.
-
Tenta usando esta função quando o player tiver com a mira da sniper: https://wiki.multitheftauto.com/wiki/SetFarClipDistance
-
@Lord Henry Pois é, quando o índice é definido na tabela, toJSON/fromJSON define esse índice como string. Não sabia disso, por isso imaginei que o tostring podia estar causando erro. Se criar a tabela sem index funciona (o meu teste); mas se tiver com [index] = valor, JSON vai deixar como string. Voltando ao assunto: Eu fiz o save das armas/munição e adaptei ao código do save-system, fiz nessa lógica, que evita o excesso nos loops: Também coloquei pra remover as armas no logout/onResourceStop, para não bugar. Código: function playerLogin (thePreviousAccount, theCurrentAccount) local accountData = getAccountData (theCurrentAccount, "funmodev2-money") if (accountData) then local playerMoney = getAccountData (theCurrentAccount, "funmodev2-money") local playerSkin = getAccountData (theCurrentAccount, "funmodev2-skin") local playerHealth = getAccountData (theCurrentAccount, "funmodev2-health") local playerArmor = getAccountData (theCurrentAccount, "funmodev2-armor") local playerX = getAccountData (theCurrentAccount, "funmodev2-x") local playerY = getAccountData (theCurrentAccount, "funmodev2-y") local playerZ = getAccountData (theCurrentAccount, "funmodev2-z") local playerInt = getAccountData (theCurrentAccount, "funmodev2-int") local playerDim = getAccountData (theCurrentAccount, "funmodev2-dim") local playerWanted = getAccountData (theCurrentAccount, "funmodev2-wantedlevel") local team = getAccountData (theCurrentAccount, "team") if (team) and getTeamFromName(team) then setPlayerTeam(source, getTeamFromName(team)) -- sets players team end spawnPlayer (source, playerX, playerY, playerZ +1, 0, playerSkin, playerInt, playerDim) setPlayerMoney (source, playerMoney) setTimer (setElementHealth, 500, 1, source, playerHealth) setTimer (setPedArmor, 500, 1, source, playerArmor) setTimer (setPlayerWantedLevel, 500, 1, source, playerWanted) setCameraTarget (source, source) fadeCamera(source, true, 2.0) else spawnPlayer (source, 1481.0855712891, -1771.2996826172, 18.795753479004, 0,78, 0, 0) setPlayerMoney (source, 200) setCameraTarget (source, source) fadeCamera(source, true, 2.0) end loadPlayerData( source ) end addEventHandler ("onPlayerLogin", getRootElement(), playerLogin) function onQuit() local account = getPlayerAccount (source) if (account) then local x,y,z = getElementPosition (source) setAccountData (account, "funmodev2-money", tostring (getPlayerMoney (source))) setAccountData (account, "funmodev2-skin", tostring (getElementModel (source))) setAccountData (account, "funmodev2-health", tostring (getElementHealth (source))) setAccountData (account, "funmodev2-armor", tostring (getPedArmor (source))) --setAccountData (account, "funmodev2-R", r) -- nenhum valor definido --setAccountData (account, "funmodev2-G", g) --setAccountData (account, "funmodev2-B", b) setAccountData (account, "funmodev2-x", x) setAccountData (account, "funmodev2-y", y) setAccountData (account, "funmodev2-z", z) setAccountData (account, "funmodev2-int", getElementInterior (source)) setAccountData (account, "funmodev2-dim", getElementDimension (source)) setAccountData (account, "funmodev2-wantedlevel", getPlayerWantedLevel (source)) local team = getPlayerTeam(source) -- Gets the players team if (team) then -- Checks to see if the player is a guest or not setAccountData(account, "team", getTeamName(team)) --saves team end end savePlayerData( source ) end addEventHandler ("onPlayerQuit", getRootElement(), onQuit) function onWasted(totalAmmo, killer, killerWeapon, bodypart, stealth) if not( isGuestAccount (getPlayerAccount(source)) ) then local theWeapon = getPedWeapon (source) local weaponAmmo = getPedTotalAmmo (source) fadeCamera (source, false) setTimer (spawnPlayer, 1000, 1, source, 2036.1735839844, -1413.0563964844, 16.9921875, 0, getElementModel (source), 0, 0, getPlayerTeam(source)) setTimer (setCameraTarget, 1250, 1, source, source) setTimer (fadeCamera, 2000, 1, source, true) setTimer (giveWeapon, 2000, 1, source, theWeapon, weaponAmmo, true) end end addEventHandler ("onPlayerWasted", getRootElement(), onWasted) function loadPlayerData ( player ) local acc = getPlayerAccount(player) if isGuestAccount(acc) then return end local weapons = getAccountData(acc, "funmodev2-weapons") if (weapons) then for weapon, ammo in pairs(fromJSON(weapons)) do giveWeapon(player, weapon, ammo, true) end end end addEventHandler ("onResourceStart", resourceRoot, function() for i,p in ipairs(getElementsByType("player")) do loadPlayerData(p) end end) function savePlayerData ( player, acc ) local acc = ( eventName == "onPlayerLogout" and acc or getPlayerAccount(player) ) if isGuestAccount(acc) then return end local playerWeapons = {} for slot = 0, 12 do local weapon = getPedWeapon( player, slot ) if ( weapon > 0 ) then local ammo = getPedTotalAmmo( player, slot ) if ( ammo > 0 ) then playerWeapons[ weapon ] = ammo end end end setAccountData( acc, "funmodev2-weapons", toJSON ( playerWeapons ) ) if eventName == "onResourceStop" or eventName == "onPlayerLogout" then takeAllWeapons( player ) end end addEventHandler ("onPlayerLogout", root, function ( acc ) savePlayerData(source, acc) end) addEventHandler ("onResourceStop", resourceRoot, function() for i,p in ipairs(getElementsByType("player")) do savePlayerData(p) end end)
-
Até tem como, pra isso você precisa substituir um objeto do jogo e programar para que funcione como uma nova arma. Mas adicionar novos IDs não é possível.
-
A propósito, percebi que tem um loop de todas armas dentro do loop dos slots, isso poderia ser simplificado assim: local weapons = {} for slot=0, 12 do local weapon = getPedWeapon(player, slot) local ammo = getPedTotalAmmo(player, slot) weapons[weapon] = ammo end Já que cada slot é reservado para determinadas armas, exemplo: Slot 2 > pistola, desert e pistola silenciosa. Mas com esse loop vai percorrer todos ids ignorando essa definição do jogo. Edit: Certo @carlos eduardo Não precisa, só perguntei para saber se você modificou algo em especifico para corrigir o tal conflito, mas você já disse que foi no resource do login.
-
A tabela original também funciona. Ela já recebe índices numéricos em sequencia mesmo quando não-declarado. Ou seja, fazer isso é uma redundância: local mytable = { [1] = 'red', [2] = 'blue', [3] = 'dark blue', [4] = 'green' } Pois já será interpretada dessa forma mesmo sem definir esses índices em sequencia. Aqui os resultados do teste com 'mytable' de qualquer forma: local mytable = { 'red', 'blue', 'dark blue', 'green' } print(mytable[1]) iprint(mytable) -- resultados: [21:05:31] INFO: red [21:05:31] INFO: { "red", "blue", "dark blue", "green" } EDIT: Se puder nos mostre aqui o que estava impedindo o save de funcionar, isso pode ajudar outras pessoas caso tenham esse tipo de conflito também. @carlos eduardo
-
A primeira, a tabela 'jsondata'? Com ela não vai funcionar pois está no formato JSON. A minha questão foi justamente com a tabela obtida do fromJSON. A 'weaponData' assim como postei aqui:
-
Testei aqui, e foi conforme eu imaginei, o valor de fromJSON retornou a tabela da mesma forma que foi definida, sem índices como string. Sendo que o loop com número no index funcionou normalmente. Código: local mytable = { 'red', 'blue', 'dark blue', 'green' } jsondata = toJSON(mytable) iprint("toJSON table = ", jsondata) restoredtable = fromJSON(jsondata) iprint("table padrao =", restoredtable) for i=1, #restoredtable do print( restoredtable[i] ) end Resultado: [20:44:41] INFO: "toJSON table = " '[ [ "red", "blue", "dark blue", "green" ] ]' [20:44:41] INFO: "table padrao =" { "red", "blue", "dark blue", "green" } [20:44:41] INFO: red [20:44:41] INFO: blue [20:44:41] INFO: dark blue [20:44:41] INFO: green
-
1 - se você mapeou os objetos na posição Z negativa você terá problemas - quando o jogador teleportar, ele será forçado para o chão. 2 - tente com estas funções: https://wiki.multitheftauto.com/wiki/Client_Scripting_Functions#Light_functions
-
Mas o fromJSON já não vai retornar convertido aquela tabela original do toJSON? Já faz um tempo que não mexo com essa função, não lembro se ela retorna com índice em string.
-
Parece ter algo errado nesta linha: if weaponData[tostring(i)] then -- Se existe o ID "i" de arma na table, então: Está convertendo 'i' para string, e se não constar na chave a referência como uma string irá falhar a verificação. Tente removendo o tostring.