// 退出状态 public override void Leave() { Engine.Utility.EventEngine.Instance().RemoveEventListener((int)Client.GameEventID.ENTITYSYSTEM_ENTITYSTOPMOVE, OnEvent); Engine.Utility.EventEngine.Instance().RemoveEventListener((int)Client.GameEventID.ENTITYSYSTEM_ENTITYBEGINMOVE, OnEvent); if (IsMainPlayer()) { Engine.Utility.EventEngine.Instance().RemoveEventListener((int)Client.GameEventID.SKLL_LONGPRESS, OnEvent); } PlayerSkillPart playerSkill = skillPart as PlayerSkillPart; if (skillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART) { SkillDatabase database = playerSkill.GetCurSkillDataBase(); if (database == null) { return; } if (database.dwUseMethod == (int)UseMethod.ContinueLock) { playerSkill.Master.SendMessage(EntityMessage.EntityCommand_SetVisible, true); } } // playerSkill.SkillStiffTime = 0; //if (SkillSystem.GetClientGlobal().IsMainPlayer(playerSkill.GetMaster())) //{ // Log.Trace("Leave ..." + this.GetType().Name); //} //Log.Trace("skill attack state leave"); }
public override void Update(float dt) { if (m_caster != null) { m_caster.Update(dt); } totalTime += dt; if (skillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART) { PlayerSkillPart playerSkill = skillPart as PlayerSkillPart; if (playerSkill.AttackAnimState == null) { m_Statemachine.ChangeState((int)SkillState.None, null); return; } else if (playerSkill.AttackAnimState.time >= playerSkill.AttackAnimState.length) { //收招完了,结束战斗 m_Statemachine.ChangeState((int)SkillState.None, null); return; } //else if(playerSkill.AttackAnimState.time == 0) //{ // m_Statemachine.ChangeState((int)SkillState.None, null); // return; //} } if (totalTime > m_caster.GetAniTotalTime()) { // Log.Error("over state name is " + m_caster.GetAniState().name); m_Statemachine.ChangeState((int)SkillState.None, null); } }
public void InitCastSkill(uint skill_id, ISkillPart skillPart, uint attackActionID) { if (skillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART) { playerSkill = skillPart as PlayerSkillPart; SkillEffectProp skillEffectProp; if (playerSkill.SkillEffectDic.TryGetValue((int)skill_id, out skillEffectProp) == false) { skillEffectProp = playerSkill.RegisterSkill(skill_id); if (skillEffectProp == null) { Log.LogGroup("ZDY", "没有注册技能配置 {0}", skill_id.ToString()); } return; } playerSkill.NextSkillID = 0; playerSkill.CurSkillID = skill_id; playerSkill.AttackAnimState = null; playerSkill.SetFighting(true); SkillEffect skillEffect = CreateSkillEffect(skillEffectProp); Cast(skillEffect, skill_id); } }
// 进入状态 public override void Enter(object param) { totalTime = 0; skillPart = m_SkillPart; if (skillPart.GetSkillPartType() == SkillPartType.SKILL_PLAYERPART) { PlayerSkillPart playerSkill = skillPart as PlayerSkillPart; if (playerSkill.AttackAnimState != null) { // playerSkill.PlaySkillAnim("Skill005", false); //收招 string aniName = playerSkill.AttackAnimState.name + "_over"; if (playerSkill.Master.GetAnimationState(aniName) != null) { playerSkill.PlaySkillAnim(aniName, false); } } else { //Engine.Utility.Log.Trace("SkillOverState.Enter {0}技能收招动作为空!", playerSkill.GetMaster().GetName()); } playerSkill.Master.SendMessage(EntityMessage.EntityCommond_IgnoreMoveAction, false); if (playerSkill.IsMainPlayer()) { stNextSkill st = new stNextSkill(); IControllerSystem cs = playerSkill.GetCtrollerSys(); if (cs == null) { Log.Error("ExecuteCmd: ControllerSystem is null"); return; } if (cs.GetCombatRobot().Status == CombatRobotStatus.RUNNING) { if (playerSkill.IsCombo(playerSkill.CurSkillID)) {//挂机连击 st.curSkillID = playerSkill.CurSkillID; SkillDoubleHitDataBase db = GameTableManager.Instance.GetTableItem <SkillDoubleHitDataBase>((uint)playerSkill.CurSkillID); if (db != null) { st.nextSkillID = db.nextskillid; if (db.nextskillid == db.beginskillid) {//挂机第三招要收招 st.nextSkillID = 0; } EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLSYSTEM_STIFFTIMEOVER, st); } } } else {//非挂机时 插入其他技能 st.nextSkillID = 0; EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLSYSTEM_STIFFTIMEOVER, st); } } } }
// 进入状态 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 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 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);*/ } } } }