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 SLOracleBehaviorHasMark.MiscItemType MoonText(On.SLOracleBehaviorHasMark.orig_TypeOfMiscItem orig, SLOracleBehaviorHasMark moonConvo, PhysicalObject testItem) { AbstractPhysicalObject.AbstractObjectType itemType = testItem.abstractPhysicalObject.type; if (itemType == EnumExt_NewItems.Club) { return(EnumExt_NewItems.ClubDialogue); } if (itemType == EnumExt_NewItems.Bow) { return(EnumExt_NewItems.BowDialogue); } if (itemType == EnumExt_NewItems.Arrow) { Arrow arrow = testItem as Arrow; return(EnumExt_NewItems.ArrowDialogue); } return(orig(moonConvo, testItem)); }