예제 #1
0
        public void UpdateRoleInfo(Role role, int exp, int coin)
        {
            RoleEntity roleEntity = RoleDBModel.Instance.GetEntity(role.RoleId);

            int[] roleLevelExp = GetRoleLevel(roleEntity, exp);
            Console.WriteLine(roleLevelExp[0] + "   " + roleLevelExp[1]);
            roleEntity.Level = roleLevelExp[0];
            roleEntity.Exp   = roleLevelExp[1];
            roleEntity.Gold  = coin;
            JobEntity      jobEntity      = JobDBModel.Instance.Get(roleEntity.JobId);
            JobLevelEntity jobLevelEntity = JobLevelDBModel.Instance.Get(roleEntity.Level);

            roleEntity.Attack          = (int)Math.Round(jobLevelEntity.Attack * (jobEntity.AttackCoefficient * 0.01f));
            roleEntity.AttackAddition  = 0;
            roleEntity.Defense         = (int)Math.Round(jobLevelEntity.Defense * jobEntity.DefenseCoefficient * 0.01f);
            roleEntity.DefenseAddition = 0;
            roleEntity.Res             = (int)Math.Round(jobEntity.ResCoefficient * jobLevelEntity.Res * 0.01f);
            roleEntity.ResAddition     = 0;
            roleEntity.Hit             = (int)Math.Round(jobEntity.HitCoefficient * jobLevelEntity.Hit * 0.01f);
            roleEntity.HitAddition     = 0;
            roleEntity.Cri             = (int)Math.Round(jobEntity.CriCoefficient * jobLevelEntity.Cri * 0.01f);
            roleEntity.CriAddition     = 0;
            roleEntity.Dodge           = (int)Math.Round(jobEntity.DodgeCoefficient * jobLevelEntity.Dodge * 0.01f);
            roleEntity.DodgeAddition   = 0;
            roleEntity.CurrHP          = roleEntity.MaxHP = jobLevelEntity.HP;
            roleEntity.CurrMP          = roleEntity.MaxMP = jobLevelEntity.MP;
            roleEntity.Fighting        = FightingUtil.GetRoleFighting(roleEntity.MaxHP, roleEntity.Attack, 0, roleEntity.Defense, 0, roleEntity.Res, 0, roleEntity.Hit, 0, roleEntity.Dodge, 0, roleEntity.Cri, 0);
            RoleDBModel.Instance.Update(roleEntity);
            OnRoleInfoResponse(role, roleEntity);
        }
예제 #2
0
        private void CreateRoleProtoCallBack(Role role, byte[] content)
        {
            RoleOperation_CreateRoleProto proto = RoleOperation_CreateRoleProto.ToProto(content);

            //查询是否又相同昵称的
            int count = RoleCacheModel.Instance.GetCount(string.Format("[NickName] = '{0}'", proto.NickName));
            MFReturnValue <object> ret = null;

            if (count == 0)
            {
                //创建
                RoleEntity entity = new RoleEntity();
                entity.JobId               = proto.JobID;
                entity.NickName            = proto.NickName;
                entity.Sex                 = (byte)EnumSex.Female;
                entity.Status              = EnumEntityStatus.Released;
                entity.Level               = 1;
                entity.AccountId           = role.AccountId;
                entity.CreateTime          = DateTime.Now;
                entity.UpdateTime          = DateTime.Now;
                entity.LastWorldMapSceneId = 1;
                //暂定
                JobEntity      jobEntity      = JobDBModel.Instance.Get(proto.JobID);
                JobLevelEntity jobLevelEntity = JobLevelDBModel.Instance.Get(entity.Level);
                entity.MaxHP     = jobLevelEntity.HP;
                entity.CurrentHP = entity.MaxHP;
                entity.MaxMP     = jobLevelEntity.MP;
                entity.CurrentMP = entity.MaxMP;
                entity.Attack    = (int)Math.Round(jobEntity.Attack * jobLevelEntity.Attack * 0.01f);
                entity.Defense   = (int)Math.Round(jobEntity.Defense * jobLevelEntity.Defense * 0.01f);
                entity.Hit       = (int)Math.Round(jobEntity.Hit * jobLevelEntity.Hit * 0.01f);
                entity.Dodge     = (int)Math.Round(jobEntity.Dodge * jobLevelEntity.Dodge * 0.01f);
                entity.Cri       = (int)Math.Round(jobEntity.Cri * jobLevelEntity.Cri * 0.01f);
                entity.Res       = (int)Math.Round(jobEntity.Res * jobLevelEntity.Res * 0.01f);
                entity.Gold      = 0;
                entity.Money     = 0;
                entity.Exp       = 0;
                entity.Fighting  = entity.Attack * 4 + entity.Defense * 4 + entity.Hit * 2 + entity.Dodge * 2 + entity.Res + entity.Cri;
                ret            = RoleCacheModel.Instance.Create(entity);
                role.CurRoleId = (int)ret.OutputValues["Id"];
            }
            else
            {
                ret            = new MFReturnValue <object>();
                ret.HasError   = true;
                ret.ReturnCode = 1000;
            }
            SelectRoleInfoReturn(role);
            CreateRoleProtoReturn(ret, role);
            SelectSkillReturn(role);
        }
예제 #3
0
        /// <summary> 客户端请求创建角色 </summary>
        /// <param name="role"></param>
        /// <param name="buffer"></param>
        private void OnRoleCreate(Role role, byte[] buffer)
        {
            RoleCreateRequestProto proto = RoleCreateRequestProto.GetProto(buffer);
            //查询昵称是否存在
            int count = RoleCacheModel.Instance.GetCount(string.Format("[NickName]='{0}'", proto.RoleName));
            MFReturnValue <object> retValue = null;

            if (count > 0)
            {
                //角色名已经存
                retValue          = new MFReturnValue <object>();
                retValue.HasError = true;
            }
            else
            {
                RoleEntity entity = new RoleEntity();
                entity.JobId      = proto.JobId;
                entity.NickName   = proto.RoleName;
                entity.Status     = Mmcoy.Framework.AbstractBase.EnumEntityStatus.Released;
                entity.AccountId  = role.AccountId;
                entity.CreateTime = DateTime.Now;
                entity.UpdateTime = DateTime.Now;
                entity.Level      = 1;
                //给角色战斗相关的属性赋值(根据 职业 等级)

                JobEntity      jobEntity      = JobDBModel.Instance.Get(entity.JobId);
                JobLevelEntity jobLevelEntity = JobLevelDBModel.Instance.Get(entity.Level);

                entity.Attack           = (int)Math.Round(jobLevelEntity.Attack * (jobEntity.AttackCoefficient * 0.01f));
                entity.AttackAddition   = 0;
                entity.Defense          = (int)Math.Round(jobLevelEntity.Defense * jobEntity.DefenseCoefficient * 0.01f);
                entity.DefenseAddition  = 0;
                entity.Res              = (int)Math.Round(jobEntity.ResCoefficient * jobLevelEntity.Res * 0.01f);
                entity.ResAddition      = 0;
                entity.Hit              = (int)Math.Round(jobEntity.HitCoefficient * jobLevelEntity.Hit * 0.01f);
                entity.HitAddition      = 0;
                entity.Cri              = (int)Math.Round(jobEntity.CriCoefficient * jobLevelEntity.Cri * 0.01f);
                entity.CriAddition      = 0;
                entity.Dodge            = (int)Math.Round(jobEntity.DodgeCoefficient * jobLevelEntity.Dodge * 0.01f);
                entity.DodgeAddition    = 0;
                entity.CurrHP           = entity.MaxHP = jobLevelEntity.HP;
                entity.CurrMP           = entity.MaxMP = jobLevelEntity.MP;
                entity.Fighting         = FightingUtil.GetRoleFighting(entity.MaxHP, entity.Attack, 0, entity.Defense, 0, entity.Res, 0, entity.Hit, 0, entity.Dodge, 0, entity.Cri, 0);
                entity.FightingAddition = 0;
                entity.LastInWorldMapId = 1;
                retValue = RoleCacheModel.Instance.Create(entity);
                Console.WriteLine(retValue.ReturnCode + "  " + retValue.OutputValues["Id"] + "   " + retValue.Message);
            }
            OnRoleCreateResponse(role, retValue);
        }
예제 #4
0
        public JobHistoryDetailDTO DoSalaryIncreasing(long empId, int jobLevel)
        {
            var transaction = _humanManagerContext.Database.BeginTransaction();

            try
            {
                DateTime       today          = System.DateTime.Today;
                EmployeeEntity employeeEntity = _humanManagerContext.Employees.Where(e => e.Id == empId)
                                                .Include(e => e.Job)
                                                .ThenInclude(j => j.JobLevel)
                                                .SingleOrDefault();

                JobHistoryEntity jobHistoryEntity = _humanManagerContext.JobHistorys.Where(jh => jh.EmployeeId == employeeEntity.Id && jh.JobId == employeeEntity.JobId).SingleOrDefault();

                // Kiểm tra việc tính lương. tính r ko đc nâng.
                bool haveCounted = _humanManagerContext.SalaryHistories.Where(sh => sh.EmployeeId == empId && sh.CountedDate.Month == today.Month && sh.CountedDate.Year == today.Year).Any();
                if (haveCounted)
                {
                    throw new Exception(SalaryMessageContant.SALARY_COUNTED);
                }

                // kiểm tra và thay đổi job level
                JobLevelEntity jobLevelEntity = employeeEntity.Job.JobLevel;
                if (JobUtil.IsLevelExit(jobLevelEntity, jobLevel))
                {
                    employeeEntity.JobLevel = jobLevel;
                }
                else
                {
                    throw new Exception(SalaryMessageContant.JOB_LEVEL_NOT_EXITS);
                }

                // lưu level vào lịch sử
                _humanManagerContext.JobHistoryDetails.Add(new JobHistoryDetailEntity(jobLevel, today, jobHistoryEntity));
                _humanManagerContext.SaveChanges();

                transaction.Commit();

                return(new JobHistoryDetailDTO(employeeEntity.Id, employeeEntity.Firstname + employeeEntity.Firstname, employeeEntity.JobId, employeeEntity.Job.JobTitle, jobLevel, System.DateTime.Today));
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                throw ex;
            }
        }
예제 #5
0
        public static double GetSalaryCoefficient(JobLevelEntity jobLevel, int level)
        {
            double salaryCoefficient = 0;

            var listOfFieldNames = typeof(JobLevelEntity)//
                                   .GetProperties().Select(f => f.Name).ToList();

            foreach (string salaryLevelName in listOfFieldNames)
            {
                if (salaryLevelName.Equals(SystemContant.JOB_LEVEL_NAME_PREFIX + level))
                {
                    salaryCoefficient = (double)typeof(JobLevelEntity).GetProperty(salaryLevelName).GetValue(jobLevel);
                }
            }

            return(salaryCoefficient);
        }
예제 #6
0
        public static bool IsLevelExit(JobLevelEntity jobLevelEntity, int level)
        {
            try
            {
                double jobLevel = (double)typeof(JobLevelEntity).GetProperty(SystemContant.JOB_LEVEL_NAME_PREFIX + level).GetValue(jobLevelEntity);

                if (jobLevel == 0)
                {
                    return(false);
                }
                return(true);
            }
            catch
            {
                return(false);
            }
        }
예제 #7
0
    /// <summary>
    /// 更新角色战斗力
    /// </summary>
    /// <param name="roleEntity"></param>
    private void UpdateFighting(RoleEntity roleEntity)
    {
        //1.计算角色基础属性 和等级有关
        //给角色战斗相关的属性赋值
        //职业 等级
        JobEntity jobEntity = JobDBModel.Instance.Get(roleEntity.JobId);

        //职业等级数据
        JobLevelEntity jobLevelEntity = JobLevelDBModel.Instance.Get(roleEntity.Level);

        roleEntity.MaxHP = jobLevelEntity.HP;
        roleEntity.MaxMP = jobLevelEntity.MP;

        roleEntity.Attack  = (int)Math.Round(jobEntity.Attack * jobLevelEntity.Attack * 0.01f);
        roleEntity.Defense = (int)Math.Round(jobEntity.Defense * jobLevelEntity.Defense * 0.01f);
        roleEntity.Hit     = (int)Math.Round(jobEntity.Hit * jobLevelEntity.Hit * 0.01f);
        roleEntity.Dodge   = (int)Math.Round(jobEntity.Dodge * jobLevelEntity.Dodge * 0.01f);
        roleEntity.Cri     = (int)Math.Round(jobEntity.Cri * jobLevelEntity.Cri * 0.01f);
        roleEntity.Res     = (int)Math.Round(jobEntity.Res * jobLevelEntity.Res * 0.01f);

        //2.计算角色装备增加的属性
        List <Role_EquipEntity> lst = Role_EquipDBModel.Instance.GetList(condition: string.Format("[RoleId]={0} and [IsPutOn]=1", roleEntity.Id));

        if (lst != null && lst.Count > 0)
        {
            for (int i = 0; i < lst.Count; i++)
            {
                Role_EquipEntity role_EquipEntity = lst[i];

                //0=HP 1=MP 2=攻击 3=防御 4=命中 5=闪避 6=暴击 7=抗性

                #region 基础属性1
                switch (role_EquipEntity.BaseAttr1Type)
                {
                case 0:
                    roleEntity.MaxHP += role_EquipEntity.BaseAttr1Value;
                    break;

                case 1:
                    roleEntity.MaxMP += role_EquipEntity.BaseAttr1Value;
                    break;

                case 2:
                    roleEntity.Attack += role_EquipEntity.BaseAttr1Value;
                    break;

                case 3:
                    roleEntity.Defense += role_EquipEntity.BaseAttr1Value;
                    break;

                case 4:
                    roleEntity.Hit += role_EquipEntity.BaseAttr1Value;
                    break;

                case 5:
                    roleEntity.Dodge += role_EquipEntity.BaseAttr1Value;
                    break;

                case 6:
                    roleEntity.Cri += role_EquipEntity.BaseAttr1Value;
                    break;

                case 7:
                    roleEntity.Res += role_EquipEntity.BaseAttr1Value;
                    break;
                }
                #endregion

                #region 基础属性2
                switch (role_EquipEntity.BaseAttr2Type)
                {
                case 0:
                    roleEntity.MaxHP += role_EquipEntity.BaseAttr2Value;
                    break;

                case 1:
                    roleEntity.MaxMP += role_EquipEntity.BaseAttr2Value;
                    break;

                case 2:
                    roleEntity.Attack += role_EquipEntity.BaseAttr2Value;
                    break;

                case 3:
                    roleEntity.Defense += role_EquipEntity.BaseAttr2Value;
                    break;

                case 4:
                    roleEntity.Hit += role_EquipEntity.BaseAttr2Value;
                    break;

                case 5:
                    roleEntity.Dodge += role_EquipEntity.BaseAttr2Value;
                    break;

                case 6:
                    roleEntity.Cri += role_EquipEntity.BaseAttr2Value;
                    break;

                case 7:
                    roleEntity.Res += role_EquipEntity.BaseAttr2Value;
                    break;
                }
                #endregion

                roleEntity.Attack  += role_EquipEntity.Attack;
                roleEntity.Defense += role_EquipEntity.Defense;
                roleEntity.Hit     += role_EquipEntity.Hit;
                roleEntity.Dodge   += role_EquipEntity.Dodge;
                roleEntity.Cri     += role_EquipEntity.Cri;
                roleEntity.Res     += role_EquipEntity.Res;
            }
        }

        //3.计算综合战斗力
        roleEntity.Fighting = roleEntity.Attack * 4 + roleEntity.Defense * 4 + roleEntity.Hit * 2 + roleEntity.Dodge * 2 + roleEntity.Cri + roleEntity.Res;

        RoleDBModel.Instance.Update(roleEntity);
    }