Esempio n. 1
0
        //休息精灵
        public ErrorCodes DisBattleElf(CharacterController character, int index)
        {
            var nowFightCount = character.GetElfFightCount();

            if (index < 0 && index >= 3)
            {
                return(ErrorCodes.Error_ElfNotBattle);
            }
            var item = character.GetItemByBagByIndex((int)eBagType.Elf, index);

            if (item == null || item.GetId() < 0)
            {
                return(ErrorCodes.Error_ElfNotFind);
            }
            var freeindex = character.mBag.mBags[(int)eBagType.Elf].GetFirstFreeIndex(MaxElfFightCount);

            if (freeindex != -1)
            {
                character.mBag.MoveItem((int)eBagType.Elf, index, (int)eBagType.Elf, freeindex, 1);
                character.mBag.RefreshElfAttr();
                character.BooksChange();
                return(ErrorCodes.OK);
            }
            return(ErrorCodes.Error_ItemNoInBag_All);
        }
Esempio n. 2
0
        //脱勋章
        public ErrorCodes RemoveMedal(CharacterController character, int bagId, int bagIndex, ref int putIndex)
        {
            var medal = character.GetItemByBagByIndex(bagId, bagIndex) as MedalItem;

            if (medal == null)
            {
                return(ErrorCodes.Error_ItemNotFind);
            }
            var bag       = character.mBag.GetBag((int)eBagType.MedalBag);
            var freeIndex = bag.GetFirstFreeIndex();

            if (freeIndex == -1)
            {
                return(ErrorCodes.Error_BagIndexOverflow);
            }
            var result = character.mBag.MoveItem(bagId, bagIndex, (int)eBagType.MedalBag, freeIndex, 1);

            if (result != ErrorCodes.OK)
            {
                Logger.Error("DropMedal MoveItem Faild! result={0}", result);
                return(result);
            }
            character.mBag.RefreshMedal();
            character.BooksChange();
            putIndex = freeIndex;
            return(ErrorCodes.OK);
        }
Esempio n. 3
0
        public void CheckBattleElf(CharacterController character)
        {
            var  nowFightCount = character.GetElfFightCount();
            bool bRefresh      = false;

            for (int i = 0; i < 3; i++)
            {
                if (i >= nowFightCount)
                {
                    var item = character.GetItemByBagByIndex((int)eBagType.Elf, i);
                    if (item == null || item.GetId() < 0)
                    {
                        continue;
                    }
                    var freeindex = character.mBag.mBags[(int)eBagType.Elf].GetFirstFreeIndex(MaxElfFightCount);
                    if (freeindex != -1)
                    {
                        bRefresh = true;
                        character.mBag.MoveItem((int)eBagType.Elf, i, (int)eBagType.Elf, freeindex, 1);
                    }
                }
            }
            if (bRefresh)
            {
                character.mBag.RefreshElfAttr();
                character.BooksChange();
            }
        }
Esempio n. 4
0
        //展示精灵
        public ErrorCodes BattleMainElf(CharacterController character, int index)
        {
            if (index <= 0)
            {
                return(ErrorCodes.Error_ElfNotBattle);
            }
            var item = character.GetItemByBagByIndex((int)eBagType.Elf, index);

            if (item == null || item.GetId() < 0)
            {
                return(ErrorCodes.Error_ElfNotFind);
            }

            var tbElf = Table.GetElf(item.GetId());

            if (tbElf == null)
            {
                return(ErrorCodes.Error_ElfNotFind);
            }
            if (item.GetIndex() >= MaxElfFightCount)
            {
                if (character.CheckElfType(tbElf, 0) != -1)
                {
                    return(ErrorCodes.Error_ElfTypeSame);
                }
            }
            var nowFightCount = character.GetElfFightCount();

            if (item.GetIndex() >= MaxElfFightCount) //如果原来是休息的,需要重新为老的尝试找位置
            {
                var tempItem = character.GetItemByBagByIndex((int)eBagType.Elf, 0);
                if (tempItem != null && tempItem.GetId() != -1)
                {
                    var tbtempElf = Table.GetElf(tempItem.GetId());
                    if (tbtempElf != null && tbtempElf.ElfType != tbElf.ElfType) //类型冲突就不找了 直接休息吧
                    {
                        for (var i = 1; i != nowFightCount; ++i)
                        {
                            var tempbatItem = character.GetItemByBagByIndex((int)eBagType.Elf, i);
                            if (tempbatItem == null || tempbatItem.GetId() == -1)
                            {
                                character.mBag.MoveItem((int)eBagType.Elf, 0, (int)eBagType.Elf, i, 1);
                                character.SetRankFlag(RankType.PetFight);
                                break;
                            }
                        }
                    }
                }
            }
            character.mBag.MoveItem((int)eBagType.Elf, index, (int)eBagType.Elf, 0, 1);
            //出战
            //item.MarkDbDirty();
            character.mBag.RefreshElfAttr();
            character.BooksChange();
            character.SetRankFlag(RankType.PetFight);
            return(ErrorCodes.OK);
        }
Esempio n. 5
0
        //出战精灵
        public ErrorCodes BattleElf(CharacterController character, int index, int targetIndex)
        {
            var nowFightCount = character.GetElfFightCount();

            if (targetIndex < 1 || targetIndex >= nowFightCount)
            {
                return(ErrorCodes.Error_DataOverflow);
            }
            if (index == 0 && targetIndex > 3)
            {
                return(ErrorCodes.Error_ElfAlreadyBattle);
            }
            if (index == targetIndex)
            {
                return(ErrorCodes.Error_ElfAlreadyBattle);
            }
            if (index > 0 && index < nowFightCount)
            {
                character.mBag.MoveItem((int)eBagType.Elf, index, (int)eBagType.Elf, targetIndex, 1);
                return(ErrorCodes.OK);
            }
            var elfBag = character.GetBag((int)eBagType.Elf);
            var item   = elfBag.GetItemByIndex(index);

            if (item == null || item.GetId() < 0)
            {
                return(ErrorCodes.Error_ElfNotFind);
            }
            var tbElf = Table.GetElf(item.GetId());

            if (tbElf == null)
            {
                return(ErrorCodes.Error_ElfNotFind);
            }

            if (item.GetIndex() >= MaxElfFightCount)
            {
                if (character.CheckElfType(tbElf, targetIndex) != -1)
                {
                    return(ErrorCodes.Error_ElfTypeSame);
                }
            }
            character.mBag.MoveItem((int)eBagType.Elf, index, (int)eBagType.Elf, targetIndex, 1);
            character.mBag.RefreshElfAttr();
            character.BooksChange();
            return(ErrorCodes.OK);
        }
Esempio n. 6
0
        //阵法强化
        public ErrorCodes EnchanceFormation(CharacterController character, ref int Nextlevel)
        {
            var oldLevel = character.GetExData(82);
            var tbLevel  = Table.GetLevelData(oldLevel);

            if (tbLevel.FightingWayExp <= 0)
            {
                return(ErrorCodes.Error_FormationLevelMax);
            }
            var res = character.mBag.GetRes(eResourcesType.ElfPiece);

            if (res < tbLevel.FightingWayExp)
            {
                return(ErrorCodes.Error_FormationExpNotEnough);
            }
            //character.mBag.SetRes(eResourcesType.ElfPiece, res - tbLevel.FightingWayExp);
            character.mBag.DelRes(eResourcesType.ElfPiece, tbLevel.FightingWayExp, eDeleteItemType.EnchanceFormation);
            Nextlevel = oldLevel + 1;
            character.SetExData(82, Nextlevel);
            character.mBag.RefreshElfAttr();
            character.BooksChange();
            return(ErrorCodes.OK);
        }
Esempio n. 7
0
        public ErrorCodes AstrologyEquipOff(CharacterController character, int astrologyId, int Index)
        {
            if (astrologyId < 0 || astrologyId > 11)
            {
                return(ErrorCodes.Error_DataOverflow);
            }
            if (Index < 0 || Index > 2)
            {
                return(ErrorCodes.Error_DataOverflow);
            }
            //物品是否存在
            var equipIndex = Index * 12 + astrologyId;
            var equipItem  = character.GetItemByBagByIndex((int)eBagType.GemEquip, equipIndex);

            if (equipItem == null || equipItem.GetId() == -1)
            {
                return(ErrorCodes.Error_ItemNotFind);
            }
            //包裹是否有空格脱下
            var freeIndex = character.mBag.GetBag((int)eBagType.GemBag).GetFirstFreeIndex();

            if (freeIndex == -1)
            {
                return(ErrorCodes.Error_ItemNoInBag_All);
            }
            //移动物品
            var result = character.mBag.MoveItem((int)eBagType.GemEquip, equipIndex, (int)eBagType.GemBag, freeIndex,
                                                 1);

            if (result == ErrorCodes.OK)
            {
                character.mBag.RefreshGemAttr();
                character.BooksChange();
            }
            return(result);
        }
Esempio n. 8
0
        //精灵强化
        public ErrorCodes EnchanceElf(CharacterController character, int bagIndex, ref int Nextlevel)
        {
            var item = character.GetItemByBagByIndex((int)eBagType.Elf, bagIndex) as ElfItem;

            if (item == null)
            {
                return(ErrorCodes.Error_ItemNotFind);
            }
            var tbElf = Table.GetElf(item.GetId());

            if (tbElf == null)
            {
                return(ErrorCodes.Error_ElfNotFind);
            }
            var oldLevel = item.GetExdata(0);

            if ((oldLevel >= tbElf.MaxLevel && tbElf.MaxLevel > 0) || (tbElf.MaxLevel == -1 && oldLevel >= character.GetLevel()))
            {
                return(ErrorCodes.Error_ElfLevelMax);
            }
            var tbLevel = Table.GetLevelData(oldLevel);
            var needExp = tbLevel.ElfExp * tbElf.ResolveCoef[0] / 100;
            var oldExp  = character.mBag.GetRes(eResourcesType.ElfPiece);

            if (needExp > oldExp)
            {
                return(ErrorCodes.Error_FormationExpNotEnough);
            }
            //character.mBag.SetRes(eResourcesType.ElfPiece, oldExp - needExp);
            character.mBag.DelRes(eResourcesType.ElfPiece, needExp, eDeleteItemType.EnchanceElf);
            Nextlevel = oldLevel + 1;
            item.SetExdata(0, Nextlevel);
            var oldmaxLevel = character.GetExData((int)eExdataDefine.e328);

            if (Nextlevel > oldmaxLevel)
            {
                character.SetExData((int)eExdataDefine.e328, Nextlevel, true);
                character.Proxy.SyncExdata((int)eExdataDefine.e328, Nextlevel);//同步客户端扩展数据
            }
            //item.MarkDbDirty();//客户端自行增加等级
            if (bagIndex < 3)
            {
                if (bagIndex == 0)
                {
                    character.SetRankFlag(RankType.PetFight);
                }
                character.mBag.RefreshElfAttr();
                character.BooksChange();
            }
            //删除灵兽公告
            //if (Nextlevel >= 10 && Nextlevel%5 == 0)
            //{
            //    //添加公告,恭喜玩家{0}将精灵{1}升至{2}级!实力大增!
            //    var args = new List<string>
            //    {
            //        Utils.AddCharacter(character.mGuid, character.GetName()),
            //        Utils.AddItemId(item.GetId()),
            //        Nextlevel.ToString()
            //    };
            //    var exData = new List<int>();
            //    item.CopyTo(exData);
            //    character.SendSystemNoticeInfo(215002, args, exData);
            //}

            try
            {
                var klog = string.Format("jinglingshengji#{0}|{1}|{2}|{3}|{4}|{5}",
                                         character.mGuid,
                                         character.GetLevel(),
                                         character.serverId,
                                         item.GetId(),
                                         oldLevel, // 升级前等级
                                         DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                PlayerLog.Kafka(klog, 2);
            }
            catch (Exception e)
            {
                Logger.Error(e.Message);
            }

            return(ErrorCodes.OK);
        }
Esempio n. 9
0
        // 精灵升星
        public ErrorCodes EnchanceElfStar(CharacterController character,
                                          int bagIndex,
                                          ref int nextStar)
        {
            var item = character.GetItemByBagByIndex((int)eBagType.Elf, bagIndex) as ElfItem;

            if (item == null)
            {
                return(ErrorCodes.Error_ItemNotFind);
            }
            var tbElf = Table.GetElf(item.GetId());

            if (tbElf == null)
            {
                return(ErrorCodes.Error_ElfNotFind);
            }
            var starLevel = item.GetStarLevel();

            if (starLevel >= tbElf.ElfStarUp.Count)
            {
                return(ErrorCodes.Error_ElfStarMax);
            }
            if (starLevel < 0)
            {
                starLevel = 0;
            }

            // 检查物品
            var tbConsume = Table.GetConsumArray(tbElf.ElfStarUp[starLevel]);

            if (tbConsume == null)
            {
                return(ErrorCodes.Error_ElfConsumeArrayNotFound);
            }

            var elfBag = character.mBag.GetBag((int)eBagType.Elf);

            if (elfBag == null)
            {
                return(ErrorCodes.Unknow);
            }

            // 排除出战的宠物跟自己
            var elfCount = new Dictionary <int, int>();

            for (var i = 3; i < elfBag.mLogics.Count; ++i)
            {
                var itemBase = elfBag.mLogics[i];
                if (itemBase.GetId() < 0)
                {
                    continue;
                }

                if (itemBase.GetIndex() == bagIndex)
                {
                    continue;
                }

                elfCount.modifyValue(itemBase.GetId(), itemBase.GetCount());
            }

            for (var i = 0; i < tbConsume.ItemId.Length; i++)
            {
                var itemId    = tbConsume.ItemId[i];
                var needCount = tbConsume.ItemCount[i];
                if (itemId == -1)
                {
                    continue;
                }
                var tbItem = Table.GetItemBase(itemId);
                if (tbItem == null)
                {
                    return(ErrorCodes.Error_ItemNotFind);
                }
                if (itemId < (int)eResourcesType.CountRes)
                {
                    var res = character.mBag.GetRes((eResourcesType)itemId);
                    if (res < needCount)
                    {
                        return(ErrorCodes.ItemNotEnough);
                    }
                }
                else if (tbItem.InitInBag == (int)eBagType.Elf)
                { // 消耗灵兽
                    int haveCount;
                    if (elfCount.TryGetValue(itemId, out haveCount))
                    {
                        if (haveCount < needCount)
                        {
                            return(ErrorCodes.ItemNotEnough);
                        }
                    }
                    else
                    {
                        return(ErrorCodes.ItemNotEnough);
                    }
                }
                else
                { // 消耗物品
                    if (character.mBag.GetItemCount(itemId) < needCount)
                    {
                        return(ErrorCodes.ItemNotEnough);
                    }
                }
            }

            // 删除物品
            for (var i = 0; i < tbConsume.ItemId.Length; i++)
            {
                var itemId = tbConsume.ItemId[i];
                if (itemId == -1)
                {
                    continue;
                }

                var deleteItemType = eDeleteItemType.ElfStar;
                var needCount      = tbConsume.ItemCount[i];
                if (itemId < (int)eResourcesType.CountRes)
                { // 资源型数据
                    character.mBag.DelRes((eResourcesType)itemId, needCount, deleteItemType);
                    continue;
                }

                var tbItem = Table.GetItemBase(itemId);
                if (tbItem.InitInBag != (int)eBagType.Elf)
                {
                    character.mBag.DeleteItem(itemId, needCount, deleteItemType);
                    continue;
                }

                var delList = new List <ItemBase>();  // 不考虑叠加
                for (var ii = elfBag.mLogics.Count - 1; ii >= 3; ii--)
                {
                    var bagItem = elfBag.mLogics[ii];
                    if (bagItem.GetId() != itemId)
                    {
                        continue;
                    }

                    if (bagIndex == ii)
                    {
                        continue;
                    }

                    delList.Add(bagItem);
                }
                delList.Sort((l, r) =>
                {
                    var lstar = l.GetExdata((int)ElfExdataDefine.StarLevel);
                    var rstar = r.GetExdata((int)ElfExdataDefine.StarLevel);
                    return(lstar < rstar ? -1 : 1);
                });

                for (var j = 0; j < needCount; ++j)
                {
                    var delItem = delList[j];
                    PlayerLog.DataLog(character.mGuid, "elf star levelup id,{0},{1},{2},{3}", item.GetId(), item.GetStarLevel(),
                                      delItem.GetId(), delItem.GetExdata((int)ElfExdataDefine.StarLevel));
                    elfBag.CleanItemByIndex(delItem.GetIndex());
                }
            }

            // 升星
            nextStar = starLevel + 1;
            item.SetStarLevel(nextStar);
            var itemba = Table.GetItemBase(item.GetId());

            if (nextStar == 5)
            {
                var args = new List <string>
                {
                    Utils.AddCharacter(character.mGuid, character.GetName()),
                    string.Format("[{0}]{1}[-]", Utils.GetTableColorString(itemba.Quality), itemba.Name),
                };
                var exExdata = new List <int>();
                character.SendSystemNoticeInfo(291008, args, exExdata);
            }
            if (bagIndex < 3)
            {
                if (bagIndex == 0)
                {
                    character.SetRankFlag(RankType.PetFight);
                }
                character.mBag.RefreshElfAttr();
                character.BooksChange();
            }

            try
            {
                var klog = string.Format("jinglingshengxing#{0}|{1}|{2}|{3}|{4}|{5}",
                                         character.mGuid,
                                         character.GetLevel(),
                                         character.serverId,
                                         item.GetId(),
                                         starLevel,
                                         DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
                PlayerLog.Kafka(klog, 2);
            }
            catch (Exception e)
            {
                Logger.Error(e.Message);
            }

            return(ErrorCodes.OK);
        }
Esempio n. 10
0
        public ErrorCodes AstrologyLevelUp(CharacterController character, int bagId, int bagIndex, List <int> needList)
        {
            var bag = character.mBag.GetBag(bagId);

            if (bag == null)
            {
                return(ErrorCodes.Error_BagID);
            }
            var item = bag.GetItemByIndex(bagIndex);

            if (item == null || item.GetId() == -1)
            {
                return(ErrorCodes.Error_ItemNotFind);
            }
            var tbGem = Table.GetGem(item.GetId());

            if (tbGem == null)
            {
                return(ErrorCodes.Error_GemID);
            }
            //升级操作
            var oldLevel = item.GetExdata(0);
            var oldExp   = item.GetExdata(1);
            var tbLevel  = Table.GetLevelData(oldLevel);
            var color    = tbGem.Quality;
            var needExp  = tbLevel.Exp[color];

            if (needExp == -1)
            {
                return(ErrorCodes.Error_GemLevelMax);
            }
            var totleExp = 0;
            //材料检查
            var needBag = bag;

            if (bagId == (int)eBagType.GemBag)
            {
                if (needList.Contains(bagIndex))
                {
                    return(ErrorCodes.Error_NotSelectUpgrade);
                }
            }
            else
            {
                needBag = character.mBag.GetBag((int)eBagType.GemBag);
            }
            foreach (var i in needList)
            {
                var needItem = needBag.GetItemByIndex(i);
                if (needItem == null || needItem.GetId() == -1)
                {
                    return(ErrorCodes.Error_ItemNotFind);
                }
                var tbGemNeed = Table.GetGem(needItem.GetId());
                if (tbGemNeed == null)
                {
                    continue;
                }
                var needLevel = needItem.GetExdata(0);
                var Exp       = needItem.GetExdata(1) + tbGemNeed.InitExp;
                for (var l = 1; l < needLevel; ++l)
                {
                    Exp += Table.GetLevelData(l).Exp[tbGemNeed.Quality];
                }
                totleExp += Exp;
            }
            //升级操作
            oldExp = oldExp + totleExp;
            var newLevel = oldLevel;
            var newExp   = oldExp;

            while (newExp >= needExp)
            {
                newLevel++;
                newExp -= needExp;
                tbLevel = Table.GetLevelData(newLevel);
                needExp = tbLevel.Exp[color];
                if (needExp == -1)
                {
                    break;
                }
            }
            //消耗材料
            foreach (var i in needList)
            {
                needBag.ReduceCountByIndex(i, 1, eDeleteItemType.AstrologyLevelUp);
                //needBag.CleanItemByIndex(i);
            }
            item.SetExdata(0, newLevel);
            item.SetExdata(1, newExp);
            item.MarkDirty();
            if (bagId == (int)eBagType.GemEquip && newLevel > oldLevel)
            {
                character.mBag.RefreshGemAttr();
                character.BooksChange();
            }
            return(ErrorCodes.OK);
        }
Esempio n. 11
0
        public ErrorCodes AstrologyEquipOn(CharacterController character, int bagIndex, int astrologyId, int Index)
        {
            if (astrologyId < 0 || astrologyId > 11)
            {
                return(ErrorCodes.Error_DataOverflow);
            }
            if (Index < 0 || Index > 2)
            {
                return(ErrorCodes.Error_DataOverflow);
            }
            var bag = character.mBag.GetBag((int)eBagType.GemBag);

            if (bag == null)
            {
                return(ErrorCodes.Error_BagID);
            }
            var equipItem = bag.GetItemByIndex(bagIndex);

            if (equipItem == null || equipItem.GetId() == -1)
            {
                return(ErrorCodes.Error_ItemNotFind);
            }
            var tbGem = Table.GetGem(equipItem.GetId());

            if (tbGem == null)
            {
                return(ErrorCodes.Error_GemID);
            }
            if (tbGem.Type == 50000 && Index == 0)
            {
            }
            else if (tbGem.Type == 51000 && Index == 1)
            {
            }
            else if (tbGem.Type == 52000 && Index == 2)
            {
            }
            else
            {
                return(ErrorCodes.Error_GemID);
            }
            //oldItem
            for (var i = 0; i < 3; ++i)
            {
                if (Index == i)
                {
                    continue;
                }
                var tempItem = character.GetItemByBagByIndex((int)eBagType.GemEquip, i * 12 + astrologyId);
                if (tempItem == null || tempItem.GetId() == -1)
                {
                    continue;
                }
                var tbTempGem = Table.GetGem(tempItem.GetId());
                if (tbTempGem.Type == tbGem.Type)
                {
                    return(ErrorCodes.Error_GemTypeSame);
                }
            }
            var equipIndex = Index * 12 + astrologyId;
            //var oldItem = character.GetItemByBagByIndex((int) eBagType.GemEquip, equipIndex);
            var result = character.mBag.MoveItem((int)eBagType.GemBag, bagIndex, (int)eBagType.GemEquip, equipIndex, 1);

            if (result == ErrorCodes.OK)
            {
                character.mBag.RefreshGemAttr();
                character.BooksChange();
            }
            return(result);
        }
Esempio n. 12
0
        //勋章升级
        public ErrorCodes EnchanceMedal(CharacterController character, int bagId, int bagIndex)
        {
            var medal = character.GetItemByBagByIndex(bagId, bagIndex) as MedalItem;

            if (medal == null)
            {
                return(ErrorCodes.Error_ItemNotFind);
            }

            var expTotle = character.mBag.GetRes(eResourcesType.HomeExp);
            var tb       = Table.GetMedal(medal.GetId());

            if (tb == null)
            {
                return(ErrorCodes.Error_ItemNotFind);
            }
            int lv = medal.GetExdata(0);

            if (lv >= tb.MaxLevel)
            {
                return(ErrorCodes.Error_EquipLevelMax);
            }

            int curL = character.GetExData((int)eExdataDefine.e621);//无尽幻境历史最高等级

            if (lv >= curL)
            {
                return(ErrorCodes.Error_EquipRuneLevelMax);
            }

            var needExp = Table.GetSkillUpgrading(tb.LevelUpExp).GetSkillUpgradingValue(medal.GetExdata(0));
            var exp     = medal.GetExdata(1);

            if (expTotle + exp < needExp)
            {
                return(ErrorCodes.Error_ExpNotEnough);
            }

            medal.AddExp(needExp - exp);
            character.mBag.DelRes(eResourcesType.HomeExp, needExp - exp, eDeleteItemType.EnchanceMedal);
            if (bagId == (int)eBagType.MedalUsed)
            {
                character.mBag.RefreshMedal();
                character.BooksChange();
            }
            var CurrentLevel = medal.GetExdata(0);
            var MaxLevel     = character.GetExData((int)eExdataDefine.e346);

            if (MaxLevel < CurrentLevel)
            {
                character.SetExData((int)eExdataDefine.e346, CurrentLevel);
            }
            if (lv < CurrentLevel)
            {
                try
                {
                    string v = string.Format("FuWenLevelUp_info#{0}|{1}|{2}|{3}|{4}",
                                             character.serverId,
                                             character.mGuid,
                                             character.GetLevel(),
                                             CurrentLevel,
                                             DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")); // 时间
                    PlayerLog.Kafka(v);
                }
                catch (Exception)
                {
                }
            }


            return(ErrorCodes.OK);
        }
Esempio n. 13
0
        //装备勋章
        public ErrorCodes UseMedal(CharacterController character, int bagId, int bagIndex, ref int putIndex)
        {
            if (bagId == (int)eBagType.MedalUsed)
            {
                return(character.RemoveMedal(bagId, bagIndex, ref putIndex));
            }
            if (bagId != (int)eBagType.MedalBag)
            {
                return(ErrorCodes.Error_BagIndexNoItem);
            }
            var medal = character.GetItemByBagByIndex(bagId, bagIndex) as MedalItem;

            if (medal == null)
            {
                return(ErrorCodes.Error_ItemNotFind);
            }
            var bag = character.mBag.GetBag((int)eBagType.MedalUsed);
            //if (useIndex < 0 || useIndex >= bag.GetNowCount())
            //{
            //    return ErrorCodes.Error_DataOverflow;
            //}
            var tbMedal = Table.GetMedal(medal.GetId());

            if (tbMedal == null)
            {
                return(ErrorCodes.Error_MedalID);
            }
            if (tbMedal.CanEquipment != 1)
            {
                return(ErrorCodes.Error_MedalNotEquip);
            }

            var level = character.mBag.GetRes(eResourcesType.LevelRes);

            //类型检查
            var SameIndex = -1;
            var FreeIndex = -1;

            for (var i = 0; i < bag.GetNowCount(); i++)
            {
                var limit = Table.GetServerConfig(1006 + i).ToInt();
                if (level < limit)
                {
                    break;
                }
                var item = bag.GetItemByIndex(i);
                if (item == null)
                {
                    if (FreeIndex == -1)
                    {
                        FreeIndex = i;
                    }
                    continue;
                }
                if (item.GetId() == -1)
                {
                    if (FreeIndex == -1)
                    {
                        FreeIndex = i;
                    }
                    continue;
                }
                var medalTemp = Table.GetMedal(item.GetId());
                if (medalTemp == null)
                {
                    return(ErrorCodes.Error_MedalMaterialNotFind);
                }
                if (medalTemp.MedalType == tbMedal.MedalType)
                {
                    SameIndex = i;
                }
            }
            //移动包裹
            var moveIndex = -1;

            if (SameIndex != -1)
            {
                moveIndex = SameIndex;
            }
            else if (FreeIndex != -1)
            {
                moveIndex = FreeIndex;
            }
            else
            {
                return(ErrorCodes.Error_MedalEquipFull);
            }
            //执行
            var result = character.mBag.MoveItem(bagId, bagIndex, (int)eBagType.MedalUsed, moveIndex, 1);

            if (result != ErrorCodes.OK)
            {
                return(result);
            }
            character.mBag.RefreshMedal();
            character.BooksChange();
            putIndex = moveIndex;
            return(ErrorCodes.OK);
        }
Esempio n. 14
0
        public ErrorCodes SplitMedal(CharacterController character, int bagId, int bagIndex, int flag)
        {
            bool isHave = false;
            var  bag    = character.mBag.GetBag(bagId);
            int  sumExp = 0;

            if (bagIndex >= 0)
            {
                var item = bag.GetItemByIndex(bagIndex);
                if (item == null)
                {
                    return(ErrorCodes.Error_MedalMaterialNotFind);
                }
                if (item.GetId() == -1)
                {
                    return(ErrorCodes.Error_MedalMaterialNotFind);
                }
                var medalTemp = item as MedalItem;
                if (medalTemp == null)
                {
                    return(ErrorCodes.Error_MedalMaterialNotFind);
                }
                var tbItem = Table.GetMedal(item.GetId());
                if (tbItem == null)
                {
                    return(ErrorCodes.Error_MedalID);
                }
                sumExp += medalTemp.GetGiveExp();
                bag.ReduceCountByIndex(medalTemp.GetIndex(), 1, eDeleteItemType.SplitMedal);
                if (bagId == (int)eBagType.MedalUsed)
                {
                    character.mBag.RefreshMedal();
                    character.BooksChange();
                }
            }
            else
            {
                foreach (var itemBase in bag.mLogics)
                {
                    if (itemBase.GetId() == -1)
                    {
                        continue;
                    }
                    var medalTemp = itemBase as MedalItem;
                    if (medalTemp == null)
                    {
                        return(ErrorCodes.Error_MedalMaterialNotFind);
                    }
                    var tbItem = Table.GetMedal(itemBase.GetId());
                    if (tbItem == null)
                    {
                        return(ErrorCodes.Error_MedalID);
                    }
                    //int paixu = 100000 ;
                    //  0(是否可装备)00(品质)00(等级)00(经验)00(索引)

                    if (0 == (flag & (1 << tbItem.Quality)))
                    {
                        continue;
                    }
                    isHave  = true;
                    sumExp += medalTemp.GetGiveExp() * itemBase.GetCount();
                    bag.ReduceCountByIndex(medalTemp.GetIndex(), itemBase.GetCount(), eDeleteItemType.SplitMedal);
                }
                if (!isHave)
                {
                    // to show tips ...
                    return(ErrorCodes.Error_Runr_Not_Resolve);
                }
            }

            character.mBag.AddRes(eResourcesType.HomeExp, sumExp, eCreateItemType.SplitMedal);
            return(ErrorCodes.OK);
        }