private NpcInfo CreateParterner(UserInfo owner, PartnerInfo partnerInfo)
        {
            if (null == owner)
            {
                return(null);
            }
            if (null == partnerInfo)
            {
                return(null);
            }
            Data_Unit data = new Data_Unit();

            data.m_Id         = -1;
            data.m_LinkId     = partnerInfo.LinkId;
            data.m_CampId     = owner.GetCampId();
            data.m_Pos        = owner.GetMovementStateInfo().GetPosition3D();
            data.m_RotAngle   = 0;
            data.m_AiLogic    = partnerInfo.GetAiLogic();
            data.m_AiParam[0] = "";
            data.m_AiParam[1] = "";
            data.m_AiParam[2] = partnerInfo.GetAiParam().ToString();
            data.m_IsEnable   = true;
            NpcInfo npc = WorldSystem.Instance.NpcManager.AddNpc(data);

            if (null != npc)
            {
                AppendAttributeConfig aac       = AppendAttributeConfigProvider.Instance.GetDataById(partnerInfo.GetAppendAttrConfigId());
                float inheritAttackAttrPercent  = partnerInfo.GetInheritAttackAttrPercent();
                float inheritDefenceAttrPercent = partnerInfo.GetInheritDefenceAttrPercent();
                if (null != aac)
                {
                    // attack
                    npc.GetBaseProperty().SetAttackBase(Operate_Type.OT_Absolute, (int)(owner.GetActualProperty().AttackBase *inheritAttackAttrPercent));
                    npc.GetBaseProperty().SetFireDamage(Operate_Type.OT_Absolute, owner.GetActualProperty().FireDamage *inheritAttackAttrPercent);
                    npc.GetBaseProperty().SetIceDamage(Operate_Type.OT_Absolute, owner.GetActualProperty().IceDamage *inheritAttackAttrPercent);
                    npc.GetBaseProperty().SetPoisonDamage(Operate_Type.OT_Absolute, owner.GetActualProperty().PoisonDamage *inheritAttackAttrPercent);
                    // defence
                    npc.GetBaseProperty().SetHpMax(Operate_Type.OT_Absolute, (int)(owner.GetActualProperty().HpMax *inheritDefenceAttrPercent));
                    npc.GetBaseProperty().SetEnergyMax(Operate_Type.OT_Absolute, (int)(owner.GetActualProperty().EnergyMax *inheritDefenceAttrPercent));
                    npc.GetBaseProperty().SetADefenceBase(Operate_Type.OT_Absolute, (int)(owner.GetActualProperty().ADefenceBase *inheritDefenceAttrPercent));
                    npc.GetBaseProperty().SetMDefenceBase(Operate_Type.OT_Absolute, (int)(owner.GetActualProperty().MDefenceBase *inheritDefenceAttrPercent));
                    npc.GetBaseProperty().SetFireERD(Operate_Type.OT_Absolute, owner.GetActualProperty().FireERD *inheritDefenceAttrPercent);
                    npc.GetBaseProperty().SetIceERD(Operate_Type.OT_Absolute, owner.GetActualProperty().IceERD *inheritDefenceAttrPercent);
                    npc.GetBaseProperty().SetPoisonERD(Operate_Type.OT_Absolute, owner.GetActualProperty().PoisonERD *inheritDefenceAttrPercent);
                    // reset hp & energy
                    npc.SetHp(Operate_Type.OT_Absolute, npc.GetBaseProperty().HpMax);
                    npc.SetEnergy(Operate_Type.OT_Absolute, npc.GetBaseProperty().EnergyMax);
                }
                npc.SetAIEnable(true);
                npc.IsArenaPartner = true;
                npc.GetSkillStateInfo().RemoveAllSkill();
                npc.BornTime = TimeUtility.GetServerMilliseconds();
                List <int> skillList = partnerInfo.GetSkillList();
                if (null != skillList)
                {
                    for (int i = 0; i < skillList.Count; ++i)
                    {
                        SkillInfo skillInfo = new SkillInfo(skillList[i]);
                        npc.GetSkillStateInfo().AddSkill(skillInfo);
                    }
                }
                owner.LastSummonPartnerTime = TimeUtility.GetServerMilliseconds();
                npc.SkillController         = new SwordManSkillController(npc, GfxModule.Skill.GfxSkillSystem.Instance);
                npc.OwnerId     = owner.GetId();
                owner.PartnerId = npc.GetId();
                npc.SetLevel(owner.GetLevel());
                EntityManager.Instance.CreateNpcView(npc.GetId());
                if (partnerInfo.BornSkill > 0)
                {
                    SkillInfo skillInfo = new SkillInfo(partnerInfo.BornSkill);
                    npc.GetSkillStateInfo().AddSkill(skillInfo);
                    npc.SkillController.ForceStartSkill(partnerInfo.BornSkill);
                }
                CharacterView view = EntityManager.Instance.GetCharacterViewById(npc.GetId());
                if (null != view)
                {
                    GfxSystem.SetLayer(view.Actor, "PhysicObj");
                }
            }
            return(npc);
        }