示例#1
0
    public void Tick(IResultControl control, float dt)
    {
        if (IsNeedRemove)
        {
            return;
        }
        if (m_isPeriodNeed)
        {
            int count = (int)((Time.time - m_periodStartTime) / m_period);
            m_periodStartTime += m_period * count;
            m_periodWorkCount += count;
        }

        foreach (IBuffEffect e in m_effects)
        {
            if (IsNeedRemove)
            {
                e.OnRemoved(control);
            }

            if (e.IsNeedTick)
            {
                e.Tick(control, dt);
            }

            for (int i = 0; i < m_periodWorkCount; ++i)
            {
                e.Exec(control);
            }
        }
        m_periodWorkCount = 0;
    }
示例#2
0
    public override void Exec(IResultControl control)
    {
        Actor targetActor = ActorManager.Singleton.Lookup(TargetID);

        m_curCD.m_cdTime = m_cdTime;
        targetActor.CDControl.CDListAdd(m_curCD);
    }
示例#3
0
 public void ExecAllServerResult(IResultControl control)
 {
     foreach (IResult result in m_results)
     {
         result.ResultServerExec(control);
     }
 }
示例#4
0
    public void Tick(float dt, IResultControl control)
    {
        //此处用for是因为方便buff的tick中添加buff,但删除buff只能在所有buff的tick之后
        bool isCalcProperty = false;

        for (int i = 0; i < BuffList.Count; ++i)
        {
            BuffList[i].IsRemoveBuff(dt, control);
            BuffList[i].Tick(control, dt);
            if (BuffList[i].IsNeedRemove && BuffList[i].IsCalcProperty)
            {
                isCalcProperty = true;
            }
        }

        int removedBuffCount = BuffList.RemoveAll(Temp_Remove_Buff);

        if (isCalcProperty || removedBuffCount > 0)
        {
            if (isCalcProperty)
            {
                BuffResult();
            }
            else
            {
                RefreshBuffGraphics();
            }
        }
    }
示例#5
0
 public void RemoveAll(IResultControl control)
 {
     foreach (var buff in BuffList)
     {
         buff.MarkRemove(control);
     }
 }
示例#6
0
 public override void OnProduceResult(IResult result, IResultControl control)
 {
     base.OnProduceResult(result, control);
     if (result.ClassID == (int)ENResult.Damage)
     {
         ResultDamage damage = result as ResultDamage;
         BuffInfo     info   = GameTable.BuffTableAsset.Lookup(BuffID);
         foreach (var item in info.BuffResultList)
         {
             if (item.ID == (int)ClassID)
             {
                 if (item.ParamList[1] < UnityEngine.Random.Range(0.0f, 1.0f))
                 {//几率吸血
                     continue;
                 }
                 float   value = item.ParamList[0] * damage.DamageValue;
                 IResult r     = BattleFactory.Singleton.CreateResult(ENResult.Health, SourceID, TargetID, 0, 0, new float[5] {
                     (float)ResultHealth.HealthType.enFixed, value, 0, 0, 0
                 });
                 if (r != null)
                 {
                     r.ResultExpr(new float[5] {
                         (float)ResultHealth.HealthType.enFixed, value, 0, 0, 0
                     });
                     BattleFactory.Singleton.DispatchResult(r);
                 }
             }
         }
     }
 }
 public override void OnGetResult(IResult result, IResultControl control)
 {
     base.OnGetResult(result, control);
     if (result.ClassID == (int)ENResult.Damage)
     {
         ResultDamage r    = result as ResultDamage;
         BuffInfo     info = GameTable.BuffTableAsset.Lookup(BuffID);
         foreach (var item in info.BuffResultList)
         {
             if (item.ID == (int)ClassID)
             {
                 switch ((ENDecreaseDamageType)item.ParamList[0])
                 {
                 case ENDecreaseDamageType.enPercent:
                 {
                     if (item.ParamList[4] == 0 || (int)item.ParamList[4] == (int)r.DamageResultType)
                     {
                         r.DamageValue     *= m_decreasePercent;
                         m_decreasePercent *= item.ParamList[3];
                         if (m_decreasePercent < item.ParamList[2])
                         {        //最小值
                             m_decreasePercent = item.ParamList[2];
                         }
                     }
                 }
                 break;
                 }
             }
         }
     }
 }
示例#8
0
    public override void ResultServerExec(IResultControl control)
    {
        if (mRefreshResult)
        {
            Actor targetActor = ActorManager.Singleton.Lookup(SourceID);
            if (targetActor == null)
            {
                return;
            }

            // 全部技能
            if (mSkillID == 0)
            {
                foreach (var tmpCD in targetActor.CDControl.CDList)
                {
                    tmpCD.Remove();
                }
            }
            // 某个技能
            else
            {
                foreach (var tmpCD in targetActor.CDControl.CDList)
                {
                    if (mSkillID == tmpCD.GetCDSkillID())
                    {
                        tmpCD.Remove();
                        break;
                    }
                }
            }
        }
    }
 public override void OnProduceResult(IResult result, IResultControl control)
 {
     base.OnProduceResult(result, control);
     if (result.ClassID == (int)ENResult.Damage)
     {
         ResultDamage rd   = result as ResultDamage;
         BuffInfo     info = GameTable.BuffTableAsset.Lookup(BuffID);
         foreach (var item in info.BuffResultList)
         {
             if (item.ID == (int)ClassID)
             {
                 switch ((ENType)item.ParamList[0])
                 {
                 case ENType.enRacialType:
                 {
                     Actor target = ActorManager.Singleton.Lookup(rd.TargetID);
                     if (target != null)
                     {
                         if (target.OnGetRaceType() == (int)item.ParamList[1])
                         {
                             rd.DamageValue *= (1 + item.ParamList[2]);
                         }
                     }
                 }
                 break;
                 }
             }
         }
     }
 }
示例#10
0
    public override void Exec(IResultControl control)
    {
        base.Exec(control);
        Actor self = ActorManager.Singleton.Lookup(SourceID);

        if (self == null)
        {
            Debug.LogWarning("actor is not exist, id is " + SourceID);
            return;
        }
        for (int i = 0; i < m_actorCount; ++i)
        {
            int   actorID = ActorManager.Singleton.GetValidActorID(2000 + i);
            Actor actor   = ActorManager.Singleton.CreatePureActor(m_actorType, actorID, CSItemGuid.Zero, m_actorID);
            actor.Props.SetProperty_Int32(ENProperty.islive, 1);
            if (actor.Type == ActorType.enNPC)
            {
                NPC npc = actor as NPC;
                npc.CurRoom     = (self as NPC).CurRoom;
                npc.roomElement = new RoomElement();
                npc.IsActive    = true;
            }
            //else
            //{
            //    Player p = actor as Player;
            //    p.InitPartnerSkill();
            //}
            actor.CreateNeedModels();
            Vector3 pos = GetValidPosition(actor.MainPos, m_range);
            actor.ForceMoveToPosition(pos);
            actor.StartDeadCD(m_duration);
        }
    }
示例#11
0
    public override void ResultServerExec(IResultControl control)
    {
        base.ResultServerExec(control);
        Actor target = ActorManager.Singleton.Lookup(TargetID);

        if (null == target)
        {
            return;
        }
        target.Props.SetProperty_Int32(ENProperty.Exp, m_curtExp);
        target.Props.SetProperty_Int32(ENProperty.LevelUpPoint, m_levelUpPoint);
        if (m_isLevelUp)
        {
            target.Props.SetProperty_Int32(ENProperty.level, m_level);
        }
        MainPlayer mainPlayer = ActorManager.Singleton.MainActor;

        if (mainPlayer.ID == TargetID)
        {
            mainPlayer.UpDataSkillLevelUp();
            if (m_isLevelUp)
            {
                //播放升级特效
                mainPlayer.UpdataMainHeadLevel();
            }
        }
        //是否需要显示获得经验数字
    }
 public override void OnProduceResult(IResult result, IResultControl control)
 {
     base.OnProduceResult(result, control);
     if (result.ClassID == (int)ENResult.Health)
     {
         ResultHealth r    = result as ResultHealth;
         BuffInfo     info = GameTable.BuffTableAsset.Lookup(BuffID);
         foreach (var item in info.BuffResultList)
         {
             if (item.ID == (int)ClassID)
             {
                 switch ((ENType)item.ParamList[0])
                 {
                 case ENType.enProduceRestore:
                 {
                     if ((int)item.ParamList[4] == (int)r.HealthResultType)
                     {        //改变某类型的恢复
                         float percent = item.ParamList[1];
                         if (percent != 0)
                         {
                             r.HealthValue *= percent;
                         }
                     }
                 }
                 break;
                 }
             }
         }
     }
 }
示例#13
0
    public override void Exec(IResultControl control)
    {
        base.Exec(control);
        Actor actor = ActorManager.Singleton.Lookup(TargetID);

        if (null == actor)
        {
            return;
        }
        if (actor.Type == ActorType.enNPCTrap)
        {//机关
            ControlTrap tmpActor = actor as ControlTrap;
            tmpActor.OperateOpenAnim();
            ActorManager.Singleton.Lookup(SourceID).TargetManager.CurrentTarget = null;
        }
        else if (actor.Type == ActorType.enNPC)
        {
            NPC npc = actor as NPC;
            if (npc.GetNpcType() == ENNpcType.enBoxNPC)
            {//宝箱
                IResult r = BattleFactory.Singleton.CreateResult(ENResult.Dead, SourceID, TargetID);
                if (r != null)
                {
                    r.ResultExpr(null);
                    BattleFactory.Singleton.GetBattleContext().CreateResultControl().DispatchResult(r);
                }
            }
        }
    }
示例#14
0
 public void ExecAllResult(IResultControl control)
 {
     foreach (IResult result in m_results)
     {
         result.Exec(control);
     }
 }
示例#15
0
    public override void Exec(IResultControl control)
    {
        if (mRefreshResult)
        {
            Actor targetActor = ActorManager.Singleton.Lookup(SourceID);
            if (targetActor == null)
            {
                return;
            }
            switch (m_type)
            {
            case RefreshSkillType.enAllSkill:
                foreach (var tmpCD in targetActor.CDControl.CDList)
                {
                    tmpCD.Remove();
                }
                break;

            case RefreshSkillType.enSkill:
                foreach (var tmpCD in targetActor.CDControl.CDList)
                {
                    if (mSkillID == tmpCD.GetCDSkillID())
                    {
                        tmpCD.Remove();
                        break;
                    }
                }
                break;

            default:
                break;
            }
        }
    }
 public override void OnGetResult(IResult result, IResultControl control)
 {
     base.OnGetResult(result, control);
     if (result.ClassID == (int)ENResult.StaminaChanged)
     {//强韧度改变的目标是自己,所以在OnGetResult
         BuffInfo info  = GameTable.BuffTableAsset.Lookup(BuffID);
         Actor    actor = ActorManager.Singleton.Lookup(TargetID);
         if (actor.Type != ActorType.enNPC)
         {
             Debug.LogWarning("StaminaChanged OnGetResult failed! actor is not npc! actor type=" + actor.Type.ToString());
             return;
         }
         foreach (var item in info.BuffResultList)
         {     //破韧
             if (item.ID == (int)ClassID)
             { //第一个参数为添加buff的id
                 IResult r = BattleFactory.Singleton.CreateResult(ENResult.AddBuff, TargetID, TargetID, 0, 0, new float[1] {
                     item.ParamList[0]
                 });
                 if (r != null)
                 {
                     r.ResultExpr(new float[1] {
                         item.ParamList[0]
                     });
                     BattleFactory.Singleton.DispatchResult(r);
                 }
             }
         }
     }
 }
示例#17
0
        public Boolean ShowResult(IResult result)
        {
            this.ClearResult();
            if (result == null)
            {
                return(false);
            }
            Object obj = result.Result;

            if (obj == null)
            {
                return(false);
            }

            foreach (Control c in this.Controls)
            {
                IResultControl rc = c as IResultControl;
                if (rc != null)
                {
                    if (rc.ShowResult(result) == true)
                    {
                        c.Visible = true;
                        return(true);
                    }
                }
            }

            return(false);
        }
示例#18
0
    public override void ResultServerExec(IResultControl control)
    {
        base.ResultServerExec(control);
        Actor actor = ActorManager.Singleton.Lookup(TargetID);

        if (null == actor)
        {
            return;
        }
        if (actor.Type == ActorType.enMain)
        {
            MainPlayer player = actor as MainPlayer;
            //通知头像
            player.NotifyChanged((int)Actor.ENPropertyChanged.enMainHead, EnMainHeadType.enActorRelive);
        }
        if (actor.Type == ActorType.enMain || actor.Type == ActorType.enPlayer)
        {        //主控角色或其他玩家
            if (!actor.IsActorExit)
            {    //战斗中
                actor.ForceMoveToPosition(SM.RandomRoomLevel.Singleton.m_sceneCampReliveNode[actor.Camp]);
            }
        }
        if (actor.Type == ActorType.enMain && !actor.IsActorExit)
        {
            MainGame.Singleton.MainCamera.MoveAtOnce(actor);
        }
        //设置头顶血条
        ActorAction action = actor.ActionControl.AddAction(ActorAction.ENType.enReliveAction);

        if (action == null)
        {//添加复活action失败,则删除所有的action,再添加复活action
            actor.ActionControl.RemoveAll();
            actor.ActionControl.AddAction(ActorAction.ENType.enReliveAction);
        }
    }
示例#19
0
    public override void OnRemoved(IResultControl control)
    {
        base.OnRemoved(control);
        Actor self = ActorManager.Singleton.Lookup(TargetID);

        if (self == null)
        {
            Debug.LogWarning("actor is null, id is " + TargetID);
            return;
        }
        BuffInfo info = GameTable.BuffTableAsset.Lookup(BuffID);

        if (info == null)
        {
            Debug.LogWarning("buff is null, id is " + BuffID);
            return;
        }
        foreach (var item in info.BuffResultList)
        {
            if (item.ID == (int)ClassID)
            {
                self.SelfTeleport.Remove((Teleport.ENTeleportType)item.ParamList[0]);
                return;
            }
        }
    }
示例#20
0
    public override void OnRemoved(IResultControl control)
    {
        base.OnRemoved(control);
        Actor actor = ActorManager.Singleton.Lookup(TargetID);

        if (null == actor)
        {
            Debug.LogWarning("OnGetBuffEffect failed! actor is not exist! actor id=" + TargetID.ToString());
            return;
        }
        BuffInfo info = GameTable.BuffTableAsset.Lookup(BuffID);

        if (info == null)
        {
            Debug.LogWarning("OnGetBuffEffect failed! buff is not exist! buff id=" + BuffID.ToString());
            return;
        }
        if (actor.Type == ActorType.enNPC)
        {//此buff效果只对npc生效
            foreach (var item in info.BuffResultList)
            {
                if (item.ID == (int)ClassID)
                {
                    switch ((ENFearType)item.ParamList[0])
                    {
                    case ENFearType.enEscape:
                    {        //更改ai
                        actor.SelfAI = m_selfAI;
                    }
                    break;
                    }
                }
            }
        }
    }
示例#21
0
    public override void Exec(IResultControl control)
    {
        base.Exec(control);
        Actor actorTarget = ActorManager.Singleton.Lookup(TargetID);
        //Actor actorSrc = ActorManager.Singleton.Lookup(SourceID);
        int hpTarget = actorTarget.Props.GetProperty_Int32(ENProperty.hp);

        if (!m_isHit)
        {
            m_hp = 0;
        }
        if (m_isCrit)
        {
            m_hp = 2 * m_hp;
        }
        hpTarget = hpTarget - m_hp;
        if (0 >= hpTarget)
        {
            hpTarget = 0;
        }
        if (0 == hpTarget)
        {
            SResultDead deadResult = (SResultDead)control.GetContext().CreateResult((int)ENResult.Dead);
            deadResult.SourceID = this.SourceID;
            deadResult.TargetID = this.TargetID;
            control.DispatchResult(deadResult);
        }
        if (95 >= UnityEngine.Random.Range(0, 100))
        {
            m_isFly = true;
        }
    }
示例#22
0
    //根据服务器发回的数据进行结算
    public override void ResultServerExec(IResultControl control)
    {
        SkillResultInfo info = GameTable.SkillResultTableAsset.Lookup(SkillResultID);

        if (null == info)
        {
            return;
        }
        Actor target = ActorManager.Singleton.Lookup(TargetID);
        Actor source = ActorManager.Singleton.Lookup(SourceID);

        if (null == target || source == null)
        {
            return;
        }

        //没有命中
        if (!m_isHit)
        {
            return;
        }

        // 如果产生combo
        if (info.ComboNum > 0)
        {
            //m_damageModify = GetComboSkillDamageModify(SkillResultID);
            source.OnComboChanged(SkillResultID, TargetID, m_damageModify);
        }

        //目标强韧
        {
            target.OnStaminaEvent(source, out m_isFly);
        }
        if (m_isBreak || m_isFly)
        {
            target.BeHited(source, m_isBack, m_isFly, info.AnimGauge);
        }
        else if (m_isFakeBreak)
        {
            target.FakeBeHited(source);
        }
        if (info.IsPlayEffect)
        {
            target.PlayEffect(info.EffectName, info.EffectDuration, info.EffectPos, info.IsAheadBone, Vector3.zero);
        }
        if (info.IsChangeShader)
        {
            AnimationShaderParamCallback callback = target.GetBodyParentObject().GetComponent <AnimationShaderParamCallback>();
            callback.ChangeShader(info.ChangeShaderAnimName);
        }

        //战斗意志
        source.OnAddWill(WillToFight.ENAddWillType.enSkillResult, new float[2] {
            info.SFightWillGet, info.NFightWillGet
        });

        // 设置爆破点
        target.SetBlastPos(source.RealPos, source.GetBodyObject().transform.forward);
    }
示例#23
0
 public virtual IResultControl CreateResultControl()
 {
     if (null == m_resultControl)
     {
         m_resultControl = new IResultControl();
         m_resultControl.SetContext(this);
     }
     return(m_resultControl);
 }
示例#24
0
 public override void OnGetResult(IResult result, IResultControl control)
 {
     base.OnGetResult(result, control);
     if (result.ClassID == (int)ENResult.Damage)
     {
         //删除自身
         RemoveSelf();
     }
 }
示例#25
0
 public override void OnProduceResult(IResult result, IResultControl control)
 {
     base.OnProduceResult(result, control);
     if (result.ClassID == (int)ENResult.Skill)
     {
         //释放技能时, 取消潜行
         StopSneak();
     }
 }
示例#26
0
    // 服务器发送回 resultTree
    public void OnMsgSyncResultTree_S2C(PacketReader p, object state)
    {
        int            dataSize      = p.ReadInt32();
        IResultControl resultControl = BattleFactory.Singleton.GetBattleContext().CreateResultControl();

        resultControl.GetResultTree().Deserialize(p);
        resultControl.GetResultTree().ExecAllServerResult(resultControl);
        resultControl.GetResultTree().ReleaseAllResult();
    }
示例#27
0
 public void RemoveAllForDead(IResultControl control)
 {
     foreach (var buff in BuffList)
     {
         if (buff.IsNeedRemoveForDead)
         {
             buff.MarkRemove(control);
         }
     }
 }
示例#28
0
 public void OnGetResult(IResult result, IResultControl control)
 {
     foreach (IBuffEffect e in m_effects)
     {
         if (e.IsNeedResultPass)
         {
             e.OnGetResult(result, control);
         }
     }
 }
示例#29
0
    public void RemoveBuff(int buffID, IResultControl control)
    {
        Buff buff = BuffList.Find(item => item.BuffID == buffID);

        if (null == buff)
        {
            return;
        }
        buff.MarkRemove(control);
    }
示例#30
0
    public override void Exec(IResultControl control)
    {
        int value = (int)DamageValue;

        if (value <= 0)
        {
            return;
        }
        Actor target = ActorManager.Singleton.Lookup(TargetID);

        if (null == target)
        {
            return;
        }
        Actor source   = ActorManager.Singleton.Lookup(SourceID);
        float curHP    = target.ReduceHp(value);
        float multiple = 0;

        if (m_attackValue != 0)
        {
            multiple = value / m_attackValue;
        }
        target.OnHpChanged(value, m_isCrit, multiple, false);
        if (curHP <= 0)
        {//dead
            if (source != null)
            {
                source.TargetManager.ClearTarget();
            }
            {//result-dead
                IResult r = BattleFactory.Singleton.CreateResult(ENResult.Dead, SourceID, target.ID);
                if (r != null)
                {
                    r.ResultExpr(null);
                    BattleFactory.Singleton.GetBattleContext().CreateResultControl().DispatchResult(r);
                }
            }
        }
        {//伤害来源
            target.Damgaed(source);
        }
        {//战斗意志
            target.OnAddWill(WillToFight.ENAddWillType.enBeAttacked, new float[1] {
                value
            });
        }
        if (target.Type == ActorType.enNPC)
        {//npc记录被伤害数据
            (target as NPC).DamagedRecord(source.ID, value);
        }
        if (target.Type == ActorType.enFollow)
        {//同伴记录被伤害 数据
            target.DamagedRecord(source.ID, value);
        }
    }