TwiX! Posted February 15, 2012 Posted February 15, 2012 (edited) ------------------------------------------ -- 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 как пример.. function LoginStatusServer() local playerCash = loadPlayerData(source,"cash") end addEventHandler("onPlayerLogin", gRoot, LoginStatusServer) P.S Line 1258 - 46 Line 1263 - 51 Edited February 15, 2012 by Guest
Kenix Posted February 15, 2012 Posted February 15, 2012 Ты вызываешь функцию getPlayerFromParticalName и юзаешь 1 аргумент userdata т.е элемент , а должен строку.
TwiX! Posted February 15, 2012 Author Posted February 15, 2012 Ты вызываешь функцию getPlayerFromParticalName и юзаешь 1 аргумент userdata т.е элемент , а должен строку. и как использовать всю строку?
Kenix Posted February 15, 2012 Posted February 15, 2012 Я указал ошибку, но смысл кода не понял твоего ..
TwiX! Posted February 15, 2012 Author Posted February 15, 2012 Я указал ошибку, но смысл кода не понял твоего .. смлысл кода, чтобы не делать 100500 проверок в каждой функции (проверять акк и т.д) [Сделать одной строчкой],
Kenix Posted February 15, 2012 Posted February 15, 2012 Да это я понял. Я понял из твоего кода что ты вызываешь эти функции savePlayerData/loadPlayerData и в 1 аргумент передаёшь элемент( юзердату ) , но в первом условии ты проверяешь ,что 1 аргумент существует и что этот аргумент не пустая строка. Зачем? Не могу понять. Дальше ты из функции ( getPlayerFromParticalName ) хочешь получить элемент ( который уже есть у тебя ты его передал ) , но функция getPlayerFromParticalName вернёт false , потому-что ты указал не строку в аргумент функции. Зачем? Для чего это.
TwiX! Posted February 15, 2012 Author Posted February 15, 2012 Да это я понял.Я понял из твоего кода что ты вызываешь эти функции savePlayerData/loadPlayerData и в 1 аргумент передаёшь элемент( юзердату ) , но в первом условии ты проверяешь ,что 1 аргумент существует и что этот аргумент не пустая строка. Зачем? Не могу понять. Дальше ты из функции ( getPlayerFromParticalName ) хочешь получить элемент ( который уже есть у тебя ты его передал ) , но функция getPlayerFromParticalName вернёт false , потому-что ты указал не строку в аргумент функции. Зачем? Для чего это. Я думаю что этот код не ты писал. этот код писал я , его делал под xml , но этот вариант не подходит, так как грузит сервер если человек 10 разом откроют панель, сервер просто упадёт с (xml), более 2000 аккаунтов в нем с данными хранится.. завтра переделаю по другому, спасибо
TwiX! Posted February 15, 2012 Author Posted February 15, 2012 (edited) 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 February 15, 2012 by Guest
Kenix Posted February 15, 2012 Posted February 15, 2012 Тебе надо возвращать результат в функции loadPlayerData. Для тебя пока лучше Account Data. Потом уже изучишь мускул/склайт.
TwiX! Posted February 15, 2012 Author Posted February 15, 2012 Тебе надо возвращать результат в функции loadPlayerData. чтобы результат вернуть, его надо получить..
Kenix Posted February 15, 2012 Posted February 15, 2012 Тебе надо возвращать результат в функции loadPlayerData. чтобы результат вернуть, его надо получить.. Ты его получаешь через функцию 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
TwiX! Posted February 15, 2012 Author Posted February 15, 2012 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
Kenix Posted February 16, 2012 Posted February 16, 2012 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'
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