このモジュールを使用して、コールバック関数から値を返そうと 1 か月試みてきました。
ローカルの SQL データベースからデータを取得するデフォルトの関数を上書きしていますGetPData
が、MySQL データベース サーバーからデータを取得したいと考えていました。
元の関数は次のとおりです。
--[[---------------------------------------------------------
GetPData
- Saves persist data for this player
-----------------------------------------------------------]]
function meta:GetPData( name, default )
name = Format( "%s[%s]", self:UniqueID(), name )
local val = sql.QueryValue( "SELECT value FROM playerpdata WHERE infoid = " .. SQLStr(name) .. " LIMIT 1" )
if ( val == nil ) then return default end
return val
end
これが私が試したコードです:
function Player:GetPData(key, default)
testget(self,key,default,function(junk)
//LocalPlayer():ChatPrint("You have $" .. junk .. ".");
print(junk)
return junk
end)
end
function testget(self,key, default, callback)
local retVal = default
insertQ = PDataDB:query("SELECT `value` from `playerdata` WHERE `uniqueid`='" .. self:UniqueID() .. "' AND key` = '" .. key .. "';");
insertQ.onError = DBError
insertQ.onData = function(self, data)
retVal = data.value or default
print(retVal)
print("--------------------------------------------------------------------------------------------------------------")
insertQ.onSuccess = function(self)
print(retVal)
callback(retVal);
end
insertQ:start()
end
end
これは、garrys mod というゲーム用です。サーバー全体で XP を追跡する必要があります。