rolePlugin.go 3.23 KB
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
}