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);
        }
Exemplo n.º 2
0
        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));
        }