TwiX! Posted February 15, 2012 Share 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 Link to comment
Kenix Posted February 15, 2012 Share Posted February 15, 2012 Ты вызываешь функцию getPlayerFromParticalName и юзаешь 1 аргумент userdata т.е элемент , а должен строку. Link to comment
TwiX! Posted February 15, 2012 Author Share Posted February 15, 2012 Ты вызываешь функцию getPlayerFromParticalName и юзаешь 1 аргумент userdata т.е элемент , а должен строку. и как использовать всю строку? Link to comment
Kenix Posted February 15, 2012 Share Posted February 15, 2012 Я указал ошибку, но смысл кода не понял твоего .. Link to comment
TwiX! Posted February 15, 2012 Author Share Posted February 15, 2012 Я указал ошибку, но смысл кода не понял твоего .. смлысл кода, чтобы не делать 100500 проверок в каждой функции (проверять акк и т.д) [Сделать одной строчкой], Link to comment
Kenix Posted February 15, 2012 Share Posted February 15, 2012 Да это я понял. Я понял из твоего кода что ты вызываешь эти функции savePlayerData/loadPlayerData и в 1 аргумент передаёшь элемент( юзердату ) , но в первом условии ты проверяешь ,что 1 аргумент существует и что этот аргумент не пустая строка. Зачем? Не могу понять. Дальше ты из функции ( getPlayerFromParticalName ) хочешь получить элемент ( который уже есть у тебя ты его передал ) , но функция getPlayerFromParticalName вернёт false , потому-что ты указал не строку в аргумент функции. Зачем? Для чего это. Link to comment
TwiX! Posted February 15, 2012 Author Share Posted February 15, 2012 Да это я понял.Я понял из твоего кода что ты вызываешь эти функции savePlayerData/loadPlayerData и в 1 аргумент передаёшь элемент( юзердату ) , но в первом условии ты проверяешь ,что 1 аргумент существует и что этот аргумент не пустая строка. Зачем? Не могу понять. Дальше ты из функции ( getPlayerFromParticalName ) хочешь получить элемент ( который уже есть у тебя ты его передал ) , но функция getPlayerFromParticalName вернёт false , потому-что ты указал не строку в аргумент функции. Зачем? Для чего это. Я думаю что этот код не ты писал. этот код писал я , его делал под xml , но этот вариант не подходит, так как грузит сервер если человек 10 разом откроют панель, сервер просто упадёт с (xml), более 2000 аккаунтов в нем с данными хранится.. завтра переделаю по другому, спасибо Link to comment
Kenix Posted February 15, 2012 Share Posted February 15, 2012 Тебе надо понять алгоритм просто. Link to comment
TwiX! Posted February 15, 2012 Author Share 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 Link to comment
Kenix Posted February 15, 2012 Share Posted February 15, 2012 Тебе надо возвращать результат в функции loadPlayerData. Для тебя пока лучше Account Data. Потом уже изучишь мускул/склайт. Link to comment
TwiX! Posted February 15, 2012 Author Share Posted February 15, 2012 Тебе надо возвращать результат в функции loadPlayerData. чтобы результат вернуть, его надо получить.. Link to comment
Kenix Posted February 15, 2012 Share 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 Link to comment
TwiX! Posted February 15, 2012 Author Share 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 Link to comment
Kenix Posted February 16, 2012 Share 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' 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