Role.lua
3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
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", ""},
loveStatus = {"string", ""}, --统计角色的最高 好感度等级 类型相关 -- type=loveL type=loveL
}
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,
loveStatus = 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
-- 某些字段更新改变量 改变量的定义由字段自身决定 {{type = ""}, }
function Role:changeUpdates(params, notNotify)
local changeUpdateFunc = {
["loveStatus"] = function(info)
self:setProperty("loveStatus", self:getProperty("loveStatus"):setv(info["field"], info["value"]))
return {type = "loveStatus", field = info["field"], value = info["value"]}
end,
}
local updates = {}
for _, one in ipairs(params) do
if changeUpdateFunc[one["type"]] then
table.insert(updates, changeUpdateFunc[one["type"]](one))
else
print("need handler for changeUpdate type : " .. params["type"])
end
end
if not notNotify and next(updates) then
SendPacket(actionCodes.Role_changeUpdate, MsgPack.pack(updates))
end
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(),
loveStatus = self:getProperty("loveStatus"):toNumMap(),
}
end
return Role