Exemplo n.º 1
0
    // 添加状态aa
    public void AddActionState(sdBaseState state)
    {
        if (state != null)
        {
            states[state.id] = state;
            switch (state.id)
            {
            case 100: {
                die = state;
            } break;

            case 101: {
                idle = state;
            } break;

            case 102: {} break;

            case 103: {
                run            = state;
                run.bMoveState = true;
            } break;

            case 104: {
                stun = state;
            } break;
            }
        }
    }
Exemplo n.º 2
0
    // 添加状态aa
    public sdBaseState AddActionState(string str)
    {
        sdBaseState state = (sdBaseState)null;        //CreateObject(str);

        AddActionState(state);
        return(state);
    }
Exemplo n.º 3
0
    // 释放技能aa
    public bool OnCastSkill(sdSkill s)
    {
        if (statePointer == die)
        {
            return(false);
        }

        if (statePointer == null)
        {
            return(false);
        }
        if (!sdGameLevel.instance.AutoMode && _gameActor == sdGameLevel.instance.mainChar)
        {
            JoyStickCastSkill(s);
        }
        if (statePointer.bPassive)
        {
            SwitchSkill(_gameActor, s);
            sdBaseState state = s.GetFirstValidAction();
            SwitchToState(_gameActor, state);
            return(state != null);
        }
        else
        {
            return(statePointer.OnCastSkill(_gameActor, s));
        }
    }
Exemplo n.º 4
0
    public sdBaseState     AddAction(sdGameActor actor, string str)
    {
        sdBaseState state = actor.logicTSM.AddActionState(str);

        state.belongToSkill = this;
        actionStateList.Add(state);
        state.actionID = actionStateList.Count - 1;
        return(state);
    }
Exemplo n.º 5
0
    public sdTransitNode   AddNode(string str, sdBaseState src, sdBaseState dest)
    {
        sdTransitNode node = AddNode(str);

        node.fromState = src;
        node.destState = dest;
        src.transitPath.Add(node);
        return(node);
    }
Exemplo n.º 6
0
    // 摇杆模式下施放技能时辅助调整方向aa
    protected void JoyStickCastSkill(sdSkill s)
    {
        // 翻滚技能不使用辅助施放aaa
        if (s.id == 1002)
        {
            return;
        }

        // 自动选取朝向上的怪物aaaa
        HeaderProto.ESkillObjType objType = 0;
        if (statePointer.bPassive)
        {
            sdBaseState state = s.GetFirstValidAction();
            objType = (HeaderProto.ESkillObjType)state.stateData["byTargetType"];
        }
        else
        {
            objType = (HeaderProto.ESkillObjType)statePointer.stateData["byTargetType"];
        }

        float xbias = 0.0f;
        float ybias = 0.0f;

        sdGameLevel.instance.mainCharMoveControl(out xbias, out ybias);

        sdActorInterface actor    = null;
        bool             bTurnDir = false;

        // 释放技能前,检查下方向键方向范围内是否有目标,如果有就转向释放技能,没有就不转向aaa
        if (Mathf.Abs(xbias) > 0.1f || Mathf.Abs(ybias) > 0.1f)
        {
            Vector3 worldDir = Vector3.right * xbias + Vector3.forward * ybias;
            worldDir.y = 0.0f;
            worldDir.Normalize();
            actor = sdGameLevel.instance.actorMgr.FindNearestAngle(_gameActor, objType, worldDir, 5.0f, 80.0f);
            if (actor != null)
            {
                //_gameActor._moveVector = worldDir;
                _gameActor.TargetFaceDirection = worldDir;
                bTurnDir = true;
            }
        }

        // 在角色当前方向上寻找最小夹角的目标aaa
        if (!bTurnDir)
        {
            actor = sdGameLevel.instance.actorMgr.FindNearestAngle(_gameActor, objType, _gameActor.GetDirection(), 5.0f, 180.0f);
            if (actor != null)
            {
                Vector3 dir = actor.transform.position - _gameActor.transform.position;
                dir.y = 0;
                dir.Normalize();
                _gameActor.TargetFaceDirection = dir;
            }
        }
    }
Exemplo n.º 7
0
    // 强制终止当前状态aa
    public void ForceStop()
    {
        sdBaseState next = GetCurrentPassiveState();

        nextState = null;
        if (statePointer != next)
        {
            SwitchSkill(_gameActor, next.belongToSkill);
            SwitchToState(_gameActor, next);
        }
    }
Exemplo n.º 8
0
 public void end(sdGameActor _gameActor)
 {
     _enabled = false;
     t        = 0.0f;
     if (targetSkill != null)
     {
         targetSkill.leave(_gameActor);
     }
     state       = null;
     targetSkill = null;
 }
Exemplo n.º 9
0
    public sdBaseState     AddAction(int id, Hashtable actionInfo)
    {
        string      classname = actionInfo["ClassName"] as string;
        sdBaseState state     = (sdBaseState)sdTransitGraph.CreateObject(classname);

        state.id            = id;
        state.belongToSkill = this;
        state.bEnable       = (int)actionInfo["Enable"] != 0;
        actionStateList.Add(state);
        state.actionID = actionStateList.Count - 1;
        return(state);
    }
Exemplo n.º 10
0
    public bool    OnContinueSkill(sdGameActor _gameActor)
    {
        sdBaseState next = GetNextSkillAction();

        if (next != null)
        {
            _gameActor.logicTSM.nextState = next;
            return(true);
        }

        return(false);
    }
Exemplo n.º 11
0
    // 技能动画表aa
    protected void CreateSkill_Action(int job)
    {
        // 被动Action表aa
        Hashtable passive = sdConfDataMgr.Instance().GetTable("passiveaction");

        foreach (DictionaryEntry de1 in passive)
        {
            int         id           = int.Parse(de1.Key as string);
            Hashtable   animation    = de1.Value as Hashtable;
            sdBaseState passiveState = new sdBaseState();
            passiveState.id       = id;
            passiveState.info     = animation[job.ToString()] as string;
            passiveState.name     = animation["strName"] as string;
            passiveState.bPassive = true;

            logicTSM.AddActionState(passiveState);
        }

        // 主动Action表aa
        skillTree = sdSkillTree.createSkillTree(this, job);             //< 技能表aa

        Hashtable lstAction = sdConfDataMgr.Instance().m_vecJobSkillAction[job];

        if (lstAction != null)
        {
            skillIDRange range = sdConfDataMgr.Instance().m_JobSkillRange[job];
            for (int index = range.min; index <= range.max; ++index)
            {
                foreach (DictionaryEntry de in lstAction)
                {
                    int id = (int)de.Key;
                    if (id == index)
                    {
                        Hashtable action  = (Hashtable)de.Value;
                        int       pid     = (int)action["ParentID"];
                        int       skillid = pid / 100;
                        sdSkill   s       = skillTree.getSkill(skillid);
                        if (s == null)
                        {
                            continue;
                        }
                        sdBaseState state = s.AddAction(id, action);
                        logicTSM.AddActionState(state);
                        break;
                    }
                }
            }
        }

        sdTransitGraph.loadAndLinkActionState(this, job);
    }
Exemplo n.º 12
0
 public void begin(sdGameActor _gameActor, sdBaseState action, float interval_, float triggerTime_)
 {
     if (_enabled)
     {
         if (targetSkill != action.belongToSkill)
         {
             end(_gameActor);
         }
     }
     state        = action;
     targetSkill  = state.belongToSkill;
     _interval    = interval_;
     _triggerTime = triggerTime_;
     begin();
 }
Exemplo n.º 13
0
    public void StartTimer(sdGameActor _gameActor)
    {
        sdActionStateTimer timer = _gameActor.actionStateTimer;

        if (stateData != null)
        {
            if (stateData.ContainsKey("SkillTimerInterval") &&
                stateData.ContainsKey("SkillTimerTrigger"))
            {
                int _interval = (int)stateData["SkillTimerInterval"];
                int _trigger  = 0;               //(int)stateData["SkillTimerTrigger"];



                if (_interval == 0)
                {
                    if (timer.targetSkill == belongToSkill)
                    {
                        timer.targetSkill = null;
                        timer.end(_gameActor);
                    }
                    return;
                }
                if (belongToSkill != null)
                {
                    sdBaseState next = GetNextSkillAction();
                    if (next == null)
                    {
                        timer.end(_gameActor);
                        return;
                    }
                }

                float length = 0.0f;
                if (aniState != null)
                {
                    length = aniState.length;
                }


                timer.begin(_gameActor, this, length + _interval * 0.001f, _trigger * 0.001f);
                return;
            }
        }

        timer.end(_gameActor);
    }
Exemplo n.º 14
0
    // 直接切换状态aa
    protected void SwitchToState(sdGameActor _gameActor, sdBaseState destState)
    {
        //if(CheckMP(destState))
        {
            if (statePointer != null)
            {
                statePointer.Leave(_gameActor);
            }

            statePointer = destState;

            if (statePointer != null)
            {
                statePointer.Enter(_gameActor);
            }
        }
    }
Exemplo n.º 15
0
    public sdBaseState GetNextSkillAction()
    {
        if (belongToSkill == null)
        {
            return(null);
        }
        int index = -1;

        for (int i = 0; i < belongToSkill.actionStateList.Count; i++)
        {
            if (belongToSkill.actionStateList[i] == this)
            {
                index = i + 1;
                break;
            }
        }
        if (index == -1)
        {
            return(null);
        }

        for (int i = index; i < belongToSkill.actionStateList.Count; i++)
        {
            sdBaseState nextContinueState = belongToSkill.actionStateList[i];
            //当前这个连招是否有效---
            if (nextContinueState.bEnable)
            {
                return(nextContinueState);
            }
        }
        if (belongToSkill.bUnLimitedAction)
        {
            for (int i = 0; i < belongToSkill.actionStateList.Count; i++)
            {
                sdBaseState nextContinueState = belongToSkill.actionStateList[i];
                //当前这个连招是否有效---
                if (nextContinueState.bEnable)
                {
                    return(nextContinueState);
                }
            }
        }
        return(null);
    }
Exemplo n.º 16
0
    public virtual float getActionInterval(sdGameActor _gameActor, int index)
    {
        float ft = 0.0f;

        if (_gameActor != null && index < actionStateList.Count)
        {
            sdBaseState baseState = actionStateList[index] as sdBaseState;
            //<
            if (baseState != null && _gameActor.AnimController != null)
            {
                AnimationClip clip = _gameActor.AnimController.GetClip(baseState.info);
                if (clip != null)
                {
                    ft = clip.length;
                }
            }
        }

        return(ft);
    }
Exemplo n.º 17
0
    // 初始化aa
    public new bool init(sdGameActorCreateInfo kInfo)
    {
        base.init(kInfo);

        // 设置角色初始朝向aa
        mFaceDirection = transform.rotation * Vector3.forward;

        // 初始化技能树aas
        CreateSkill_Action(kInfo.mJob);

        // 初始化基本属性表aa
        mBaseProperty = sdConfDataMgr.CloneHashTable(sdPVPManager.Instance.PVPBaseProperty);
        Property      = sdConfDataMgr.CloneHashTable(sdPVPManager.Instance.PVPBaseProperty);

        // 每次进图满血满蓝aa
        if (Property.ContainsKey("HP") && Property.ContainsKey("MaxHP"))
        {
            Property["HP"] = Property["MaxHP"];
        }

        if (Property.ContainsKey("SP") && Property.ContainsKey("MaxSP"))
        {
            Property["SP"] = Property["MaxSP"];
        }

        // 初始化角色装备表aa
        SetItemInfo(sdPVPManager.Instance.PVPItemProperty);

        // 初始化角色技能表aa
        SetSkillInfo(sdPVPManager.Instance.PVPSkillProperty);

        // 宠物战队Buffaa
        List <int> kBuffList = sdPVPManager.Instance.GetPetGroupBuff(this);

        if (kBuffList != null)
        {
            foreach (int iBuffId in kBuffList)
            {
                AddBuff(iBuffId, 0, this);
            }
        }

        // 加载角色动画aa
        LoadAnimationFile(kInfo.mJob);

        // 自动战斗系统aa
        {
            PVPAutoFight kPVPAutoFight = new PVPAutoFight();

            sdSkill kSkill = skillTree.getSkill(1001);
            if (kSkill != null)
            {
                sdBaseState kState        = kSkill.actionStateList[0];
                int         iCastDistance = (int)kState.stateData["CastDistance"];
                kPVPAutoFight.BattleDistance = (iCastDistance) * 0.001f;
            }

            mAutoFight = kPVPAutoFight;
            mAutoFight.SetActor(this);
        }

        return(true);
    }
Exemplo n.º 18
0
 public virtual void    OnAttack(sdGameActor _gameActor, sdBaseState state)
 {
 }
Exemplo n.º 19
0
 public virtual void    OnHitBegin(sdGameActor _gameActor, sdActorInterface monster, sdBaseState state, int index, object userdata)
 {
 }
Exemplo n.º 20
0
 public virtual void    OnHitEnd(sdActorInterface _gameActor, sdActorInterface monster, sdBaseState state, int damage, int index, object userdata)
 {
 }
Exemplo n.º 21
0
 public virtual void    OnActionStateLeave(sdGameActor _gameActor, sdBaseState state)
 {
 }
Exemplo n.º 22
0
    public static bool    Do(sdActorInterface actor, OpParameter param)
    {
        Hashtable table = sdConfDataMgr.Instance().GetTable("operation");

        Operation op = (Operation)table[param.id];

        switch (op.byOperationType)
        {
        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_NONE: {
            return(true);
        }

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_FOREVER: {
            if (param.doType == (int)HeaderProto.EDoOperationType.DO_OPERATION_TYPE_START ||
                param.doType == (int)HeaderProto.EDoOperationType.DO_OPERATION_TYPE_ADD
                )
            {
                if (actor == null)
                {
                    return(false);
                }
                Hashtable dst = actor.GetProperty();
                switch (op.dwOperationPara1)
                {
                case (int)HeaderProto.EOpreationFlag.OPREATION_FLAG_ADD: {
                    AddProperty(actor, dst, op, param);
                } break;

                case (int)HeaderProto.EOpreationFlag.OPREATION_FLAG_REDUCE: {
                    param.data = -param.data;
                    AddProperty(actor, dst, op, param);
                } break;

                case (int)HeaderProto.EOpreationFlag.OPREATION_FLAG_SET: {} break;
                }
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_STATE: {
            if (actor == null)
            {
                return(false);
            }
            if (param.doType == (int)HeaderProto.EDoOperationType.DO_OPERATION_TYPE_START)
            {
                HeaderProto.ECreatureActionState state = (HeaderProto.ECreatureActionState)param.data;
                actor.AddDebuffState(state);
            }
            else if (param.doType == (int)HeaderProto.EDoOperationType.DO_OPERATION_TYPE_REMOVE)
            {
                HeaderProto.ECreatureActionState state = (HeaderProto.ECreatureActionState)param.data;
                actor.RemoveDebuffState(state);
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_ADD_BUFF: {
            if (actor == null)
            {
                return(false);
            }
            actor.AddBuff(param.data, param.data1, param.attackActor);
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_DISPEL: {
            if (actor == null)
            {
                return(false);
            }
            if (op.dwOperationPara0 == 0)
            {
                actor.RemoveBuffbyClassType(op.dwOperationPara1);
            }
            else if (op.dwOperationPara0 == 1)
            {
                actor.RemoveBuff(op.dwOperationPara1, op.dwOperationPara2);
            }
            else if (op.dwOperationPara0 == 2)
            {
                actor.RemoveBuffbyID(param.data);
            }
            else if (op.dwOperationPara0 == 3)
            {
                actor.RemoveBuffbyProperty(op.dwOperationPara1);
            }
            else if (op.dwOperationPara0 == 4)
            {
            }
            else if (op.dwOperationPara0 == 5)
            {
                actor.RemoveAllBuff();
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_DO_BUFF_DAMAGE:
        {
            if (param.targetActor == null)
            {
                return(false);
            }
            Hashtable action = sdConfDataMgr.Instance().m_BuffAction[param.data]       as Hashtable;

            int strikeType = (int)action["byAoeAreaType"];
            int nCombo     = 0;
            if (strikeType == 0)
            {
                HeaderProto.ESkillEffect skilleffect = HeaderProto.ESkillEffect.SKILL_EFFECT_DAMAGE_HP;
                if (action.ContainsKey("bySkillEffect"))
                {
                    skilleffect = (HeaderProto.ESkillEffect)(action["bySkillEffect"]);
                }
                action["ParentID"] = 0;
                DamageResult dr = sdGameLevel.instance.battleSystem.testHurt(param.attackActor,
                                                                             action,
                                                                             param.targetActor,
                                                                             0,
                                                                             skilleffect);
                if (Bubble.IsHurtOther(dr.bubbleType))
                {
                    nCombo++;
                }
            }
            else
            {
                nCombo = sdGameLevel.instance.battleSystem.DoSDAttack(
                    param.attackActor,
                    action,
                    param.targetActor.transform.position,
                    0,
                    null);
            }
            if (param.attackActor == sdGameLevel.instance.mainChar && nCombo > 0)
            {
                sdUICharacter.Instance.ShowComboWnd(true, nCombo);
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_CLEAR_SKILL_COOLDOWN:
        {
            sdGameActor gameActor = (sdGameActor)actor;
            if (op.dwOperationPara0 == 0)                    //某个技能aa
            {
                int     skillID = param.data / 100;
                sdSkill skill   = gameActor.skillTree.getSkill(skillID);
                if (skill != null)
                {
                    if (op.dwOperationPara1 == 0)
                    {
                        skill.skillState = (int)sdSkill.State.eSS_OK;
                    }
                    else if (op.dwOperationPara1 == 1)
                    {
                        int time = CalculateSkillCoolDown(op.dwOperationPara2, op.dwOperationPara3, skill.GetCD(), param.data1);
                        sdUICharacter.Instance.SetShortCutCd(param.data, time, true);
                        skill.cooldown = time;
                        skill.Setct(0.0f);
                    }
                }
            }
            else if (op.dwOperationPara0 == 1)                   //某种形态的技能aa
            {
                foreach (DictionaryEntry de in gameActor.skillTree.AllSkill)
                {
                    sdSkill skill = de.Value as sdSkill;
                    if (skill.skillProperty.ContainsKey("byShape"))
                    {
                        int byShape = (int)skill.skillProperty["byShape"];
                        if (byShape == param.data)
                        {
                            if (op.dwOperationPara1 == 0)
                            {
                                skill.skillState = (int)sdSkill.State.eSS_OK;
                            }
                            else if (op.dwOperationPara1 == 1)
                            {
                                int time = CalculateSkillCoolDown(op.dwOperationPara2, op.dwOperationPara3, skill.cooldown, param.data1);
                                sdUICharacter.Instance.SetShortCutCd(skill.id, time, true);
                                skill.cooldown = time;
                                skill.Setct(0.0f);
                            }
                        }
                    }
                }
            }
            else if (op.dwOperationPara0 == 2)                   //所有技能aa
            {
                foreach (DictionaryEntry de in gameActor.skillTree.AllSkill)
                {
                    sdSkill skill = de.Value as sdSkill;
                    if (op.dwOperationPara1 == 0)
                    {
                        skill.skillState = (int)sdSkill.State.eSS_OK;
                    }
                    else if (op.dwOperationPara1 == 1)
                    {
                        int time = CalculateSkillCoolDown(op.dwOperationPara2, op.dwOperationPara3, skill.cooldown, param.data1);
                        sdUICharacter.Instance.SetShortCutCd(skill.id, time, true);
                        skill.cooldown = time;
                        skill.Setct(0.0f);
                    }
                }
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_SUMMON_MONSTER:                  //operator.txt byOperationType
        {
            iSummonUniqueID++;
            if (op.dwOperationPara0 == 1)
            {
                int     iAngle       = op.dwOperationPara2;
                int     iSummonID    = param.data;
                int     iSommonCount = param.data1;
                int     skillID      = param.data2;
                Vector3 v            = param.attackActor.GetDirection();
                v.y = 0.0f;
                v.Normalize();
                Quaternion tempQ = Quaternion.FromToRotation(new Vector3(0, 0, 1), v);
                if (v.z < -0.9999f)
                {
                    tempQ = Quaternion.AngleAxis(180.0f, new Vector3(0, 1, 0));
                }

                List <sdActorInterface> lstActor = null;
                if (op.dwOperationPara3 == 1 || op.dwOperationPara3 == 2)                        //1 方向并跟踪目标  2.方向不跟踪aaa
                {
                    List <sdActorInterface> actorList = null;
                    if (iAngle == 360)
                    {
                        actorList = sdGameLevel.instance.actorMgr.FindActor(
                            param.attackActor,
                            HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY,
                            param.attackActor.transform.position,
                            Vector3.zero,
                            1,
                            0,
                            15.0f,
                            true);
                    }
                    else
                    {
                        actorList = sdGameLevel.instance.actorMgr.FindActor(
                            param.attackActor,
                            HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY,
                            param.attackActor.transform.position,
                            param.attackActor.GetDirection(),
                            5,
                            iAngle,
                            15.0f,
                            true);
                    }
                    lstActor = sdGameLevel.instance.actorMgr.SortActor(param.attackActor.transform.position, actorList);
                }

                int i = 0;
                if (op.dwOperationPara3 == 1)
                {
                    for (; i < iSommonCount && i < lstActor.Count; i++)
                    {
                        sdActorInterface target  = lstActor[i];
                        SummonInfo       sumInfo = new SummonInfo();
                        Vector3          vDir    = target.transform.position - param.attackActor.transform.position;
                        vDir.y = 0.0f;
                        vDir.Normalize();
                        if (v.z < -0.99999f)
                        {
                            sumInfo.rotate = Quaternion.AngleAxis(180.0f, new Vector3(0, 1, 0));
                        }
                        else
                        {
                            sumInfo.rotate = Quaternion.FromToRotation(new Vector3(0, 0, 1), vDir);
                        }
                        sumInfo.pos      = param.trans.position;
                        sumInfo.userdata = target;
                        sumInfo.summonID = iSummonID;
                        sumInfo.skillID  = skillID;
                        param.attackActor.AddSummon(sumInfo, iSummonUniqueID);
                    }
                }
                else if (op.dwOperationPara3 == 2)
                {
                    for (; i < iSommonCount && i < lstActor.Count; i++)
                    {
                        sdActorInterface target = lstActor[i];
                        Vector3          vDir   = target.transform.position - param.attackActor.transform.position;
                        vDir.y = 0.0f;
                        vDir.Normalize();
                        SummonInfo sumInfo = new SummonInfo();
                        if (v.z < -0.99999f)
                        {
                            sumInfo.rotate = Quaternion.AngleAxis(180.0f, new Vector3(0, 1, 0));
                        }
                        else
                        {
                            sumInfo.rotate = Quaternion.FromToRotation(new Vector3(0, 0, 1), vDir);
                        }
                        sumInfo.pos      = param.trans.position;
                        sumInfo.summonID = iSummonID;
                        sumInfo.skillID  = skillID;
                        param.attackActor.AddSummon(sumInfo, iSummonUniqueID);
                    }
                }
                if (i < iSommonCount)
                {
                    if (iAngle == 360)
                    {
                        float iPerAngle = (float)iAngle / (float)(iSommonCount - i);
                        for (int j = 0; j < iSommonCount - i; j++)
                        {
                            SummonInfo sumInfo = new SummonInfo();
                            sumInfo.rotate   = Quaternion.AngleAxis(iPerAngle * j, new Vector3(0, 1, 0)) * tempQ;
                            sumInfo.pos      = param.trans.position;
                            sumInfo.summonID = iSummonID;
                            sumInfo.skillID  = skillID;
                            param.attackActor.AddSummon(sumInfo, iSummonUniqueID);
                        }
                    }
                    else
                    {
                        float iPerAngle   = (float)iAngle / (float)(iSommonCount - i + 1);
                        float iAngleStart = -iAngle * 0.5f + iPerAngle;
                        for (int j = 0; j < iSommonCount - i; j++)
                        {
                            SummonInfo sumInfo = new SummonInfo();
                            sumInfo.rotate   = Quaternion.AngleAxis(iAngleStart + iPerAngle * j, new Vector3(0, 1, 0)) * tempQ;
                            sumInfo.pos      = param.trans.position;
                            sumInfo.summonID = iSummonID;
                            sumInfo.skillID  = skillID;
                            param.attackActor.AddSummon(sumInfo, iSummonUniqueID);
                        }
                    }
                }
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_TELEPORT:
        {
            TeleportInfo tpInfo = new TeleportInfo();
            tpInfo.Type = op.dwOperationPara0;
            tpInfo.PlayActionProbality = op.dwOperationPara1;
            tpInfo.TeleportState       = (op.dwOperationPara2 == 1);
            tpInfo.MoveSpeed           = (float)param.data * 0.001f;
            tpInfo.MoveTime            = (float)param.data1 * 0.001f;
            tpInfo.castActor           = param.attackActor;
            tpInfo.castCenter          = param.attackActor.transform.position;
            if (actor != null)
            {
                actor.SetTeleportInfo(tpInfo);
            }
            else
            {
                float dis = tpInfo.MoveSpeed * tpInfo.MoveTime;
                List <sdActorInterface> lstActor = sdGameLevel.instance.actorMgr.FindActor(param.attackActor, HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY, tpInfo.castCenter, Vector3.zero, 1, 0, dis, true);
                if (lstActor != null)
                {
                    foreach (sdActorInterface a in lstActor)
                    {
                        a.SetTeleportInfo(tpInfo);
                    }
                }
            }
        } break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_DOACTION:
        {
            sdGameActor gameActor = (sdGameActor)(param.attackActor);
            sdBaseState baseState = (sdBaseState)gameActor.logicTSM.states[param.data];
            if (baseState != null)
            {
                int nCombo = sdGameLevel.instance.battleSystem.DoSDAttack(gameActor, baseState.stateData, gameActor.transform.position, 0, baseState);
                baseState.playEffectNow(gameActor);
                baseState.PlayAudioNow(gameActor);
                if (gameActor == sdGameLevel.instance.mainChar && nCombo > 0)
                {
                    sdUICharacter.Instance.ShowComboWnd(true, nCombo);
                }
            }
        }
        break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_COMBO:
        {
            if (param.attackActor.GetActorType() == ActorType.AT_Player)
            {
                sdGameActor gameActor = (sdGameActor)(param.attackActor);
                sdBaseState baseState = (sdBaseState)gameActor.logicTSM.states[param.data];
                if (baseState != null)
                {
                    baseState.bEnable = (param.data1 == 1);
                }
            }
        }
        break;

        case (int)HeaderProto.EOpreationType.OPREATION_TYPE_ATTACKGETHP:
        {
            AttackRestore data = new AttackRestore();
            data.upperLimit  = op.dwOperationPara1 * 0.0001f;
            data.restoreHp   = (op.dwOperationPara0 == 0);
            data.monsterType = op.dwOperationPara2;
            data.ratio       = param.data * 0.0001f;
            data.actionID    = param.data1;
            sdGameActor gameActor = (sdGameActor)(param.attackActor);
            gameActor.AddAttackRestore(data);
        }
        break;

        case (int)HeaderProto.EOpreationType.OPERATION_TYPE_SUMMON:
        {
            iSummonUniqueID++;
            switch (op.dwOperationPara0)
            {
            case 0:
            case 1:
                PointSummon(actor, param, op);
                break;

            case 2:
            case 3:
                RandomSummon(actor, param, op);
                break;

            case 4:
            case 5:
                RoundSummon(actor, param, op);
                break;
            }
        }
        break;

        case (int)HeaderProto.EOpreationType.OPERATION_TYPE_HIDESHOW:
        {
            HideShowInfo info = new HideShowInfo();
            info.actor     = param.attackActor;
            info.fHideTime = param.data * 0.001f;
            info.fDistance = param.data1 * 0.001f;
            sdHideShowMgr.Instance.AddActor(info);
        }
        break;

        case (int)HeaderProto.EOpreationType.OPERATION_TYPE_FLASH:
        {
            float fFront = 1.0f;
            if ((op.dwOperationPara0 & 1) == 1)
            {
                fFront = -1.0f;
            }
            float fDistance = (float)op.dwOperationPara3 * 0.001f;

            sdActorInterface castActor = param.attackActor;

            int playerLayer  = 1 << LayerMask.NameToLayer("Player");
            int petLayer     = 1 << LayerMask.NameToLayer("Pet");
            int monsterLayer = 1 << LayerMask.NameToLayer("Monster");
            int mask         = ~(playerLayer | petLayer | monsterLayer);

            switch (op.dwOperationPara0)
            {
            case 0:
            case 1:
            {
                fDistance = (float)param.data1 * 0.001f;
                Vector3 dir = castActor.GetDirection() * fFront;
                Vector3 pos = castActor.transform.position;



                int   oldLayer = castActor.gameObject.layer;
                int[] layer    = new int[] {
                    LayerMask.NameToLayer("Monster"),
                    LayerMask.NameToLayer("Pet"),
                    LayerMask.NameToLayer("Player")
                };
                bool[] oldcollision = new bool[3];
                for (int i = 0; i < 3; i++)
                {
                    oldcollision[i] = Physics.GetIgnoreLayerCollision(oldLayer, layer[i]);
                    Physics.IgnoreLayerCollision(oldLayer, layer[i]);
                }

                ((sdGameActor)castActor).moveInternal(dir * fDistance / Time.deltaTime);

                for (int i = 0; i < 3; i++)
                {
                    Physics.IgnoreLayerCollision(oldLayer, layer[i], oldcollision[i]);
                }
                castActor.gameObject.layer = oldLayer;

                Vector3 newPos = castActor.transform.position;

                sdGameLevel.instance.actorMgr.ManualCheckTrigger((sdGameActor)castActor, pos, newPos - pos);

                if (param.data > 0)
                {
                    HideShowInfo info = new HideShowInfo();
                    info.actor     = castActor;
                    info.fHideTime = param.data * 0.001f;
                    info.fDistance = 0.0f;
                    sdHideShowMgr.Instance.AddActorNoRandomPosition(info);
                }
            }
            break;

            case 2:
            case 3:
            {
                float fResearchDistance           = param.data1 * 0.001f;
                int   iAngle                      = op.dwOperationPara1;
                List <sdActorInterface> actorList = null;
                if (iAngle == 360)
                {
                    actorList = sdGameLevel.instance.actorMgr.FindActor(
                        param.attackActor,
                        HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY,
                        param.attackActor.transform.position,
                        Vector3.zero,
                        1,
                        0,
                        fResearchDistance,
                        true);
                }
                else
                {
                    actorList = sdGameLevel.instance.actorMgr.FindActor(
                        param.attackActor,
                        HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY,
                        param.attackActor.transform.position,
                        param.attackActor.GetDirection(),
                        5,
                        iAngle,
                        fResearchDistance,
                        true);
                }

                sdActorInterface targetActor = null;
                if (actorList != null)
                {
                    if (actorList.Count > 0)
                    {
                        if (op.dwOperationPara2 == 0)
                        {
                            targetActor = actorList[0];
                            float min = (castActor.transform.position - targetActor.transform.position).sqrMagnitude;
                            for (int i = 1; i < actorList.Count; i++)
                            {
                                Vector3 v = castActor.transform.position - actorList[i].transform.position;
                                if (v.sqrMagnitude < min)
                                {
                                    min         = v.sqrMagnitude;
                                    targetActor = actorList[i];
                                }
                            }
                        }
                        else
                        {
                            int index = Random.Range(0, actorList.Count);
                            if (index >= actorList.Count)
                            {
                                index = 0;
                            }
                            targetActor = actorList[index];
                        }
                    }
                }

                if (targetActor != null)
                {
                    if (fDistance < targetActor.getRadius() + castActor.getRadius())
                    {
                        fDistance = targetActor.getRadius() + castActor.getRadius();
                    }
                    Vector3    dir = targetActor.GetDirection() * fFront;
                    Vector3    pos = targetActor.transform.position + new Vector3(0, 0.1f, 0);
                    RaycastHit hit;
                    if (Physics.Raycast(pos, dir, out hit, fDistance * 2, mask))
                    {
                        if (hit.distance < fDistance)
                        {
                            fDistance = hit.distance;
                        }
                    }

                    castActor.transform.position = targetActor.transform.position + dir * fDistance;

                    dir.y = 0.0f;
                    dir.Normalize();

                    ((sdGameActor)castActor).spinToTargetDirection(-dir, true);
                    if (param.data > 0)
                    {
                        HideShowInfo info = new HideShowInfo();
                        info.actor     = castActor;
                        info.fHideTime = param.data * 0.001f;
                        info.fDistance = 0.0f;
                        sdHideShowMgr.Instance.AddActorNoRandomPosition(info);
                    }
                }
            } break;
            }
        }
        break;
        }
        return(true);
    }
Exemplo n.º 23
0
    // 鍔犺浇鎶€鑳藉姩鐢昏〃aa
    //	1.琚?姩Action琛╝a
    //	2.鎶€鑳戒俊鎭?〃aa
    //	3.鎶€鑳紸ction琛╝a
    protected void CreateSkill_Action(ulong ulTemplateID)
    {
        {
            sdBaseState kPassiveDeathState = new sdBaseState();
            kPassiveDeathState.id       = 100;
            kPassiveDeathState.info     = "death01";
            kPassiveDeathState.name     = "death01";
            kPassiveDeathState.bPassive = true;

            sdBaseState kPassiveIdleState = new sdBaseState();
            kPassiveIdleState.id       = 101;
            kPassiveIdleState.info     = "idle01";
            kPassiveIdleState.name     = "idle01";
            kPassiveIdleState.bPassive = true;

            sdBaseState kPassiveKnockState = new sdBaseState();
            kPassiveKnockState.id       = 102;
            kPassiveKnockState.info     = "death01";
            kPassiveKnockState.name     = "death01";
            kPassiveKnockState.bPassive = true;

            sdBaseState kPassiveWalkState = new sdBaseState();
            kPassiveWalkState.id       = 103;
            kPassiveWalkState.info     = "walk01";
            kPassiveWalkState.name     = "walk01";
            kPassiveWalkState.bPassive = true;

            sdBaseState kPassiveStunState = new sdBaseState();
            kPassiveStunState.id       = 104;
            kPassiveStunState.info     = "stun01";
            kPassiveStunState.name     = "stun01";
            kPassiveStunState.bPassive = true;

            logicTSM.AddActionState(kPassiveDeathState);
            logicTSM.AddActionState(kPassiveIdleState);
            logicTSM.AddActionState(kPassiveKnockState);
            logicTSM.AddActionState(kPassiveWalkState);
            logicTSM.AddActionState(kPassiveStunState);
        }


        skillTree = new sdSkillTree();

        // 鏅?€氭敾鍑绘妧鑳絘a
        {
            int iDfSkillId = (int)Property["DfSkill"];

            Hashtable kSkillInfo   = sdConfDataMgr.Instance().m_MonsterSkillInfo[iDfSkillId] as Hashtable;
            Hashtable kSkillAction = sdConfDataMgr.Instance().m_MonsterSkillAction[iDfSkillId] as Hashtable;
            if (kSkillInfo != null)
            {
                int    iTemplateId = (int)kSkillInfo["dwTemplateID"];
                int    iPassive    = (int)kSkillInfo["byIsPassive"];
                string name        = kSkillInfo["strName"] as string;

                sdSkill kSkill = new sdSkill(name, iPassive == 1, iTemplateId);
                skillTree.Add(kSkill);
                kSkill.skillProperty = kSkillInfo;
                if (kSkillAction != null)
                {
                    sdBaseState kState = kSkill.AddAction(iDfSkillId, kSkillAction);
                    logicTSM.AddActionState(kState);
                    kState.SetInfo(kSkillAction, this);
                }
            }
        }

        // 瀹犵墿澶ф嫑aa
        if (GetActorType() == ActorType.AT_Pet)
        {
            int iSpSkillId = (int)Property["SpSkill"];

            Hashtable kSkillInfo   = sdConfDataMgr.Instance().m_MonsterSkillInfo[iSpSkillId] as Hashtable;
            Hashtable kSkillAction = sdConfDataMgr.Instance().m_MonsterSkillAction[iSpSkillId] as Hashtable;
            if (kSkillInfo != null)
            {
                int    iTemplateId = (int)kSkillInfo["dwTemplateID"];
                int    iPassive    = (int)kSkillInfo["byIsPassive"];
                string name        = kSkillInfo["strName"] as string;

                sdSkill kSkill = new sdSkill(name, iPassive == 1, iSpSkillId);
                skillTree.Add(kSkill);
                kSkill.skillProperty = kSkillInfo;
                if (kSkillAction != null)
                {
                    sdBaseState kState = kSkill.AddAction(iSpSkillId, kSkillAction);
                    logicTSM.AddActionState(kState);
                    kState.SetInfo(kSkillAction, this);
                }
            }
        }

        // 瀹犵墿鍜屾€?墿瑙﹀彂鎶€鑳絘a
        {
            int iSkillNum = 10;
            if (GetActorType() == ActorType.AT_Pet)
            {
                iSkillNum = 4;
            }

            for (int iIndex = 1; iIndex <= iSkillNum; ++iIndex)
            {
                string kSkillKey = "Skill" + iIndex.ToString();
                int    iSkillId  = (int)Property[kSkillKey];
                if (iSkillId > 0)
                {
                    Hashtable kSkillInfo   = sdConfDataMgr.Instance().m_MonsterSkillInfo[iSkillId] as Hashtable;
                    Hashtable kSkillAction = sdConfDataMgr.Instance().m_MonsterSkillAction[iSkillId] as Hashtable;
                    if (kSkillInfo != null)
                    {
                        int    iTemplateId = (int)kSkillInfo["dwTemplateID"];
                        int    iPassive    = (int)kSkillInfo["byIsPassive"];
                        string name        = kSkillInfo["strName"] as string;

                        sdSkill kSkill = new sdSkill(name, iPassive == 1, iSkillId);
                        skillTree.Add(kSkill);
                        kSkill.skillProperty = kSkillInfo;
                        if (kSkillAction != null)
                        {
                            sdBaseState kState = kSkill.AddAction(iSkillId, kSkillAction);
                            logicTSM.AddActionState(kState);
                            kState.SetInfo(kSkillAction, this);
                        }
                    }
                }
            }
        }
    }
Exemplo n.º 24
0
    // 更新触发状态(继承自sdBehaviourState)aa
    public override void UpdateState()
    {
        if (mIsInState != true)
        {
            return;
        }

        if (mCurrentCount == 0)
        {
            return;
        }

        mCurrentDelayTime -= Time.deltaTime;
        if (mCurrentDelayTime <= 0.0f)
        {
            // 当前技能不存在则随机一个技能aa
            if (mCurrentSkillID == -1)
            {
                mCurrentSkillID = RandomSkill();
            }

            // 检查技能范围,尝试释放技能aa
            bool bCastSkill = false;
            if (mCurrentSkillID > 0)
            {
                MonsterAutoFight kMonsterAutoFight = mBehaviourAdvancedState.MonsterAutoFightComponent;
                sdGameMonster    kMonster          = kMonsterAutoFight.Monster;

                if (mDetectDistance)
                {
                    sdSkill kSkill = kMonster.skillTree.getSkill(mCurrentSkillID);
                    if (kSkill != null)
                    {
                        sdBaseState kState    = kSkill.actionStateList[0];
                        float       fDistance = (int)kState.stateData["CastDistance"] * 0.001f;
                        HeaderProto.ESkillObjType eTergetType = (HeaderProto.ESkillObjType)kState.stateData["byTargetType"];

                        float fCurrentDistance = 0.0f;
                        sdBehaviourStateBlock kBehaviourStateBlock = mBehaviourAdvancedState.BehaviourStateBlock;
                        if (eTergetType == HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY)
                        {
                            fCurrentDistance = kBehaviourStateBlock.UpdateDistanceOfNearestEnemy(mBehaviourAdvancedState);
                        }
                        else
                        {
                            fCurrentDistance = kBehaviourStateBlock.UpdateDistanceOfNearestFriend(mBehaviourAdvancedState);
                        }

                        if (fCurrentDistance < fDistance)
                        {
                            kMonster.CastSkill(mCurrentSkillID);
                            bCastSkill = true;
                        }
                    }
                }
                else
                {
                    kMonster.CastSkill(mCurrentSkillID);
                    bCastSkill = true;
                }
            }

            // 释放技能成功则延迟一个mIntervalTime,否则仅仅延迟2s检查一次直到释放成功aa
            if (bCastSkill)
            {
                mCurrentSkillID   = -1;
                mCurrentDelayTime = mIntervalTime;

                --mCurrentCount;
            }
            else
            {
                mCurrentDelayTime = 2.0f;
            }
        }
    }
Exemplo n.º 25
0
    // 初始化aa
    public new bool init(sdGameActorCreateInfo kInfo)
    {
        base.init(kInfo);

        // 设置角色初始朝向aa
        mFaceDirection = transform.rotation * Vector3.forward;

        // 初始化技能树aa
        CreateSkill_Action(kInfo.mJob);

        // 初始化角色属性aa
        if (sdGlobalDatabase.Instance.globalData != null)
        {
            // 属性表
            if (Property == null)
            {
                Property = sdConfDataMgr.CloneHashTable(sdGlobalDatabase.Instance.globalData["MainCharBaseProp"] as Hashtable);
            }

            // 每次进图就满血满蓝aa
            if (Property.ContainsKey("HP") && Property.ContainsKey("MaxHP"))
            {
                Property["HP"] = Property["MaxHP"];
            }

            if (Property.ContainsKey("SP") && Property.ContainsKey("MaxSP"))
            {
                Property["SP"] = Property["MaxSP"];
            }
            //
            AddSuitBuff();

            // 设置到UIaa
            RefreshProp();

            //
            if (sdConfDataMgr.Instance().skilliconAtlas == null)
            {
                int job = int.Parse(Property["BaseJob"].ToString());
                sdConfDataMgr.Instance().LoadSkillIcon(job);
            }

            // 换装aa
            if (sdGlobalDatabase.Instance.globalData.Contains("MainCharItemInfo"))
            {
                SetItemInfo(sdGlobalDatabase.Instance.globalData["MainCharItemInfo"] as Hashtable);
            }

            // 技能aa
            if (sdGlobalDatabase.Instance.globalData.Contains("MainCharSkillInfo"))
            {
                SetSkillInfo(sdGlobalDatabase.Instance.globalData["MainCharSkillInfo"] as Hashtable);
            }

            // 初始Buffaa
            if (sdGlobalDatabase.Instance.globalData.Contains("InitBuff"))
            {
                int[] buffArray = (int[])sdGlobalDatabase.Instance.globalData["InitBuff"];
                if (buffArray != null)
                {
                    foreach (int id in buffArray)
                    {
                        AddBuff(id, 0, this);
                    }
                }
                sdGlobalDatabase.Instance.globalData["InitBuff"] = null;
            }

            // 宠物战队Buffaa
            List <int> kBuffList = sdNewPetMgr.Instance.GetPetGroupBuff(this);
            if (kBuffList != null)
            {
                foreach (int iBuffId in kBuffList)
                {
                    AddBuff(iBuffId, 0, this);
                }
            }
        }

        // 加载角色动画aa
        LoadAnimationFile(kInfo.mJob);

        // 初始化个体AI参数(自动战斗系统)aa
        FingerControl kFingerControl = sdGameLevel.instance.GetFingerControl();

        if (kFingerControl != null)
        {
            mAutoFight = kFingerControl;
            mAutoFight.NotifyChangeTarget += NotifyBattleSystemChangeTarget;

            sdSkill kSkill = skillTree.getSkill(1001);
            if (kSkill != null)
            {
                sdBaseState kState        = kSkill.actionStateList[0];
                int         iCastDistance = (int)kState.stateData["CastDistance"];
                mAutoFight.BattleDistance = (iCastDistance) * 0.001f;
            }
        }
        sdGuideMgr.Instance.Init(Property["Name"].ToString().Trim('\0'));

        // 初始化群体AI参数aa
        sdBehaviourNode kBehaviourNode = sdBehaviourManager.GetSingleton().GetBehaviourNode(1);

        if (kBehaviourNode != null)
        {
            kBehaviourNode.AddActor(this);
        }

        return(true);
    }
Exemplo n.º 26
0
    // 更新aa
    public void UpdateSelf()
    {
        if (statePointer != null)
        {
            statePointer.Update(_gameActor);
            if (_gameActor.GetCurrentHP() <= 0)
            {
                nextState = null;
                if (statePointer != die)
                {
                    SwitchSkill(_gameActor, null);
                    SwitchToState(_gameActor, die);
                }
                return;
            }
            else if (_gameActor.CheckDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_STUN) ||
                     _gameActor.CheckDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_HOLD))
            {
                nextState = null;
                sdBaseState switchState = stun;
                if (stun == null)
                {
                    switchState = idle;
                }
                if (statePointer != switchState)
                {
                    SwitchSkill(_gameActor, null);
                    SwitchToState(_gameActor, switchState);
                }
                return;
            }
            else if (_gameActor.CheckDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_IDLE))
            {
                nextState = null;
                sdBaseState switchState = idle;
                if (idle == null)
                {
                    switchState = idle;
                }
                if (statePointer != switchState)
                {
                    SwitchSkill(_gameActor, null);
                    SwitchToState(_gameActor, switchState);
                }
                return;
            }

            if (!statePointer.bPassive)
            {
                if (IsAnimLoop())
                {
                    //判断是否死亡..
                    if (GetCurrentPassiveState() == die)
                    {
                        nextState = null;
                        SwitchToState(_gameActor, die);
                        return;
                    }
                    sdBaseState next = nextState;
                    nextState = null;
                    if (next != null && next != statePointer)
                    {
                        SwitchSkill(_gameActor, next.belongToSkill);
                        SwitchToState(_gameActor, next);
                    }
                }
                else if (IsAnimPlayOver())
                {
                    sdBaseState next = nextState;
                    if (next == null)
                    {
                        next = GetCurrentPassiveState();
                    }
                    nextState = null;

                    SwitchSkill(_gameActor, next.belongToSkill);
                    SwitchToState(_gameActor, next);
                }
                else
                {
                    if (nextState != null)
                    {
                        if (nextState.belongToSkill.id == 1002 && statePointer.bAllHitPointDone)
                        {
                            sdBaseState next = nextState;
                            nextState = null;
                            SwitchSkill(_gameActor, next.belongToSkill);
                            SwitchToState(_gameActor, next);
                        }
                    }
                }
            }
            else
            {
                sdBaseState next = nextState;
                if (next == null)
                {
                    next = GetCurrentPassiveState();
                }
                nextState = null;
                if (statePointer != next)
                {
                    SwitchSkill(_gameActor, next.belongToSkill);
                    SwitchToState(_gameActor, next);
                }
            }
        }
        else
        {
            if (_gameActor.AnimController == null)
            {
                return;
            }
            sdBaseState next = nextState;
            if (next == null)
            {
                next = GetCurrentPassiveState();
            }
            if (!next.IsAnimValid(_gameActor))
            {
                return;
            }
            nextState = null;

            SwitchToState(_gameActor, next);
        }
    }
Exemplo n.º 27
0
    //
    protected override void Start()
    {
        base.Start();

        // 鑾峰彇妯″瀷鍙婃帶鍒跺櫒淇℃伅aa
        GameObject rootRenderNode = transform.FindChild("@RenderNode").gameObject;

        gatherRenderNodesInfo(rootRenderNode);
        gatherMeshes(rootRenderNode);
        GatherMeshShaders();
        renderNode = rootRenderNode;
        renderNode.SetActive(false);

        for (int k = 0; k < renderNode.transform.childCount; ++k)
        {
            Transform kChildNode = renderNode.transform.GetChild(k);
            if (kChildNode.name.Equals("Bip01"))
            {
                boneRoot = kChildNode.gameObject;
                break;
            }
        }

        mAnimController = renderNode.GetComponent <Animation>();
//		mAnimController.enabled = false;

        mMotionController         = this.gameObject.GetComponent <CharacterController>();
        mMotionController.enabled = false;

        mNavAgent         = this.gameObject.GetComponent <NavMeshAgent>();
        mNavAgent.enabled = false;

        mSelfAudioSource = this.gameObject.GetComponent <AudioSource>();
//		mSelfAudioSource.enabled = false;

        // 鍦烘櫙淇℃伅aa
        mMainCamera = sdGameLevel.instance.mainCamera.GetComponent <Camera>();
        mTuituLogic = sdGameLevel.instance.tuiTuLogic;

        // 鍔犺浇鎬?墿灞炴€ц〃(鍩虹?灞炴€﹁aa
        if (ActorType.AT_Pet == GetActorType())
        {
            Hashtable kTable = sdNewPetMgr.Instance.GetPetPropertyFromDBID(mDBID);
            Property = sdConfDataMgr.CloneHashTable(kTable);
        }
        else
        {
            Hashtable kMonsterProperty = sdConfDataMgr.Instance().GetTable("MonsterProperty");
            if (Application.platform == RuntimePlatform.WindowsEditor)
            {
                if (!kMonsterProperty.ContainsKey(templateId))
                {
                    Debug.LogError("monster templateID error=" + templateId);
                }
            }
            Hashtable kTable = kMonsterProperty[templateId] as Hashtable;
            Property = sdConfDataMgr.CloneHashTable(kTable);

            //娣辨笂BOSS闇€瑕佺壒娈婂?鐞嗚?閲庬.
            if (isLapBoss && !sdGameLevel.instance.testMode)
            {
                if (sdActGameMgr.Instance.m_uuLapBossLastBlood > 0)
                {
                    Property["HP"] = (int)sdActGameMgr.Instance.m_uuLapBossLastBlood;
                }
                else
                {
                    Property["HP"] = (int)sdActGameMgr.Instance.m_uuWorldBossLastBlood;
                }
            }
            else
            {
                Property["HP"] = Property["MaxHP"];     //< 淇??琛€閲庣鍙?湁鎬?墿闇€瑕佷慨姝㈣aa
            }
        }

        Property["MaxSP"] = 100;                        //< 淇??鏈€楂樻硶鍔涘€糰a
        Property["SP"]    = Property["MaxSP"];          //< 淇??娉曞姏鍊糰a

        // 鍒濆?鍖栬?鑹叉秷澶辨椂闂碼a
        mDisappeared  = false;
        mDisapearTime = (int)Property["DisappearTime"] / 1000.0f;

        //
        m_summonInfo  = sdConfDataMgr.CloneHashTable(sdConfDataMgr.Instance().m_BaseSummon);
        m_SkillEffect = sdConfDataMgr.CloneHashTable(sdConfDataMgr.Instance().m_BaseSkillEffect);

        // 鍒濆?鍖栬?鏉?a
        LoadHPUI();

        // 鍒濆?鍖栭€変腑鐩?爣鐗规晥aa
        //if (GetActorType() == ActorType.AT_Pet)
        //	LoadTargetEffect();

        // 鍒涘缓鎶€鑳絘a
        CreateSkill_Action((ulong)templateId);

        // 鍒濆?鍖栦釜浣揂I鍙傛暟aa
        if (ActorType.AT_Pet == GetActorType())
        {
            if (mAnimController != null)
            {
                mAnimController.cullingType = AnimationCullingType.AlwaysAnimate;
            }

            PetAutoFight kPetAutoFight = new PetAutoFight();
            kPetAutoFight.FollowDistance       = ((int)Property["FollowDistance"]) / 1000.0f;
            kPetAutoFight.BattleFollowDistance = ((int)Property["BattleFollowDistance"]) / 1000.0f;
            kPetAutoFight.EyeDistance          = ((int)Property["EyeSize"]) / 1000.0f;
            kPetAutoFight.Enable = useAI;

            kPetAutoFight.AutoRetreat              = (int)(Property["Retreat"]) != 0;
            kPetAutoFight.RetreatDetectInterval    = ((int)Property["RetreatDetectInterval"]) / 1000.0f;
            kPetAutoFight.RetreatDetectMinDistance = ((int)Property["RetreatDetectMinDistance"]) / 1000.0f;
            kPetAutoFight.RetreatElapseTime        = ((int)Property["RetreatElapseTime"]) / 1000.0f;

            kPetAutoFight.NotifyChangeTarget += NotifyBattleSystemChangeTarget;

            sdSkill kSkill = skillTree.getSkill(1001);
            if (kSkill != null)
            {
                sdBaseState kState        = kSkill.actionStateList[0];
                int         iCastDistance = (int)kState.stateData["CastDistance"];
                kPetAutoFight.BattleDistance = (iCastDistance) * 0.001f;
            }

            mAutoFight = kPetAutoFight;
            mAutoFight.SetActor(this);
        }
        else
        {
            MonsterAutoFight kMonsterAutoFight = new MonsterAutoFight();
            kMonsterAutoFight.EyeDistance   = ((int)Property["EyeSize"]) / 1000.0f;
            kMonsterAutoFight.ChaseDistance = ((int)Property["ChaseSize"]) / 1000.0f;
            kMonsterAutoFight.Enable        = useAI;

            kMonsterAutoFight.NotifyChangeTarget += NotifyBattleSystemChangeTarget;

            sdSkill kSkill = skillTree.getSkill(1001);
            if (kSkill != null)
            {
                sdBaseState kState        = kSkill.actionStateList[0];
                int         iCastDistance = (int)kState.stateData["CastDistance"];
                kMonsterAutoFight.BattleDistance = (iCastDistance) * 0.001f;
            }

            mAutoFight = kMonsterAutoFight;
            mAutoFight.SetActor(this);
        }

        // 鍒濆?鍖栫兢浣揂I鍙傛暟aa
        if (ActorType.AT_Pet == GetActorType())
        {
            sdBehaviourNode kBehaviourNode = sdBehaviourManager.GetSingleton().GetBehaviourNode(1);
            if (kBehaviourNode != null)
            {
                kBehaviourNode.AddActor(this);
            }
        }

        //
        LoadShadow();
    }