Esempio n. 1
0
 /// <summary>
 /// 被技能影响 by吴江
 /// </summary>
 /// <param name="_info"></param>
 public virtual void BeInfluencedByOther(AbilityInstance _instance, st.net.NetBase.skill_effect _result)
 {
     if (IsActor)
     {
         return;
     }
     unFinishedAbilityResultList.Add(new AbilityResultInfo(_instance, _result));
 }
Esempio n. 2
0
    /// <summary>
    /// 承受技能后果导致数据改变  by吴江
    /// </summary>
    /// <param name="_abilityResult"></param>
    public virtual void Update(st.net.NetBase.skill_effect _abilityResult)
    {
        DefResultType defType = (DefResultType)_abilityResult.def_sort;

        switch (defType)
        {
        //case DefResultType.DEF_SORT_DIE:
        //    serverData.baseValueDic[ActorBaseTag.CurHP] = (int)_abilityResult.cur_hp;
        //    if (OnBaseUpdate != null)
        //    {
        //        OnBaseUpdate(ActorBaseTag.CurHP, serverData.baseValueDic[ActorBaseTag.CurHP], true);
        //    }
        //    IsAlive = false;
        //    break;
        case DefResultType.DEF_SORT_UNTREAT:
        case DefResultType.DEF_SORT_NO:
        case DefResultType.DEF_SORT_STIFLE:
        case DefResultType.DEF_SORT_KICK2:
        case DefResultType.DEF_SORT_KICK:
        case DefResultType.DEF_SORT_NOKICKDOWN:
        case DefResultType.DEF_SORT_NOSTIFLE:
        case DefResultType.DEF_SORT_NOKICK:
        case DefResultType.DEF_SORT_TREAT:
            serverData.baseValueDic[ActorBaseTag.CurHP] = _abilityResult.cur_hp;
            if (this.OnBaseUpdate != null)
            {
                this.OnBaseUpdate(ActorBaseTag.CurHP, serverData.baseValueDic[ActorBaseTag.CurHP], true);
            }
            if (serverData.baseValueDic[ActorBaseTag.CurHP] <= 0)
            {
                IsAlive = false;
            }
            break;

        case DefResultType.DEF_SORT_ADDMP:
            serverData.baseValueDic[ActorBaseTag.CurMP] += _abilityResult.demage;
            if (OnBaseUpdate != null)
            {
                OnBaseUpdate(ActorBaseTag.CurMP, serverData.baseValueDic[ActorBaseTag.CurMP], true);
            }
            break;

        case DefResultType.DEF_SORT_DELMP:
            serverData.baseValueDic[ActorBaseTag.CurMP] -= _abilityResult.demage;
            if (OnBaseUpdate != null)
            {
                OnBaseUpdate(ActorBaseTag.CurMP, serverData.baseValueDic[ActorBaseTag.CurMP], true);
            }
            break;
        }
    }
Esempio n. 3
0
    protected void S2C_AbilityResult(Pt _info)
    {
        if (GameCenter.sceneMng == null || !GameCenter.sceneMng.EnterSucceed)
        {
            return;
        }
        pt_scene_skill_effect_c006 pt = _info as pt_scene_skill_effect_c006;

        if (pt != null)
        {
            //Debug.Log("effectSort:"+(AbilityResultCAUSEType)pt.effect_sort+",targetID:"+pt.target_id+",ObjectType:"+(ObjectType)pt.obj_sort);
            SmartActor     user           = null;
            ObjectType     type           = (ObjectType)pt.obj_sort;
            MainPlayerInfo mainPlayerInfo = GameCenter.mainPlayerMng.MainPlayerInfo;
            switch (type)
            {
            case ObjectType.Player:
                if ((int)pt.oid == mainPlayerInfo.ServerInstanceID)
                {
                    user = GameCenter.curMainPlayer;
                }
                else
                {
                    user = GameCenter.curGameStage.GetOtherPlayer((int)pt.oid) as SmartActor;
                }
                break;

            case ObjectType.MOB:
                user = GameCenter.curGameStage.GetMOB((int)pt.oid) as SmartActor;
                break;

            case ObjectType.Entourage:
                user = GameCenter.curGameStage.GetEntourage((int)pt.oid) as EntourageBase;
                break;

            default:
                break;
            }


            for (int i = 0; i < pt.effect_list.Count; i++)
            {
                st.net.NetBase.skill_effect ef = pt.effect_list[i];
                ActorInfo info = null;
                type = (ObjectType)ef.target_sort;
                //if (user == GameCenter.curMainPlayer)
                //{
                //    if ((AttackResultType)ef.atk_sort != AttackResultType.ATT_SORT_DODGE)
                //    {
                //        if (OnContinuCountUpdate != null)
                //        {
                //            OnContinuCountUpdate(Time.time);
                //        }
                //    }
                //}
                switch (type)
                {
                case ObjectType.Player:
                    if (ef.target_id == mainPlayerInfo.ServerInstanceID)
                    {
                        mainPlayerInfo.Update(ef);
                        if ((DefResultType)ef.def_sort != DefResultType.DEF_SORT_ADDMP && (DefResultType)ef.def_sort != DefResultType.DEF_SORT_TREAT) //如果是非增益后果
                        {
                            if (OnMainPlayerBeHit != null && user != null)                                                                            //主角被打的事件
                            {
                                OnMainPlayerBeHit(user);
                            }
                            OtherPlayer other = user as OtherPlayer;
                            if (other != null && mainPlayerInfo.CurSceneType == SceneType.SCUFFLEFIELD)
                            {
                                if (!abilityResultUserDic.ContainsKey(other.id) || Time.time - abilityResultUserDic[other.id] > 5f)                                       //被玩家攻击提示,5秒不重复
                                {
                                    abilityResultUserDic[other.id] = Time.time;
                                    GameCenter.messageMng.AddClientMsg((mainPlayerInfo.KillingValue > 1000 || mainPlayerInfo.IsCounterAttack)?434:433, new string[1] {
                                        other.ActorName
                                    });
                                    if (OnMainPlayerBeAttack != null)
                                    {
                                        OnMainPlayerBeAttack(other);
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        info = GameCenter.sceneMng.GetOPCInfo((int)ef.target_id) as OtherPlayerInfo;
                        if (info != null)
                        {
                            info.Update(ef);
                        }
                    }
                    break;

                case ObjectType.MOB:
                    info = GameCenter.sceneMng.GetMobInfo((int)ef.target_id) as MonsterInfo;
                    if (info != null)
                    {
                        info.Update(ef);
                    }
                    break;

                case ObjectType.Entourage:
                    if (GameCenter.mercenaryMng.curMercernaryInfo != null && ef.target_id == GameCenter.mercenaryMng.curMercernaryInfo.ServerInstanceID)
                    {
                        GameCenter.mercenaryMng.curMercernaryInfo.Update(ef);
                    }
                    else
                    {
                        info = GameCenter.sceneMng.GetEntourageInfo((int)ef.target_id) as MercenaryInfo;
                        if (info != null)
                        {
                            info.Update(ef);
                        }
                    }
                    break;
                }
            }


            AbilityInstance instance = null;

            if ((int)pt.oid == GameCenter.curMainPlayer.id || (GameCenter.curMainEntourage != null && (int)pt.oid == GameCenter.curMainEntourage.id))
            {
                if (waitServerConfirmAbilityDic.ContainsKey(pt.seq))
                {
                    instance = waitServerConfirmAbilityDic[pt.seq] as AbilityInstance;
                    if (instance != null)
                    {
                        instance.AbilityResult(pt);
                        instance.OnTringEnd -= OnAbilityInstanceTringEnd;
                        waitServerConfirmAbilityDic.Remove(pt.seq);
                    }
                }
                else
                {
                    if (pt.seq != 0)
                    {
                        GameSys.LogError("找不到等待技能 " + pt.seq);
                    }
                    else
                    {
                        if (user != null)
                        {
                            if (pt.skill == 0)
                            {
                                Debug.LogError(user.name + "使用技能ID为0的技能");
                            }
                            else
                            {
                                instance = new AbilityInstance(pt, user);
                            }
                        }
                    }
                }
            }
            else
            {
                bool useSkill = (pt.effect_sort == 2);
                if (user != null)
                {
                    if (user.curTryUseAbility != null && user.curTryUseAbility.AbilityID == pt.skill && user.curTryUseAbility.RuneID == pt.rune &&
                        user.curTryUseAbility.Level == pt.lev && user.curTryUseAbility.NeedPrepare && !user.curTryUseAbility.HasServerConfirm)
                    {
                        instance = user.curTryUseAbility;
                    }
                    else
                    {
                        instance = new AbilityInstance(pt, user);
                        if ((ObjectType)pt.obj_sort == ObjectType.Player)                       //这里的判断不能用type
                        {
                            //技能动作完成了才继续放技能,否则其他大风车技能会瞬移  by邓成
                            //这种处理同时导致了,法师动作比特效慢,因为一个技能放完,实际还在isCasting
                            if (useSkill)
                            {
                                user.UseAbility(instance);
                            }
                        }
                        else
                        {
                            if (useSkill)                           //怪物也需要加这个,否则SkillReportID出现两次
                            {
                                user.UseAbility(instance);
                            }
                        }
                    }
                }
                else
                {
                    instance = new AbilityInstance(pt, null);
                }
                instance.AbilityResult(pt);
            }
            if (instance != null && user != null)
            {
                switch (instance.CurClientShowType)
                {
                case ClientShowType.Lightingskill:
                    user.fxCtrl.CastLightingShake(instance);
                    break;
                }
            }
        }
    }