public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var root = JObject.Load(reader); var leafs = GetLeafs(root); var genericType = objectType.GenericTypeArguments[0]; var lambdas = leafs.Select(x => GetLambda(x, genericType, serializer)).ToList(); var uptaderType = typeof(PartialUpdate <>); var makeme = uptaderType.MakeGenericType(genericType); object o = Activator.CreateInstance(makeme); PartialUpdate partialUpdate = o as PartialUpdate; if (partialUpdate == null) { return(null); } partialUpdate.Updates = lambdas; return(partialUpdate); }
public IActionResult Patch([FromBody] PartialUpdate <Post> partialUpdate) { var post = new Post { Author = new Author { ContactInfo = new ContactInfo() } }; try { partialUpdate.Apply(post); return(Ok()); } catch (NullEntityPatchException npe) { return(BadRequest(npe.Message)); } }
public void Respawn( ) { var p = Test.DataUtils.GetZone(448).POIs["watchtower"]; CharacterEntity.Position = p; var forcedMove = new ForcedMovement { Type = 1, Unk1 = 0, Position = p, AimDirection = CharacterEntity.AimDirection, Velocity = Vector3.Zero, GameTime = AssignedShard.CurrentTime, KeyFrame = AssignedShard.CurrentShortTime }; NetChans[ChannelType.ReliableGss].SendGSSClass(forcedMove, CharacterEntity.EntityID); var respawnMsg = new Respawned { LastUpdateTime = AssignedShard.CurrentTime - 2, Unk1 = 0x0100 }; NetChans[ChannelType.ReliableGss].SendGSSClass(respawnMsg, CharacterEntity.EntityID); var upd = new PartialUpdate(); upd.Add(new MovementView { LastUpdateTime = AssignedShard.CurrentTime, Position = CharacterEntity.Position, Rotation = CharacterEntity.Rotation, AimDirection = CharacterEntity.AimDirection, Velocity = CharacterEntity.Velocity, State = (ushort)CharacterEntity.MovementState, Unk1 = 0, Jets = (ushort)CharacterEntity.CharData.JumpJetEnergy, AirGroundTimer = 0x3a7f, JumpTimer = 0x3cdb, Unk2 = 0, }); upd.Add(new CharacterState { State = 3, LastUpdateTime = AssignedShard.CurrentTime - 1, }); upd.Add(new Unknown1 { }); upd.Add(new Unknown2 { Unk1 = 0x0100, Unk2 = 0x0100, LastUpdateTime = AssignedShard.CurrentTime, }); NetChans[ChannelType.ReliableGss].SendGSSClass(upd, CharacterEntity.EntityID, Enums.GSS.Controllers.Character_BaseController); upd = new PartialUpdate(); upd.Add(new Unknown3 { Unk1 = 0, LastUpdateTime = AssignedShard.CurrentTime, }); upd.Add(new CharacterState { State = 6, LastUpdateTime = AssignedShard.CurrentTime, }); upd.Add(new CurrentHealth { Value = CharacterEntity.CharData.MaxHealth, }); upd.Add(new Unknown4 { Unk1 = 0 }); upd.Add(new Unknown1 { }); NetChans[ChannelType.ReliableGss].SendGSSClass(upd, CharacterEntity.EntityID, Enums.GSS.Controllers.Character_BaseController); upd = new PartialUpdate(); upd.Add(new Unknown5 { LastUpdateTime = AssignedShard.CurrentTime, }); NetChans[ChannelType.ReliableGss].SendGSSClass(upd, CharacterEntity.EntityID, Enums.GSS.Controllers.Character_BaseController); }