Example #1
0
        private void Invincible(string[] args)
        {
            var player = this.CurrentSession.GetBindPlayer();

            var camp = this.Server.GetController <CampController>();

            foreach (var unit in player.Units)
            {
                var du      = camp.DUnits[unit.Tid];
                int maxLeve = camp.DUnitLevels.Count;
                unit.Level = maxLeve;
                unit.Grade = du.grade_max;
                //camp.OnUnitLevelUp(new UnitLevelUpEventArgs() { UnitInfo = camp.ToUnitInfo(unit), OldLevel = oldlevel });
                //camp.OnUnitGradeUp(new UnitGradeUpEventArgs() { OldGrade = oldgrade, UnitInfo = camp.ToUnitInfo(unit) });
                foreach (var equip in unit.Equips)
                {
                    DEquip de            = camp.DEquips[equip.Tid];
                    var    equipMaxLevel = camp.DequipLevels.Count;
                    equip.Level = equipMaxLevel;

                    DEquipGrade deg = camp.DEquipGrades[de.gradeid];
                    while (true)
                    {
                        if (deg.next_id == 0)
                        {
                            equip.GradeId = deg.id;
                            break;
                        }
                    }
                }
            }

            _db.SaveChanges();
        }
Example #2
0
        public int Call_EquipGradeUp(UpGradeEquipRequest request)
        {
            var         player = this.CurrentSession.GetBindPlayer();
            var         unit   = player.Units.First(u => u.Tid == request.unitId);
            DUnit       du     = DUnits[unit.Tid];
            var         equip  = unit.Equips.First(e => e.Pos == request.position);
            DEquip      de     = DEquips[equip.Tid];
            DEquipGrade deg    = DEquipGrades[equip.GradeId];

            if (deg.next_id == 0)
            {
                return((int)GameErrorCode.装备已经最高阶);
            }
            var  pkgController = this.Server.GetController <PkgController>();
            bool itemenough    = pkgController.IsItemEnough(player, deg.grade_item_id.Object, deg.grade_item_cnt.Object);

            if (!itemenough)
            {
                return((int)GameErrorCode.道具不足);
            }
            string reason = $"兵种装备进阶{unit.Tid}:{equip.Tid}";

            pkgController.SubItems(player, deg.grade_item_id.Object, deg.grade_item_cnt.Object, reason);

            DEquipGrade degNext = DEquipGrades[deg.next_id];

            equip.GradeId = degNext.id;
            var unitInfo = this.ToUnitInfo(unit, du, true);

            _db.SaveChanges();
            UpGradeEquipResponse response = new UpGradeEquipResponse();

            response.success   = true;
            response.position  = equip.Pos;
            response.unitId    = unit.Tid;
            response.unitInfo  = unitInfo;
            response.equipInfo = new EquipInfo()
            {
                grade   = equip.GradeId,
                equipId = equip.Tid,
                level   = equip.Level
            };

            OnEquipGradeUp(new EquipGradeUpEventArgs()
            {
                EquipInfo = response.equipInfo, OldGrade = deg.grade, UnitInfo = unitInfo
            });
            CurrentSession.SendAsync(response);
            return(0);
        }
Example #3
0
        public int Call_EquipLevelUp(LevelupEquipRequest request)
        {
            var player = this.CurrentSession.GetBindPlayer();
            var unit   = player.Units.First(u => u.Tid == request.unitId);

            DUnit       du               = DUnits[unit.Tid];
            var         equip            = unit.Equips.First(e => e.Pos == request.position);
            var         playerController = this.Server.GetController <PlayerController>();
            string      reason           = $"兵种装备升级{unit.Tid}:{equip.Tid}";
            int         oldlevel         = equip.Level;
            DEquip      de               = DEquips[equip.Tid];
            DEquipGrade deg              = DEquipGrades[equip.GradeId];

            while (true)
            {
                if (equip.Level >= player.Level)
                {
                    break;
                }

                if (equip.Level >= deg.max_level)
                {
                    break;
                }
                //扣资源升级
                DEquipLevelCost dl;
                if (!DequipLevels.TryGetValue(equip.Level, out dl))
                {
                    break;
                }
                int rescont = (int)((du.type == 1 ? dl.soldier_gold : dl.tank_gold) * de.level_k / 10000d);
                if (!playerController.IsCurrencyEnough(player, CurrencyType.GOLD, rescont))
                {
                    break;
                }

                playerController.AddCurrency(player, CurrencyType.GOLD, rescont, reason);
                equip.Level += 1;

                if (!request.multy)
                {
                    break;
                }
            }
            var equipInfo = new EquipInfo()
            {
                grade   = equip.GradeId,
                equipId = equip.Tid,
                level   = equip.Level
            };

            UnitInfo unitInfo;

            if (oldlevel != equip.Level)
            {
                unitInfo = this.ToUnitInfo(unit, du, true);
                OnEquipLevelUp(new EquipLevelUpEventArgs()
                {
                    EquipInfo = equipInfo,
                    UnitInfo  = unitInfo,
                    OldLevel  = oldlevel
                });
                _db.SaveChanges();
            }
            else
            {
                unitInfo = this.ToUnitInfo(unit, du);
            }

            LevelupEquipResponse response = new LevelupEquipResponse();

            response.success   = true;
            response.equipInfo = equipInfo;
            response.unitInfo  = unitInfo;
            response.position  = equip.Pos;
            response.unitId    = unit.Tid;
            CurrentSession.SendAsync(response);
            return(0);
        }
Example #4
0
        public UnitInfo ToUnitInfo(Unit u, DUnit du = null, bool calcPower = false)
        {
            UnitInfo info = new UnitInfo();

            if (du == null)
            {
                du = DUnits[u.Tid];
            }
            info.id     = u.Id;
            info.number = u.Number;
            info.tid    = u.Tid;
            info.exp    = u.Exp;
            info.level  = u.Level;
            info.claz   = u.Grade;
            info.pid    = u.PlayerId;

            if (u.IsResting && u.RestEndTime <= DateTime.Now)
            {
                u.IsResting = false;
                u.Number    = du.max_energy;
                //推送
                TimesUpNotify notify = new TimesUpNotify();
                notify.id      = u.Tid;
                notify.lv      = u.Number;
                notify.unitid  = u.Id;
                notify.success = true;
                notify.type    = GameConfig.TYPE_UNITREST;
                this.Server.SendByUserNameAsync(u.PlayerId, notify);
            }
            info.prepareEndTime = u.RestEndTime.ToUnixTime();
            info.preparing      = u.IsResting;
            info.equips         = new List <EquipInfo>();


            info.prepareEndTime = u.RestEndTime.ToUnixTime();
            if (du != null)
            {
                info.name   = du.name;
                info.type   = du.type;
                info.nation = du.nation;
                info.desc   = du.desc;
                info.star   = du.star;

                info.crit          = du.crit;
                info.crit_hurt     = du.crit_hurt;
                info.hurt_add      = du.hurt_add;
                info.hurt_sub      = du.hurt_sub;
                info.crit_v        = du.crit_v;
                info.hurt_add_v    = du.hurt_add_v;
                info.hurt_sub_v    = du.hurt_sub_v;
                info.armor         = du.armor;
                info.hurt_multiple = du.hurt_multiple;
                info.cd            = du.cd;
                info.distance      = du.distance;
                info.r             = du.r;
                info.off           = du.off;
                info.rev           = du.rev;
                info.rev_body      = du.rev_body;
                info.speed         = du.speed;
                info.mob           = du.mob;
                info.hp_add        = du.hp_add;
                info.att_add       = du.att_add;
                info.def_add       = du.def_add;

                info.type_detail  = du.type_detail;
                info.levelLimit   = 0;
                info.gain         = null;
                info.count        = du.count;
                info.last_time    = du.last_time;
                info.bullet_count = du.bullet_count;
                info.rank         = 0;
                info.exist        = du.exist;
                info.energy       = du.energy;
                for (int i = 0; i < du.res_type.Object.Length; i++)
                {
                    switch (du.res_type.Object[i])
                    {
                    case CurrencyType.GOLD:
                        info.gold = du.res_cnt.Object[i];
                        break;

                    case CurrencyType.SUPPLY:
                        info.supply = du.res_cnt.Object[i];
                        break;

                    case CurrencyType.IRON:
                        info.iron = du.res_cnt.Object[i];
                        break;
                    }
                }
                info.pvp_point     = du.pvp_point;
                info.pvp_dec_score = du.pvp_dec_score;
                info.max_energy    = du.max_energy;
                info.unitSkills    = du.skills.Object;
                //info.hp_ex = du.hp_add;
                //info.att_ex = ;
                //info.def_ex = ;

                //todo: 计算兵种属性和战力
                info.hp      = du.prop_val.Object[2];
                info.att     = du.prop_val.Object[0];
                info.defence = du.prop_val.Object[1];

                info.hp_growth      = du.prop_grow_val.Object[2];
                info.att_growth     = du.prop_grow_val.Object[0];
                info.defence_growth = du.prop_grow_val.Object[1];

                //等级加成
                info.hp      = (int)(info.hp + info.hp_growth * u.Level);
                info.defence = (int)(info.defence + info.defence_growth * u.Level);
                info.att     = (int)(info.att + info.att_growth * u.Level);
                //进阶加成
                if (u.Grade > 0)
                {
                    DUnitGradeUp dug = DUnitGrades[du.star][u.Grade];

                    info.att     += (int)((du.prop_val.Object[0] + (100 - 1) * du.prop_grow_val.Object[0]) * dug.atk / 10000d);
                    info.defence += (int)((du.prop_val.Object[1] + (100 - 1) * du.prop_grow_val.Object[1]) * dug.defence / 10000d);
                    info.hp      += (int)((du.prop_val.Object[2] + (100 - 1) * du.prop_grow_val.Object[2]) * dug.hp / 10000d);
                }
                //装备加成
                foreach (var eq in u.Equips)
                {
                    DEquip      de  = DEquips[eq.Tid];
                    DEquipGrade deg = DEquipGrades[eq.GradeId];
                    var         ei  = new EquipInfo();
                    ei.grade   = eq.GradeId;
                    ei.equipId = eq.Tid;
                    ei.level   = eq.Level;
                    info.equips.Add(ei);

                    int v = de.base_attr_value + de.level_grow * (eq.Level - 1);
                    //升阶增加的属性 =(基础属性 +(100 - 1)*成长属性)*(升阶增加属性万分比)
                    v += (int)((de.base_attr_value + (100 - 1) * de.level_grow) * deg.grade_grow / 10000d);
                    switch (de.base_attr_type)
                    {
                    case 1:
                    {
                        info.att += v;
                    }
                    break;

                    case 2:
                    {
                        info.defence += v;
                    }
                    break;

                    case 3:
                    {
                        info.hp += v;
                    }
                    break;
                    }
                }
                //战力计算
                if (calcPower)
                {
                    info.power = CalcPower(info);
                    u.Power    = info.power;
                }
                else
                {
                    info.power = u.Power;
                }
            }

            return(info);
        }