public void Exit() { SetStage(0); if (mSkillEnd != null) { mSkillEnd(SkillID); } if (mSkillContext.IsSkillContextFlag(SkillContextFlag.SyncPosOnSkillEnd)) { if (Owner != null) { NotifySetPos notify = new NotifySetPos(); notify.uid = Owner.gid; notify.position = Vector3Packat.FromVector3(Owner.Position); notify.direction = Vector3Packat.FromVector3(Owner.Direction); Scene scn = Owner.mScene; for (int i = 0; i < scn.GetPlayerCount(); ++i) { Player p = scn.GetPlayerByIndex(i); NetWork.NotifyMessage <NotifySetPos>(p.UserID, STC.STC_SetPos, notify); } } } }
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); } }
public static Vector3Packat FromVector3(Vector3 v) { Vector3Packat packet = new Vector3Packat(); packet.x = v.x; packet.y = v.y; packet.z = v.z; return(packet); }
public void LogicTick() { UpdateDirty(); if (mDirty) { float time = Time.realtimeSinceStartup - GameController.mClientStartTime; ReqPlayerMove req = new ReqPlayerMove(); req.gid = mMainPlayer.gid; req.speed = mMainPlayer.MoveSpeed; req.direction = Vector3Packat.FromVector3(mMainPlayer.Direction); req.position = Vector3Packat.FromVector3(mMainPlayer.Position); req.control = mMainPlayer.IsControl; req.timestamp = time; req.timespan = time - mLastTimeStamp; NetWork.SendPacket <ReqPlayerMove>(CTS.CTS_PlayerMove, req, null); mLastTimeStamp = time; ClearDirty(); } }
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 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); } }
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); }