Commit 43cc5f51fa654a8a29e951ca5f6ca9737b80bbbf

Authored by gaofengduan
1 parent bd4316d2

调整 equip 数据结构

1 std = "max" 1 std = "max"
2 globals = { 2 globals = {
  3 + "R_RUNE_ROOT",
  4 + "R_EQUIP_ROOT",
  5 + "R_EQUIP",
  6 + "R_RUNE",
3 "DinerTask", 7 "DinerTask",
4 "SendPipelining", 8 "SendPipelining",
5 "AdvEventType", 9 "AdvEventType",
src/ProtocolCode.lua
@@ -23,6 +23,8 @@ actionCodes = { @@ -23,6 +23,8 @@ actionCodes = {
23 Role_pipelining = 109, 23 Role_pipelining = 109,
24 Role_saleItemRpc = 110, 24 Role_saleItemRpc = 110,
25 Role_openItemRpc = 111, 25 Role_openItemRpc = 111,
  26 + Role_updateEquip = 112,
  27 + Role_updateRune = 113,
26 28
27 Adv_startAdvRpc = 151, 29 Adv_startAdvRpc = 151,
28 Adv_roleFormatRpc = 152, 30 Adv_roleFormatRpc = 152,
@@ -46,6 +48,8 @@ actionCodes = { @@ -46,6 +48,8 @@ actionCodes = {
46 Hero_loveTaskRpc = 213, 48 Hero_loveTaskRpc = 213,
47 Hero_changeSkinRpc = 214, 49 Hero_changeSkinRpc = 214,
48 Hero_createHeroRpc = 215, 50 Hero_createHeroRpc = 215,
  51 + Hero_referEquipsRpc = 216,
  52 + Hero_referRunesRpc = 217,
49 53
50 Hang_startRpc = 251, 54 Hang_startRpc = 251,
51 Hang_checkRpc = 252, 55 Hang_checkRpc = 252,
@@ -4,6 +4,10 @@ R_HEROS = "role:%d:heroIds" @@ -4,6 +4,10 @@ R_HEROS = "role:%d:heroIds"
4 R_HERO = "hero:%d:%d" 4 R_HERO = "hero:%d:%d"
5 R_DAILY = "role:%d:daily" 5 R_DAILY = "role:%d:daily"
6 R_DINER = "role:%d:diner" -- 餐厅 6 R_DINER = "role:%d:diner" -- 餐厅
  7 +R_EQUIP_ROOT = "role:%d:equip*" -- 装备根目录
  8 +R_EQUIP = "role:%d:equip:%d:%d" -- 装备type:level
  9 +R_RUNE_ROOT = "role:%d:rune*" -- 符文根目录
  10 +R_RUNE = "role:%d:rune:%d" -- 符文零件id:level
7 11
8 -- -- role 12 -- -- role
9 -- R_FARM_KEY = "role:%d:farm" 13 -- R_FARM_KEY = "role:%d:farm"
src/actions/CarAction.lua
@@ -64,8 +64,14 @@ function _M.equipUpRpc( agent, data ) @@ -64,8 +64,14 @@ function _M.equipUpRpc( agent, data )
64 local nextEquip = dataSet[nextLv] 64 local nextEquip = dataSet[nextLv]
65 if not nextEquip then return 23 end 65 if not nextEquip then return 23 end
66 66
67 - local own = role:getItemCount(id)  
68 - if own < count then 67 + local ownSet = role.equipBag[typ]
  68 + if not ownSet then return 31 end
  69 + local ownData = ownSet[lv]
  70 + if not ownData then return 32 end
  71 +
  72 + local own = role:getEquipCount(typ,lv)
  73 + local costCount = equipData.merge*count
  74 + if own < costCount then
69 return 3 75 return 3
70 end 76 end
71 77
@@ -77,14 +83,9 @@ function _M.equipUpRpc( agent, data ) @@ -77,14 +83,9 @@ function _M.equipUpRpc( agent, data )
77 return 4 83 return 4
78 end 84 end
79 85
80 - local merge = {[id]=equipData.merge*count}  
81 - if not role:checkItemEnough(merge) then  
82 - return 5  
83 - end  
84 -  
85 role:costItems(cost) 86 role:costItems(cost)
86 - role:costItems(merge)  
87 - role:addItem({itemId = nextEquip.id,count = count}) 87 + role:addEquip({type=typ,level=lv,count=-costCount})
  88 + role:addEquip({type=typ,level=nextLv,count=count})
88 SendPacket(actionCodes.Car_equipUpRpc, '') 89 SendPacket(actionCodes.Car_equipUpRpc, '')
89 return true 90 return true
90 end 91 end
src/actions/GmAction.lua
@@ -22,6 +22,14 @@ function _M.hero(role, pms) @@ -22,6 +22,14 @@ function _M.hero(role, pms)
22 return "成功" 22 return "成功"
23 end 23 end
24 24
  25 +function _M.equip(role, pms)
  26 + local typ = tonum(pms.pm1)
  27 + local level = tonum(pms.pm2)
  28 + local count = tonum(pms.pm3)
  29 + role:addEquip({type = typ,level = level,count = count})
  30 + return "成功"
  31 +end
  32 +
25 function _M.get(role, pms) 33 function _M.get(role, pms)
26 local itemId = tonum(pms.pm1) 34 local itemId = tonum(pms.pm1)
27 if not csvdb["itemCsv"][itemId] then 35 if not csvdb["itemCsv"][itemId] then
src/actions/HeroAction.lua
@@ -451,4 +451,53 @@ function _M.createHeroRpc(agent, data) @@ -451,4 +451,53 @@ function _M.createHeroRpc(agent, data)
451 return true 451 return true
452 end 452 end
453 453
  454 +-- typ 位置,level等级对应唯一装备,level为0时为移除,不为0时无则装备,有则替换
  455 +function _M.referEquips(agent, data)
  456 + local role = agent.role
  457 + local msg = MsgPack.unpack(data)
  458 + local hero = role.heros[msg.id]
  459 + if not hero then return 10 end
  460 + local equips = msg.equips
  461 + if not equips or not next(equips) then return 11 end
  462 +
  463 + for typ,level in pairs(equips) do
  464 + local ownLv = hero:getProperty("equip"):getv(typ,0)
  465 + if level == 0 then
  466 + if ownLv == 0 then return 2 end
  467 + else
  468 + if role:getEquipCount(typ,level) < 1 then return 3 end
  469 + end
  470 + local equipSet = csvdb["equipCsv"][typ]
  471 + if not equipSet then return 4 end
  472 + local equipData = equipSet[level]
  473 + if not equipData then return 5 end
  474 + end
  475 +
  476 + for typ,level in pairs(equips) do
  477 + local ownLv = hero:getProperty("equip"):getv(typ,0)
  478 + if level == 0 then
  479 + role:addEquip({{type=typ,level=ownLv,count=1}})
  480 + else
  481 + role:addEquip({{type=typ,level=level,count=-1}})
  482 + if ownLv ~= 0 then
  483 + role:addEquip({type=typ,level=ownLv,count=1})
  484 + end
  485 + end
  486 + hero:updateProperty({field = "equip", value = hero:getProperty("equip"):setv(typ, level)})
  487 + end
  488 + SendPacket(actionCodes.Hero_referEquipsRpc, "")
  489 + return true
  490 +end
  491 +
  492 +-- typ 位置,id等级对应唯一符文,id为0时为移除,不为0时无则装备,有则替换
  493 +function _M.referRunes(agent, data)
  494 + local role = agent.role
  495 + local msg = MsgPack.unpack(data)
  496 + local hero = role.heros[msg.id]
  497 + if not hero then return 10 end
  498 + local runes = msg.runes
  499 + if not runes or not next(runes) then return 11 end
  500 + return true
  501 +end
  502 +
454 return _M 503 return _M
455 \ No newline at end of file 504 \ No newline at end of file
src/actions/RoleAction.lua
@@ -97,7 +97,7 @@ function _M.loginRpc( agent, data ) @@ -97,7 +97,7 @@ function _M.loginRpc( agent, data )
97 else 97 else
98 role:reloadWhenLogin() 98 role:reloadWhenLogin()
99 end 99 end
100 - 100 +
101 if not msg.isGMlogin then 101 if not msg.isGMlogin then
102 local banTime = role:getProperty("banTime") 102 local banTime = role:getProperty("banTime")
103 if banTime > now then 103 if banTime > now then
@@ -120,7 +120,7 @@ function _M.loginRpc( agent, data ) @@ -120,7 +120,7 @@ function _M.loginRpc( agent, data )
120 -- 跨天登陆事件 120 -- 跨天登陆事件
121 role:onCrossDay(now) 121 role:onCrossDay(now)
122 role:setProperty("ltime", now) 122 role:setProperty("ltime", now)
123 - 123 +
124 124
125 for _, name in ipairs({"dailyData", "dinerData"}) do 125 for _, name in ipairs({"dailyData", "dinerData"}) do
126 response[name] = role[name]:data() 126 response[name] = role[name]:data()
@@ -149,10 +149,26 @@ function _M.loginRpc( agent, data ) @@ -149,10 +149,26 @@ function _M.loginRpc( agent, data )
149 end 149 end
150 end 150 end
151 151
152 - response.wave = 1 + heroWave 152 + response.wave = 3 + heroWave
153 153
154 SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response)) 154 SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response))
155 155
  156 + local equipResp = {equipBag = {}}
  157 + for _,set in pairs(role.equipBag) do
  158 + for _,equip in pairs(set) do
  159 + local data = equip:data()
  160 + if not equipResp.equipBag[data.type] then equipResp.equipBag[data.type] = {} end
  161 + equipResp.equipBag[data.type][data.level] = data
  162 + end
  163 + end
  164 + SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(equipResp))
  165 +
  166 + local runeResp = {runeBag = {}}
  167 + for _,rune in pairs(role.runeBag) do
  168 + table_insert(runeResp.runeBag, rune:data())
  169 + end
  170 + SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(runeResp))
  171 +
156 local heroIndex = 1 172 local heroIndex = 1
157 for index = 2, 1 + heroWave do 173 for index = 2, 1 + heroWave do
158 local heroResponse = {heros = {}} 174 local heroResponse = {heros = {}}
@@ -177,7 +193,7 @@ function _M.loginRpc( agent, data ) @@ -177,7 +193,7 @@ function _M.loginRpc( agent, data )
177 gate_serv = agent.gate_serv, 193 gate_serv = agent.gate_serv,
178 }) 194 })
179 agent.role = role 195 agent.role = role
180 - 196 +
181 start_agent_timer() 197 start_agent_timer()
182 -- 注册全服广播 198 -- 注册全服广播
183 local channel = math.randomInt(1, 1) 199 local channel = math.randomInt(1, 1)
@@ -293,7 +309,7 @@ function _M.openItemRpc(agent, data) @@ -293,7 +309,7 @@ function _M.openItemRpc(agent, data)
293 end 309 end
294 role:costItems({[itemId] = count}) 310 role:costItems({[itemId] = count})
295 reward = role:award(reward) 311 reward = role:award(reward)
296 - 312 +
297 SendPacket(actionCodes.Role_openItemRpc, MsgPack.pack({reward = reward})) 313 SendPacket(actionCodes.Role_openItemRpc, MsgPack.pack({reward = reward}))
298 return true 314 return true
299 end 315 end
1 -Subproject commit c4ec029a5f26392cf6c1471d1db1b58e0bdb5802 1 +Subproject commit a7426f9183da7afcd6b2780d23a4f6241d3e3aab
src/models/Equip.lua 0 → 100644
@@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
  1 +local Equip = class("Equip", require("shared.ModelBase"))
  2 +
  3 +Equip.schema = {
  4 + type = {"number"}, -- 类型
  5 + level = {"number"}, -- 等级
  6 + count = {"number", 0}, -- 数量
  7 + refer = {"number", 0}, -- 已装备英雄数
  8 +}
  9 +
  10 +function Equip:ctor( properties )
  11 + Equip.super.ctor(self, properties)
  12 +end
  13 +
  14 +function Equip:updateProperty(params)
  15 + if not params.field or (not params.delta and not params.value) then
  16 + return
  17 + end
  18 + if params.delta then
  19 + self:incrProperty(params.field, params.delta)
  20 + elseif params.value then
  21 + self:setProperty(params.field, params.value)
  22 + end
  23 + SendPacket(actionCodes.Role_updateEquip, MsgPack.pack(self:data()))
  24 +end
  25 +
  26 +function Equip:data()
  27 + return {
  28 + type = self:getProperty("type"),
  29 + level = self:getProperty("level"),
  30 + count = self:getProperty("count"),
  31 + }
  32 +end
  33 +
  34 +return Equip
0 \ No newline at end of file 35 \ No newline at end of file
src/models/Hero.lua
@@ -15,11 +15,12 @@ Hero.schema = { @@ -15,11 +15,12 @@ Hero.schema = {
15 loveExp = {"number", 0}, --好感度经验 15 loveExp = {"number", 0}, --好感度经验
16 loveL = {"number", 0}, --好感度等级 16 loveL = {"number", 0}, --好感度等级
17 skin = {"number", 0}, --皮肤 0 、 1、 2、 3 17 skin = {"number", 0}, --皮肤 0 、 1、 2、 3
18 - equip = {"string",""}, --装备 type=level 18 + equip = {"string","1=0 2=0 3=0 4=0"}, --装备 type=level
19 } 19 }
20 20
21 function Hero:ctor( properties ) 21 function Hero:ctor( properties )
22 Hero.super.ctor(self, properties) 22 Hero.super.ctor(self, properties)
  23 + self.runes = {} --符文-零件自增 id
23 end 24 end
24 25
25 function Hero:notifyUpdateProperty(field, newValue, oldValue) 26 function Hero:notifyUpdateProperty(field, newValue, oldValue)
src/models/Role.lua
@@ -13,6 +13,8 @@ function Role:ctor( properties ) @@ -13,6 +13,8 @@ function Role:ctor( properties )
13 Role.super.ctor(self, properties) 13 Role.super.ctor(self, properties)
14 self.ignoreHeartbeat = false 14 self.ignoreHeartbeat = false
15 self.heros = {} 15 self.heros = {}
  16 + self.equipBag = {}
  17 + self.runeBag = {}
16 self.advData = nil 18 self.advData = nil
17 end 19 end
18 20
src/models/RolePlugin.lua
@@ -10,6 +10,8 @@ function RolePlugin.bind(Role) @@ -10,6 +10,8 @@ function RolePlugin.bind(Role)
10 10
11 function Role:loadAll() 11 function Role:loadAll()
12 self:loadDaily() 12 self:loadDaily()
  13 + self:loadEquips()
  14 + self:loadRunes()
13 self:loadHeros() 15 self:loadHeros()
14 self:loadDiner() 16 self:loadDiner()
15 end 17 end
@@ -33,7 +35,7 @@ function RolePlugin.bind(Role) @@ -33,7 +35,7 @@ function RolePlugin.bind(Role)
33 end 35 end
34 end 36 end
35 function Role:onOfflineEvent() 37 function Role:onOfflineEvent()
36 - 38 +
37 end 39 end
38 40
39 local function checkItemCount(self, itemId, count) 41 local function checkItemCount(self, itemId, count)
@@ -44,11 +46,10 @@ function RolePlugin.bind(Role) @@ -44,11 +46,10 @@ function RolePlugin.bind(Role)
44 if limit and self:getItemCount(itemId) == 0 then 46 if limit and self:getItemCount(itemId) == 0 then
45 local curCount = 0 47 local curCount = 0
46 local items = self:getProperty("items"):toNumMap() 48 local items = self:getProperty("items"):toNumMap()
47 - for _itemId, _count in pairs(items) do  
48 - local _itemData = csvdb["itemCsv"][itemId]  
49 - if globalCsv.store_type[_itemData.type] == page then 49 + for _,_ in pairs(items) do
  50 + if globalCsv.store_type[itemData.type] == page then
50 curCount = curCount + 1 51 curCount = curCount + 1
51 - if curCount >= limit then 52 + if curCount >= limit then
52 count = 0 53 count = 0
53 break 54 break
54 end 55 end
@@ -135,7 +136,7 @@ function RolePlugin.bind(Role) @@ -135,7 +136,7 @@ function RolePlugin.bind(Role)
135 if not csvdb["player_expCsv"][level + 1] then 136 if not csvdb["player_expCsv"][level + 1] then
136 return 137 return
137 end 138 end
138 - 139 +
139 local exp = self:getProperty("exp") 140 local exp = self:getProperty("exp")
140 local newExp = exp + addExp 141 local newExp = exp + addExp
141 while newExp >= csvdb["player_expCsv"][level].exp do 142 while newExp >= csvdb["player_expCsv"][level].exp do
@@ -207,7 +208,7 @@ function RolePlugin.bind(Role) @@ -207,7 +208,7 @@ function RolePlugin.bind(Role)
207 end 208 end
208 209
209 function Role:getItemCount(itemId) 210 function Role:getItemCount(itemId)
210 - if itemId == ItemId.Diamond then 211 + if itemId == ItemId.Diamond then
211 return self:getAllDiamond() 212 return self:getAllDiamond()
212 end 213 end
213 return self:getProperty("items"):getv(itemId, 0) 214 return self:getProperty("items"):getv(itemId, 0)
@@ -283,7 +284,7 @@ function RolePlugin.bind(Role) @@ -283,7 +284,7 @@ function RolePlugin.bind(Role)
283 id = heroId, 284 id = heroId,
284 type= heroType, 285 type= heroType,
285 } 286 }
286 - 287 +
287 local newHero = require("models.Hero").new(heroInfo) 288 local newHero = require("models.Hero").new(heroInfo)
288 newHero:create() 289 newHero:create()
289 newHero.owner = self 290 newHero.owner = self
@@ -352,8 +353,170 @@ function RolePlugin.bind(Role) @@ -352,8 +353,170 @@ function RolePlugin.bind(Role)
352 end 353 end
353 end 354 end
354 355
  356 + function Role:loadEquips()
  357 + local roleId = self:getProperty("id")
  358 + self.equipBag = {}
  359 + local keys = redisproxy:keys(string.format(R_EQUIP_ROOT, roleId))
  360 + if keys and next(keys) then
  361 + for _,v in pairs(keys) do
  362 + local equip = require("models.Equip").new({key = v})
  363 + equip:load()
  364 + local typ,lv = equip:getProperty("type"),equip:getProperty("level")
  365 + equip.owner = self
  366 + if not self.equipBag[typ] then self.equipBag[typ] = {} end
  367 + self.equipBag[typ][lv] = equip
  368 + end
  369 + end
  370 + end
  371 +
  372 + function Role:addEquip(params)
  373 + if params.type and params.level and params.count then
  374 + local equipType = params.type
  375 + local equipLv = params.level
  376 + local count = params.count
  377 + -- isRefer为true时count>0为卸载操作,<0为装备操作
  378 + local isRefer = params.isRefer or false
  379 + local equip = nil
  380 + local equipSet = self.equipBag[equipType]
  381 + if equipSet then
  382 + equip = self.equipBag[equipType][equipLv]
  383 + else
  384 + self.equipBag[equipType] = {}
  385 + end
  386 +
  387 + if equip then
  388 + local originCount = equip:getProperty("count")
  389 + if isRefer and count < 0 then
  390 + if count < 0 then
  391 + if count+originCount<0 then
  392 + return
  393 + end
  394 + else
  395 + if equip:getProperty("refer")-count<0 then
  396 + return
  397 + end
  398 + end
  399 + end
  400 + count = originCount+count
  401 + else
  402 + if isRefer then return end
  403 + local roleId = self:getProperty("id")
  404 + local data = {
  405 + key = string.format(R_EQUIP,roleId,equipType,equipLv),
  406 + type = equipType,
  407 + level = equipLv,
  408 + }
  409 + equip = require("models.Equip").new(data)
  410 + equip.owner = self
  411 + equip:create()
  412 + end
  413 + equip:updateProperty({field = "count", value = math.min(count,0)})
  414 + if isRefer then
  415 + equip:updateProperty({field = "refer", value = math.min(equip:getProperty("refer")+count,0)})
  416 + end
  417 + self.equipBag[equipType][equipLv] = equip
  418 + end
  419 + end
  420 +
  421 + function Role:getEquipCount(typ,lv)
  422 + local equipSet = self.equipBag[typ]
  423 + if equipSet then
  424 + local equip = equipSet[lv]
  425 + if equip then
  426 + return equip:getProperty("count")
  427 + else
  428 + return 0
  429 + end
  430 + else
  431 + return 0
  432 + end
  433 + end
  434 +
  435 + function Role:loadRunes()
  436 + -- local roleId = self:getProperty("id")
  437 + -- self.runeBag = {}
  438 + -- local keys = redisproxy:keys(string.format(R_EQUIP_ROOT, roleId))
  439 + -- if keys and next(keys) then
  440 + -- for _,v in pairs(keys) do
  441 + -- local rune = require("models.Rune").new({key = v})
  442 + -- rune.owner = self
  443 + -- self.runeBag[rune.id][rune.level] = rune
  444 + -- end
  445 + -- end
  446 + end
  447 +
  448 + function Role:addHero(params)
  449 + local roleId = self:getProperty("id")
  450 + local heroId = tonum(redisproxy:hincrby(string.format(R_INCR, roleId), "hero", 1))
  451 + local heroType = params.type
  452 +
  453 + redisproxy:sadd(string.format(R_HEROS, roleId), heroId)
  454 +
  455 + local heroInfo = {
  456 + key = string.format(R_HERO, roleId, heroId),
  457 + id = heroId,
  458 + type= heroType,
  459 + }
  460 +
  461 + local newHero = require("models.Hero").new(heroInfo)
  462 + newHero:create()
  463 + newHero.owner = self
  464 + newHero:saveBattleValue()
  465 + self.heros[heroId] = newHero
  466 +
  467 + if not params.notNotify then
  468 + local heroResponse = {}
  469 + table.insert(heroResponse, newHero:data())
  470 + local bin = MsgPack.pack(heroResponse)
  471 + SendPacket(actionCodes.Hero_loadInfos, bin)
  472 + end
  473 + end
  474 +
  475 + function Role:addRune(params)
  476 + local roleId = self:getProperty("id")
  477 + local runeId = params.id
  478 + local runeLv = params.level
  479 + local count = params.count
  480 + local rune = nil
  481 + local runeSet = self.runeBag[runeId]
  482 + if runeSet then
  483 + rune = self.runeBag[runeId][runeLv]
  484 + else
  485 + self.runeBag[runeId] = {}
  486 + end
  487 +
  488 + if rune then
  489 + count = rune:getProperty("count")+count
  490 + else
  491 + local data = {
  492 + key = string.format(R_RUNE,roleId,runeId,runeLv),
  493 + id = runeId,
  494 + level = runeLv,
  495 + }
  496 + rune = require("models.Rune").new(data)
  497 + rune.owner = self
  498 + rune:create()
  499 + end
  500 + rune:updateProperty({field = "count", value = math.min(count,0)})
  501 + self.runeBag[runeId][runeLv] = rune
  502 + end
  503 +
  504 + function Role:getRuneCount(id,lv)
  505 + local runeSet = self.runeBag[id]
  506 + if runeSet then
  507 + local rune = runeSet[lv]
  508 + if rune then
  509 + return rune:getProperty("count")
  510 + else
  511 + return 0
  512 + end
  513 + else
  514 + return 0
  515 + end
  516 + end
  517 +
355 function Role:getAdvData() 518 function Role:getAdvData()
356 - if not self.advData then 519 + if not self.advData then
357 self.advData = require("adv.Adv").new(self) 520 self.advData = require("adv.Adv").new(self)
358 self.advData:initByInfo() 521 self.advData:initByInfo()
359 end 522 end
src/models/Rune.lua 0 → 100644
@@ -0,0 +1,52 @@ @@ -0,0 +1,52 @@
  1 +local Rune = class("Rune", require("shared.ModelBase"))
  2 +Rune.schema = {
  3 + id = {"number"},
  4 + level = {"number", 0}, -- 等级
  5 + count = {"number", 0}, -- 数量
  6 + refer = {"number", 0}, -- 已装备英雄id
  7 +}
  8 +
  9 +function Rune:ctor( properties )
  10 + Rune.super.ctor(self, properties)
  11 +end
  12 +
  13 +function Rune:notifyUpdateProperty(field, newValue, oldValue)
  14 + local datas = {
  15 + key = field,
  16 + newValue = newValue,
  17 + oldValue = oldValue,
  18 + }
  19 + self:notifyUpdateProperties(datas)
  20 +end
  21 +
  22 +function Rune:notifyUpdateProperties(params)
  23 + local updateData = {
  24 + id = self:getProperty("id"),
  25 + datas = params
  26 + }
  27 + SendPacket(actionCodes.Role_updateRune, MsgPack.pack(updateData))
  28 +end
  29 +
  30 +function Rune:updateProperty(params)
  31 + if not params.field or (not params.delta and not params.value) then
  32 + return
  33 + end
  34 + if params.delta then
  35 + self:incrProperty(params.field, params.delta)
  36 + elseif params.value then
  37 + self:setProperty(params.field, params.value)
  38 + end
  39 + local datas = {}
  40 + table.insert(datas, {key = params.field, newValue = self:getProperty(params.field)})
  41 + self:notifyUpdateProperties(datas)
  42 +end
  43 +
  44 +function Rune:data()
  45 + return {
  46 + id = self:getProperty("id"),
  47 + level = self:getProperty("level"),
  48 + count = self:getProperty("count"),
  49 + }
  50 +end
  51 +
  52 +return Rune
0 \ No newline at end of file 53 \ No newline at end of file