Example #1
0
        public static void UpdateUnitList(this Trigger self)
        {
            ListComponent <long> deleteList = ListComponent <long> .Create();

            DUnitComponent dUnitComponent = self.Domain.GetComponent <DUnitComponent>();

            for (int i = 0; i < self.UnitList.List.Count; i++)
            {
                DUnit unit = dUnitComponent.Get(self.UnitList.List[i]);
                if (unit == null)
                {
                    deleteList.List.Add(unit.Id);
                    continue;
                }

                if (unit.GetComponent <UnitStateComponent>().UnitState == (int)UnitState.Death)
                {
                    deleteList.List.Add(unit.Id);
                }
            }

            for (int i = 0; i < deleteList.List.Count; i++)
            {
                self.UnitList.List.Remove(deleteList.List[i]);
            }
            deleteList.List.Clear();
        }
Example #2
0
        public static void InitShellNumberic(DUnit shell)
        {
            NumericComponent numeric = shell.AddComponent <NumericComponent>();
            UShellConfig     config  = shell.GetComponent <UShellConfigComponent>().ShellConfig;

            // 速度
            numeric.Set(NumericType.SpeedBase, config.MoveSpeed);
        }
Example #3
0
        /// <summary>
        /// 单位进阶
        /// </summary>
        public int Call_UnitGradeUp(ClazupUnitRequest request)
        {
            ClazupUnitResponse response = new ClazupUnitResponse();

            response.id = request.id;
            var  player = CurrentSession.GetBindPlayer();
            Unit unit   = player.Units.First(x => x.Id == request.id);


            DUnit du = DUnits[unit.Tid];

            int maxClaz = du.grade_max;
            int itemId  = du.grade_item_id;

            if (unit.Grade >= du.grade_max)
            {
                return((int)GameErrorCode.兵种已经最高阶);
            }
            DUnitGradeUp dug = DUnitGrades[du.star][unit.Grade + 1];

            if (unit.Level < dug.min_level)
            {
                return((int)GameErrorCode.兵种不满足升阶等级);;
            }
            int itemCount = dug.item_cnt;

            var    pkgController    = Server.GetController <PkgController>();
            var    playerController = Server.GetController <PlayerController>();
            string reason           = $"兵种进阶{du.tid}";

            if (playerController.IsCurrencyEnough(player, CurrencyType.GOLD, dug.gold))
            {
                if (pkgController.TrySubItem(player, itemId, itemCount, reason, out var item))
                {
                    playerController.AddCurrency(player, CurrencyType.GOLD, -dug.gold, reason);

                    unit.Grade += 1;

                    response.unitInfo = this.ToUnitInfo(unit, du, true);
                    response.gold     = playerController.GetCurrencyValue(player, CurrencyType.GOLD);
                    response.itemId   = itemId;
                    response.count    = item.Count;
                    response.success  = true;

                    _db.SaveChanges();

                    CurrentSession.SendAsync(response);

                    //任务
                    OnUnitGradeUp(new UnitGradeUpEventArgs()
                    {
                        UnitInfo = response.unitInfo,
                        OldGrade = unit.Grade - 1
                    });
                }
            }
            return(0);
        }
Example #4
0
        public static void InitTrapNumberic(DUnit trap)
        {
            NumericComponent numeric = trap.AddComponent <NumericComponent>();
            UTrapConfig      config  = trap.GetComponent <UTrapConfigComponent>().TrapConfig;

            // 攻速
            numeric.Set(NumericType.AttackSpeedBase, config.AttackSpeed);
            // 攻击力
            numeric.Set(NumericType.HPDamageBase, config.HPDamage);
        }
Example #5
0
        public UnitInfo UnlockUnit(Player player, int uid)
        {
            var unit = player.Units.FirstOrDefault(u => u.Tid == uid);

            if (unit != null)
            {
                return(null);
            }

            DUnit du = DUnits[uid];

            //if (true)
            //{
            unit = new Unit()
            {
                Id     = Guid.NewGuid().ToString("D"),
                Level  = 1,
                Number = du.max_energy,
                Tid    = uid,
                Equips = new List <Equip>()
            };
            foreach (int deid in du.equip.Object)
            {
                DEquip de = DEquips[deid];
                Equip  eq = new Equip()
                {
                    Id       = Guid.NewGuid().ToString("D"),
                    Level    = 1,
                    GradeId  = de.gradeid,
                    PlayerId = player.Id,
                    Pos      = de.pos,
                    Tid      = deid,
                    UnitId   = unit.Id
                };
                unit.Equips.Add(eq);
            }
            player.Units.Add(unit);

            var unitInfo = this.ToUnitInfo(unit);

            OnUnitUnlock(unitInfo);

            UnlockUnitResponse response = new UnlockUnitResponse
            {
                success  = true,
                unitId   = uid,
                unitInfo = unitInfo
            };

            Server.SendByUserNameAsync(player.Id, response);

            return(unitInfo);
            //}
            //return null;
        }
Example #6
0
 public static bool IsOperationer(DUnit unit)
 {
     if (unit.GetComponent <OperationerComponent>().OperationerId == unit.Domain.GetComponent <GamerComponent>().myGamer.Id)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
    public override void Save(BinaryWriter writer)
    {
        DUnit unit = schemeObject.boardObject.GetComponent <DUnit>();

        writer.Write(unit.funct is SForm);
        unit.funct.Save(writer);
        writer.Write(schemeObject.Input);
        if (schemeObject.Input)
        {
            writer.Write(GetIDInput());
        }
    }
Example #8
0
        public void Run(EventType.NumbericChange args)
        {
            DUnit tower = args.Parent as DUnit;

            if (tower != null)
            {
                HPRegainComponent hPRegainComponent = tower.GetComponent <HPRegainComponent>();
                if (hPRegainComponent != null)
                {
                    hPRegainComponent.HpRegain = (int)args.New;
                }
            }
        }
Example #9
0
        public static DUnit Create(Entity domain, long unitid)
        {
            DUnit unit = EntityFactory.CreateWithId <DUnit>(domain, unitid);

            unit.AddComponent <ObjectWait>();
            unit.AddComponent <UnitStateComponent, int>((int)UnitState.Born);

            DUnitComponent unitComponent = domain.GetComponent <DUnitComponent>();

            unitComponent.Add(unit);

            return(unit);
        }
Example #10
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 #11
0
        protected override async ETVoid Run(Session session, M2C_UnitNumeric message)
        {
            DUnit unit = session.Domain.GetComponent <DUnitComponent>().Get(message.Id);

            if (message.BeInt == true)
            {
                NumericAction.SetUnitNumericActionImp(unit, (NumericType)message.NumericType, (int)message.Val);
            }
            else
            {
                NumericAction.SetUnitNumericActionImp(unit, (NumericType)message.NumericType, message.Val);
            }

            await ETTask.CompletedTask;
        }
Example #12
0
        public static void InitTowerNumberic(DUnit tower)
        {
            NumericComponent numeric = tower.AddComponent <NumericComponent>();
            UTowerConfig     config  = tower.GetComponent <UTowerConfigComponent>().TowerConfig;

            // 最大血量
            numeric.Set(NumericType.MaxHpBase, config.MaxHP);
            // 血量
            numeric.Set(NumericType.HpBase, config.HP);
            // 攻速
            numeric.Set(NumericType.AttackSpeedBase, config.AttackSpeed);
            // 血量恢复
            numeric.Set(NumericType.HPRegainBase, config.HPRegain);
            // 攻击力
            numeric.Set(NumericType.HPDamageBase, config.HPDamage);
        }
    public override void Load(BinaryReader reader)
    {
        DUnit unit = schemeObject.boardObject.GetComponent <DUnit>();

        if (!reader.ReadBoolean())
        {
            Destroy(unit.funct);
            unit.funct = unit.gameObject.AddComponent <ZForm>();
        }
        unit.funct.Load(reader);
        if (reader.ReadBoolean())
        {
            DataClass.objectManager.InputLoader += LoadInputs;
            DataClass.objectManager.loadIDs.Enqueue(reader.ReadInt32());
        }
    }
Example #14
0
        public static void SetUnitNumericAction(DUnit unit, NumericType numeric, float val)
        {
            if (unit.DomainScene().GetComponent <PVPComponent>().bePVP)
            {
                C2M_UnitNumeric msg = new C2M_UnitNumeric();
                msg.Id          = unit.Id;
                msg.BeInt       = false;
                msg.NumericType = (int)numeric;
                msg.Val         = val;

                unit.Domain.GetComponent <SessionComponent>().Session.Send(msg);
            }
            else
            {
                NumericAction.SetUnitNumericActionImp(unit, numeric, val);
            }
        }
Example #15
0
        public static void InitRoleNumberic(DUnit role)
        {
            NumericComponent numeric = role.AddComponent <NumericComponent>();
            URoleConfig      config  = role.GetComponent <URoleConfigComponent>().RoleConfig;

            // 最大血量
            numeric.Set(NumericType.MaxHpBase, config.HP);
            // 血量
            numeric.Set(NumericType.HpBase, config.HP);
            // 速度
            numeric.Set(NumericType.SpeedBase, config.MoveSpeed);
            // 攻速
            numeric.Set(NumericType.AttackSpeedBase, config.AttackSpeed);
            // 攻击力
            numeric.Set(NumericType.HPDamageBase, config.HPDamage);
            // 警戒范围
            numeric.Set(NumericType.AlertRadiusBase, config.AlertRadius);
        }
    public override void Refresh()
    {
        unit = parent.boardObject.GetComponent <DUnit>();
        for (int i = 0; i < unit.funct.numerator.Length; i++)
        {
            num.text += unit.funct.numerator[i] + " ";
        }
        for (int i = 0; i < unit.funct.denumerator.Length; i++)
        {
            denum.text += unit.funct.denumerator[i] + " ";
        }

        if (unit.funct is ZForm)
        {
            check.isOn = true;
            //inputDt.GetComponent<InputField>().text = ((ZForm)unit.funct).DT.ToString();
        }
    }
Example #17
0
        public static int GetBattleRoleCount(DUnit tower)
        {
            NumericComponent numeric = tower.GetComponent <NumericComponent>();
            int halfHpAdd            = (numeric.GetAsInt(NumericType.Hp) - numeric.GetAsInt(NumericType.HpBase)) / 2;

            if (halfHpAdd <= 0)
            {
                return(0);
            }

            int         RoleId     = tower.GetComponent <UTowerConfigComponent>().TowerConfig.RoleId;
            URoleConfig RoleConfig = URoleConfigCategory.Instance.Get(RoleId);

            if (RoleConfig == null)
            {
                return(0);
            }

            return(halfHpAdd / RoleConfig.HP);
        }
Example #18
0
        public static void SummonRoles(DUnit tower, long gamerid, int count, long targetid)
        {
            // 自身血量检测
            NumericComponent numeric = tower.GetComponent <NumericComponent>();
            int hpAdd = (numeric.GetAsInt(NumericType.Hp) - numeric.GetAsInt(NumericType.HpBase));

            if (hpAdd <= 0)
            {
                return;
            }

            // 召唤数量检测
            int roleConfigId = tower.GetComponent <UTowerConfigComponent>().TowerConfig.RoleId;
            int roleHp       = URoleConfigCategory.Instance.Get(roleConfigId).HP;

            if (roleHp * count > hpAdd)
            {
                count = hpAdd / roleHp;
            }

            // 包装召唤ROLE
            DUnitInfo roleinfo = new DUnitInfo();

            roleinfo.GamerId       = gamerid;
            roleinfo.UnitId        = IdGenerater.Instance.GenerateUnitId(0);
            roleinfo.ConfigId      = roleConfigId;
            roleinfo.Camp          = (int)(tower.GetComponent <CampComponent>().Camp);
            roleinfo.PX            = tower.Position.x;
            roleinfo.PY            = tower.Position.y;
            roleinfo.PZ            = tower.Position.z;
            roleinfo.RX            = tower.Rotation.x;
            roleinfo.RY            = tower.Rotation.y;
            roleinfo.RZ            = tower.Rotation.z;
            roleinfo.RW            = tower.Rotation.w;
            roleinfo.Count         = count;
            roleinfo.TargetId      = targetid;
            roleinfo.OperationerId = gamerid;

            RoleFactory.Create(tower.Domain, roleinfo);
        }
Example #19
0
        public static void SetUnitNumericAction(DUnit unit, NumericType numeric, int val)
        {
            if (unit.DomainScene().GetComponent <PVPComponent>().bePVP)
            {
                if (OperationerComponentSystem.IsOperationer(unit) == false)
                {
                    return;
                }

                C2M_UnitNumeric msg = new C2M_UnitNumeric();
                msg.Id          = unit.Id;
                msg.BeInt       = true;
                msg.NumericType = (int)numeric;
                msg.Val         = val;

                unit.Domain.GetComponent <SessionComponent>().Session.Send(msg);
            }
            else
            {
                NumericAction.SetUnitNumericActionImp(unit, numeric, val);
            }
        }
 private void Start()
 {
     unit    = parent.boardObject.GetComponent <DUnit>();
     enabled = false;
 }
Example #21
0
        private void PlayerController_PlayerCreating(object sender, Player e)
        {
            int[] uus = new int[] { 21140101 };
            for (int i = 0; i < uus.Length; i++)
            {
                int uid = uus[i];

                Unit unit = new Unit()
                {
                    Id       = Guid.NewGuid().ToString("D"),
                    PlayerId = e.Id,
                    Tid      = uid,
                    Number   = 81,
                    Level    = 1,
                    Equips   = new List <Equip>()
                };

                DUnit du = DUnits[uid];
                foreach (int deid in du.equip.Object)
                {
                    DEquip de = DEquips[deid];
                    Equip  eq = new Equip()
                    {
                        Id       = Guid.NewGuid().ToString("D"),
                        Level    = 1,
                        GradeId  = de.gradeid,
                        PlayerId = e.Id,
                        Pos      = de.pos,
                        Tid      = deid,
                        UnitId   = unit.Id
                    };
                    unit.Equips.Add(eq);
                }
                var unitInfo = this.ToUnitInfo(unit, du, true);
                e.Units.Add(unit);
            }

            for (int i = 0; i < 2; i++)
            {
                List <string> us = new List <string>();
                if (i == 0)
                {
                    int j = 0;
                    foreach (var unit in e.Units)
                    {
                        us.Add(unit.Id);
                        j++;
                    }

                    for (; j < 5; j++)
                    {
                        us.Add(string.Empty);
                    }
                }
                else
                {
                    for (int j = 0; j < 5; j++)
                    {
                        us.Add(string.Empty);
                    }
                }
                Team t = new Team()
                {
                    Index      = i,
                    IsSelected = i == 0,
                    PlayerId   = e.Id,
                    Units      = us
                };
                e.Teams.Add(t);
            }

            for (int i = 0; i < 3; i++)
            {
                List <string> us = new List <string>();
                for (int j = 0; j < 10; j++)
                {
                    us.Add(string.Empty);
                }
                PVPFormation t = new PVPFormation()
                {
                    Index      = i,
                    IsSelected = i == 0,
                    PlayerId   = e.Id,
                    Units      = us
                };
                e.Formations.Add(t);
            }
        }
Example #22
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 #23
0
        public static void SetUnitNumericActionImp(DUnit unit, NumericType numeric, float val)
        {
            NumericComponent numericComponent = unit.GetComponent <NumericComponent>();

            numericComponent.Set(numeric, val);
        }
Example #24
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);
        }