f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
1
2
3
|
package models
import (
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
4
5
|
"fmt"
"github.com/golang/protobuf/proto"
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
6
|
"pro2d/common"
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
7
|
"pro2d/common/logger"
|
ddc88bac
zhangqijia
fix: 记录战斗
|
8
|
"pro2d/csvdata"
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
9
|
"pro2d/pb"
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
10
11
12
|
)
//背包系统
|
ddc88bac
zhangqijia
fix: 记录战斗
|
13
|
func (m *RoleModel) GetItemCount(key string) int32 {
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
14
15
|
c, ok := m.Items[key]
if !ok {
|
ddc88bac
zhangqijia
fix: 记录战斗
|
16
|
c = int32(0)
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
17
|
}
|
ddc88bac
zhangqijia
fix: 记录战斗
|
18
|
return c
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
19
20
21
|
}
func (m *RoleModel) CostItem(key string, count int32) bool {
|
ddc88bac
zhangqijia
fix: 记录战斗
|
22
|
if count > m.GetItemCount(key) {
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
23
24
25
26
27
|
return false
}
return m.AddItem(key, -count)
}
|
ddc88bac
zhangqijia
fix: 记录战斗
|
28
|
func (m *RoleModel) CostItems(params common.IMapStringNum) bool {
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
29
|
for k, v := range params {
|
ddc88bac
zhangqijia
fix: 记录战斗
|
30
|
if v > m.GetItemCount(k) {
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
31
32
33
|
return false
}
|
c99d59cc
zhangqijia
fix: 批量删除物品
|
34
|
params[k] = -v
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
35
|
}
|
c99d59cc
zhangqijia
fix: 批量删除物品
|
36
37
|
return m.AddItems(params)
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
38
39
40
41
42
|
}
func (m *RoleModel) AddItem(key string, count int32) bool {
c := m.GetItemCount(key)
|
ddc88bac
zhangqijia
fix: 记录战斗
|
43
|
num := c + count
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
44
|
if num > 0 {
|
ddc88bac
zhangqijia
fix: 记录战斗
|
45
|
m.Items[key] = num
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
46
47
48
|
} else {
delete(m.Items, key)
}
|
ddc88bac
zhangqijia
fix: 记录战斗
|
49
|
m.SetProperty("items", common.MapNumToString(m.Items))
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
50
|
|
30e6d227
zhangqijia
fix: add nty
|
51
|
rsp, err := proto.Marshal(&pb.RoleUpdateItemsNty{Items: fmt.Sprintf("%s=%d", key, num)})
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
52
53
54
55
|
if err != nil {
logger.Error(err.Error())
return true
}
|
c2791869
zhangqijia
fix: gm增加删除装备删除物品接口
|
56
57
|
if m.GetConn() != nil {
|
30e6d227
zhangqijia
fix: add nty
|
58
|
m.GetConn().Send(0, uint32(pb.ProtoCode_RoleUpdateItemsNty), rsp)
|
c2791869
zhangqijia
fix: gm增加删除装备删除物品接口
|
59
|
}
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
60
61
62
|
return true
}
|
ddc88bac
zhangqijia
fix: 记录战斗
|
63
|
func (m *RoleModel) AddItems(params common.IMapStringNum) bool {
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
64
|
tmp := make(common.IMapString)
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
65
66
67
|
for k, v := range params {
c := m.GetItemCount(k)
|
ddc88bac
zhangqijia
fix: 记录战斗
|
68
|
num := c + v
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
69
70
|
if num > 0 {
m.Items[k] = num
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
71
|
} else {
|
c99d59cc
zhangqijia
fix: 批量删除物品
|
72
|
num = 0
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
73
74
|
delete(m.Items, k)
}
|
c99d59cc
zhangqijia
fix: 批量删除物品
|
75
|
tmp[k] = num
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
76
77
|
}
|
ddc88bac
zhangqijia
fix: 记录战斗
|
78
|
m.SetProperty("items", common.MapNumToString(m.Items))
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
79
|
|
30e6d227
zhangqijia
fix: add nty
|
80
|
rsp, err := proto.Marshal(&pb.RoleUpdateItemsNty{Items: common.MapToString(tmp)})
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
81
82
83
84
85
86
|
if err != nil {
logger.Error(err.Error())
return true
}
if m.GetConn() != nil {
|
30e6d227
zhangqijia
fix: add nty
|
87
|
m.GetConn().Send(0, uint32(pb.ProtoCode_RoleUpdateItemsNty), rsp)
|
f631f225
zhangqijia
feat: 增加背包系统,以及背包...
|
88
89
90
91
|
}
return true
}
|
c8509ef6
zhangqijia
fix: notify equip...
|
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
func (m *RoleModel) AddHero(hero *pb.Hero) {
h := NewHero(hero)
h.Create()
m.Heros[hero.Id] = h
}
func (m *RoleModel) AddTeam(team *pb.Team) {
t := NewTeam(team)
t.Create()
m.Teams[team.Id] = t
}
func (m *RoleModel) UpdateTeam(teams []*pb.Team) {
for _, team := range teams {
|
23822e2f
zhangqijia
fix: update proto...
|
107
|
team.RoleId = m.Data.Id
|
c8509ef6
zhangqijia
fix: notify equip...
|
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
t := m.Teams[team.Id]
if t != nil {
t.UpdateSchema(team)
}
}
}
func (m *RoleModel) AddEquip(equip *pb.Equipment) *EquipModel {
e := NewEquip(equip)
e.Create()
m.Equipments[equip.Id] = e
m.EquipmentAddNotify(equip)
return e
}
func (m *RoleModel) EquipmentAddNotify(equip *pb.Equipment) {
|
23822e2f
zhangqijia
fix: update proto...
|
124
|
update := &pb.EquipmentAddNty{Equip: equip}
|
c8509ef6
zhangqijia
fix: notify equip...
|
125
126
127
128
129
|
if rsp, err := proto.Marshal(update); err != nil {
logger.Error(" EquipmentAddNotify err:", err.Error())
return
} else {
if m.GetConn() != nil {
|
23822e2f
zhangqijia
fix: update proto...
|
130
|
m.GetConn().SendSuccess(uint32(pb.ProtoCode_EquipmentAddNty), rsp)
|
c8509ef6
zhangqijia
fix: notify equip...
|
131
132
133
|
}
}
}
|
ddc88bac
zhangqijia
fix: 记录战斗
|
134
135
|
func (m *RoleModel) UpLevel(exp int32) (int32, int32) {
|
23822e2f
zhangqijia
fix: update proto...
|
136
137
|
exp = exp + m.Data.Exp
level := m.Data.Level
|
ddc88bac
zhangqijia
fix: 记录战斗
|
138
|
oldLevelExp := csvdata.Get().TbAccountLevelExp.Get(level)
|
8f6d9ea9
zhangqijia
fix: UpLevel
|
139
|
if oldLevelExp == nil {
|
b0e5082c
zhangqijia
fix: 英雄升级函数优化
|
140
|
return level, exp
|
8f6d9ea9
zhangqijia
fix: UpLevel
|
141
|
}
|
ddc88bac
zhangqijia
fix: 记录战斗
|
142
|
|
b0e5082c
zhangqijia
fix: 英雄升级函数优化
|
143
144
145
146
147
148
149
150
151
152
153
|
for exp > 0 {
if exp >= oldLevelExp.NeedExp {
exp = exp - oldLevelExp.NeedExp
level++
} else {
break
}
oldLevelExp = csvdata.Get().TbAccountLevelExp.Get(level)
if oldLevelExp == nil {
return level, exp
}
|
ddc88bac
zhangqijia
fix: 记录战斗
|
154
155
|
}
return level, exp
|
ddc88bac
zhangqijia
fix: 记录战斗
|
156
157
158
159
160
161
|
}
func (m *RoleModel) Award(award common.IMapStringNum) common.IMapStringNum {
m.AddItems(award)
return award
}
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
162
|
|
35adfcdb
zhangqijia
fix: 裝備戒指类型特殊处理
|
163
|
func (m *RoleModel) EquipmentRefer(equipId, heroId string, refer bool, pos int32) int32 {
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
164
165
166
167
168
169
170
171
172
173
|
e, ok := m.Equipments[equipId]
if !ok {
return 2
}
equip := e.(*EquipModel)
// 1 脱
// 1.1 装备直接脱掉
// 2 戴
|
74286d71
zhangqijia
fix: 裝備 删除pos 添加 ...
|
174
175
176
177
178
|
// 2.0.1 如果是戒指,特殊处理, 未被其他英雄穿戴直接穿,同位置装备是否穿戴, 已经被穿戴,则脱了再穿
// 2.0.2 如果是戒指,特殊处理, 如果其他英雄已经被穿戴,则脱了再穿, 同位置装备是否穿戴, 已经被穿戴,则脱了再穿
// 2.1.1 如果不是戒指,未被其他英雄穿戴直接穿,同位置装备是否穿戴, 已经被穿戴,则脱了再穿
// 2.1.2 如果不是戒指,如果其他英雄已经被穿戴,则脱了再穿, 同位置装备是否穿戴, 已经被穿戴,则脱了再穿
// 可以合并。不用判断是否是戒指。
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
179
|
h1 := m.Heros[heroId]
|
23822e2f
zhangqijia
fix: update proto...
|
180
|
h2 := m.Heros[equip.Data.HeroId]
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
181
182
|
var outHero, inHero *HeroModel
|
23822e2f
zhangqijia
fix: update proto...
|
183
|
inEquip := csvdata.Get().TbEquipmentData.Get(equip.Data.GetTbId())
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
184
|
if !refer {
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
185
186
|
if h1 != nil {
outHero = h1.(*HeroModel)
|
23822e2f
zhangqijia
fix: update proto...
|
187
|
outHero.DelEquipment(equip.Data.Id)
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
188
189
190
|
}
if h2 != nil {
outHero = h2.(*HeroModel)
|
23822e2f
zhangqijia
fix: update proto...
|
191
|
outHero.DelEquipment(equip.Data.Id)
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
192
193
194
195
196
197
198
199
200
|
}
equip.SetProperty("heroid", "")
} else {
if h1 == nil {
return 3
}
inHero = h1.(*HeroModel)
|
35adfcdb
zhangqijia
fix: 裝備戒指类型特殊处理
|
201
202
203
204
205
|
if common.EquipmentTyp(inEquip.EquipType) == common.Ring {
if pos != common.RingPosL && pos != common.RingPosR {
return 4
}
}
|
74286d71
zhangqijia
fix: 裝備 删除pos 添加 ...
|
206
|
// 2.1.1
|
23822e2f
zhangqijia
fix: update proto...
|
207
|
if equip.Data.HeroId == "" {
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
208
|
var outEquipID string
|
74286d71
zhangqijia
fix: 裝備 删除pos 添加 ...
|
209
|
for id, typ := range inHero.Equipments {
|
35adfcdb
zhangqijia
fix: 裝備戒指类型特殊处理
|
210
|
if typ == pos {
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
211
212
213
214
|
outEquipID = id
break
}
}
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
215
216
217
218
219
|
if outEquipID != "" {
tmpEuqip, ok := m.Equipments[outEquipID]
if ok {
outEquip := tmpEuqip.(*EquipModel)
outEquip.SetProperty("heroid", "")
|
3cd84ccc
zhangqijia
fix: 裝備位置修改
|
220
|
inHero.DelEquipment(outEquipID)
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
221
222
223
|
}
}
|
23822e2f
zhangqijia
fix: update proto...
|
224
225
|
inHero.AddEquipment(equip.Data.Id, pos)
equip.SetProperty("heroid", inHero.Data.Id)
|
35adfcdb
zhangqijia
fix: 裝備戒指类型特殊处理
|
226
|
equip.SetProperty("pos", pos)
|
3cd84ccc
zhangqijia
fix: 裝備位置修改
|
227
|
} else {
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
228
229
230
|
if h2 == nil {
return 4
}
|
74286d71
zhangqijia
fix: 裝備 删除pos 添加 ...
|
231
|
// 2.1.2
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
232
233
|
outHero = h2.(*HeroModel)
var outEquipID string
|
3cd84ccc
zhangqijia
fix: 裝備位置修改
|
234
|
for id, tpos := range inHero.Equipments {
|
35adfcdb
zhangqijia
fix: 裝備戒指类型特殊处理
|
235
|
if tpos == pos {
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
236
237
238
239
240
241
242
243
244
245
|
outEquipID = id
break
}
}
if outEquipID != "" {
tmpEquip, ok := m.Equipments[outEquipID]
if ok {
outEquip := tmpEquip.(*EquipModel)
outEquip.SetProperty("heroid", "")
|
3cd84ccc
zhangqijia
fix: 裝備位置修改
|
246
|
inHero.DelEquipment(outEquipID)
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
247
248
249
|
}
}
|
23822e2f
zhangqijia
fix: update proto...
|
250
251
252
|
outHero.DelEquipment(equip.Data.Id)
inHero.AddEquipment(equip.Data.Id, pos)
equip.SetProperty("heroid", inHero.Data.Id)
|
35adfcdb
zhangqijia
fix: 裝備戒指类型特殊处理
|
253
|
equip.SetProperty("pos", pos)
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
254
|
}
|
74286d71
zhangqijia
fix: 裝備 删除pos 添加 ...
|
255
|
|
98cfa13a
zhangqijia
fix: 批量穿戴裝備
|
256
257
258
|
}
return 0
}
|