Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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); }
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
        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)
 {
 }