be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
1
2
3
4
5
6
7
8
9
10
11
|
local RolePlugin = {}
function RolePlugin.bind(Role)
function Role:log()
end
function Role:loadAll()
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
12
|
self:loadHeros()
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
13
14
15
|
end
function Role:reloadWhenLogin()
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
16
17
18
19
20
|
end
function Role:onCrossDay(now)
end
|
5b28342d
zhouahaihai
离线方法
|
21
22
23
|
function Role:onOfflineEvent()
end
|
8c74292c
zhouahaihai
增加item 以及 角色突破
|
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
|
local function _award(self, itemId, count, params)
local itemData = csvdb["itemCsv"][itemId]
local curType = itemData.type
local change = {} -- 奖励被转化为了其他奖励 id = count
if curType == ItemType.Hero then
params.type = itemId - ItemStartId.Hero
for i = 1, count do
self:addHero(params)
end
else
params.itemId = itemId
params.count = count
self:addItem(params)
end
return count, change -- count 刷新实际发放的奖励个数 change 物品实际奖励与当前id 不符 就发生转换 而不实际发奖
end
-- 发奖功能入口 award string id=count or {[id] = count}
function Role:award(gift, params)
local tgift = {}
if type(award) == "string" then
for _, one in pairs(gift:toTableArray(true)) do
tgift[one[1]] = (tgift[one[1]] or 0) + one[2]
end
else
tgift = gift
end
local reward, allChange = {}, {}
for itemId, count in pairs(tgift) do
local count, change = _award(self, itemId, count, clone(params or {}))
if next(change) then
local cr, cc = self:award(change, params) -- 内部转换忽略
for _id, _ct in pairs(cr) do
reward[_id] = (reward[_id] or 0) + _ct
end
table.insert(allChange, {form = {[itemId] = count}, to = cr})
else
reward[itemId] = (reward[itemId] or 0) + count
end
end
return reward, allChange --实际获得的奖励 和 最高级奖励转化过程
end
function Role:addItem(params)
params = params or {}
local items = self:getProperty("items")
local origin = items:getv(params.itemId, 0)
local nums = origin+params.count
if nums <= 0 then
items = items:delk(params.itemId)
nums = 0
else
items = items:incrv(params.itemId, params.count)
end
self:setProperty("items", items)
if not params.notNotify then
SendPacket(actionCodes.Role_updateItems, MsgPack.pack({[params.itemId] = nums}))
end
end
function Role:checkItemEnough(itemCountT)
local less = {}
for itemId, count in pairs(itemCountT) do
local last = self:getItemCount(itemId) - count
if last < 0 then
less[itemId] = -last
end
end
return (not next(less)), less -- 是否足够,,缺什么缺多少
end
function Role:costItems(itemCountT, params)
for itemId, count in pairs(itemCountT) do
local pms = clone(params or {})
pms.itemId = itemId
pms.count = - count
self:addItem(pms)
end
end
function Role:getItemCount(itemId)
return self:getProperty("items"):getv(itemId, 0)
end
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
115
116
117
118
119
120
|
function Role:addHero(params)
local roleId = self:getProperty("id")
local heroId = tonum(redisproxy:hincrby(string.format(R_INCR, roleId), "hero", 1))
local heroType = params.type
local unitData = csvdb["unitCsv"][heroType]
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
121
|
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
122
123
124
125
126
127
128
129
130
131
132
|
redisproxy:sadd(string.format(R_HEROS, roleId), heroId)
local heroInfo = {
key = string.format(R_HERO, roleId, heroId),
id = heroId,
type= heroType,
}
local newHero = require("models.Hero").new(heroInfo)
newHero:create()
newHero.owner = self
|
8c74292c
zhouahaihai
增加item 以及 角色突破
|
133
|
newHero:saveBattleValue()
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
134
135
136
137
138
139
140
141
|
self.heros[heroId] = newHero
if not params.notNotify then
local heroResponse = {}
table.insert(heroResponse, newHero:data())
local bin = MsgPack.pack(heroResponse)
SendPacket(actionCodes.Hero_loadInfos, bin)
end
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
142
143
|
end
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
144
145
146
147
148
149
150
151
152
153
154
155
|
function Role:delHero(params)
local roleId = self:getProperty('id')
local hero = self.heros[heroId]
if not hero then return end
self.heros[heroId] = nil
redisproxy:pipelining(function (red)
red:del(string.format(R_HERO, roleId, heroId))
red:srem(string.format(R_HEROS, roleId), heroId)
end)
SendPacket(actionCodes.Hero_loadInfos, MsgPack.pack({{id = heroId, bDel = true}}))
end
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
156
|
|
0a07bdd9
zhouahaihai
角色升级 。gm
|
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
function Role:loadHeros()
local roleId = self:getProperty("id")
local heroIds = redisproxy:smembers(string.format(R_HEROS, roleId))
local redret = redisproxy:pipelining(function (red)
for _, heroId in ipairs(heroIds) do
red:hgetall(string.format(R_HERO, roleId, heroId))
end
end)
for index, heroId in ipairs(heroIds) do
local hero = require("models.Hero").new({key = string.format(R_HERO, roleId, heroId)})
if hero:load(table.array2Table(redret[index])) then
hero.owner = self
self.heros[tonumber(heroId)] = hero
end
end
end
|
be83d162
zhouahaihai
登陆成功。 增加数据结构修正功能
|
174
175
176
|
end
return RolePlugin
|