Пример #1
0
        private void TryToUseSkill(ActionDisplay nearestEnemy)
        {
            SkillController skillController = MeController.SkillController;
            Vector3         mePos           = MeController.transform.position;
            Vector3         enemyPos        = nearestEnemy.Controller.transform.position;

            if (MeController.StatuController.CurrentStatu == Status.IDLE)
            {
                int dir = mePos.x < enemyPos.x ? Directions.Right : Directions.Left; //朝向最近的敌人
                MeController.Me.ChangeDire(dir);
            }
            for (int i = SkillController.Skill1; i <= SkillController.Skill4; i++)
            {
                if (skillController.LearnedSkillList[i] == 0)
                {
                    continue;                                            //已学会的技能列表
                }
                if (skillController.IsSkillCdReady(i))
                {
                    SysSkillBaseVo skillVo = BaseDataMgr.instance.GetSysSkillBaseVo(skillController.LearnedSkillList[i]);
                    if (DamageCheck.Instance.IsSkillCovered(skillVo, mePos, mePos,
                                                            nearestEnemy.Controller.transform.position, MeController.Me.CurDire, (MeController.Me as ActionDisplay).BoxCollider2D, nearestEnemy.BoxCollider2D))
                    {
                        skillController.RequestUseSkill(i); //  请求使用技能
                        break;
                    }
                }
            }
        }
Пример #2
0
        //获得目标特效
        private string GetTargetEffectId(uint skillId, int index, bool isBullet)
        {
            SysSkillBaseVo skillVo = BaseDataMgr.instance.GetSysSkillBaseVo(skillId);

            if (null == skillVo)
            {
                Log.info(this, "SkillBaseVo表不存在id为" + skillId + "的技能");
                return(null);
            }
            SysSkillActionVo actionVo = BaseDataMgr.instance.GetSysSkillActionVo(skillVo.skill_group);

            if (null == actionVo)
            {
                Log.info(this, "Action表不存在id为" + skillVo.skill_group + "的技能组");
                return(null);
            }

            string[] effectIds = StringUtils.GetValueListFromString(actionVo.tar_eff);

            if (index < effectIds.Length)
            {
                if (isBullet)
                {
                    return(effectIds[index]);
                }
                int randomIndex = UnityEngine.Random.Range(0, effectIds.Length);
                return(effectIds[randomIndex]);
            }
            return(string.Empty);
        }
Пример #3
0
        private static SysSkillBaseVo[][] DefaultSkill = new SysSkillBaseVo[6][];   //主动和被动技能的默认配置  职业-主动-被动-技能位置



        public static void InitConfig()
        {
            var skillBaseVos = BaseDataMgr.instance.GetDicByType <SysSkillBaseVo>().Values;

            SysSkillBaseVo[] defaut1 = new SysSkillBaseVo[12];
            SysSkillBaseVo[] defaut2 = new SysSkillBaseVo[12];
            SysSkillBaseVo[] defaut3 = new SysSkillBaseVo[12];

            SysSkillBaseVo[] defaut4 = new SysSkillBaseVo[12];
            SysSkillBaseVo[] defaut5 = new SysSkillBaseVo[12];
            SysSkillBaseVo[] defaut6 = new SysSkillBaseVo[12];

            DefaultSkill[0] = defaut1;
            DefaultSkill[1] = defaut2;
            DefaultSkill[2] = defaut3;
            DefaultSkill[3] = defaut4;
            DefaultSkill[4] = defaut5;
            DefaultSkill[5] = defaut6;

            foreach (SysSkillBaseVo skill in skillBaseVos)
            {
                if (skill.job != 0)                              //主角技能
                {
                    if (skill.skill_lvl == 0 && skill.next != 0) //初始技能
                    {
                        int active = 0;
                        if (skill.active)
                        {
                            active = 1;
                        }
                        DefaultSkill[(skill.job - 1) * 2 + 1 - active][skill.position - 1] = skill;
                    }
                }
            }
        }
Пример #4
0
        /// <summary>
        /// 获取当前职业的默认技能
        /// </summary>
        /// <param name="carser">职业类型</param>
        /// <returns>当前职业</returns>
        private List <SysSkillBaseVo> GetDefaultSkills(int carser)
        {
            List <SysSkillBaseVo> defaultSkill = new List <SysSkillBaseVo>();

            Dictionary <uint, object> skillDict = BaseDataMgr.instance.GetDicByType <SysSkillBaseVo>();

            foreach (SysSkillBaseVo skill in skillDict.Values)
            {
                if (skill.position > 0 && skill.position <= 8 && defaultSkill[skill.position - 1] == null)
                {
                    if (skill.active && skill.pre == 0 && skill.skill_lvl == 0 && skill.job == carser)
                    {
                        defaultSkill[skill.position - 1] = skill;
                    }
                    else if (!skill.active && skill.skill_lvl == 0 && skill.job == carser)
                    {
                        //前置技能为0
                        if (skill.pre == 0)
                        {
                            defaultSkill[skill.position - 1] = skill;
                        }
                        else
                        {
                            //前置技能为某个主动技能
                            SysSkillBaseVo preskill = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>((uint)skill.pre);
                            if (preskill.active)
                            {
                                defaultSkill[skill.position - 1] = skill;
                            }
                        }
                    }
                }
            }
            return(defaultSkill);
        }
Пример #5
0
        public void UseSkillById(uint skillId)
        {
            SysSkillBaseVo skillVo = BaseDataMgr.instance.GetSysSkillBaseVo(skillId);

            if (skillVo == null)
            {
                Log.debug(this, "SkillBase表不存在id为" + skillId + "的技能");
                return;
            }
            _currentSkillVo = skillVo;
            var actionVo = BaseDataMgr.instance.GetDataByTypeAndId <SysSkillActionVo>(BaseDataConst.SYS_SKILL_ACTION_VO,
                                                                                      skillVo.skill_group);

            if (actionVo == null)
            {
                Log.debug(this, "Action表不存在id为" + skillVo.skill_group + "的技能组");
                return;
            }
            _currentActionVo = actionVo;
            MeController.StatuController.SetStatu(actionVo.action_id);
            ShowSkillEffect(actionVo, skillVo);
            if (skillVo.need_keep)
            {
                MeController.GetMeVo().NeedKeep = true;
            }
            if (MeController.Me.Type == DisplayType.PET)
            {
                MeController.TalentSkillController.UseTalentSkill();
            }
        }
Пример #6
0
        /// <summary>
        ///     播放技能音效
        /// </summary>
        /// <param name="skillVo">技能</param>
        /// <param name="result">是否命中</param>
        private void PlaySkillSound(SysSkillBaseVo skillVo, bool result)
        {
            if (result)
            {
                if (StringUtils.IsValidConfigParam(skillVo.sound_hit))
                {
                    SoundMgr.Instance.PlaySkillAudio(GetRandSound(skillVo.sound_hit));
                }
            }
            else
            {
                if (StringUtils.IsValidConfigParam(skillVo.sound_id))
                {
                    SoundMgr.Instance.PlaySkillAudio(GetRandSound(skillVo.sound_id), GetSkillDelay((uint)skillVo.id));

                    //剑士普通攻击3
                    if (SkillConst.Sword_Attack3_ID == skillVo.id)
                    {
                        SoundMgr.Instance.PlaySkillAudio(GetRandSound(skillVo.sound_id), 0.17f);
                    }
                    //刺客普通攻击3
                    else if (SkillConst.Assassin_Attack3_ID == skillVo.id)
                    {
                        SoundMgr.Instance.PlaySkillAudio(GetRandSound(skillVo.sound_id), 0.27f);
                    }
                }
            }
        }
Пример #7
0
        private void OnUpgradeClick(GameObject obj)
        {
            if (currentSkill != null)
            {
                if (currentSkill.next != 0)
                {
                    SysSkillBaseVo nextSkill = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>((uint)currentSkill.next);
                    if (!SkillViewLogic.IsLevelEnough(nextSkill))
                    {
                        MessageManager.Show("角色等级不足,请升级主角等级到" + nextSkill.lvl + "级!");
                    }
                    else

                    if (!SkillViewLogic.IsSkillPointEnough(nextSkill))
                    {
                        MessageManager.Show("灵魂点不足!");
                    }
                    else if (!SkillViewLogic.IsPreSkillEnough(nextSkill))
                    {
                        SysSkillBaseVo preSkill = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>((uint)nextSkill.pre);
                        MessageManager.Show("请先学习技能 " + preSkill.name + " 到 " + preSkill.skill_lvl + " 级");
                    }
                    else
                    {
                        Singleton <SkillControl> .Instance.LearnSkill((uint)currentSkill.id);
                    }
                }
                else
                {
                    MessageManager.Show("当前技能已经满级");
                }
            }
        }
Пример #8
0
        /// <summary>
        /// 设置全部的技能信息
        /// </summary>
        private void SetAllSkillInfo()
        {
            InitSkillObjs();
            bool active = currentUIToggel == zdSkill;

            if (active)
            {
                NGUITools.FindChild(bdSkill.gameObject, "tips").SetActive(Singleton <SkillMode> .Instance.IfShowTips(false));
                NGUITools.FindChild(zdSkill.gameObject, "tips").SetActive(false);
            }
            else
            {
                NGUITools.FindChild(zdSkill.gameObject, "tips").SetActive(Singleton <SkillMode> .Instance.IfShowTips(true));
                NGUITools.FindChild(bdSkill.gameObject, "tips").SetActive(false);
            }

            List <SysSkillBaseVo> skills = Singleton <SkillMode> .Instance.CurrentSkills(active);

            for (int i = 0; i < skills.Count; i++)
            {
                SysSkillBaseVo skill = skills[i];
                if (skills[i] != null)
                {
                    GameObject skillObj = skillList[i];
                    skillObj.name = skill.id.ToString();
                    SkillState state = SkillViewLogic.GetSkillState(skill);
                    NGUITools.FindInChild <UISprite>(skillObj, "icon").spriteName = skill.icon.ToString();
                    if (state == SkillState.Learn) //学习状态-置灰
                    {
                        UIUtils.ChangeGrayShader(NGUITools.FindInChild <UISprite>(skillObj, "icon"), 23);
                    }
                    else
                    {
                        NGUITools.FindChild(skillObj, "lvl").SetActive(true);
                        NGUITools.FindInChild <UILabel>(skillObj, "lvl").text = "Lv." + skill.skill_lvl;
                        UIUtils.ChangeNormalShader(NGUITools.FindInChild <UISprite>(skillObj, "icon"), 22);
                    }
                    if (state != SkillState.Max)
                    {
                        SysSkillBaseVo nextSkill = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>((uint)skill.next);
                        if (SkillViewLogic.IsConditionEnough(nextSkill))
                        {
                            NGUITools.FindChild(skillObj, "tips").SetActive(true);
                        }
                    }
                    if (currentSkill != null && currentSkill.position == skills[i].position && currentSkill.group == skills[i].group)
                    {
                        OnSkillClick(skillObj);
                    }
                }
            }
            if (currentSkill == null)
            {
                OnSkillClick(skillList[0]);
            }
            SetSkillsPosInfo();
            SetGuideButton();
            CheckGuide();
        }
Пример #9
0
        public bool TrapColliderCheckInjured2D(SysSkillBaseVo skillVo, Vector3 excutePos, int dir,
                                               BoxCollider2D boxCollider2D, List <ActionDisplay> lastAttackedActionDisplay,
                                               bool isSend = false)
        {
            if (AppMap.Instance.me.GetVo().CurHp <= 0)
            {
                lastAttackedActionDisplay.Clear();
                return(false);
            }

            Vector3 target  = AppMap.Instance.me.Controller.transform.position; //敌方位置
            bool    isDodge = false;                                            //是否闪避
            bool    isCrit  = false;                                            //是否暴击
            bool    isParry = false;                                            //是否格挡

            if (IsTrapSkillCovered(boxCollider2D, AppMap.Instance.me.BoxCollider2D))
            {
                if (!isSend)
                {
                    if (lastAttackedActionDisplay.Contains(AppMap.Instance.me))
                    {
                        return(false);
                    }
                    var meVo = AppMap.Instance.me.GetMeVoByType <PlayerVo>();
                    if (meVo != null &&
                        (meVo.IsUnbeatable || AppMap.Instance.me.Controller.StatuController.CurrentStatu == Status.ROLL))
                    {
                        return(false); //无敌状态不播放受击
                    }

                    var attackVo = new ActionVo
                    {
                        SkillId       = skillVo.unikey,
                        ActionType    = Actions.INJURED,
                        SkillUsePoint = excutePos,
                        Target        = AppMap.Instance.me.GoBase
                    };                         //动作vo
                    meControler.BeAttackedController.BeAttacked(attackVo);
                    int cutHp = skillVo.value; //伤害值
                    if (meVo.CurHp <= (uint)cutHp)
                    {
                        meVo.CurHp          = 0;
                        attackVo            = new ActionVo();
                        attackVo.ActionType = Actions.DEATH;
                        meControler.AttackController.AddAttackList(attackVo, true);
                    }
                    else
                    {
                        meVo.CurHp -= (uint)cutHp;
                    }
                    lastAttackedActionDisplay.Add(AppMap.Instance.me);
                    PlayerAiController.AddHudView(isDodge, isCrit, isParry, cutHp, (int)meVo.CurHp, Color.red);  //冒血直接冒
                    return(true);
                }
            }
            lastAttackedActionDisplay.Clear();
            return(false);
        }
Пример #10
0
        public const int TargetEnemy = 3;  //作用于敌人

        private void Start()
        {
            Target    = MeController.GetMeVoByType <PetVo>().MasterVo.Controller.transform;
            _idleTime = 0;
            var petVo = MeController.GetMeVoByType <PetVo>();

            _talentSkillVo = BaseDataMgr.instance.GetSysSkillBaseVo(petVo.SkillId);
            _meTransform   = transform;
        }
Пример #11
0
        /// <summary>
        /// 技能是否已经学习
        /// </summary>
        /// <param name="skillId">技能ID</param>
        /// <returns></returns>
        public bool IsSkillLearned(uint skillId)
        {
            if (skillId == 0)
            {
                return(true);
            }
            SysSkillBaseVo skill = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>(skillId);

            if (skill == null)
            {
                Log.error(this, "前置技能值为空" + skillId);
            }
            if (skill.active)
            {
                foreach (SysSkillBaseVo skillLearn in zdSkills)
                {
                    if (skillLearn != null)
                    {
                        if (skillLearn.id == skillId)
                        {
                            return(true);
                        }

                        if (skill.group == skillLearn.group)
                        {
                            if (skill.skill_lvl <= skillLearn.skill_lvl)
                            {
                                return(true);
                            }
                        }
                    }
                }
            }
            else
            {
                foreach (SysSkillBaseVo skillLearn in bdSkills)
                {
                    if (skillLearn != null)
                    {
                        if (skillLearn.id == skillId)
                        {
                            return(true);
                        }

                        if (skill.group == skillLearn.group)
                        {
                            if (skill.skill_lvl <= skillLearn.skill_lvl)
                            {
                                return(true);
                            }
                        }
                    }
                }
            }
            return(false);
        }
Пример #12
0
        private SkillState skillState = SkillState.Upgrade; //状态,学习,升级,进阶

        public void OpenView(SysSkillBaseVo skillVo, GameObject obj)
        {
            if (base.gameObject == null)
            {
                base.gameObject = obj;
                Init();
            }
            base.gameObject.SetActive(true);
            SetSkillDetailInfo(skillVo);
        }
Пример #13
0
        //获得击中目标音效
        private string GetSoundHitPathByAttack(uint skillId)
        {
            SysSkillBaseVo skillVo = BaseDataMgr.instance.GetSysSkillBaseVo(skillId);

            if (null == skillVo)
            {
                Log.info(this, "SkillBaseVo表不存在id为" + skillId + "的技能");
                return(null);
            }
            return(skillVo.sound_hit.ToString(CultureInfo.InvariantCulture));
        }
Пример #14
0
 public void Start()
 {
     _petVo         = MeController.GetMeVoByType <PetVo>();
     _talentSkillVo = BaseDataMgr.instance.GetSysSkillBaseVo(_petVo.SkillId);
     if (_talentSkillVo != null)
     {
         _talentSkillActionVo = BaseDataMgr.instance.GetSysSkillActionVo(_talentSkillVo.skill_group);
     }
     _masterVo      = _petVo.MasterVo;
     _masterDisplay = _petVo.MasterDisplay;
 }
Пример #15
0
        // Use this for initialization
        private void Start()
        {
            ActionControler.StatuController.SetStatu(Status.IDLE);
            TrapMeDisplay             = ActionControler.Me as TrapDisplay;
            ThisTrapVo                = TrapMeDisplay.GetTrapVo();
            _skillBaseVo              = BaseDataMgr.instance.GetSysSkillBaseVo(uint.Parse(StringUtils.GetValueListFromString(ThisTrapVo.SysTrapVo.SkillIds)[0]));
            LastAttackedActionDisplay = new List <ActionDisplay>();
            _startTime                = 0;
            Vector3 pos = transform.position;

            EffectMgr.Instance.CreateMainEffect(EffectId.Main_CylinderStandby, pos, true, null, false);
        }
Пример #16
0
        /// <summary>
        ///     获取技能攻击后的目标表现Vo
        /// </summary>
        /// <param name="skillVo"></param>
        /// <param name="excutePos"></param>
        /// <param name="dir"></param>
        /// <param name="enemyDisplay"></param>
        /// <param name="checkedTime"></param>
        /// <param name="moveRatio"></param>
        /// <returns></returns>
        private ActionVo GetSkillActionVo(SysSkillBaseVo skillVo, Vector3 excutePos, int dir, ActionDisplay enemyDisplay, int index,
                                          int checkedTime = 0, float moveRatio = 1)
        {
            var attackVo = new ActionVo
            {
                ActionType    = Actions.INJURED,
                SkillUsePoint = excutePos,
                SkillId       = skillVo.unikey
            };

            /*
             * Vector3 moveToPoint = enemyDisplay.GoBase.transform.position;
             * if (skillVo.target_dir != 2 && checkedTime == 0)
             * {
             *  if (dir == Directions.Left)
             *  {
             *      moveToPoint.x -= skillVo.back_dis*0.001f*moveRatio;
             *  }
             *  else
             *  {
             *      moveToPoint.x += skillVo.back_dis*0.001f*moveRatio;
             *  }
             * }
             * if (MeVo.instance.mapId != MapTypeConst.WORLD_BOSS) //世界BOSS的位置不受影响
             * {
             *  moveToPoint.x = AppMap.Instance.mapParser.GetFinalMonsterX(moveToPoint.x); //限制怪物被攻击后不要出屏幕
             * }
             * moveToPoint.y = enemyDisplay.GoBase.transform.position.y; //后退时保持高度不变
             * attackVo.HurtDestination = moveToPoint;*/

            attackVo.FloatingValue = skillVo.Floating_Value;

            if (MeVo.instance.mapId != MapTypeConst.WORLD_BOSS) //世界BOSS的位置不受影响
            {
                //获取当前攻击点的攻击数据
                int[][] atkList = StringUtils.Get2DArrayStringToInt(skillVo.Per_Atk_Data);
                if (atkList != null)
                {
                    if (index < atkList.Length)
                    {
                        attackVo.Velocity_Origin = atkList[index][Actions.VELOCITY_ORIGIN] * 0.001f;
                        attackVo.Angle           = atkList[index][Actions.ANGLE];
                        attackVo.ProtectValue    = atkList[index][Actions.PROTECTVALUE];
                        attackVo.ForceFeedBack   = atkList[index][Actions.FORCEFEEDBACK];
                        attackVo.HitRecover      = atkList[index][Actions.HITRECOVER];
                        attackVo.HurtAnimation   = atkList[index][Actions.HURTANIMATION];
                        attackVo.FaceDirection   = (dir == Directions.Left ? -1 : 1);
                    }
                }
            }
            return(attackVo);
        }
Пример #17
0
 public void InitTotalCdTime()
 {
     for (int i = 0; i < LearnedSkillList.Count; i++)
     {
         SysSkillBaseVo skillVo = BaseDataMgr.instance.GetSysSkillBaseVo(LearnedSkillList[i]);
         if (skillVo == null)
         {
             continue;
         }
         TotalCdTimes[i] = skillVo.cd * 0.001f;
         SkillMpCost[i]  = skillVo.need_value;
     }
 }
Пример #18
0
        /// <summary>
        /// 施放技能时开始控制单位移动
        /// </summary>
        public void SkillStartCtrlMove()
        {
            print("SkillStartCtrlMove");
            if (!MeController.Me.IsUsing)
            {
                return;
            }
            SysSkillBaseVo skillVo = CurrentSkillVo;

            int[] list = StringUtils.GetStringToInt(skillVo.Move_During_Skilling);
            if (list.Length > 0)
            {
                var meVo = MeController.GetMeVo();
                meVo.MoveSpeedDuringSkill   = list[Actions.CTRL_MOVE_SPEED] * 0.001f;
                meVo.CanCtrlMoveDuringSkill = true;
            }
        }
Пример #19
0
        public bool IfShowTips(bool active)
        {
            List <SysSkillBaseVo> skills = CurrentSkills(active);

            foreach (SysSkillBaseVo skill in skills)
            {
                if (skill != null && skill.next != 0)
                {
                    SysSkillBaseVo nextSkill = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>((uint)skill.next);

                    if (SkillViewLogic.IsConditionEnough(nextSkill))
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
Пример #20
0
        private void SetPetProperty(PPet pet)
        {
            PetVo             petVo  = Singleton <PetMode> .Instance.PetVos[pet.id];
            SysPetEvolutionVo petEvo = BaseDataMgr.instance.GetDataById <SysPetEvolutionVo>(pet.star);

            NGUITools.FindInChild <UILabel>(propetyObj, "growvalue").text   = (petEvo.grow / 10000f).ToString();
            NGUITools.FindInChild <UILabel>(propetyObj, "hpvalue").text     = petVo.Hp.ToString();
            NGUITools.FindInChild <UILabel>(propetyObj, "attackvalue").text = petVo.AttPMax.ToString();
            NGUITools.FindInChild <UILabel>(propetyObj, "pdvalue").text     = petVo.DefP.ToString();
            NGUITools.FindInChild <UILabel>(propetyObj, "mdvalue").text     = petVo.DefM.ToString();
            NGUITools.FindInChild <UILabel>(propetyObj, "decvalue").text    = petVo.HurtRe.ToString();

            SysPet         spet  = BaseDataMgr.instance.GetDataById <SysPet>(pet.petId);
            SysSkillBaseVo skill = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>((uint)spet.unique_skill);

            NGUITools.FindInChild <UILabel>(propetyObj, "des").text             = "天赋技能:" + skill.desc;
            NGUITools.FindInChild <UILabel>(gameObject, "info/fightvalue").text = petVo.fight.ToString();
        }
Пример #21
0
        /// <summary>
        /// 施放技能时做匀速的突进
        /// </summary>
        /// <param name="index"></param>
        public void SkillMove(int index)
        {
            if (!MeController.Me.IsUsing)
            {
                return;
            }
            SysSkillBaseVo skillVo = CurrentSkillVo;

            int[][] list = StringUtils.Get2DArrayStringToInt(skillVo.Move_Data);
            if (list != null)
            {
                var meVo = MeController.GetMeVo();
                meVo.MoveDistance  = list[index][Actions.MOVE_DISTANCE] * 0.001f;
                meVo.MoveTime      = list[index][Actions.MOVE_TIME] * 0.001f;
                meVo.MoveDirection = list[index][Actions.MOVE_DIRECTION];
                meVo.MoveSpeed     = meVo.MoveDistance / meVo.MoveTime;
                meVo.IsMoving      = true;
            }
        }
Пример #22
0
        /// <summary>
        /// 施放技能时做带加速度的突进
        /// </summary>
        /// <param name="index"></param>
        public void SkillRush(int index)
        {
            if (!MeController.Me.IsUsing)
            {
                return;
            }
            SysSkillBaseVo skillVo = CurrentSkillVo;

            int[][] list = StringUtils.Get2DArrayStringToInt(skillVo.Rush_Data);
            if (list != null)
            {
                var meVo = MeController.GetMeVo();
                meVo.RushSpeed    = list[index][Actions.RUSH_VELOCITY] * 0.001f;
                meVo.Acceleration = list[index][Actions.RUSH_ACCELERATION] * 0.001f;
                meVo.Distance     = list[index][Actions.RUSH_DISTANCE] * 0.001f;
                meVo.Direction    = list[index][Actions.RUSH_DIRECTION];
                meVo.IsRush       = true;
            }
        }
Пример #23
0
 /// <summary>
 /// 获取当前此技能状态-学习-升级-进化
 /// </summary>
 /// <param name="skillVo"></param>
 /// <returns></returns>
 public static SkillState GetSkillState(SysSkillBaseVo skillVo)
 {
     if (IsLastLevel(skillVo))
     {
         return(SkillState.Max);
     }
     else if (skillVo.skill_lvl == 0)
     {
         return(SkillState.Learn);
     }
     else if (skillVo.evolve != 0)
     {
         return(SkillState.Change);
     }
     else
     {
         return(SkillState.Upgrade);
     }
 }
Пример #24
0
 //技能位置点击
 private void OnSkillClick(GameObject obj)
 {
     if (!obj.name.Equals("0"))
     {
         uint           skillId = uint.Parse(obj.name);
         SysSkillBaseVo skill   = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>(skillId);
         if (!chose.activeSelf || currentSkill != skill)
         {
             chose.SetActive(true);
             chose.transform.localPosition = obj.transform.localPosition;
             currentSkill = skill;
             SetSkillInfo(skill);
             SetSkillPosChoseInfo();
         }
     }
     else
     {
         MessageManager.Show("未开放");
     }
 }
Пример #25
0
        //学习-升级-升阶技能
        public void LearnSkill(uint skillId)
        {
            MemoryStream   mem   = new MemoryStream();
            SysSkillBaseVo skill = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>(skillId);

            if (skill.next != 0)
            {
                Module_13.write_13_5(mem, skillId, (uint)skill.next);
            }
            else if (skill.evolve != 0)
            {
                Module_13.write_13_5(mem, skillId, (uint)skill.evolve);
            }
            else
            {
                return;
            }

            AppNet.gameNet.send(mem, 13, 5);
        }
Пример #26
0
        /// <summary>
        /// 获取玩家已分配的技能点
        /// </summary>
        /// <returns></returns>
        private uint GetUsedPoint()
        {
            uint usedPoint = 0;

            foreach (uint skillId in skillsId)
            {
                SysSkillBaseVo skill = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>(skillId);

                if (skill.reset_skillid != 0 && skill.reset_skillid != skill.id)
                {
                    SysSkillBaseVo preSkill = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>((uint)skill.reset_skillid);
                    do
                    {
                        preSkill   = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>((uint)preSkill.next);
                        usedPoint += (uint)preSkill.point;
                    } while (preSkill.id != skill.id);
                }
            }

            return(usedPoint);
        }
Пример #27
0
        /// <summary>
        /// 获取当前玩家的全部技能
        /// </summary>
        private List <SysSkillBaseVo> GetPlayerCurrentSkills(int job, bool active)
        {
            List <SysSkillBaseVo> defaultSkills;

            if (skillsId.Count < 24) //默认最多24个技能位
            {
                defaultSkills = SkillViewLogic.GetDefaultSkill(job, active).ToList();
            }
            else
            {
                defaultSkills = new List <SysSkillBaseVo>();
            }
            foreach (uint skillid in skillsId)
            {
                SysSkillBaseVo skill = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>(skillid);
                if (skill.active == active)
                {
                    defaultSkills[skill.position - 1] = skill;
                }
            }
            return(defaultSkills);
        }
Пример #28
0
 //技能类型切换
 private void OnStateChange(bool state)
 {
     if (state)
     {
         if (UIToggle.current == zdSkill && currentUIToggel != zdSkill)
         {
             currentUIToggel = zdSkill;
             currentSkill    = null;
             SetToggleLable(NGUITools.FindChild(zdSkill.gameObject, "label"), true);
             SetToggleLable(NGUITools.FindChild(bdSkill.gameObject, "label"), false);
             SetAllSkillInfo();
         }
         else if (UIToggle.current == bdSkill && currentUIToggel != bdSkill)
         {
             currentUIToggel = bdSkill;
             currentSkill    = null;
             SetToggleLable(NGUITools.FindChild(zdSkill.gameObject, "label"), false);
             SetToggleLable(NGUITools.FindChild(bdSkill.gameObject, "label"), true);
             SetAllSkillInfo();
         }
     }
 }
Пример #29
0
        private void SetSkillsPosInfo()
        {
            bool chosed = false;

            uint[] skillposId = Singleton <SkillMode> .Instance.GetUsedSkill();

            for (int i = 0; i < skillPosList.Count; i++)
            {
                GameObject pos     = skillPosList[i];
                uint       skillId = skillposId[i];
                if (skillId == 0)
                {
                    NGUITools.FindChild(pos, "icon").SetActive(false);
                    NGUITools.FindChild(pos, "tips").SetActive(true);
                }
                else
                {
                    if (skillId == currentSkill.id)
                    {
                        posChose.transform.localPosition = pos.transform.localPosition;

                        chosed = true;
                    }
                    SysSkillBaseVo skill = BaseDataMgr.instance.GetDataById <SysSkillBaseVo>(skillId);
                    NGUITools.FindChild(pos, "icon").SetActive(true);
                    NGUITools.FindChild(pos, "tips").SetActive(false);
                    NGUITools.FindInChild <UISprite>(pos, "icon").spriteName = skill.icon.ToString();
                }
            }
            if (chosed)
            {
                posChose.SetActive(true);
            }
            else
            {
                posChose.SetActive(false);
            }
        }
Пример #30
0
        /// <summary>
        ///     攻击伤害检测
        /// </summary>
        public bool CheckDamage(Vector3 effectPosition, int index)
        {
            SysSkillBaseVo skillVo = CurrentSkillVo;

            print(skillVo.unikey);
            if (!MeController.Me.IsUsing)
            {
                return(false);
            }
            bool result = false;

            switch (MeController.Me.Type)
            {
            case DisplayType.PET:
                result = DamageCheck.Instance.CheckPetInjured2D(MeController, skillVo, effectPosition,
                                                                _selfTransform.position,
                                                                MeController.Me.CurFaceDire, GetEnemyDisplay(), _currentActionVo.IsBullet, _checkedTime, index,
                                                                AppMap.Instance.mapParser.NeedSyn);
                break;

            case DisplayType.ROLE:
                //主角攻击的伤害检测
                bool needSyn = AppMap.Instance.mapParser.NeedSyn;
                if (MeController.GetMeVo().Id == AppMap.Instance.me.GetVo().Id)
                {
                    result = DamageCheck.Instance.CheckMeInjured2D(MeController, skillVo, effectPosition,
                                                                   _selfTransform.position,
                                                                   MeController.Me.CurFaceDire, GetEnemyDisplay(), _currentActionVo.IsBullet, _checkedTime,
                                                                   index, needSyn);
                    if (result)
                    {
                        CameraEffectManager.NormalAttackShake();
                        if (MeVo.instance.CurMp < MeVo.instance.Mp)
                        {
                            MeVo.instance.CurMp += 1;
                        }
                        PlayBeAttackedSound(skillVo.unikey);     //播放受击音效
                    }
                }
                else
                {
                    //其他玩家攻击的伤害检测
                    var playerVo = MeController.GetMeVoByType <PlayerVo>();
                    result = DamageCheck.Instance.CheckPlayerInjured2D(MeController, skillVo, playerVo, effectPosition,
                                                                       _selfTransform.position,
                                                                       MeController.Me.CurFaceDire, GetEnemyDisplay(), _currentActionVo.IsBullet, _checkedTime, index, needSyn);
                    if (!needSyn && result)
                    {
                        if (playerVo.CurMp < playerVo.Mp)
                        {
                            playerVo.CurMp += 1;
                        }
                    }
                }
                break;

            case DisplayType.MONSTER:     //怪物攻击的碰撞检测
                result = DamageCheck.Instance.MonsterCheckInjured2D(MeController, skillVo, effectPosition, _selfTransform.position,
                                                                    MeController.Me.CurFaceDire, (MeController.Me.GetVo() as MonsterVo), index);
                if (MeController.Me.DefenceEffect != null)
                {
                    MeController.Me.DefenceEffect.transform.position = Vector3.one * 1000;
                }
                break;

            case DisplayType.Trap:
                DamageCheck.Instance.TrapCheckInjured2D(skillVo, effectPosition,
                                                        MeController.Me.CurFaceDire, (MeController.GetMeByType <TrapDisplay>().BoxCollider2D));
                break;
            }
            if (skillVo.shake && MeController.GetMeVo().Id == MeVo.instance.Id)
            {
                CameraEffectManager.ShakeCamera(0, 0.6f); //增加技能震屏效果
            }
            if (result)
            {
                _checkedTime++;
            }
            return(result);
        }