Blame view

src/models/Role.lua 11.7 KB
314bc5df   zhengshouren   提交服务器初始代码
1
2
  local Role = class("Role", require("shared.ModelBase"))
  
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
3
4
  local RolePlugin = import(".RolePlugin")
  local RoleTask = import(".RoleTask")
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
5
6
  local RoleActivity = import(".RoleActivity")
  local RoleChangeStruct = import(".RoleChangeStruct")
fa565e0c   zhouhaihai   优化结构
7
8
9
  local RolePvp = import(".RolePvp")
  local RoleCross = import(".RoleCross")
  
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
10
11
  RolePlugin.bind(Role)
  RoleTask.bind(Role)
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
12
13
  RoleActivity.bind(Role)
  RoleChangeStruct.bind(Role)
fa565e0c   zhouhaihai   优化结构
14
15
  RolePvp.bind(Role)
  RoleCross.bind(Role)
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
16
  
314bc5df   zhengshouren   提交服务器初始代码
17
18
  function Role:ctor( properties )
  	Role.super.ctor(self, properties)
314bc5df   zhengshouren   提交服务器初始代码
19
  	self.ignoreHeartbeat = false
09be9059   zhouhaihai   冒险接口
20
  	self.dailyData = nil
0a07bdd9   zhouahaihai   角色升级 。gm
21
  	self.heros = {}
43cc5f51   gaofengduan   调整 equip 数据结构
22
  	self.runeBag = {}
46fac6f1   zhouahaihai   酱料
23
  	self.advData = nil
1b20cfdb   zhouhaihai   赛季更新完善 无尽冒险排行榜
24
25
26
  
  	self.advElChapter = tonum(redisproxy:hget("adv_season", "chapter"), globalCsv.adv_endless_default_chapter) -- 无尽模式记录的赛季对应章节
  	self.advOverTime = tonum(redisproxy:hget("adv_season", "overTime")) -- 无尽模式关闭时间戳
314bc5df   zhengshouren   提交服务器初始代码
27
28
29
  end
  
  Role.schema = {
314bc5df   zhengshouren   提交服务器初始代码
30
31
  	id 					= {"number"},
  	uid 				= {"string", ""},
314bc5df   zhengshouren   提交服务器初始代码
32
  	name 				= {"string", ""},
dc9d814f   zhouhaihai   邮件
33
  	intro				= {"string", ""},
25cebbc5   zhouhaihai   增加默认头像id
34
  	headId				= {"number", globalCsv.defaultHead},
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
35
36
37
38
  	sid 				= {"number", 0},
  	device 				= {"string", ""},
  	banTime 			= {"number", 0},
  	banType 			= {"number", 0},
0a07bdd9   zhouahaihai   角色升级 。gm
39
40
41
42
  	ltime 				= {"number", 0}, -- 最后登录时间
  	ctime 				= {"number", skynet.timex()},  -- 创建时间
  	ignoreMt			= {"number", 0},  -- 忽略维护拦截
  	sversion			= {"number", globalCsv.StructVersion or 0}, -- 重整数据版本
312b9db5   zhouahaihai   背包
43
44
  	diamond				= {"number", 0},
  	reDiamond			= {"number", 0},
dc9d814f   zhouhaihai   邮件
45
46
  	setting				= {"table", {}}, --设置
  	codeStr				= {"string", ""}, --已经领过的礼包码
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
47
  	-- roleInfo
4b7c7c96   zhouahaihai   增加 清空 挂机 冒险gm 角色经验
48
49
  	level 				= {"number", 1},
  	exp 				= {"number", 0},
6947e382   zhouahaihai   好感度, 皮肤
50
  	items				= {"string", ""},
4faef572   zhouhaihai   冒险任务,冒险扫荡, 冒险中继
51
  	funcOpen			= {"table", {}}, --功能是否开放
bab30666   zhouhaihai   增加通用功能等级 字段
52
  	funcLv				= {"table", {}}, --功能等级
14f1591b   zhouhaihai   删除好感度相关
53
  	-- loveStatus			= {"string", ""}, --统计角色的最高 好感度等级 类型相关 -- type=loveL type=loveL
37037eeb   zhengshouren   计算奖励
54
  	crown				= {"number", 0},	-- 看伴娘
c384626d   zhouhaihai   好友
55
  	silent				= {"number", 0}, --禁言解禁时间
314bc5df   zhengshouren   提交服务器初始代码
56
  
312b9db5   zhouahaihai   背包
57
58
  	bagLimit 			= {"table", globalCsv.store_limit_max},
  
23d89d13   zhouahaihai   冒险 结构
59
  	--冒险相关
3aa11fb9   zhouhaihai   字段类型
60
  	advPass				= {"table", {}}, -- 通关记录  {chapterId = layer}
46fac6f1   zhouahaihai   酱料
61
  	advItems			= {"string", ""}, -- 冒险临时背包
09be9059   zhouhaihai   冒险接口
62
  	advInfo				= {"table", {}}, -- 冒险关卡信息 
46fac6f1   zhouahaihai   酱料
63
  	advTeam				= {"table", {}}, -- 冒险玩家队伍信息
3aa11fb9   zhouhaihai   字段类型
64
  	advHang				= {"table", {}}, -- 挂机信息  -- {chapterId = {format = teaminfo, time = endtime}}
4faef572   zhouhaihai   冒险任务,冒险扫荡, 冒险中继
65
66
  	advTask				= {"table", {}}, -- 冒险已领取任务完成状态 {id = status} --每层重置
  	advMTask			= {"table", {id = 1, status = 0, lock = true}}, -- 冒险主线任务 -- {id = id, status = status, lock = true} -- 当前主线id  当前主线状态 是否锁定状态
b176d7d3   zhouhaihai   冒险成就
67
  	advAchiev			= {"table", {}}, -- 冒险成就 {chapterId = {achievId = status, -1 = pt,  pts = {}}, }
6b5c9206   zhouhaihai   冒险资助升级属性奖励
68
  	advL				= {"table", {0, 0}}, -- 冒险队等级 {lv,  exp}
8da953a7   zhouhaihai   无尽模式
69
  	advElM				= {"number", 0}, -- 无尽模式通关的最高层数  endless max layer
1b20cfdb   zhouhaihai   赛季更新完善 无尽冒险排行榜
70
  	advElS				= {"number", 0}, -- 无尽模式记录的赛季  endless season  
ccbafe67   zhouhaihai   冒险神器和buff
71
72
73
  	advAFOpen			= {"table", {}}, -- 解锁的神器 {[id] = 1}
  	advAFGet			= {"table", {}}, -- 当前拥有的神器 {[id] = 等级}
  	advAFWear			= {"table", {}}, -- 当前拥有的神器 {[slot] = id}
764e5296   zhouhaihai   冒险抽奖保底
74
  	advDrawB			= {"table", {}}, -- 冒险抽奖回馈 {[1] = 0, [2] = 100} -- 池子类型 = 点数
e852b350   zhouhaihai   冒险成就类型增加
75
  	advStoryB			= {"table", {}}, -- 冒险故事完成记录 (连锁事件绑定的故事) -- {storyId = 1}
f8408529   zhouhaihai   冒险商店
76
  	advShop				= {"table", {}}, -- 冒险內的商店限制购买次数记录 {goodId = count}
46fff3ff   zhouhaihai   冒险手册
77
  	advEAchiev			= {"table", {}}, -- 冒险无尽冒险手册
0e3ab88d   zhouhaihai   中继层
78
  	advRelay			= {"table", {}}, -- 冒险中继点记录  {[chapter] = {[level] = 1}, [-1] = {[level] = 1}}  -- -1 无尽 方便重置
9ced5432   zhouhaihai   冒险支援效果 保底事件
79
80
  	advSup 				= {"table", {}}, -- 冒险支援效果 待选项
  	
384bb077   zhouahaihai   挂机
81
82
83
  	--挂机相关
  	hangPass 			= {"table", {}}, -- 挂机通过的最大关卡
  	hangTeam 			= {"table", {}}, -- 挂机队伍
fa565e0c   zhouhaihai   优化结构
84
  	hangTS				= {"table", {}}, -- 挂机队伍他人可读的队伍信息
f8408529   zhouhaihai   冒险商店
85
  	hangTB 				= {"table", {}}, -- 挂机队伍他人可用的战斗信息mao
fa565e0c   zhouhaihai   优化结构
86
87
  	hangTBV				= {"number", 0}, -- 挂机队伍他人可用的战斗力
  
384bb077   zhouahaihai   挂机
88
89
  	hangInfo			= {"table", {}},  -- 当前挂机信息
  	hangBag				= {"table", {}},	-- 背包
9962b061   zhouahaihai   补充 挂机
90
  	hangBagLimit 		= {"number", globalCsv.idle_field_origin}, --背包上限
f60b89b1   zhouhaihai   奖励副本
91
  	bTeam				= {"table", {}}, -- 奖励副本队伍
384bb077   zhouahaihai   挂机
92
  
71f716c4   chenyueqi   引导用到的字段
93
94
95
96
  	--引导相关
  	newerGuide 			= {"string","1=1"}, -- 新手引导 master=slave
  	funcGuide 			= {"string",""}, -- 功能引导 0=0跳过次数(999永久跳过) 1=1功能1触发情况
  
fa565e0c   zhouhaihai   优化结构
97
98
99
100
101
102
103
104
105
106
107
108
109
  	pvpTC				= {"table", {}},		-- pvp 编队普通
  	pvpTSC				= {"table", {}},		-- pvp 他人可读的队伍信息
  	pvpTBC				= {"table", {}},		-- pvp 他人可用的战斗信息
  	pvpTBVC				= {"number", 0},		-- pvp 他人可用的战斗力
  	pvpMC 				= {"table", {}},		-- pvp 匹配的对手 普通 {{t = 1, id = roleId}, {t = 2, id = id}, {t = 2, id = id}}   -- t 1 玩家 2 机器人 
  
  	pvpTH				= {"table", {}},		-- pvp 编队高级
  	pvpTSH				= {"table", {}},		-- pvp 他人可读的队伍信息
  	pvpTBH				= {"table", {}},		-- pvp 他人可用的战斗信息
  	pvpTBVH				= {"table", {}},		-- pvp 他人可用的战斗力
  	pvpMH 				= {"table", {}},		-- pvp 匹配的对手 高级 {{t = 1, id = roleId}, {t = 2, id = id}, {t = 2, id = id}}   -- t 1 玩家 2 机器人 
  
  
dbd0ca58   gaofengduan   car  营养剂制作
110
  	potionBag			= {"table", {}},	-- 营养剂背包
00e663bd   zhouhaihai   剧情相关
111
112
  
  	storyB				= {"table", {}}, -- 剧情记录
056c01a0   zhouhaihai   简化装备
113
114
  
  	equips				= {"table", {}}, -- 装备简化下, 目前的设计足够支撑   -- {t = {l = c}}  -- 接口设计好 底层扩展就重写~
9b35bf6e   zhouhaihai   开启时间箱
115
116
  
  	boxL				= {"table", {}}, -- boxList  正开启的箱子  -- {[1] = {id = 1010, gem = 101, time = 1313}}
276b1da9   zhouhaihai   爬塔接口
117
  
ea357636   zhouhaihai   爬塔初始层数
118
  	towerInfo			= {"table", {c = globalCsv.tower_count_limit, l = 1}}, -- 当天爬塔消耗的次数  -- {t = time, c = count, l = layer, k = battleKey}
276b1da9   zhouhaihai   爬塔接口
119
  	towerF				= {"table", {}}, -- 爬塔阵容 
03a6166a   zhouhaihai   餐厅优化
120
  
53e8037e   zhouhaihai   任务
121
122
123
124
125
126
127
  	spTask				= {"table", {}}, -- 特殊任务  -- {id = status}
  
  	dTask				= {"table", {}}, -- 每日任务 {t = {id = status}, a = 0, at = {id = status}}  t 任务完成情况 a 获得的活跃数值  at 活跃任务完成情况
  	wTask				= {"table", {}}, -- 每周任务 {t = {id = status}, a = 0, at = {id = status}}  t 任务完成情况 a 获得的活跃数值  at 活跃任务完成情况
  
  	achiveT				= {"table", {}}, -- 成就计数统计 achivement_type  {id = status}
  	achiveV				= {"table", {}}, -- 成就领奖统计 achivement  {id = status}
cccc9c70   zhouhaihai   商城
128
129
130
131
132
  
  	rechargeF			= {"table", {}}, -- 是否首次充值某一项 -- —{[id] = 1}  -- 不存在就是没有充值过
  	dinerS				= {"table", {}}, -- 美食币商城 购买记录 {[id] = count}
  
  	rmbC				= {"number", 0}, -- 人民币重置额
dc9d814f   zhouhaihai   邮件
133
134
  
  	emailSync			= {"number", 0}, -- 已经同步到的邮件Id
a35233c6   zhouhaihai   保底和回馈
135
136
137
  
  	repayHero			= {"number", 0}, -- 超级招募 回馈
  	floorHero			= {"table", {}}, -- 招募保底 -- {[poolId] = count}
314bc5df   zhengshouren   提交服务器初始代码
138
139
  }
  
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
140
  
0a07bdd9   zhouahaihai   角色升级 。gm
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
  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 {}
23d89d13   zhouahaihai   冒险 结构
156
  	if not self.schema[params.field] then return end
0a07bdd9   zhouahaihai   角色升级 。gm
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
  	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)
4cf74232   zhouhaihai   pvp
174
  	self:setProperties(params)
0a07bdd9   zhouahaihai   角色升级 。gm
175
176
177
178
179
180
181
182
183
  	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
  
23d89d13   zhouahaihai   冒险 结构
184
  -- 某些字段 更新改变量 改变量的定义由字段自身决定 {{type = ""}, }
6947e382   zhouahaihai   好感度, 皮肤
185
186
  function Role:changeUpdates(params, notNotify)
  	local changeUpdateFunc = {
14f1591b   zhouhaihai   删除好感度相关
187
188
189
190
  		-- ["loveStatus"] = function(info)
  		-- 	self:setProperty("loveStatus", self:getProperty("loveStatus"):setv(info["field"], info["value"]))
  		-- 	return {type = "loveStatus", field = info["field"], value = info["value"]}
  		-- end,
23d89d13   zhouahaihai   冒险 结构
191
192
193
194
195
196
  		--table 类型通用更新
  		["tableCommon"] = function(fieldType, info)
  			if self.class.schema[fieldType][1] ~= "table" then
  				error("[ERROR:] need handler for changeUpdate, field : " .. fieldType)
  				return
  			end
dbd0ca58   gaofengduan   car  营养剂制作
197
  			--支持多深度单字段
23d89d13   zhouahaihai   冒险 结构
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
  			local curValue = self:getProperty(fieldType)
  			if type(info["field"]) == "table" then
  				for _idx, _field in ipairs(info["field"]) do
  					if _idx < #info["field"] then
  						curValue[_field] = curValue[_field] or {}
  						curValue = curValue[_field]
  					else
  						curValue[_field] = info["value"]
  					end
  				end
  			else
  				curValue[info["field"]] = info["value"]
  			end
  			self:setProperty(fieldType)
  			return {type = fieldType, field = info["field"], value = info["value"]}
  		end,
00e663bd   zhouhaihai   剧情相关
214
215
216
  		["onlyToC"] = function(info)
  			return info
  		end,
6947e382   zhouahaihai   好感度, 皮肤
217
  	}
0a07bdd9   zhouahaihai   角色升级 。gm
218
  
6947e382   zhouahaihai   好感度, 皮肤
219
220
221
222
  	local updates = {}
  	for _, one in ipairs(params) do
  		if changeUpdateFunc[one["type"]] then
  			table.insert(updates, changeUpdateFunc[one["type"]](one))
00e663bd   zhouhaihai   剧情相关
223
224
225
  		elseif one.isOnlyToC then
  			one.isOnlyToC = nil
  			table.insert(updates, one)
6947e382   zhouahaihai   好感度, 皮肤
226
  		else
23d89d13   zhouahaihai   冒险 结构
227
  			table.insert(updates, changeUpdateFunc["tableCommon"](one["type"], one))
6947e382   zhouahaihai   好感度, 皮肤
228
229
230
231
232
233
  		end
  	end
  	if not notNotify and next(updates) then
  		SendPacket(actionCodes.Role_changeUpdate, MsgPack.pack(updates))
  	end
  end
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
234
  
314bc5df   zhengshouren   提交服务器初始代码
235
236
237
  function Role:data()
  	return {
  		id = self:getProperty("id"),
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
238
  		name = self:getProperty("name"),
dc9d814f   zhouhaihai   邮件
239
  		intro = self:getProperty("intro"),
59835765   zhouhaihai   排行榜
240
  		headId = self:getProperty("headId"),
dc9d814f   zhouhaihai   邮件
241
  		setting = self:getProperty("setting"),
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
242
  		level = self:getProperty("level"),
4b7c7c96   zhouahaihai   增加 清空 挂机 冒险gm 角色经验
243
  		exp = self:getProperty("exp"),
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
244
  		items = self:getProperty("items"):toNumMap(),
4faef572   zhouhaihai   冒险任务,冒险扫荡, 冒险中继
245
  		funcOpen = self:getProperty("funcOpen"),
bab30666   zhouhaihai   增加通用功能等级 字段
246
  		funcLv = self:getProperty("funcLv"),
14f1591b   zhouhaihai   删除好感度相关
247
  		-- loveStatus = self:getProperty("loveStatus"):toNumMap(),
312b9db5   zhouahaihai   背包
248
249
  		diamond = self:getAllDiamond(),
  		bagLimit = self:getProperty("bagLimit"),
8474ca36   zhouhaihai   聊天
250
  		silent = self:getProperty("silent"),
dbd0ca58   gaofengduan   car  营养剂制作
251
  
23d89d13   zhouahaihai   冒险 结构
252
253
  		advPass = self:getProperty("advPass"),
  		advInfo = self:getProperty("advInfo"),
46fac6f1   zhouahaihai   酱料
254
  		advItems = self:getProperty("advItems"):toNumMap(),
36c30c5c   zhouahaihai   冒险
255
  		advTeam = self:getProperty("advTeam"),
09be9059   zhouhaihai   冒险接口
256
257
  		advHang = self:getProperty("advHang"),
  		advTask = self:getProperty("advTask"),
f99f48df   zhouhaihai   冒险任务
258
  		advMTask = self:getProperty("advMTask"),
bab30666   zhouhaihai   增加通用功能等级 字段
259
260
  		advAchiev = self:getProperty("advAchiev"),
  		advL = self:getProperty("advL"),
8da953a7   zhouhaihai   无尽模式
261
  		advElM = self:getProperty("advElM"),
0e3ab88d   zhouhaihai   中继层
262
  		advElS = self:getProperty("advElS"),
1b20cfdb   zhouhaihai   赛季更新完善 无尽冒险排行榜
263
264
  		advElChapter = self.advElChapter,
  		advOverTime = self.advOverTime,
ccbafe67   zhouhaihai   冒险神器和buff
265
266
  		advAFGet = self:getProperty("advAFGet"),
  		advAFWear = self:getProperty("advAFWear"),
764e5296   zhouhaihai   冒险抽奖保底
267
  		advDrawB = self:getProperty("advDrawB"),
f8408529   zhouhaihai   冒险商店
268
  		advShop = self:getProperty("advShop"),
46fff3ff   zhouhaihai   冒险手册
269
  		advEAchiev = self:getProperty("advEAchiev"),
9ced5432   zhouhaihai   冒险支援效果 保底事件
270
  		advSup = self:getProperty("advSup"),
384bb077   zhouahaihai   挂机
271
272
273
274
275
276
  
  		hangPass = self:getProperty("hangPass"),
  		hangTeam = self:getProperty("hangTeam"),
  		hangInfo = self:getProperty("hangInfo"),
  		hangBag = self:getProperty("hangBag"),
  		hangBagLimit = self:getProperty("hangBagLimit"),
f60b89b1   zhouhaihai   奖励副本
277
  		bTeam = self:getProperty("bTeam"),
dbd0ca58   gaofengduan   car  营养剂制作
278
  
71f716c4   chenyueqi   引导用到的字段
279
280
281
  		newerGuide = self:getProperty("newerGuide"),
  		funcGuide = self:getProperty("funcGuide"),
  
fa565e0c   zhouhaihai   优化结构
282
283
284
  		pvpTC = self:getProperty("pvpTC"),
  		pvpTH = self:getProperty("pvpTH"),
  
dbd0ca58   gaofengduan   car  营养剂制作
285
  		potionBag = self:getProperty("potionBag"),
1c3053c3   zhouhaihai   返回数据
286
  		storyB = self:getProperty("storyB"),
056c01a0   zhouhaihai   简化装备
287
  		equips = self:getProperty("equips"),
9b35bf6e   zhouhaihai   开启时间箱
288
  		boxL = self:getProperty("boxL"),
276b1da9   zhouhaihai   爬塔接口
289
290
  		towerInfo = self:getProperty("towerInfo"),
  		towerF = self:getProperty("towerF"),
03a6166a   zhouhaihai   餐厅优化
291
  		spTask = self:getProperty("spTask"),
53e8037e   zhouhaihai   任务
292
293
294
295
  		dTask = self:getProperty("dTask"),
  		wTask = self:getProperty("wTask"),
  		achiveT = self:getProperty("achiveT"),
  		achiveV = self:getProperty("achiveV"),
cccc9c70   zhouhaihai   商城
296
297
298
299
300
  
  		rechargeF = self:getProperty("rechargeF"),
  		dinerS = self:getProperty("dinerS"),
  		
  		rmbC = self:getProperty("rmbC"),
a35233c6   zhouhaihai   保底和回馈
301
302
  		repayHero = self:getProperty("repayHero"),
  		floorHero = self:getProperty("floorHero"),
314bc5df   zhengshouren   提交服务器初始代码
303
304
305
306
  	}
  end
  
  return Role