package models import ( "fmt" "pro2d/pb" "pro2d/src/common" "pro2d/src/components/db" "pro2d/src/components/logger" "pro2d/src/utils" "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) updateProperty(property map[string]interface{}) { } 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) OnOfflineEvent() { // 设置最新的登录时间 m.saveRoleData(utils.Timex()) } func (m *RoleModel) saveRoleData(now int64) { if now - m.lastSaveTs < common.SaveDataInterval { return } atomic.StoreInt64(&m.lastSaveTs, now) m.Update() }