Jump to content

[HELP] getAccont Data with another function


TwiX!

Recommended Posts

------------------------------------------ 
-- Load & Save Data 
------------------------------------------ 
function loadPlayerData (player,datatype) 
    if player and player ~= "" then 
        thatPlayer = getPlayerFromParticalName(player) 
        if thatPlayer then 
            local playeraccount = getPlayerAccount ( thatPlayer ) 
            if (playeraccount) and not isGuestAccount ( playeraccount ) then 
                local playerData = getAccountData(playeraccount, datatype) 
                if (playerData) then 
                    outputDebugString("---- Load: "..getPlayerName(thatPlayer).."   ,   "..datatype.."   ,   "..playerData) 
                    return playerData 
                else 
                    setAccountData ( playeraccount, datatype ) 
                    outputDebugString("---- Load: "..getPlayerName(thatPlayer).."   ,   "..datatype.."   ,   0") 
                    return 0 
                end 
            end 
        end 
    end 
end 
  
function savePlayerData (player,datatype,newvalue) 
    if player and player ~= "" then 
        thatPlayer = getPlayerFromParticalName(player) 
        if thatPlayer then 
            local playeraccount = getPlayerAccount ( thatPlayer ) 
            if (playeraccount) and not isGuestAccount ( playeraccount ) then 
                local playerRootNode = getAccountData(playeraccount, datatype,newvalue,0) 
                if not (playerRootNode == false) then 
                    local newNodeValue = setAccountData ( playeraccount, datatype,newvalue ) 
                    outputDebugString("---- Save: "..getPlayerName(thatPlayer).."   ,   "..datatype.."   ,   "..newvalue) 
                    return newNodeValue 
                else 
                    local newNodeValue = setAccountData ( playeraccount, datatype,newvalue ) 
                    outputDebugString("---- Save: "..getPlayerName(thatPlayer).."   ,   "..datatype.."   ,   "..newvalue) 
                    return newNodeValue 
                end 
            end 
        end 
    end 
end 
  
function getPlayerFromParticalName(thePlayerName) 
    thePlayer = getPlayerFromName(thePlayerName) 
    if thePlayer then 
        return thePlayer 
    end 
    for _,thePlayer in ipairs(getElementsByType("player")) do 
        if string.find(string.gsub(getPlayerName(thePlayer):lower(),"#%x%x%x%x%x%x", ""), thePlayerName:lower(), 1, true) then 
            return thePlayer 
        end 
    end 
end 

22f31ceb9584.png

как пример..

function LoginStatusServer() 
    local playerCash = loadPlayerData(source,"cash") 
end 
addEventHandler("onPlayerLogin", gRoot, LoginStatusServer) 

P.S

Line 1258 - 46

Line 1263 - 51

Edited by Guest
Link to comment
Я указал ошибку, но смысл кода не понял твоего ..

смлысл кода, чтобы не делать 100500 проверок в каждой функции (проверять акк и т.д) [Сделать одной строчкой],

Link to comment

Да это я понял.

Я понял из твоего кода что ты вызываешь эти функции savePlayerData/loadPlayerData и в 1 аргумент передаёшь элемент( юзердату ) , но в первом условии ты проверяешь ,что 1 аргумент существует и что этот аргумент не пустая строка.

Зачем?

Не могу понять.

Дальше ты из функции ( getPlayerFromParticalName ) хочешь получить элемент ( который уже есть у тебя ты его передал ) , но функция getPlayerFromParticalName вернёт false , потому-что ты указал не строку в аргумент функции.

Зачем?

Для чего это.

Link to comment
Да это я понял.

Я понял из твоего кода что ты вызываешь эти функции savePlayerData/loadPlayerData и в 1 аргумент передаёшь элемент( юзердату ) , но в первом условии ты проверяешь ,что 1 аргумент существует и что этот аргумент не пустая строка.

Зачем?

Не могу понять.

Дальше ты из функции ( getPlayerFromParticalName ) хочешь получить элемент ( который уже есть у тебя ты его передал ) , но функция getPlayerFromParticalName вернёт false , потому-что ты указал не строку в аргумент функции.

Зачем?

Для чего это.

Я думаю что этот код не ты писал.

этот код писал я , его делал под xml , но этот вариант не подходит, так как грузит сервер

если человек 10 разом откроют панель, сервер просто упадёт с (xml), более 2000 аккаунтов в нем с данными хранится..

завтра переделаю по другому, спасибо :)

Link to comment
function loadPlayerData (thatPlayer,datatype) 
    local playeraccount = getPlayerAccount ( thatPlayer ) 
    if (playeraccount) and not isGuestAccount ( playeraccount ) then 
        getAccountData(playeraccount, datatype) 
    end 
end 
  
function savePlayerData (thatPlayer,datatype,newvalue) 
    local playeraccount = getPlayerAccount ( thatPlayer ) 
    if (playeraccount) and not isGuestAccount ( playeraccount ) then 
        setAccountData ( playeraccount, datatype,newvalue ) 
    end 
end 

?

Account Data

SqlCreateTable

mySql

что быстрее?

Edited by Guest
Link to comment
Тебе надо возвращать результат в функции loadPlayerData.

чтобы результат вернуть, его надо получить.. :idea:

Ты его получаешь через функцию getAccountData и возвращаешь через оператор return.

function loadPlayerData ( thatPlayer,datatype ) 
    local playeraccount = getPlayerAccount ( thatPlayer ) 
    if ( playeraccount ) and not isGuestAccount ( playeraccount ) then 
        return getAccountData( playeraccount, datatype ) 
    end 
    return false 
end 

Link to comment

0fa645e0b892.png

function scoreboardRefresh(thePlayer) 
    if (isGuestAccount(getPlayerAccount(thePlayer)) == true) then 
        setPlayerStatus( thePlayer, "Not Logged", nil ) 
    else 
        local playerCash = loadPlayerData(thePlayer,"cash") 
        setElementData(thePlayer,"Money","$"..playerCash) 
        setPlayerStatus( thePlayer, playerCash, nil) 
        callClientFunction(thePlayer,"refreshCash",playerCash) 
    end 
end 

62-6

Link to comment
local playerCash = loadPlayerData(thePlayer,"cash") 

Возвращает ложь у тебя.

Скорее всего аккаунт дата 'cash' не существует.

local playerCash = loadPlayerData( thePlayer,"cash" ) or 0 

Возвращаем 0 если аккаунт дата возвращает ложь.

if (isGuestAccount(getPlayerAccount(thePlayer)) == true) then 

К чему это?Условие if then выполняется если переменная ( или функция ) возвращает значение не ложь( false ) и не ноль( nil ).

Т.е

var = 1 
if var then 
   print 'done' 
end 
-- > 'done' 
  
var = false 
if var then 
   print 'done' 
else 
   print 'done2' 
end 
-- > 'done 2' 
  
var = nil 
if not var then 
   print 'done' 
end 
-- > 'done' 
  
var = false 
if not var then 
   print 'done' 
end 
-- > 'done' 

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