Example #1
0
        protected void RegisterPlayerDataChangeCallback <TChangeType>(EntityObjectField field, [NotNull] Action <NetworkEntityGuid, EntityDataChangedArgs <TChangeType> > callback)
            where TChangeType : struct
        {
            if (callback == null)
            {
                throw new ArgumentNullException(nameof(callback));
            }

            EntityDataCallbackRegister.RegisterCallback(PlayerDetails.LocalPlayerGuid, (int)field, callback);
        }
Example #2
0
        public static NetworkEntityGuid GetEntityGuidValue(this IReadonlyEntityDataFieldContainer container, EntityObjectField index)
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

            return(new NetworkEntityGuid(container.GetFieldValue <ulong>((int)index)));
        }
Example #3
0
        //TODO: Doc
        public static TValueType GetFieldValue <TValueType>(this IReadonlyEntityDataFieldContainer container, EntityObjectField index)
            where TValueType : struct
        {
            if (container == null)
            {
                throw new ArgumentNullException(nameof(container));
            }

            return(container.GetFieldValue <TValueType>((int)index));
        }
Example #4
0
        public static CBAPI_Insights.API.Entity ConvertImpl(EntityImpl entity, string nameSpace)
        {
            CBAPI_Insights.API.Entity ret = (CBAPI_Insights.API.Entity)Activator.CreateInstance(System.Web.Compilation.BuildManager.GetType(nameSpace + "." + entity.ObjectName, true));
            ret.Delete         = entity.Delete;
            ret.Id             = entity.ID;
            ret.ReturnBehavior = (CBAPI_Insights.API.ReturnBehavior)Enum.Parse(typeof(CBAPI_Insights.API.ReturnBehavior), entity.ReturnBehavior.ToString());
            ret.Custom         = entity?.CustomFields.Select(f => ConvertCustomField(f)).ToList();


            foreach (EntityField ef in entity.Fields)
            {
                PropertyInfo pi = ret.GetType().GetProperty(ef.Name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
                if (pi == null)
                {
                    continue;
                }

                if (ef is EntityObjectField)
                {
                    EntityObjectField eof = (EntityObjectField)ef;
                    if (eof.Value is EntityImpl)
                    {
                        pi.SetValue(ret, ConvertImpl((EntityImpl)eof.Value, nameSpace));
                    }
                }
                else if (ef is EntityListField)
                {
                    EntityListField elf = (EntityListField)ef;
                    if (elf.Value != null && elf.Value.Length > 0)
                    {
                        Type  arrType = System.Web.Compilation.BuildManager.GetType(nameSpace + "." + elf.Value[0].ObjectName, true);
                        Array arr     = (Array)Activator.CreateInstance(arrType.MakeArrayType(1), new object[] { elf.Value.Length });
                        for (int i = 0; i < elf.Value.Length; i++)
                        {
                            arr.SetValue(ConvertImpl(elf.Value[i], nameSpace), i);
                        }

                        MethodInfo convertMethod = typeof(APIHelper).GetMethod("ConvertArray", BindingFlags.Public | BindingFlags.Static);
                        MethodInfo generic       = convertMethod.MakeGenericMethod(new[] { arrType });


                        pi.SetValue(ret, generic.Invoke(null, new object[] { arr }));
                    }
                }
                else if (ef is EntityValueField)
                {
                    EntityValueField evf = (EntityValueField)ef;
                    if (evf.Value != null)
                    {
                        Type t = pi.PropertyType;

                        object value = null;
                        object po    = Activator.CreateInstance(t);
                        switch (t.Name)
                        {
                        case "StringValue":
                            value = evf.Value;
                            break;

                        case "IntValue":
                            value = int.Parse(evf.Value, CultureInfo.InvariantCulture);
                            break;

                        case "DecimalValue":
                            value = decimal.Parse(evf.Value, CultureInfo.InvariantCulture);
                            break;

                        case "ShortValue":
                            value = short.Parse(evf.Value, CultureInfo.InvariantCulture);
                            break;

                        case "BooleanValue":
                            value = bool.Parse(evf.Value);
                            break;

                        case "ByteValue":
                            value = byte.Parse(evf.Value, CultureInfo.InvariantCulture);
                            break;

                        case "DoubleValue":
                            value = double.Parse(evf.Value, CultureInfo.InvariantCulture);
                            break;

                        case "DateTimeValue":
                            value = DateTime.Parse(evf.Value, CultureInfo.InvariantCulture);
                            break;

                        case "GuidValue":
                            value = Guid.Parse(evf.Value);
                            break;

                        case "LongValue":
                            value = long.Parse(evf.Value, CultureInfo.InvariantCulture);
                            break;
                        }
                        t.InvokeMember("Value", BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, null, po, new object[] { value });

                        pi.SetValue(ret, po);
                    }
                }
            }
            return(ret);
        }