Jump to content

ID system


#Dv^

Recommended Posts

Hola!

Perdón por la molestia, tengo este script que lo saqué de acá

http://pastebin.com/HZqzVr1R

Es un id System

Lo que hace es que agrega una columna al scoreboard "ID" y cada jugador que entre se le asigna un numero, es decir si entra el primero tendrá el id "1" y luego si entra otro seguido de ese tendrá el id "2" y así sucesivamente, pero cuando el player que tenía la id "1" sale se le elimina y la obtendrá otro player que ingrese al servidor, así

Pero lo que yo quiero es que cada cuenta de player tenga su propia id, estando o no en el servidor, que sea tipo como un contador de players, con sus propias ID´s, al salir y volver al entrar al servidor siempre tener mi propia id de cuenta

No se si me explico

Este es el script, no es mio solo lo saque de esta pagina http://pastebin.com/HZqzVr1R

local availableID = { }   -- Create the table that specifies which id's are available. 
local scoreboard 
local _dxver 
local _initp = true 
local _loaded = false 
  
function Init () 
        if ( getResourceFromName ( "scoreboard" ) and getResourceState ( getResourceFromName ( "scoreboard" ) ) == "running" ) then 
                scoreboard = exports.scoreboard 
                _dxver = false 
        elseif ( getResourceFromName ( "dxscoreboard" ) and getResourceState ( getResourceFromName ( "dxscoreboard" ) ) == "running" ) then             
                scoreboard = exports.dxscoreboard 
                _dxver = true 
        else 
                outputDebugString ( "No scoreboard resource has been started", 2 ) 
                _initp = false 
        end     
        if _initp then 
                scoreboard:addScoreboardColumn ( "ID", getRootElement(), 1, 0.05 ) -- Add the ID column 
                sortScoreboard( "ID" ) 
        end     
        if not _loaded then 
                loadID() 
        end     
end 
addEventHandler ( "onResourceStart", resourceRoot, Init ) 
  
function loadID () 
        _loaded = true 
        local max_players = getMaxPlayers() 
        for i = 1, max_players do 
                table.insert ( availableID, i, true )  -- Populate the table. 
        end 
        for _, player in ipairs ( getElementsByType ( "player" ) ) do 
                assignPlayerID ( player ) -- Assign an id to all players. 
        end     
end     
  
function checkStoppedResource ( resource ) 
        local rname = getResourceName ( resource ) 
        local sres = tostring ( scoreboard ):gsub( "exports.","" ) 
        if ( rname:lower() == sres:lower() ) then 
                outputChatBox ( "falsed" ) 
                _initp = false 
        end 
end 
addEventHandler ( "onResourceStop", getRootElement(), checkStoppedResource ) 
  
function checkStartedResource ( resource ) 
        if ( getResourceName ( resource ) == "scoreboard" or "dxscoreboard" and source ~= getResourceRootElement() ) then 
                Init() 
        end 
end 
addEventHandler ( "onResourceStart", getRootElement(), checkStartedResource )--]] 
  
function sortScoreboard( column ) 
        if _dxvera and _initp then 
                scoreboard:scoreboardSetSortBy ( column, true, getRootElement() ) 
        end     
end     
  
function onJoin () -- Player joined --> assign ID. 
        assignPlayerID ( source ) 
end 
addEventHandler ( "onPlayerJoin", getRootElement(), onJoin)     
  
function assignPlayerID ( player ) 
        local s_id = 1 -- start at one 
        while ( isIDAvailable ( s_id ) == false ) do -- is it available? if not, +1 & repeat. 
                s_id = s_id + 1 
        end 
        setElementData ( player, "ID", s_id ) -- available -> assign the ID to the player. 
        sortScoreboard( "ID" ) 
        availableID[ s_id ] = false -- set the id as not available. 
end             
        
function isIDAvailable ( id ) -- checks if the id is used or not. 
        return availableID[id] 
end     
  
function onLeave () -- player left, remove ID, set as available. 
        local s_id = getElementData ( source, "ID" ) 
        availableID[ s_id ] = true 
        removeElementData ( source, "ID" )      
end 
addEventHandler ( "onPlayerQuit", getRootElement(), onLeave )           
  
function removeData ( ) -- resource stopped, clear everything. 
        for k, players in ipairs ( getElementsByType ( "player" )) do 
                removeElementData ( players, "ID" ) 
        end 
        availableID = { } 
end     
addEventHandler ( "onResourceStop", resourceRoot, removeData ) 
  
function getNameMatches ( player_name ) 
i = 1 
local matchingPlayers = { } 
        if ( player_name ) then 
                for k, player in ipairs ( getElementsByType ( "player" ) ) do 
                        local player_n = getPlayerName ( player ) 
                        local match = string.find ( string.lower( player_n ), string.lower ( player_name ) ) 
                        if ( match ) then 
                                table.insert ( matchingPlayers, i, player ) 
                                i = i + 1 
                        end 
                end 
                if ( #matchingPlayers == 1 ) then 
                        return true, matchingPlayers[1] 
                elseif ( #matchingPlayers > 1 ) then 
                        return true, matchingPlayers 
                else 
                        return false, "None" 
                end     
        else 
                return false, "Please enter a player name" 
        end     
end             
  
function getPlayerFromPartialName ( source, player_name, script ) 
        if ( player_name ) then 
                local sucess, value = getNameMatches ( player_name ) 
                        if ( sucess ) then 
                                local matches = ( type ( value ) == "table" ) and #value or 1 
                                if ( matches == 1 ) then 
                                        if ( script ) then return value else 
                                                local player_nick = getPlayerName ( value ) 
                                                local player_id = getElementData ( value, "ID" ) 
                                                outputChatBox ( "(" .. player_id .. ") " .. player_nick, source, 255, 255, 0 ) 
                                        end     
                                else    
                                        outputChatBox ( "Players matching your search are: ", source, 255, 255, 0 ) 
                                        for k, player in ipairs ( value ) do 
                                                local player_nick = getPlayerName ( value[k] ) 
                                                local player_id = getElementData ( value[k], "ID" ) 
                                                outputChatBox ( "(" .. player_id .. ") " .. player_nick, source, 255, 255, 0 ) 
                                        end 
                                        return true, true 
                                end             
                        else 
                                if ( script ) then return false else 
                                        outputChatBox ( "Players matching your search are: ", source, 255, 255, 0 ) 
                                        outputChatBox ( value, source, 255, 0, 0 ) 
                                end     
                        end 
        end 
end     
  
function getPlayerFromID ( id ) 
        for k, player in ipairs ( getElementsByType ( "player" ) ) do 
                local p_id = getElementData ( player, "ID" ) 
                if ( p_id == tonumber(id) ) then 
                        player_n = getPlayerName ( player ) 
                        return player, player_n 
                end 
        end 
                return false, "No player has been found with the ID " .. id .. "." 
end     
  
function getPlayer ( source, input ) 
        if ( tonumber ( input ) ) then 
                local player, playername = getPlayerFromID ( tonumber(input) ) 
                if ( player ) then 
                        return player 
                else 
                        outputChatBox ( playername, source, 255, 0, 0 ) -- in this case, playername carries the error. It's just to minimize the amount of code if an error is ecountered. 
                        return false 
                end 
        else 
                local player, multiple = getPlayerFromPartialName ( source, input, true ) 
                if ( player and not multiple ) then 
                        return player 
                elseif ( player and multiple ) then 
                        return false    
                else 
                        outputChatBox ( "Player not found", source, 255, 0, 0 ) 
                        return false 
                end 
        end 
end 
  
function processIDCommands ( source, command, input ) 
        if ( tonumber ( input ) ) then 
                local player, playername = getPlayerFromID ( tonumber(input) ) 
                        if ( player ) then 
                                outputChatBox ( "Player that matches that id: ", source, 255, 255, 0 ) 
                                outputChatBox ( "(" .. input .. ") " .. playername, source, 255, 255, 0, true ) 
                        else 
                                outputChatBox ( playername, source, 255, 0, 0 ) -- in this case, playername carries the error. It's just to minimize the amount of code if an error is ecountered. 
                        end 
        else 
                local player = getPlayer ( source, input ) 
                if ( player ) then 
                        outputChatBox ( "Player that matches that id: ", source, 255, 255, 0 ) 
                        outputChatBox ( "(" .. tostring ( getElementData ( player, "ID" ) ) .. ") " .. getPlayerName ( player ), source, 255, 255, 0, true ) 
                end     
        end 
end             
addCommandHandler ( "id", processIDCommands ) 

Link to comment

No sabía que existía getAccounts :shock: Si no te quedo claro, es hacer un bucle con lo que retorna la función y el primero 'argumento', que es la key, ordenada numéricamente, la guardas como una 'ID'.

for k, v in ipairs (getAccounts()) do 
     local id = k 
     outputChatBox ( "Jugador con ID: "..id ) 
end 

Esa función lo que haría es crear tantos textos en el chat como jugadores haya registrados en el servidor y saca sus id's utilizando el método que te dijo @Gaberiel

Link to comment
  • MTA Team

Proba esto, lo escribí del movil comenta si te da algún error.

function inicializar() 
    for i, v in ipairs(getAccounts())do 
        setAccountData(v,"id",i) 
    end 
end 
addCommandHandler("crearids",inicializar)--Solo corre este comando 1 vez y ya nunca mas. 
addEventHandler("onPlayerLogin", root, 
function (_,acc) 
    local id = getAccountData(acc,"id") 
    if id then 
        setElementData(source,"id",id) 
    else 
        local cCuentas = getAccounts() 
        setAccountData(acc,"id",#cCuentas+1) 
        setElementData(source,"id",#cCuentas+1) 
    end 
end 
) 

Link to comment

Lo que te ha escrito @.:CiBeR:. hace lo siguiente:

/crearids Es el comando que les asigna una ID a las cuentas ya creadas en el servidor. Utilizalo solo una vez para asignarle las ids a las cuentas y luego puedes quitarlo.

Y después ya te hizo el evento, que es, cuando el jugador se loguea, ya le asigna una ID.

Link to comment

Si me funciona bien, se los agradezco, pero ahora quiero reiniciar las ID´s, es decir que vuelva a empezar de 1 y empieza a contar de nuevo

¿Qué debería utilizar?

¿O como puedo eliminar todas las cuentas para que vuelvan a registrarse?

Gracias

Link to comment
Si me funciona bien, se los agradezco, pero ahora quiero reiniciar las ID´s, es decir que vuelva a empezar de 1 y empieza a contar de nuevo

¿Qué debería utilizar?

¿O como puedo eliminar todas las cuentas para que vuelvan a registrarse?

Gracias

Desde la consola:

  
start runcode 
run aclGroupAddObject(aclGetGroup("Admin"), "user.Console") 
run for i,v in ipairs(getAccounts()) do if ( getAccount("Console") ~= v ) then deleteAccount(v) end end 
  

Link to comment

Me sale esto

#000000Nick executed command: aclGroupAddObject(aclGetGroup("Admin"), "user.Console")run for i,v in ipairs(getAccounts()) do if ( getAccount("Console") ~= v ) then deleteAccount(v) end end

Error: [string "aclGroupAddObject(aclGetGroup("Admin"), "user.Console")run for ..."]:1: '=' expected near 'for'

Link to comment
Me sale esto

#000000Nick executed command: aclGroupAddObject(aclGetGroup("Admin"), "user.Console")run for i,v in ipairs(getAccounts()) do if ( getAccount("Console") ~= v ) then deleteAccount(v) end end

Error: [string "aclGroupAddObject(aclGetGroup("Admin"), "user.Console")run for ..."]:1: '=' expected near 'for'

Deja un espacio entre línea y línea (entre el ") run )

Link to comment

No entendí ._.

Tengo que abrir la consola "f8" y poner

start runcode

luego:

run aclGroupAddObject(aclGetGroup("Admin"), "user.Console")

y por ultimo:

run for i,v in ipairs(getAccounts()) do if ( getAccount("Console") ~= v ) then deleteAccount(v) end end

¿Es así?

Gracias por tu tiempo

Link to comment
No entendí ._.

Tengo que abrir la consola "f8" y poner

start runcode

luego:

run aclGroupAddObject(aclGetGroup("Admin"), "user.Console")

y por ultimo:

run for i,v in ipairs(getAccounts()) do if ( getAccount("Console") ~= v ) then deleteAccount(v) end end

¿Es así?

Gracias por tu tiempo

Si, pero no es deleteAccount sino removeAccount.

Link to comment
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...