Jump to content

[Help] BugScript


Recommended Posts

I've made this script to /pay [id or name] [money] but it gives me string"?" in the script which exports...check

function money_func(player,cmd,playername,money, id) 
    if playername and money then 
      local player2 = getPlayerFromName(playername) 
      local id = exports.ID_System:getPlayerFromID (id) 
      if player2 and id then 
       if tonumber(money) and tonumber(money) >= 1 then 
           givePlayerMoney(player2,tonumber(money)) 
           takePlayerMoney(player,tonumber(money)) 
           else 
           outputChatBox ("you haven't this money To pay") 
       end 
      end 
    else 
         outputChatBox("Use: /pay [Player/id] [Money]",player) 
    end 
end 
addCommandHandler("pay",money_func) 

exports from Folder name ID_System and Script is:

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  
  

Link to comment

To use multiple arguments, you'll have to structure your command function like this;

function exampleCommand(source, cmd, ...) 
    local cmdArguments = table.concat({...}, " ") 
    local arrayString = split(cmdArguments, " ") 
    local arg1 = arrayString[1] 
    local arg2 = arrayString[2] 

Link to comment
To use multiple arguments, you'll have to structure your command function like this;
function exampleCommand(source, cmd, ...) 
    local cmdArguments = table.concat({...}, " ") 
    local arrayString = split(cmdArguments, " ") 
    local arg1 = arrayString[1] 
    local arg2 = arrayString[2] 

well, the error is

Call Failed to call 'ID_System:getPlayerFromID' [string "?"]  

so?! why it's happen

Link to comment
Did you added the exported function in the meta?

Yeah added it..and now i get error:

:157: attempt to concatenate local 'id' (a nil value) 

script:

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, outputChatBox("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

Try this:

function money_func(player, cmd, arg, money) 
    local money = tonumber(money) 
    if arg and money then 
        local ID = tonumber(arg) 
        if ID then 
            target = exports.ID_System:getPlayerFromID(ID) 
        else 
            target = getPlayerFromName(arg) 
        end 
        if target then 
            if target ~= player then 
                if money > 0 then 
                    if getPlayerMoney(player) >= money then 
                        givePlayerMoney(target, money) 
                        takePlayerMoney(player, money) 
                        outputChatBox("Money sent..", player, 0, 255, 0) 
                    else 
                        outputChatBox("you haven't this money To pay", player, 255, 0, 0) 
                    end 
                else 
                    outputChatBox("Amount must be 1 or bigger.", player, 255, 0, 0) 
                end 
            else 
                outputChatBox("You can't send to yourself.", player, 255, 0, 0) 
            end 
        else 
            outputChatBox("Can't find this player.", player, 255, 0, 0) 
        end 
    else 
        outputChatBox("Use: /pay [Player/id] [Money]", player) 
    end 
end 
addCommandHandler("pay", money_func) 

Link to comment
Try this:
function money_func(player, cmd, arg, money) 
    local money = tonumber(money) 
    if arg and money then 
        local ID = tonumber(arg) 
        if ID then 
            target = exports.ID_System:getPlayerFromID(ID) 
        else 
            target = getPlayerFromName(arg) 
        end 
        if target then 
            if target ~= player then 
                if money > 0 then 
                    if getPlayerMoney(player) >= money then 
                        givePlayerMoney(target, money) 
                        takePlayerMoney(player, money) 
                        outputChatBox("Money sent..", player, 0, 255, 0) 
                    else 
                        outputChatBox("you haven't this money To pay", player, 255, 0, 0) 
                    end 
                else 
                    outputChatBox("Amount must be 1 or bigger.", player, 255, 0, 0) 
                end 
            else 
                outputChatBox("You can't send to yourself.", player, 255, 0, 0) 
            end 
        else 
            outputChatBox("Can't find this player.", player, 255, 0, 0) 
        end 
    else 
        outputChatBox("Use: /pay [Player/id] [Money]", player) 
    end 
end 
addCommandHandler("pay", money_func) 

Alright work..thank you but can you add Distance to this? i mean like if the player not near me then i can't pay him.. :)

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

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