public ImpactInfo(TableConfig.Skill cfg) { if (null != cfg) { ImpactId = cfg.id; } ConfigData = cfg; }
internal ImpactInfo TrackImpact(TableConfig.Skill cfg, int seq, int curObjId, int srcObjId, int targetId, string emitBone, int emitImpact, Vector3 offset, Dictionary <string, object> args) { EntityInfo targetObj = m_Scene.EntityManager.GetEntityInfo(targetId); EntityInfo srcObj = m_Scene.EntityManager.GetEntityInfo(srcObjId); if (null != targetObj && !targetObj.IsDead()) { if (null != cfg) { ImpactInfo impactInfo = null; if (emitImpact <= 0 || emitImpact >= SkillInstance.c_FirstInnerEmitSkillId) { impactInfo = new ImpactInfo(m_Scene.SkillSystem.PredefinedSkill.EmitSkillCfg); } else { impactInfo = new ImpactInfo(emitImpact); } if (TryInitImpactInfo(impactInfo, cfg, seq, curObjId, srcObjId, args)) { if (null != srcObj) { Vector3 pos = srcObj.GetMovementStateInfo().GetPosition3D(); pos.Y += srcObj.GetRadius(); impactInfo.SenderPosition = pos; } targetObj.GetSkillStateInfo().AddImpact(impactInfo); m_Scene.SkillSystem.StartSkill(targetId, impactInfo.ConfigData, impactInfo.Seq, args); return(impactInfo); } } } return(null); }
public SkillInfo(TableConfig.Skill cfg) { if (null != cfg) { SkillId = cfg.id; } ConfigData = cfg; }
internal GfxSkillSenderInfo BuildSkillInfo(int objId, TableConfig.Skill configData, int seq, Scene scene) { GfxSkillSenderInfo ret = null; EntityInfo entity = m_Scene.EntityManager.GetEntityInfo(objId); if (null != entity && null != configData) { int targetId = 0; if (configData.type == (int)SkillOrImpactType.Skill) { targetId = entity.GetAiStateInfo().Target; } else { ImpactInfo impactInfo = entity.GetSkillStateInfo().GetImpactInfoBySeq(seq); if (null != impactInfo) { targetId = impactInfo.ImpactSenderId; } } EntityInfo targetObj = m_Scene.EntityManager.GetEntityInfo(targetId); if (null != targetObj) { ret = new GfxSkillSenderInfo(configData, seq, objId, entity, targetId, targetObj, scene); } else { ret = new GfxSkillSenderInfo(configData, seq, objId, entity, scene); } } return(ret); }
public GfxSkillSenderInfo BuildSkillInfo(int objId, TableConfig.Skill configData, int seq) { GfxSkillSenderInfo ret = null; EntityViewModel view = GetEntityViewById(objId); if (null != view && null != view.Actor && null != view.Entity && null != configData) { EntityInfo entity = view.Entity; int targetId = 0; if (configData.type == (int)SkillOrImpactType.Skill) { targetId = entity.GetAiStateInfo().Target; } else { ImpactInfo impactInfo = entity.GetSkillStateInfo().GetImpactInfoBySeq(seq); if (null != impactInfo) { targetId = impactInfo.ImpactSenderId; } } UnityEngine.GameObject targetObj = GetGameObject(targetId); if (null != targetObj) { ret = new GfxSkillSenderInfo(configData, seq, objId, view.Actor, targetId, targetObj); } else { ret = new GfxSkillSenderInfo(configData, seq, objId, view.Actor); } } return(ret); }
public GfxSkillSenderInfo(TableConfig.Skill configData, int seq, int actorId, GameObject gfxObj) { m_Seq = seq; m_ConfigData = configData; m_ActorId = actorId; m_GfxObj = gfxObj; }
public void PreloadSkillInstance(TableConfig.Skill skillData) { if (null != skillData) { SkillInstanceInfo info = NewSkillInstanceImpl(skillData.id, skillData); if (null != info) { RecycleSkillInstance(info); if (null != info.m_SkillInstance.EmitSkillInstances) { foreach (var pair in info.m_SkillInstance.EmitSkillInstances) { SkillInstanceInfo iinfo = NewInnerSkillInstanceImpl(PredefinedSkill.c_EmitSkillId, pair.Value); RecycleSkillInstance(iinfo); } } if (null != info.m_SkillInstance.HitSkillInstances) { foreach (var pair in info.m_SkillInstance.HitSkillInstances) { SkillInstanceInfo iinfo = NewInnerSkillInstanceImpl(PredefinedSkill.c_HitSkillId, pair.Value); RecycleSkillInstance(iinfo); } } } } }
public int SelectTargetForSkill(string type, int actorId, TableConfig.Skill cfg, int seq, HashSet <int> history) { if (string.IsNullOrEmpty(type)) { return(0); } EntityViewModel view = GetEntityViewById(actorId); if (null != view && null != view.Entity) { EntityInfo entity = view.Entity; int campId = entity.GetCampId(); if (type.CompareTo("minhp") == 0) { int targetId = 0; float minhp = float.MaxValue; ScriptRuntime.Vector3 pos = entity.GetMovementStateInfo().GetPosition3D(); PluginFramework.Instance.KdTree.QueryWithAction(pos, cfg.skillData.distance, (float distSqr, KdTreeObject kdObj) => { if (minhp > kdObj.Object.Hp && EntityInfo.GetRelation(campId, kdObj.Object.GetCampId()) == CharacterRelation.RELATION_ENEMY) { int objId = kdObj.Object.GetId(); if (!history.Contains(objId)) { minhp = kdObj.Object.Hp; targetId = objId; } } }); return(targetId); } else if (type.CompareTo("maxdist") == 0) { int targetId = 0; float maxDistSqr = 0; ScriptRuntime.Vector3 pos = entity.GetMovementStateInfo().GetPosition3D(); PluginFramework.Instance.KdTree.QueryWithAction(pos, cfg.skillData.distance, (float distSqr, KdTreeObject kdObj) => { if (maxDistSqr < distSqr && EntityInfo.GetRelation(campId, kdObj.Object.GetCampId()) == CharacterRelation.RELATION_ENEMY) { int objId = kdObj.Object.GetId(); if (!history.Contains(objId)) { maxDistSqr = distSqr; targetId = objId; } } }); return(targetId); } else if (type.CompareTo("randenemy") == 0) { return(GetRandEnemyId(campId, history)); } else if (type.CompareTo("randfriend") == 0) { return(GetRandFriendId(campId, history)); } } return(0); }
public ImpactInfo(int impactId) { ImpactId = impactId; ConfigData = TableConfig.SkillProvider.Instance.GetSkill(ImpactId); DamageData = new TableConfig.SkillDamageData(); DamageData.Init(); SenderProperty = new CharacterProperty(); }
public void PreloadSkillInstance(int skillId) { TableConfig.Skill skillData = TableConfig.SkillProvider.Instance.GetSkill(skillId); if (null != skillData) { PreloadSkillInstance(skillData); } }
internal GfxSkillSenderInfo(TableConfig.Skill configData, int seq, int actorId, EntityInfo gfxObj, Scene scene) { m_Seq = seq; m_ConfigData = configData; m_ActorId = actorId; m_GfxObj = gfxObj; m_Scene = scene; }
internal int SelectTargetForSkill(string type, int objId, TableConfig.Skill cfg, int seq, HashSet <int> history) { if (string.IsNullOrEmpty(type)) { return(0); } EntityInfo entity = m_Scene.EntityManager.GetEntityInfo(objId); if (null != entity) { int campId = entity.GetCampId(); if (type.CompareTo("minhp") == 0) { int targetId = 0; float minhp = float.MaxValue; ScriptRuntime.Vector3 pos = entity.GetMovementStateInfo().GetPosition3D(); m_Scene.KdTree.Query(pos, cfg.distance, (float distSqr, KdTreeObject kdObj) => { if (minhp > kdObj.Object.Hp && EntityInfo.GetRelation(campId, kdObj.Object.GetCampId()) == CharacterRelation.RELATION_ENEMY) { int id = kdObj.Object.GetId(); if (!history.Contains(id)) { minhp = kdObj.Object.Hp; targetId = id; } } }); return(targetId); } else if (type.CompareTo("maxdist") == 0) { int targetId = 0; float maxDistSqr = 0; ScriptRuntime.Vector3 pos = entity.GetMovementStateInfo().GetPosition3D(); m_Scene.KdTree.Query(pos, cfg.distance, (float distSqr, KdTreeObject kdObj) => { if (maxDistSqr < distSqr && EntityInfo.GetRelation(campId, kdObj.Object.GetCampId()) == CharacterRelation.RELATION_ENEMY) { int id = kdObj.Object.GetId(); if (!history.Contains(id)) { maxDistSqr = distSqr; targetId = id; } } }); return(targetId); } else if (type.CompareTo("randenemy") == 0) { return(GetRandEnemyId(campId, history)); } else if (type.CompareTo("randfriend") == 0) { return(GetRandFriendId(campId, history)); } } return(0); }
private static void AddPredefinedSkill(TableConfig.Skill cfg, int id) { cfg.id = cfg.dslSkillId = id; cfg.dslFile = "Skill/predefined.dsl"; //添加到技能表数据中 var skills = TableConfig.SkillProvider.Instance.SkillMgr.GetData(); skills[cfg.id] = cfg; }
public void RemoveShield(int objId, TableConfig.Skill cfg, int seq) { EntityInfo entity = m_Scene.EntityManager.GetEntityInfo(objId); if (null != entity) { entity.Shield = 0; } }
public void RemoveShield(int objId, TableConfig.Skill cfg, int seq) { EntityViewModel view = GetEntityViewById(objId); if (null != view && null != view.Entity) { EntityInfo entity = view.Entity; entity.Shield = 0; } }
internal ImpactInfo SendImpact(TableConfig.Skill cfg, int seq, int curObjId, int srcObjId, int targetId, int impactId, Dictionary <string, object> args) { EntityInfo targetObj = m_Scene.EntityManager.GetEntityInfo(targetId); if (null != targetObj) { if (null != cfg) { Quaternion hitEffectRotation = Quaternion.Identity; EntityInfo srcObj = m_Scene.EntityManager.GetEntityInfo(srcObjId); var addArgs = new Dictionary <string, object> { { "hitEffectRotation", hitEffectRotation } }; ImpactInfo impactInfo = null; if (impactId <= 0 || impactId >= SkillInstance.c_FirstInnerHitSkillId) { impactInfo = new ImpactInfo(m_Scene.SkillSystem.PredefinedSkill.HitSkillCfg); impactId = PredefinedSkill.c_HitSkillId; } else { impactInfo = new ImpactInfo(impactId); } if (null != impactInfo.ConfigData) { if (TryInitImpactInfo(impactInfo, cfg, seq, curObjId, srcObjId, args)) { if (impactInfo.ConfigData.type == (int)SkillOrImpactType.Buff) { ImpactInfo oldImpactInfo = targetObj.GetSkillStateInfo().FindImpactInfoById(impactInfo.ImpactId); if (null != oldImpactInfo) { oldImpactInfo.DurationTime += impactInfo.DurationTime; return(oldImpactInfo); } } targetObj.GetSkillStateInfo().AddImpact(impactInfo); SkillInfo skillInfo = targetObj.GetSkillStateInfo().GetCurSkillInfo(); if (null != skillInfo && (cfg.isInterrupt || impactInfo.ConfigData.isInterrupt)) { m_Scene.SkillSystem.StopSkill(targetId, skillInfo.SkillId, 0, true); } m_Scene.SkillSystem.StartSkill(targetId, impactInfo.ConfigData, impactInfo.Seq, args, addArgs); return(impactInfo); } } else { LogSystem.Error("impact {0} config can't found !", impactInfo.ImpactId); } } } return(null); }
public ImpactInfo(TableConfig.Skill cfg) { if (null != cfg) { ImpactId = cfg.id; } ConfigData = cfg; DamageData = new TableConfig.SkillDamageData(); DamageData.Init(); SenderProperty = new CharacterProperty(); }
public static int GetSkillImpactId(Dictionary <string, object> variables, TableConfig.Skill cfg) { int impactId = 0; object idObj; if (variables.TryGetValue("impact", out idObj)) { impactId = (int)idObj; } return(impactId); }
private static void AddPredefinedSkill(TableConfig.Skill cfg, int id) { cfg.id = id; cfg.dslFile = "Skill/predefined.dsl"; cfg.type = (int)SkillOrImpactType.Impact; cfg.impactData = new TableConfig.ImpactData(); //添加到技能表数据中 var skills = TableConfig.SkillProvider.Instance.SkillMgr.GetData(); skills[cfg.id] = cfg; }
internal void CancelIfImpact(int actorId, TableConfig.Skill cfg, int seq) { EntityInfo entity = m_Scene.EntityManager.GetEntityInfo(actorId); if (null != entity) { if (cfg.type != (int)SkillOrImpactType.Skill) { entity.GetSkillStateInfo().RemoveImpact(seq); } } }
public void CancelIfImpact(int actorId, TableConfig.Skill cfg, int seq) { EntityViewModel view = GetEntityViewById(actorId); if (null != view && null != view.Entity) { if (cfg.type != (int)SkillOrImpactType.Skill) { view.Entity.GetSkillStateInfo().RemoveImpact(seq); } } }
public void CancelIfImpact(UnityEngine.GameObject obj, TableConfig.Skill cfg, int seq) { EntityViewModel view = GetEntityView(obj); if (null != view && null != view.Entity) { if (cfg.type != (int)SkillOrImpactType.Skill) { view.Entity.GetSkillStateInfo().RemoveImpact(seq); } } }
public static void RefixAttrBySkill(EntityInfo obj, TableConfig.Skill cfg) { if (cfg.attrValues.Count > 0) { foreach (var pair in cfg.attrValues) { if (pair.Key != (int)CharacterPropertyEnum.x2012_护盾值) //护盾的添加与删除放在触发器里处理了 { obj.ActualProperty.IncreaseInt((CharacterPropertyEnum)pair.Key, pair.Value); } } } }
public void AddShield(int objId, TableConfig.Skill cfg, int seq) { EntityInfo entity = m_Scene.EntityManager.GetEntityInfo(objId); if (null != entity) { int v; if (cfg.attrValues.TryGetValue((int)CharacterPropertyEnum.x2012_护盾值, out v)) { entity.Shield += v; } } }
public void AddShield(int objId, TableConfig.Skill cfg, int seq) { EntityViewModel view = GetEntityViewById(objId); if (null != view && null != view.Entity) { EntityInfo entity = view.Entity; int v; if (cfg.attrValues.TryGetValue((int)CharacterPropertyEnum.x2012_护盾值, out v)) { entity.Shield += v; } } }
public static bool GetSkillStartPosition(Vector3 srcPos, TableConfig.Skill cfg, SkillInstance instance, int srcId, int targetId, ref Vector3 targetPos) { ScriptRuntime.Vector3 pos; object posVal; if (instance.Variables.TryGetValue("skill_targetpos", out posVal)) { pos = (ScriptRuntime.Vector3)posVal; targetPos = new Vector3(pos.X, pos.Y, pos.Z); return(true); } if (instance.Variables.TryGetValue("skill_homepos", out posVal)) { pos = (ScriptRuntime.Vector3)posVal; targetPos = new Vector3(pos.X, pos.Y, pos.Z); return(true); } float dist = cfg.skillData.distance; if (dist <= Geometry.c_FloatPrecision) { object val; if (instance.Variables.TryGetValue("skill_distance", out val)) { dist = (float)Convert.ChangeType(val, typeof(float)); } else { dist = EntityController.Instance.CalcSkillDistance(dist, srcId, targetId); } } else { dist = EntityController.Instance.CalcSkillDistance(dist, srcId, targetId); } if (dist <= Geometry.c_FloatPrecision) { dist = 0.1f; } float dir; if (EntityController.Instance.CalcPosAndDir(targetId, out pos, out dir)) { pos += Geometry.GetRotate(new ScriptRuntime.Vector3(0, 0, dist), dir); targetPos = new Vector3(pos.X, pos.Y, pos.Z); return(true); } return(false); }
private bool TryInitImpactInfo(ImpactInfo impactInfo, TableConfig.Skill cfg, int seq, int curObjId, int srcObjId, Dictionary <string, object> args) { bool ret = false; EntityInfo srcNpc = null; EntityViewModel srcView = GetEntityViewById(srcObjId); if (null != srcView && null != srcView.Entity) { srcNpc = srcView.Entity; } impactInfo.StartTime = TimeUtility.GetLocalMilliseconds(); impactInfo.ImpactSenderId = srcObjId; if (cfg.type == (int)SkillOrImpactType.Skill) { impactInfo.SenderPosition = null != srcNpc?srcNpc.GetMovementStateInfo().GetPosition3D() : ScriptRuntime.Vector3.Zero; impactInfo.SkillId = cfg.id; impactInfo.DurationTime = impactInfo.ConfigData.impactData.duration; impactInfo.TargetType = cfg.targetType; impactInfo.DamageData.CopyFrom(cfg.damageData); impactInfo.DamageData.Merge(impactInfo.ConfigData.damageData); impactInfo.ImpactToTarget = cfg.impact; ret = true; } else { ImpactInfo srcImpactInfo = null; EntityViewModel myView = GetEntityViewById(curObjId); if (null != myView && null != myView.Entity) { srcImpactInfo = myView.Entity.GetSkillStateInfo().GetImpactInfoBySeq(seq); } if (null != srcImpactInfo) { //如果当前技能配置有数据则继承当前配置数据,否则继承源impact记录的数据。 impactInfo.SenderPosition = srcImpactInfo.SenderPosition; impactInfo.SkillId = srcImpactInfo.SkillId; impactInfo.DurationTime = srcImpactInfo.DurationTime > 0 ? srcImpactInfo.DurationTime : impactInfo.ConfigData.impactData.duration; impactInfo.TargetType = srcImpactInfo.TargetType; impactInfo.DamageData.CopyFrom(srcImpactInfo.DamageData); impactInfo.DamageData.Merge(impactInfo.ConfigData.damageData); impactInfo.ImpactToTarget = cfg.impact != 0 ? cfg.impact : srcImpactInfo.ImpactToTarget; ret = true; } } return(ret); }
public ImpactInfo TrackImpact(TableConfig.Skill cfg, int seq, int curObjId, int srcObjId, int targetId, string emitBone, int emitImpact, UnityEngine.Vector3 offset, bool isFinal, Dictionary <string, object> args) { EntityViewModel view = GetEntityViewById(targetId); EntityViewModel srcView = GetEntityViewById(srcObjId); if (null != view && null != view.Entity && null != view.Actor && !view.Entity.IsDeadSkillCasting()) { EntityInfo npc = view.Entity; if (null != cfg) { ImpactInfo impactInfo = null; if (emitImpact <= 0 || emitImpact >= SkillInstance.c_FirstInnerEmitSkillId) { impactInfo = new ImpactInfo(PredefinedSkill.Instance.EmitSkillCfg); } else { impactInfo = new ImpactInfo(emitImpact); } if (TryInitImpactInfo(impactInfo, cfg, seq, curObjId, srcObjId, args)) { UnityEngine.GameObject srcObj = GetGameObject(srcObjId); if (null != srcObj) { UnityEngine.Transform t = Utility.FindChildRecursive(srcObj.transform, emitBone); if (null != t) { UnityEngine.Vector3 pos = t.TransformPoint(offset); impactInfo.SenderPosition = new ScriptRuntime.Vector3(pos.x, pos.y, pos.z); } else { UnityEngine.Vector3 pos = srcObj.transform.TransformPoint(offset); pos.y += npc.GetRadius(); impactInfo.SenderPosition = new ScriptRuntime.Vector3(pos.x, pos.y, pos.z); } } impactInfo.DamageData.IsFinal = isFinal; npc.GetSkillStateInfo().AddImpact(impactInfo); GfxSkillSystem.Instance.StartSkill(targetId, impactInfo.ConfigData, impactInfo.Seq, args); return(impactInfo); } } } return(null); }
public static void Calc(EntityInfo npc, TableConfig.Skill cfg) { int oldHp = npc.Hp; AttrCalculator.CopyBaseProperty(npc); AttrCalculator.RefixAttrByImpact(npc); if (null != cfg) { RefixAttrBySkill(npc, cfg); } Calculator.Calc(npc.SceneContext, npc.ActualProperty, null, "attr"); if (oldHp > 0 && npc.Hp <= 0) { LogSystem.Error("hp calc to {0}", npc.Hp); Helper.LogCallStack(); } }
internal static void AoeQuery(GfxSkillSenderInfo senderObj, SkillInstance instance, int senderId, int targetType, Vector3 relativeCenter, bool relativeToTarget, MyFunc <float, int, bool> callback) { Scene scene = senderObj.Scene; EntityInfo srcObj = senderObj.GfxObj; EntityInfo targetObj = senderObj.TargetGfxObj; int aoeType = 0; float range = 0; float angleOrLength = 0; TableConfig.Skill cfg = senderObj.ConfigData; if (null != cfg) { aoeType = cfg.aoeType; range = cfg.aoeSize; angleOrLength = cfg.aoeAngleOrLength; } AoeQuery(scene, srcObj, targetObj, aoeType, range, angleOrLength, instance, senderId, targetType, relativeCenter, relativeToTarget, callback); }
public ImpactInfo(int impactId) { ImpactId = impactId; ConfigData = TableConfig.SkillProvider.Instance.GetSkill(ImpactId); }
public int SkillLevel; // 技能等级 #endregion Fields #region Constructors public SkillInfo(int skillId) { SkillId = skillId; ConfigData = TableConfig.SkillProvider.Instance.GetSkill(skillId); }