role.go
2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
115
116
117
118
119
120
package models
import (
"fmt"
"pro2d/protos/pb"
"pro2d/src/common"
"pro2d/src/components/db"
"pro2d/src/components/logger"
"sync/atomic"
)
type RoleModel struct {
*db.Schema
Role *pb.Role
Heros HeroMap
Teams *TeamModel
Equip *EquipModels
Prop *PropModels
lastSaveTs int64
}
func RoleExistByUid(uid string) *RoleModel {
data := &pb.Role{Uid: uid}
if err := db.FindOne(db.GetBsonM("uid", uid), data); err != nil {
logger.Error("Role exist err: %v", err)
return nil
}
r := &RoleModel{
Schema: db.NewSchema(data.Id, data),
Role: data,
Heros: make(HeroMap),
Teams: new(TeamModel),
Equip: new(EquipModels),
Prop: new(PropModels),
}
r.LoadAll()
return r
}
func NewRole(id string) *RoleModel {
data := &pb.Role{Id: id}
m := &RoleModel{
Schema: db.NewSchema(id, data),
Role: data,
Heros: make(HeroMap),
Teams: new(TeamModel),
Equip: new(EquipModels),
Prop: new(PropModels),
}
return m
}
func (m *RoleModel) LoadHero() {
m.Heros["test"] = NewHero("")
m.Heros["test"].Hero = &pb.Hero{
Id: "1",
RoleId: m.Role.Id,
Type: 1,
Level: 1,
ReinCount: 0,
ReinPoint: 0,
Equipments: "123123",
}
}
func (m *RoleModel) LoadTeams() {
m.Teams = NewTeam("0")
m.Teams.Team = &pb.Team{
Id: "1",
HeroIds: "1",
}
}
func (m *RoleModel) LoadEquips() {
m.Equip = NewEquip("0")
m.Equip.Equip = &pb.Equipment{
Id: "0",
RoleId: m.Role.Id,
Type: 0,
Equip: false,
EnhanceLevel: false,
}
}
func (m *RoleModel) LoadAll() {
m.LoadHero()
m.LoadTeams()
m.LoadEquips()
}
func (m *RoleModel) AddHero(hero *pb.Hero) {
h := NewHero(hero.Id)
h.Hero = hero
h.Create()
m.Heros[fmt.Sprintf("%s%s", m.Role.Id, h.Hero.Id)] = h
}
func (m *RoleModel) GetAllHero() []*pb.Hero {
var h []*pb.Hero
for _, hero := range m.Heros {
h = append(h, hero.Hero)
}
return h
}
func (m *RoleModel) OnRecoverTimer(now int64) {
m.saveRoleData(now)
}
func (m *RoleModel) saveRoleData(now int64) {
if now - m.lastSaveTs < common.SaveDataInterval {
return
}
atomic.StoreInt64(&m.lastSaveTs, now)
m.Update()
}