Example #1
0
    public static void DoLoopEvent(SkillStage stage, int curTick)
    {
        excel_skill_stage stageInfo = stage.mStageInfo;

        if (stageInfo.events == null)
        {
            return;
        }
        for (int i = 0; i < stageInfo.events.Length; ++i)
        {
            int eventID = stageInfo.events[i];
            excel_skill_event eventInfo = excel_skill_event.Find(eventID);
            if ((int)SkillEventTriggerType.Loop != eventInfo.triggerType)
            {
                continue;
            }
            if (!IsEventTrait(SkillEventTrait.Server, eventInfo))
            {
                continue;
            }
            int tick = curTick - eventInfo.triggerParam1;
            if (tick >= 0 && eventInfo.triggerParam2 > 0 && tick % eventInfo.triggerParam2 == 0)
            {
                SkillEventRegister.SkillEventMethod e = null;
                SkillEventType type = (SkillEventType)eventInfo.eventType;
                if (!SkillEventRegister.events.TryGetValue(type, out e))
                {
                    continue;
                }
                e(stage.mSkillContext.mOwner, null, stage.mSkillContext, eventInfo);
            }
        }
    }
Example #2
0
    public void BeginSkill()
    {
        int firstStageID = -1;

        for (int i = 0; i < mSkillInfo.stages.Length; ++i)
        {
            int stageID = mSkillInfo.stages[i];
            excel_skill_stage stageInfo = excel_skill_stage.Find(stageID);
            if (stageInfo == null)
            {
                Debug.LogErrorFormat("Error: 找不到技能段{0},技能ID:{1}", stageID, mSkillInfo.id);
                continue;
            }
            if (SkillStage.IsStageTrait(SkillStageTrait.FirstStage, stageInfo))
            {
                firstStageID = stageInfo.id;
                break;
            }
        }
        if (firstStageID < 0)
        {
            Debug.LogErrorFormat("Error: 找不到初始技能段,技能ID:{0}", mSkillInfo.id);
            return;
        }
        SetStage(firstStageID);
        if (mCurStage == null)
        {
            mSkillState = SkillState.Break;
            return;
        }

        Character skillTarget = mSkillContext.SkillTarget;

        if (mSkillInfo.targetType != (int)SkillTargetType.All && skillTarget != null)
        {
            Vector3 dir = skillTarget.Position - Owner.Position;
            Owner.Direction = dir;
        }

        if (!SkillStage.IsStageTrait(SkillStageTrait.AllowMove, mCurStage.mStageInfo) ||
            SkillStage.IsStageTrait(SkillStageTrait.MoveBreak, mCurStage.mStageInfo))
        {
            //Owner.StopMove(false);
        }

        mSkillState = SkillState.Using;

        // 自己客户端放技能通知服务器开始放技能;
        if (GameController.IsConntrller(Owner))
        {
            SkillBegin req = new SkillBegin();
            req.uid       = Owner.gid;
            req.skillID   = mSkillInfo.id;
            req.position  = Vector3Packat.FromVector3(Owner.Position);
            req.direction = Vector3Packat.FromVector3(Owner.Direction);
            NetWork.SendPacket(CTS.CTS_SkillBegin, req, null);
        }
    }
Example #3
0
    public static bool IsStageTrait(SkillStageTrait trait, excel_skill_stage stageInfo)
    {
        if (stageInfo == null)
        {
            return(false);
        }
        int flag = 1 << (int)trait;

        if ((stageInfo.trait & flag) != 0)
        {
            return(true);
        }
        return(false);
    }
Example #4
0
    public static void DoEvent(SkillStage stage, SkillEventTriggerType triggerType, int param1 = -1, int param2 = -1)
    {
        excel_skill_stage stageInfo = stage.mStageInfo;

        if (stageInfo.events == null)
        {
            return;
        }
        for (int i = 0; i < stageInfo.events.Length; ++i)
        {
            int eventID = stageInfo.events[i];
            excel_skill_event eventInfo = excel_skill_event.Find(eventID);
            if ((int)triggerType != eventInfo.triggerType)
            {
                continue;
            }
            if (!IsEventTrait(SkillEventTrait.Server, eventInfo))
            {
                continue;
            }
            if (param1 != -1 && param1 != eventInfo.triggerParam1)
            {
                continue;
            }
            if (param2 != -1 && param2 != eventInfo.triggerParam2)
            {
                continue;
            }

            SkillEventRegister.SkillEventMethod e = null;
            SkillEventType type = (SkillEventType)eventInfo.eventType;
            if (!SkillEventRegister.events.TryGetValue(type, out e))
            {
                continue;
            }
            e(stage.Owner, null, stage.mSkillContext, eventInfo);
        }
    }
Example #5
0
    public void BeginSkill()
    {
        int firstStageID = -1;

        for (int i = 0; i < mSkillInfo.stages.Length; ++i)
        {
            int stageID = mSkillInfo.stages[i];
            excel_skill_stage stageInfo = excel_skill_stage.Find(stageID);
            if (stageInfo == null)
            {
                Debug.LogError("Error: 找不到技能段{0},技能ID:{1}", stageID, mSkillInfo.id);
                continue;
            }
            if (SkillStage.IsStageTrait(SkillStageTrait.FirstStage, stageInfo))
            {
                firstStageID = stageInfo.id;
                break;
            }
        }
        if (firstStageID < 0)
        {
            Debug.LogError("Error: 找不到初始技能段,技能ID:{0}", mSkillInfo.id);
            return;
        }
        SetStage(firstStageID);
        if (mCurStage == null)
        {
            mSkillState = SkillState.Break;
            return;
        }

        Character skillTarget = mSkillContext.SkillTarget;

        if (mSkillInfo.targetType != (int)SkillTargetType.All && skillTarget != null)
        {
            Vector3 dir = skillTarget.Position - Owner.Position;
            Owner.Direction = dir;
        }

        if (!SkillStage.IsStageTrait(SkillStageTrait.AllowMove, mCurStage.mStageInfo) ||
            SkillStage.IsStageTrait(SkillStageTrait.MoveBreak, mCurStage.mStageInfo))
        {
            Owner.StopMove(false);
        }

        mSkillState = SkillState.Using;

        SkillBegin msg = new SkillBegin();

        msg.uid       = Owner.gid;
        msg.skillID   = SkillID;
        msg.position  = Vector3Packat.FromVector3(Owner.Position);
        msg.direction = Vector3Packat.FromVector3(Owner.Direction);

        Scene scn = Owner.mScene;

        for (int i = 0; i < scn.GetPlayerCount(); ++i)
        {
            Player player = scn.GetPlayerByIndex(i);
            if (player == Owner)
            {
                continue;
            }
            NetWork.NotifyMessage(player.UserID, STC.STC_SkillBegin, msg);
        }
    }