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);
        }