-1

このモジュールを使用して、コールバック関数から値を返そうと 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 を追跡する必要があります。

4

1 に答える 1

1

関数を次のように変更します。

function Player:GetPData( key, default )
    local retVal = 0 -- or any other default value you want
    testget(self, key, default, function(junk)
        //LocalPlayer():ChatPrint("You have $" .. junk .. ".");
        print(junk)
        retVal = junk
        return junk
        end
    )
    return retVal
end
于 2014-05-20T05:34:22.127 に答える