void CreateOneObject(int index) { --m_remain_attack_cnt; Entity owner_entity = GetOwnerEntity(); Skill owner_skill = GetOwnerSkill(); Target projectile_target = null; if (!m_ignore_target) { projectile_target = owner_skill.GetMajorTarget(); } Vector3FP position_offset = m_offset; FixPoint angle_offset = FixPoint.Zero; if (m_combo_type_crc == ComboType_Angle) { if (m_combo_attack_cnt % 2 == 1) { angle_offset = m_combo_interval * (FixPoint)((index + 1) / 2); if (index % 2 != 0) { angle_offset = -angle_offset; } } else { angle_offset = m_combo_interval * ((FixPoint)(index / 2) + FixPoint.Half); if (index % 2 != 0) { angle_offset = -angle_offset; } } } else if (m_combo_type_crc == ComboType_Circle) { if (m_combo_interval == FixPoint.Zero) { FixPoint rotate_radian = FixPoint.TwoPi / (FixPoint)m_combo_attack_cnt * (FixPoint)index; position_offset = position_offset.YRotate(rotate_radian); } else { if (m_combo_attack_cnt % 2 == 1) { angle_offset = m_combo_interval * (FixPoint)((index + 1) / 2); if (index % 2 != 0) { angle_offset = -angle_offset; } } else { angle_offset = m_combo_interval * ((FixPoint)(index / 2) + FixPoint.Half); if (index % 2 != 0) { angle_offset = -angle_offset; } } FixPoint rotate_radian = FixPoint.Degree2Radian(angle_offset); position_offset = position_offset.YRotate(rotate_radian); angle_offset = FixPoint.Zero; } } if (projectile_target == null && !m_ignore_target) { SkillDefinitionComponent definition_component = owner_skill.GetDefinitionComponent(); if (definition_component.ExternalDataType == SkillDefinitionComponent.NeedExternalOffset) { position_offset.z = definition_component.ExternalVector.Length(); } } EntityUtil.CreateEntityForSkillAndEffect(this, owner_entity, projectile_target, position_offset, angle_offset, m_object_type_id, m_object_proto_id, m_object_life_time, m_generator); }