Пример #1
0
        public void OnDisconnected(NFDataList valueList)
        {
            if (mKey != null)
            {
                //reconnect
                mAccount  = "";
                mKey      = "";
                mServerID = 0;
                mWorldServerList.Clear();
                mGameServerList.Clear();
                mRoleID   = new NFGUID();
                mRoleName = "";
                mRoleList.Clear();

                //Clear all players and UI objects
                NFDataList xDataList = mKernelModule.GetObjectList();
                for (int i = 0; i < xDataList.Count(); ++i)
                {
                    mKernelModule.DestroyObject(xDataList.ObjectVal(i));
                }

                //mUIModule.DestroyAllUI();
                //mUIModule.ShowUI<NFUILogin>();
            }
        }
Пример #2
0
        public void OnClassHandler(NFGUID self, int nContainerID, int nGroupID, NFIObject.CLASS_EVENT_TYPE eType, string strClassName, string strConfigIndex)
        {
            if (eType == NFIObject.CLASS_EVENT_TYPE.OBJECT_CREATE)
            {
                NFIObject xObject = NFCKernelModule.Instance.GetObject(self);

                NFIPropertyManager xPropertyManager  = xObject.GetPropertyManager();
                NFDataList         xPropertyNameList = xPropertyManager.GetPropertyList();
                for (int i = 0; i < xPropertyNameList.Count(); i++)
                {
                    string      strPropertyName = xPropertyNameList.StringVal(i);
                    NFIProperty xProperty       = xPropertyManager.GetProperty(strPropertyName);
                    if (xProperty.GetUpload())
                    {
                        xProperty.RegisterCallback(OnPropertyHandler);
                    }
                }

                NFIRecordManager xRecordManager  = xObject.GetRecordManager();
                NFDataList       xRecordNameList = xRecordManager.GetRecordList();
                for (int i = 0; i < xRecordNameList.Count(); i++)
                {
                    string    strRecodeName = xRecordNameList.StringVal(i);
                    NFIRecord xRecord       = xRecordManager.GetRecord(strRecodeName);
                    if (xRecord.GetUpload())
                    {
                        xRecord.RegisterCallback(OnRecordHandler);
                    }
                }
            }
        }
Пример #3
0
    // Use this for initialization
    void Start()
    {
        mxThis  = this.transform;
        xCamera = this.GetComponent <Camera>();

        NFrame.NFIClass xLogicClass = NFrame.NFCKernelModule.Instance.GetLogicClassModule().GetElement("Scene");
        List <string>   xList       = xLogicClass.GetConfigNameList();

        for (int i = 0; i < xList.Count; ++i)
        {
            string strName = (string)xList[i];

            string strCamOffestPos = NFrame.NFCKernelModule.Instance.GetElementModule().QueryPropertyString(strName, "CamOffestPos");
            string strCamOffestRot = NFrame.NFCKernelModule.Instance.GetElementModule().QueryPropertyString(strName, "CamOffestRot");

            NFrame.NFDataList xCamOffestPosList = new NFrame.NFDataList(strCamOffestPos, ',');
            NFrame.NFDataList xCamOffestRotList = new NFrame.NFDataList(strCamOffestRot, ',');
            if (xCamOffestPosList.Count() == 3 && xCamOffestRotList.Count() == 2)
            {
                OffestPos xOffestPos = new OffestPos();
                xOffestPos.offsetX = float.Parse(xCamOffestPosList.StringVal(0));
                xOffestPos.offsetY = float.Parse(xCamOffestPosList.StringVal(1));
                xOffestPos.offsetZ = float.Parse(xCamOffestPosList.StringVal(2));

                xOffestPos.XRot = float.Parse(xCamOffestRotList.StringVal(0));
                xOffestPos.YRot = float.Parse(xCamOffestRotList.StringVal(1));

                mxOffestPosList[int.Parse(strName)] = xOffestPos;
            }
        }
    }
Пример #4
0
        private void OnClassPlayerEventHandler(NFGUID self, int nContainerID, int nGroupID, NFIObject.CLASS_EVENT_TYPE eType, string strClassName, string strConfigIndex)
        {
            if (eType == NFIObject.CLASS_EVENT_TYPE.OBJECT_CREATE_FINISH)
            {
                NFIClass           classObject     = mClassModule.GetElement(strClassName);
                NFIPropertyManager propertyManager = classObject.GetPropertyManager();
                NFIRecordManager   recordManager   = classObject.GetRecordManager();

                NFDataList propertyList = propertyManager.GetPropertyList();
                NFDataList recordList   = recordManager.GetRecordList();

                for (int i = 0; i < propertyList.Count(); ++i)
                {
                    NFIProperty propertyObject = propertyManager.GetProperty(propertyList.StringVal(i));
                    if (propertyObject.GetUpload())
                    {
                        mKernelModule.RegisterPropertyCallback(self, propertyObject.GetKey(), OnPropertyDataHandler);
                    }
                }

                for (int i = 0; i < recordList.Count(); ++i)
                {
                    NFIRecord recordObject = recordManager.GetRecord(recordList.StringVal(i));
                    if (recordObject.GetUpload())
                    {
                        mKernelModule.RegisterRecordCallback(self, recordObject.GetName(), RecordEventHandler);
                    }
                }
            }
        }
Пример #5
0
        public NFDataList(NFDataList src)
        {
            for (int i = 0; i < src.Count(); i++)
            {
                switch (src.GetType(i))
                {
                case VARIANT_TYPE.VTYPE_INT:
                    AddInt(src.IntVal(i));
                    break;

                case VARIANT_TYPE.VTYPE_FLOAT:
                    AddFloat(src.FloatVal(i));
                    break;

                case VARIANT_TYPE.VTYPE_STRING:
                    AddString(src.StringVal(i));
                    break;

                case VARIANT_TYPE.VTYPE_OBJECT:
                    AddObject(src.ObjectVal(i));
                    break;

                case VARIANT_TYPE.VTYPE_VECTOR2:
                    AddVector2(src.Vector2Val(i));
                    break;

                case VARIANT_TYPE.VTYPE_VECTOR3:
                    AddVector3(src.Vector3Val(i));
                    break;

                default:
                    break;
                }
            }
        }
Пример #6
0
        public override int FindRecordRow(NFGUID self, string strRecordName, int nCol, NFVector3 nValue)
        {
            NFDataList datalist = new NFDataList();
            int        nCount   = FindRecordRow(self, strRecordName, nCol, nValue, ref datalist);

            if (nCount > 0 && datalist.Count() > 0)
            {
                return((int)datalist.IntVal(0));
            }
            return(-1);
        }
Пример #7
0
        public override int FindVector3(int nCol, NFVector3 value)
        {
            NFDataList varResult = new NFDataList();
            int        nCount    = FindVector3(nCol, value, ref varResult);

            if (nCount > 0 && varResult.Count() > 0)
            {
                return((int)varResult.IntVal(0));
            }

            return(-1);
        }
Пример #8
0
        public override int FindVector3(int nCol, NFVector3 value, ref NFDataList varResult)
        {
            foreach (int i in mhtRecordVec.Keys)
            {
                NFDataList valueList = (NFDataList)mhtRecordVec[i];
                if (valueList.Vector3Val(nCol) == value)
                {
                    varResult.AddInt(i);
                }
            }

            return(varResult.Count());
        }
Пример #9
0
        void AddBasePropertyFormOther(string strName, string strOther)
        {
            NFIClass xOtherClass = GetElement(strOther);
            NFIClass xLogicClass = GetElement(strName);

            if (null != xLogicClass && null != xOtherClass)
            {
                NFDataList xValue = xOtherClass.GetPropertyManager().GetPropertyList();
                for (int i = 0; i < xValue.Count(); ++i)
                {
                    NFIProperty xProperty = xOtherClass.GetPropertyManager().GetProperty(xValue.StringVal(i));
                    xLogicClass.GetPropertyManager().AddProperty(xValue.StringVal(i), xProperty.GetData());
                }
            }
        }
Пример #10
0
        void InitRecord(NFGUID self, string strClassName)
        {
            NFIClass   xLogicClass = mxLogicClassModule.GetElement(strClassName);
            NFDataList xDataList   = xLogicClass.GetRecordManager().GetRecordList();

            for (int i = 0; i < xDataList.Count(); ++i)
            {
                string    strRecordyName = xDataList.StringVal(i);
                NFIRecord xRecord        = xLogicClass.GetRecordManager().GetRecord(strRecordyName);

                NFIObject        xObject        = GetObject(self);
                NFIRecordManager xRecordManager = xObject.GetRecordManager();

                NFIRecord record = xRecordManager.AddRecord(strRecordyName, xRecord.GetRows(), xRecord.GetColsData());
                if (record != null)
                {
                    record.SetUpload(xRecord.GetUpload());
                }
            }
        }
Пример #11
0
        void InitProperty(NFGUID self, string strClassName)
        {
            NFIClass   xLogicClass = mxLogicClassModule.GetElement(strClassName);
            NFDataList xDataList   = xLogicClass.GetPropertyManager().GetPropertyList();

            for (int i = 0; i < xDataList.Count(); ++i)
            {
                string      strPropertyName = xDataList.StringVal(i);
                NFIProperty xProperty       = xLogicClass.GetPropertyManager().GetProperty(strPropertyName);

                NFIObject          xObject          = GetObject(self);
                NFIPropertyManager xPropertyManager = xObject.GetPropertyManager();

                NFIProperty property = xPropertyManager.AddProperty(strPropertyName, xProperty.GetData());
                //if property==null ,means this property alreay exist in manager
                if (property != null)
                {
                    property.SetUpload(xProperty.GetUpload());
                }
            }
        }
Пример #12
0
        public override void Update(float fPassTime)
        {
            NFDataList xRemoveKeyList = new NFDataList();;

            foreach (KeyValuePair <string, NFIHeartBeat> kv in mhtHeartBeat)
            {
                NFIHeartBeat xHeartBeat = (NFIHeartBeat)kv.Value;
                if (xHeartBeat.NeedRemove())
                {
                    xRemoveKeyList.AddString((string)kv.Key);
                }
                else
                {
                    xHeartBeat.Update(fPassTime);
                }
            }

            for (int i = 0; i < xRemoveKeyList.Count(); i++)
            {
                mhtHeartBeat.Remove(xRemoveKeyList.StringVal(i));
            }
        }
Пример #13
0
        public override void Shut()
        {
            NFDataList xRecordList = mRecordManager.GetRecordList();

            if (null != xRecordList)
            {
                for (int i = 0; i < xRecordList.Count(); ++i)
                {
                    string    strRecordName = xRecordList.StringVal(i);
                    NFIRecord xRecord       = mRecordManager.GetRecord(strRecordName);
                    if (null != xRecord)
                    {
                        xRecord.Clear();
                    }
                }
            }

            mRecordManager   = null;
            mPropertyManager = null;
            mHeartManager    = null;

            return;
        }
Пример #14
0
        public void RequireAddRow(NFGUID objectID, string strRecordName, int nRow)
        {
            NFMsg.ObjectRecordAddRow xData = new NFMsg.ObjectRecordAddRow();
            xData.PlayerId   = mHelpModule.NFToPB(objectID);
            xData.RecordName = ByteString.CopyFromUtf8(strRecordName);

            NFMsg.RecordAddRowStruct xRecordAddRowStruct = new NFMsg.RecordAddRowStruct();
            xData.RowData.Add(xRecordAddRowStruct);
            xRecordAddRowStruct.Row = nRow;

            NFIObject  xObject  = mKernelModule.GetObject(objectID);
            NFIRecord  xRecord  = xObject.GetRecordManager().GetRecord(strRecordName);
            NFDataList xRowData = xRecord.QueryRow(nRow);

            for (int i = 0; i < xRowData.Count(); i++)
            {
                switch (xRowData.GetType(i))
                {
                case NFDataList.VARIANT_TYPE.VTYPE_INT:
                {
                    NFMsg.RecordInt xRecordInt = new NFMsg.RecordInt();
                    xRecordInt.Row  = nRow;
                    xRecordInt.Col  = i;
                    xRecordInt.Data = xRowData.IntVal(i);
                    xRecordAddRowStruct.RecordIntList.Add(xRecordInt);
                }
                break;

                case NFDataList.VARIANT_TYPE.VTYPE_FLOAT:
                {
                    NFMsg.RecordFloat xRecordFloat = new NFMsg.RecordFloat();
                    xRecordFloat.Row  = nRow;
                    xRecordFloat.Col  = i;
                    xRecordFloat.Data = (float)xRowData.FloatVal(i);
                    xRecordAddRowStruct.RecordFloatList.Add(xRecordFloat);
                }
                break;

                case NFDataList.VARIANT_TYPE.VTYPE_STRING:
                {
                    NFMsg.RecordString xRecordString = new NFMsg.RecordString();
                    xRecordString.Row  = nRow;
                    xRecordString.Col  = i;
                    xRecordString.Data = ByteString.CopyFromUtf8(xRowData.StringVal(i));
                    xRecordAddRowStruct.RecordStringList.Add(xRecordString);
                }
                break;

                case NFDataList.VARIANT_TYPE.VTYPE_OBJECT:
                {
                    NFMsg.RecordObject xRecordObject = new NFMsg.RecordObject();
                    xRecordObject.Row  = nRow;
                    xRecordObject.Col  = i;
                    xRecordObject.Data = mHelpModule.NFToPB(xRowData.ObjectVal(i));
                    xRecordAddRowStruct.RecordObjectList.Add(xRecordObject);
                }
                break;

                case NFDataList.VARIANT_TYPE.VTYPE_VECTOR2:
                {
                    NFMsg.RecordVector2 xRecordVector = new NFMsg.RecordVector2();
                    xRecordVector.Row  = nRow;
                    xRecordVector.Col  = i;
                    xRecordVector.Data = mHelpModule.NFToPB(xRowData.Vector2Val(i));
                    xRecordAddRowStruct.RecordVector2List.Add(xRecordVector);
                }
                break;

                case NFDataList.VARIANT_TYPE.VTYPE_VECTOR3:
                {
                    NFMsg.RecordVector3 xRecordVector = new NFMsg.RecordVector3();
                    xRecordVector.Row  = nRow;
                    xRecordVector.Col  = i;
                    xRecordVector.Data = mHelpModule.NFToPB(xRowData.Vector3Val(i));
                    xRecordAddRowStruct.RecordVector3List.Add(xRecordVector);
                }
                break;
                }
            }

            mxBody.SetLength(0);
            xData.WriteTo(mxBody);

            Debug.Log("send upload record addRow");
            SendMsg((int)NFMsg.EGameMsgID.AckAddRow, mxBody);
        }
Пример #15
0
        public void RequireAddRow(NFrame.NFGUID self, string strRecordName, int nRow)
        {
            NFMsg.ObjectRecordAddRow xData = new NFMsg.ObjectRecordAddRow();
            xData.player_id   = NFNetController.NFToPB(self);
            xData.record_name = System.Text.Encoding.Default.GetBytes(strRecordName);

            NFMsg.RecordAddRowStruct xRecordAddRowStruct = new NFMsg.RecordAddRowStruct();
            xData.row_data.Add(xRecordAddRowStruct);
            xRecordAddRowStruct.row = nRow;

            NFIObject  xObject  = NFCKernelModule.Instance.GetObject(self);
            NFIRecord  xRecord  = xObject.GetRecordManager().GetRecord(strRecordName);
            NFDataList xRowData = xRecord.QueryRow(nRow);

            for (int i = 0; i < xRowData.Count(); i++)
            {
                switch (xRowData.GetType(i))
                {
                case NFDataList.VARIANT_TYPE.VTYPE_INT:
                {
                    NFMsg.RecordInt xRecordInt = new NFMsg.RecordInt();
                    xRecordInt.row  = nRow;
                    xRecordInt.col  = i;
                    xRecordInt.data = xRowData.IntVal(i);
                    xRecordAddRowStruct.record_int_list.Add(xRecordInt);
                }
                break;

                case NFDataList.VARIANT_TYPE.VTYPE_FLOAT:
                {
                    NFMsg.RecordFloat xRecordFloat = new NFMsg.RecordFloat();
                    xRecordFloat.row  = nRow;
                    xRecordFloat.col  = i;
                    xRecordFloat.data = (float)xRowData.FloatVal(i);
                    xRecordAddRowStruct.record_float_list.Add(xRecordFloat);
                }
                break;

                case NFDataList.VARIANT_TYPE.VTYPE_STRING:
                {
                    NFMsg.RecordString xRecordString = new NFMsg.RecordString();
                    xRecordString.row  = nRow;
                    xRecordString.col  = i;
                    xRecordString.data = System.Text.Encoding.Default.GetBytes(xRowData.StringVal(i));
                    xRecordAddRowStruct.record_string_list.Add(xRecordString);
                }
                break;

                case NFDataList.VARIANT_TYPE.VTYPE_OBJECT:
                {
                    NFMsg.RecordObject xRecordObject = new NFMsg.RecordObject();
                    xRecordObject.row  = nRow;
                    xRecordObject.col  = i;
                    xRecordObject.data = NFNetController.NFToPB(xRowData.ObjectVal(i));
                    xRecordAddRowStruct.record_object_list.Add(xRecordObject);
                }
                break;

                case NFDataList.VARIANT_TYPE.VTYPE_VECTOR2:
                {
                    NFMsg.RecordVector2 xRecordVector = new NFMsg.RecordVector2();
                    xRecordVector.row  = nRow;
                    xRecordVector.col  = i;
                    xRecordVector.data = NFNetController.NFToPB(xRowData.Vector2Val(i));
                    xRecordAddRowStruct.record_vector2_list.Add(xRecordVector);
                }
                break;

                case NFDataList.VARIANT_TYPE.VTYPE_VECTOR3:
                {
                    NFMsg.RecordVector3 xRecordVector = new NFMsg.RecordVector3();
                    xRecordVector.row  = nRow;
                    xRecordVector.col  = i;
                    xRecordVector.data = NFNetController.NFToPB(xRowData.Vector3Val(i));
                    xRecordAddRowStruct.record_vector3_list.Add(xRecordVector);
                }
                break;
                }
            }

            mxBody.SetLength(0);
            mxSerializer.Serialize(mxBody, xData);

            Debug.Log("send upload record addRow");
            SendMsg(self, NFMsg.EGameMsgID.EGMI_ACK_ADD_ROW, mxBody);
        }
Пример #16
0
        private void ADD_ROW(NFGUID self, string strRecordName, NFMsg.RecordAddRowStruct xAddStruct)
        {
            NFIObject go = mKernelModule.GetObject(self);

            if (go == null)
            {
                Debug.LogError("error id" + self);
                return;
            }

            NFIRecordManager xRecordManager = go.GetRecordManager();

            Hashtable recordVecDesc = new Hashtable();
            Hashtable recordVecData = new Hashtable();

            for (int k = 0; k < xAddStruct.RecordIntList.Count; ++k)
            {
                NFMsg.RecordInt addIntStruct = (NFMsg.RecordInt)xAddStruct.RecordIntList[k];

                if (addIntStruct.Col >= 0)
                {
                    recordVecDesc[addIntStruct.Col] = NFDataList.VARIANT_TYPE.VTYPE_INT;
                    recordVecData[addIntStruct.Col] = addIntStruct.Data;
                }
            }

            for (int k = 0; k < xAddStruct.RecordFloatList.Count; ++k)
            {
                NFMsg.RecordFloat addFloatStruct = (NFMsg.RecordFloat)xAddStruct.RecordFloatList[k];

                if (addFloatStruct.Col >= 0)
                {
                    recordVecDesc[addFloatStruct.Col] = NFDataList.VARIANT_TYPE.VTYPE_FLOAT;
                    recordVecData[addFloatStruct.Col] = addFloatStruct.Data;
                }
            }

            for (int k = 0; k < xAddStruct.RecordStringList.Count; ++k)
            {
                NFMsg.RecordString addStringStruct = (NFMsg.RecordString)xAddStruct.RecordStringList[k];

                if (addStringStruct.Col >= 0)
                {
                    recordVecDesc[addStringStruct.Col] = NFDataList.VARIANT_TYPE.VTYPE_STRING;
                    if (addStringStruct.Data != null)
                    {
                        recordVecData[addStringStruct.Col] = addStringStruct.Data.ToStringUtf8();
                    }
                    else
                    {
                        recordVecData[addStringStruct.Col] = "";
                    }
                }
            }

            for (int k = 0; k < xAddStruct.RecordObjectList.Count; ++k)
            {
                NFMsg.RecordObject addObjectStruct = (NFMsg.RecordObject)xAddStruct.RecordObjectList[k];

                if (addObjectStruct.Col >= 0)
                {
                    recordVecDesc[addObjectStruct.Col] = NFDataList.VARIANT_TYPE.VTYPE_OBJECT;
                    recordVecData[addObjectStruct.Col] = mHelpModule.PBToNF(addObjectStruct.Data);
                }
            }

            for (int k = 0; k < xAddStruct.RecordVector2List.Count; ++k)
            {
                NFMsg.RecordVector2 addObjectStruct = (NFMsg.RecordVector2)xAddStruct.RecordVector2List[k];

                if (addObjectStruct.Col >= 0)
                {
                    recordVecDesc[addObjectStruct.Col] = NFDataList.VARIANT_TYPE.VTYPE_VECTOR2;
                    recordVecData[addObjectStruct.Col] = mHelpModule.PBToNF(addObjectStruct.Data);
                }
            }

            for (int k = 0; k < xAddStruct.RecordVector3List.Count; ++k)
            {
                NFMsg.RecordVector3 addObjectStruct = (NFMsg.RecordVector3)xAddStruct.RecordVector3List[k];

                if (addObjectStruct.Col >= 0)
                {
                    recordVecDesc[addObjectStruct.Col] = NFDataList.VARIANT_TYPE.VTYPE_VECTOR3;
                    recordVecData[addObjectStruct.Col] = mHelpModule.PBToNF(addObjectStruct.Data);
                }
            }

            NFDataList varListDesc = new NFDataList();
            NFDataList varListData = new NFDataList();

            for (int m = 0; m < recordVecDesc.Count; m++)
            {
                if (recordVecDesc.ContainsKey(m) && recordVecData.ContainsKey(m))
                {
                    NFDataList.VARIANT_TYPE nType = (NFDataList.VARIANT_TYPE)recordVecDesc[m];
                    switch (nType)
                    {
                    case NFDataList.VARIANT_TYPE.VTYPE_INT:
                    {
                        varListDesc.AddInt(0);
                        varListData.AddInt((Int64)recordVecData[m]);
                    }

                    break;

                    case NFDataList.VARIANT_TYPE.VTYPE_FLOAT:
                    {
                        varListDesc.AddFloat(0.0f);
                        varListData.AddFloat((float)recordVecData[m]);
                    }
                    break;

                    case NFDataList.VARIANT_TYPE.VTYPE_STRING:
                    {
                        varListDesc.AddString("");
                        varListData.AddString((string)recordVecData[m]);
                    }
                    break;

                    case NFDataList.VARIANT_TYPE.VTYPE_OBJECT:
                    {
                        varListDesc.AddObject(new NFGUID());
                        varListData.AddObject((NFGUID)recordVecData[m]);
                    }
                    break;

                    case NFDataList.VARIANT_TYPE.VTYPE_VECTOR2:
                    {
                        varListDesc.AddVector2(new NFVector2());
                        varListData.AddVector2((NFVector2)recordVecData[m]);
                    }
                    break;

                    case NFDataList.VARIANT_TYPE.VTYPE_VECTOR3:
                    {
                        varListDesc.AddVector3(new NFVector3());
                        varListData.AddVector3((NFVector3)recordVecData[m]);
                    }
                    break;

                    default:
                        break;
                    }
                }
                else
                {
                    //����
                    //Debug.LogException(i);
                }
            }

            NFIRecord xRecord = xRecordManager.GetRecord(strRecordName);

            if (null == xRecord)
            {
                Debug.Log("Empty record:" + strRecordName);
                string    strClassName  = mKernelModule.QueryPropertyString(self, NFrame.IObject.ClassName);
                NFIClass  xLogicClass   = mClassModule.GetElement(strClassName);
                NFIRecord xStaticRecord = xLogicClass.GetRecordManager().GetRecord(strRecordName);

                xRecord = xRecordManager.AddRecord(strRecordName, 512, varListDesc, xStaticRecord.GetTagData());
            }

            if (self.IsNull())
            {
                StringBuilder stringBuilder = new StringBuilder();
                for (int i = 0; i < varListData.Count(); ++i)
                {
                    stringBuilder.Append(varListData.GetData(i).ToString());
                    stringBuilder.Append(";");
                }

                Debug.Log(strRecordName + " add row:" + stringBuilder.ToString());
            }

            xRecord.AddRow(xAddStruct.Row, varListData);
        }
Пример #17
0
        public override NFIObject CreateObject(NFGUID self, int nContainerID, int nGroupID, string strClassName, string strConfigIndex, NFDataList arg)
        {
            if (!mhtObject.ContainsKey(self))
            {
                NFIObject xNewObject = new NFCObject(self, nContainerID, nGroupID, strClassName, strConfigIndex);
                mhtObject.Add(self, xNewObject);

                NFDataList varConfigID = new NFDataList();
                varConfigID.AddString(strConfigIndex);
                xNewObject.GetPropertyManager().AddProperty("ConfigID", varConfigID);

                NFDataList varConfigClass = new NFDataList();
                varConfigClass.AddString(strClassName);
                xNewObject.GetPropertyManager().AddProperty("ClassName", varConfigClass);

                if (arg.Count() % 2 == 0)
                {
                    for (int i = 0; i < arg.Count() - 1; i += 2)
                    {
                        string strPropertyName        = arg.StringVal(i);
                        NFDataList.VARIANT_TYPE eType = arg.GetType(i + 1);
                        switch (eType)
                        {
                        case NFDataList.VARIANT_TYPE.VTYPE_INT:
                        {
                            NFDataList xDataList = new NFDataList();
                            xDataList.AddInt(arg.IntVal(i + 1));
                            xNewObject.GetPropertyManager().AddProperty(strPropertyName, xDataList);
                        }
                        break;

                        case NFDataList.VARIANT_TYPE.VTYPE_FLOAT:
                        {
                            NFDataList xDataList = new NFDataList();
                            xDataList.AddFloat(arg.FloatVal(i + 1));
                            xNewObject.GetPropertyManager().AddProperty(strPropertyName, xDataList);
                        }
                        break;

                        case NFDataList.VARIANT_TYPE.VTYPE_STRING:
                        {
                            NFDataList xDataList = new NFDataList();
                            xDataList.AddString(arg.StringVal(i + 1));
                            xNewObject.GetPropertyManager().AddProperty(strPropertyName, xDataList);
                        }
                        break;

                        case NFDataList.VARIANT_TYPE.VTYPE_OBJECT:
                        {
                            NFDataList xDataList = new NFDataList();
                            xDataList.AddObject(arg.ObjectVal(i + 1));
                            xNewObject.GetPropertyManager().AddProperty(strPropertyName, xDataList);
                        }
                        break;

                        case NFDataList.VARIANT_TYPE.VTYPE_VECTOR2:
                        {
                            NFDataList xDataList = new NFDataList();
                            xDataList.AddVector2(arg.Vector2Val(i + 1));
                            xNewObject.GetPropertyManager().AddProperty(strPropertyName, xDataList);
                        }
                        break;

                        case NFDataList.VARIANT_TYPE.VTYPE_VECTOR3:
                        {
                            NFDataList xDataList = new NFDataList();
                            xDataList.AddVector3(arg.Vector3Val(i + 1));
                            xNewObject.GetPropertyManager().AddProperty(strPropertyName, xDataList);
                        }
                        break;

                        default:
                            break;
                        }
                    }
                }

                InitProperty(self, strClassName);
                InitRecord(self, strClassName);

                ClassHandleDel xHandleDel = (ClassHandleDel)mhtClassHandleDel[strClassName];
                if (null != xHandleDel && null != xHandleDel.GetHandler())
                {
                    NFIObject.ClassEventHandler xHandlerList = xHandleDel.GetHandler();
                    xHandlerList(self, nContainerID, nGroupID, NFIObject.CLASS_EVENT_TYPE.OBJECT_CREATE, strClassName, strConfigIndex);
                    xHandlerList(self, nContainerID, nGroupID, NFIObject.CLASS_EVENT_TYPE.OBJECT_LOADDATA, strClassName, strConfigIndex);
                    xHandlerList(self, nContainerID, nGroupID, NFIObject.CLASS_EVENT_TYPE.OBJECT_CREATE_FINISH, strClassName, strConfigIndex);
                }

                //NFCLog.Instance.Log(NFCLog.LOG_LEVEL.DEBUG, "Create object: " + self.ToString() + " ClassName: " + strClassName + " SceneID: " + nContainerID + " GroupID: " + nGroupID);
                return(xNewObject);
            }

            return(null);
        }