package models import ( "fmt" "github.com/golang/protobuf/proto" "pro2d/common" "pro2d/common/logger" "pro2d/csvdata" "pro2d/pb" ) //背包系统 func (m *RoleModel) GetItemCount(key string) int32 { c, ok := m.Items[key] if !ok { c = int32(0) } return c } func (m *RoleModel) CostItem(key string, count int32) bool { if count > m.GetItemCount(key) { return false } return m.AddItem(key, -count) } func (m *RoleModel) CostItems(params common.IMapStringNum) bool { for k, v := range params { if v > m.GetItemCount(k) { return false } m.AddItem(k, -v) } return true } func (m *RoleModel) AddItem(key string, count int32) bool { c := m.GetItemCount(key) num := c + count if num > 0 { m.Items[key] = num } else { delete(m.Items, key) } m.SetProperty("items", common.MapNumToString(m.Items)) rsp, err := proto.Marshal(&pb.RoleUpdateItemsRsp{Items: fmt.Sprintf("%s=%d", key, num)}) if err != nil { logger.Error(err.Error()) return true } if m.GetConn() != nil { m.GetConn().Send(0, uint32(pb.ProtoCode_RoleUpdateItemsRsp), rsp) } return true } func (m *RoleModel) AddItems(params common.IMapStringNum) bool { tmp := make(common.IMapString) for k, v := range params { c := m.GetItemCount(k) num := c + v if num > 0 { m.Items[k] = num tmp[k] = num } else { delete(m.Items, k) } } m.SetProperty("items", common.MapNumToString(m.Items)) rsp, err := proto.Marshal(&pb.RoleUpdateItemsRsp{Items: common.MapToString(tmp)}) if err != nil { logger.Error(err.Error()) return true } if m.GetConn() != nil { m.GetConn().Send(0, uint32(pb.ProtoCode_RoleUpdateItemsRsp), rsp) } return true } 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 { team.RoleId = m.Role.Id 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) { update := &pb.EquipmentAddRsp{Equip: equip} if rsp, err := proto.Marshal(update); err != nil { logger.Error(" EquipmentAddNotify err:", err.Error()) return } else { if m.GetConn() != nil { m.GetConn().SendSuccess(uint32(pb.ProtoCode_EquipmentAddRsp), rsp) } } } func (m *RoleModel) UpLevel(exp int32) (int32, int32) { level := m.Role.Level oldLevelExp := csvdata.Get().TbAccountLevelExp.Get(level) if oldLevelExp == nil { return level, m.Role.Level } if exp >= oldLevelExp.NeedExp-m.Role.Exp { exp = exp - (oldLevelExp.NeedExp - m.Role.Exp) level++ for exp > 0 { oldLevelExp = csvdata.Get().TbAccountLevelExp.Get(level) if oldLevelExp == nil { return level, exp } if exp >= oldLevelExp.NeedExp { exp = exp - oldLevelExp.NeedExp level++ } else { exp = exp + m.Role.Exp break } } } else { exp = exp + m.Role.Exp } return level, exp } func (m *RoleModel) Award(award common.IMapStringNum) common.IMapStringNum { m.AddItems(award) return award }