Ejemplo n.º 1
0
    // 离开触发状态(继承自sdBehaviourState)aa
    public override void DoLeaveState()
    {
        if (mIsInState != false)
        {
            mIsInState = false;

            if (mExecuteStatus)
            {
                MonsterAutoFight kMonsterAutoFight = mBehaviourAdvancedState.MonsterAutoFightComponent;
                if (kMonsterAutoFight != null)
                {
                    sdGameMonster kMonster = kMonsterAutoFight.Actor as sdGameMonster;
                    if (kMonster != null)
                    {
                        Renderer[] akRenderer = kMonster.RenderNode.GetComponentsInChildren <Renderer>();
                        if (akRenderer != null)
                        {
                            for (int i = 0; i < akRenderer.GetLength(0); ++i)
                            {
                                Renderer kRenderer = akRenderer[i];
                                if (kRenderer.gameObject.name.Equals(mMeshName))
                                {
                                    kRenderer.enabled = mMeshStatus;
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
Ejemplo n.º 2
0
    // 查找场景中的怪物,生成唯一ID和模板ID的表格aa
    static bool CreateMonsterXmlByLevelID(string levelID)
    {
        XmlDocument xmldoc = new XmlDocument();
        XmlElement  root   = xmldoc.CreateElement("Monsters");

        int id = (int.Parse(levelID) % 10) - 1;
        List <sdGameMonster> kMonsterList = FindMonster(1 << id);

        if (kMonsterList != null)
        {
            for (int i = 0; i < kMonsterList.Count; i++)
            {
                sdGameMonster kMonster = kMonsterList[i];
                if (kMonster != null)
                {
                    XmlElement monElement = xmldoc.CreateElement("Monster");
                    monElement.SetAttribute("ID", kMonster.uniqueId.ToString());
                    monElement.SetAttribute("TemplateID", kMonster.templateId.ToString());
                    root.AppendChild(monElement);
                }
            }

            xmldoc.AppendChild(root);
            xmldoc.Save(Application.dataPath + "/MonsterConf/" + levelID + ".xml");

            return(true);
        }

        return(false);
    }
Ejemplo n.º 3
0
    // 离开触发状态(继承自sdBehaviourState)aa
    public override void DoLeaveState()
    {
        if (mIsInState != false)
        {
            mIsInState = false;

            if (mExecuteStatus)
            {
                MonsterAutoFight kMonsterAutoFight = mBehaviourAdvancedState.MonsterAutoFightComponent;
                if (kMonsterAutoFight != null)
                {
                    sdGameMonster kMonster = kMonsterAutoFight.Actor as sdGameMonster;
                    if (kMonster != null)
                    {
                        if (kMonster.skillTree != null)
                        {
                            sdSkill kSkill = kMonster.skillTree.getSkill(mSkillID);
                            if (kSkill != null)
                            {
                                kSkill.skillEnabled = mSkillStatus;
                            }
                        }
                    }
                }
            }
        }
    }
Ejemplo n.º 4
0
    // 设置所属角色(继承自AutoFight)aa
    public override void SetActor(sdGameActor _gameActor)
    {
        base.SetActor(_gameActor);

        mMonster = (sdGameMonster)_gameActor;
        mBehaviourAdvancedState.SetMonsterAutoFight(this);              //< 初始化触发战斗系统aa
    }
Ejemplo n.º 5
0
    // 更新触发状态(继承自sdBehaviourState)aa
    public override void UpdateState()
    {
        if (mIsInState == true)
        {
            mCurrentDelayTime -= Time.deltaTime;
            if (mCurrentDelayTime <= 0.0f)
            {
                MonsterAutoFight kMonsterAutoFight = mBehaviourAdvancedState.MonsterAutoFightComponent;
                PetAutoFight     kPetAutoFight     = kMonsterAutoFight as PetAutoFight;
                if (kPetAutoFight != null)
                {
                    sdGameMonster kMonster = kMonsterAutoFight.Actor as sdGameMonster;
                    if (kMonster != null)
                    {
                        int iSkillID = mSkillID;
                        if (iSkillID == -1 || iSkillID == 0)
                        {
                            iSkillID = (int)kMonster.Property["SpSkill"];                               //< 尝试获取手动技能aa
                        }
                        int iErroeCode = 0;
                        kPetAutoFight.DoXPSkill(iSkillID, ref iErroeCode);
                    }
                }

                mCurrentDelayTime = 0.0f;
            }
        }
    }
Ejemplo n.º 6
0
    // 更新触发状态(继承自sdBehaviourState)aa
    public override void UpdateState()
    {
        if (mIsInState == true)
        {
            mCurrentDelayTime -= Time.deltaTime;
            if (mCurrentDelayTime <= 0.0f)
            {
                if (mExecuteStatus)
                {
                    return;
                }

                mExecuteStatus = true;

                MonsterAutoFight kMonsterAutoFight = mBehaviourAdvancedState.MonsterAutoFightComponent;
                if (kMonsterAutoFight != null)
                {
                    sdGameMonster kMonster = kMonsterAutoFight.Actor as sdGameMonster;
                    if (kMonster != null)
                    {
                        if (kMonster.skillTree != null)
                        {
                            sdSkill kSkill = kMonster.skillTree.getSkill(mSkillID);
                            if (kSkill != null)
                            {
                                mSkillStatus        = kSkill.skillEnabled;
                                kSkill.skillEnabled = false;
                            }
                        }
                    }
                }
            }
        }
    }
Ejemplo n.º 7
0
    // 更新触发状态(继承自sdBehaviourState)aa
    public override void UpdateState()
    {
        if (mIsInState == true)
        {
            mCurrentDelayTime -= Time.deltaTime;
            if (mCurrentDelayTime <= 0.0f)
            {
                if (mExecuteStatus)
                {
                    return;
                }

                mExecuteStatus = true;

                MonsterAutoFight kMonsterAutoFight = mBehaviourAdvancedState.MonsterAutoFightComponent;
                if (kMonsterAutoFight != null)
                {
                    sdGameMonster kMonster = kMonsterAutoFight.Actor as sdGameMonster;
                    if (kMonster != null)
                    {
                        AnimationState kAnimationState = kMonster.AnimController[mAnimationName];
                        if (kAnimationState != null)
                        {
                            kMonster.logicTSM.ForceStop();                              //< 强制停止当前技能aa

                            kAnimationState.layer    = 11;
                            kAnimationState.wrapMode = WrapMode.Once;
                            kMonster.AnimController.Play(mAnimationName);
                        }
                    }
                }
            }
        }
    }
Ejemplo n.º 8
0
    // 更新触发状态(继承自sdBehaviourState)aa
    public override void UpdateState()
    {
        if (mIsInState == true)
        {
            mCurrentDelayTime -= Time.deltaTime;
            if (mCurrentDelayTime <= 0.0f)
            {
                if (mExecuteStatus)
                {
                    return;
                }

                mExecuteStatus = true;

                MonsterAutoFight kMonsterAutoFight = mBehaviourAdvancedState.MonsterAutoFightComponent;
                if (kMonsterAutoFight != null)
                {
                    sdGameMonster kMonster = kMonsterAutoFight.Actor as sdGameMonster;
                    if (kMonster != null)
                    {
                        kMonster.RemoveBuff(mBuffID);
                    }
                }
            }
        }
    }
Ejemplo n.º 9
0
    // 更新触发状态(继承自sdBehaviourState)aa
    public override void UpdateState()
    {
        if (mIsInState == true)
        {
            mCurrentDelayTime -= Time.deltaTime;
            if (mCurrentDelayTime <= 0.0f)
            {
                if (mExecuteStatus)
                {
                    return;
                }

                mExecuteStatus = true;

                MonsterAutoFight kMonsterAutoFight = mBehaviourAdvancedState.MonsterAutoFightComponent;
                if (kMonsterAutoFight != null)
                {
                    sdGameMonster kMonster = kMonsterAutoFight.Actor as sdGameMonster;
                    if (kMonster != null)
                    {
                        mOldLayerIndex            = kMonster.gameObject.layer;
                        kMonster.gameObject.layer = LayerMask.NameToLayer(mLayerName);
                    }
                }
            }
        }
    }
Ejemplo n.º 10
0
    // 反激活好友宠物aa
    public void DeactiveFriendPet()
    {
        if (mFriendPet == null)
        {
            return;
        }

        //
        mFriendPet.NotifyKilled -= OnFriendPetKilled;

        //
        if (mFriendPet.Master != null)
        {
            mFriendPet.Master = null;
        }

        //
        mFriendPet.SetCurrentHP(-1);
        mFriendPet.AddHP(0);

        // 更新界面aa
        GameObject kFightUI = GameObject.Find("FightUi");

        if (kFightUI != null)
        {
            kFightUI.GetComponent <sdFightUi>().RefreshPet();
        }

        //
        mFriendPet = null;
    }
Ejemplo n.º 11
0
 // 初始化胜利动画aa
 public void InitVictory(sdGameMonster obj)
 {
     oldrot         = GetComponent <Camera>().transform.localRotation;
     Time.timeScale = 0.2f;
     boss           = obj;
     VectoryTime    = 0.0f;
     bVectory       = true;
 }
Ejemplo n.º 12
0
 // 区域中的怪物被攻击事件回调aa
 protected void NotifyMonsterHurt(sdActorInterface kActor, sdActorInterface kAttacker, int iHurt)
 {
     foreach (GameObject kChild in mMonsterList)
     {
         sdGameMonster kMonster = kChild.GetComponent <sdGameMonster>();
         if (kMonster != null && kMonster != kActor)
         {
             kMonster.OnAreaGroupAlert(kAttacker);
         }
     }
 }
Ejemplo n.º 13
0
    public override void OnTriggerHitted(GameObject obj, int[] param)
    {
        base.OnTriggerHitted(obj, param);

        // 杀死所有怪物aa
        sdMainChar kMainChar             = sdGameLevel.instance.mainChar;
        List <sdActorInterface> lstActor =
            sdGameLevel.instance.actorMgr.FindActor(
                kMainChar,
                HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY,
                kMainChar.transform.position,
                Vector3.zero,
                1,
                0,
                10000.0f,
                true);

        if (lstActor != null)
        {
            foreach (sdActorInterface a in lstActor)
            {
                if (a.actorType == ActorType.AT_Monster)
                {
                    int hp = a["HP"];
                    a.AddHP(-hp);
                }
            }
        }

        // 禁用所有的按键和手势响应aa
        sdGameLevel.instance.DestroyFingerObject();
        sdGameLevel.instance.mainChar.AddDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_STAY);
        sdGameLevel.instance.mainChar.AddDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_LIMIT_SKILL);
        GPUSH_API.Vibrate(500);

        // 初始化胜利动画aa
        sdGameMonster kMonster = obj.GetComponent <sdGameMonster>();

        sdGameLevel.instance.mainCamera.InitVictory(kMonster);

        // 请求结算aa
        if (sdUICharacter.Instance.GetBattleType() == (byte)HeaderProto.LEVEL_BATTLE_TYPE.LEVEL_BATTLE_TYPE_WORLD_BOSS)
        {
            sdActGameMsg.Send_CS_WB_RESULT_REQ(0);
            sdActGameMsg.OnWorldBossBeKilled();
        }
        else
        {
            Debug.Log("TuituEnd and Request Jiesuan!");
            sdGameLevel.instance.tuiTuLogic.ShowFightResult(obj);
        }
    }
Ejemplo n.º 14
0
    // 宠物加载回调aa
    protected void OnLoadPet(ResLoadParams kParam, UnityEngine.Object kObj)
    {
        if (kObj == null)
        {
            return;
        }

        if (m_pvpRival == null)
        {
            return;
        }

        Hashtable kPetProperty = mActivePet;

        if (kPetProperty == null)
        {
            return;
        }

        Vector3 kPlayerPos      = m_pvpRival.transform.position;
        Vector3 kBornPosition   = kPlayerPos;
        float   fFollowDistance = ((int)(kPetProperty["FollowDistance"])) / 1000.0f;

        sdTuiTuLogic.BornPosition(kPlayerPos, fFollowDistance, ref kBornPosition);

        GameObject    kPetObj    = GameObject.Instantiate(kObj, kBornPosition, Quaternion.identity) as GameObject;
        sdGameMonster kActivePet = kPetObj.GetComponent <sdGameMonster>();

        if (kActivePet != null)
        {
            kActivePet.templateId = (int)kPetProperty["TemplateID"];
            kActivePet.bornLive   = true;
            kActivePet.DBID       = (ulong)kPetProperty["DBID"];
            kActivePet.Master     = m_pvpRival;
            m_pvpRival.Retainer   = kActivePet;

            kActivePet.NotifyKilled += OnPetKilled;

            kActivePet.ChangeGroupID(GroupIDType.GIT_MonsterA);

            // 宠物战队Buffaa
            List <int> kBuffList = GetPetGroupBuff(kActivePet);
            if (kBuffList != null)
            {
                foreach (int iBuffId in kBuffList)
                {
                    kActivePet.AddBuff(iBuffId, 0, kActivePet);
                }
            }
        }
    }
Ejemplo n.º 15
0
    public virtual void    PlayHitEffect(sdActorInterface monster)
    {
        if (stateData != null)
        {
            string strHitEffect = stateData["HitEffect"] as string;

            if (strHitEffect.Length > 0)
            {
                int       hitEffectLife = (int)stateData["HitEffectLife"];
                float     fLife         = hitEffectLife * 0.001f;
                Transform bindnode      = monster.transform;
                if (monster.actorType == ActorType.AT_Monster)
                {
                    sdGameMonster actor = (sdGameMonster)monster;
                    if (actor.ChestPoint.Length > 0)
                    {
                        GameObject chest = actor.GetNode(actor.ChestPoint.Replace("\r\n", ""));
                        if (chest != null)
                        {
                            bindnode = chest.transform;
                        }
                    }
                }
                else if (monster.actorType == ActorType.AT_Player)
                {
                    if (stateData.ContainsKey("HitDummy"))
                    {
                        int pos = (int)stateData["HitDummy"];
                        if (pos == 1)
                        {
                            sdGameActor gameactor = (sdGameActor)monster;
                            GameObject  chest     = gameactor.GetNode("Bip01 Spine");
                            if (chest != null)
                            {
                                bindnode = chest.transform;
                            }
                        }
                    }
                }
                bool bRotate = true;
                if (stateData.ContainsKey("HitEffectRotate"))
                {
                    bRotate = ((int)stateData["HitEffectRotate"] == 1);
                }
                sdActorInterface.AddHitEffect(strHitEffect, bindnode, fLife, Vector3.zero, bRotate);
            }
        }
    }
Ejemplo n.º 16
0
    // 反激活当前出战宠物aa
    public void DeactivePet()
    {
        if (mActivePet == null)
        {
            return;
        }

        //
        mActivePet.NotifyKilled -= OnPetKilled;

        //
        Hashtable kPetProp = sdNewPetMgr.Instance.GetPetPropertyFromDBID(mActivePet.DBID);

        if (kPetProp != null)
        {
            int iCurHP = mActivePet.GetCurrentHP();
            if (iCurHP < 0)
            {
                iCurHP = 0;
            }

            kPetProp["HP"] = iCurHP;                    //< 写回当前血量aa
        }

        //
        if (mActivePet.Master != null)
        {
            sdGameActor kActor = mActivePet.Master as sdGameActor;
            kActor.Retainer = null;

            mActivePet.Master = null;
        }

        //
        mActivePet.SetCurrentHP(-1);
        mActivePet.AddHP(0);

        // 更新界面aa
        GameObject kFightUI = GameObject.Find("FightUi");

        if (kFightUI != null)
        {
            kFightUI.GetComponent <sdFightUi>().RefreshPet();
        }

        mActivePet = null;
    }
Ejemplo n.º 17
0
    // 查找指定节点下的Monster对象aa
    static void FindMonster(Transform kTransform, List <sdGameMonster> kMonsterList)
    {
        if (kTransform.gameObject.tag == "Monster")
        {
            sdGameMonster kMonster = kTransform.GetComponent <sdGameMonster>();
            if (kMonster != null)
            {
                kMonsterList.Add(kMonster);
                return;
            }
        }

        for (int i = 0; i < kTransform.childCount; i++)
        {
            FindMonster(kTransform.GetChild(i), kMonsterList);
        }
    }
Ejemplo n.º 18
0
    // 离开触发状态(继承自sdBehaviourState)aa
    public override void DoLeaveState()
    {
        if (mIsInState != false)
        {
            mIsInState = false;

            if (mExecuteStatus)
            {
                MonsterAutoFight kMonsterAutoFight = mBehaviourAdvancedState.MonsterAutoFightComponent;
                if (kMonsterAutoFight != null)
                {
                    sdGameMonster kMonster = kMonsterAutoFight.Actor as sdGameMonster;
                    if (kMonster != null)
                    {
                        kMonster.AddBuff(mBuffID, 0, kMonster);
                    }
                }
            }
        }
    }
Ejemplo n.º 19
0
    // 离开触发状态(继承自sdBehaviourState)aa
    public override void DoLeaveState()
    {
        if (mIsInState != false)
        {
            mIsInState = false;

            if (mExecuteStatus)
            {
                MonsterAutoFight kMonsterAutoFight = mBehaviourAdvancedState.MonsterAutoFightComponent;
                if (kMonsterAutoFight != null)
                {
                    sdGameMonster kMonster = kMonsterAutoFight.Actor as sdGameMonster;
                    if (kMonster != null)
                    {
                        kMonster.gameObject.layer = mOldLayerIndex;
                    }
                }
            }
        }
    }
Ejemplo n.º 20
0
    protected bool mMonsterFindFirstTarget = false;     //< 防止函数被嵌套调用aa
    protected void NotifyMonsterFindFirstTarget(sdActorInterface kActor, sdActorInterface kPreviousTarget, sdActorInterface kTarget)
    {
        if (mMonsterFindFirstTarget)
        {
            return;
        }

        mMonsterFindFirstTarget = true;
        if (kPreviousTarget == null && kTarget != null)
        {
            foreach (GameObject kChild in mMonsterList)
            {
                sdGameMonster kMonster = kChild.GetComponent <sdGameMonster>();
                if (kMonster != null && kMonster != kActor)
                {
                    kMonster.OnAreaGroupAlert(kTarget);
                }
            }
        }
        mMonsterFindFirstTarget = false;
    }
Ejemplo n.º 21
0
 //
 public void SetMonsterStatus(HeaderProto.ECreatureActionState[] state, bool bAdd)
 {
     for (int i = 0; i < mMonsterList.Count; i++)
     {
         GameObject    obj     = mMonsterList[i];
         sdGameMonster monster = obj.GetComponent <sdGameMonster>();
         if (monster != null)
         {
             for (int j = 0; j < state.Length; j++)
             {
                 if (bAdd)
                 {
                     monster.AddDebuffState(state[j]);
                 }
                 else
                 {
                     monster.RemoveDebuffState(state[j]);
                 }
             }
         }
     }
 }
Ejemplo n.º 22
0
 // 初始化怪物aa
 public void CreateMonster()
 {
     GameObject[] kMonsterList = GameObject.FindGameObjectsWithTag("Monster");
     if (kMonsterList != null)
     {
         for (int i = 0; i < kMonsterList.Length; i++)
         {
             sdGameMonster kMonster = kMonsterList[i].GetComponent <sdGameMonster>();
             if (kMonster != null)
             {
                 if (SDGlobal.msMonsterDropTable != null)
                 {
                     object kDropItem = SDGlobal.msMonsterDropTable[(uint)kMonster.uniqueId];
                     if (kDropItem != null)
                     {
                         kMonster.DropInfo = kDropItem as SDMonsterDrop;
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 23
0
    // 更新触发状态(继承自sdBehaviourState)aa
    public override void UpdateState()
    {
        if (mIsInState == true)
        {
            mCurrentDelayTime -= Time.deltaTime;
            if (mCurrentDelayTime <= 0.0f)
            {
                if (mExecuteStatus)
                {
                    return;
                }

                mExecuteStatus = true;

                MonsterAutoFight kMonsterAutoFight = mBehaviourAdvancedState.MonsterAutoFightComponent;
                if (kMonsterAutoFight != null)
                {
                    sdGameMonster kMonster = kMonsterAutoFight.Actor as sdGameMonster;
                    if (kMonster != null)
                    {
                        Renderer[] akRenderer = kMonster.RenderNode.GetComponentsInChildren <Renderer>();
                        if (akRenderer != null)
                        {
                            for (int i = 0; i < akRenderer.GetLength(0); ++i)
                            {
                                Renderer kRenderer = akRenderer[i];
                                if (kRenderer.gameObject.name.Equals(mMeshName))
                                {
                                    mMeshStatus       = kRenderer.enabled;
                                    kRenderer.enabled = false;
                                    break;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
Ejemplo n.º 24
0
    // 设置战斗系统配接器aa
    public void SetMonsterAutoFight(MonsterAutoFight kMonsterAutoFight)
    {
        if (mMonsterAutoFight == kMonsterAutoFight)
        {
            return;
        }

        if (mMonsterAutoFight != null)
        {
            sdGameMonster kMonster = mMonsterAutoFight.Monster;
            kMonster.NotifySummoned       -= NotifySummoned;
            kMonster.NotifyKilled         -= NotifyKilled;
            kMonster.NotifyAddHP          -= NotifyAddHP;
            kMonster.NotifyChangeTarget   -= NotifyChangeTarget;
            kMonster.NotifyAddDebuffState -= NotifyAddDebuffState;
        }

        if (kMonsterAutoFight != null)
        {
            sdGameMonster kMonster = kMonsterAutoFight.Monster;
            kMonster.NotifySummoned       += NotifySummoned;
            kMonster.NotifyKilled         += NotifyKilled;
            kMonster.NotifyAddHP          += NotifyAddHP;
            kMonster.NotifyChangeTarget   += NotifyChangeTarget;
            kMonster.NotifyAddDebuffState += NotifyAddDebuffState;
        }

        mMonsterAutoFight = kMonsterAutoFight;

        int iAIID = (int)kMonsterAutoFight.Monster.Property["AIID"];

        mBehaviourEventTree = sdAITable.GetSingleton().GetBehaviourEventTree(iAIID);
        if (mBehaviourEventTree != null)
        {
            mBehaviourEventTree.SetBehaviourAdvancedState(this);
        }
    }
Ejemplo n.º 25
0
    float CalulateBodyModify(Hashtable table, sdActorInterface target)
    {
        float nResult = 0.0f;

        if (!table.ContainsKey("naMoreDamagePer[MONSTER_BODY_TYPE_max]"))
        {
            return(nResult);
        }
        if (table["naMoreDamagePer[MONSTER_BODY_TYPE_max]"].GetType() != typeof(int[]))
        {
            return(nResult);
        }
        if (target.GetActorType() == ActorType.AT_Monster || target.GetActorType() == ActorType.AT_Pet)
        {
            sdGameMonster monster      = (sdGameMonster)target;
            int           monsterType  = (int)monster.Property["BodyType"];
            int[]         percentArray = (int[])table["naMoreDamagePer[MONSTER_BODY_TYPE_max]"];
            if (monsterType >= 0 && monsterType < percentArray.Length)
            {
                nResult = (float)(percentArray[monsterType] * 0.0001f);
            }
        }
        return(nResult);
    }
Ejemplo n.º 26
0
    static void GenerateUniqueID()
    {
        GameObject kGameLevelObject = GameObject.Find("@GameLevel");

        if (kGameLevelObject == null)
        {
            return;
        }

        sdTuiTuLogic kTuituLogic = kGameLevelObject.GetComponent <sdTuiTuLogic>();

        if (kTuituLogic == null)
        {
            return;
        }

        List <sdGameMonster> kMonsterList = FindMonster(7);

        if (kMonsterList != null)
        {
            int iUniqueId = 1;
            for (int i = 0; i < kMonsterList.Count; i++)
            {
                sdGameMonster kMonster = kMonsterList[i];
                if (kMonster != null)
                {
                    kMonster.uniqueId = iUniqueId;
                    EditorUtility.SetDirty(kMonster);
                    iUniqueId++;
                }
            }
        }

        EditorApplication.SaveCurrentSceneIfUserWantsTo();
        Debug.LogWarning("Gen Monster Unique ID OK!");
    }
Ejemplo n.º 27
0
    // 宠物被杀死回调aa
    protected void OnPetKilled(sdActorInterface kActor)
    {
        sdGameMonster kMonster = kActor as sdGameMonster;

        if (kMonster == null)
        {
            return;
        }

        //
        kMonster.NotifyKilled -= OnPetKilled;

        //
        if (kMonster.Master != null)
        {
            sdGameActor kMasterActor = kMonster.Master as sdGameActor;
            kMasterActor.Retainer = null;

            kMonster.Master = null;
        }

        //
        ActiveOnePet();
    }
Ejemplo n.º 28
0
    // 初始化(继承自MonoBehaviour)aa
    protected override void Start()
    {
        if (this.transform.childCount > 0)
        {
            for (int i = 0; i < this.transform.childCount; i++)
            {
                GameObject    kObject  = this.transform.GetChild(i).gameObject;
                sdGameMonster kMonster = kObject.GetComponent <sdGameMonster>();
                if (kMonster != null)
                {
                    kMonster.NotifyKilled       += NotifyMonsterKilled;
                    kMonster.NotifyHurt         += NotifyMonsterHurt;
                    kMonster.NotifyChangeTarget += NotifyMonsterFindFirstTarget;

                    mMonsterKilledList.Add(kObject);
                    continue;
                }

                sdLevelArea kArea = kObject.GetComponent <sdLevelArea>();
                if (kArea != null)
                {
                    mSubNodeClearedList.Add(kObject);
                    continue;
                }
            }
        }

        if (this.transform.parent != null)
        {
            sdLevelArea kArea = this.transform.parent.gameObject.GetComponent <sdLevelArea>();
            if (kArea != null)
            {
                mParNode = this.transform.parent.gameObject;
            }
        }
    }
Ejemplo n.º 29
0
    public void SetTarget(GameObject obj, sdLevelArea area)
    {
        sdUICharacter.Instance.bBossMovie = true;
        m_StartTime      = System.DateTime.Now.Ticks / 10000000L;
        mBoss            = obj;
        bossSaveRotate   = mBoss.transform.rotation;
        levelArea        = area;
        mMainCamera      = sdGameLevel.instance.mainCamera.GetComponent <Camera>();
        cameraSavePos    = mMainCamera.gameObject.transform.position;
        cameraSaveRotate = mMainCamera.gameObject.transform.rotation;
        mUICamera        = sdGameLevel.instance.UICamera;
        SetTargetEffectVisible(false);
        sdGameLevel.instance.SetFingerObjectActive(false);

        HeaderProto.ECreatureActionState[] state = new HeaderProto.ECreatureActionState[2];
        state[0] = HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_IDLE;
        state[1] = HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_LIMIT_SKILL;
        levelArea.SetMonsterStatus(state, true);
        sdActorInterface activePet = sdGameLevel.instance.mainChar.Retainer;

        for (int i = 0; i < state.Length; i++)
        {
            if (activePet != null)
            {
                activePet.AddDebuffState(state[i]);
            }
            sdGameLevel.instance.mainChar.AddDebuffState(state[i]);
        }
        if (activePet != null && activePet.actorType == ActorType.AT_Pet)
        {
            ((sdGameMonster)activePet).DeactiveHPUI();
        }

        ResLoadParams param = new ResLoadParams();

        sdResourceMgr.Instance.LoadResource("UI/$Movie/bossdialogue.prefab", LoadBossDialogue, param);
        //榛戝睆杩涘叆aa
        Quaternion cameraRotate = mMainCamera.gameObject.transform.rotation;

        cameraRotate = cameraRotate * Quaternion.AngleAxis(180.0f, new Vector3(0, 1, 0));
        Vector3 direction = cameraRotate * Vector3.forward;

        direction.y = 0.0f;
        direction.Normalize();
        Quaternion bossRotate = Quaternion.identity;

        if (direction.z < -0.9999f)
        {
            bossRotate = Quaternion.AngleAxis(180.0f, new Vector3(0, 1, 0));
        }
        else
        {
            bossRotate = Quaternion.FromToRotation(Vector3.forward, direction);
        }
        mBoss.transform.rotation = bossRotate;
        sdGameLevel.instance.mainCamera.MainCharFollow = false;
        if (mbornAnimNext != null && mbornAnimNext.Length > 0)
        {
            bPlayShowAnimation = true;
            gameMonster        = mBoss.GetComponent <sdGameMonster>();
        }
    }
Ejemplo n.º 30
0
    public DamageResult testHurt(sdActorInterface _gameActor, Hashtable _state, sdActorInterface targetActor, int hitPointIndex, HeaderProto.ESkillEffect bySkillEffect)
    {
        DamageResult dr;

        dr.damage     = 0;
        dr.bubbleType = Bubble.BubbleType.eBT_BaseHurt;
        dr.attracker  = _gameActor;

        Hashtable recProp = targetActor.GetProperty();

        if (recProp == null)
        {
            return(dr);
        }
        SkillProperty skillProp = new SkillProperty();

        int   dmgMin            = (int)_gameActor["AtkDmgMin"];
        int   dmgMax            = (int)_gameActor["AtkDmgMax"];
        int   iceAtt            = (int)_gameActor["IceAtt"];
        int   fireAtt           = (int)_gameActor["FireAtt"];
        int   poisonAtt         = (int)_gameActor["PoisonAtt"];
        int   thunerAtt         = (int)_gameActor["ThunderAtt"];
        int   intervalPerAttack = (int)_gameActor["AttSpeed"];       // ms per attack
        float attackPerSecond   = 1000.0f / (float)intervalPerAttack;
        int   d10000            = ((int[])_state["dwAtkPowerPer[10]"])[hitPointIndex];
        int   dx = ((int[])_state["dwDmg[10]"])[hitPointIndex];
        int   byPeriodicDamageType = 0;                   //(int)_state.stateData["byPeriodicDamage"];

        Hashtable attTable = new Hashtable();
        int       phyAtt   = dmgMin;

        //如果最小攻击力 大于 最大攻击力 直接取最小攻击力...
        if (dmgMax > dmgMin)
        {
            phyAtt = Random.Range(dmgMin, dmgMax);
        }

        float iPercentFix = 0.0f;
        int   iDamageFix  = 0;

        switch ((EPeriodicDamage)byPeriodicDamageType)
        {
        ///每波伤害相同...
        case    EPeriodicDamage.PERIODIC_DAMAGE_SAME: {} break;

        ///固定值递增:Data + DataPeriodic * (Index)...
        case    EPeriodicDamage.PERIODIC_DAMAGE_INCREASE: {
            iDamageFix = (int)_state["dwPeriodicTraumaHP"] * (hitPointIndex + 1);
        } break;

        ///百分比递增:HP*(Data + DataPeriodic * (Index))...
        case        EPeriodicDamage.PERIODIC_DAMAGE_INCREASE_PERCENT: {
            iPercentFix = ((int)_state["dwPeriodicTraumaHP"] / 10000.0f) * (hitPointIndex + 1);
        } break;

        ///固定值递减:Data - DataPeriodic * (Index)...
        case    EPeriodicDamage.PERIODIC_DAMAGE_DECREASE: {
            iDamageFix = -(int)_state["dwPeriodicTraumaHP"] * (hitPointIndex + 1);
        } break;

        ///百分比递减:HP*(Data - DataPeriodic * (Index))...
        case    EPeriodicDamage.PERIODIC_DAMAGE_DECREASE_PERCENT: {
            iPercentFix = -((int)_state["dwPeriodicTraumaHP"] / 10000.0f) * (hitPointIndex + 1);
        } break;

        ///第一波伤害最大,其余伤害相同,第一波伤害计算公式:...
        ///固定值方式:Data - DataPeriodic...
        case    EPeriodicDamage.PERIODIC_DAMAGE_FIRST: {
            if (hitPointIndex == 0)
            {
                iDamageFix = (int)_state["dwPeriodicTraumaHP"];
            }
        } break;

        ///百分比方式:HP*(Data + DataPeriodic)...
        case    EPeriodicDamage.PERIODIC_DAMAGE_FIRST_PERCENT: {
            if (hitPointIndex == 0)
            {
                iPercentFix = ((int)_state["dwPeriodicTraumaHP"] / 10000.0f);
            }
        } break;

        ///最后一波伤害最大,其余伤害相同,第一波伤害计算公式:
        ///固定值方式:Data + DataPeriodic
        case        EPeriodicDamage.PERIODIC_DAMAGE_END: {
            if (hitPointIndex == -1)
            {
                iPercentFix = (int)_state["dwPeriodicTraumaHP"];
            }
        } break;

        ///百分比方式:HP*(Data + DataPeriodic)...
        case    EPeriodicDamage.PERIODIC_DAMAGE_END_PERCENT: {
            if (hitPointIndex == -1)
            {
                iPercentFix = ((int)_state["dwPeriodicTraumaHP"] / 10000.0f);
            }
        } break;
        }
        int skillHit    = (int)_state["dwHitPer"];
        int skillCri    = (int)_state["dwCriticalPer"];
        int skillCriDmg = (int)_state["dwCriticalDmgPer"];

        skillProp.atk        = phyAtt;
        skillProp.iceAtk     = iceAtt;
        skillProp.fireAtk    = fireAtt;
        skillProp.poisonAtk  = poisonAtt;
        skillProp.thunderAtk = thunerAtt;
        skillProp.Y          = (float)d10000 / 10000.0f;
        skillProp.Z          = dx;
        skillProp.YZFix      = iPercentFix;
        skillProp.ZFix       = iDamageFix;
        skillProp.hitRate    = (float)_gameActor["Hit"] * fPropertyScale + (float)_gameActor["HitPer"] * 0.0001f + (skillHit) * 0.0001f;
        int pierce = _gameActor["Pierce"];

        skillProp.passThrough = (float)pierce / (float)(pierce + (int)recProp["Level"] * 270 + 2700);

        skillProp.superAttack  = (float)_gameActor["CriDmg"] * 0.0001f + (skillCriDmg) * 0.0001f;
        skillProp.superRate    = (float)_gameActor["Cri"] * fPropertyScale + (float)_gameActor["CriPer"] * 0.0001f + (skillCri) * 0.0001f;
        skillProp.attPerSecond = attackPerSecond;
        if (_state.ContainsKey("dwDamagePer"))
        {
            skillProp.damagePer = ((int)_state["dwDamagePer"]) * 0.0001f;
        }
        else
        {
            skillProp.damagePer = 1.0f;
        }
        if (_gameActor.Property.ContainsKey("HurtOtherModify"))
        {
            skillProp.hurtOtherModify = ((int)_gameActor["HurtOtherModify"]) * 0.0001f;
        }
        else
        {
            skillProp.hurtOtherModify = 0.0f;
        }

        //属性修正aaa
        int attAttr = (int)_state["byDamegePro"];

        if (attAttr == 0)
        {
            skillProp.type = SkillType.Skill_Physic;
        }
        else if (attAttr == 1)
        {
            skillProp.type = SkillType.Skill_Ice;
        }
        else if (attAttr == 2)
        {
            skillProp.type = SkillType.Skill_Fire;
        }
        else if (attAttr == 3)
        {
            skillProp.type = SkillType.Skill_Poison;
        }
        else if (attAttr == 4)
        {
            skillProp.type = SkillType.Skill_Thunder;
        }
        skillProp.PropertyModify = CalulatePropertyModify(_gameActor, attAttr);
        ///体型修正aaaa
        skillProp.BodyTypeModify = CalulateBodyModify(_state, targetActor);
        //控制状态修正aaa
        skillProp.StateModify = CalulateStateModify(_gameActor, targetActor);

        SkillDefProperty defProp = new SkillDefProperty();

        defProp.level = (int)recProp["Level"];
        defProp.def   = (int)recProp["Def"];
        int dodge = (int)recProp["Dodge"];

        defProp.dodgeRate  = dodge * fPropertyScale;
        defProp.dodgeRate += ((int)recProp["DodgePer"]) * 0.0001f;
        defProp.fireDef    = (int)recProp["FireDef"];
        defProp.iceDef     = (int)recProp["IceDef"];
        defProp.poisonDef  = (int)recProp["PoisonDef"];
        int criDmgDef = (int)recProp["CriDmgDef"];

        defProp.superDef   = (float)criDmgDef * 0.0001f;
        defProp.thunderDef = (int)recProp["ThunderDef"];
        int flex = (int)recProp["Flex"];

        defProp.toughness = (float)flex * fPropertyScale;
        if (recProp.ContainsKey("BeHurtModify"))
        {
            defProp.beHurtModify = ((int)recProp["BeHurtModify"]) * 0.0001f;
        }
        else
        {
            defProp.beHurtModify = 0.0f;
        }

        bool isNormalAtk = false;

        if (attAttr == 0)
        {
            isNormalAtk = true;
        }

        bool isSuper;
        bool bDodge;

        dr.damage = CalculateAttack(skillProp, defProp, isNormalAtk, bySkillEffect, out isSuper, out bDodge);
        CalculateBubbleType(_state, _gameActor, targetActor, isSuper, bDodge, ref dr);
        if (bySkillEffect == HeaderProto.ESkillEffect.SKILL_EFFECT_CURE_HP)
        {
            targetActor.AddHP(dr.damage);
        }
        else if (bySkillEffect == HeaderProto.ESkillEffect.SKILL_EFFECT_CURE_MP)
        {
            targetActor.AddSP(dr.damage);
        }
        else if (bySkillEffect == HeaderProto.ESkillEffect.SKILL_EFFECT_DAMAGE_SP)
        {
            targetActor.AddSP(-dr.damage);
        }
        else
        {
            if (targetActor.CheckDebuffState(HeaderProto.ECreatureActionState.CREATURE_ACTION_STATE_UNBEAT))
            {
                dr.bubbleType = Bubble.BubbleType.eBT_Dodge;
                dr.damage     = 0;
            }
            targetActor.OnHurt(dr);
        }
        if (_state.Contains("WeaponHitType"))
        {
            targetActor.DoHittedAudio((string)_state["WeaponHitType"]);
        }
        if (targetActor.actorType == ActorType.AT_Monster && dr.damage > 0)
        {
            sdGameMonster monster     = (sdGameMonster)targetActor;
            int           monsterType = (int)monster.Property["BodyType"];
            if (_state.Contains("ParentID") && _state.Contains("dwTemplateID"))            //临时代码判断是技能伤害aa
            {
                int id = (int)_state["dwTemplateID"];
                _gameActor.OnAttackRestore(id, dr.damage, monsterType);
            }
        }
        //是否打断被击目标的某些buffer
        if (_state.ContainsKey("BreakState"))
        {
            int[] buffID = (int[])(_state["BreakState"]);
            if (buffID.Length == 2)
            {
                targetActor.RemoveBuff(buffID[0], buffID[1]);
            }
        }
        return(dr);
    }