public bool Conform(INPC en) { if (en.IsCanAttackNPC()) { return(false); } if (CommonCondition.IsPetAndSummon(en)) { return(false); } if (!CommonCondition.IsNpcCanAttackByTable(en)) { return(false); } IPlayer player = EntitySystem.m_ClientGlobal.MainPlayer; ISkillPart m_skillPart = player.GetPart(Client.EntityPart.Skill) as ISkillPart; if (m_skillPart != null) { int error = 0; if (m_skillPart.CheckCanAttackTarget(en, out error)) { return(false); } else { float dis = EntityHelper.GetEntityDistance(player, en); if (dis <= m_nRange && en.IsDead()) { return(true); } } } return(false); }
/// <summary> ///释放技能表现效果 /// </summary> /// <param name="skill_id"></param> /// <param name="skillPart"></param> /// <param name="attackActionID"></param> void FreeSkill(uint skill_id, ISkillPart skillPart, uint attackActionID) { if(m_bHideOtherPlayer) { if(IsMainPlayer()) { m_caster.InitCastSkill(skill_id, skillPart, attackActionID); } else { INPC npc = m_Master as INPC; if (npc != null) { if (!npc.IsMainPlayerSlave()) { m_caster.InitCastSkill(skill_id, skillPart, attackActionID); } } } } else { m_caster.InitCastSkill(skill_id, skillPart, attackActionID); } }
public bool Conform(IPlayer en) { if (en.IsDead()) { return(false); } if (en.IsHide()) { return(false); } IPlayer player = EntitySystem.m_ClientGlobal.MainPlayer; ISkillPart m_skillPart = player.GetPart(Client.EntityPart.Skill) as ISkillPart; if (m_skillPart != null) { int error = 0; if (!m_skillPart.CheckCanAttackTarget(en, out error)) { return(false); } else { float dis = EntityHelper.GetEntityDistance(player, en); if (dis <= m_nRange && !en.IsDead()) { return(true); } } } return(false); }
public void InitFollowFx() { if (m_attacker == null) { DestroyFx(); return; } bStart = true; bDestory = false; m_targetObj = m_attacker.GetTargetGameObject(); ISkillPart skillPart = m_attacker.GetSkillPart(); if (skillPart != null) { m_SkillTarget = skillPart.GetSkillTarget(); table.SkillDatabase db = GameTableManager.Instance.GetTableItem <table.SkillDatabase>((uint)m_skillId, 1); if (db != null) { if (db.flyspeed != 0) { m_speed = db.flyspeed * 1.0f / 100; } } } // m_targetNode = m_attacker.GetTargetHitNode(); m_startTime = Time.time; castPos = m_attacker.GetTargetHitNodePos(m_SkillTarget, targetHitNode); float dis = GetVectorDistance(transform.position, castPos); totalTime = dis / m_speed; }
public CreatureCondition(UnityEngine.Vector3 center, uint rang, long fileterTarget) { m_rang = rang; m_centerpos = center; m_mainPlayer = EntitySystem.m_ClientGlobal.MainPlayer; m_skillPart = m_mainPlayer.GetPart(Client.EntityPart.Skill) as ISkillPart; }
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); } }
private void ResetJoystick() { m_widget_joystick.alpha = 0.5f; m_widget_joystick.gameObject.transform.localPosition = m_trans_joystickPos.localPosition; m_sprite_joystickThumb.transform.localPosition = Vector3.zero; m_sprite_joystickBg.transform.localPosition = Vector3.zero; m_sprite_joystickThumb.GetComponent <BoxCollider>().enabled = false; Client.IControllerSystem controllerSys = Client.ClientGlobal.Instance().GetControllerSystem(); if (controllerSys != null) { Client.IController ctrl = controllerSys.GetActiveCtrl(); if (ctrl != null) { ctrl.OnMessage(Engine.MessageCode.MessageCode_JoystickEnd); } } Engine.Utility.EventEngine.Instance().DispatchEvent((int)(int)Client.GameEventID.JOYSTICK_UNPRESS, null); if (MainPlayerHelper.GetMainPlayer() != null) { ISkillPart part = MainPlayerHelper.GetMainPlayer().GetPart(EntityPart.Skill) as ISkillPart; if (part != null) { int st = part.GetCurSkillState(); if (st == (int)SkillState.None || st == (int)SkillState.Prepare) { stForbiddenJoystick info = new stForbiddenJoystick(); info.playerID = MainPlayerHelper.GetPlayerUID(); info.bFobidden = false; EventEngine.Instance().DispatchEvent((int)GameEventID.SKILL_FORBIDDENJOYSTICK, info); } } } }
// 根据ID获取技能部件 public static ISkillPart GetSkillPart(uint uid, EntityType type) { IEntitySystem es = ClientGlobal.Instance().GetEntitySystem(); if (es == null) { Engine.Utility.Log.Error("GetEntitySystem failed!"); return(null); } if (type == EntityType.EntityType_NPC) { IRobot robot = es.FindEntity <IRobot>(uid); if (robot != null) { type = EntityType.EntityTYpe_Robot; } } long id = EntitySystem.EntityHelper.MakeUID(type, uid); IEntity player = es.FindEntity(id); if (player == null) { Engine.Utility.Log.Error("GetAttack failed!"); return(null); } ISkillPart skillPart = player.GetPart(EntityPart.Skill) as ISkillPart; return(skillPart); }
public SKILL_RESULT_CODE CastSkill(uint dwSkillID, ref KTarget pTarget) { int nRetCode = 0; SKILL_RESULT_CODE nResult = SKILL_RESULT_CODE.srcFailed; KCharacter pTargetCharacter = null; if (m_pEntity == null) { return(SKILL_RESULT_CODE.srcFailed); } ISkillPart skillPart = m_pEntity.GetPart(EntityPart.Skill) as ISkillPart; if (skillPart == null) { return(SKILL_RESULT_CODE.srcFailed); } if (pTarget == null) { return(SKILL_RESULT_CODE.srcFailed); } nRetCode = pTarget.GetTarget(ref pTargetCharacter); if (nRetCode == 0 || pTargetCharacter == null) { return(SKILL_RESULT_CODE.srcFailed); } IEntity targetEntity = pTargetCharacter.m_pEntity; if (targetEntity == null) { return(SKILL_RESULT_CODE.srcFailed); } skillPart.ReqNpcUseSkill(targetEntity, dwSkillID); // KSkill pSkill = FirstFightMgr.Instance().m_SkillManager.GetSkill(dwSkillID); pSkill.Cast(this, this, ref pTarget); //测试代码 // 伤害飘子 //FlyFontDataManager.Instance.ShowDamage(999, 1, pTargetCharacter.m_dwID, EntityType.EntityType_NPC, 1000000); //pTargetCharacter.Test_ConcludeResult(); nResult = SKILL_RESULT_CODE.srcSuccess; Exit0: return(nResult); }
// 进入状态 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 void Execute(GameCmd.stNotifyUninterruptMagicUserCmd_S cmd) { if (cmd.actiontype == UninterruptActionType.UninterruptActionType_SkillCJ) { ISkillPart skillPart = SkillHelper.GetSkillPart(cmd.userid, EntityType.EntityType_Player); if (skillPart == null) { Engine.Utility.Log.Error("获取主角技能部件失败!"); return; } Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSBREAK, new stGuildBreak() { action = GameCmd.UninterruptActionType.UninterruptActionType_SkillCJ, uid = cmd.userid, skillid = skillPart.GetCurSkillDataBase().wdID }); TimerAxis.Instance().KillTimer(m_uReadSliderTimerID, this); skillPart.OnInterruptSkill(cmd.userid, cmd.time, cmd.type, (uint)cmd.actiontype); } else if (cmd.actiontype == UninterruptActionType.UninterruptActionType_GOHOME) { long id = EntitySystem.EntityHelper.MakeUID(EntityType.EntityType_Player, cmd.userid); IEntitySystem pEntitySystem = ClientGlobal.Instance().GetEntitySystem(); if (pEntitySystem != null) { IPlayer pPlayer = pEntitySystem.FindPlayer((uint)id); if (pPlayer != null) { if (pPlayer.IsMainPlayer()) { Client.stUninterruptMagic param = new Client.stUninterruptMagic(); param.time = cmd.time; param.type = cmd.actiontype; param.uid = id; param.npcId = cmd.npcid; EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSSTART, param); } else { } } } } else { long id = EntitySystem.EntityHelper.MakeUID(EntityType.EntityType_Player, cmd.userid); Client.stUninterruptMagic param = new Client.stUninterruptMagic(); param.time = cmd.time; param.type = cmd.actiontype; param.uid = id; param.npcId = cmd.npcid; EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSSTART, param); } }
bool IsHideFx() { if (m_Atttacker != null) { ISkillPart sp = m_Atttacker.GetSkillPart(); if (sp != null) { return(sp.IsHideOtherFx()); } } return(false); }
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 void Execute(GameCmd.stMultiAttackDownMagicUserCmd_S cmd) { EntityType type = EntitySystem.EntityHelper.GetEntityEtype(cmd.byAttackerType); ISkillPart skillPart = SkillHelper.GetSkillPart(cmd.dwAttackerID, type); if (skillPart == null) { Engine.Utility.Log.Error("获取type :{0} id:{1}技能部件失败!", type, cmd.dwAttackerID); return; } // 处理技能结果 skillPart.OnDamage(cmd); //服务器发送打断 }
public void AddSkill(GameCmd.stAddSkillUserCmd_S cmd) { ISkillPart skillPart = SkillHelper.GetMainPlayerSkillPart(); List <GameCmd.stAddSkillUserCmd_S.Item> skillList = new List <stAddSkillUserCmd_S.Item>(); skillList = cmd.data; List <uint> updateSkillIds = new List <uint>(); Dictionary <uint, SkillInfo> skillInfos = new Dictionary <uint, SkillInfo>(); SkillInfo skillInfo = null; for (int i = 0; i < skillList.Count; i++) { var item = skillList[i]; uint totalid = item.id; ushort skillID = (ushort)(totalid >> 16); ushort level = (ushort)totalid; uint coldTime = item.cold; skillInfo = new SkillInfo((uint)skillID, (uint)level, coldTime); DataManager.Manager <LearnSkillDataManager>().InitUserSkill((uint)skillID, (uint)level, coldTime, item.hookfalg); DataManager.Manager <ArenaSetSkillManager>().InitUserSkill((uint)skillID, (uint)level, coldTime); DataManager.Manager <ClanManger>().InitUserSkill((uint)skillID, (uint)level, coldTime); Log.LogGroup("ZDY", "add skill {0} lev = {1}", skillID, level); if (skillPart != null) { skillPart.OnAddSkill((uint)skillID, (uint)level, coldTime); } else { Log.Error("skillpart is null"); } if (!skillInfos.ContainsKey(skillID)) { skillInfos.Add(skillID, skillInfo); } } //氏族技能 DataManager.Manager <ClanManger>().OnPlayerSkillUpdate(skillInfos.Keys.ToList()); DataManager.Manager <LearnSkillDataManager>().OnSkillAdd(skillInfos, (GameCmd.SkillAddType)cmd.type); DataManager.Manager <LearnSkillDataManager>().DispatchRedPoingMsg(); }
void ReqUsePetSkill(stMultiAttackUpMagicUserCmd_C cmd) { IPlayer player = MainPlayerHelper.GetMainPlayer(); if (player == null) { return; } ISkillPart sp = player.GetPart(EntityPart.Skill) as ISkillPart; if (sp == null) { return; } sp.RequestUsePetSkill(cmd); }
public void Execute(GameCmd.stNotifyUninterruptEventMagicUserCmd_CS cmd) { GameCmd.UninterruptActionType action = (UninterruptActionType)cmd.actiontype; if (action == UninterruptActionType.UninterruptActionType_SkillCJ) { ISkillPart skillPart = SkillHelper.GetSkillPart(cmd.desid, EntityType.EntityType_Player); if (skillPart == null) { Engine.Utility.Log.Error("获取技能部件失败!"); return; } skillPart.OnInterruptEventSkill((uint)cmd.etype); } else { if (cmd.etype == stNotifyUninterruptEventMagicUserCmd_CS.EventType.EventType_Break) { if (ClientGlobal.Instance().IsMainPlayer(cmd.desid) && action == UninterruptActionType.UninterruptActionType_CampCJ) { TipsManager.Instance.ShowTips("采集被打断了"); } Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSBREAK, new stGuildBreak() { action = action, uid = cmd.desid, npcId = cmd.npcid }); } else if (cmd.etype == stNotifyUninterruptEventMagicUserCmd_CS.EventType.EventType_Over) { Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSEND, new stGuildEnd() { action = action, uid = cmd.desid, npcId = cmd.npcid }); if (action == UninterruptActionType.UninterruptActionType_CampCJ) { Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.CAMP_ADDCOLLECTNPC, new stCampCollectNpc() { enter = false }); } } } }
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); }
public void SetCurStateSkillList() { SortedDictionary <int, uint> tempDic = null; if (CurState == SkillSettingState.StateOne) { tempDic = stateOneDic; } else if (CurState == SkillSettingState.StateTwo) { tempDic = stateTwoDic; } List <uint> skillIDList = new List <uint>(); var iter = tempDic.GetEnumerator(); while (iter.MoveNext()) { var dic = iter.Current; if (dic.Value != 0) { if (m_autoFightSkillStatus.ContainsKey(dic.Value)) { if (m_autoFightSkillStatus[dic.Value] == 1) { skillIDList.Add(dic.Value); } } } } // skillIDList.Reverse(); uint commonSkillID = GetCommonSkillIDByJob(); skillIDList.Insert(0, commonSkillID); ISkillPart skillPart = Protocol.SkillHelper.GetMainPlayerSkillPart(); if (skillPart != null) { skillPart.SetCurStateList(skillIDList); } Engine.Utility.EventEngine.Instance().DispatchEvent((int)Client.GameEventID.SKILLSYSTEM_SKILLLISTCHANE, (int)CurState); }
void DoInsertSkill() { if (m_commondQue.Count > 0) { //技能 IPlayer mp = MainPlayerHelper.GetMainPlayer(); if (mp != null) { ISkillPart sp = mp.GetPart(EntityPart.Skill) as ISkillPart; if (sp != null) { stSkillCommond st = m_commondQue.Dequeue(); if (st.type == 0) { OnUseSkill(st.skillID); } } } } }
public void GetDesPos(stGetDstPosDataUserCmd_CS cmd) { IEntity player = EntitySystem.EntityHelper.GetEntity(SceneEntryType.SceneEntry_Player, cmd.userid); //Move move = new Move(); //move.m_speed = player.GetProp( (int)CreatureProp.MoveSpeed ) * 0.001f; // 速度为测试速度 ////move.m_target = scenePos; //move.strRunAct = Client.EntityAction.Run; //move.path = new List<Vector3>(); //move.path.Add( new Vector3( cmd.x , 0 , -cmd.y ) ); if (player != null) { ISkillPart skillPart = player.GetPart(EntityPart.Skill) as ISkillPart; skillPart.GetDesPos(cmd); } //IEntity npc = EntitySystem.EntityHelper.GetEntity( SceneEntryType.SceneEntry_NPC , cmd.npcid ); //if(npc != null) //{ // npc.SendMessage( EntityMessage.EntityCommand_MovePath , (object)move ); //} }
public void ExecuteSkillFailed(GameCmd.stMultiAttackReturnMagicUserCmd_S cmd) { ISkillPart skillPart = SkillHelper.GetSkillPart(cmd.dwUserID, EntityType.EntityType_Player); if (skillPart == null) { Engine.Utility.Log.Error("获取主角技能部件失败!"); return; } else { Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.SKILLGUIDE_PROGRESSBREAK, new stGuildBreak() { action = GameCmd.UninterruptActionType.UninterruptActionType_SkillCJ, uid = cmd.dwUserID, skillid = cmd.wdSkillID }); TimerAxis.Instance().KillTimer(m_uReadSliderTimerID, this); string str = "";// "skill error code = " + cmd.fail_code + " "; if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_success) { //使用成功 } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_break) { str = GetLocalText(LocalTextType.Skill_Commond_jinengbeidaduan); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_use) { str = GetLocalText(LocalTextType.Skill_Commond_jinengzhengzaishiyong); Log.Error("使用过程 error code {0}", cmd.fail_code); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_outRange) { Client.IControllerSystem cs = ClientGlobal.Instance().GetControllerSystem(); if (cs != null) { Client.ICombatRobot robot = cs.GetCombatRobot(); if (robot != null && robot.Status == CombatRobotStatus.RUNNING) { if (MainPlayerHelper.GetMainPlayer() == null) { return; } ISkillPart sp = MainPlayerHelper.GetMainPlayer().GetPart(EntityPart.Skill) as ISkillPart; if (sp == null) { return; } if (sp.GetSkillTarget() != null) { Move move = new Move(); Vector3 targePos = sp.GetSkillTarget().GetPos(); Vector3 dir = targePos - MainPlayerHelper.GetMainPlayer().GetPos(); targePos = targePos - dir.normalized * 1f; move.m_target = targePos; move.m_ignoreStand = true; Log.Error("自动挂机,打不到,朝向目标移动"); IController ctr = cs.GetActiveCtrl(); if (ctr != null) { ctr.MoveToTarget(targePos); } //MainPlayerHelper.GetMainPlayer().SendMessage(EntityMessage.EntityCommand_MoveTo, (object)move); // Vector3 lookat = playerSkill.GetSkillTarget().GetNode().GetTransForm().forward; return; } } } str = GetLocalText(LocalTextType.Skill_Commond_mubiaochaochugongjijuli); Log.Error("技能使用超超出范围 error code {0}", cmd.fail_code); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_shapeErr) { str = GetLocalText(LocalTextType.Skill_Commond_bianshenzhuangtaixiabunengshiyongjineng); Log.Error("变身不能使用技能 error code {0}", cmd.fail_code); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_petFight) { str = GetLocalText(LocalTextType.Skill_Commond_chongwuweichuzhanbunengshiyongjineng); Log.Error("宠物未出战不能使用技能 error code {0}", cmd.fail_code); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_notExist) { str = GetLocalText(LocalTextType.Skill_Commond_jinengbucunzai); Log.Error("技能不存在 error code {0}", cmd.fail_code); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_none) { str = GetLocalText(LocalTextType.Skill_Commond_jinengweizhicuowu); Log.Error("技能未知 error code {0}", cmd.fail_code); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_needAim) { str = GetLocalText(LocalTextType.Skill_Commond_shifanggaijinengxuyaoxuanzemubiao); Log.Error("技能需要目标error code {0}", cmd.fail_code); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_aimErr) { str = GetLocalText(LocalTextType.Skill_Commond_mubiaoxuanzecuowu); Log.Error("技能目标错误 error code {0}", cmd.fail_code); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_cantAtt) { str = GetLocalText(LocalTextType.Skill_Commond_dangqianmubiaowufagongji); Log.Error("目标无法攻击 error code {0}", cmd.fail_code); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_inCD) { str = GetLocalText(LocalTextType.Skill_Commond_jinenglengquezhong); Log.Error("技能冷却中 error code {0}", cmd.fail_code); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_lackSP) { str = GetLocalText(LocalTextType.Skill_Commond_fashuzhibuzu); Log.Error("缺蓝 error code {0}", cmd.fail_code); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_flagsErr) { str = GetLocalText(LocalTextType.Skill_Commond_dangqianjinengzhuangtaicuowu); Log.Error("flags error code {0}", cmd.fail_code); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_NeedItemNumNotEnough) { str = GetLocalText(LocalTextType.Skill_Commond_shiyongchongwujinnegsuoxudaojubuzu); Log.Error("使用宠物技能所需道具不足{0}", cmd.fail_code); } else if (cmd.fail_code == (int)GameCmd.UseSkillFail.UseSkillFail_rideCantUse) { NetService.Instance.Send(new GameCmd.stDownRideUserCmd_C() { }); return; //str = GetLocalText(LocalTextType.Skill_Commond_qichengzhuangtaiwufashiyongzhujuejineng); //Log.Error("骑乘无法使用技能{0}", cmd.fail_code); } else if (cmd.fail_code == 16) { //协议未更新 先写数字防止后期忘了 str = "眩晕状态,技能不能使用"; // GetLocalText(LocalTextType.Skill_Commond_qichengzhuangtaiwufashiyongzhujuejineng); Log.Error("瞬移技能不能使用{0}", cmd.fail_code); } else { str = GetLocalText(LocalTextType.Skill_Commond_jinengweizhicuowu); Log.Error("技能未知错误 "); } if (cmd.dwUserID == MainPlayerHelper.GetPlayerID()) { TipsManager.Instance.ShowTips(str); } } skillPart.OnUseSkillFailed(cmd.dwUserID, cmd.wdSkillID); }
// 进入状态 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);*/ } } } }
/// <summary> /// 刷数据 /// </summary> void RefreshTargetGridData() { IEntitySystem entitySystem = ClientGlobal.Instance().GetEntitySystem(); IPlayer mainPlayer = ClientGlobal.Instance().MainPlayer; if (entitySystem == null) { return; } if (mainPlayer == null) { return; } ISkillPart sp = mainPlayer.GetPart(EntityPart.Skill) as ISkillPart; if (sp == null) { return; } m_lstAllEnemy.Clear(); m_lstTargetEnemyId.Clear(); //加入已经锁的敌人 for (int i = 0; i < m_lstLockEnemyId.Count; i++) { if (m_lstTargetEnemyId.Count < 5) { m_lstTargetEnemyId.Add(m_lstLockEnemyId[i]); } } //所有人 entitySystem.FindNearstPlayer(ref m_lstAllPlayer); //所有敌人 for (int i = 0; i < m_lstAllPlayer.Count; i++) { int nSkillError; //最多选取5个可攻击敌人(减少计算量) if (m_lstAllEnemy.Count >= 5) { break; } bool b = sp.CheckCanAttackTarget(m_lstAllPlayer[i], out nSkillError); if (b) { m_lstAllEnemy.Add(m_lstAllPlayer[i]); } } //加入选中的敌人 if (m_lstTargetEnemyId.Count < 5 && false == m_lstTargetEnemyId.Contains(m_selectEnemyId)) { bool b = false; for (int i = 0; i < m_lstAllEnemy.Count; i++) { if (m_lstAllEnemy[i].GetID() == m_selectEnemyId) { b = true; m_lstTargetEnemyId.Add(m_selectEnemyId); } } //无选中的 if (false == b) { this.m_selectEnemyId = 0; } } //清除不在九宫格的 //for (int i = m_lstTargetEnemyId.Count - 1; i >= 0; i--) //{ // if (m_lstLockEnemyId.Contains(m_lstTargetEnemyId[i])) // { // continue; // } // bool exist = false; // for (int j = 0; j < m_lstAllEnemy.Count; j++) // { // if (m_lstAllEnemy[j].GetID() == m_lstTargetEnemyId[i]) // { // exist = true; // } // } // if (false == exist) // { // m_lstTargetEnemyId.Remove(m_lstTargetEnemyId[i]); // } //} for (int i = 0; i < m_lstAllEnemy.Count; i++) { //排除玩家自己 uint enemyId = m_lstAllEnemy[i].GetID(); uint mainPlayerId = mainPlayer.GetID(); //玩家自己,排除 if (enemyId == mainPlayerId) { continue; } //string name = string.Format("--->>> enemyName = {0}", m_lstAllEnemy[i].GetName()); //Debug.LogError(name); //已经在列表中 if (m_lstTargetEnemyId.Contains(enemyId)) { continue; } //新加入进来的(最多5个) if (m_lstTargetEnemyId.Count < 5) { m_lstTargetEnemyId.Add(enemyId); } } }
public IEntity FindMinHpTeamer(uint range) { IControllerSystem cs = EntitySystem.m_ClientGlobal.GetControllerSystem(); if (cs == null) { return(null); } IControllerHelper ch = cs.GetControllerHelper(); if (ch == null) { return(null); } m_minHpPlayerList.Clear(); FindAllEntity <IPlayer>(ref m_minHpPlayerList); List <IPlayer> myTeamList = new List <IPlayer>(); for (int i = 0; i < m_minHpPlayerList.Count; i++) { IPlayer player = m_minHpPlayerList[i]; if (ch.IsSameTeam(player)) { IPlayer mainPlayer = m_ClientGlobal.MainPlayer; if (mainPlayer != null) { ISkillPart sp = mainPlayer.GetPart(EntityPart.Skill) as ISkillPart; if (sp != null) { int error = 0; if (!sp.CheckCanAttackTarget(player, out error)) { myTeamList.Add(player); } } } } } IEntity en = null; for (int i = 0; i < myTeamList.Count; i++) { IPlayer player = myTeamList[i]; if (en == null) { en = player; } int maxHp = en.GetProp((int)CreatureProp.MaxHp); int curHP = en.GetProp((int)CreatureProp.Hp); float oldScale = (maxHp - curHP) * 1.0f / maxHp; int playermaxHp = player.GetProp((int)CreatureProp.MaxHp); int playercurHP = player.GetProp((int)CreatureProp.Hp); float newScale = (playermaxHp - playercurHP) * 1.0f / playermaxHp; if (newScale > oldScale) { en = player; } } return(en); }
public SkillOverState(StateMachine <ISkillPart> machine, ISkillPart caster) : base(machine, caster) { m_nStateID = (int)SkillState.Over; }
public void Execuete(GameCmd.stReturnObjectPosMagicUserCmd_S cmd) { //冲锋应该是goto 瞬移应该是enumMoveType_Immediate 此处待后台修改 前台先山寨一下 if (cmd.byMoveType == stReturnObjectPosMagicUserCmd_S.enumMoveType.enumMoveType_GoTo || cmd.byMoveType == stReturnObjectPosMagicUserCmd_S.enumMoveType.enumMoveType_Immediate) { IEntitySystem es = ClientGlobal.Instance().GetEntitySystem(); if (es == null) { Engine.Utility.Log.Error("GetEntitySystem failed!"); return; } stEntryPosition userPos = cmd.userpos; if (userPos != null) { IEntity player = es.FindEntity <IPlayer>(userPos.dwTempID); if (player != null) { //MapVector2 mapPos = MapVector2.FromCoordinate(userPos.x, userPos.y); Vector3 pos = new Vector3(userPos.cur_pos.x * 0.01f, 0, -userPos.cur_pos.y * 0.01f); // 服务器到客户端坐标转换 ISkillPart skillPart = SkillHelper.GetSkillPart(userPos.dwTempID, EntityType.EntityType_Player); if (skillPart != null) { if (skillPart.IsFastMove()) { Move move = new Move(); move.m_target = pos; move.m_ignoreStand = true; player.SendMessage(EntityMessage.EntityCommand_MoveTo, (object)move); } else { //不是在释放快速移动技能 立刻设置位置 否则延迟设置 player.SendMessage(EntityMessage.EntityCommand_SetPos, (object)pos); //Vector3 rot = GameUtil.S2CDirection(userPos.byDir); //player.SendMessage(EntityMessage.EntityCommand_SetRotate, (object)rot); } IEntity skillTarget = skillPart.GetSkillTarget(); if (skillTarget != null && skillTarget.GetUID() != player.GetUID()) { SkillDatabase db = skillPart.GetCurSkillDataBase(); if (db != null) { if (db.targetType == (int)SkillTargetType.TargetForwardPoint) { return; } } player.SendMessage(EntityMessage.EntityCommand_LookTarget, skillTarget.GetPos()); } } } } if (cmd.npcpos != null) { INPC npc = es.FindEntity <INPC>(cmd.npcpos.dwTempID); if (npc != null) { //MapVector2 mapPos = MapVector2.FromCoordinate(cmd.npcpos.x, cmd.npcpos.y); Vector3 pos = new Vector3(cmd.npcpos.cur_pos.x * 0.01f, 0, -cmd.npcpos.cur_pos.y * 0.01f); // 服务器到客户端坐标转换 ISkillPart skillPart = SkillHelper.GetSkillPart(cmd.npcpos.dwTempID, EntityType.EntityType_NPC); if (skillPart != null) { //不是在释放快速移动技能 立刻设置位置 否则延迟设置 npc.SendMessage(EntityMessage.EntityCommand_StopMove, (object)pos); } } } EventEngine.Instance().DispatchEvent((int)GameEventID.CAMERA_MOVE_END); } }
public void OnUseSkill(uint uSkillID) { if (uSkillID == 0) { return; } IControllerSystem cs = ClientGlobal.Instance().GetControllerSystem(); if (cs == null) { Engine.Utility.Log.Error("ExecuteCmd: ControllerSystem is null"); return; } ICombatRobot combot = cs.GetCombatRobot(); if (combot.Status == CombatRobotStatus.RUNNING) { //解除普攻连击 stSkillLongPress longPress = new stSkillLongPress(); longPress.bLongPress = false; EventEngine.Instance().DispatchEvent((int)GameEventID.SKLL_LONGPRESS, longPress); combot.InsertSkill(uSkillID); return; } bool canuse = EventEngine.Instance().DispatchVote((int)GameVoteEventID.SKILL_CANUSE, uSkillID); if (canuse) { table.SkillDatabase db = GameTableManager.Instance.GetTableItem <table.SkillDatabase>(uSkillID, 1); if (db != null) { IControllerSystem ctrl = ClientGlobal.Instance().GetControllerSystem(); if (ctrl != null) { MessageCode code = MessageCode.MessageCode_ButtonX; ctrl.OnMessage(code, uSkillID); } } } else { IPlayer mainPlayer = MainPlayerHelper.GetMainPlayer(); if (mainPlayer != null) { ISkillPart skillPart = mainPlayer.GetPart(EntityPart.Skill) as ISkillPart; if (skillPart != null) { Client.stTipsEvent en = skillPart.GetSkillNotUseReason(uSkillID); if (en.errorID != 0) { EventEngine.Instance().DispatchEvent((int)GameEventID.TIPS_EVENT, en); } } } AddSkillCommond(uSkillID); } }
public void PrepareUseSkill(GameCmd.stPrepareUseSkillSkillUserCmd_S cmd) { EntityType type = EntitySystem.EntityHelper.GetEntityEtype(cmd.usertype); ISkillPart skillPart = SkillHelper.GetSkillPart(cmd.userid, type); if (skillPart == null) { Engine.Utility.Log.Error("获取技能部件失败!" + cmd.userid + " type is " + Enum.GetName(typeof(EntityType), type)); return; } if (cmd.level == 0) { cmd.level = 1; } SkillDatabase database = GameTableManager.Instance.GetTableItem <table.SkillDatabase>(cmd.skillid, (int)cmd.level); if (database == null) { Engine.Utility.Log.Error(" skill database is null skillid is " + cmd.skillid.ToString() + " level is " + cmd.level.ToString()); return; } skillPart.OnPrepareUseSkill(cmd); if (type == EntityType.EntityType_Player) { uint time = (database.dwReadTime); if (time > 0) { TimerAxis.Instance().SetTimer(m_uReadSliderTimerID, time, this, 1); } } else if (type == EntityType.EntityType_NPC) { IEntitySystem es = ClientGlobal.Instance().GetEntitySystem(); if (es == null) { Engine.Utility.Log.Error("GetEntitySystem failed!"); return; } INPC npc = es.FindEntity <INPC>(cmd.userid); if (npc != null) { int masterID = npc.GetProp((int)NPCProp.Masterid); if (masterID == MainPlayerHelper.GetPlayerID()) { SkillDatabase db = GameTableManager.Instance.GetTableItem <SkillDatabase>((uint)cmd.skillid); if (db != null) { if (db.petType == 1 || db.petType == 2) { Client.stSkillCDChange st = new Client.stSkillCDChange(); st.skillid = (uint)cmd.skillid; st.cd = -1; Engine.Utility.EventEngine.Instance().DispatchEvent((int)Client.GameEventID.SKILLCD_BEGIN, st); TipsManager.Instance.ShowTips(npc.GetName() + CommonData.GetLocalString("使用") + db.strName); } } } } } }
//------------------------------------------------------------------------------------------------------- public void AddPart(EntityPart enPart) { int entityPart = (int)enPart; if (m_Parts.ContainsKey(entityPart)) { return; } switch (enPart) { case EntityPart.Skill: // 技能 { ISkillSystem skillSys = EntitySystem.m_ClientGlobal.GetSkillSystem(); if (skillSys == null) { //编辑器模式不需要 break; } ISkillPart skillPart = skillSys.CreateSkillPart(); if (skillPart == null) { return; } if (!skillPart.Create(this)) { Engine.Utility.Log.Error("AddPart failed!"); skillPart = null; return; } m_Parts[entityPart] = skillPart; break; } case EntityPart.Buff: // Buff { ISkillSystem skillSys = EntitySystem.m_ClientGlobal.GetSkillSystem(); if (skillSys == null) { //编辑器模式不需要 break; } IBuffPart buffpart = skillSys.CreateBuffPart(); if (buffpart == null) { return; } if (!buffpart.Create(this)) { Engine.Utility.Log.Error("AddPart failed!"); buffpart = null; return; } m_Parts[entityPart] = buffpart; break; } case EntityPart.Equip: // Equip 装备 { IEquipPart equipPart = new EquipPart(); if (equipPart == null) { return; } if (!equipPart.Create(this)) { Engine.Utility.Log.Error("AddPart failed!"); equipPart = null; return; } m_Parts[entityPart] = equipPart; break; } } }