Blame view

src/models/Role.lua 18.8 KB
0de80321   liuzujun   创建游戏数据库,role对应mys...
1
  local Role = class("Role", require("shared.ModelBaseMysql"))
314bc5df   zhengshouren   提交服务器初始代码
2
  
cfd68b3a   zhouhaihai   时间重置 新逻辑
3
4
5
6
  local RoleLog = import(".RoleLog")  --日志相关
  local RolePlugin = import(".RolePlugin")  --基础功能
  local RoleTimeReset = import(".RoleTimeReset")  --时间重置相关
  local RoleTask = import(".RoleTask") --角色任务
cfd68b3a   zhouhaihai   时间重置 新逻辑
7
8
9
  local RoleChangeStruct = import(".RoleChangeStruct") --角色数据额结构更改
  local RolePvp = import(".RolePvp")  -- pvp
  local RoleCross = import(".RoleCross") -- 跨服务请求相关
d4e9b817   zhouhaihai   战斗 日志
10
  local RoleBattle = import(".RoleBattle") -- 跨服务请求相关
e84a1beb   liuzujun   gm后台查询日志,公告相关协议
11
  local mysqlproxy = require "shared.mysqlproxy"
fa565e0c   zhouhaihai   优化结构
12
  
4c5d72ab   zhouhaihai   高级pvp
13
  RoleLog.bind(Role)
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
14
  RolePlugin.bind(Role)
cfd68b3a   zhouhaihai   时间重置 新逻辑
15
  RoleTimeReset.bind(Role)
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
16
  RoleTask.bind(Role)
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
17
  RoleChangeStruct.bind(Role)
fa565e0c   zhouhaihai   优化结构
18
19
  RolePvp.bind(Role)
  RoleCross.bind(Role)
d4e9b817   zhouhaihai   战斗 日志
20
  RoleBattle.bind(Role)
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
21
  
314bc5df   zhengshouren   提交服务器初始代码
22
23
  function Role:ctor( properties )
  	Role.super.ctor(self, properties)
314bc5df   zhengshouren   提交服务器初始代码
24
  	self.ignoreHeartbeat = false
09be9059   zhouhaihai   冒险接口
25
  	self.dailyData = nil
317a46a9   liuzujun   添加特权卡
26
  	self.storeData = nil
0a07bdd9   zhouahaihai   角色升级 。gm
27
  	self.heros = {}
43cc5f51   gaofengduan   调整 equip 数据结构
28
  	self.runeBag = {}
6136eaca   liuzujun   添加好友表
29
  	self.friends = {}
3d8468b2   liuzujun   火花系统
30
  	self.sparkBag = {}
555f745e   zhangqijia   feat: 一番赏
31
  	self.capsules = {}
46fac6f1   zhouahaihai   酱料
32
  	self.advData = nil
9a1c54b2   zhouhaihai   活动
33
  	self.activity = nil
072db127   zhouhaihai   推送
34
  	self._pushToken = nil
e9bfa7a2   liuzujun   其他玩家展示界面数据支持, 更新s...
35
      self._lastSaveTs = skynet.timex()
1b20cfdb   zhouhaihai   赛季更新完善 无尽冒险排行榜
36
37
  	self.advElChapter = tonum(redisproxy:hget("adv_season", "chapter"), globalCsv.adv_endless_default_chapter) -- 无尽模式记录的赛季对应章节
  	self.advOverTime = tonum(redisproxy:hget("adv_season", "overTime")) -- 无尽模式关闭时间戳
8a57b603   zhouhaihai   初始化冒险重置时间
38
39
40
41
42
43
44
  	if self.advOverTime == 0 then
  		local now = skynet.timex()
  		if math.floor(now / (3600 * 24 * 7)) % 2 == 1 then
  			self.advOverTime = 3600 * 24 * 7
  		end
  		self.advOverTime = self.advOverTime + specMonday(now) + 3600 * 24 * 6
  	end
fb3d084d   liuzujun   月卡赛季卡发送邮件奖励
45
  	self.sendMailFlag = false		--发送邮件标识
314bc5df   zhengshouren   提交服务器初始代码
46
47
  end
  
0de80321   liuzujun   创建游戏数据库,role对应mys...
48
  -- type, default value, key type, length
314bc5df   zhengshouren   提交服务器初始代码
49
  Role.schema = {
0de80321   liuzujun   创建游戏数据库,role对应mys...
50
  	id 					= {"number", 0, "pri"},
314bc5df   zhengshouren   提交服务器初始代码
51
  	uid 				= {"string", ""},
314bc5df   zhengshouren   提交服务器初始代码
52
  	name 				= {"string", ""},
0de80321   liuzujun   创建游戏数据库,role对应mys...
53
  	intro				= {"string", "", "", 1024},
25cebbc5   zhouhaihai   增加默认头像id
54
  	headId				= {"number", globalCsv.defaultHead},
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
55
56
  	sid 				= {"number", 0},
  	device 				= {"string", ""},
aa74d6ef   zhouhaihai   掉落反馈
57
  	dmode				= {"string", ""},
93f6e69b   liuzujun   拾荒选择时间,抽卡增加sr保底
58
  	lday				= {"number", 0},
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
59
60
  	banTime 			= {"number", 0},
  	banType 			= {"number", 0},
e84a1beb   liuzujun   gm后台查询日志,公告相关协议
61
  	banReason 			= {"string", "", "", 512},
e3c5cc5e   zhouhaihai   跨服竞技场over
62
  	heartWarning 		= {"number", 0},
edf2ee12   zhouhaihai   防作弊
63
  	cheatCount			= {"number", 0},
0a07bdd9   zhouahaihai   角色升级 。gm
64
65
66
  	ltime 				= {"number", 0}, -- 最后登录时间
  	ctime 				= {"number", skynet.timex()},  -- 创建时间
  	ignoreMt			= {"number", 0},  -- 忽略维护拦截
67b46a6b   zhouhaihai   修复存在的冒险进不去的玩家
67
  	sversion			= {"number", STRUCT_VERSION or 0}, -- 重整数据版本
cfd68b3a   zhouhaihai   时间重置 新逻辑
68
  	timeReset			= {"table", {}}, --重置轮回记录
3d8050ef   liuzujun   钻石3改成虹光玉8
69
  	jade				= {"number", 0}, -- 虹光玉
4f40cc1a   chenyueqi   付费钻区分ios钻和android钻
70
71
72
  	diamond				= {"number", 0}, -- 免费钻
  	reDiamond			= {"number", 0}, -- android充值钻
  	reDiamondIos		= {"number", 0}, -- ios充值钻
dc9d814f   zhouhaihai   邮件
73
  	setting				= {"table", {}}, --设置
0de80321   liuzujun   创建游戏数据库,role对应mys...
74
  	codeStr				= {"string", "", "blob"}, --已经领过的礼包码
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
75
  	-- roleInfo
4b7c7c96   zhouahaihai   增加 清空 挂机 冒险gm 角色经验
76
77
  	level 				= {"number", 1},
  	exp 				= {"number", 0},
0de80321   liuzujun   创建游戏数据库,role对应mys...
78
  	items				= {"string", "", "blob"},
bd4fb541   zhouhaihai   增加物品过期系统
79
  	expireItem			= {"table", {}}, --物品过期检查
4faef572   zhouhaihai   冒险任务,冒险扫荡, 冒险中继
80
  	funcOpen			= {"table", {}}, --功能是否开放
bab30666   zhouhaihai   增加通用功能等级 字段
81
  	funcLv				= {"table", {}}, --功能等级
14f1591b   zhouhaihai   删除好感度相关
82
  	-- loveStatus			= {"string", ""}, --统计角色的最高 好感度等级 类型相关 -- type=loveL type=loveL
37037eeb   zhengshouren   计算奖励
83
  	crown				= {"number", 0},	-- 看伴娘
c384626d   zhouhaihai   好友
84
  	silent				= {"number", 0}, --禁言解禁时间
e84a1beb   liuzujun   gm后台查询日志,公告相关协议
85
  	silentType 			= {"number", 0},    -- 禁言类型
47904e51   chenyueqi   创角后的时间礼包
86
  	timeGift 			= {"number", 0}, -- 创建角色时间礼包
314bc5df   zhengshouren   提交服务器初始代码
87
  
312b9db5   zhouahaihai   背包
88
89
  	bagLimit 			= {"table", globalCsv.store_limit_max},
  
23d89d13   zhouahaihai   冒险 结构
90
  	--冒险相关
3aa11fb9   zhouhaihai   字段类型
91
  	advPass				= {"table", {}}, -- 通关记录  {chapterId = layer}
0de80321   liuzujun   创建游戏数据库,role对应mys...
92
  	advItems			= {"string", "", "blob"}, -- 冒险临时背包
09be9059   zhouhaihai   冒险接口
93
  	advInfo				= {"table", {}}, -- 冒险关卡信息 
46fac6f1   zhouahaihai   酱料
94
  	advTeam				= {"table", {}}, -- 冒险玩家队伍信息
3aa11fb9   zhouhaihai   字段类型
95
  	advHang				= {"table", {}}, -- 挂机信息  -- {chapterId = {format = teaminfo, time = endtime}}
4faef572   zhouhaihai   冒险任务,冒险扫荡, 冒险中继
96
97
  	advTask				= {"table", {}}, -- 冒险已领取任务完成状态 {id = status} --每层重置
  	advMTask			= {"table", {id = 1, status = 0, lock = true}}, -- 冒险主线任务 -- {id = id, status = status, lock = true} -- 当前主线id  当前主线状态 是否锁定状态
b176d7d3   zhouhaihai   冒险成就
98
  	advAchiev			= {"table", {}}, -- 冒险成就 {chapterId = {achievId = status, -1 = pt,  pts = {}}, }
6b5c9206   zhouhaihai   冒险资助升级属性奖励
99
  	advL				= {"table", {0, 0}}, -- 冒险队等级 {lv,  exp}
8da953a7   zhouhaihai   无尽模式
100
  	advElM				= {"number", 0}, -- 无尽模式通关的最高层数  endless max layer
1b20cfdb   zhouhaihai   赛季更新完善 无尽冒险排行榜
101
  	advElS				= {"number", 0}, -- 无尽模式记录的赛季  endless season  
ccbafe67   zhouhaihai   冒险神器和buff
102
103
104
  	advAFOpen			= {"table", {}}, -- 解锁的神器 {[id] = 1}
  	advAFGet			= {"table", {}}, -- 当前拥有的神器 {[id] = 等级}
  	advAFWear			= {"table", {}}, -- 当前拥有的神器 {[slot] = id}
764e5296   zhouhaihai   冒险抽奖保底
105
  	advDrawB			= {"table", {}}, -- 冒险抽奖回馈 {[1] = 0, [2] = 100} -- 池子类型 = 点数
e852b350   zhouhaihai   冒险成就类型增加
106
  	advStoryB			= {"table", {}}, -- 冒险故事完成记录 (连锁事件绑定的故事) -- {storyId = 1}
f8408529   zhouhaihai   冒险商店
107
  	advShop				= {"table", {}}, -- 冒险內的商店限制购买次数记录 {goodId = count}
46fff3ff   zhouhaihai   冒险手册
108
  	advEAchiev			= {"table", {}}, -- 冒险无尽冒险手册
0e3ab88d   zhouhaihai   中继层
109
  	advRelay			= {"table", {}}, -- 冒险中继点记录  {[chapter] = {[level] = 1}, [-1] = {[level] = 1}}  -- -1 无尽 方便重置
9ced5432   zhouhaihai   冒险支援效果 保底事件
110
  	advSup 				= {"table", {}}, -- 冒险支援效果 待选项
17d8d855   zhouhaihai   冒险 时间 limit 改为全局
111
  	advLimit			= {"table", {}}, -- 冒险事件每次的limit
fc316d1f   zhouhaihai   冒险体力优化
112
113
  	advC				= {"number", 0}, -- 冒险次数(消耗体力)
  	advCT 				= {"number", 0}, -- 冒险次数 上次恢复时间
36875ec5   zhouhaihai   宝藏怪
114
115
  	advMine				= {"table", {}}, -- -- {1 = {ch = 0, co = {id = count}}, 2 = {ch = 0, co = {id = count}}} 宝藏怪刷出概率 1 宝藏怪 2 宝藏洞  ch 概率 co 不同id 次数记录
   	
384bb077   zhouahaihai   挂机
116
117
  	--挂机相关
  	hangPass 			= {"table", {}}, -- 挂机通过的最大关卡
a6508219   zhouhaihai   挂机奖励
118
  	hangGift			= {"table", {}}, -- 挂机奖励 {id = 1}
fa565e0c   zhouhaihai   优化结构
119
  	hangTS				= {"table", {}}, -- 挂机队伍他人可读的队伍信息
f8408529   zhouhaihai   冒险商店
120
  	hangTB 				= {"table", {}}, -- 挂机队伍他人可用的战斗信息mao
fa565e0c   zhouhaihai   优化结构
121
122
  	hangTBV				= {"number", 0}, -- 挂机队伍他人可用的战斗力
  
384bb077   zhouahaihai   挂机
123
124
  	hangInfo			= {"table", {}},  -- 当前挂机信息
  	hangBag				= {"table", {}},	-- 背包
9962b061   zhouahaihai   补充 挂机
125
  	hangBagLimit 		= {"number", globalCsv.idle_field_origin}, --背包上限
98d32f92   liuzujun   多编队
126
127
128
  	hangTeams			= {"table", {}},	-- pve自选编队
  	teamIndex			= {"table", {}},	-- 各个系统使用的编队索引 type->index 见TeamSystemType
  	advTeams			= {"table", {}},	-- 拾荒自选编队
761b3ea8   chenyueqi   再改一波电波塔整容相关信息
129
  	towerTeams 			= {"table", {}}, 	-- 四个电波塔的队伍
384bb077   zhouahaihai   挂机
130
  
3c51e6d4   zhouhaihai   奖励副本 完成
131
  	bonusStar			= {"table", {}}, 	-- 奖励关卡 通关星星  {[id] = 1}  三个二进制位 表示三个星 从低到高  (1 << 0) (1 << 1) (1 << 2)  满星 (1 << 3) - 1
29fbbc10   zhouhaihai   夜间打工
132
133
  	workStar			= {"table", {}},	-- 夜间玩法 通关星星  {[id] = 1}  三个二进制位 表示三个星 从低到高  (1 << 0) (1 << 1) (1 << 2)  满星 (1 << 3) - 1
  	workBattle 			= {"table", {}},	-- 夜间玩法记录 {[1] = 1, [2] = 1, [3] = 1,  [4] = 1, round = 10} -- 第N天打了多少次 round 轮次
3c51e6d4   zhouhaihai   奖励副本 完成
134
  
71f716c4   chenyueqi   引导用到的字段
135
  	--引导相关
0de80321   liuzujun   创建游戏数据库,role对应mys...
136
137
  	newerGuide 			= {"string","1=1", "", 10}, -- 新手引导 master=slave
  	funcGuide 			= {"string","", "blob"}, -- 功能引导 0=0跳过次数(999永久跳过) 1=1功能1触发情况
71f716c4   chenyueqi   引导用到的字段
138
  
fa565e0c   zhouhaihai   优化结构
139
140
141
142
143
144
145
146
147
148
149
  	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 机器人 
cfd68b3a   zhouhaihai   时间重置 新逻辑
150
151
152
  	pvpHGift			= {"table", {}},		-- pvp 高级段位每小时奖励缓存
  	pvpHGTime			= {"number", 0},		-- pvp 高级段位上次奖励刷新时间
  	pvpShop				= {"table", {}}, 		-- pvp 商店{id = count}  对应商店id 购买次数
e3c5cc5e   zhouhaihai   跨服竞技场over
153
  	pvpBet				= {"table", {}},		-- 跨服竞技场押注信息 {[round] = {1, 1000}}
fa565e0c   zhouhaihai   优化结构
154
  
dbd0ca58   gaofengduan   car  营养剂制作
155
  	potionBag			= {"table", {}},	-- 营养剂背包
00e663bd   zhouhaihai   剧情相关
156
157
  
  	storyB				= {"table", {}}, -- 剧情记录
056c01a0   zhouhaihai   简化装备
158
159
  
  	equips				= {"table", {}}, -- 装备简化下, 目前的设计足够支撑   -- {t = {l = c}}  -- 接口设计好 底层扩展就重写~
9b35bf6e   zhouhaihai   开启时间箱
160
161
  
  	boxL				= {"table", {}}, -- boxList  正开启的箱子  -- {[1] = {id = 1010, gem = 101, time = 1313}}
276b1da9   zhouhaihai   爬塔接口
162
  
03c619fb   chenyueqi   电波塔属性塔功能部分功能草稿
163
164
  	towerInfo			= {"table", {c = globalCsv.tower_count_limit, l = 1, l1 = 10001, l2 = 20001, l3 = 30001}}, -- 当天爬塔消耗的次数  -- {t = time, c = count, l = layer, k = battleKey}
  	towerBnous			= {"table", {}}, -- 电波塔加成 {[1] = {[1] = 1, [2] = 1}, [2] = {}, [3] = {}, [4] = {}}
03a6166a   zhouhaihai   餐厅优化
165
  
53e8037e   zhouhaihai   任务
166
167
168
169
170
171
172
  	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}
e6e49b45   liuzujun   一键领取成就奖励
173
  	fuxR				= {"number", 0}, -- 复兴成就最大完成数量	
cccc9c70   zhouhaihai   商城
174
175
176
  
  	rechargeF			= {"table", {}}, -- 是否首次充值某一项 -- —{[id] = 1}  -- 不存在就是没有充值过
  	dinerS				= {"table", {}}, -- 美食币商城 购买记录 {[id] = count}
317a46a9   liuzujun   添加特权卡
177
  	battlePoint			= {"number", 0}, -- 赛季卡使用的活跃点
cccc9c70   zhouhaihai   商城
178
179
  
  	rmbC				= {"number", 0}, -- 人民币重置额
e52c384f   liuzujun   探索指令bug, 充值返利活动
180
  	twdC				= {"number", 0}, -- 台币总充值金额
dc9d814f   zhouhaihai   邮件
181
182
  
  	emailSync			= {"number", 0}, -- 已经同步到的邮件Id
a35233c6   zhouhaihai   保底和回馈
183
  
fb3d084d   liuzujun   月卡赛季卡发送邮件奖励
184
  	repayHero			= {"number", 0}, -- 招募次数 (除去友情招募)
c8d4058c   liuzujun   保底机制修改,200次出未拥有的永雄
185
  	repayMaxC			= {"number", 0}, -- 招募保底英雄领取次数 100一次
a35233c6   zhouhaihai   保底和回馈
186
  	floorHero			= {"table", {}}, -- 招募保底 -- {[poolId] = count}
3c0ea5fb   zhouhaihai   抽英雄
187
  	ssrUp				= {"table", {}}, -- ssr up -- {[poolId] = count}
86584add   liuzujun   新手卡池,心愿单卡池
188
189
  	newerDraw			= {"number", 0}, -- 新手池子抽卡次数
  	wishPool			= {"table", {}}, -- 心愿池子
d763fb14   zhouhaihai   签到 九宫格
190
191
  
  	sudoku				= {"table", {}}, -- 九宫格   {[-1] = 1, task = {[1] = {}, [2] = {}}}} -- [-1] 阶段 如果为 -1 关闭(都做完了), task 当前阶段任务进度, reward  连串奖励领取情况
31d3a423   zhouhaihai   签到
192
  	sign 				= {"table", {}}, -- 签到记录 {[1] = 20181029}
9cede2e2   zhouhaihai   主推红点 和冒险次数
193
194
  
  	redp 				= {"table", {}}, -- 待消除红点 -- 通常打开对应界面就消除的红点  红点消除的方法 在对应的协议中使用 {tag = pms }
ed20f277   zhouhaihai   chatline 奖励
195
196
  
  	chatline			= {"table", {}}, -- 奖励发放 id=时间
9ea0c502   liuzujun   限时礼包
197
198
  
  	downCvR				= {"number", 0}, -- 下载cv扩展包奖励 
51d9d20b   liuzujun   付费签到,应用市场反馈
199
  	feedback			= {"table", {}}, -- 反馈相关信息  {flag = false, count = 0} 	flag是否评论过,count 提示次数
e0ad10e9   liuzujun   英雄帖任务简单类型测试
200
  
78e5b90e   liuzujun   完成需求:新玩家任务
201
  	calTask				= {"table", {}}, -- 英雄帖活动 日历任务活动
dfa9ae5e   liuzujun   战令任务活动
202
  	bcTask				= {"table", {}}, -- 英雄令活动 日历任务活动 临时使用
78e5b90e   liuzujun   完成需求:新玩家任务
203
  	nbTask				= {"table", {}}, -- 新用户活动
16634605   liuzujun   多队挂机,天赋道具合成
204
  	radioTask			= {"table", {}}, -- 电台任务 {id = {time=end_ts,heros=heros}}	表crusadeCsv
65b551a7   chenyueqi   海港贸易季初版
205
  
62c5e2f0   chenyueqi   海港贸易活动自动领取结算奖励时,增...
206
  	seaport 			= {"table", {}}, -- 海岛贸易季 {time = 1234567890, donate = {}, collect = {[1] = {team = "1=2=3", time = 1234567890}}, shop = {}, join = 1}
a5dc3b0e   chenyueqi   回归活动初版
207
208
  
  	returner			= {"table", {}}, -- 回归者 {time = 12334233423, [1] = 1, [2] = 2, status = {[1] = 1}}
d99a4962   liuzujun   火花系统建表,新增虹光玉
209
210
  
  	roleIncre			= {"table", {}},  -- 角色英雄,铭文,火花自增序列 {heroId = 1, runeId = 1, sparkId = 1}
ba33bcac   liuzujun   挂机章节解锁
211
212
  
  	unlockChap			= {"table", {}},	-- 解锁的章节
e9bfa7a2   liuzujun   其他玩家展示界面数据支持, 更新s...
213
214
215
216
  
  	heroCnt			    = {"number", 0},	-- 英雄数量
  	friendTeam			= {"table", {}},	-- 好友切磋队伍信息 {bInfo = {}, team = {}, v = 0}
  	bgId			    = {"number", 0},	-- 看板娘id
314bc5df   zhengshouren   提交服务器初始代码
217
218
  }
  
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
219
  
0a07bdd9   zhouahaihai   角色升级 。gm
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
  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   冒险 结构
235
  	if not self.schema[params.field] then return end
0a07bdd9   zhouahaihai   角色升级 。gm
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
  	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
253
  	self:setProperties(params)
0a07bdd9   zhouahaihai   角色升级 。gm
254
255
256
257
258
259
260
261
262
  	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
  
284482c6   zhouhaihai   冒险成就
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
  local mapToList
  mapToList = function(map)
  	local result = {}
  	if type(map) == "table" then
  		for k, v in pairs(map) do
  			for _, _one in ipairs(mapToList(v)) do
  				table.insert(result, {k, table.unpack(_one)})
  			end
  		end
  	else
  		table.insert(result, {map})
  	end
  	return result
  end
  
  function Role:changeMapUpdates(params, notNotify)
  	local changes = {}
  	for _, one in ipairs(mapToList(params)) do
  		local ftype = table.remove(one, 1)
  		local value = table.remove(one, #one)
  		if ftype and value and #one > 0 then
  			table.insert(changes, {type = ftype, field = #one > 1 and one or one[1], value = value})
  		else
  			print("ERROR: changeMapUpdates")
  			dump(params)
  		end
  	end
  	self:changeUpdates(changes, notNotify)
  end
  
23d89d13   zhouahaihai   冒险 结构
293
  -- 某些字段 更新改变量 改变量的定义由字段自身决定 {{type = ""}, }
6947e382   zhouahaihai   好感度, 皮肤
294
  function Role:changeUpdates(params, notNotify)
284482c6   zhouhaihai   冒险成就
295
  	local needSetProperty = {}
6947e382   zhouahaihai   好感度, 皮肤
296
  	local changeUpdateFunc = {
14f1591b   zhouhaihai   删除好感度相关
297
298
299
300
  		-- ["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   冒险 结构
301
302
303
304
305
306
  		--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  营养剂制作
307
  			--支持多深度单字段
23d89d13   zhouahaihai   冒险 结构
308
309
310
311
312
313
314
315
316
317
318
319
320
  			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
284482c6   zhouhaihai   冒险成就
321
  			needSetProperty[fieldType] = 1
23d89d13   zhouahaihai   冒险 结构
322
323
  			return {type = fieldType, field = info["field"], value = info["value"]}
  		end,
00e663bd   zhouhaihai   剧情相关
324
325
326
  		["onlyToC"] = function(info)
  			return info
  		end,
6947e382   zhouahaihai   好感度, 皮肤
327
  	}
0a07bdd9   zhouahaihai   角色升级 。gm
328
  
6947e382   zhouahaihai   好感度, 皮肤
329
330
331
332
  	local updates = {}
  	for _, one in ipairs(params) do
  		if changeUpdateFunc[one["type"]] then
  			table.insert(updates, changeUpdateFunc[one["type"]](one))
00e663bd   zhouhaihai   剧情相关
333
334
335
  		elseif one.isOnlyToC then
  			one.isOnlyToC = nil
  			table.insert(updates, one)
6947e382   zhouahaihai   好感度, 皮肤
336
  		else
23d89d13   zhouahaihai   冒险 结构
337
  			table.insert(updates, changeUpdateFunc["tableCommon"](one["type"], one))
6947e382   zhouahaihai   好感度, 皮肤
338
339
  		end
  	end
284482c6   zhouhaihai   冒险成就
340
341
342
343
  
  	for fieldType, _ in pairs(needSetProperty) do
  		self:setProperty(fieldType)
  	end
6947e382   zhouahaihai   好感度, 皮肤
344
345
346
347
  	if not notNotify and next(updates) then
  		SendPacket(actionCodes.Role_changeUpdate, MsgPack.pack(updates))
  	end
  end
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
348
  
314bc5df   zhengshouren   提交服务器初始代码
349
350
351
  function Role:data()
  	return {
  		id = self:getProperty("id"),
e84a1beb   liuzujun   gm后台查询日志,公告相关协议
352
  		uid = self:getProperty("uid"),
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
353
  		name = self:getProperty("name"),
dc9d814f   zhouhaihai   邮件
354
  		intro = self:getProperty("intro"),
59835765   zhouhaihai   排行榜
355
  		headId = self:getProperty("headId"),
dc9d814f   zhouhaihai   邮件
356
  		setting = self:getProperty("setting"),
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
357
  		level = self:getProperty("level"),
4b7c7c96   zhouahaihai   增加 清空 挂机 冒险gm 角色经验
358
  		exp = self:getProperty("exp"),
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
359
  		items = self:getProperty("items"):toNumMap(),
4faef572   zhouhaihai   冒险任务,冒险扫荡, 冒险中继
360
  		funcOpen = self:getProperty("funcOpen"),
bab30666   zhouhaihai   增加通用功能等级 字段
361
  		funcLv = self:getProperty("funcLv"),
14f1591b   zhouhaihai   删除好感度相关
362
  		-- loveStatus = self:getProperty("loveStatus"):toNumMap(),
cfd68b3a   zhouhaihai   时间重置 新逻辑
363
  		timeReset = self:getProperty("timeReset"),
312b9db5   zhouahaihai   背包
364
365
  		diamond = self:getAllDiamond(),
  		bagLimit = self:getProperty("bagLimit"),
e84a1beb   liuzujun   gm后台查询日志,公告相关协议
366
367
  		--silent = self:getProperty("silent"),
  		silent = 0,
47904e51   chenyueqi   创角后的时间礼包
368
  		timeGift = self:getProperty("timeGift"),
dbd0ca58   gaofengduan   car  营养剂制作
369
  
23d89d13   zhouahaihai   冒险 结构
370
371
  		advPass = self:getProperty("advPass"),
  		advInfo = self:getProperty("advInfo"),
46fac6f1   zhouahaihai   酱料
372
  		advItems = self:getProperty("advItems"):toNumMap(),
36c30c5c   zhouahaihai   冒险
373
  		advTeam = self:getProperty("advTeam"),
09be9059   zhouhaihai   冒险接口
374
375
  		advHang = self:getProperty("advHang"),
  		advTask = self:getProperty("advTask"),
f99f48df   zhouhaihai   冒险任务
376
  		advMTask = self:getProperty("advMTask"),
bab30666   zhouhaihai   增加通用功能等级 字段
377
378
  		advAchiev = self:getProperty("advAchiev"),
  		advL = self:getProperty("advL"),
8da953a7   zhouhaihai   无尽模式
379
  		advElM = self:getProperty("advElM"),
0e3ab88d   zhouhaihai   中继层
380
  		advElS = self:getProperty("advElS"),
1b20cfdb   zhouhaihai   赛季更新完善 无尽冒险排行榜
381
382
  		advElChapter = self.advElChapter,
  		advOverTime = self.advOverTime,
ccbafe67   zhouhaihai   冒险神器和buff
383
  		advAFGet = self:getProperty("advAFGet"),
3df73a9e   zhouhaihai   复兴奖励
384
  		advAFOpen = self:getProperty("advAFOpen"),
ccbafe67   zhouhaihai   冒险神器和buff
385
  		advAFWear = self:getProperty("advAFWear"),
764e5296   zhouhaihai   冒险抽奖保底
386
  		advDrawB = self:getProperty("advDrawB"),
f8408529   zhouhaihai   冒险商店
387
  		advShop = self:getProperty("advShop"),
46fff3ff   zhouhaihai   冒险手册
388
  		advEAchiev = self:getProperty("advEAchiev"),
9ced5432   zhouhaihai   冒险支援效果 保底事件
389
  		advSup = self:getProperty("advSup"),
fc316d1f   zhouhaihai   冒险体力优化
390
391
  		advC = self:getProperty("advC"),
  		advCT = self:getProperty("advCT"),
a3062f0d   zhouhaihai   relay
392
  		advRelay = self:getProperty("advRelay"),
384bb077   zhouahaihai   挂机
393
394
  
  		hangPass = self:getProperty("hangPass"),
a6508219   zhouhaihai   挂机奖励
395
  		hangGift = self:getProperty("hangGift"),
384bb077   zhouahaihai   挂机
396
397
398
  		hangInfo = self:getProperty("hangInfo"),
  		hangBag = self:getProperty("hangBag"),
  		hangBagLimit = self:getProperty("hangBagLimit"),
98d32f92   liuzujun   多编队
399
400
  		hangTeams = self:getProperty("hangTeams"),
  		teamIndex = self:getProperty("teamIndex"),
782ee57d   liuzujun   多编队功能
401
  		advTeams = self:getProperty("advTeams"),
761b3ea8   chenyueqi   再改一波电波塔整容相关信息
402
  		towerTeams = self:getProperty("towerTeams"),
3c51e6d4   zhouhaihai   奖励副本 完成
403
404
  		
  		bonusStar = self:getProperty("bonusStar"),
29fbbc10   zhouhaihai   夜间打工
405
406
  		workStar = self:getProperty("workStar"),
  		workBattle = self:getProperty("workBattle"),
dbd0ca58   gaofengduan   car  营养剂制作
407
  
71f716c4   chenyueqi   引导用到的字段
408
409
410
  		newerGuide = self:getProperty("newerGuide"),
  		funcGuide = self:getProperty("funcGuide"),
  
fa565e0c   zhouhaihai   优化结构
411
412
  		pvpTC = self:getProperty("pvpTC"),
  		pvpTH = self:getProperty("pvpTH"),
cfd68b3a   zhouhaihai   时间重置 新逻辑
413
414
415
  		pvpHGift = self:getProperty("pvpHGift"),
  		pvpHGTime = self:getProperty("pvpHGTime"),
  		pvpShop = self:getProperty("pvpShop"),
fa565e0c   zhouhaihai   优化结构
416
  
dbd0ca58   gaofengduan   car  营养剂制作
417
  		potionBag = self:getProperty("potionBag"),
1c3053c3   zhouhaihai   返回数据
418
  		storyB = self:getProperty("storyB"),
056c01a0   zhouhaihai   简化装备
419
  		equips = self:getProperty("equips"),
9b35bf6e   zhouhaihai   开启时间箱
420
  		boxL = self:getProperty("boxL"),
276b1da9   zhouhaihai   爬塔接口
421
  		towerInfo = self:getProperty("towerInfo"),
03c619fb   chenyueqi   电波塔属性塔功能部分功能草稿
422
  		towerBnous = self:getProperty("towerBnous"),
03a6166a   zhouhaihai   餐厅优化
423
  		spTask = self:getProperty("spTask"),
53e8037e   zhouhaihai   任务
424
425
426
427
  		dTask = self:getProperty("dTask"),
  		wTask = self:getProperty("wTask"),
  		achiveT = self:getProperty("achiveT"),
  		achiveV = self:getProperty("achiveV"),
cccc9c70   zhouhaihai   商城
428
429
430
  
  		rechargeF = self:getProperty("rechargeF"),
  		dinerS = self:getProperty("dinerS"),
317a46a9   liuzujun   添加特权卡
431
  		battlePoint = self:getProperty("battlePoint"),
cccc9c70   zhouhaihai   商城
432
433
  		
  		rmbC = self:getProperty("rmbC"),
e52c384f   liuzujun   探索指令bug, 充值返利活动
434
  		twdC = self:getProperty("twdC"),
fb3d084d   liuzujun   月卡赛季卡发送邮件奖励
435
  		repayHero = self:getProperty("repayHero"),
3c0ea5fb   zhouhaihai   抽英雄
436
  		newerDraw = self:getProperty("newerDraw"),
bc28fe9e   zhouhaihai   保底返回
437
  		floorHero = self:getProperty("floorHero"),
86584add   liuzujun   新手卡池,心愿单卡池
438
  		wishPool = self:getProperty("wishPool"),
d763fb14   zhouhaihai   签到 九宫格
439
440
  
  		sudoku = self:getProperty("sudoku"),
31d3a423   zhouhaihai   签到
441
  		sign = self:getProperty("sign"),
9cede2e2   zhouhaihai   主推红点 和冒险次数
442
443
  
  		redp = self:getProperty("redp"),
ed20f277   zhouhaihai   chatline 奖励
444
  		chatline = self:getProperty("chatline"),
56c7a1c5   liuzujun   修改报错,下载cv奖励记录字段
445
446
  
  		downCvR	= self:getProperty("downCvR"), -- 下载cv扩展包奖励 
59a88b80   chenyueqi   客户端要用到角色创建时间
447
448
  		feedback = self:getProperty("feedback"),
  		ctime = self:getProperty("ctime"),
e0ad10e9   liuzujun   英雄帖任务简单类型测试
449
  		calTask = self:getProperty("calTask"),
dfa9ae5e   liuzujun   战令任务活动
450
  		bcTask = self:getProperty("bcTask"),
78e5b90e   liuzujun   完成需求:新玩家任务
451
  		nbTask = self:getProperty("nbTask"),
16634605   liuzujun   多队挂机,天赋道具合成
452
  		radioTask = self:getProperty("radioTask"),
65b551a7   chenyueqi   海港贸易季初版
453
454
  
  		seaport = self:getProperty("seaport"),
a5dc3b0e   chenyueqi   回归活动初版
455
  		returner = self:getProperty("returner"),
ba33bcac   liuzujun   挂机章节解锁
456
457
  
  		unlockChap	= self:getProperty("unlockChap"),	-- 解锁的章节
e9bfa7a2   liuzujun   其他玩家展示界面数据支持, 更新s...
458
459
  		friendTeam	= self:getProperty("friendTeam"),
  		bgId	= self:getProperty("bgId"),
314bc5df   zhengshouren   提交服务器初始代码
460
461
462
463
  	}
  end
  
  return Role