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 = cfg.duration > 0 ? cfg.duration : impactInfo.ConfigData.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.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;
}