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); }
public ReqSkill SkillShip(UserShip ship) { ReqSkill component = new ReqSkill(); component.SkillShip(ship); return(component); }
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); }
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); }
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); }