static void VoteControllerDeserialize(On.RoR2.VoteController.orig_OnDeserialize orig, VoteController self, NetworkReader reader, bool initialState) { orig(self, reader, initialState); if (reader.Position < reader.Length && !Run.instance) { if (TargetedRuleBook != null && TargetedRuleChoiceMask != null) { byte[] ruleBookBytes = TargetedRuleBook.GetFieldValue <byte[]>("ruleValues"); byte[] ruleChoiceMaskBytes = (byte[])TargetedRuleChoiceMask.GetType().BaseType.GetField("bytes", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(TargetedRuleChoiceMask); for (int i = ruleBookBytes.Length - RegisteredVoteSelections.Count; i < ruleBookBytes.Length; i++) { ruleBookBytes[i] = reader.ReadByte(); } int difference = ruleChoiceMaskBytes.Length - ((RuleCatalog.choiceCount - RegisteredVoteChoices.Count) + 7 >> 3); for (int i = ruleChoiceMaskBytes.Length - difference; i < ruleChoiceMaskBytes.Length; i++) { ruleChoiceMaskBytes[i] = reader.ReadByte(); } TargetedRuleBook = null; TargetedRuleChoiceMask = null; } } }
static void RuleBookDeserialize(On.RoR2.RuleBook.orig_Deserialize orig, RuleBook self, NetworkReader reader) { byte[] ruleValues = self.GetFieldValue <byte[]>("ruleValues"); for (int i = 0; i < ruleValues.Length - RegisteredVoteSelections.Count; i++) { ruleValues[i] = reader.ReadByte(); } TargetedRuleBook = self; }
static void RuleBookSerialize(On.RoR2.RuleBook.orig_Serialize orig, RuleBook self, NetworkWriter writer) { byte[] ruleValues = self.GetFieldValue <byte[]>("ruleValues"); for (int i = 0; i < ruleValues.Length - RegisteredVoteSelections.Count; i++) { writer.Write(ruleValues[i]); } for (int i = ruleValues.Length - RegisteredVoteSelections.Count; i < ruleValues.Length; i++) { RuleBookExtraBytes.Add(ruleValues[i]); } }