HomeServer/Server/AllServer/GameServer/GameRecord.lua
2024-11-20 15:41:37 +08:00

90 lines
2.8 KiB
Lua

local skynet = require "skynet"
local oo = require "Class"
local log = require "Log"
local sqlUrl = require "SqlUrl"
local serverId = tonumber(skynet.getenv "serverId")
local db = require "DB"
local json =require "json"
local GameRecord = oo.class()
GameRecord.recordList = {}
function GameRecord:Init()
self:CreateTable()
end
--跨天
function GameRecord:OnNewDay()
self:CreateTable()
end
--5秒Timer
function GameRecord:On5SecTimer()
if not skynet.server.gameServer.curServerConfig or not skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount then
return
end
self:Save()
end
--创建表
function GameRecord:CreateTable()
local time = skynet.GetTime()
local year = os.date("*t", time).year
local month = os.date("*t", time).month
local day = os.date("*t", time).day
local sql = string.format(sqlUrl.createGameRecord , year , month , day )
skynet.server.db:Query( "game" , sql )
end
--新增记录
function GameRecord:Add( userId , type , ... )
if skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount or 0 > 0 then
local p1,p2,p3,p4,p5,p6,p7,p8 = ...
local data = {}
data.p1 = p1
data.p2 = p2
data.p3 = p3
data.p4 = p4
data.p5 = p5
data.p7 = p7
data.p8 = p8
data.recordTime = skynet.server.common:GetStrTime(skynet.GetTime())
table.insert( self.recordList , { userId = userId , type = type , data = json:encode(data) } )
end
end
--保存记录
function GameRecord:Save()
if skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount > 0 then
local pararm = nil
local time = skynet.GetTime()
local year = os.date("*t", time).year
local month = os.date("*t", time).month
local day = os.date("*t", time).day
for k, v in pairs(self.recordList) do
local sql = string.format(sqlUrl.insertRecordToGameRecord1 , year , month ,day)
local saveCount = 0
pararm = string.format(sqlUrl.insertRecordToGameRecord2 , v.userId , v.type , v.data)
sql = sql .. pararm
self.recordList[ k ] = nil
saveCount = saveCount + 1
if saveCount >= skynet.server.gameServer.curServerConfig.PerSavePlayerRecordCount then
break
end
if saveCount > 0 then
sql = string.sub(sql , 1, -2 ) --去掉最后一个逗号
local dbData = skynet.server.db:Query( "game" , sql )
if dbData and dbData.affected_rows then
log.debug(string.format("保存游戏数据记录 应保存数量 %d 实际保存数量 %d 保存用时 %d 秒", saveCount , dbData.affected_rows , skynet.GetTime() - time ))
end
end
end
end
end
skynet.server.gameRecord = GameRecord
return GameRecord