LiOneLMeSsIShoT Posted November 23, 2013 Share Posted November 23, 2013 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
Dealman Posted November 23, 2013 Share Posted November 23, 2013 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
LiOneLMeSsIShoT Posted November 23, 2013 Author Share Posted November 23, 2013 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
Snow-Man Posted November 23, 2013 Share Posted November 23, 2013 You should start resource name ID_System Link to comment
LiOneLMeSsIShoT Posted November 23, 2013 Author Share Posted November 23, 2013 You should start resource name ID_System Started Already. Link to comment
LiOneLMeSsIShoT Posted November 23, 2013 Author Share Posted November 23, 2013 You should start resource name ID_System Started Already. Lol So? i have started it already and not work.. Link to comment
TAPL Posted November 23, 2013 Share Posted November 23, 2013 Did you added the exported function in the meta? Link to comment
LiOneLMeSsIShoT Posted November 23, 2013 Author Share Posted November 23, 2013 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
TAPL Posted November 23, 2013 Share Posted November 23, 2013 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
LiOneLMeSsIShoT Posted November 23, 2013 Author Share Posted November 23, 2013 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
TAPL Posted November 23, 2013 Share Posted November 23, 2013 This should help. https://wiki.multitheftauto.com/wiki/IsElementInRange Link to comment
LiOneLMeSsIShoT Posted November 23, 2013 Author Share Posted November 23, 2013 This should help.https://wiki.multitheftauto.com/wiki/IsElementInRange Alright Helped me and added it..Thanks Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now