Esempio n. 1
0
    static void SkillNotify(byte[] data)
    {
        Scene scn = SceneSystem.Instance.mCurrentScene;

        if (scn == null)
        {
            return;
        }
        ReqSkill  reqSkill = ProtoBufUtils.Deserialize <ReqSkill>(data);
        Character caster   = scn.GetCharacter(reqSkill.casterID);

        if (caster == null)
        {
            return;
        }

        caster.Position  = reqSkill.position.ToVector3();
        caster.Direction = reqSkill.direction.ToVector3();

        SkillHandle handle = new SkillHandle();

        handle.skillID       = reqSkill.skillID;
        handle.caster        = caster;
        handle.autoTargetPos = reqSkill.autoTargetPos;
        handle.targetPos     = reqSkill.targetPos.ToVector3();
        handle.skillTargetID = reqSkill.targetID;
        SkillHandle.UseSkill(handle);
    }
Esempio n. 2
0
    public ReqSkill SkillShip(UserShip ship)
    {
        ReqSkill component = new ReqSkill();

        component.SkillShip(ship);
        return(component);
    }
Esempio n. 3
0
        static void RequestSkill(byte[] data, Action5001 action)
        {
            ReqSkill  req = ProtoBufUtils.Deserialize <ReqSkill>(data);
            Character cha = SceneManager.Instance.FindCharacter(req.casterID);

            if (cha == null)
            {
                return;
            }
            SkillHandle handle = new SkillHandle();

            handle.skillID        = req.skillID;
            handle.caster         = cha;
            handle.skillTargetID  = req.targetID;
            handle.autoTargetPos  = req.autoTargetPos;
            handle.targetPos      = req.targetPos.ToVector3();
            handle.skillEndMethod = null;
            SkillHandle.UseSkill(handle);
        }
Esempio n. 4
0
    public void DoSkill(int skillID, bool autoTarget, Vector3 targetPos)
    {
        Player player = GameController.mMainPlayer;

        if (player == null)
        {
            return;
        }
        if (player.IsCannotFlag(CannotFlag.CannotSkill))
        {
            return;
        }
        Character target = player.GetTarget();

        if (GameApp.Instance.directGame)
        {
            SkillHandle handle = new SkillHandle();
            handle.skillID       = skillID;
            handle.caster        = player;
            handle.autoTargetPos = autoTarget;
            handle.targetPos     = targetPos;
            handle.skillTargetID = 0;
            SkillHandle.UseSkill(handle);
        }
        else
        {
            ReqSkill reqSkill = new ReqSkill();
            reqSkill.casterID      = player.gid;
            reqSkill.skillID       = skillID;
            reqSkill.position      = Vector3Packat.FromVector3(player.Position);
            reqSkill.direction     = Vector3Packat.FromVector3(player.Direction);
            reqSkill.targetID      = target == null ? 0 : target.gid;
            reqSkill.autoTargetPos = autoTarget;
            reqSkill.targetPos     = Vector3Packat.FromVector3(targetPos);
            NetWork.SendPacket <ReqSkill>(CTS.CTS_SkillReq, reqSkill, null);
        }
    }
 public ReqSkill SkillShip(UserShip ship)
 {
     ReqSkill component = new ReqSkill();
     component.SkillShip(ship);
     return component;
 }
 private void StartModify()
 {
     if (!this.isRequestingServer && GlobalLock.instance.CanGo)
     {
         GlobalLock.instance.GoNow();
     }
     else
     {
         return;
     }
     this.isRequestingServer = true;
     this.reqModify = ServerRequestManager.instance.SkillShip(this.targetShip);
     this.reqModify.SkillSuccess += new EventHandler<EventArgs>(this.OnModifySuccess);
     this.reqModify.SkillFail += new EventHandler<EventArgs>(this.OnModifyFail);
 }
Esempio n. 7
0
    public static SkillResult UseSkill(SkillHandle handle)
    {
        if (handle.caster == null || handle.caster.IsCannotFlag(CannotFlag.CannotSkill))
        {
            return(SkillResult.InvalidCaster);
        }
        Skill lastSkill = handle.caster.GetSkill();

        if (lastSkill != null)
        {
            SkillStage stage = lastSkill.mCurStage;
            if (stage != null)
            {
                if (SkillStage.IsStageTrait(SkillStageTrait.WaitBreakStage, stage.mStageInfo))
                {
                    if (stage.mStageEnd == null)
                    {
                        WaitBreakStage onStageEnd = new WaitBreakStage();
                        onStageEnd.nextSkillHandle = handle;
                        stage.SetBreak(SkillBreakType.OtherSkill, false, onStageEnd.OnStageEnd);
                    }

                    return(SkillResult.CannotBreak);
                }
                if (!SkillStage.IsStageTrait(SkillStageTrait.BreakSelf, stage.mStageInfo) &&
                    lastSkill.SkillID == handle.skillID)
                {
                    return(SkillResult.CannotBreak);
                }
                if (!SkillStage.IsStageTrait(SkillStageTrait.SkillBreak, stage.mStageInfo))
                {
                    return(SkillResult.CannotBreak);
                }
            }
        }

        excel_skill_list skillExcel = excel_skill_list.Find(handle.skillID);

        if (skillExcel == null)
        {
            return(SkillResult.ExcelNotExist);
        }
        Character target = handle.caster.mScene.FindCharacter(handle.skillTargetID);

        SkillTargetType targetType = (SkillTargetType)skillExcel.targetType;

        if (targetType != SkillTargetType.All)
        {
            if (target == null)
            {
                return(SkillResult.InvalidTarget);
            }
            if (targetType == SkillTargetType.Enemy && !CampSystem.IsEnemy(handle.caster, target))
            {
                return(SkillResult.InvalidTarget);
            }
            if (targetType == SkillTargetType.Friend && !CampSystem.IsFriend(handle.caster, target))
            {
                return(SkillResult.InvalidTarget);
            }
        }
        if (target == null && skillExcel.maxDistance > 0.0f)
        {
            return(SkillResult.InvalidTarget);
        }

        SkillContext context = new SkillContext();

        context.mSkillID      = handle.skillID;
        context.mOwner        = handle.caster;
        context.SkillTargetID = handle.skillTargetID;
        if (!handle.autoTargetPos)
        {
            context.TargetPos = handle.targetPos;
        }
        else
        {
            context.TargetPos = target == null ? Vector3.zero : target.Position;
        }
        Skill skill = new Skill(handle.skillID, context);

        handle.caster.SetSkill(skill);
        skill.mSkillEnd = handle.skillEndMethod;

        ReqSkill notifyMsg = new ReqSkill();

        notifyMsg.skillID       = handle.skillID;
        notifyMsg.casterID      = handle.caster.gid;
        notifyMsg.targetID      = handle.skillTargetID;
        notifyMsg.autoTargetPos = handle.autoTargetPos;
        notifyMsg.targetPos     = Vector3Packat.FromVector3(handle.targetPos);
        notifyMsg.position      = Vector3Packat.FromVector3(handle.caster.Position);
        notifyMsg.direction     = Vector3Packat.FromVector3(handle.caster.Direction);

        for (int i = 0; i < handle.caster.mScene.GetPlayerCount(); ++i)
        {
            Player player = handle.caster.mScene.GetPlayerByIndex(i);
            NetWork.NotifyMessage(player.UserID, STC.STC_SkillNotify, notifyMsg);
        }

        return(SkillResult.Success);
    }