Exemplo n.º 1
0
        private void ReadXml()
        {
            skill_a3Data.itemId = XMLMgr.instance.GetSXML("skill.skill_learn_item_id", "").getUint("item_id");
            List <SXML> sXMLList = XMLMgr.instance.GetSXMLList("skill.skill", "");
            bool        flag     = sXMLList != null;

            if (flag)
            {
                foreach (SXML current in sXMLList)
                {
                    skill_a3Data skill_a3Data = new skill_a3Data();
                    skill_a3Data.skill_id   = current.getInt("id");
                    skill_a3Data.carr       = current.getInt("carr");
                    skill_a3Data.skill_name = current.getString("name");
                    skill_a3Data.action_tm  = current.getFloat("action_tm");
                    skill_a3Data.des        = current.getString("descr1");
                    skill_a3Data.open_zhuan = current.getInt("open_zhuan");
                    skill_a3Data.open_lvl   = current.getInt("open_lvl");
                    skill_a3Data.xml        = current;
                    skill_a3Data.item_num   = current.getInt("item_num");
                    skill_a3Data.targetNum  = current.getInt("target_num");
                    skill_a3Data.range      = current.getInt("range");
                    skill_a3Data.skillType  = current.getInt("skill_type");
                    skill_a3Data.skillType2 = current.getInt("skill_type2");
                    skill_a3Data.max_lvl    = current.GetNodeList("skill_att", "").Count;
                    skill_a3Data.eff_last   = current.getFloat("eff_last");
                    this.skilldic[skill_a3Data.skill_id] = skill_a3Data;
                    bool flag2 = skill_a3Data.skill_id != 1;
                    if (flag2)
                    {
                        this.skilllst.Add(skill_a3Data);
                    }
                }
            }
        }
Exemplo n.º 2
0
        public StateMachine()
        {
            this.IsPause       = false;
            this.currentState  = null;
            this.previousState = null;
            this.globalState   = null;
            this.proxyState    = null;
            skill_a3Data skill_a3Data = null;
            int          key;

            switch (ModelBase <PlayerModel> .getInstance().profession)
            {
            case 2:
            case 4:
IL_6A:
                key = 2001;
                goto IL_82;

            case 3:
                key = 3001;
                goto IL_82;

            case 5:
                key = 5001;
                goto IL_82;
            }
            goto IL_6A;
IL_82:
            ModelBase <Skill_a3Model> .getInstance().skilldic.TryGetValue(key, out skill_a3Data);

            StateAttack.MinRange = (float)skill_a3Data.range / 53.333f;
        }
Exemplo n.º 3
0
        void ReadXml()
        {
            skill_a3Data.itemId = XMLMgr.instance.GetSXML("skill.skill_learn_item_id").getUint("item_id");
            List <SXML> xml = XMLMgr.instance.GetSXMLList("skill.skill");

            if (xml != null)
            {
                foreach (SXML x in xml)
                {
                    skill_a3Data skillinfo = new skill_a3Data();
                    skillinfo.skill_id   = x.getInt("id");
                    skillinfo.carr       = x.getInt("carr");
                    skillinfo.skill_name = x.getString("name");
                    skillinfo.action_tm  = x.getFloat("action_tm");
                    skillinfo.des        = x.getString("descr1");
                    skillinfo.open_zhuan = x.getInt("open_zhuan");
                    skillinfo.open_lvl   = x.getInt("open_lvl");
                    skillinfo.xml        = x;
                    skillinfo.item_num   = x.getInt("item_num");
                    skillinfo.targetNum  = x.getInt("target_num");
                    skillinfo.range      = x.getInt("range");
                    skillinfo.skillType  = x.getInt("skill_type");
                    skillinfo.skillType2 = x.getInt("skill_type2");
                    skillinfo.max_lvl    = x.GetNodeList("skill_att").Count;
                    skillinfo.eff_last   = x.getFloat("eff_last");

                    skilldic[skillinfo.skill_id] = skillinfo;
                    if (skillinfo.skill_id != 1)
                    {
                        skilllst.Add(skillinfo);
                    }
                }
            }
        }
Exemplo n.º 4
0
        public override void Execute(float delta_time)
        {
            timer += delta_time;
            if (timer < 0.1f)
            {
                return;
            }
            timer -= 1.0f;

            if (TargetLost || Vector3.Distance(startPos, SelfRole._inst.m_curModel.position) > StateInit.Instance.PKDistance ||
                Enemy.isDead)
            {//!--超出追击距离,返回最近的挂机点
                Vector3 backpt = StateInit.Instance.GetNearestWayPoint();
                StateAutoMoveToPos.Instance.pos          = backpt;
                StateAutoMoveToPos.Instance.stopdistance = 2.0f;
                SelfRole.fsm.ChangeState(StateAutoMoveToPos.Instance);
                return;
            }

            //!--获取可以使用的技能,并检查攻击距离
            int          skid   = StateInit.Instance.GetSkillCanUse();
            skill_a3Data skdata = null;

            Skill_a3Model.getInstance().skilldic.TryGetValue(skid, out skdata);
            float range = skdata.range / GameConstant.PIXEL_TRANS_UNITYPOS;

            TargetLost = Enemy.m_curModel == null;
            float enemyDis = Vector3.Distance(Enemy.m_curModel.position, SelfRole._inst.m_curModel.position);

            if (enemyDis > range)
            {
                SelfRole._inst.m_moveAgent.destination      = Enemy.m_curModel.position;
                SelfRole._inst.m_moveAgent.stoppingDistance = range - 0.125f;
                SelfRole._inst.m_curAni.SetBool(EnumAni.ANI_RUN, true);
            }
            else
            {
                SelfRole._inst.m_moveAgent.Stop();
                SelfRole._inst.m_curAni.SetBool(EnumAni.ANI_RUN, false);
                SelfRole._inst.TurnToRole(Enemy, true);
                bool ret = a1_gamejoy.inst_skillbar.playSkillById(skid);
                if (ret == true && StateInit.Instance.PreferedSkill == skid)
                {
                    StateInit.Instance.PreferedSkill = -1;
                }
            }
        }
Exemplo n.º 5
0
        public override void Execute(float delta_time)
        {
            this.timer += delta_time;
            bool flag = this.timer < 0.1f;

            if (!flag)
            {
                this.timer -= 1f;
                bool flag2 = this.TargetLost || Vector3.Distance(this.startPos, SelfRole._inst.m_curModel.position) > StateInit.Instance.PKDistance || this.Enemy.isDead;
                if (flag2)
                {
                    Vector3 nearestWayPoint = StateInit.Instance.GetNearestWayPoint();
                    StateAutoMoveToPos.Instance.pos          = nearestWayPoint;
                    StateAutoMoveToPos.Instance.stopdistance = 2f;
                    SelfRole.fsm.ChangeState(StateAutoMoveToPos.Instance);
                }
                else
                {
                    int          skillCanUse  = StateInit.Instance.GetSkillCanUse();
                    skill_a3Data skill_a3Data = null;
                    ModelBase <Skill_a3Model> .getInstance().skilldic.TryGetValue(skillCanUse, out skill_a3Data);

                    float num = (float)skill_a3Data.range / 53.333f;
                    this.TargetLost = (this.Enemy.m_curModel == null);
                    float num2  = Vector3.Distance(this.Enemy.m_curModel.position, SelfRole._inst.m_curModel.position);
                    bool  flag3 = num2 > num;
                    if (flag3)
                    {
                        SelfRole._inst.m_moveAgent.destination      = this.Enemy.m_curModel.position;
                        SelfRole._inst.m_moveAgent.stoppingDistance = num - 0.125f;
                        SelfRole._inst.m_curAni.SetBool(EnumAni.ANI_RUN, true);
                    }
                    else
                    {
                        SelfRole._inst.m_moveAgent.Stop();
                        SelfRole._inst.m_curAni.SetBool(EnumAni.ANI_RUN, false);
                        SelfRole._inst.TurnToRole(this.Enemy, true);
                        bool flag4 = skillbar.instance.playSkillById(skillCanUse, false);
                        bool flag5 = flag4 && StateInit.Instance.PreferedSkill == skillCanUse;
                        if (flag5)
                        {
                            StateInit.Instance.PreferedSkill = -1;
                        }
                    }
                }
            }
        }
Exemplo n.º 6
0
        // --<自动战斗> 玩家是否正在返回途中
        //private bool isReturning;
        public StateMachine()
        {
            IsPause = false;

            currentState  = null;
            previousState = null;
            globalState   = null;
            proxyState    = null;

            skill_a3Data skdata = null;
            int          skid   = -1;

            switch (PlayerModel.getInstance().profession)
            {
            default:
            case 2: skid = 2001; break;

            case 3: skid = 3001; break;

            case 5: skid = 5001; break;
            }
            Skill_a3Model.getInstance().skilldic.TryGetValue(skid, out skdata);
            StateAttack.MinRange = skdata.range / GameConstant.PIXEL_TRANS_UNITYPOS;
        }
Exemplo n.º 7
0
        public bool CheckSkillLevelupAvailable()
        {
            int        num  = 0;
            List <int> list = new List <int>(this.skilldic.Keys);

            for (int i = 0; i < list.Count; i++)
            {
                bool flag = this.skilldic[list[i]].now_lv <= 0;
                if (!flag)
                {
                    bool flag2 = this.skilldic[list[i]].now_lv < this.skilldic[list[i]].max_lvl;
                    if (flag2)
                    {
                        num = Mathf.Max(num, this.skilldic[list[i]].max_lvl - this.skilldic[list[i]].now_lv);
                    }
                }
            }
            int  num2 = Mathf.Min(this.GetCheckCount(10), num);
            bool result;

            for (int j = 0; j < list.Count; j++)
            {
                int  num3  = 0;
                int  num4  = 0;
                bool flag3 = false;
                int  k;
                for (k = 0; k < num2; k++)
                {
                    skill_a3Data expr_10B = this.skilldic[list[j]];
                    bool         flag4    = ((expr_10B != null) ? expr_10B.xml : null) == null || this.skilldic[list[j]].xml.m_dAtttr.ContainsKey("normal_skill");
                    if (flag4)
                    {
                        break;
                    }
                    bool flag5 = ModelBase <PlayerModel> .getInstance().profession == this.skilldic[list[j]].carr;

                    if (flag5)
                    {
                        bool flag6 = this.skilldic[list[j]].now_lv <= 0;
                        if (flag6)
                        {
                            break;
                        }
                        bool flag7 = this.skilldic[list[j]].now_lv + k < this.skilldic[list[j]].max_lvl;
                        if (!flag7)
                        {
                            break;
                        }
                        int  @int  = this.skilldic[list[j]].xml.GetNode("skill_att", "skill_lv==" + (this.skilldic[list[j]].now_lv + 1 + k)).getInt("open_zhuan");
                        bool flag8 = (ulong)ModelBase <PlayerModel> .getInstance().up_lvl >= (ulong)((long)@int);

                        if (!flag8)
                        {
                            break;
                        }
                        int  int2  = this.skilldic[list[j]].xml.GetNode("skill_att", "skill_lv==" + (this.skilldic[list[j]].now_lv + 1 + k)).getInt("open_lvl");
                        bool flag9 = (ulong)ModelBase <PlayerModel> .getInstance().lvl >= (ulong)((long)int2);

                        if (!flag9)
                        {
                            break;
                        }
                        num3 += this.skilldic[list[j]].xml.GetNode("skill_att", "skill_lv==" + (this.skilldic[list[j]].now_lv + 1 + k)).getInt("money");
                        num4 += this.skilldic[list[j]].xml.GetNode("skill_att", "skill_lv==" + (this.skilldic[list[j]].now_lv + 1 + k)).getInt("item_num");
                        flag3 = (ModelBase <a3_BagModel> .getInstance().getItemNumByTpid(skill_a3Data.itemId) >= num4 && (ulong)ModelBase <PlayerModel> .getInstance().money >= (ulong)((long)num3));
                    }
                }
                bool flag10 = k == num2 & flag3;
                if (flag10)
                {
                    result = true;
                    return(result);
                }
            }
            result = false;
            return(result);
        }
Exemplo n.º 8
0
        public int GetSkillCanUse()
        {
            bool flag = this.PreferedSkill != -1;
            int  result;

            if (flag)
            {
                long curServerTimeStampMS = muNetCleint.instance.CurServerTimeStampMS;
                bool flag2 = curServerTimeStampMS - this.releaseTime >= 2000L;
                if (flag2)
                {
                    this.PreferedSkill = -1;
                }
                else
                {
                    skill_a3Data skill_a3Data = ModelBase <Skill_a3Model> .getInstance().skilldic[this.PreferedSkill];

                    bool flag3 = skill_a3Data.mp <= ModelBase <PlayerModel> .getInstance().mp&& skill_a3Data.cdTime <= 0;

                    if (flag3)
                    {
                        result = this.PreferedSkill;
                        return(result);
                    }
                }
            }
            List <int> list = ModelBase <AutoPlayModel> .getInstance().Skills.ToList <int>();

            foreach (skill_a3Data current in ModelBase <Skill_a3Model> .getInstance().skilldic.Values)
            {
                bool flag4 = current.carr == ModelBase <PlayerModel> .getInstance().profession&& current.skill_id != skillbar.NORNAL_SKILL_ID && current.now_lv != 0 && current.skillType2 == 1 && current.mp <= ModelBase <PlayerModel> .getInstance().mp&& current.cdTime <= 0;

                if (flag4)
                {
                    result = current.skill_id;
                    return(result);
                }
            }
            for (int i = 0; i < list.Count; i++)
            {
                for (int j = i; j < list.Count; j++)
                {
                    bool flag5 = ModelBase <Skill_a3Model> .getInstance().skilldic.ContainsKey(list[i]) && ModelBase <Skill_a3Model> .getInstance().skilldic.ContainsKey(list[j]);

                    if (flag5)
                    {
                        bool flag6 = ModelBase <Skill_a3Model> .getInstance().skilldic[list[i]].cd > ModelBase <Skill_a3Model> .getInstance().skilldic[list[j]].cd;

                        if (flag6)
                        {
                            int value = list[i];
                            list[i] = list[j];
                            list[j] = value;
                        }
                    }
                }
            }
            for (int k = list.Count - 1; k >= 0; k--)
            {
                bool flag7 = list[k] == 0;
                if (!flag7)
                {
                    int          num           = list[k];
                    skill_a3Data skill_a3Data2 = ModelBase <Skill_a3Model> .getInstance().skilldic[num];

                    bool flag8 = skill_a3Data2.mp > ModelBase <PlayerModel> .getInstance().mp || skill_a3Data2.cdTime > 0;

                    if (!flag8)
                    {
                        result = num;
                        return(result);
                    }
                }
            }
            result = skillbar.NORNAL_SKILL_ID;
            return(result);
        }
Exemplo n.º 9
0
        public override void Execute(float delta_time)
        {
            //exe_action_tm += delta_time;
            //Debug.LogError(string.Format("当前时间:{0},技能开始时间:{1},时间间隔:{2},技能的执行时间:{3}", muNetCleint.instance.CurServerTimeStamp, exe_action_tm, muNetCleint.instance.CurServerTimeStamp - exe_action_tm, xml_action_tm));
            if (muNetCleint.instance.CurServerTimeStamp - exe_action_tm < xml_action_tm || SelfRole._inst.isPlayingSkill)
            {
                return;
            }

            if (mon > 0) //每击杀[一次](不是一只)怪物,额外触发一次拾取物品
            {
                mon--;
                if (!PlayerModel.getInstance().havePet || (PlayerModel.getInstance().havePet&& PlayerModel.getInstance().last_time == 0))
                {
                    SelfRole.fsm.ChangeState(StatePick.Instance);
                }
                return;
            }

            if (SelfRole._inst.m_LockRole != null)
            {
                if (SelfRole._inst.m_LockRole is CollectRole)
                {
                    SelfRole._inst.m_LockRole = null;
                }
                else if (PlayerModel.getInstance().pk_state == PK_TYPE.PK_PEACE)
                {
                    if (SelfRole._inst.m_LockRole is ProfessionRole)
                    {
                        SelfRole._inst.m_LockRole = null;
                    }
                }
                else if (PlayerModel.getInstance().pk_state == PK_TYPE.PK_TEAM && TeamProxy.getInstance().MyTeamData != null)
                {
                    if (TeamProxy.getInstance().MyTeamData.itemTeamDataList.Exists((m) => m.cid == SelfRole._inst.m_LockRole.m_unCID))
                    {
                        SelfRole._inst.m_LockRole = null;
                    }
                }
            }

            //if (SelfRole._inst.m_LockRole is ProfessionRole &&
            //    SelfRole._inst.m_ePK_Type == PK_TYPE.PK_PEACE) // 玩家在和平状态下挂机,手动锁定一个玩家时
            //    SelfRole._inst.m_LockRole = null;
            if (SelfRole._inst.m_LockRole == null)
            {
                if (PlayerModel.getInstance().pk_state != PK_TYPE.PK_PEACE)
                {
                    BaseRole plr = OtherPlayerMgr._inst.FindNearestEnemyOne(SelfRole._inst.m_curModel.transform.position, selector: EnemySelector, pkState: PlayerModel.getInstance().pk_state);
                    if (plr != null)
                    {
                        SelfRole._inst.m_LockRole = plr;
                    }
                }
                if (SelfRole._inst.m_LockRole == null)
                {
                    //if (SelfRole._inst.m_LockRole != null /* || SelfRole._inst.m_LockRole is MonsterRole*/)
                    SelfRole._inst.m_LockRole = MonsterMgr._inst.FindNearestMonster(SelfRole._inst.m_curModel.transform.position);
                    MonsterRole mon = SelfRole._inst.m_LockRole as MonsterRole;
                    try
                    {
                        if (PlayerModel.getInstance().task_monsterIdOnAttack.Count != 0 &&
                            !PlayerModel.getInstance().task_monsterIdOnAttack.ContainsValue(mon.monsterid))
                        {
                            SelfRole._inst.m_LockRole = null;
                            SelfRole.fsm.ChangeState(StateIdle.Instance);
                            return;
                        }
                    }
                    catch (Exception)   // 玩家在"角色接受任务后开始自动战斗"时,猛点空白区域,会引发此异常
                                        // 原因是SelfRole._inst.m_LockRole被强制置为null,导致mon未引用到实例对象
                    {
                        SelfRole._inst.m_LockRole = null;
                        SelfRole.fsm.ChangeState(StateIdle.Instance);
                        return;
                    }
                }
            }
            BaseRole target = SelfRole._inst.m_LockRole;

            try
            {
                Vector3 targetPosition = SelfRole._inst.m_LockRole.m_curModel.position;
            }
            catch (Exception)
            {
                SelfRole._inst.m_LockRole = null;
                SelfRole.fsm.RestartState(this);
                return;
            }
            if (target == null || target.isDead)
            {
                StateTimeover += delta_time;
                if (StateTimeover > 1.5f)
                {
                    StateTimeover = 0f;
                    SelfRole.fsm.MoveToOri();
                    return;
                }
                SelfRole._inst.m_LockRole = null;
                //if (BaseRoomItem.instance.dDropItem.Count != 0)
                //    SelfRole.fsm.ChangeState(StatePick.Instance);
                //else
                //    SelfRole.fsm.RestartState(this);
                if (BaseRoomItem.instance.dDropItem_own.Count != 0)
                {
                    if (!PlayerModel.getInstance().havePet || (PlayerModel.getInstance().havePet&& PlayerModel.getInstance().last_time == 0))
                    {
                        SelfRole.fsm.ChangeState(StatePick.Instance);
                    }
                }
                else
                {
                    SelfRole.fsm.RestartState(this);
                }
                return;
            }

            StateTimeover = 0;
            int          skid   = StateInit.Instance.GetSkillCanUse();
            skill_a3Data skdata = null;

            Skill_a3Model.getInstance().skilldic.TryGetValue(skid, out skdata);
            float range = skdata.range / GameConstant.PIXEL_TRANS_UNITYPOS;

            if (skdata.skillType != 0 && Vector3.Distance(target.m_curModel.position, SelfRole._inst.m_curModel.position) > MinRange)
            {
                if (range < Vector3.Distance(SelfRole._inst.m_curModel.position, target.m_curModel.position))
                {
                    StateAutoMoveToPos.Instance.stopdistance = 2.0f;
                    StateAutoMoveToPos.Instance.pos          = SelfRole._inst.m_LockRole.m_curModel.position;
                    SelfRole.fsm.ChangeState(StateAutoMoveToPos.Instance);
                    return;
                }
            }
            SelfRole._inst.TurnToPos(SelfRole._inst.m_LockRole.m_curModel.position);
            exe_action_tm = muNetCleint.instance.CurServerTimeStamp;
            switch (skid)
            {
            case 2001:
            case 3001:
            case 4001:
            case 5001:
                xml_action_tm = 0;
                break;

            default:
                xml_action_tm = skdata.action_tm * 0.1f;
                break;
            }
            bool ret = a1_gamejoy.inst_skillbar.playSkillById(skid);

            if (ret)
            {
                if (StateInit.Instance.PreferedSkill == skid)
                {
                    StateInit.Instance.PreferedSkill = -1;
                }
            }
            else
            {
                xml_action_tm = 0f;
            }
        }
Exemplo n.º 10
0
        //!--获取可以使用的技能ID
        public int GetSkillCanUse()
        {
            if (PreferedSkill != -1)
            {
                long curtime = muNetCleint.instance.CurServerTimeStampMS;
                if (curtime - releaseTime >= 2000)
                {
                    PreferedSkill = -1;
                }
                else
                {
                    skill_a3Data skdata = Skill_a3Model.getInstance().skilldic[PreferedSkill];
                    if (skdata.mp <= PlayerModel.getInstance().mp&&
                        skdata.cdTime <= 0)
                    {
                        return(PreferedSkill);
                    }
                }
            }
            //List<int> skils=new List<int>();
            //foreach (skill_a3Data skillInfo in Skill_a3Model.getInstance().skilllst) {
            //    if (skillInfo.now_lv > 0 && skillInfo.skillType2 == 0)
            //        skils.Add(skillInfo.skill_id);
            //}
            List <int> skils    = new List <int>();
            List <int> allSkils = AutoPlayModel.getInstance().Skills.ToList();

            for (int i = 0; i < allSkils.Count; i++)
            {
                if (Skill_a3Model.getInstance().skilldic.ContainsKey(allSkils[i]))
                {
                    if (Skill_a3Model.getInstance().skilldic[allSkils[i]].skillType2 <= 1)
                    {
                        skils.Add(allSkils[i]);
                    }
                }
            }
            int skid = -1;

            //优先使用buff技能,buff技能不配置在挂机技能组。(现在去掉了)

            //         foreach (skill_a3Data sk in Skill_a3Model.getInstance().skilldic.Values) {
            //	if (sk.carr == PlayerModel.getInstance().profession &&
            //		sk.skill_id != a1_gamejoy.NORNAL_SKILL_ID &&
            //		sk.now_lv != 0 &&
            //                 sk.skillType2 == 1 &&
            //                 sk.mp <= PlayerModel.getInstance().mp &&
            //		 sk.cdTime <= 0
            //                  ) {
            //			return sk.skill_id;
            //	}

            //}

            //选择的技能按cd从长到短排序
            for (int i = 0; i < skils.Count; i++)
            {
                for (int j = i; j < skils.Count; j++)
                {
                    //if (Skill_a3Model.getInstance().skilldic.ContainsKey(skils[i]) && Skill_a3Model.getInstance().skilldic.ContainsKey(skils[j]))
                    //{
                    if (Skill_a3Model.getInstance().skilldic[skils[i]].cd > Skill_a3Model.getInstance().skilldic[skils[j]].cd)
                    {
                        int temp = skils[i];
                        skils[i] = skils[j];
                        skils[j] = temp;
                    }
                    //}
                }
            }

            for (int i = skils.Count - 1; i >= 0; i--)
            {
                if (skils[i] == 0)
                {
                    continue;
                }

                skid = skils[i];
                skill_a3Data skdata = Skill_a3Model.getInstance().skilldic[skid];
                if (skdata.mp > PlayerModel.getInstance().mp ||
                    skdata.cdTime > 0)
                {
                    continue;
                }

                return(skid);
            }

            return(a1_gamejoy.NORNAL_SKILL_ID);
        }