Example #1
0
        public async Task GivenAUserWithTheEmailIsSignedUp(string email)
        {
            var token = await FlowHelpers.SignUpTeamWithUserAndGetTokensAsync(email);

            _scenarioContext.Set(token, "token-value");
            _scenarioContext.Set(email, "email");
        }
Example #2
0
        public async Task GivenTheDetailsIsSignedUp(Table table)
        {
            var participants = table.CreateSet <Participant>();
            var participant  = participants.First();

            participant.CreatedAt = DateTime.Now;

            var team = new Team()
            {
                Name         = "Test Team 1",
                CreatedAt    = DateTime.Now,
                Participants = new List <Participant>()
                {
                    new Participant
                    {
                        Forename  = "Fred",
                        Surname   = "Richards",
                        Email     = "*****@*****.**",
                        CreatedAt = DateTime.Now
                    }
                }
            };

            var(teamId, participantId) = await FlowHelpers.SignUpParticipantAsyncWithTeamAndGetTeamIdAndParticipantIdAsync(
                _scenarioContext.Get <string>("token value"), participant, team);

            _scenarioContext.Set(team);
            _scenarioContext.Set(teamId, "teamId");
            _scenarioContext.Set(participantId, "participantId");
            _scenarioContext.Set(participant);
        }
Example #3
0
        public static DungeonFlow GetRandomFlowFromNextDungeonPrefabForGlitchFloor()
        {
            int     NextLevelIndex = ReflectionHelpers.ReflectGetField <int>(typeof(GameManager), "nextLevelIndex", GameManager.Instance);
            Dungeon dungeon        = null;
            bool    useFallBack    = true;

            switch (NextLevelIndex)
            {
            case 2:
                dungeon = DungeonDatabase.GetOrLoadByName("Base_Castle");
                break;

            case 3:
                dungeon = DungeonDatabase.GetOrLoadByName("Base_Gungeon");
                break;

            case 4:
                dungeon = DungeonDatabase.GetOrLoadByName("Base_Mines");
                break;

            case 5:
                dungeon = DungeonDatabase.GetOrLoadByName("Base_Catacombs");
                break;

            case 6:
                dungeon = DungeonDatabase.GetOrLoadByName("Base_Forge");
                break;

            case 7:
                dungeon = DungeonDatabase.GetOrLoadByName("Base_Bullethell");
                break;

            default:
                dungeon = DungeonDatabase.GetOrLoadByName("Base_Mines");
                break;
            }
            DungeonFlow m_AssignedFallBackFlow = FlowDatabase.GetOrLoadByName(BraveUtility.RandomElement(GlitchChestFlows));
            DungeonFlow m_AssignedFlow         = FlowHelpers.DuplicateDungeonFlow(BraveUtility.RandomElement(dungeon.PatternSettings.flows));

            dungeon = null;
            foreach (DungeonFlowNode node in m_AssignedFlow.AllNodes)
            {
                if (node.roomCategory == PrototypeDungeonRoom.RoomCategory.BOSS)
                {
                    node.overrideExactRoom = ExpandPrefabs.doublebeholsterroom01;
                    useFallBack            = false;
                    break;
                }
            }
            if (useFallBack)
            {
                return(m_AssignedFallBackFlow);
            }
            else
            {
                return(m_AssignedFlow);
            }
        }
Example #4
0
 public static Result <GZipBinary> Base64ToGzip(ResourceEdmx resourceEdmx) =>
 FlowHelpers.With(resourceEdmx)
 .Map(edmx => edmx.Value)
 .OnSuccess(x => Convert.FromBase64String(x))
 .Map(edmx => edmx.ToGZipBinary());
Example #5
0
 private static Result <string> ConvertBytesToUTF8String(ByteArray array) =>
 FlowHelpers.With(array)
 .Map(edmx => edmx.Bytes)
 .OnSuccess(edmx => BitConverter.ToString(edmx));
Example #6
0
 public static Result <ResourceEdmx> GZipToBase64(GZipBinary source) =>
 FlowHelpers.With(source)
 .OnSuccess(edmx => Base64Module.BytesToBase64(edmx.ByteArray)
            .OnSuccess(base64 => new ResourceEdmx(base64)));
Example #7
0
 public static Result <ResourceEdmx> HexToBase64(DatabaseEdmx databaseEdmx) =>
 FlowHelpers.With(databaseEdmx)
 .Map(edmx => HexModule.CutOffHexPrefix(databaseEdmx.Value))
 .OnSuccessTry <Hex, ByteArray, FormatException>(edmx => HexToBytes(edmx), "Invalid hexidecimal format.")
 .OnSuccess(edmx => Base64Module.BytesToBase64(edmx))
 .OnSuccess(base64 => base64.ToResourceEdmx());
Example #8
0
 public static Result <XmlEdmx> GZipToXml(GZipBinary gzip) =>
 FlowHelpers.With(gzip)
 .Map(edmx => edmx.ByteArray.Bytes)
 .OnSuccess(edmx => GzipModule.Decompress(edmx))
 .Map(edmx => edmx.ToXml());
 public static Result <ConvertEdmxArgs> CreateArguments(ConvertParams convParams) =>
 FlowHelpers.With(convParams)
 .OnSuccess(GetEdmxMapper())
 .OnSuccess(MapEdmx(convParams))
 .OnSuccess(Convert(convParams));
Example #10
0
        // Initialize KnownFlows array with custom + official flows.
        public static void InitDungeonFlows(AssetBundle sharedAssets2, bool refreshFlows = false)
        {
            Dungeon TutorialPrefab       = DungeonDatabase.GetOrLoadByName("Base_Tutorial");
            Dungeon CastlePrefab         = DungeonDatabase.GetOrLoadByName("Base_Castle");
            Dungeon SewerPrefab          = DungeonDatabase.GetOrLoadByName("Base_Sewer");
            Dungeon GungeonPrefab        = DungeonDatabase.GetOrLoadByName("Base_Gungeon");
            Dungeon CathedralPrefab      = DungeonDatabase.GetOrLoadByName("Base_Cathedral");
            Dungeon MinesPrefab          = DungeonDatabase.GetOrLoadByName("Base_Mines");
            Dungeon ResourcefulRatPrefab = DungeonDatabase.GetOrLoadByName("Base_ResourcefulRat");
            Dungeon CatacombsPrefab      = DungeonDatabase.GetOrLoadByName("Base_Catacombs");
            Dungeon NakatomiPrefab       = DungeonDatabase.GetOrLoadByName("Base_Nakatomi");
            Dungeon ForgePrefab          = DungeonDatabase.GetOrLoadByName("Base_Forge");
            Dungeon BulletHellPrefab     = DungeonDatabase.GetOrLoadByName("Base_BulletHell");

            BaseSharedInjectionData = sharedAssets2.LoadAsset <SharedInjectionData>("Base Shared Injection Data");
            GungeonInjectionData    = GungeonPrefab.PatternSettings.flows[0].sharedInjectionData[1];
            SewersInjectionData     = SewerPrefab.PatternSettings.flows[0].sharedInjectionData[1];
            HollowsInjectionData    = CatacombsPrefab.PatternSettings.flows[0].sharedInjectionData[1];
            CastleInjectionData     = CastlePrefab.PatternSettings.flows[0].sharedInjectionData[0];

            JunkSecretRoomInjector = new ProceduralFlowModifierData()
            {
                annotation        = "Tiny Secret Room",
                DEBUG_FORCE_SPAWN = false,
                OncePerRun        = false,
                placementRules    = new List <ProceduralFlowModifierData.FlowModifierPlacementType>()
                {
                    ProceduralFlowModifierData.FlowModifierPlacementType.RANDOM_NODE_CHILD
                },
                roomTable              = null,
                exactRoom              = ExpandRoomPrefabs.Expand_TinySecret,
                IsWarpWing             = false,
                RequiresMasteryToken   = false,
                chanceToLock           = 0,
                selectionWeight        = 1,
                chanceToSpawn          = 1,
                RequiredValidPlaceable = null,
                prerequisites          = new DungeonPrerequisite[0],
                CanBeForcedSecret      = true,
                RandomNodeChildMinDistanceFromEntrance = 0,
                exactSecondaryRoom = null,
                framedCombatNodes  = 0,
            };

            BellySpecialEntranceRoomInjector = new ProceduralFlowModifierData()
            {
                annotation        = "Secret Belly Entrance Room",
                DEBUG_FORCE_SPAWN = false,
                OncePerRun        = false,
                placementRules    = new List <ProceduralFlowModifierData.FlowModifierPlacementType>()
                {
                    ProceduralFlowModifierData.FlowModifierPlacementType.END_OF_CHAIN
                },
                roomTable              = null,
                exactRoom              = ExpandRoomPrefabs.Expand_Gungeon_BellyEntranceRoom,
                IsWarpWing             = false,
                RequiresMasteryToken   = false,
                chanceToLock           = 0,
                selectionWeight        = 1,
                chanceToSpawn          = 1,
                RequiredValidPlaceable = null,
                prerequisites          = new DungeonPrerequisite[] {
                    new DungeonPrerequisite()
                    {
                        prerequisiteOperation      = DungeonPrerequisite.PrerequisiteOperation.EQUAL_TO,
                        prerequisiteType           = DungeonPrerequisite.PrerequisiteType.TILESET,
                        requiredTileset            = GlobalDungeonData.ValidTilesets.GUNGEON,
                        requireTileset             = true,
                        comparisonValue            = 1,
                        encounteredObjectGuid      = string.Empty,
                        maxToCheck                 = TrackedMaximums.MOST_KEYS_HELD,
                        requireDemoMode            = false,
                        requireCharacter           = false,
                        requiredCharacter          = PlayableCharacters.Pilot,
                        requireFlag                = false,
                        useSessionStatValue        = false,
                        encounteredRoom            = null,
                        requiredNumberOfEncounters = -1,
                        saveFlagToCheck            = GungeonFlags.TUTORIAL_COMPLETED,
                        statToCheck                = TrackedStats.GUNBERS_MUNCHED
                    }
                },
                CanBeForcedSecret = true,
                RandomNodeChildMinDistanceFromEntrance = 0,
                exactSecondaryRoom = null,
                framedCombatNodes  = 0,
            };

            BellySpecialMonsterRoomInjector = new ProceduralFlowModifierData()
            {
                annotation        = "Secret Belly Monster Room",
                DEBUG_FORCE_SPAWN = false,
                OncePerRun        = false,
                placementRules    = new List <ProceduralFlowModifierData.FlowModifierPlacementType>()
                {
                    ProceduralFlowModifierData.FlowModifierPlacementType.NO_LINKS
                },
                roomTable              = null,
                exactRoom              = ExpandRoomPrefabs.Expand_Gungeon_HiddenMonsterRoom,
                IsWarpWing             = true,
                RequiresMasteryToken   = false,
                chanceToLock           = 0,
                selectionWeight        = 1,
                chanceToSpawn          = 1,
                RequiredValidPlaceable = null,
                prerequisites          = new DungeonPrerequisite[] {
                    new DungeonPrerequisite()
                    {
                        prerequisiteOperation      = DungeonPrerequisite.PrerequisiteOperation.EQUAL_TO,
                        prerequisiteType           = DungeonPrerequisite.PrerequisiteType.TILESET,
                        requiredTileset            = GlobalDungeonData.ValidTilesets.GUNGEON,
                        requireTileset             = true,
                        comparisonValue            = 1,
                        encounteredObjectGuid      = string.Empty,
                        maxToCheck                 = TrackedMaximums.MOST_KEYS_HELD,
                        requireDemoMode            = false,
                        requireCharacter           = false,
                        requiredCharacter          = PlayableCharacters.Pilot,
                        requireFlag                = false,
                        useSessionStatValue        = false,
                        encounteredRoom            = null,
                        requiredNumberOfEncounters = -1,
                        saveFlagToCheck            = GungeonFlags.TUTORIAL_COMPLETED,
                        statToCheck                = TrackedStats.GUNBERS_MUNCHED
                    }
                },
                CanBeForcedSecret = true,
                RandomNodeChildMinDistanceFromEntrance = 0,
                exactSecondaryRoom = null,
                framedCombatNodes  = 0,
            };

            GungeonInjectionData.InjectionData.Add(BellySpecialEntranceRoomInjector);
            GungeonInjectionData.InjectionData.Add(BellySpecialMonsterRoomInjector);

            SewersInjectionData.InjectionData.Add(JunkSecretRoomInjector);


            SecretFloorEntranceInjector = new ProceduralFlowModifierData()
            {
                annotation        = "Secret Floor Entrance Room",
                DEBUG_FORCE_SPAWN = false,
                OncePerRun        = false,
                placementRules    = new List <ProceduralFlowModifierData.FlowModifierPlacementType>()
                {
                    ProceduralFlowModifierData.FlowModifierPlacementType.NO_LINKS
                },
                roomTable = null,
                // exactRoom = SewersInjectionData.InjectionData[0].exactRoom,
                exactRoom              = ExpandRoomPrefabs.SecretExitRoom2,
                IsWarpWing             = true,
                RequiresMasteryToken   = false,
                chanceToLock           = 0,
                selectionWeight        = 1,
                chanceToSpawn          = 1,
                RequiredValidPlaceable = null,
                prerequisites          = new DungeonPrerequisite[0],
                CanBeForcedSecret      = true,
                RandomNodeChildMinDistanceFromEntrance = 0,
                exactSecondaryRoom = null,
                framedCombatNodes  = 0,
            };

            SecretMiniElevatorInjector = new ProceduralFlowModifierData()
            {
                annotation        = "Secret MiniElevator Room with Glitched Rats",
                DEBUG_FORCE_SPAWN = false,
                OncePerRun        = false,
                placementRules    = new List <ProceduralFlowModifierData.FlowModifierPlacementType>()
                {
                    ProceduralFlowModifierData.FlowModifierPlacementType.RANDOM_NODE_CHILD
                },
                roomTable              = null,
                exactRoom              = ExpandRoomPrefabs.SecretRatEntranceRoom,
                IsWarpWing             = false,
                RequiresMasteryToken   = false,
                chanceToLock           = 0.25f,
                selectionWeight        = 1,
                chanceToSpawn          = 1,
                RequiredValidPlaceable = null,
                prerequisites          = new DungeonPrerequisite[0],
                CanBeForcedSecret      = true,
                RandomNodeChildMinDistanceFromEntrance = 0,
                exactSecondaryRoom = null,
                framedCombatNodes  = 0,
            };


            m_KeepJungleEntranceRooms = ScriptableObject.CreateInstance <GenericRoomTable>();
            m_KeepJungleEntranceRooms.includedRoomTables = new List <GenericRoomTable>(0);
            m_KeepJungleEntranceRooms.includedRooms      = new WeightedRoomCollection()
            {
                elements = new List <WeightedRoom>()
                {
                    ExpandRoomPrefabs.GenerateWeightedRoom(ExpandRoomPrefabs.Expand_Keep_TreeRoom, Weight: 0.5f),
                    ExpandRoomPrefabs.GenerateWeightedRoom(ExpandRoomPrefabs.Expand_Keep_TreeRoom2)
                }
            };


            SecretJungleEntranceInjector = new ProceduralFlowModifierData()
            {
                annotation        = "Secret Jungle Entrance Room",
                DEBUG_FORCE_SPAWN = false,
                OncePerRun        = false,
                placementRules    = new List <ProceduralFlowModifierData.FlowModifierPlacementType>()
                {
                    ProceduralFlowModifierData.FlowModifierPlacementType.RANDOM_NODE_CHILD
                },
                roomTable              = m_KeepJungleEntranceRooms,
                exactRoom              = null,
                IsWarpWing             = false,
                RequiresMasteryToken   = false,
                chanceToLock           = 0,
                selectionWeight        = 1,
                chanceToSpawn          = 1,
                RequiredValidPlaceable = null,
                prerequisites          = new DungeonPrerequisite[] {
                    new DungeonPrerequisite()
                    {
                        prerequisiteOperation      = DungeonPrerequisite.PrerequisiteOperation.EQUAL_TO,
                        prerequisiteType           = DungeonPrerequisite.PrerequisiteType.TILESET,
                        requiredTileset            = GlobalDungeonData.ValidTilesets.CASTLEGEON,
                        requireTileset             = true,
                        comparisonValue            = 1,
                        encounteredObjectGuid      = string.Empty,
                        maxToCheck                 = TrackedMaximums.MOST_KEYS_HELD,
                        requireDemoMode            = false,
                        requireCharacter           = false,
                        requiredCharacter          = PlayableCharacters.Pilot,
                        requireFlag                = false,
                        useSessionStatValue        = false,
                        encounteredRoom            = null,
                        requiredNumberOfEncounters = -1,
                        saveFlagToCheck            = GungeonFlags.TUTORIAL_COMPLETED,
                        statToCheck                = TrackedStats.GUNBERS_MUNCHED
                    }
                },
                CanBeForcedSecret = true,
                RandomNodeChildMinDistanceFromEntrance = 0,
                exactSecondaryRoom = null,
                framedCombatNodes  = 0,
            };

            HollowsInjectionData.InjectionData.Add(SecretFloorEntranceInjector);
            HollowsInjectionData.InjectionData.Add(SecretMiniElevatorInjector);
            CastleInjectionData.InjectionData.Add(SecretJungleEntranceInjector);


            RickRollSecretRoomInjector = new ProceduralFlowModifierData()
            {
                annotation        = "RickRoll Secret Room",
                DEBUG_FORCE_SPAWN = false,
                OncePerRun        = false,
                placementRules    = new List <ProceduralFlowModifierData.FlowModifierPlacementType>()
                {
                    ProceduralFlowModifierData.FlowModifierPlacementType.END_OF_CHAIN
                },
                roomTable              = null,
                exactRoom              = ExpandRoomPrefabs.Expand_RickRollSecret,
                IsWarpWing             = false,
                RequiresMasteryToken   = false,
                chanceToLock           = 0,
                selectionWeight        = 1,
                chanceToSpawn          = 0.25f,
                RequiredValidPlaceable = null,
                prerequisites          = new DungeonPrerequisite[0],
                CanBeForcedSecret      = true,
                RandomNodeChildMinDistanceFromEntrance = 1,
                exactSecondaryRoom = null,
                framedCombatNodes  = 0
            };

            CustomSecretFloorSharedInjectionData = ScriptableObject.CreateInstance <SharedInjectionData>();

            CustomSecretFloorSharedInjectionData.name          = "Rick Roll Secret Room Injection Data";
            CustomSecretFloorSharedInjectionData.InjectionData = new List <ProceduralFlowModifierData>()
            {
                RickRollSecretRoomInjector
            };
            CustomSecretFloorSharedInjectionData.UseInvalidWeightAsNoInjection = true;
            CustomSecretFloorSharedInjectionData.IsNPCCell = false;
            CustomSecretFloorSharedInjectionData.PreventInjectionOfFailedPrerequisites = false;
            CustomSecretFloorSharedInjectionData.OnlyOne               = false;
            CustomSecretFloorSharedInjectionData.ChanceToSpawnOne      = 1;
            CustomSecretFloorSharedInjectionData.AttachedInjectionData = new List <SharedInjectionData>(0);


            // Don't build/add flows until injection data is created!
            Foyer_Flow = FlowHelpers.DuplicateDungeonFlow(sharedAssets2.LoadAsset <DungeonFlow>("Foyer Flow"));

            // List<DungeonFlow> m_knownFlows = new List<DungeonFlow>();
            KnownFlows = new List <DungeonFlow>();

            // Build and add custom flows to list.
            BossrushFlows.InitBossrushFlows();

            KnownFlows.Add(custom_glitchchest_flow.Custom_GlitchChest_Flow());
            KnownFlows.Add(test_west_floor_03a_flow.TEST_West_Floor_03a_Flow());
            KnownFlows.Add(demo_stage_flow.DEMO_STAGE_FLOW());
            KnownFlows.Add(complex_flow_test.Complex_Flow_Test());
            KnownFlows.Add(custom_glitch_flow.Custom_Glitch_Flow());
            KnownFlows.Add(really_big_flow.Really_Big_Flow());
            KnownFlows.Add(fruit_loops.Fruit_Loops());
            KnownFlows.Add(custom_glitchchestalt_flow.Custom_GlitchChestAlt_Flow());
            KnownFlows.Add(test_traproom_flow.Test_TrapRoom_Flow());
            KnownFlows.Add(test_customroom_flow.Test_CustomRoom_Flow());
            KnownFlows.Add(apache_fucking_around_flow.Apache_Fucking_Around_Flow());
            KnownFlows.Add(f1b_jungle_flow_01.F1b_Jungle_Flow_01());
            KnownFlows.Add(f1b_jungle_flow_02.F1b_Jungle_Flow_02());
            KnownFlows.Add(f2b_belly_flow_01.F2b_Belly_Flow_01());
            KnownFlows.Add(f4c_west_flow_01.F4c_West_Flow_01());

            // Fix issues with nodes so that things other then MainMenu can load Foyer flow
            Foyer_Flow.name = "Foyer_Flow";
            Foyer_Flow.AllNodes[1].handlesOwnWarping = true;
            Foyer_Flow.AllNodes[2].handlesOwnWarping = true;
            Foyer_Flow.AllNodes[3].handlesOwnWarping = true;

            KnownFlows.Add(Foyer_Flow);
            KnownFlows.Add(FlowHelpers.DuplicateDungeonFlow(LoadOfficialFlow("npcparadise")));
            KnownFlows.Add(FlowHelpers.DuplicateDungeonFlow(LoadOfficialFlow("secret_doublebeholster_flow")));
            KnownFlows.Add(BossrushFlows.Bossrush_01_Castle);
            KnownFlows.Add(BossrushFlows.Bossrush_01a_Sewer);
            KnownFlows.Add(BossrushFlows.Bossrush_02_Gungeon);
            KnownFlows.Add(BossrushFlows.Bossrush_02a_Cathedral);
            KnownFlows.Add(BossrushFlows.Bossrush_03_Mines);
            KnownFlows.Add(BossrushFlows.Bossrush_04_Catacombs);
            KnownFlows.Add(BossrushFlows.Bossrush_05_Forge);
            KnownFlows.Add(BossrushFlows.Bossrush_06_BulletHell);
            KnownFlows.Add(BossrushFlows.MiniBossrush_01);

            // Add official flows to list (flows found in Dungeon asset bundles after AG&D)
            for (int i = 0; i < TutorialPrefab.PatternSettings.flows.Count; i++)
            {
                KnownFlows.Add(FlowHelpers.DuplicateDungeonFlow(TutorialPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < CastlePrefab.PatternSettings.flows.Count; i++)
            {
                KnownFlows.Add(FlowHelpers.DuplicateDungeonFlow(CastlePrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < SewerPrefab.PatternSettings.flows.Count; i++)
            {
                KnownFlows.Add(FlowHelpers.DuplicateDungeonFlow(SewerPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < GungeonPrefab.PatternSettings.flows.Count; i++)
            {
                KnownFlows.Add(FlowHelpers.DuplicateDungeonFlow(GungeonPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < CathedralPrefab.PatternSettings.flows.Count; i++)
            {
                KnownFlows.Add(FlowHelpers.DuplicateDungeonFlow(CathedralPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < MinesPrefab.PatternSettings.flows.Count; i++)
            {
                KnownFlows.Add(FlowHelpers.DuplicateDungeonFlow(MinesPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < ResourcefulRatPrefab.PatternSettings.flows.Count; i++)
            {
                KnownFlows.Add(FlowHelpers.DuplicateDungeonFlow(ResourcefulRatPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < CatacombsPrefab.PatternSettings.flows.Count; i++)
            {
                KnownFlows.Add(FlowHelpers.DuplicateDungeonFlow(CatacombsPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < NakatomiPrefab.PatternSettings.flows.Count; i++)
            {
                KnownFlows.Add(FlowHelpers.DuplicateDungeonFlow(NakatomiPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < ForgePrefab.PatternSettings.flows.Count; i++)
            {
                KnownFlows.Add(FlowHelpers.DuplicateDungeonFlow(ForgePrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < BulletHellPrefab.PatternSettings.flows.Count; i++)
            {
                KnownFlows.Add(FlowHelpers.DuplicateDungeonFlow(BulletHellPrefab.PatternSettings.flows[i]));
            }

            // Let's make things look cool and give all boss rush flows my new tiny exit room. :D
            BossrushFlows.Bossrush_01a_Sewer.AllNodes[2].overrideExactRoom     = ExpandPrefabs.tiny_exit;
            BossrushFlows.Bossrush_02_Gungeon.AllNodes[6].overrideExactRoom    = ExpandPrefabs.tiny_exit;
            BossrushFlows.Bossrush_02a_Cathedral.AllNodes[2].overrideExactRoom = ExpandPrefabs.oldbulletking_room_01;
            BossrushFlows.Bossrush_02a_Cathedral.AllNodes[3].overrideExactRoom = ExpandPrefabs.tiny_exit;
            BossrushFlows.Bossrush_03_Mines.AllNodes[6].overrideExactRoom      = ExpandPrefabs.tiny_exit;
            BossrushFlows.Bossrush_04_Catacombs.AllNodes[6].overrideExactRoom  = ExpandPrefabs.tiny_exit;
            // Fix Forge Bossrush so it uses the correct boss foyer room for Dragun.
            // Using the same foyer room for previous floors looks odd so I fixed it. :P
            BossrushFlows.Bossrush_05_Forge.AllNodes[1].overrideExactRoom = ExpandPrefabs.DragunBossFoyerRoom;
            BossrushFlows.Bossrush_05_Forge.AllNodes[3].overrideExactRoom = ExpandPrefabs.tiny_exit;

            TutorialPrefab       = null;
            CastlePrefab         = null;
            SewerPrefab          = null;
            GungeonPrefab        = null;
            CathedralPrefab      = null;
            MinesPrefab          = null;
            ResourcefulRatPrefab = null;
            CatacombsPrefab      = null;
            NakatomiPrefab       = null;
            ForgePrefab          = null;
            BulletHellPrefab     = null;
        }
Example #11
0
 public static Result <ConvertParams> Validate(ConvertParams payload) =>
 FlowHelpers.With(payload)
 .Ensure(x => !string.IsNullOrWhiteSpace(x.Edmx), "Source EDMX should not be empty.")
 .Ensure(x => x.Source != payload.Target, "Source and target types are the same.");
Example #12
0
 public static Result <XDocument> Decompress(byte[] bytes) =>
 FlowHelpers.With(bytes)
 .OnSuccessTry <byte[], XDocument, InvalidDataException>(edmx =>
                                                         DecompressUnsafe(edmx), "Corrupted GZip file. Cannot uncompress.");
Example #13
0
        // Initialize KnownFlows array with custom + official flows.
        public static void InitDungeonFlows()
        {
            Dungeon TutorialPrefab       = DungeonDatabase.GetOrLoadByName("Base_Tutorial");
            Dungeon CastlePrefab         = DungeonDatabase.GetOrLoadByName("Base_Castle");
            Dungeon SewerPrefab          = DungeonDatabase.GetOrLoadByName("Base_Sewer");
            Dungeon GungeonPrefab        = DungeonDatabase.GetOrLoadByName("Base_Gungeon");
            Dungeon CathedralPrefab      = DungeonDatabase.GetOrLoadByName("Base_Cathedral");
            Dungeon MinesPrefab          = DungeonDatabase.GetOrLoadByName("Base_Mines");
            Dungeon ResourcefulRatPrefab = DungeonDatabase.GetOrLoadByName("Base_ResourcefulRat");
            Dungeon CatacombsPrefab      = DungeonDatabase.GetOrLoadByName("Base_Catacombs");
            Dungeon NakatomiPrefab       = DungeonDatabase.GetOrLoadByName("Base_Nakatomi");
            Dungeon ForgePrefab          = DungeonDatabase.GetOrLoadByName("Base_Forge");
            Dungeon BulletHellPrefab     = DungeonDatabase.GetOrLoadByName("Base_BulletHell");

            List <DungeonFlow> m_knownFlows = new List <DungeonFlow>();

            // Build custom flows
            test_west_floor_03a_flow.InitFlow();
            custom_glitchchest_flow.InitFlow();
            demo_stage_flow.InitFlow();
            complex_flow_test.InitFlow();
            custom_glitch_flow.InitFlow();
            really_big_flow.InitFlow();
            fruit_loops.InitFlow();
            custom_glitchchestalt_flow.InitFlow();
            secretglitchfloor_flow.InitFlow();
            test_traproom_flow.InitFlow();

            BossrushFlows.InitBossrushFlows();

            m_knownFlows.Add(Custom_GlitchChest_Flow);
            m_knownFlows.Add(TEST_West_Floor_03a_Flow);
            m_knownFlows.Add(DEMO_STAGE_FLOW);
            m_knownFlows.Add(Complex_Flow_Test);
            m_knownFlows.Add(Custom_Glitch_Flow);
            m_knownFlows.Add(Really_Big_Flow);
            m_knownFlows.Add(Fruit_Loops);
            m_knownFlows.Add(Custom_GlitchChestAlt_Flow);
            m_knownFlows.Add(SecretGlitchFloor_Flow);
            m_knownFlows.Add(Test_TrapRoom_Flow);

            // Fix issues with nodes so that things other then MainMenu can load Foyer flow
            Foyer_Flow.name = "Foyer_Flow";
            Foyer_Flow.AllNodes[1].handlesOwnWarping = true;
            Foyer_Flow.AllNodes[2].handlesOwnWarping = true;
            Foyer_Flow.AllNodes[3].handlesOwnWarping = true;

            m_knownFlows.Add(Foyer_Flow);
            m_knownFlows.Add(FlowHelpers.DuplicateDungeonFlow(LoadOfficialFlow("npcparadise")));
            m_knownFlows.Add(FlowHelpers.DuplicateDungeonFlow(LoadOfficialFlow("secret_doublebeholster_flow")));
            m_knownFlows.Add(BossrushFlows.Bossrush_01_Castle);
            m_knownFlows.Add(BossrushFlows.Bossrush_01a_Sewer);
            m_knownFlows.Add(BossrushFlows.Bossrush_02_Gungeon);
            m_knownFlows.Add(BossrushFlows.Bossrush_02a_Cathedral);
            m_knownFlows.Add(BossrushFlows.Bossrush_03_Mines);
            m_knownFlows.Add(BossrushFlows.Bossrush_04_Catacombs);
            m_knownFlows.Add(BossrushFlows.Bossrush_05_Forge);
            m_knownFlows.Add(BossrushFlows.Bossrush_06_BulletHell);
            m_knownFlows.Add(BossrushFlows.MiniBossrush_01);

            // Add official flows to list (flows found in Dungeon asset bundles after AG&D)
            for (int i = 0; i < TutorialPrefab.PatternSettings.flows.Count; i++)
            {
                m_knownFlows.Add(FlowHelpers.DuplicateDungeonFlow(TutorialPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < CastlePrefab.PatternSettings.flows.Count; i++)
            {
                m_knownFlows.Add(FlowHelpers.DuplicateDungeonFlow(CastlePrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < SewerPrefab.PatternSettings.flows.Count; i++)
            {
                m_knownFlows.Add(FlowHelpers.DuplicateDungeonFlow(SewerPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < GungeonPrefab.PatternSettings.flows.Count; i++)
            {
                m_knownFlows.Add(FlowHelpers.DuplicateDungeonFlow(GungeonPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < CathedralPrefab.PatternSettings.flows.Count; i++)
            {
                m_knownFlows.Add(FlowHelpers.DuplicateDungeonFlow(CathedralPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < MinesPrefab.PatternSettings.flows.Count; i++)
            {
                m_knownFlows.Add(FlowHelpers.DuplicateDungeonFlow(MinesPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < ResourcefulRatPrefab.PatternSettings.flows.Count; i++)
            {
                m_knownFlows.Add(FlowHelpers.DuplicateDungeonFlow(ResourcefulRatPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < CatacombsPrefab.PatternSettings.flows.Count; i++)
            {
                m_knownFlows.Add(FlowHelpers.DuplicateDungeonFlow(CatacombsPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < NakatomiPrefab.PatternSettings.flows.Count; i++)
            {
                m_knownFlows.Add(FlowHelpers.DuplicateDungeonFlow(NakatomiPrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < ForgePrefab.PatternSettings.flows.Count; i++)
            {
                m_knownFlows.Add(FlowHelpers.DuplicateDungeonFlow(ForgePrefab.PatternSettings.flows[i]));
            }
            for (int i = 0; i < BulletHellPrefab.PatternSettings.flows.Count; i++)
            {
                m_knownFlows.Add(FlowHelpers.DuplicateDungeonFlow(BulletHellPrefab.PatternSettings.flows[i]));
            }

            // Let's make things look cool and give all boss rush flows my new tiny exit room. :D
            BossrushFlows.Bossrush_01a_Sewer.AllNodes[2].overrideExactRoom     = ChaosPrefabs.tiny_exit;
            BossrushFlows.Bossrush_02_Gungeon.AllNodes[6].overrideExactRoom    = ChaosPrefabs.tiny_exit;
            BossrushFlows.Bossrush_02a_Cathedral.AllNodes[2].overrideExactRoom = ChaosPrefabs.oldbulletking_room_01;
            BossrushFlows.Bossrush_02a_Cathedral.AllNodes[3].overrideExactRoom = ChaosPrefabs.tiny_exit;
            BossrushFlows.Bossrush_03_Mines.AllNodes[6].overrideExactRoom      = ChaosPrefabs.tiny_exit;
            BossrushFlows.Bossrush_04_Catacombs.AllNodes[6].overrideExactRoom  = ChaosPrefabs.tiny_exit;
            // Fix Forge Bossrush so it uses the correct boss foyer room for Dragun.
            // Using the same foyer room for previous floors looks odd so I fixed it. :P
            BossrushFlows.Bossrush_05_Forge.AllNodes[1].overrideExactRoom = ChaosPrefabs.DragunBossFoyerRoom;
            BossrushFlows.Bossrush_05_Forge.AllNodes[3].overrideExactRoom = ChaosPrefabs.tiny_exit;

            KnownFlows = m_knownFlows.ToArray();

            sharedAssets2        = null;
            TutorialPrefab       = null;
            CastlePrefab         = null;
            SewerPrefab          = null;
            GungeonPrefab        = null;
            CathedralPrefab      = null;
            MinesPrefab          = null;
            ResourcefulRatPrefab = null;
            CatacombsPrefab      = null;
            NakatomiPrefab       = null;
            ForgePrefab          = null;
            BulletHellPrefab     = null;
        }