Blame view

src/models/Role.lua 6.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
7
8
  local RoleActivity = import(".RoleActivity")
  local RoleChangeStruct = import(".RoleChangeStruct")
  RolePlugin.bind(Role)
  RoleTask.bind(Role)
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
9
10
11
  RoleActivity.bind(Role)
  RoleChangeStruct.bind(Role)
  
314bc5df   zhengshouren   提交服务器初始代码
12
13
  function Role:ctor( properties )
  	Role.super.ctor(self, properties)
314bc5df   zhengshouren   提交服务器初始代码
14
  	self.ignoreHeartbeat = false
09be9059   zhouhaihai   冒险接口
15
  	self.dailyData = nil
0a07bdd9   zhouahaihai   角色升级 。gm
16
  	self.heros = {}
43cc5f51   gaofengduan   调整 equip 数据结构
17
  	self.runeBag = {}
46fac6f1   zhouahaihai   酱料
18
  	self.advData = nil
314bc5df   zhengshouren   提交服务器初始代码
19
20
21
  end
  
  Role.schema = {
314bc5df   zhengshouren   提交服务器初始代码
22
23
  	id 					= {"number"},
  	uid 				= {"string", ""},
314bc5df   zhengshouren   提交服务器初始代码
24
  	name 				= {"string", ""},
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
25
26
27
28
  	sid 				= {"number", 0},
  	device 				= {"string", ""},
  	banTime 			= {"number", 0},
  	banType 			= {"number", 0},
0a07bdd9   zhouahaihai   角色升级 。gm
29
30
31
32
  	ltime 				= {"number", 0}, -- 最后登录时间
  	ctime 				= {"number", skynet.timex()},  -- 创建时间
  	ignoreMt			= {"number", 0},  -- 忽略维护拦截
  	sversion			= {"number", globalCsv.StructVersion or 0}, -- 重整数据版本
312b9db5   zhouahaihai   背包
33
34
  	diamond				= {"number", 0},
  	reDiamond			= {"number", 0},
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
35
  	-- roleInfo
4b7c7c96   zhouahaihai   增加 清空 挂机 冒险gm 角色经验
36
37
  	level 				= {"number", 1},
  	exp 				= {"number", 0},
6947e382   zhouahaihai   好感度, 皮肤
38
  	items				= {"string", ""},
4faef572   zhouhaihai   冒险任务,冒险扫荡, 冒险中继
39
  	funcOpen			= {"table", {}}, --功能是否开放
6947e382   zhouahaihai   好感度, 皮肤
40
  	loveStatus			= {"string", ""}, --统计角色的最高 好感度等级 类型相关 -- type=loveL type=loveL
37037eeb   zhengshouren   计算奖励
41
  	crown				= {"number", 0},	-- 看伴娘
314bc5df   zhengshouren   提交服务器初始代码
42
  
312b9db5   zhouahaihai   背包
43
44
  	bagLimit 			= {"table", globalCsv.store_limit_max},
  
23d89d13   zhouahaihai   冒险 结构
45
  	--冒险相关
3aa11fb9   zhouhaihai   字段类型
46
  	advPass				= {"table", {}}, -- 通关记录  {chapterId = layer}
46fac6f1   zhouahaihai   酱料
47
  	advItems			= {"string", ""}, -- 冒险临时背包
09be9059   zhouhaihai   冒险接口
48
  	advInfo				= {"table", {}}, -- 冒险关卡信息 
46fac6f1   zhouahaihai   酱料
49
  	advTeam				= {"table", {}}, -- 冒险玩家队伍信息
3aa11fb9   zhouhaihai   字段类型
50
  	advHang				= {"table", {}}, -- 挂机信息  -- {chapterId = {format = teaminfo, time = endtime}}
4faef572   zhouhaihai   冒险任务,冒险扫荡, 冒险中继
51
52
  	advTask				= {"table", {}}, -- 冒险已领取任务完成状态 {id = status} --每层重置
  	advMTask			= {"table", {id = 1, status = 0, lock = true}}, -- 冒险主线任务 -- {id = id, status = status, lock = true} -- 当前主线id  当前主线状态 是否锁定状态
09be9059   zhouhaihai   冒险接口
53
  	advAchiev			= {"table", {}}, -- 冒险成就 {chapterId = {achievId = status}}
384bb077   zhouahaihai   挂机
54
55
56
57
58
  	--挂机相关
  	hangPass 			= {"table", {}}, -- 挂机通过的最大关卡
  	hangTeam 			= {"table", {}}, -- 挂机队伍
  	hangInfo			= {"table", {}},  -- 当前挂机信息
  	hangBag				= {"table", {}},	-- 背包
9962b061   zhouahaihai   补充 挂机
59
  	hangBagLimit 		= {"number", globalCsv.idle_field_origin}, --背包上限
384bb077   zhouahaihai   挂机
60
  
dbd0ca58   gaofengduan   car  营养剂制作
61
  	potionBag			= {"table", {}},	-- 营养剂背包
00e663bd   zhouhaihai   剧情相关
62
63
  
  	storyB				= {"table", {}}, -- 剧情记录
056c01a0   zhouhaihai   简化装备
64
65
  
  	equips				= {"table", {}}, -- 装备简化下, 目前的设计足够支撑   -- {t = {l = c}}  -- 接口设计好 底层扩展就重写~
9b35bf6e   zhouhaihai   开启时间箱
66
67
  
  	boxL				= {"table", {}}, -- boxList  正开启的箱子  -- {[1] = {id = 1010, gem = 101, time = 1313}}
276b1da9   zhouhaihai   爬塔接口
68
  
ea357636   zhouhaihai   爬塔初始层数
69
  	towerInfo			= {"table", {c = globalCsv.tower_count_limit, l = 1}}, -- 当天爬塔消耗的次数  -- {t = time, c = count, l = layer, k = battleKey}
276b1da9   zhouhaihai   爬塔接口
70
  	towerF				= {"table", {}}, -- 爬塔阵容 
314bc5df   zhengshouren   提交服务器初始代码
71
72
  }
  
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
73
  
0a07bdd9   zhouahaihai   角色升级 。gm
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
  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   冒险 结构
89
  	if not self.schema[params.field] then return end
0a07bdd9   zhouahaihai   角色升级 。gm
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
  	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
  
23d89d13   zhouahaihai   冒险 结构
119
  -- 某些字段 更新改变量 改变量的定义由字段自身决定 {{type = ""}, }
6947e382   zhouahaihai   好感度, 皮肤
120
121
122
123
124
125
  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,
23d89d13   zhouahaihai   冒险 结构
126
127
128
129
130
131
  		--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  营养剂制作
132
  			--支持多深度单字段
23d89d13   zhouahaihai   冒险 结构
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
  			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   剧情相关
149
150
151
  		["onlyToC"] = function(info)
  			return info
  		end,
6947e382   zhouahaihai   好感度, 皮肤
152
  	}
0a07bdd9   zhouahaihai   角色升级 。gm
153
  
6947e382   zhouahaihai   好感度, 皮肤
154
155
156
157
  	local updates = {}
  	for _, one in ipairs(params) do
  		if changeUpdateFunc[one["type"]] then
  			table.insert(updates, changeUpdateFunc[one["type"]](one))
00e663bd   zhouhaihai   剧情相关
158
159
160
  		elseif one.isOnlyToC then
  			one.isOnlyToC = nil
  			table.insert(updates, one)
6947e382   zhouahaihai   好感度, 皮肤
161
  		else
23d89d13   zhouahaihai   冒险 结构
162
  			table.insert(updates, changeUpdateFunc["tableCommon"](one["type"], one))
6947e382   zhouahaihai   好感度, 皮肤
163
164
165
166
167
168
  		end
  	end
  	if not notNotify and next(updates) then
  		SendPacket(actionCodes.Role_changeUpdate, MsgPack.pack(updates))
  	end
  end
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
169
  
314bc5df   zhengshouren   提交服务器初始代码
170
171
172
  function Role:data()
  	return {
  		id = self:getProperty("id"),
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
173
174
  		name = self:getProperty("name"),
  		level = self:getProperty("level"),
4b7c7c96   zhouahaihai   增加 清空 挂机 冒险gm 角色经验
175
  		exp = self:getProperty("exp"),
be83d162   zhouahaihai   登陆成功。 增加数据结构修正功能
176
  		items = self:getProperty("items"):toNumMap(),
4faef572   zhouhaihai   冒险任务,冒险扫荡, 冒险中继
177
  		funcOpen = self:getProperty("funcOpen"),
6947e382   zhouahaihai   好感度, 皮肤
178
  		loveStatus = self:getProperty("loveStatus"):toNumMap(),
312b9db5   zhouahaihai   背包
179
180
  		diamond = self:getAllDiamond(),
  		bagLimit = self:getProperty("bagLimit"),
dbd0ca58   gaofengduan   car  营养剂制作
181
  
23d89d13   zhouahaihai   冒险 结构
182
183
  		advPass = self:getProperty("advPass"),
  		advInfo = self:getProperty("advInfo"),
46fac6f1   zhouahaihai   酱料
184
  		advItems = self:getProperty("advItems"):toNumMap(),
36c30c5c   zhouahaihai   冒险
185
  		advTeam = self:getProperty("advTeam"),
09be9059   zhouhaihai   冒险接口
186
187
  		advHang = self:getProperty("advHang"),
  		advTask = self:getProperty("advTask"),
384bb077   zhouahaihai   挂机
188
189
190
191
192
193
  
  		hangPass = self:getProperty("hangPass"),
  		hangTeam = self:getProperty("hangTeam"),
  		hangInfo = self:getProperty("hangInfo"),
  		hangBag = self:getProperty("hangBag"),
  		hangBagLimit = self:getProperty("hangBagLimit"),
dbd0ca58   gaofengduan   car  营养剂制作
194
195
  
  		potionBag = self:getProperty("potionBag"),
1c3053c3   zhouhaihai   返回数据
196
  		storyB = self:getProperty("storyB"),
056c01a0   zhouhaihai   简化装备
197
  		equips = self:getProperty("equips"),
9b35bf6e   zhouhaihai   开启时间箱
198
  		boxL = self:getProperty("boxL"),
276b1da9   zhouhaihai   爬塔接口
199
200
  		towerInfo = self:getProperty("towerInfo"),
  		towerF = self:getProperty("towerF"),
056c01a0   zhouhaihai   简化装备
201
  
314bc5df   zhengshouren   提交服务器初始代码
202
203
204
205
  	}
  end
  
  return Role