ddc88bac
zhangqijia
fix: 记录战斗
|
1
|
// 游戏服角色相关操作
|
69d286a7
zhangqijia
fix: 插件用来做部分热更
|
2
|
package action
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
3
4
|
import (
|
29a163be
zhangqijia
fix: CreateReq ui...
|
5
|
"fmt"
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
6
|
"github.com/golang/protobuf/proto"
|
f74e34e3
zhangqijia
fix: 批量删除装备
|
7
|
"go.mongodb.org/mongo-driver/bson"
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
8
|
"pro2d/common"
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
9
|
"pro2d/common/components"
|
51d48d11
zhangqijia
fix: 删除装备 删除物品请求
|
10
|
"pro2d/common/db/mongoproxy"
|
29a163be
zhangqijia
fix: CreateReq ui...
|
11
|
"pro2d/common/db/redisproxy"
|
765431a4
zhangqijia
增加schema接口, 抽象 mo...
|
12
|
"pro2d/common/logger"
|
ddc88bac
zhangqijia
fix: 记录战斗
|
13
|
"pro2d/csvdata"
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
14
|
"pro2d/models"
|
7f269318
zhangqijia
add pb.go; 添加关闭连接...
|
15
|
"pro2d/pb"
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
16
17
|
)
|
4a502dd5
zhangqijia
fix: game,account...
|
18
|
// HeartRpc 心跳请求
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
19
|
func HeartRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) {
|
0cc58315
zhangqijia
添加定时器, 检查心跳
|
20
|
//msg.Conn.SetLastHeartCheckTime()
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
21
22
23
|
return 0, nil
}
|
4a502dd5
zhangqijia
fix: game,account...
|
24
|
// getRandomName 随机名字
|
29a163be
zhangqijia
fix: CreateReq ui...
|
25
26
|
func getRandomName() string {
name := ""
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
27
|
for {
|
29a163be
zhangqijia
fix: CreateReq ui...
|
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
name = common.RandomName(common.DefaultName)
if name == "" {
continue
}
relay, err := redisproxy.SETNX(fmt.Sprintf(common.NickNames, name), "1")
if err != nil {
continue
}
if relay.(int64) == 1 {
break
}
}
return name
}
|
4a502dd5
zhangqijia
fix: game,account...
|
44
45
46
47
48
|
/*
CreateRpc 创建角色请求
1: proto解析错误
2: 角色不存在
*/
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
49
|
func CreateRpc(role1 *models.RoleModel, msg components.IMessage) (int32, interface{}) {
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
50
|
req := pb.CreateReq{}
|
0e5d52de
zhangqijia
reactor: 重构底层框架1.0
|
51
|
if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
|
cad2b7f3
zhangqijia
reactor: 重构目录, 重构...
|
52
|
logger.Error("CreateRpc err: %v", err)
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
53
|
return 1, err
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
54
|
}
|
29a163be
zhangqijia
fix: CreateReq ui...
|
55
|
role := models.RoleExistByUid(req.Token)
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
56
|
if role != nil {
|
101d1cc1
zhangqijia
feat: 一个基于redis的自...
|
57
58
59
60
61
62
|
return 2, "role exists"
}
roleId, err := common.GetNextRoleId()
if err != nil {
return 3, err
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
63
64
|
}
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
65
|
role = models.NewRole(roleId)
|
c47aa250
zhangqijia
feat: 增加GM相关接口。详情...
|
66
|
role.Role.Uid = req.Token
|
8f6d9ea9
zhangqijia
fix: UpLevel
|
67
|
role.Role.Level = 1
|
29a163be
zhangqijia
fix: CreateReq ui...
|
68
|
role.Role.Nick = getRandomName()
|
69d286a7
zhangqijia
fix: 插件用来做部分热更
|
69
|
if err := role.Create(); err != nil {
|
cad2b7f3
zhangqijia
reactor: 重构目录, 重构...
|
70
|
logger.Error("CreateRpc role create err: %v", err)
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
71
|
return 4, nil
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
72
|
}
|
8d983031
zhangqijia
loginReq uid -> t...
|
73
|
role.InitRole()
|
9644352a
zhangqijia
登录服改为http,游戏服改为长连...
|
74
75
76
|
return 0, nil
}
|
4a502dd5
zhangqijia
fix: game,account...
|
77
|
// ChangeTeamRpc 阵容变换
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
78
|
func ChangeTeamRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) {
|
a24dea4c
zhangqijia
fix: id自增做了写更新。阵容...
|
79
|
req := pb.ChangeTeamReq{}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
80
81
82
83
|
if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
logger.Error("loginRpc err: %v", err)
return 1, nil
}
|
eadc9aff
zhangqijia
feat: 增加上阵下阵协议,增加...
|
84
85
86
|
role.UpdateTeam(req.Team)
return 0, nil
|
69d286a7
zhangqijia
fix: 插件用来做部分热更
|
87
|
}
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
88
|
|
4a502dd5
zhangqijia
fix: game,account...
|
89
90
91
92
|
/*
HeroEquipReferRpc 穿戴/脱 装备
2: 装备不存在
*/
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
93
|
func HeroEquipReferRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) {
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
94
95
96
97
98
|
req := pb.HeroEquipReferReq{}
if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
logger.Error("loginRpc err: %v", err)
return 1, nil
}
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
99
100
101
|
e, ok := role.Equipments[req.EquipId]
if !ok {
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
102
|
return 2, nil
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
103
104
105
106
|
}
equip := e.(*models.EquipModel)
|
02d11cb7
zhangqijia
fix: update 装备脱/戴
|
107
108
109
110
111
112
113
114
115
116
117
|
// 1 脱
// 1.1 装备直接脱掉
// 2 戴
// 2.1装备未被其他英雄穿戴直接穿, 如果其他英雄已经被穿戴,则脱了再穿
// 2.2同类型装备是否穿戴, 已经被穿戴,则脱了再穿
h1 := role.Heros[req.HeroId]
h2 := role.Heros[equip.Equip.HeroId]
var outHero, inHero *models.HeroModel
inEquip := csvdata.Get().TbEquipmentData.Get(equip.Equip.GetTbId())
if !req.Refer {
|
81289393
zhangqijia
update
|
118
|
if h1 != nil {
|
02d11cb7
zhangqijia
fix: update 装备脱/戴
|
119
120
121
122
123
124
|
outHero = h1.(*models.HeroModel)
outHero.UpdateEquipment(equip.Equip.Id, 0)
}
if h2 != nil {
outHero = h2.(*models.HeroModel)
outHero.UpdateEquipment(equip.Equip.Id, 0)
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
125
|
}
|
81289393
zhangqijia
update
|
126
|
equip.SetProperty("heroid", "")
|
02d11cb7
zhangqijia
fix: update 装备脱/戴
|
127
|
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
128
|
} else {
|
02d11cb7
zhangqijia
fix: update 装备脱/戴
|
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
if h1 == nil {
return 3, nil
}
inHero = h1.(*models.HeroModel)
if equip.Equip.HeroId == "" {
var outEquipID string
for id, tbId := range inHero.Equipments {
tmpEquip := csvdata.Get().TbEquipmentData.Get(tbId)
if tmpEquip.EquipType == inEquip.EquipType {
outEquipID = id
break
}
}
if outEquipID != "" {
tmpEuqip, ok := role.Equipments[outEquipID]
if ok {
outEquip := tmpEuqip.(*models.EquipModel)
outEquip.SetProperty("heroid", "")
inHero.UpdateEquipment(outEquipID, 0)
}
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
151
152
|
}
|
02d11cb7
zhangqijia
fix: update 装备脱/戴
|
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
inHero.UpdateEquipment(equip.Equip.Id, inEquip.EquipID)
equip.SetProperty("heroid", inHero.Hero.Id)
} else if equip.Equip.HeroId != req.HeroId {
if h2 == nil {
return 4, nil
}
outHero = h2.(*models.HeroModel)
var outEquipID string
for id, tbId := range inHero.Equipments {
tmpEquip := csvdata.Get().TbEquipmentData.Get(tbId)
if tmpEquip.EquipType == inEquip.EquipType {
outEquipID = id
break
}
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
169
170
|
}
|
02d11cb7
zhangqijia
fix: update 装备脱/戴
|
171
172
173
174
175
176
177
178
179
180
181
182
|
if outEquipID != "" {
tmpEquip, ok := role.Equipments[outEquipID]
if ok {
outEquip := tmpEquip.(*models.EquipModel)
outEquip.SetProperty("heroid", "")
inHero.UpdateEquipment(outEquipID, 0)
}
}
outHero.UpdateEquipment(equip.Equip.Id, 0)
inHero.UpdateEquipment(equip.Equip.Id, inEquip.EquipType)
equip.SetProperty("heroid", inHero.Hero.Id)
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
183
184
|
}
}
|
02d11cb7
zhangqijia
fix: update 装备脱/戴
|
185
|
|
17fe96be
zhangqijia
feat: 增加装备相关数据和协议
|
186
187
|
return 0, nil
}
|
51d48d11
zhangqijia
fix: 删除装备 删除物品请求
|
188
|
|
4a502dd5
zhangqijia
fix: game,account...
|
189
190
191
192
|
/*
RoleClearItemsRpc 删除物品
2 删除失败
*/
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
193
|
func RoleClearItemsRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) {
|
51d48d11
zhangqijia
fix: 删除装备 删除物品请求
|
194
195
|
req := pb.RoleClearItemsReq{}
if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
|
8f6d9ea9
zhangqijia
fix: UpLevel
|
196
|
logger.Error("proto rpc err: %v", err)
|
51d48d11
zhangqijia
fix: 删除装备 删除物品请求
|
197
198
|
return 1, nil
}
|
51d48d11
zhangqijia
fix: 删除装备 删除物品请求
|
199
|
|
c99d59cc
zhangqijia
fix: 批量删除物品
|
200
201
202
203
204
205
206
207
208
209
210
211
212
|
bkup := make(common.IMapStringNum)
for _, item := range req.Items {
for k, v := range common.StringToMapNum(item) {
tmp, ok := bkup[k]
if !ok {
tmp = 0
}
bkup[k] = v + tmp
}
}
if !role.CostItems(bkup) {
logger.Error("cost err: %s", common.MapNumToString(bkup))
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
213
|
return 2, nil
|
51d48d11
zhangqijia
fix: 删除装备 删除物品请求
|
214
215
216
217
|
}
return 0, nil
}
|
4a502dd5
zhangqijia
fix: game,account...
|
218
219
220
221
|
/*
EquipmentDelRpc 删除装备
2 删除失败
*/
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
222
|
func EquipmentDelRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) {
|
51d48d11
zhangqijia
fix: 删除装备 删除物品请求
|
223
224
225
226
227
|
req := pb.EquipmentDelReq{}
if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
logger.Error("loginRpc err: %v", err)
return 1, nil
}
|
8db23cb6
zhangqijia
fix: 批量删除装备 mongo...
|
228
|
filter := bson.D{{"id", bson.D{{"$in", req.Id}}}}
|
f74e34e3
zhangqijia
fix: 批量删除装备
|
229
|
if err := mongoproxy.DelMany("equipment", filter); err != nil {
|
51d48d11
zhangqijia
fix: 删除装备 删除物品请求
|
230
|
logger.Error(err.Error())
|
3e92be67
zhangqijia
fix: 优化协议,除了登录和创建...
|
231
|
return 2, nil
|
51d48d11
zhangqijia
fix: 删除装备 删除物品请求
|
232
|
}
|
f74e34e3
zhangqijia
fix: 批量删除装备
|
233
234
235
236
|
for _, id := range req.Id {
delete(role.Equipments, id)
}
|
51d48d11
zhangqijia
fix: 删除装备 删除物品请求
|
237
238
239
|
return 0, nil
}
|
ddc88bac
zhangqijia
fix: 记录战斗
|
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
|
/*
RoleStartBattleRpc 开始战斗
*/
func RoleStartBattleRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) {
req := pb.RoleStartBattleReq{}
if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
logger.Error("loginRpc err: %v", err)
return 1, nil
}
//TODO 消耗体力
return 0, nil
}
/*
RoleEndBattleRpc 结束战斗
2 关卡不存在
RoleEndBattleRsp 返回值
*/
func RoleEndBattleRpc(role *models.RoleModel, msg components.IMessage) (int32, interface{}) {
req := pb.RoleEndBattleReq{}
if err := proto.Unmarshal(msg.GetData(), &req); err != nil {
logger.Error("loginRpc err: %v", err)
return 1, nil
}
|
ddc88bac
zhangqijia
fix: 记录战斗
|
268
|
chapterInfo := csvdata.Get().TbRogueChapter.Get(req.ChapterId)
|
ddc88bac
zhangqijia
fix: 记录战斗
|
269
|
chapterCount, first := role.Role.PassChapters[req.ChapterId]
|
ddc88bac
zhangqijia
fix: 记录战斗
|
270
271
272
273
274
275
|
carbonInfo, ok := chapterInfo.Carbons[req.CarbonId]
if !ok {
logger.Error("carbonInfo not exists")
return 2, nil
}
|
92256e32
zhangqijia
fix: 结束战斗的协议加上队伍id
|
276
277
278
279
280
281
282
|
//team
team, ok := role.Teams[req.TeamId]
if !ok {
logger.Error("team not exists")
return 3, nil
}
|
ddc88bac
zhangqijia
fix: 记录战斗
|
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
|
reward := make(common.IMapStringNum)
if !first {
role.Role.PassChapters[req.ChapterId] = 1
for k, v := range common.StringToMapNum(carbonInfo.FirstAward) {
reward[k] = v
}
} else {
role.Role.PassChapters[req.ChapterId] = chapterCount + 1
}
for k, v := range common.StringToMapNum(carbonInfo.NormalAward) {
rv, ok := reward[k]
if !ok {
reward[k] = v
} else {
reward[k] = rv + v
}
}
//award
reward = role.Award(reward)
//exp
|
686ff048
zhangqijia
fix: 结束战斗增加字段
|
305
|
var amount int32
|
ddc88bac
zhangqijia
fix: 记录战斗
|
306
|
if req.Pass {
|
686ff048
zhangqijia
fix: 结束战斗增加字段
|
307
|
amount = carbonInfo.CarbonExp
|
ddc88bac
zhangqijia
fix: 记录战斗
|
308
|
} else {
|
686ff048
zhangqijia
fix: 结束战斗增加字段
|
309
|
amount = carbonInfo.CarbonFailExp
|
ddc88bac
zhangqijia
fix: 记录战斗
|
310
|
}
|
686ff048
zhangqijia
fix: 结束战斗增加字段
|
311
|
level, exp := role.UpLevel(amount)
|
2ea16684
zhangqijia
fix: update
|
312
|
role.UpdateProperties(map[string]interface{}{"level": level, "exp": exp}, true)
|
ddc88bac
zhangqijia
fix: 记录战斗
|
313
|
|
92256e32
zhangqijia
fix: 结束战斗的协议加上队伍id
|
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
|
//team exp
heros := make([]*pb.Hero, 4)
t := team.(*models.TeamModel).Team
h1, ok := role.Heros[t.HeroId1]
if ok {
level, exp := h1.(*models.HeroModel).UpLevel(amount)
h1.SetProperty("level", level)
h1.SetProperty("exp", exp)
heros = append(heros, h1.(*models.HeroModel).Hero)
}
h2, ok := role.Heros[t.HeroId2]
if ok {
level, exp := h2.(*models.HeroModel).UpLevel(amount)
h2.SetProperty("level", level)
h2.SetProperty("exp", exp)
heros = append(heros, h2.(*models.HeroModel).Hero)
}
h3, ok := role.Heros[t.HeroId3]
if ok {
level, exp := h3.(*models.HeroModel).UpLevel(amount)
h3.SetProperty("level", level)
h3.SetProperty("exp", exp)
heros = append(heros, h3.(*models.HeroModel).Hero)
}
|
8f6d9ea9
zhangqijia
fix: UpLevel
|
341
|
rsp := &pb.RoleEndBattleRsp{
|
686ff048
zhangqijia
fix: 结束战斗增加字段
|
342
343
344
345
346
|
RoleLevel: level,
RoleExp: exp,
RoleExpamount: amount,
Pass: req.Pass,
Reward: common.MapNumToString(reward),
|
92256e32
zhangqijia
fix: 结束战斗的协议加上队伍id
|
347
|
Hero: heros,
|
ddc88bac
zhangqijia
fix: 记录战斗
|
348
349
350
|
}
return 0, rsp
}
|