Jump to content

[Help] BugScript


Recommended Posts

Posted

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  
  

Posted

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] 

If I help you in a thread and you need further assistance, please don't PM me - use the thread you created instead. This way everyone on the forum can take advantage of it.

Posted
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

Posted
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 ) 

Posted

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) 

CiTLh.png
Posted
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.. :)

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...