public override bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime)
{
GfxSkillSenderInfo senderObj = sender as GfxSkillSenderInfo;
if (null == senderObj) return false;
Scene scene = senderObj.Scene;
EntityInfo obj = senderObj.GfxObj;
if (obj == null) {
return false;
}
if (curSectionTime < StartTime) {
return true;
}
int senderId = senderObj.ActorId;
if (senderObj.ConfigData.type != (int)SkillOrImpactType.Skill) {
senderId = senderObj.TargetActorId;
}
int impactId = senderObj.ConfigData.impacttoself;
if (senderObj.ConfigData.type != (int)SkillOrImpactType.Skill) {
if (impactId <= 0) {
int skillId = scene.EntityController.GetImpactSkillId(senderObj.ActorId, senderObj.SkillId, senderObj.Seq);
TableConfig.Skill cfg = TableConfig.SkillProvider.Instance.GetSkill(skillId);
if (null != cfg) {
impactId = cfg.impacttoself;
}
}
}
if (m_Radius <= Geometry.c_FloatPrecision) {
Dictionary<string, object> args;
TriggerUtil.CalcImpactConfig(0, impactId, instance, senderObj.ConfigData, out args);
scene.EntityController.SendImpact(senderObj.ConfigData, senderObj.Seq, senderObj.ActorId, senderId, senderId, impactId, args);
} else {
EntityInfo targetObj = senderObj.TargetGfxObj;
int ct = 0;
List<int> targetIds = new List<int>();
TriggerUtil.AoeQuery(scene, obj, targetObj, m_AoeType, m_Radius, m_AngleOrLength, instance, senderId, (int)SkillTargetType.Friend, m_RelativeCenter, m_RelativeToTarget, (float distSqr, int objId) => {
Dictionary<string, object> args;
TriggerUtil.CalcImpactConfig(0, impactId, instance, senderObj.ConfigData, out args);
scene.EntityController.SendImpact(senderObj.ConfigData, senderObj.Seq, senderObj.ActorId, senderId, objId, impactId, args);
targetIds.Add(objId);
++ct;
if (m_MaxCount <= 0 || ct < m_MaxCount) {
return true;
} else {
return false;
}
});
}
return false;
}