示例#1
0
 public void Attack(Transform[] _list)
 {
     list           = _list;
     state          = AnimState.Attack;
     SkillAttackDto = null;
     animatorManage.SetInt("state", (int)state);
 }
示例#2
0
文件: MapRoom.cs 项目: hehay/MyServer
        void Skill(UserToken token, SkillAttackDTO skillAttackDto)
        {
            skillAttackDto.userId = userCache.GetUserId(token);
            USER user = userCache.GetUserById(userCache.GetUserId(token));

            if (user.Mp < skillAttackDto.skillDto.mp)
            {
                skillAttackDto = null;
            }
            if (skillAttackDto != null)
            {
                UserDTO userDto = (UserDTO)GetRoleModel(skillAttackDto.userId);
                userDto.mp -= skillAttackDto.skillDto.mp;
                if (userDto.mp <= 0)
                {
                    userDto.mp = 0;
                }
                user.Mp -= skillAttackDto.skillDto.mp;
                if (user.Mp <= 0)
                {
                    user.Mp = 0;
                }
                Brocast(MapProtocol.Skill_BRO, skillAttackDto);
            }
        }
示例#3
0
    public void OnClick()
    {
        Info info = GameData.play.GetComponent <Info>();

        if (info.state == AnimState.Die || info.state == AnimState.Control)
        {
            return;
        }
        if (type == Type.Attack)
        {
            NetIO.Instance.Write(Protocol.Map, SceneManager.GetActiveScene().buildIndex, MapProtocol.Attack_CREQ, GetEmeny(dis, range));
        }
        else if (type == Type.Skill)
        {
            if (GameData.UserDto.mp >= SkillDto.mp)
            {
                SkillAttackDTO skillAttackDto = new SkillAttackDTO();
                skillAttackDto.targetsId = GetEmeny(dis, range);
                skillAttackDto.skillDto  = SkillDto;
                NetIO.Instance.Write(Protocol.Map, SceneManager.GetActiveScene().buildIndex, MapProtocol.Skill_CREQ, skillAttackDto);
            }
            else
            {
                WarrningManager.warringList.Add(new WarringModel("能量不足", null, 2));
            }
        }
        else if (type == Type.Inventory)
        {
            switch (InventoryItemDto.inventory.infoType)
            {
            case InfoType.Hp:
                if (GameData.UserDto.hp == GameData.UserDto.maxHp)
                {
                    WarrningManager.warringList.Add(new WarringModel("你已经很健康了!", null, 2));
                    return;
                }
                break;

            case InfoType.Mp:
                if (GameData.UserDto.mp == GameData.UserDto.maxMp)
                {
                    WarrningManager.warringList.Add(new WarringModel("你的能量很充足呀!", null, 2));
                    return;
                }
                break;
            }

            if (InventoryItemDto.id > 0 && InventoryItemDto != null && isCold == false)
            {
                NetIO.Instance.Write(Protocol.Map, SceneManager.GetActiveScene().buildIndex, MapProtocol.UseInventory_CREQ, InventoryItemDto.id);
                SetCold();
            }
            else
            {
                WarrningManager.warringList.Add(new WarringModel("正在冷却中...", null, 2));
            }
        }
    }
示例#4
0
        public async Task <ServiceResponse <AttackResultDTO> > SkillAttack(SkillAttackDTO request)
        {
            var response = new ServiceResponse <AttackResultDTO>();

            try
            {
                var c = await _context.Characters
                        .Include(c => c.CharacterSkills).ThenInclude(cs => cs.Skills)
                        .FirstOrDefaultAsync(c => c.Id == request.AttackerId);

                if (c == null)
                {
                    throw new System.Exception("Attacking character not found");
                }
                var enemy = await _context.Characters
                            .FirstOrDefaultAsync(c => c.Id == request.EnemyId);

                if (enemy == null)
                {
                    throw new System.Exception("Enemy character not found");
                }

                var cSkill = c.CharacterSkills.FirstOrDefault(cs => cs.Skills.Id == request.SkillId);
                if (cSkill == null)
                {
                    throw new Exception($"Skill not found on character {c.Name}");
                }
                int dmg = SkillsAttackDamage(c, enemy, cSkill);
                if (enemy.HitPoints <= 0)
                {
                    response.Message = $"{enemy.Name} has been defeated";
                }
                _context.Characters.Update(enemy);
                await _context.SaveChangesAsync();

                response.Data = new AttackResultDTO
                {
                    Attacker   = c.Name,
                    AttackerHP = c.HitPoints,
                    Enemy      = enemy.Name,
                    EnemyHp    = enemy.HitPoints,
                    Damage     = dmg
                };
            }
            catch (System.Exception ex)
            {
                response.Success = false;
                response.Message = ex.Message;
            }
            return(response);
        }
示例#5
0
        public async Task <ServiceResponse <AttackResultDTO> > SkillAttack(SkillAttackDTO skillAttackDTO)
        {
            ServiceResponse <AttackResultDTO> serviceResponse = new ServiceResponse <AttackResultDTO>();

            try
            {
                Character CharacterAttacker = await _dataContext.Characters
                                              .Include(x => x.skills)
                                              .FirstOrDefaultAsync(x => x.Id == skillAttackDTO.AttackerId);

                Character CharacterDefender = await _dataContext.Characters
                                              .Include(x => x.skills)
                                              .FirstOrDefaultAsync(x => x.Id == skillAttackDTO.DefenderId);

                Skill skill = CharacterAttacker.skills.FirstOrDefault(x => x.Id == skillAttackDTO.SkillId);
                if (skill == null)
                {
                    serviceResponse.Message = $"{CharacterAttacker.Name} doesn't have that skill.";
                    serviceResponse.Success = false;
                    return(serviceResponse);
                }

                int damage = skill.Damage + (new Random().Next(CharacterAttacker.Intelligence * 2));
                damage -= new Random().Next(CharacterDefender.Defense);
                ProcessFight(damage, CharacterAttacker, CharacterDefender, serviceResponse);

                _dataContext.Characters.Update(CharacterAttacker);
                _dataContext.Characters.Update(CharacterDefender);
                await _dataContext.SaveChangesAsync();

                serviceResponse.Data = new AttackResultDTO
                {
                    Attacker   = CharacterAttacker.Name,
                    Defender   = CharacterDefender.Name,
                    AttackerHP = CharacterAttacker.HitPoints,
                    DefenderHP = CharacterDefender.HitPoints,
                    Damage     = damage
                };
            }
            catch (Exception ex)
            {
                serviceResponse.Success = false;
                serviceResponse.Message = ex.Message;
            }
            return(serviceResponse);
        }
示例#6
0
    public void Skill(Transform[] _list, SkillAttackDTO skillAttackDto)
    {
        list = _list;
        this.SkillAttackDto = skillAttackDto;
        switch (skillAttackDto.skillDto.SkillModelDto.aniname)
        {
        case AnimState.Skill1:
            state = AnimState.Skill1;
            break;

        case AnimState.Skill2:
            state = AnimState.Skill2;
            break;

        case AnimState.Skill3:
            state = AnimState.Skill3;
            break;
        }
        animatorManage.SetInt("state", (int)state);
    }
示例#7
0
    void SkillBro(SkillAttackDTO skillAttackDto)
    {
        if (skillAttackDto == null)
        {
            WarrningManager.warringList.Add(new WarringModel("能量不足", null, 2));
            return;
        }

        int userId = skillAttackDto.userId;

        if (userId == GameData.UserDto.id)
        {
            GameData.SetHpMp(0, -skillAttackDto.skillDto.mp);
            GameData.play.transform.Find("infoUi").GetComponent <CameraFacingBillboard>().SetInfo(GameData.UserDto.name, (float)GameData.UserDto.hp / GameData.UserDto.maxHp, (float)GameData.UserDto.mp / GameData.UserDto.maxMp);
            CanvasManage._instance.shortcuts[skillAttackDto.skillDto.shortcutId - 1].SetCold();//进入冷却
        }
        else
        {
            GameObject model   = idToGameObjectDic[userId];
            UserDTO    userDto = (UserDTO)IdToUserDtoDic[userId];
            userDto.mp -= skillAttackDto.skillDto.mp;
            if (userDto.mp <= 0)
            {
                userDto.mp = 0;
            }
            model.transform.Find("infoUi").GetComponent <CameraFacingBillboard>().SetInfo(userDto.name, (float)userDto.hp / userDto.maxHp, (float)userDto.mp / userDto.maxMp);
        }

        int[]            targetsId = skillAttackDto.targetsId;
        List <Transform> targets   = new List <Transform>();

        for (int i = 0; i < targetsId.Length; i++)
        {
            targets.Add(idToGameObjectDic[targetsId[i]].transform);
        }
        idToGameObjectDic[userId].GetComponent <Info>().Skill(targets.ToArray(), skillAttackDto);
    }
示例#8
0
 public async Task <IActionResult> SkillAttack(SkillAttackDTO request)
 {
     return(Ok(await _service.SkillAttack(request)));
 }
示例#9
0
 private void Skill(UserToken token, SkillAttackDTO skillAttackDTO)
 {
     skillAttackDTO.userId = GetUserId(token);
     brocast(FightProtocol.SKILL_BRO, skillAttackDTO);
 }