Role.lua 2.7 KB
local Role = class("Role", require("shared.ModelBase"))

local RolePlugin = import(".RolePlugin")
local RoleTask = import(".RoleTask")
local RoleActivity = import(".RoleActivity")
local RoleChangeStruct = import(".RoleChangeStruct")
RolePlugin.bind(Role)
RoleTask.bind(Role)
RoleActivity.bind(Role)
RoleChangeStruct.bind(Role)

function Role:ctor( properties )
	Role.super.ctor(self, properties)
	self.ignoreHeartbeat = false
	self.heros = {}
end

Role.schema = {
	key 				= {"string"},
	id 					= {"number"},
	uid 				= {"string", ""},
	name 				= {"string", ""},
	sid 				= {"number", 0},
	device 				= {"string", ""},
	banTime 			= {"number", 0},
	banType 			= {"number", 0},
	ltime 				= {"number", 0}, -- 最后登录时间
	ctime 				= {"number", skynet.timex()},  -- 创建时间
	ignoreMt			= {"number", 0},  -- 忽略维护拦截
	sversion			= {"number", globalCsv.StructVersion or 0}, -- 重整数据版本

	-- roleInfo
	level 				= {"number", 0},
	diamond				= {"number", 0},
	reDiamond			= {"number", 0},
	items				= {"string", ""}
}

Role.fields = {
	id = true,
	uid = true,
	sid = true,
	device = true,
	name = true,
	banTime = true,
	banType = true,
	ltime = true,
	ctime = true,
	sversion = true,
	level = true,
	diamond = true,
	reDiamond = true,
	items = true,
}


function Role:notifyUpdateProperty(field, newValue, oldValue, extraValue)
	local updateData = {
		{
			key = field,
			newValue = newValue,
			oldValue = oldValue or "",
			extraValue = extraValue,
		}
	}

	SendPacket(actionCodes.Role_updateProperty, MsgPack.pack(updateData))
end

function Role:updateProperty(params)
	params = params or {}
	if not self.fields[params.field] then return end
	local oldValue = self:getProperty(params.field)
	local ret = {key = params.field, oldValue = oldValue}
	if params.value then
		ret.newValue = params.value
		self:setProperty(params.field, params.value)
	elseif params.delta then
		self:incrProperty(params.field, params.delta)
		ret.newValue = self:getProperty(params.field)
	else
		return
	end
	if not params.notNotify then
		SendPacket(actionCodes.Role_updateProperty, MsgPack.pack({ret}))
	end
end

function Role:updateProperties(params, notNotify)
	for field, value in pairs(params) do
		self:setProperty(field, value)
	end
	if not notNotify then
		SendPacket(actionCodes.Role_updateProperties, MsgPack.pack(params))
	end
end

function Role:notifyUpdateProperties(params)
	SendPacket(actionCodes.Role_updateProperties, MsgPack.pack(params))
end



function Role:data()
	return {
		id = self:getProperty("id"),
		name = self:getProperty("name"),
		level = self:getProperty("level"),
		diamond = self:getProperty("diamond"),
		reDiamond = self:getProperty("reDiamond"),
		items = self:getProperty("items"):toNumMap(),

	}
end

return Role