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