예제 #1
0
        public void AddPet(List <PPet> pets)
        {
            if (AllPets == null)
            {
                AllPets = new List <PPet>();
            }

            AllPets.AddRange(pets);
            foreach (PPet pet in pets)
            {
                PetVos.Add(pet.id, PetLogic.GetPetVo(pet));
            }
            AddTotal();
            AllPets.Sort(PetLogic.SortPet);

            DataUpdate(PetList);
            foreach (PPet pet in pets)
            {
                CurrentPet = pet;
                DataUpdate(NewPet);
            }
        }
예제 #2
0
        public void UpdatePet(uint id, List <PItem> items)
        {
            PPet pet          = GetPetById(id);
            bool stateChange  = false;
            bool evolve       = false;
            bool skillUpgrade = false;
            bool equipWear    = false;
            bool gradeUpgrade = false;
            bool levelUpgrade = false;
            bool sortChange   = false;

            if (pet == null)
            {
                Log.error(this, id + "当前宠物数据不存在");
            }
            else
            {
                CurrentPet = pet;
                foreach (PItem item in items)
                {
                    if (item.key == 5)
                    {
                        if (item.value[0] > pet.lvl)
                        {
                            pet.lvl      = item.value[0];
                            sortChange   = true;
                            levelUpgrade = true;
                        }
                    }
                    else if (item.key == 6)
                    {
                        pet.exp = item.value[0];
                    }
                    else if (item.key == 7)
                    {
                        pet.state   = (byte)item.value[0];
                        stateChange = true;
                    }
                    else if (item.key == 8)
                    {
                        pet.star   = item.value[0];
                        evolve     = true;
                        sortChange = true;
                    }
                    else if (item.key == 9)
                    {
                        //升阶
                        if ((byte)item.value[0] > pet.grade)
                        {
                            pet.grade    = (byte)item.value[0];
                            gradeUpgrade = true;
                            sortChange   = true;
                        }
                    }
                    else if (item.key == 10)
                    {
                        //装备升阶
                        if (item.value.Count == 0)
                        {
                            pet.equip = item.value;
                        }
                        else
                        {
                            //装备信息变化
                            for (int i = 0; i < item.value.Count;)
                            {
                                uint pos     = item.value[i];
                                uint equipId = item.value[i + 1];

                                //当前装备
                                int cEquipId = GetPetEquipByPos(pet.id, pos);
                                if (cEquipId == -1)
                                {
                                    //添加装备
                                    pet.equip.Add(pos);
                                    pet.equip.Add(equipId);
                                    equipWear   = true;
                                    WearedEquip = new uint[] { pos, equipId };
                                }
                                i = i + 2;
                            }
                        }
                    }
                    else if (item.key == 15)
                    {
                        for (int i = 0; i < item.value.Count;)
                        {
                            byte pos = (byte)item.value[i];
                            byte lvl = (byte)item.value[i + 1];

                            int index = GetPetSkillIndexByPos(pet.id, pos);
                            if (index == -1)
                            {
                                //添加技能
                                pet.skills.Add(pos);
                                pet.skills.Add(lvl);
                            }
                            else
                            {
                                uint clvl = pet.skills[index + 1];
                                if (clvl < lvl)
                                {
                                    pet.skills[index + 1] = lvl;
                                    skillUpgrade          = true;
                                    UpgradedSkill         = new uint[] { pos, lvl };
                                }
                            }
                            i = i + 2;
                        }
                    }
                }
                //更新属性
                PetLogic.SetPetVo(pet, PetVos[pet.id]);
                AddTotal();

                //发出通知数据更新
                if (stateChange)
                {
                    SetFightPet();
                }
                if (levelUpgrade)
                {
                    DataUpdate(LevelUpgrade);
                }
                if (evolve)
                {
                    DataUpdate(EvolvePet);
                    DataUpdate(FightPet);
                }
                if (skillUpgrade)
                {
                    //技能升级的通知
                    DataUpdate(SkillUpgrade);
                }
                if (equipWear)
                {
                    //穿新装备通知
                    DataUpdate(WearEquip);
                }
                if (gradeUpgrade)
                {
                    DataUpdate(GradeUpgrade);
                }
                DataUpdate(UpdatedPet);
                if (sortChange)
                {
                    AllPets.Sort(PetLogic.SortPet);
                }
                DataUpdate(PetList);
            }
        }