| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- package model
- import (
- "rocommon/util"
- "roserver/baseserver/model"
- "roserver/serverproto"
- )
- func (this *Role) PetEquipLevelUp(petEquipId uint32) {
- if this.rolePet != nil {
- ret := this.rolePet.PetEquipLevelUp(petEquipId)
- ackMsg := &serverproto.SCPetEquipLevelUpAck{
- Error: int32(ret),
- }
- this.ReplayGate(ackMsg, true)
- }
- }
- func (this *Role) PetEquipUp(petId uint32, slotIndexList []*serverproto.KeyValueType) {
- if this.rolePet != nil {
- ret := this.rolePet.PetEquipUp(petId, slotIndexList)
- ackMsg := &serverproto.SCPetEquipUPAck{
- Error: int32(ret),
- PetId: petId,
- SlotList: slotIndexList,
- }
- this.ReplayGate(ackMsg, true)
- }
- }
- func (this *Role) PetEquipDown(petId uint32, slotIndex int32) {
- if this.rolePet != nil {
- ret := this.rolePet.PetEquipDown(petId, slotIndex)
- ackMsg := &serverproto.SCPetEquipDownAck{
- Error: int32(ret),
- PetId: petId,
- SlotIndex: slotIndex,
- }
- this.ReplayGate(ackMsg, true)
- }
- }
- const PetEquipSlotNum = 6 //印记格子最大数量
- func (this *RolePet) GetPetEquip(petEquipId uint32) *serverproto.PetEquipData {
- petEquipData, ok := this.petEquipList[petEquipId]
- if ok {
- return petEquipData
- }
- return nil
- }
- func (this *RolePet) petEquipChangeNtf(changeData []*serverproto.PetEquipData, ignore bool) {
- ntfMsg := &serverproto.SCPetEquipDataNtf{
- PetEquipList: changeData,
- Ignore: ignore,
- }
- this.role.ReplayGate(ntfMsg, true)
- }
- //印记是否已经装备到宠物
- func (this *RolePet) isEquipUp(petEquipId uint32) bool {
- petEquipData := this.GetPetEquip(petEquipId)
- if petEquipData == nil {
- return false
- }
- return petEquipData.EquipPetId > 0
- }
- func (this *RolePet) AddPetEquip(petCfgEquipId, petEquipLevel int32, bNotify bool) *serverproto.PetEquipData {
- _, ok := model.ConvertPetEquip[petCfgEquipId]
- if !ok {
- util.ErrorF("uid=%v AddPetEquip equip data not find!!!", this.role.GetUUid(), petCfgEquipId)
- return nil
- }
- //id复用之前添加宠物字段
- this.maxPetId++
- petEquip := &serverproto.PetEquipData{
- Id: uint32(this.maxPetId),
- EquipCfgId: petCfgEquipId,
- Level: petEquipLevel, //默认一级
- }
- this.petEquipList[petEquip.Id] = petEquip
- this.dbChangePetEquipList.Add(petEquip.Id)
- this.SetDirty(true)
- util.InfoF("uid=%v AddPetEquip petEquipCfgId=%v id=%v", this.role.GetUUid(), petCfgEquipId, this.maxPetId)
- if bNotify {
- this.petEquipChangeNtf([]*serverproto.PetEquipData{petEquip}, false)
- }
- return petEquip
- }
- func (this *RolePet) AddPetEquipList(petCfgEquipId, count int32, petEquipLevel int32, ignore bool) {
- var ntfDataList []*serverproto.PetEquipData
- for idx := 0; idx < int(count); idx++ {
- petEquipData := this.AddPetEquip(petCfgEquipId, petEquipLevel, false)
- if petEquipData != nil {
- ntfDataList = append(ntfDataList, petEquipData)
- }
- }
- if len(ntfDataList) > 0 {
- this.petEquipChangeNtf(ntfDataList, ignore)
- }
- }
- func (this *RolePet) AddPetEquipByMapList(addList map[int32]int32, bNotify bool) {
- var ntfDataList []*serverproto.PetEquipData
- for key, val := range addList {
- for idx := 0; idx < int(val); idx++ {
- petEquipData := this.AddPetEquip(key, 1, false)
- if petEquipData != nil {
- ntfDataList = append(ntfDataList, petEquipData)
- }
- }
- }
- if len(ntfDataList) > 0 && bNotify {
- this.petEquipChangeNtf(ntfDataList, false)
- }
- }
- func (this *RolePet) PetEquipLevelUp(petEquipId uint32) serverproto.ErrorCode {
- petEquipData := this.GetPetEquip(petEquipId)
- if petEquipData == nil {
- return serverproto.ErrorCode_ERROR_PET_EQUIP_NOT_EXIST
- }
- cfgData, ok := model.ConvertPetEquip[petEquipData.EquipCfgId]
- if !ok {
- util.ErrorF("uid=%v EquipLevelUp equip data not find!!!", this.role.GetUUid(), petEquipId)
- return serverproto.ErrorCode_ERROR_PET_EQUIP_NOT_EXIST
- }
- if petEquipData.Level >= cfgData.MaxLevel {
- //进阶处理
- //advance
- if cfgData.AdvanceTargetEquip <= 0 {
- return serverproto.ErrorCode_ERROR_PET_EQUIP_MAX_LEVEL
- }
- if !this.role.GetRoleBag().CanDelItemList(cfgData.AdvanceCost) {
- return serverproto.ErrorCode_ERROR_PET_ADVANCE_COST
- }
- this.role.GetRoleBag().DelItemList(cfgData.AdvanceCost, AddItemST{AddFrom: AddFrom_PetEquip})
- petEquipData.Level = 1
- petEquipData.EquipCfgId = cfgData.AdvanceTargetEquip
- util.InfoF("uid=%v PetEquipLevelUp id=%v oldcfgId=%v newcfgId=%v", petEquipData.Id,
- cfgData.CfgId, cfgData.AdvanceTargetEquip)
- TaskMagCheck(this.role, serverproto.TaskType_Eve_Pet_Battle_Quality_cnt, 1)
- } else {
- //levelup
- levelUpCfgData, ok := cfgData.LevelUpList[petEquipData.Level]
- if !ok {
- util.ErrorF("uid=%v EquipLevelUp equip data not find!!!", this.role.GetUUid(), petEquipId)
- return serverproto.ErrorCode_ERROR_PET_EQUIP_NOT_EXIST
- }
- if !this.role.GetRoleBag().CanDelItemList(levelUpCfgData.CostList) {
- return serverproto.ErrorCode_ERROR_PET_EQUIPLEVELUP_COST
- }
- this.role.GetRoleBag().DelItemList(levelUpCfgData.CostList, AddItemST{AddFrom: AddFrom_PetEquip})
- petEquipData.Level++
- }
- this.SetDirty(true)
- this.petEquipChangeNtf([]*serverproto.PetEquipData{petEquipData}, false)
- //属性计算 AttrChange
- if petEquipData.EquipPetId > 0 {
- petData := this.getPet(petEquipData.EquipPetId)
- //bFightChangeNotNotify := true
- //if petData != nil && petData.HeroId > 0 {
- // bFightChangeNotNotify = false
- //}
- this.role.roleBattleAttr.AttrChange(AttrChangeST{
- IsPet: true,
- ChangeType: Attr_Change_Pet_Equip,
- ChangePetData: petData,
- //FightChangeNotNotify: bFightChangeNotNotify,
- })
- }
- //petData := this.getPet(petEquipData.EquipPetId)
- //if petData != nil && petData.HeroId != 0 {
- // heroData := this.role.GetRoleHero().GetHero(petData.HeroId)
- // if heroData != nil {
- // this.role.GetRoleFightPower().CalcPetEquipFightPower(heroData.Id, petData.Id, false)
- // }
- //
- //}
- petData := this.getPet(petEquipData.EquipPetId)
- if petData != nil {
- this.petChangeNtf([]*serverproto.PetData{petData}, nil, nil, false)
- }
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RolePet) PetEquipUp(petId uint32, slotIndexList []*serverproto.KeyValueType) serverproto.ErrorCode {
- petData := this.getPet(petId)
- if petData == nil {
- return serverproto.ErrorCode_ERROR_PET_NOT_FOUND
- }
- if len(slotIndexList) <= 0 {
- return serverproto.ErrorCode_ERROR_FAIL
- }
- var changePetEquipData []*serverproto.PetEquipData
- for idx := 0; idx < len(slotIndexList); idx++ {
- if slotIndexList[idx].Key <= 0 || slotIndexList[idx].Value <= 0 ||
- slotIndexList[idx].Key > PetEquipSlotNum {
- continue
- }
- petEquipData := this.GetPetEquip(uint32(slotIndexList[idx].Value))
- if petEquipData == nil {
- continue
- }
- cfgData, ok := model.ConvertPetEquip[petEquipData.EquipCfgId]
- if !ok {
- continue
- }
- if cfgData.Type != slotIndexList[idx].Key {
- continue
- }
- //当前印记已经装备
- if petEquipData.EquipPetId > 0 {
- continue
- }
- bFindSlotIdx := false
- for _, slot := range petData.SlotEquipList {
- if slot.Idx == slotIndexList[idx].Key {
- //已经装备的印记卸下
- if slot.EquipId > 0 {
- downEquip := this.petEquipDown(slot.EquipId)
- if downEquip != nil {
- changePetEquipData = append(changePetEquipData, downEquip)
- }
- slot.EquipId = 0
- }
- //装备新印记
- slot.EquipId = petEquipData.Id
- petEquipData.EquipPetId = petData.Id
- this.SetDirty(true)
- this.dbChangePetEquipList.Add(petEquipData.Id)
- changePetEquipData = append(changePetEquipData, petEquipData)
- bFindSlotIdx = true
- break
- }
- }
- //装备新印记
- if !bFindSlotIdx {
- petData.SlotEquipList = append(petData.SlotEquipList,
- &serverproto.PetSlotDetailData{
- Idx: slotIndexList[idx].Key,
- EquipId: petEquipData.Id,
- })
- petEquipData.EquipPetId = petData.Id
- this.SetDirty(true)
- this.dbChangePetEquipList.Add(petEquipData.Id)
- changePetEquipData = append(changePetEquipData, petEquipData)
- }
- }
- //equip ntf
- this.petEquipChangeNtf(changePetEquipData, false)
- if len(changePetEquipData) > 0 {
- this.dbChangePetList.Add(petData.Id)
- //slot ntf
- this.petChangeNtf([]*serverproto.PetData{petData}, nil, nil, false)
- ////属性计算 AttrChange
- //bFightChangeNotNotify := true
- //if petData.HeroId > 0 {
- // bFightChangeNotNotify = false
- //}
- this.role.roleBattleAttr.AttrChange(AttrChangeST{
- IsPet: true,
- ChangeType: Attr_Change_Pet_Equip,
- ChangePetData: petData,
- //FightChangeNotNotify: bFightChangeNotNotify,
- })
- TaskMagCheck(this.role, serverproto.TaskType_Eve_Pet_Battle_Quality_cnt, 1)
- }
- //if petData.HeroId != 0 {
- // heroData := this.role.GetRoleHero().GetHero(petData.HeroId)
- // if heroData != nil {
- // this.role.GetRoleFightPower().CalcPetEquipFightPower(heroData.Id, petData.Id, false)
- // }
- //}
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RolePet) PetEquipDown(petId uint32, slotIndex int32) serverproto.ErrorCode {
- petData := this.getPet(petId)
- if petData == nil {
- return serverproto.ErrorCode_ERROR_PET_NOT_FOUND
- }
- if slotIndex > PetEquipSlotNum {
- return serverproto.ErrorCode_ERROR_OK
- }
- var changePetEquipData []*serverproto.PetEquipData
- //一键卸下
- if slotIndex <= 0 {
- for _, slotIdx := range petData.SlotEquipList {
- if slotIdx.EquipId > 0 {
- downEquip := this.petEquipDown(slotIdx.EquipId)
- if downEquip != nil {
- changePetEquipData = append(changePetEquipData, downEquip)
- }
- slotIdx.EquipId = 0
- this.SetDirty(true)
- }
- }
- if len(changePetEquipData) > 0 {
- this.dbChangePetList.Add(petData.Id)
- }
- } else {
- for _, slotIdx := range petData.SlotEquipList {
- if slotIdx.Idx != slotIndex {
- continue
- }
- if slotIdx.EquipId > 0 {
- downEquip := this.petEquipDown(slotIdx.EquipId)
- if downEquip != nil {
- changePetEquipData = append(changePetEquipData, downEquip)
- this.dbChangePetEquipList.Add(downEquip.Id)
- }
- slotIdx.EquipId = 0
- this.SetDirty(true)
- }
- break
- }
- }
- if len(changePetEquipData) > 0 {
- //equip ntf
- this.petEquipChangeNtf(changePetEquipData, false)
- //slot ntf
- this.petChangeNtf([]*serverproto.PetData{petData}, nil, nil, false)
- this.dbChangePetList.Add(petData.Id)
- //属性计算 AttrChange
- //bFightChangeNotNotify := true
- //if petData.HeroId > 0 {
- // bFightChangeNotNotify = false
- //}
- this.role.roleBattleAttr.AttrChange(AttrChangeST{
- IsPet: true,
- ChangeType: Attr_Change_Pet_Equip,
- ChangePetData: petData,
- //FightChangeNotNotify: bFightChangeNotNotify,
- })
- TaskMagCheck(this.role, serverproto.TaskType_Eve_Pet_Battle_Quality_cnt, 1)
- }
- //if petData.HeroId != 0 {
- // heroData := this.role.GetRoleHero().GetHero(petData.HeroId)
- // if heroData != nil {
- // this.role.GetRoleFightPower().CalcPetEquipFightPower(heroData.Id, petData.Id, false)
- // }
- //}
- return serverproto.ErrorCode_ERROR_OK
- }
- func (this *RolePet) petEquipDown(petEquipId uint32) *serverproto.PetEquipData {
- petEquipData := this.GetPetEquip(petEquipId)
- if petEquipData == nil {
- return nil
- }
- petEquipData.EquipPetId = 0
- this.SetDirty(true)
- this.dbChangePetEquipList.Add(petEquipData.Id)
- return petEquipData
- }
|