private static AbstractPhysicalObject SaveState_AbstractPhysicalObjectFromString(On.SaveState.orig_AbstractPhysicalObjectFromString orig, World world, string objString) { AbstractPhysicalObject result = orig(world, objString); if (result != null && result.type == AbstractPhysicalObject.AbstractObjectType.DataPearl) { try { if (result is DataPearl.AbstractDataPearl dataPearl) { string[] array = Regex.Split(objString, "<oA>"); int hash = int.Parse(array[5]); if (CustomWorldMod.customPearls.ContainsKey(hash)) { CustomWorldMod.customPearls.TryGetValue(hash, out CustomWorldStructs.CustomPearl customPearl); string pearlName = customPearl.name; DataPearl.AbstractDataPearl.DataPearlType type = (DataPearl.AbstractDataPearl.DataPearlType)Enum.Parse(typeof(DataPearl.AbstractDataPearl.DataPearlType), pearlName); CustomWorldMod.Log($"Loaded custom pearl [{type.ToString()}] Hash [{hash}]"); dataPearl.dataPearlType = type; } else if (hash > 0x25) { CustomWorldMod.Log($"Error loading data pearl (AbsPhysObj). You are missing dataPearls.txt or your pack needs to be updated", true); } } } catch (Exception e) { CustomWorldMod.Log($"Error while loading dataPearl from SaveState [{e}]"); } } return(result); }
private static void DataPearlData_FromString(On.PlacedObject.DataPearlData.orig_FromString orig, PlacedObject.DataPearlData self, string s) { try { orig(self, s); } catch (Exception e) { CustomWorldMod.Log("Fatal Error: " + e, true); } string[] array = Regex.Split(s, "~"); try { if (array.Length >= 5) { int hash = int.Parse(array[4]); if (CustomWorldMod.customPearls.TryGetValue(hash, out CustomWorldStructs.CustomPearl customPearl)) { string pearlName = customPearl.name; DataPearl.AbstractDataPearl.DataPearlType type = (DataPearl.AbstractDataPearl.DataPearlType)Enum.Parse(typeof(DataPearl.AbstractDataPearl.DataPearlType), pearlName); CustomWorldMod.Log($"Loaded custom pearl [{type.ToString()}] Hash [{hash}]"); self.pearlType = type; self.hidden = (array[5] == "1"); } else if (hash > 0x25) { CustomWorldMod.Log($"Error loading data pearl. You are missing dataPearls.txt or your pack needs to be updated\n" + $"Please remove the custom datapearl [{self.pearlType}] with devtools and place it again [{self.owner.pos}]", true); } } } catch (Exception e) { CustomWorldMod.Log($"Exception loading pearl [{e}]", true); } }
private static string AbstractDataPearl_ToString(On.DataPearl.AbstractDataPearl.orig_ToString orig, DataPearl.AbstractDataPearl self) { /* * DataPearl.AbstractDataPearl.DataPearlType backUpType = self.pearlType; * * if (backUpType > DataPearl.AbstractDataPearl.DataPearlType.Red_stomach) * { * self.pearlType = (DataPearl.AbstractDataPearl.DataPearlType)CustomWorldMod.customPearls.First(x => x.Value.name.Equals(backUpType.ToString())).Key; * } * CustomWorldMod.Log($"DataPearl to string. PearlType [{self.pearlType}] [{backUpType.ToString()}]"); * string toString = orig(self); * self.pearlType = backUpType; * return toString; */ DataPearl.AbstractDataPearl.DataPearlType backUpType = self.dataPearlType; KeyValuePair <int, CustomWorldStructs.CustomPearl> entry = CustomWorldMod.customPearls.FirstOrDefault(x => x.Value.name.Equals(backUpType.ToString())); // Pearl is not vanilla if (!entry.Equals(default(KeyValuePair <int, CustomWorldStructs.CustomPearl>))) { self.dataPearlType = (DataPearl.AbstractDataPearl.DataPearlType)entry.Key; } CustomWorldMod.Log($"AbstractDataPearl to string. PearlType [{self.dataPearlType}] [{backUpType.ToString()}]"); string toString = orig(self); self.dataPearlType = backUpType; return(toString); //CustomWorldMod.Log($"PearlData to string [{string.Concat(array)}] - PearlTypeHas [{num2}] - PearlType [{CustomWorldMod.customPearls[num2].name}]"); //int num2 = CustomWorldMod.customPearls.First(x => x.Value.name.Equals(self.dataPearlType.ToString())).Key; }
private static void SLOracleBehaviorHasMark_GrabObject(On.SLOracleBehaviorHasMark.orig_GrabObject orig, SLOracleBehaviorHasMark self, PhysicalObject item) { if (item is DataPearl dataPearl) { DataPearl.AbstractDataPearl.DataPearlType pearlType = dataPearl.AbstractPearl.dataPearlType; KeyValuePair <int, CustomWorldStructs.CustomPearl> foundPearl = CustomWorldMod.customPearls.FirstOrDefault(x => x.Value.name.Equals(pearlType.ToString())); CustomWorldMod.Log($"Moon grabbed pearl: {pearlType}"); // Pearl is not vanilla if (!foundPearl.Equals(default(KeyValuePair <int, CustomWorldStructs.CustomPearl>))) { CustomWorldMod.Log($"Loading custom pearl...[{foundPearl.Value.name}] from [{foundPearl.Value.packName}]"); if (!self.State.HaveIAlreadyDescribedThisItem(item.abstractPhysicalObject.ID)) { if (self.currentConversation != null) { self.currentConversation.Interrupt("...", 0); self.currentConversation.Destroy(); self.currentConversation = null; } Conversation.ID id = Conversation.ID.None; try { id = (Conversation.ID)Enum.Parse(typeof(Conversation.ID), "Moon_" + foundPearl.Value.name); } catch (Exception e) { CustomWorldMod.Log($"Conversation not found for [{foundPearl.Value.name}] + {e}"); } self.currentConversation = new SLOracleBehaviorHasMark.MoonConversation(id, self, SLOracleBehaviorHasMark.MiscItemType.NA); self.State.totalPearlsBrought++; CustomWorldMod.Log("pearls brought up: " + self.State.totalPearlsBrought); self.State.totalItemsBrought++; self.State.AddItemToAlreadyTalkedAbout(item.abstractPhysicalObject.ID); // <3 bee <3 ~ base.GrabObject(item) var method = typeof(SLOracleBehavior).GetMethod("GrabObject"); var ftn = method.MethodHandle.GetFunctionPointer(); var func = (Action <PhysicalObject>)Activator.CreateInstance(typeof(Action <PhysicalObject>), self, ftn); func(item); // <3 bee <3 return; } } } orig(self, item); }
private static Color?DataPearl_UniquePearlHighLightColor(On.DataPearl.orig_UniquePearlHighLightColor orig, DataPearl.AbstractDataPearl.DataPearlType pearlType) { foreach (KeyValuePair <int, CustomPearl> pearls in CustomWorldMod.customPearls) { DataPearl.AbstractDataPearl.DataPearlType dataPearlType = (DataPearl.AbstractDataPearl.DataPearlType) Enum.Parse(typeof(DataPearl.AbstractDataPearl.DataPearlType), pearls.Value.name); if (pearlType == dataPearlType) { return(pearls.Value.secondaryColor); } } return(orig(pearlType)); }
private static string AbstractDataPearl_ToString(On.DataPearl.AbstractDataPearl.orig_ToString orig, DataPearl.AbstractDataPearl self) { DataPearl.AbstractDataPearl.DataPearlType backUpType = self.dataPearlType; KeyValuePair <int, CustomWorldStructs.CustomPearl> entry = CustomWorldMod.customPearls.FirstOrDefault(x => x.Value.name.Equals(backUpType.ToString())); // Pearl is not vanilla if (!entry.Equals(default(KeyValuePair <int, CustomWorldStructs.CustomPearl>))) { self.dataPearlType = (DataPearl.AbstractDataPearl.DataPearlType)entry.Key; } CustomWorldMod.Log($"AbstractDataPearl to string. PearlType [{self.dataPearlType}] [{backUpType.ToString()}]"); string toString = orig(self); self.dataPearlType = backUpType; return(toString); }
private static string DataPearlData_ToString(On.PlacedObject.DataPearlData.orig_ToString orig, PlacedObject.DataPearlData self) { DataPearl.AbstractDataPearl.DataPearlType backUpType = self.pearlType; KeyValuePair <int, CustomWorldStructs.CustomPearl> entry = CustomWorldMod.customPearls.FirstOrDefault(x => x.Value.name.Equals(backUpType.ToString())); if (!entry.Equals(default(KeyValuePair <int, CustomWorldStructs.CustomPearl>))) { self.pearlType = (DataPearl.AbstractDataPearl.DataPearlType)entry.Key; } CustomWorldMod.Log($"DataPearl to string. PearlType [{self.pearlType}] [{backUpType.ToString()}]"); string toString = orig(self); self.pearlType = backUpType; return(toString); }
private static void DataPearl_ApplyPalette(On.DataPearl.orig_ApplyPalette orig, DataPearl self, RoomCamera.SpriteLeaser sLeaser, RoomCamera rCam, RoomPalette palette) { orig(self, sLeaser, rCam, palette); bool foundPearl = false; foreach (KeyValuePair <int, CustomPearl> pearls in CustomWorldMod.customPearls) { if (foundPearl) { break; } DataPearl.AbstractDataPearl.DataPearlType dataPearlType = (DataPearl.AbstractDataPearl.DataPearlType) Enum.Parse(typeof(DataPearl.AbstractDataPearl.DataPearlType), pearls.Value.name); if ((self.abstractPhysicalObject as DataPearl.AbstractDataPearl).dataPearlType == dataPearlType) { foundPearl = true; self.color = pearls.Value.color; self.highlightColor = pearls.Value.secondaryColor; } } }
public patch_AbstractDataPearl(World world, AbstractObjectType objType, PhysicalObject realizedObject, WorldCoordinate pos, EntityID ID, int originRoom, int placedObjectIndex, PlacedObject.ConsumableObjectData consumableData, DataPearl.AbstractDataPearl.DataPearlType dataPearlType) : base(world, objType, realizedObject, pos, ID, originRoom, placedObjectIndex, consumableData, dataPearlType) { }