Jump to content

[HELP]Send money


Recommended Posts

Server

  
function transMoney(player,from,to,amount) 
    local fromN = getPlayerName(from) 
    local toI = getPlayerFromName(to) 
    local Fserial = getPlayerSerial(from) 
    local Tserial = getPlayerSerial(toI) 
    local FMoney = executeSQLSelect ( "MoneyB", "Money","serial = '" .. Fserial .. "'") 
    local TMoney = executeSQLSelect ( "MoneyB", "Money","serial = '" .. Tserial .. "'") 
    if  tostring(to) == tostring(fromN) then outputChatBox("ERROR: You can't transfer money to yourself.",from,255,0,0) 
        elseif tonumber(amount) > tonumber(FMoney[1]["Money"])then outputChatBox("ERROR: You don't have enough money.",from,255,0,0) 
        elseif tonumber(amount) <= 0 then outputChatBox("ERROR: You can't send an amount less than $1.",from,255,0,0) 
    else 
        FMoney = tonumber(FMoney[1]["Money"]) - tonumber(amount) 
        TMoney = tonumber(TMoney[1]["Money"]) + tonumber(amount) 
        outputChatBox("*Money Transfer: "..fromN.." transfers $"..amount.." to "..to,getRootElement(),219,156,42) 
        executeSQLUpdate ( "MoneyB", "Money = '"..FMoney.."'","serial = '" .. Fserial .. "'") 
        executeSQLUpdate ( "MoneyB", "Money = '"..TMoney.."'","serial = '" .. Tserial .. "'") 
        setElementData(toI ,"Money", TMoney) 
        setElementData(from,"Money",FMoney) 
        setElementData ( toI ,"data.money",TMoney,true) 
        setElementData ( from ,"data.money",FMoney,true) 
    end 
end 
  
addEvent("onTransMoney",true) 
addEventHandler("onTransMoney",getRootElement(),transMoney) 
  

Client

  
function transferMoney(transferMoney,from,to,amount) 
    local from = getLocalPlayer() 
    local amount = guiGetText(amount_edit) 
    local to = guiGetText(targerplayer_edit) 
    if source == sendmoney_button then 
        triggerServerEvent("onTransMoney",getLocalPlayer(),getLocalPlayer(),from,to,amount) 
    end 
end 

ef88418a1fd4.png

why its not work :(

Link to comment

it's russian forum, dude

    local to = guiGetText(targerplayer_edit) 

если в этом поле будет неполное или несуществующее имя игрока, то ваш код сверху будет плющить в непонятках как на скрине

Link to comment

Server

  
function transMoney(player,to,amount) 
    local fromN = getPlayerName(source) 
    local toI = getPlayerFromName(to); 
    if not toI then 
        outputChatBox("ERROR: Incorrect player name.",source,255,0,0) 
        return 
    end 
    local Fserial = getPlayerSerial(source) 
    local Tserial = getPlayerSerial(toI) 
    local FMoney = executeSQLSelect ( "MoneyB", "Money","serial = '" .. Fserial .. "'") 
    local TMoney = executeSQLSelect ( "MoneyB", "Money","serial = '" .. Tserial .. "'") 
    if  tostring(to) == tostring(fromN) then outputChatBox("ERROR: You can't transfer money to yourself.",source,255,0,0) 
        elseif tonumber(amount) > tonumber(FMoney[1]["Money"])then outputChatBox("ERROR: You don't have enough money.",source,255,0,0) 
        elseif tonumber(amount) <= 0 then outputChatBox("ERROR: You can't send an amount less than $1.",source,255,0,0) 
    else 
        FMoney = tonumber(FMoney[1]["Money"]) - tonumber(amount) 
        TMoney = tonumber(TMoney[1]["Money"]) + tonumber(amount) 
        outputChatBox("*Money Transfer: "..fromN.." transfers $"..amount.." to "..to,getRootElement(),219,156,42) 
        executeSQLUpdate ( "MoneyB", "Money = '"..FMoney.."'","serial = '" .. Fserial .. "'") 
        executeSQLUpdate ( "MoneyB", "Money = '"..TMoney.."'","serial = '" .. Tserial .. "'") 
        setElementData(toI ,"Money", TMoney) 
        setElementData(from,"Money",FMoney) 
        setElementData ( toI ,"data.money",TMoney,true) 
        setElementData ( from ,"data.money",FMoney,true) 
    end 
end 
  
addEvent("onTransMoney",true) 
addEventHandler("onTransMoney",getRootElement(),transMoney) 
  

Client

  
function transferMoney(to,amount) 
    if source == sendmoney_button then 
        local amount = guiGetText(amount_edit) 
        local to = guiGetText(targerplayer_edit) 
        triggerServerEvent("onTransMoney",localPlayer,to,amount) 
    end 
end 

выглядеть должно так, но я не знаю как выглядит второй код полностью

Link to comment

теперь

187d5defabf5.png

Может быть это из за

  
function createPlayerList () 
    local column = guiGridListAddColumn( sendmoney_grid, "Players", 0.85 ) 
    if ( column ) then 
        for id, player in ipairs(getElementsByType("player")) do 
            local row = guiGridListAddRow ( sendmoney_grid ) 
            --guiGridListSetItemText ( sendmoney_grid, row, column, getPlayerName ( player ), false, false ) 
            guiGridListSetItemText ( sendmoney_grid, row, column, string.gsub(getPlayerName ( player ),"#%x%x%x%x%x%x", ""), false, false ) 
        end 
    end 
end 

из за :

  
"#%x%x%x%x%x%x" 

Тоесть сервер видит игрока например как #00aaddQ#777777werty~ а в панели без этого..

Link to comment

как тогда сделать чтобы выбор был Hex colors, но функция эта работала

вот функция от куда он берёт имя.

  
function gridlistPlayerSelect() 
    if source == sendmoney_grid then 
        local selectedPlayer = guiGridListGetItemText(sendmoney_grid, guiGridListGetSelectedItem(sendmoney_grid), 1) 
        guiSetText(targerplayer_edit, selectedPlayer) 
    elseif source == GUIEditor_Grid[4] then 
        local selectedTime = guiGridListGetItemText(GUIEditor_Grid[4], guiGridListGetSelectedItem(GUIEditor_Grid[4]), 1) 
        guiSetText(GUIEditor_Edit[13], selectedTime) 
    elseif source == GUIEditor_Grid[3] then 
        local selectedP = guiGridListGetItemText(GUIEditor_Grid[3], guiGridListGetSelectedItem(GUIEditor_Grid[3]), 1) 
        guiSetText(GUIEditor_Edit[100], selectedP) 
    end 
end 

Link to comment

но у меня не получается убрать hex колор, и чтобы сервер видел это

тоесть если будет #00aaddQ#777777werty - в панели(gui) это работает

но как от туда убираю это, вот эта ошибка..

Link to comment

объясняю принцип работы функции поиска игрока по нику.. получаешь список всех игроков, получаешь список их имен, вырезаешь из каждого имени в списке коды цветов и потом ищешь в этом списке указанный ник

но ваще-то вводить вручную имя игрока для передачи ему денег - это не очень удобно

Link to comment

Создай таблицу, где ключами будут элементы игроков, а значениями будут таблицы с двумя никами игрока - без кодов цвета и второй с кодом цвета. Эту таблицу нужно постоянно подправлять при входе/выходе игроков.

playerName = { 
    [playerElement] = { 'MX_Master', '#FF0000MX_Master' }, 
    [playerElement] = { 'Qwerty123', 'Qwerty#FFFFFF123' }, 
    ... 
} 

С помощью этой таблицы можно всегда составить актуальный GUI список ников игроков без кодов цвета. И при выборе из этого списка, будем искать текст в вышеуказанной таблице, далее оправлять серверу найденный в таблице полный ник получателя денег.

Link to comment

тоесть мне каждого игрока туда писать? это полный бред, на сервере не 1-2 человека играет,:)

спасибо за помощь :) я сделал по другому

  
function findPlayerByName (name) 
    local player = getPlayerFromName(name) 
    if player then return player end 
    for i, player in ipairs(getElementsByType("player")) do 
        if string.find(string.gsub(getPlayerName(player):lower(),"#%x%x%x%x%x%x", ""), name:lower(), 1, true) then 
            return player 
        end 
    end 
return false 
end 

в сервере изменил

local toI = findPlayerByName(to) 

:) тему можно закрыть

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