public async Task ModifySecondaryStats(Action <IModifySecondaryStatContext> action = null, bool exclRequest = false) { var context = new ModifySecondaryStatContext(SecondaryStats as SecondaryStats); action?.Invoke(context); await UpdateStats(); if (context.ResetHistory.ToDictionary().Any()) { var resetLocalPacket = new UnstructuredOutgoingPacket(PacketSendOperations.TemporaryStatReset); var resetRemotePacket = new UnstructuredOutgoingPacket(PacketSendOperations.UserTemporaryStatReset); resetLocalPacket.WriteSecondaryStatsFlag(context.ResetHistory); resetLocalPacket.WriteBool(false); // IsMovementAffectingStat resetRemotePacket.WriteInt(ID); resetRemotePacket.WriteSecondaryStatsFlag(context.ResetHistory); await Dispatch(resetLocalPacket); await FieldSplit.Dispatch(resetRemotePacket); } if (context.SetHistory.ToDictionary().Any()) { var setLocalPacket = new UnstructuredOutgoingPacket(PacketSendOperations.TemporaryStatSet); var setRemotePacket = new UnstructuredOutgoingPacket(PacketSendOperations.UserTemporaryStatSet); setLocalPacket.WriteSecondaryStatsToLocal(context.SetHistory); setLocalPacket.WriteShort(0); // tDelay setLocalPacket.WriteBool(false); // IsMovementAffectingStat setRemotePacket.WriteInt(ID); setRemotePacket.WriteSecondaryStatsToLocal(context.SetHistory); setRemotePacket.WriteShort(0); // tDelay await Dispatch(setLocalPacket); await FieldSplit.Dispatch(setRemotePacket); } }