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); } } }
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 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); }
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); } }
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); } }