public static ISkillSystem CreateSkillSystem(IClientGlobal clientGlobal) { if (m_SkillSys == null) { m_SkillSys = new SkillSystem(clientGlobal); } return(m_SkillSys); }
// 退出状态 public override void Leave() { PlayerSkillPart playerSkill = m_SkillPart as PlayerSkillPart; if (SkillSystem.GetClientGlobal().IsMainPlayer(playerSkill.GetMaster())) { // Log.Trace("Leave ..." + this.GetType().Name); } }
public override void Play(ISkillAttacker attacker, SkillEffect se) { if (attacker == null) { return; } IEntity en = attacker.GetGameObject(); if (en == null) { return; } if (!SkillSystem.GetClientGlobal().IsMainPlayer(en)) {//不是主角不震屏 return; } ShakeCameraNodeProp prop = m_NodeProp as ShakeCameraNodeProp; if (prop == null) { return; } IRenderSystem renderSys = RareEngine.Instance().GetRenderSystem(); if (renderSys == null) { Log.Error("RenderSystem is null!"); return; } string camName = "MainCamera"; ICamera cam = renderSys.GetCamera(ref camName); if (cam != null) { ICameraCtrl cc = cam.GetCameraCtrl(); if (cc != null) { // public float duration = 0.2f;//持续时间 // public float strength = 0.5f;//振幅 // public int vibrato = 10;//频率 //@brief 开始振动 //@param fAmplitude 振幅 //@param fFrequency 频率 //@param fCycle 周期 //@param fTime 持续时间 cc.StartShake(prop.strength, prop.vibrato, 1, prop.duration); } } else { //编辑器代码实现 Camera.main.DOShakePosition(prop.duration, prop.strength, prop.vibrato, 0); } }
public SkillStateBase(Engine.Utility.StateMachine <ISkillPart> machine, ISkillPart skillpart) { m_Statemachine = machine; m_SkillPart = skillpart; if (skillpart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART) { PlayerSkillPart skill = skillpart as PlayerSkillPart; m_isMainPlayer = SkillSystem.GetClientGlobal().IsMainPlayer(skill.GetMaster()); m_caster = skill.Caster; } }
public bool Conform(INPC en) { IClientGlobal cg = SkillSystem.GetClientGlobal(); IEntity player = cg.MainPlayer; ISkillPart skillPart = (ISkillPart)player.GetPart(EntityPart.Skill); SkillDatabase db = skillPart.GetCurSkillDataBase(); if (db != null) { float dis = EntitySystem.EntityHelper.GetEntityDistance(player, en); if (dis <= db.dwAttackDis) { return(true); } } return(false); }
void ShowFlashColor(IEntity defender) { Profiler.BeginSample("ShowFlashColor"); INPC npc = defender as INPC; if (npc != null) { int baseID = npc.GetProp((int)EntityProp.BaseID); NpcDataBase npcDb = GameTableManager.Instance.GetTableItem <NpcDataBase>((uint)baseID); if (npcDb != null) { uint monsterType = npcDb.dwMonsterType; if (monsterType == 0) { return; } List <uint> configList = SkillSystem.GetColorList(monsterType); if (configList != null) { if (configList.Count > 0) { uint show = configList[0]; if (show == 1) { if (configList.Count != 6) { // Log.Error("全局配置FlashColor 长度错误 ,检查配置"); } else { FlashColor fc = new FlashColor(); fc.color = new Color(configList[2] * 1.0f / 255, configList[3] * 1.0f / 255, configList[4] * 1.0f / 255, configList[5] * 1.0f / 255); fc.fLift = configList[1] * 1.0f / 1000; defender.SendMessage(EntityMessage.EntityCommand_FlashColor, fc); // Log.Error("flash color " + defender.GetName()); } } } } } } Profiler.EndSample(); }
// 进入状态 public override void Enter(object param) { IEntity target = skillPart.GetSkillTarget(); // 只有主角会进入战斗状态 if (skillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART && EntitySystem.EntityHelper.IsMainPlayer(skillPart.GetMaster())) { PlayerSkillPart playerSkill = skillPart as PlayerSkillPart; if (playerSkill != null) { playerSkill.SkillStartPlayTime = Time.realtimeSinceStartup; playerSkill.SetFighting(true); } } SkillDatabase skilltable = skillPart.GetCurSkillDataBase(); if (skilltable == null) { return; } // 朝向目标 if (target != null) { if (skilltable.targetType != (int)SkillTargetType.TargetForwardPoint) { skillPart.GetMaster().SendMessage(EntityMessage.EntityCommand_LookTarget, target.GetPos()); } } database = skilltable; //准备时间结束 发送结束消息 if (SkillSystem.GetClientGlobal().IsMainPlayer(skillPart.GetMaster()) && skilltable.dwReadTime > 0) // 非瞬发技能 { //读条技能 Client.stUninterruptMagic evenparam = new Client.stUninterruptMagic(); evenparam.time = database.dwReadTime; evenparam.type = GameCmd.UninterruptActionType.UninterruptActionType_SkillCJ; evenparam.uid = skillPart.GetMaster().GetUID(); EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSSTART, evenparam); } preparetime = 0; }
// 退出状态 public override void Leave() { PlayerSkillPart playerSkill = m_SkillPart as PlayerSkillPart; if (playerSkill.IsMainPlayer()) { Log.LogGroup("ZDY", " main player leave skilloverstate"); } //SkillEffect skillEffect = m_caster.EffectNode; //if(skillEffect != null) //{//此处调用stop 会影响sing技能的放置特效 此处无意义 如果以后要调用stop 可以加break函数区分stop // skillEffect.Stop(); //} playerSkill.Master.SendMessage(EntityMessage.EntityCommand_ChangeMoveSpeedFact, (object)1f); if (SkillSystem.GetClientGlobal().IsMainPlayer(playerSkill.GetMaster())) { stForbiddenJoystick info = new stForbiddenJoystick(); info.playerID = playerSkill.Master.GetUID(); info.bFobidden = false; EventEngine.Instance().DispatchEvent((int)GameEventID.SKILL_FORBIDDENJOYSTICK, info); } }
public void ReceiveBuffList(List <stStateValue> list) { IEntity en = m_Master; for (int i = 0; i < list.Count; i++) { var state = list[i]; ChangeCreatureByBuff(en, state.baseid, true); //客户端使用毫秒的精度 state.ltime = state.ltime * 1000; stBuffData buffData; if (buffDic.TryGetValue(state.thisid, out buffData)) { if (buffData.buffDataDic.ContainsKey(state.thisid)) { buffData.buffDataDic[state.thisid] = state; } else { buffData.buffDataDic.Add(state.thisid, state); } // Buff Update // 更新时间 } else { buffData = new stBuffData(); buffData.buffid = state.thisid; buffData.buffDataDic = new Dictionary <uint, stStateValue>(); buffData.buffDataDic.Add(state.thisid, state); buffDic.Add(state.thisid, buffData); AddBuffEffect(state.baseid, state.thisid); if (en != null) { stAddBuff addBuff = new stAddBuff(); addBuff.buffid = state.baseid; addBuff.uid = en.GetUID(); addBuff.level = state.level; addBuff.lTime = state.ltime; addBuff.buffThisID = state.thisid; EventEngine.Instance().DispatchEvent((int)GameEventID.BUFF_ADDTOTARGETBUFF, addBuff); } } } if (list.Count > 0) { int len = list.Count; stStateValue state = list[len - 1]; BuffDataBase bdb = GameTableManager.Instance.GetTableItem <BuffDataBase>(state.baseid); if (bdb != null) { string str = bdb.buffColor; Color c = SkillSystem.GetColorByStr(str); if (c == null) { return; } if (en != null) { m_buffColorEntity = en; en.SendMessage(EntityMessage.EntityCommond_SetColor, c); if (TimerAxis.Instance().IsExist(m_ucolorCountDownTimerID, this)) { TimerAxis.Instance().KillTimer(m_ucolorCountDownTimerID, this); } TimerAxis.Instance().SetTimer(m_ucolorCountDownTimerID, state.ltime, this, 1); } } } }
public override void Play(ISkillAttacker attacker, SkillEffect se) { m_ef = se; Transform attacker_node = attacker.GetRoot(); if (attacker_node == null) { return; } PlaceFxNodeProp prop = m_NodeProp as PlaceFxNodeProp; if (prop == null) { return; } // Engine.Utility.Log.Error("play PlaceFxNodeProp {0}", prop.fx_name); string stateName = prop.nodeState; int stateIndex = 0; if (!string.IsNullOrEmpty(stateName)) { Client.SkillState state = SkillSystem.GetSkillStateByString(stateName); stateIndex = (int)state - 1; } if (stateIndex < 0) { stateIndex = 0; } Vector3 pos = attacker_node.TransformPoint(prop.position); //Vector3 vscale = attacker_node.localScale * prop.scale; Vector3 vscale = Vector3.one * prop.scale; Vector3 angles = attacker_node.eulerAngles; angles += prop.rotation; if (prop.by_target) { pos = se.GetPlayEffectInitPos() + prop.position; } int level = 0; if (attacker != null) { if (attacker.GetSkillPart() != null) { level = attacker.GetSkillPart().FxLevel; } } m_uEffectID = helper.ReqPlayFx(prop.fx_name, pos, angles, vscale, level); m_startTime = Time.time; uint skillID = se.CurSkillID; m_curDb = GameTableManager.Instance.GetTableItem <table.SkillDatabase>(skillID, 1); if (m_curDb != null) { if (stateIndex >= 0) { if (!string.IsNullOrEmpty(m_curDb.skillEffectTime)) { string[] timeArray = SkillSystem.GetTimeArrayByString(m_curDb.skillEffectTime); if (stateIndex < timeArray.Length) { uint time = 1000; if (uint.TryParse(timeArray[stateIndex], out time)) { m_uEffectLen = time; } } } } } // m_bRmove = false; IEffect ef = GetEffectByID(m_uEffectID); if (ef != null) { Transform trans = ef.GetNodeTransForm(); if (trans == null) { return; } m_placeHandle = trans.gameObject.GetComponent <PlaceFxHandle>(); if (m_placeHandle == null) { m_placeHandle = trans.gameObject.AddComponent <PlaceFxHandle>(); } } m_placeHandle.m_attacker = attacker; m_placeHandle.m_len = m_uEffectLen; m_placeHandle.m_effectid = m_uEffectID; m_placeHandle.m_placeNode = this; m_placeHandle.InitPlaceFx(); }
/* * 技能范围 对园和扇形是半径 对于矩形是长 * 技能范围参数 对园和扇形是角度 对于矩形是宽 */ /// <summary> /// /// </summary> /// <param name="en">技能目标</param> /// <returns></returns> public bool Conform(IPlayer en) { if (en == null) { Log.LogGroup("ZDY", " confirm player is null"); return(false); } IClientGlobal cg = SkillSystem.GetClientGlobal(); IEntity player = cg.MainPlayer; ISkillPart skillPart = (ISkillPart)player.GetPart(EntityPart.Skill); SkillDatabase db = skillPart.GetCurSkillDataBase(); Vector3 mytempPos = player.GetPos(); Vector3 targettempPos = en.GetPos(); Vector2 mypos = new Vector2(mytempPos.x, mytempPos.z); Vector2 targetpos = new Vector2(targettempPos.x, targettempPos.z); float dis = EntitySystem.EntityHelper.GetEntityDistance(player, en); if (db != null) { if (db.areaType == 0) { //点 } else if (db.areaType == 1) { //矩形 Log.Error("not implementations "); return(false); } else if (db.areaType == 2) { Transform trans = player.GetTransForm(); if (trans == null) { return(false); } //扇形 Vector2 myDir = new Vector2(trans.forward.x, trans.forward.z); Vector2 dir = targetpos - mypos; float angle = Vector2.Angle(myDir.normalized, dir.normalized); float dbAngle = db.skillAreaParam / 2; if (dbAngle > angle) { if (dis < db.skillArea) { return(true); } } return(false); } else if (db.areaType == 3) { //园 if (dis < db.skillArea) { return(true); } } } return(false); }
private void SendPlayDefenerAniMessage(IEntity defender, string aniName) { CreatureState state = defender.GetCurState(); ShowFlashColor(defender); if (state != CreatureState.Dead) { bool bRide = (bool)defender.SendMessage(EntityMessage.EntityCommond_IsRide, null); if (bRide) { return; } SkillState skillState = GetTargetSkillState(defender); if (skillState != SkillState.Attack && skillState != SkillState.Prepare) { if (defender.GetCurState() == CreatureState.Contrl) { return; } if (state != CreatureState.Move) { Client.IControllerSystem cs = m_ClientGlobal.GetControllerSystem(); if (cs != null) { Client.ICombatRobot robot = cs.GetCombatRobot(); if (robot.Status == CombatRobotStatus.RUNNING) { if (SkillSystem.GetClientGlobal().IsMainPlayer(defender.GetID())) {//自动挂机 不播受击 return; } } } INPC npc = defender as INPC; if (npc != null) { int baseID = npc.GetProp((int)EntityProp.BaseID); NpcDataBase ndb = GameTableManager.Instance.GetTableItem <NpcDataBase>((uint)baseID); if (ndb != null) { if (ndb.dwMonsterType == 3) { return; } } } //defender.SendMessage( EntityMessage.EntityCommand_StopMove , defender.GetPos() ); //移动不播放受击动作 PlayAni anim_param = new PlayAni(); anim_param.strAcionName = aniName; anim_param.fSpeed = 1; anim_param.nStartFrame = 0; anim_param.nLoop = 1; anim_param.fBlendTime = 0.2f; anim_param.aniCallback = OnHitCallback; anim_param.callbackParam = defender; // if (SkillSystem.GetClientGlobal().IsMainPlayer(m_Master.GetID())) // { // Engine.Utility.Log.Info("技能 播放受击动作 {0} {1}", anim_param.strAcionName, state); // } defender.SendMessage(EntityMessage.EntityCommand_PlayAni, anim_param); } else { if (SkillSystem.GetClientGlobal().IsMainPlayer(m_Master.GetID())) { //Engine.Utility.Log.Info("移动不播放受击动作"); } } } else { // Engine.Utility.Log.Error(string.Format("{0}技能状态错误不能播放受击动作 状态:{1}", defender.GetName(), GetTargetSkillState(defender))); } } }
// 进入状态 public override void Enter(object param) { if (m_SkillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART) { PlayerSkillPart playerSkill = m_SkillPart as PlayerSkillPart; if (SkillSystem.GetClientGlobal().IsMainPlayer(playerSkill.GetMaster())) { // Log.LogGroup("ZDY", "mainpalyer enter skilloverstate"); if (playerSkill != null) { playerSkill.CurSkillID = 0; } //Log.LogGroup("ZCX", "Enter ..." + this.GetType().Name + playerSkill.CurSkillID); stForbiddenJoystick info = new stForbiddenJoystick(); info.playerID = playerSkill.Master.GetUID(); info.bFobidden = false; EventEngine.Instance().DispatchEvent((int)GameEventID.SKILL_FORBIDDENJOYSTICK, info); } IEntity casetr = playerSkill.GetMaster(); if (casetr == null) { return; } playerSkill.Master.SendMessage(EntityMessage.EntityCommond_IgnoreMoveAction, false); playerSkill.Master.SendMessage(EntityMessage.EntityCommand_ChangeMoveSpeedFact, (object)1f); CreatureState playerState = playerSkill.GetMaster().GetCurState(); if (playerState != CreatureState.Dead) { // 不能立即切换到Normal状态 PlayAni anim_param = new PlayAni(); bool isMove = (bool)m_SkillPart.GetMaster().SendMessage(EntityMessage.EntityCommand_IsMove, null); if (isMove) { anim_param.strAcionName = EntityAction.Run; } else { if (casetr.GetEntityType() == EntityType.EntityType_Player) { anim_param.strAcionName = EntityAction.Stand_Combat; } else { anim_param.strAcionName = EntityAction.Stand; } } anim_param.fSpeed = 1; anim_param.nStartFrame = 0; anim_param.nLoop = -1; anim_param.fBlendTime = 0.2f; m_SkillPart.GetMaster().SendMessage(EntityMessage.EntityCommand_PlayAni, anim_param); //如果在挂机 不能立即切换到Normal状态 主角才派发事件 if (IsMainPlayer()) { IControllerSystem cs = playerSkill.GetCtrollerSys(); if (cs == null) { Log.Error("ExecuteCmd: ControllerSystem is null"); return; } Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLNONESTATE_ENTER, new stSkillStateEnter() { state = this.m_nStateID, uid = playerSkill.GetMaster().GetUID() }); } } } }
public uint CreateEffect(long lTargetID, uint nEffectViewID) { IPlayer player = SkillSystem.GetClientGlobal().MainPlayer; if (player == null) { Log.LogGroup("ZDY", "player is null"); return(0); } IEntity target = EntitySystem.EntityHelper.GetEntity(lTargetID); FxResDataBase edb = GameTableManager.Instance.GetTableItem <FxResDataBase>(nEffectViewID); if (edb != null && target != null) { if (nEffectViewID == 1002 && EntitySystem.EntityHelper.IsMainPlayer(target)) { // Log.Error("nEffectViewID:{0}", nEffectViewID); } if (target.GetNode() == null) { Log.LogGroup("ZDY", "target getnode is null"); return(0); } Transform enTrans = target.GetTransForm(); if (enTrans == null) { Log.LogGroup("ZDY", "target getnode getransform is null"); return(0); } if (player == null) { return(0); } if (player.GetTransForm() == null) { Log.LogGroup("ZDY", "player GetTransForm is null"); return(0); } bool bRide = (bool)target.SendMessage(EntityMessage.EntityCommond_IsRide, null); Vector3 tarToPlayer = enTrans.position - player.GetTransForm().position; tarToPlayer.y = 0; Vector3 cross = Vector3.Cross(tarToPlayer, Vector3.forward); float ang = Vector3.Angle(tarToPlayer, Vector3.forward); if (cross.y < 0) { ang = 360 - ang; } // Log.Error("旋转角度 " + ang); Vector3 rot = Quaternion.AngleAxis(ang, Vector3.up).eulerAngles; AddLinkEffect node = new AddLinkEffect(); node.nFollowType = (int)edb.flowType; node.rotate = -rot;// new Vector3(edb.rotate[0], edb.rotate[1], edb.rotate[2]); node.vOffset = bRide ? new Vector3(edb.rideoffset[0], edb.rideoffset[1], edb.rideoffset[2]) : new Vector3(edb.offset[0], edb.offset[1], edb.offset[2]); // 使用资源配置表 ResourceDataBase resDB = GameTableManager.Instance.GetTableItem <ResourceDataBase>(edb.resPath); if (resDB == null) { Log.LogGroup("ZDY", "EffectViewFactory:找不到特效资源路径配置{0}", edb.resPath); return(0); } node.strEffectName = resDB.strPath; node.strLinkName = edb.attachNode; if (edb.bFollowRole) { if (node.strEffectName.Length != 0) { int id = (int)target.SendMessage(EntityMessage.EntityCommand_AddLinkEffect, node); return((uint)id); } } else { int level = 0; if (target != null) { ISkillPart sp = target.GetPart(EntityPart.Skill) as ISkillPart; if (sp != null) { level = sp.FxLevel; } } return(SkillEffectManager.Helper.ReqPlayHitFx(node.strEffectName, target.GetPos(), node.rotate, Vector3.one, level)); } } return(0); }
// 添加buff表现特效效果 void AddBuffEffect(uint buffID, uint runID) { if (m_Master == null) { return; } if (m_Master.GetNode() == null) { if (!m_unCreateEffectList.Contains(runID)) { m_unCreateEffectList.Add(runID); } } else { CreateEffect(runID); } BuffDataBase db = GetBuffDataBase(runID); if (db == null) { //Log.Error("读取Buff配置数据出错:{0}", buffID); return; } for (int i = 0; i < db.buffEffect.Count; i++) { var item = db.buffEffect[i]; if (item == 0) { continue; } FxResDataBase edb = GameTableManager.Instance.GetTableItem <FxResDataBase>(item); if (edb == null) { // Log.Error("get FxResDataBase is null id is " + item.ToString()); return; } string aniName = edb.targetAniName; if (string.IsNullOrEmpty(aniName)) { return; } PlayAni anim_param = new PlayAni(); anim_param.strAcionName = aniName; anim_param.fSpeed = 1; anim_param.nStartFrame = 0; anim_param.nLoop = edb.playAniTime; //if(db.buffBigType == (int)BuffBigType.Control) //{ // anim_param.nLoop = -1; //} //else //{ // anim_param.nLoop = 1; //} anim_param.fBlendTime = 0.2f; bool bRide = (bool)m_Master.SendMessage(EntityMessage.EntityCommond_IsRide, null); if (bRide) { return; } if (m_Master.GetCurState() == CreatureState.Contrl) {//眩晕不播放其他动画 anim_param.aniCallback = OnHitCallback; anim_param.callbackParam = m_Master; if (SkillSystem.GetClientGlobal().IsMainPlayer(m_Master.GetID())) { Engine.Utility.Log.Info("buff 播放眩晕动作 {0}", anim_param.strAcionName); } m_Master.SendMessage(EntityMessage.EntityCommand_PlayAni, anim_param); } else { if (m_Master.GetCurState() != CreatureState.Move) {//移动中不播放受击动作 Client.IControllerSystem cs = m_ClientGlobal.GetControllerSystem(); if (cs != null) { Client.ICombatRobot robot = cs.GetCombatRobot(); if (robot.Status == CombatRobotStatus.RUNNING) { if (SkillSystem.GetClientGlobal().IsMainPlayer(m_Master.GetID())) {//自动挂机 不播受击 return; } } } m_Master.SendMessage(EntityMessage.EntityCommand_PlayAni, anim_param); } } } }
public PlayerBuffPart(IClientGlobal clientGlobal, SkillSystem skillSystem) { m_ClientGlobal = clientGlobal; TimerAxis.Instance().SetTimer(m_ubuffCountDownTimerID, 500, this); }
// 进入状态 public override void Enter(object param) { Engine.Utility.EventEngine.Instance().AddEventListener((int)Client.GameEventID.ENTITYSYSTEM_ENTITYSTOPMOVE, OnEvent); Engine.Utility.EventEngine.Instance().AddEventListener((int)Client.GameEventID.ENTITYSYSTEM_ENTITYBEGINMOVE, OnEvent); m_skillDoubleDb = null; m_fTotalTime = 0; skillPart = m_SkillPart; // m_skillDatabase = skillPart.GetCurSkillDataBase(); if (skillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART) { PlayerSkillPart playerSkill = skillPart as PlayerSkillPart; //m_nDoubleHitSkillId = (uint)playerSkill.NextSkillID; if (playerSkill.IsMainPlayer()) { Log.LogGroup("ZDY", "mainpalyer enter skillattackstate================"); } m_skillDatabase = GameTableManager.Instance.GetTableItem <SkillDatabase>(playerSkill.CurSkillID, 1); if (m_skillDatabase == null) { m_Statemachine.ChangeState((int)SkillState.None, null); return; } m_uDbJiangzhiTime = m_skillDatabase.wdStiffTime; playerSkill.SkillStiffTime = 0; m_skillDoubleDb = GameTableManager.Instance.GetTableItem <SkillDoubleHitDataBase>(playerSkill.CurSkillID); if (IsMainPlayer()) { Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLSYSTEM_USESKILL, playerSkill.CurSkillID); } if (m_skillDatabase.dwMoveType == (uint)SkillMoveType.FastMove) { //处理位移技能 Move move = new Move(); Vector3 targePos = playerSkill.Master.GetPos(); if (playerSkill.GetSkillTarget() != null) { targePos = playerSkill.GetSkillTarget().GetPos(); Vector3 dir = targePos - playerSkill.Master.GetPos(); targePos = targePos - dir.normalized * 1f; move.m_target = targePos; // Vector3 lookat = playerSkill.GetSkillTarget().GetNode().GetTransForm().forward; } else { m_Statemachine.ChangeState((int)SkillState.None, playerSkill); Log.LogGroup("ZDY", "skilltarget is null"); return; } move.m_ignoreStand = true; if (Engine.Utility.Log.MaxLogLevel >= Engine.Utility.LogLevel.LogLevel_Group) { Log.LogGroup("ZDY", "冲锋 目标位置 " + targePos); } AnimationState ani = playerSkill.AttackAnimState; if (ani == null) { m_Statemachine.ChangeState((int)SkillState.None, playerSkill); Log.LogGroup("ZDY", "ani is null"); return; } move.strRunAct = ani.name; int curSpeed = playerSkill.Master.GetProp((int)WorldObjProp.MoveSpeed); uint flySpeed = m_skillDatabase.flyspeed; float speedFact = 1; if (flySpeed != 0) { speedFact = flySpeed * 1.0f / curSpeed; } Log.LogGroup("ZDY", "冲锋倍数 " + speedFact); playerSkill.Master.SendMessage(EntityMessage.EntityCommond_IgnoreMoveAction, true); playerSkill.Master.SendMessage(EntityMessage.EntityCommand_ChangeMoveSpeedFact, (object)speedFact); float dis = Vector3.Distance(targePos, playerSkill.Master.GetPos()); if (dis > 1) { Log.LogGroup("ZDY", " send moveto "); playerSkill.Master.SendMessage(EntityMessage.EntityCommand_MoveTo, (object)move); } playerSkill.gotoPos = targePos; } else { playerSkill.Master.SendMessage(EntityMessage.EntityCommand_ChangeMoveSpeedFact, (object)1f); } if (m_skillDatabase.useSkillType == (int)UseSkillType.GuideNoSlider) { if (m_skillDatabase.dwMoveType == (int)SkillMoveType.SkillOverMove) { playerSkill.Master.SendMessage(EntityMessage.EntityCommand_SetVisible, false); } if (m_skillDatabase.wdStiffTime == 0) {//狂扫八方的技能 playerSkill.Master.SendMessage(EntityMessage.EntityCommond_IgnoreMoveAction, true); } } else if (m_skillDatabase.useSkillType == (int)UseSkillType.GuideSlider) { if (playerSkill.IsMainPlayer()) { Client.stUninterruptMagic evenparam = new Client.stUninterruptMagic(); evenparam.time = m_skillDatabase.dwGuideTime; evenparam.type = GameCmd.UninterruptActionType.UninterruptActionType_SkillCJ; evenparam.uid = SkillSystem.GetClientGlobal().MainPlayer.GetUID(); EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSSTART, evenparam); } playerSkill.Master.SendMessage(EntityMessage.EntityCommond_IgnoreMoveAction, true); } // if (m_skillDatabase.dwUseMethod == (int)UseMethod.ContinueLock) { playerSkill.Master.SendMessage(EntityMessage.EntityCommand_SetVisible, false); } INPC npc = playerSkill.Master as INPC; if (npc != null) { int masterID = npc.GetProp((int)NPCProp.Masterid); if (masterID == PlayerSkillPart.m_ClientGlobal.MainPlayer.GetID()) { /* Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLCD_BEGIN, playerSkill.CurSkillID);*/ } } } }