void CreateEffect(uint runID) { BuffDataBase db = GetBuffDataBase(runID); if (db == null) { // Log.Error("读取Buff配置数据出错:{0}", runID); 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; } if (!IsHideFx()) { int nEffectID = (int)EffectViewFactory.Instance().CreateEffect(m_Master.GetUID(), item); if (!effectDic.ContainsKey(runID)) { effectDic.Add(runID, nEffectID); } } } }
void AddEffect(IEntity target, uint effectID) { FxResDataBase edb = GameTableManager.Instance.GetTableItem <FxResDataBase>(effectID); if (edb != null && target != null) { AddLinkEffect node = new AddLinkEffect(); node.nFollowType = (int)edb.flowType; node.rotate = new Vector3(edb.rotate[0], edb.rotate[1], edb.rotate[2]); node.vOffset = new Vector3(edb.offset[0], edb.offset[1], edb.offset[2]); // 使用资源配置表 ResourceDataBase resDB = GameTableManager.Instance.GetTableItem <ResourceDataBase>(edb.resPath); if (resDB == null) { Engine.Utility.Log.Error("EffectViewFactory:找不到特效资源路径配置{0}", edb.resPath); return; } node.strEffectName = resDB.strPath; node.strLinkName = edb.attachNode; if (edb.bFollowRole) { if (node.strEffectName.Length != 0) { target.SendMessage(EntityMessage.EntityCommand_AddLinkEffect, node); } } } }
/// <summary> /// 通过[编号]二分快速查表 /// </summary> /// <param name="dwID">编号</param> /// <returns></returns> public static FxResDataBase Query(this List <FxResDataBase> sorted, uint dwID) { var key = new FxResDataBase() { dwID = dwID }; var comparer = new Comparer1(); var index = sorted.BinarySearch(key, comparer); return(index >= 0 ? sorted[index] : default(FxResDataBase)); }
void AddEffect(Vector3 pos, uint effectID) { FxResDataBase edb = GameTableManager.Instance.GetTableItem <FxResDataBase>(effectID); if (edb != null) { // 使用资源配置表 ResourceDataBase resDB = GameTableManager.Instance.GetTableItem <ResourceDataBase>(edb.resPath); if (resDB == null) { Engine.Utility.Log.Error("EffectViewFactory:找不到特效资源路径配置{0}", edb.resPath); return; } string path = resDB.strPath; Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem(); if (rs == null) { return; } IEffect effect = null; rs.CreateEffect(ref path, ref effect, (obj) => { if (obj == null) { Log.Error("fx load failed: " + path); return; } if (obj.GetNodeTransForm() == null) { return; } obj.GetNodeTransForm().localPosition = pos; obj.GetNodeTransForm().localRotation = Quaternion.identity; obj.GetNodeTransForm().localScale = Vector3.one; //DoPlay(obj.GetNodeTransForm().gameObject, position, rotation, scale); }); } }
uint CreateEffect() { Client.IEntity target = ClientGlobal.Instance().GetEntitySystem().FindNPC(treeEntityID); if (target == null) { Engine.Utility.Log.Error("摇钱树实体查找不到,id为{0}", treeEntityID); return(0); } FxResDataBase edb = GameTableManager.Instance.GetTableItem <FxResDataBase>(10001); if (edb != null && target != null) { AddLinkEffect node = new AddLinkEffect(); node.nFollowType = (int)edb.flowType; node.rotate = new Vector3(edb.rotate[0], edb.rotate[1], edb.rotate[2]); node.vOffset = new Vector3(edb.offset[0], edb.offset[1], edb.offset[2]); // 使用资源配置表 ResourceDataBase resDB = GameTableManager.Instance.GetTableItem <ResourceDataBase>(edb.resPath); if (resDB == null) { Engine.Utility.Log.Error("EffectViewFactory:找不到特效资源路径配置{0}", edb.resPath); return(0); } node.strEffectName = resDB.strPath; node.strLinkName = edb.attachNode; if (node.strEffectName.Length != 0) { int id = (int)target.SendMessage(EntityMessage.EntityCommand_AddLinkEffect, node); return((uint)id); } } return(0); }
uint CreateEffect(uint nEffectViewID) { IEntity target = MainPlayerHelper.GetMainPlayer(); FxResDataBase edb = GameTableManager.Instance.GetTableItem <FxResDataBase>(nEffectViewID); if (edb != null && target != null) { if (nEffectViewID == 1002 && EntitySystem.EntityHelper.IsMainPlayer(target)) { // Engine.Utility.Log.Error("nEffectViewID:{0}", nEffectViewID); } AddLinkEffect node = new AddLinkEffect(); node.nFollowType = (int)edb.flowType; node.rotate = new Vector3(edb.rotate[0], edb.rotate[1], edb.rotate[2]); node.vOffset = new Vector3(edb.offset[0], edb.offset[1], edb.offset[2]); // 使用资源配置表 ResourceDataBase resDB = GameTableManager.Instance.GetTableItem <ResourceDataBase>(edb.resPath); if (resDB == null) { Engine.Utility.Log.Error("EffectViewFactory:找不到特效资源路径配置{0}", edb.resPath); return(0); } node.strEffectName = resDB.strPath; node.strLinkName = edb.attachNode; if (node.strEffectName.Length != 0) { int id = (int)target.SendMessage(EntityMessage.EntityCommand_AddLinkEffect, node); return((uint)id); } } 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); } } } }
/// <summary> /// 播放防御者受击动作 /// </summary> /// <param name="cmd"></param> private bool PlayDefenerAni(GameCmd.stMultiAttackDownMagicUserCmd_S cmd) { if (cmd == null) { return(false); } SkillDatabase db = GameTableManager.Instance.GetTableItem <SkillDatabase>(cmd.wdSkillID, 1); if (db != null) { for (int i = 0; i < db.beAttactEffect.Count; i++) { var effectid = db.beAttactEffect[i]; FxResDataBase edb = GameTableManager.Instance.GetTableItem <FxResDataBase>(effectid); if (edb != null) { if (cmd != null) { for (int j = 0; j < cmd.data.Count; j++) { var item = cmd.data[j]; string aniName = edb.targetAniName; IEntity defender = EntityHelper.GetEntity(item.byDefencerType, item.dwDefencerID); if (defender == null) { //Log.Error( "死亡状态不能播放受击动作" ); return(false); } if (defender is INPC) { INPC npc = defender as INPC; if (npc != null) { if (npc.IsTrap()) { return(false); } } } if (edb.playAudio != 0) { ResourceDataBase rdb = GameTableManager.Instance.GetTableItem <ResourceDataBase>(edb.playAudio); if (rdb != null) { Transform trans = defender.GetTransForm(); if (trans == null) { return(false); } PlayAudio(trans.gameObject, rdb.strPath); } } EffectViewFactory.Instance().CreateEffect(defender.GetUID(), effectid); if (item.byDamType != (uint)GameCmd.AttackType.ATTACK_TYPE_HD) { SendPlayDefenerAniMessage(defender, aniName); } } } } } } return(true); }
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); }