Esempio n. 1
0
        public void AddModule()
        {
            int  num3  = UnityEngine.Random.Range(0, 5);
            bool flag3 = num3 == 0;

            if (flag3)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Damage Module"].gameObject, base.Owner, true);
            }
            bool flag4 = num3 == 1;

            if (flag4)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Clip Size Module"].gameObject, base.Owner, true);
            }
            bool flag5 = num3 == 2;

            if (flag5)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Reload Module"].gameObject, base.Owner, true);
            }
            bool flag6 = num3 == 3;

            if (flag6)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Fire Rate Module"].gameObject, base.Owner, true);
            }
            bool flag7 = num3 == 4;

            if (flag7)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Splitter Module"].gameObject, base.Owner, true);
            }
        }
Esempio n. 2
0
        private IEnumerator Weeee()
        {
            yield return(new WaitForSeconds(0.5f));

            {
                PlayerController player = base.LastOwner as PlayerController;
                player.IsOnFire = false;
                int targetLevelIndex = 1;
                GameManager.Instance.SetNextLevelIndex(targetLevelIndex);
                GameManager.Instance.DelayedLoadNextLevel(0.1f);
                bool PAIN = player.HasPickupID(Game.Items["bny:crown_of_the_discoverer"].PickupObjectId);
                if (!PAIN)
                {
                    LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Crown of the Discoverer"].gameObject, player, true);
                    yield return(new WaitForSeconds(0.25f));

                    {
                        player.healthHaver.OnPreDeath -= this.HandlePreDeath;
                        player.RemoveActiveItem(DragunHeartThing.poggersheart);
                    }
                }
                else
                {
                    yield return(new WaitForSeconds(0.25f));

                    {
                        player.healthHaver.OnPreDeath -= this.HandlePreDeath;
                        player.RemoveActiveItem(DragunHeartThing.poggersheart);
                    }
                }
            }
        }
Esempio n. 3
0
        public void T3Module()
        {
            PlayerController user = base.Owner;
            int  num3             = UnityEngine.Random.Range(0, 5);
            bool flag3            = num3 == 0;

            if (flag3)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Colossus Module"].gameObject, user, true);
            }
            bool flag4 = num3 == 1;

            if (flag4)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Rocket Module"].gameObject, user, true);
            }
            bool flag5 = num3 == 2;

            if (flag5)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Inaccurate Module"].gameObject, user, true);
            }
            bool flag6 = num3 == 3;

            if (flag6)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Overloader Module"].gameObject, user, true);
            }
            bool bomb = num3 == 4;

            if (bomb)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Reactive Module"].gameObject, user, true);
            }
        }
Esempio n. 4
0
        public static void HandleLoadout(PlayerController player)
        {
            var starterGuns = AllStarterGuns[Random.Range(0, AllStarterGuns.Length)];

            player.inventory.AddGunToInventory(Gungeon.Game.Items[starterGuns.First] as Gun, false);
            if (!string.IsNullOrEmpty(starterGuns.Second))
            {
                player.inventory.AddGunToInventory(Gungeon.Game.Items[starterGuns.Second] as Gun, false);
            }
            if (BraveUtility.RandomBool())
            {
                var gun = GetWeightedRandomItem <Gun>();
                player.startingGunIds.Add(gun.PickupObjectId);
                LootEngine.TryGivePrefabToPlayer(gun.gameObject, player, true);
            }
            else
            {
                var active = GetWeightedRandomItem <PlayerItem>();
                player.startingActiveItemIds.Add(active.PickupObjectId);
                LootEngine.TryGivePrefabToPlayer(active.gameObject, player, true);
            }
            var passive = GetWeightedRandomItem <PassiveItem>();

            passive.CanBeDropped = false;
            player.startingGunIds.Add(passive.PickupObjectId);
            LootEngine.TryGivePrefabToPlayer(passive.gameObject, player, true);
        }
Esempio n. 5
0
        public void AddT2Module()
        {
            int  num3  = UnityEngine.Random.Range(0, 5);
            bool flag3 = num3 == 0;

            if (flag3)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Bouncer Module"].gameObject, base.Owner, true);
            }
            bool flag4 = num3 == 1;

            if (flag4)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Piercer Module"].gameObject, base.Owner, true);
            }
            bool flag5 = num3 == 2;

            if (flag5)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Ejector Module"].gameObject, base.Owner, true);
            }
            bool flag6 = num3 == 3;

            if (flag6)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Cloak Module"].gameObject, base.Owner, true);
            }
            bool flag7 = num3 == 4;

            if (flag7)
            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Homing Module"].gameObject, base.Owner, true);
            }
        }
        public static void PlayerGunsnItem()
        {//used for giving player random gun and item. Initialized in hook
            PlayerController player = GameManager.Instance.PrimaryPlayer;
            bool             flag   = player == null;

            if (flag)
            {
                ETGModConsole.Log("<color=#FF0000FF>Please select a character and enter the gungeon.</color>", false);
            }
            else
            {
                Gun[] guns = UnityEngine.Resources.FindObjectsOfTypeAll <Gun>();

                PassiveItem[] passiveitems = UnityEngine.Resources.FindObjectsOfTypeAll <PassiveItem>();
                PlayerItem[]  playeritems  = UnityEngine.Resources.FindObjectsOfTypeAll <PlayerItem>();

                System.Random rnd = new System.Random();
                //ETGModConsole.Log(String.Format("Length guns {0}, passive {1}, active{2}", guns.Length, passiveitems.Length, playeritems.Length));

                int guns_count         = rnd.Next(0, guns.Length);
                int passiveitems_count = rnd.Next(0, passiveitems.Length);

                Gun         gun         = guns[guns_count];
                PassiveItem passiveitem = passiveitems[passiveitems_count];

                //ETGModConsole.Log(gun.gunName);

                PickupObject pickupgun     = PickupObjectDatabase.Instance.InternalGetById(gun.PickupObjectId);
                PickupObject pickuppassive = PickupObjectDatabase.Instance.InternalGetById(passiveitem.PickupObjectId);

                LootEngine.TryGivePrefabToPlayer(pickupgun.gameObject, Game.PrimaryPlayer, false);
                LootEngine.TryGivePrefabToPlayer(pickuppassive.gameObject, Game.PrimaryPlayer, false);
            }
        }
Esempio n. 7
0
 private void DeviledEgg()
 {
     Owner.Blanks = 0;
     if (GameManager.Instance.Dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.MINEGEON)
     {
         PlayerController player = GameManager.Instance.PrimaryPlayer;
         LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(316).gameObject, player, true);
     }
 }
        private IEnumerator TheCountdown()
        {
            yield return(new WaitForSeconds(900f));

            {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Death Mark"].gameObject, base.Owner, true);
                base.Owner.DropPassiveItem(this);
            }
            yield break;
        }
Esempio n. 9
0
    public static bool GiveItem(this PlayerController player, string id)
    {
        if (!player.IsPlaying())
        {
            throw new Exception("Tried to give item to inactive player controller");
        }

        LootEngine.TryGivePrefabToPlayer(Gungeon.Game.Items[id].gameObject, player, false);
        return(true);
    }
Esempio n. 10
0
        protected override void DoEffect(PlayerController user)
        {
            string header = "";
            string text   = "";

            user.carriedConsumables.KeyBullets--;
            LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Key Receipt"].gameObject, user, true);
            header = "Your Key is now in transit.";
            text   = "Expect a short wait time.";
            this.Notify(header, text);
        }
 public static void SetMyItem2()
 {
     // 탄환의 주인
     int[] array2 = new int[]
     {
         469, 471, 468, 470, 467, 348, 351, 349, 350
     };
     for (int i = 0; i < array2.Length; i++)
     {
         LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(array2[i]).gameObject, GameManager.Instance.PrimaryPlayer, true);
     }
 }
        public static void SetItem()
        {
            int[] array = new int[]
            {
                131,//유틸리티 벨트
                102,
                212,
                115,
                309,
                457,
                170,
                281,
                260,
                262,
                263,
                264,
                466,
                269,
                270,
                307,
                343,
                437,
                452,
                454,
                490,
                491,
                492,
                249,
                301,
                318,
                442,
                232,
                451,
                461,
                494,
                434,
                271,
                529,
                572,
                564,
                580,
                526,
                641
            };


            for (int i = 0; i < array.Length; i++)
            {
                LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(array[i]).gameObject, GameManager.Instance.PrimaryPlayer, true);
            }
        }
Esempio n. 13
0
        public static void HandleLoadout(PlayerController player)
        {
            ArtifactMonger.Char = UnityEngine.Random.Range(1, 12);
            switch (ArtifactMonger.Char)
            {
            case 1:
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Attraction"].gameObject, player, true);
                break;

            case 2:
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Revenge"].gameObject, player, true);
                break;

            case 3:
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Glass"].gameObject, player, true);
                break;

            case 4:
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Avarice"].gameObject, player, true);
                break;

            case 5:
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Daze"].gameObject, player, true);
                break;

            case 6:
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Prey"].gameObject, player, true);
                break;

            case 7:
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Megalomania"].gameObject, player, true);
                break;

            case 8:
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Fodder"].gameObject, player, true);
                break;

            case 9:
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Bolster"].gameObject, player, true);
                break;

            case 10:
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Enigma"].gameObject, player, true);
                break;

            case 11:
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Sacrifice"].gameObject, player, true);
                break;
            }
            ArtifactMonger.storedPlayer = player;
        }
Esempio n. 14
0
 // Token: 0x060006D4 RID: 1748 RVA: 0x0003AD10 File Offset: 0x00038F10
 public static void Accept(PlayerController player, GameObject npc)
 {
     npc.GetComponent <tk2dSpriteAnimator>().PlayForDuration("do_effect", 1f, "idle", false);
     LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Attraction"].gameObject, player, true);
     LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Revenge"].gameObject, player, true);
     LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Glass"].gameObject, player, true);
     LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Avarice"].gameObject, player, true);
     LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Daze"].gameObject, player, true);
     LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Prey"].gameObject, player, true);
     LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Megalomania"].gameObject, player, true);
     LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Fodder"].gameObject, player, true);
     LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Bolster"].gameObject, player, true);
     LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Enigma"].gameObject, player, true);
     LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Sacrifice"].gameObject, player, true);
 }
Esempio n. 15
0
        private IEnumerator ProperActiveReset()
        {
            ChangeSpiceWeight();
            yield return(new WaitForSeconds(30f));

            {
                base.Owner.activeItems.Clear();
                {
                    base.Owner.spiceCount = -1;
                    this.Spawnquality     = (PickupObject.ItemQuality)UnityEngine.Random.Range(1, 6);
                    this.target           = LootEngine.GetItemOfTypeAndQuality <PlayerItem>(this.Spawnquality, GameManager.Instance.RewardManager.ItemsLootTable, false);
                    LootEngine.TryGivePrefabToPlayer(this.target.gameObject, base.Owner, true);
                }
                GameManager.Instance.StartCoroutine(ProperActiveReset());
            }
            yield break;
        }
Esempio n. 16
0
        private IEnumerator CoolDown(PlayerController usingPlayer)
        {
            yield return(new WaitForSeconds(2f));

            {
                usingPlayer.activeItems.Clear();
                yield return(new WaitForSeconds(1f));

                {
                    base.Owner.spiceCount = -1;
                    ChangeSpiceWeight();
                    this.Spawnquality = (PickupObject.ItemQuality)UnityEngine.Random.Range(1, 6);
                    this.target       = LootEngine.GetItemOfTypeAndQuality <PlayerItem>(this.Spawnquality, GameManager.Instance.RewardManager.ItemsLootTable, false);
                    LootEngine.TryGivePrefabToPlayer(this.target.gameObject, base.Owner, true);
                }
            }
            yield break;
        }
        public static void SetMyItemCurse()
        {
            int[] my2 = new int[]
            {
                443   //
                , 821 //스카우터
                , 65
                , 822 //카타나 총탄
                , 579 //공포탄 총탄
                , 571 //저주받은 총탄
                , 276 //스파이스
                , 631 //뻥뻥 성배   Blank Personality   BlankPersonality
                , 285 //핏빛 브로치  Blood Brooch    VampiricArmor
                , 525 //비탄의 상자
                , 407 //여섯 번째 방
                , 166 //쉘레톤 열쇠
                , 439 //브래킷 열쇠
                , 499 //오래된 공포탄
                , 570 //노란 약실

                , 762 //완성된 총
            };


            PickupObject o;

            for (int i = 0; i < my2.Length; i++)
            {
                try
                {
                    if ((o = PickupObjectDatabase.GetById(my2[i])) != null)
                    {
                        LootEngine.TryGivePrefabToPlayer(o.gameObject, GameManager.Instance.PrimaryPlayer, true);
                    }
                }
                catch (Exception)
                {
                    UnityEngine.Debug.Log("해당 아이템 없음:" + i);
                }
            }
        }
Esempio n. 18
0
        private void OnEnemyDamaged(float damage, bool fatal, HealthHaver enemy)
        {
            bool flag  = enemy.aiActor && enemy.IsBoss && fatal;
            bool flag2 = flag;

            if (flag2)
            {
                if (GivesModuleOnce == true)
                {
                    GivesModuleOnce = false;
                    int  num3  = UnityEngine.Random.Range(0, 5);
                    bool flag3 = num3 == 0;
                    if (flag3)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Damage Module"].gameObject, base.Owner, true);
                    }
                    bool flag4 = num3 == 1;
                    if (flag4)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Clip Size Module"].gameObject, base.Owner, true);
                    }
                    bool flag5 = num3 == 2;
                    if (flag5)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Reload Module"].gameObject, base.Owner, true);
                    }
                    bool flag6 = num3 == 3;
                    if (flag6)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Fire Rate Module"].gameObject, base.Owner, true);
                    }
                    bool flag7 = num3 == 4;
                    if (flag7)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Splitter Module"].gameObject, base.Owner, true);
                    }
                }
            }
        }
Esempio n. 19
0
        internal void AddDefaultCommands()
        {
            _LoggerSubscriber = (logger, loglevel, indent, str) => {
                PrintLine(logger.String(loglevel, str, indent: indent), color: _LoggerColors[loglevel]);
            };


            AddCommand("!!", (args, histindex) => {
                if (histindex - 1 < 0)
                {
                    throw new Exception("Can't run previous command (history is empty).");
                }
                return(History.Execute(histindex.Value - 1));
            });

            AddCommand("!'", (args, histindex) => {
                if (histindex - 1 < 0)
                {
                    throw new Exception("Can't run previous command (history is empty).");
                }
                return(History.Entries[histindex.Value - 1]);
            });

            AddCommand("echo", (args) => {
                return(string.Join(" ", args.ToArray()));
            }).WithSubCommand("hello", (args) => {
                return("Hello, world!\nHello, world!\nHello, world!\nHello, world!\nHello, world!\nHello, world!");
            });

            AddGroup("debug")
            .WithSubCommand("parser-bounds-test", (args) => {
                var text           = "echo Hello! \"Hello world!\" This\\ is\\ great \"It\"works\"with\"\\ wacky\" stuff\" \\[\\] \"\\[\\]\" [e[echo c][echo h][echo [echo \"o\"]] \"hel\"[echo lo][echo !]]";
                CurrentCommandText = text;
                return(null);
            })
            .WithSubCommand("giveid", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("Exactly 1 argument required.");
                }
                var pickup_obj = PickupObjectDatabase.Instance.InternalGetById(int.Parse(args[0]));

                if (pickup_obj == null)
                {
                    return("Item ID {args[0]} doesn't exist!");
                }

                LootEngine.TryGivePrefabToPlayer(pickup_obj.gameObject, GameManager.Instance.PrimaryPlayer, true);
                return(pickup_obj.EncounterNameOrDisplayName);
            });

            AddGroup("pool")
            .WithSubGroup(
                new Group("items")
                .WithSubCommand("idof", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("Exactly 1 argument required (numeric ID).");
                }
                var id = int.Parse(args[0]);
                foreach (var pair in ETGMod.Items.Pairs)
                {
                    if (pair.Value.PickupObjectId == id)
                    {
                        return(pair.Key);
                    }
                }
                return("Entry not found.");
            })
                .WithSubCommand("nameof", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("Exactly 1 argument required (ID).");
                }
                var id = args[0];
                foreach (var pair in ETGMod.Items.Pairs)
                {
                    if (pair.Key == id)
                    {
                        return(_GetPickupObjectName(pair.Value));
                    }
                }
                return("Entry not found.");
            })
                .WithSubCommand("numericof", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("Exactly 1 argument required (ID).");
                }
                var id = args[0];
                foreach (var pair in ETGMod.Items.Pairs)
                {
                    if (pair.Key == id)
                    {
                        return(pair.Value.PickupObjectId.ToString());
                    }
                }
                return("Entry not found.");
            })
                .WithSubCommand("list", (args) => {
                var s     = new StringBuilder();
                var pairs = new List <KeyValuePair <string, PickupObject> >();
                foreach (var pair in ETGMod.Items.Pairs)
                {
                    pairs.Add(pair);
                }
                foreach (var pair in pairs)
                {
                    if (_GetPickupObjectName(pair.Value) == "NO NAME")
                    {
                        s.AppendLine($"[{pair.Key}] {_GetPickupObjectName(pair.Value)}");
                    }
                }
                pairs.Sort((x, y) => string.Compare(_GetPickupObjectName(x.Value), _GetPickupObjectName(y.Value)));
                foreach (var pair in pairs)
                {
                    if (_GetPickupObjectName(pair.Value) == "NO NAME")
                    {
                        continue;
                    }
                    s.AppendLine($"[{pair.Key}] {_GetPickupObjectName(pair.Value)}");
                }
                return(s.ToString());
            })
                .WithSubCommand("random", (args) => {
                return(ETGMod.Items.RandomKey);
            })
                );

            AddCommand("listmods", (args) => {
                var s = new StringBuilder();

                s.AppendLine("Loaded mods:");
                foreach (var mod in ETGMod.ModLoader.LoadedMods)
                {
                    _GetModInfo(s, mod);
                }
                return(s.ToString());
            });

            AddCommand("give", (args) => {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Items[args[0]].gameObject, GameManager.Instance.PrimaryPlayer, true);
                return(args[0]);
            });

            AddGroup("dump")
            .WithSubCommand("items", (args) => {
                var b  = new StringBuilder();
                var db = PickupObjectDatabase.Instance.Objects;
                for (int i = 0; i < db.Count; i++)
                {
                    PickupObject obj = null;
                    string name      = null;
                    try {
                        obj = db[i];
                    } catch {
                        name = "[ERROR: failed getting object by index]";
                    }
                    if (obj != null)
                    {
                        try {
                            var displayname = obj.encounterTrackable.journalData.PrimaryDisplayName;
                            name            = StringTableManager.ItemTable[displayname].GetWeightedString();
                        } catch {
                            name = "[ERROR: failed getting ammonomicon name]";
                        }
                        if (name == null)
                        {
                            try {
                                name = obj.EncounterNameOrDisplayName;
                            } catch {
                                name = "[ERROR: failed getting encounter or display name]";
                            }
                        }
                    }
                    if (name == null && obj != null)
                    {
                        name = "[NULL NAME (but object is not null)]";
                    }

                    if (name != null)
                    {
                        b.AppendLine($"{i}: {name}");
                        _Logger.Info($"{i}: {name}");
                    }
                }
                return(b.ToString());
            });

            AddGroup("log")
            .WithSubCommand("sub", (args) => {
                if (_Subscribed)
                {
                    return("Already subscribed.");
                }
                Logger.Subscribe(_LoggerSubscriber);
                _Subscribed = true;
                return("Done.");
            })
            .WithSubCommand("unsub", (args) => {
                if (!_Subscribed)
                {
                    return("Not subscribed yet.");
                }
                Logger.Unsubscribe(_LoggerSubscriber);
                _Subscribed = false;
                return("Done.");
            })
            .WithSubCommand("level", (args) => {
                if (args.Count == 0)
                {
                    return(_LogLevel.ToString().ToLowerInvariant());
                }
                else
                {
                    switch (args[0])
                    {
                    case "debug": _LogLevel = Logger.LogLevel.Debug; break;

                    case "info": _LogLevel = Logger.LogLevel.Info; break;

                    case "warn": _LogLevel = Logger.LogLevel.Warn; break;

                    case "error": _LogLevel = Logger.LogLevel.Error; break;

                    default: throw new Exception($"Unknown log level '{args[0]}");
                    }
                    return("Done.");
                }
            });
        }
Esempio n. 20
0
        public static void ArtifactsOnLoad(Action <PlayerController, float> orig, PlayerController self, float invisibleDelay)
        {
            orig(self, invisibleDelay);
            PlayerController player = (GameManager.Instance.PrimaryPlayer);
            //BunnyModule.Log("GIVE AN ARTIFACT YOU F**K");
            bool sonoclone = player.HasPickupID(Game.Items["bny:attraction"].PickupObjectId) || player.HasPickupID(Game.Items["bny:avarice"].PickupObjectId) || player.HasPickupID(Game.Items["bny:bolster"].PickupObjectId) || player.HasPickupID(Game.Items["bny:daze"].PickupObjectId) || player.HasPickupID(Game.Items["bny:fodder"].PickupObjectId) || player.HasPickupID(Game.Items["bny:frailty"].PickupObjectId) || player.HasPickupID(Game.Items["bny:glass"].PickupObjectId) || player.HasPickupID(Game.Items["bny:megalomania"].PickupObjectId) || player.HasPickupID(Game.Items["bny:prey"].PickupObjectId) || player.HasPickupID(Game.Items["bny:revenge"].PickupObjectId) || player.HasPickupID(Game.Items["bny:sacrifice"].PickupObjectId) || player.HasPickupID(Game.Items["bny:enigma"].PickupObjectId);

            if (!sonoclone)
            {
                if (ArtifactMonger.RandomArtifactMode)
                {
                    //BunnyModule.Log("GIVE AN ARTIFACT YOU F**K");
                    ArtifactMonger.Char = UnityEngine.Random.Range(1, 13);
                    switch (ArtifactMonger.Char)
                    {
                    case 1:
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Attraction"].gameObject, player, true);
                        break;

                    case 2:
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Revenge"].gameObject, player, true);
                        break;

                    case 3:
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Glass"].gameObject, player, true);
                        break;

                    case 4:
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Avarice"].gameObject, player, true);
                        break;

                    case 5:
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Daze"].gameObject, player, true);
                        break;

                    case 6:
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Prey"].gameObject, player, true);
                        break;

                    case 7:
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Megalomania"].gameObject, player, true);
                        break;

                    case 8:
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Fodder"].gameObject, player, true);
                        break;

                    case 9:
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Bolster"].gameObject, player, true);
                        break;

                    case 10:
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Frailty"].gameObject, player, true);
                        break;

                    case 11:
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Sacrifice"].gameObject, player, true);
                        break;

                    case 12:
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Enigma"].gameObject, player, true);
                        break;
                    }
                }
                if (DeicideShrine.AllArtifactMode)
                {
                    LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Attraction"].gameObject, player, true);
                    LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Revenge"].gameObject, player, true);
                    LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Glass"].gameObject, player, true);
                    LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Avarice"].gameObject, player, true);
                    LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Daze"].gameObject, player, true);
                    LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Prey"].gameObject, player, true);
                    LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Megalomania"].gameObject, player, true);
                    LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Fodder"].gameObject, player, true);
                    LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Bolster"].gameObject, player, true);
                    LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Frailty"].gameObject, player, true);
                    LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Sacrifice"].gameObject, player, true);
                    LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Enigma"].gameObject, player, true);
                }
                if (Commands.CustomLoadoutArtifactsEnabled)
                {
                    if (Commands.AttractionEnabled)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Attraction"].gameObject, player, true);
                    }
                    if (Commands.AvariceEnabled)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Avarice"].gameObject, player, true);
                    }
                    if (Commands.BolsterEnabled)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Bolster"].gameObject, player, true);
                    }
                    if (Commands.DazeEnabled)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Daze"].gameObject, player, true);
                    }
                    if (Commands.FodderEnabled)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Fodder"].gameObject, player, true);
                    }
                    if (Commands.FrailtyEnabled)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Frailty"].gameObject, player, true);
                    }
                    if (Commands.GlassEnabled)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Glass"].gameObject, player, true);
                    }
                    if (Commands.MegalomaniaEnabled)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Megalomania"].gameObject, player, true);
                    }
                    if (Commands.PreyEnabled)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Prey"].gameObject, player, true);
                    }
                    if (Commands.RevengeEnabled)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Revenge"].gameObject, player, true);
                    }
                    if (Commands.SacrificeEnabled)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Sacrifice"].gameObject, player, true);
                    }
                    if (Commands.EnigmaEnabled)
                    {
                        LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Enigma"].gameObject, player, true);
                    }
                }
            }
        }
        public static void SetMyItem()
        {
            List <int> my2 = new List <int>();

            try
            {
                Debug.Log("item:" + myitem);
                using (FileStream fs = new FileStream(myitem, FileMode.Open))
                {
                    using (StreamReader sr = new StreamReader(fs))
                    {
                        Regex    r = new Regex("//.*");
                        string   l, t;
                        string[] s;
                        int      v;
                        // Read and display lines from the file until the end of
                        // the file is reached.
                        while ((l = sr.ReadLine()) != null)
                        {
                            //Debug.Log("item l:" + l);
                            t = r.Replace(l, String.Empty);
                            //Debug.Log("item t:" + t);
                            s = t.Split(new char[] { ' ', '\t', ',' });
                            foreach (var i in s)
                            {
                                //Debug.Log("item i:" + i);
                                if (int.TryParse(i, out v))
                                {
                                    Debug.Log("item v:" + v);
                                    my2.Add(v);
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Debug.LogError("item:" + e);
                // throw;
            }
            Debug.Log("item my:" + my2.Count);
            //Debug.Log("item my:" + my2.ToString());

            /*
             *          int[] my = new int[]
             *          {
             *              131//유틸리티 벨트
             *              ,273//레이저 조준기
             *              ,134 //탄띠
             *              ,634//크라이시스 스톤
             *              ,285//+1 총탄
             *              ,113//로켓 추진식 총탄
             *              ,298//전격탄
             *              ,638 //디볼버 라운드
             *              ,640 //보팔 총탄
             *              ,655 //배고픈 총탄
             *              ,288 //반사식 총탄
             *              ,304 //폭발성 탄약
             *              ,373 //알파 총탄
             *              ,374 //오메가 총탄
             *              ,204 //방사능 처리 납
             *              ,295 //뜨거운 총탄
             *              ,410 //배터리 총탄
             *              ,278 //서리 총탄
             *              ,527//매력탄
             *              ,533 //매력탄
             *              //, //공포탄 총탄
             *              ,284// 자동유도 탄환
             *              ,352//그림자 탄환
             *              ,375 //간편 재장전 총탄
             *              ,635 //스노우총탄
             *              //,//원격 총탄
             *              ,528 //좀비탄
             *              //대공포탄
             *              ,538// 은탄
             *              ,532//도금 총탄
             *              ,627//백금 총알
             *              ,569//혼돈 탄환
             *              //,521// 확률탄
             *              ,630//붕총탄
             *              ,114//바이오닉 레그
             *              ,427//산탄총 커피
             *              ,426//산탄 콜라
             *              ,212//탄도 장화
             *              ,110//매직 스위트
             *              ,187//요령 좋은 성격
             *              ,435//콧털
             *              ,213//리치의 집게손가락
             *              ,353//분노의 사진
             *              ,115//투표 용지
             *              ,414//인간 탄환
             *              ,354//군사 훈련
             *              ,463//쥐갈공명의 반지
             *              ,112//지도 제작자의 반지
             *              ,158//구덩이 군주의 부적
             *              ,191//화염 저항의 반지
             *              ,495//총기옥
             *              ,488//상자 집착증 반지
             *              ,309//클로런시 반지
             *              ,174//상자 우정 반지
             *              ,254//상자 우정 반지
             *              ,294//흉내내기 우정 반지
             *              ,456//방아쇠 반지
             *              ,159//건드로메다 질병
             *              ,258//브로콜리
             *              ,431//발키리 용액
             *              ,167//핏빛 눈알
             *              ,160//건나이트 투구
             *              ,161//건나이트 정강이받이
             *              ,162//건나이트 건틀렛
             *              ,163//건나이트 갑옷
             *              ,219//늙은 기사의 방패
             *              ,222//늙은 기사의 투구
             *              ,305//오래된 문장
             *              ,457//가시 갑옷
             *              ,564//풀메탈재킷
             *              ,256//무거운 장화
             *              ,193//맹독충 장화
             *              ,315//건부츠
             *              ,526//뿅뿅 부츠
             *              //,667//쥐 장화. 엘리베이터 불가
             *              ,214//동전 왕관
             *              ,165//기름칠한 실린더
             *              ,170//아이스큐브
             *              ,190//롤링 아이
             *              ,135//전쟁의 톱니바퀴
             *              ,119//메트로놈
             *              ,138//벌집
             *              ,137//지도
             *              ,281//총굴 청사진
             *              ,253//총굴 고추
             *              ,259//항체
             *              ,262//화이트 구온석
             *              ,263//오렌지 구온석
             *              ,264//클리어 구온석
             *              ,466//그린 구온석
             *              ,260//핑크 구온석
             *              ,269//레드 구온석
             *              ,270//블루 구온석
             *              ,565//유리 구온석
             *              //핫뜨거 손목시계
             *              ,280//드럼 클립
             *              ,287//백업용 총
             *              ,290//선글라스
             *              ,293//흉내내기 이빨 목걸이
             *              ,307//왁스 날개
             *              ,312//블래스트 투구
             *              ,313//몬스터 혈액
             *              ,314//나노머신
             *              ,289//칠 잎 클로버
             *              ,326//이인자
             *              ,321//황금 탄환 부적
             *              ,325//혼돈 탄환 부적
             *              ,322//로드스톤 탄환 부적
             *              ,342//우라늄 탄환 부적
             *              ,343//구리 탄환 부적
             *              ,344//서리 탄환 부적
             *              ,396//테이블 기술 - 마음의 눈
             *              ,397//테이블 기술 - 자금
             *              ,398//테이블 기술 - 로켓
             *              //,//테이블 기술 - 산탄총
             *              //,321//테이블 기술 - 히트
             *              ,399//테이블 기술 - 분노
             *              ,400//테이블 기술 - 공포탄
             *              ,465//테이블 기술 - 기절
             *              ,421//하트 권총집
             *              ,423//하트 목걸이
             *              ,424//하트 보틀
             *              ,425//하트 지갑
             *              ,440//루비 팔찌
             *              ,409//고장 난 텔레비전
             *              ,364//얼음 심장
             *              ,255//고대 영웅의 반다나
             *              ,436//피묻은 목도리
             *              ,437//근이완제
             *              ,500//힙 홀스터
             *              ,311//복제인간
             *              //,452//스펀지
             *              ,453//방독면
             *              ,454//방호복
             *              ,487//상자 해부학
             *              ,166//쉘레톤 열쇠
             *              ,490//금전 벽돌
             *              ,529//전투 깃발
             *              ,491//조력자
             *              ,492//늑대
             *              ,300//개
             *              ,249//올빼미
             *              ,301//슈퍼 스페이스 터틀
             *              ,127//뻥이에요
             *              ,148//고물
             *              ,641//황금 고물
             *              ,580//쓰레기
             *              ,318//R2G2
             *              ,442//배지
             *              ,572//닭피리
             *              ,232//우주의 친구
             *              ,451//돼지→영웅 돼지
             *              ,632//칠면조
             *              ,664//어린 흉내쟁이
             *              ,461//공포탄 동료의 반지
             *              ,493//현금 가방
             *              ,494//은하 용맹 훈장
             *              ,434//총탄 우상
             *              ,271//납 어레미
             *              ,570//노란 약실.저주2
             *          };
             */

            PickupObject o;

            for (int i = 0; i < my2.Count; i++)
            {
                try
                {
                    if ((o = PickupObjectDatabase.GetById(my2[i])) != null)
                    {
                        LootEngine.TryGivePrefabToPlayer(o.gameObject, GameManager.Instance.PrimaryPlayer, true);
                    }
                }
                catch (Exception)
                {
                    UnityEngine.Debug.Log("해당 아이템 없음:" + i);
                }
            }
        }
Esempio n. 22
0
        public static void HandleLoadout(PlayerController player)
        {
            //PassiveItem weightedRandomItem =
            //player.startingGunIds.Add(weightedRandomItem.PickupObjectId);
            StripPlayer(player);


            LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Nuclear Talisman"].gameObject, player, true);
            Gun gun      = PickupObjectDatabase.GetById(80) as Gun;
            Gun gunGold  = PickupObjectDatabase.GetById(652) as Gun;
            Gun gunCop   = PickupObjectDatabase.GetById(58) as Gun;
            Gun gunSword = PickupObjectDatabase.GetById(574) as Gun;

            if (Char <= 0)
            {
                Char = UnityEngine.Random.Range(1, 13);
            }

            switch (Char)
            {
            case 1:                    //fish that can roll
                player.inventory.AddGunToInventory(gun, true);
                player.stats.SetBaseStatValue(PlayerStats.StatType.DodgeRollDistanceMultiplier, 1.2f, player);
                player.stats.SetBaseStatValue(PlayerStats.StatType.DodgeRollSpeedMultiplier, 1.5f, player);
                //player.stats.SetBaseStatValue(PlayerStats.StatType.DodgeRollDamage, 3f, player);
                //LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items[""].gameObject, player, true);
                header = "fish";
                break;

            case 2:                    //shiny rock
                player.inventory.AddGunToInventory(gun, true);
                player.stats.SetBaseStatValue(PlayerStats.StatType.Health, 5, player);
                //LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items[""].gameObject, player, true);

                header = "crystal";

                break;

            case 3:                    //lots o' eyes
                player.inventory.AddGunToInventory(gun, true);
                //LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items[""].gameObject, player, true);
                header = "eyes";
                break;

            case 4:                    //dead
                player.inventory.AddGunToInventory(gun, true);
                player.stats.SetBaseStatValue(PlayerStats.StatType.Health, 1, player);
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Corps Exploion"].gameObject, player, true);
                header = "melting";
                break;

            case 5:                    //plant
                player.inventory.AddGunToInventory(gun, true);
                player.stats.SetBaseStatValue(PlayerStats.StatType.MovementSpeed, 8, player);
                //LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items[""].gameObject, player, true);
                header = "plant";
                break;

            case 6:                    //gun god
                player.inventory.AddGunToInventory(gunGold, true);
                player.stats.SetBaseStatValue(PlayerStats.StatType.RateOfFire, 1.5f, player);
                //LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items[""].gameObject, player, true);
                header = "yv";
                break;

            case 7:                    //drugs
                player.inventory.AddGunToInventory(gun, true);
                player.stats.SetBaseStatValue(PlayerStats.StatType.Accuracy, 1.8f, player);
                //LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items[""].gameObject, player, true);
                header = "steroids";
                break;

            case 8:                    //robot
                player.inventory.AddGunToInventory(gun, true);
                LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items["Eat Weapon"].gameObject, player, true);
                header = "robot";
                break;

            case 9:                    //bird
                player.inventory.AddGunToInventory(gunSword, true);
                //LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items[""].gameObject, player, true);
                header = "chicken";
                break;

            case 10:                    //minion spam
                player.inventory.AddGunToInventory(gun, true);
                //LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items[""].gameObject, player, true);
                header = "rebel";
                break;

            case 11:                    //green guy number 67394-113
                player.inventory.AddGunToInventory(gun, true);
                //LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items[""].gameObject, player, true);
                header = "horror";
                break;

            default:                    //cop
                player.inventory.AddGunToInventory(gunCop, true);
                //LootEngine.TryGivePrefabToPlayer(ETGMod.Databases.Items[""].gameObject, player, true);
                header = "rogue";
                break;
            }
            Notify(header, text);
        }
Esempio n. 23
0
        private void LoadSettingsFromClipBoard(string clipboard = "")
        {
            string encodedJson = "";

            if (clipboard == "")
            {
                ETGModConsole.Log($"{GUIUtility.systemCopyBuffer}");
                encodedJson = Base64Decode(GUIUtility.systemCopyBuffer);
            }
            else
            {
                encodedJson = Base64Decode(clipboard);
            }
            var deserialized = JsonConvert.DeserializeObject <JObject>(encodedJson);

            foreach (JProperty gun in deserialized["gunObject"])
            {
                int id = 0;
                if (Int32.TryParse(gun.Value.ToString(), out id))
                {
                    if (!GameManager.Instance.PrimaryPlayer.inventory.ContainsGun(id))
                    {
                        GameManager.Instance.PrimaryPlayer.inventory.AddGunToInventory(PickupObjectDatabase.GetById(id) as Gun, true);
                    }
                }
                else
                {
                    ETGModConsole.Log($"Gun not in list!");
                }
            }

            foreach (JProperty stat in deserialized["statsObject"])
            {
                if (_Stats.ContainsKey(stat.Name))
                {
                    _Stats.TryGetValue(stat.Name, out PlayerStats.StatType specificstat);
                    GameManager.Instance.PrimaryPlayer.stats.SetBaseStatValue(specificstat, (float)stat.Value, GameManager.Instance.PrimaryPlayer);
                }
            }

            GameManager.Instance.PrimaryPlayer.RemoveAllActiveItems();
            foreach (JProperty active in deserialized["activeObject"])
            {
                int id = 0;
                if (Int32.TryParse(active.Value.ToString(), out id))
                {
                    LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(id).gameObject, GameManager.Instance.PrimaryPlayer, false);
                }
                else
                {
                    ETGModConsole.Log($"Active item not in list!");
                }
            }

            GameManager.Instance.PrimaryPlayer.RemoveAllPassiveItems();
            foreach (JProperty passive in deserialized["passiveObject"])
            {
                int id = 0;
                if (Int32.TryParse(passive.Value.ToString(), out id))
                {
                    LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(id).gameObject, GameManager.Instance.PrimaryPlayer, false);
                }
                else
                {
                    ETGModConsole.Log($"Passive item not in list!");
                }
            }
        }
Esempio n. 24
0
        private void LoadSettings(string filename)
        {
            if (System.IO.File.Exists("MagicSmokeSaves/" + filename + ".json"))
            {
                var jsonFile = Base64Decode(File.ReadAllText("MagicSmokeSaves/" + filename + ".json"));

                var deserialized = JsonConvert.DeserializeObject <JObject>(jsonFile);

                //foreach (JProperty character in deserialized["characterObject"])
                //{
                //    if (Enum.IsDefined(typeof(PlayableCharacters), character.Value.ToString()))
                //    {
                //        string[] characterName = new string[] { character.Value.ToString() };
                //        LoadCharacter(characterName);

                //    }
                //}

                foreach (JProperty gun in deserialized["gunObject"])
                {
                    int id = 0;
                    if (Int32.TryParse(gun.Value.ToString(), out id))
                    {
                        if (!GameManager.Instance.PrimaryPlayer.inventory.ContainsGun(id))
                        {
                            ETGModConsole.Log($"Loading gun: {gun.Name} with id: {gun.Value.ToString()}");
                            GameManager.Instance.PrimaryPlayer.inventory.AddGunToInventory(PickupObjectDatabase.GetById(id) as Gun, true);
                            ETGModConsole.Log($"Gun not in list!");
                        }
                    }
                    else
                    {
                        ETGModConsole.Log($"Gun not in list!");
                    }
                }

                foreach (JProperty stat in deserialized["statsObject"])
                {
                    if (_Stats.ContainsKey(stat.Name))
                    {
                        _Stats.TryGetValue(stat.Name, out PlayerStats.StatType specificstat);
                        GameManager.Instance.PrimaryPlayer.stats.SetBaseStatValue(specificstat, (float)stat.Value, GameManager.Instance.PrimaryPlayer);
                    }
                }

                GameManager.Instance.PrimaryPlayer.RemoveAllActiveItems();
                foreach (JProperty active in deserialized["activeObject"])
                {
                    int id = 0;

                    if (Int32.TryParse(active.Value.ToString(), out id))
                    {
                        LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(id).gameObject, GameManager.Instance.PrimaryPlayer, false);
                    }
                    else
                    {
                        ETGModConsole.Log($"Active item not in list!");
                    }
                }

                GameManager.Instance.PrimaryPlayer.RemoveAllPassiveItems();
                foreach (JProperty passive in deserialized["passiveObject"])
                {
                    int id = 0;

                    if (Int32.TryParse(passive.Value.ToString(), out id))
                    {
                        LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(id).gameObject, GameManager.Instance.PrimaryPlayer, false);
                        ETGModConsole.Log($"Passive item {id}!");
                    }
                    else
                    {
                        ETGModConsole.Log($"Passive item not in list!");
                    }
                }
            }
            else
            {
                ETGModConsole.Log("File <color=#ff0000ff>" + filename + ".json </color>in the MagicSmokeSaves directory not found!");
            }
        }
Esempio n. 25
0
        private IEnumerator DoWrite(string path, bool doLoad, string[] items, PlayerController player)
        {
            yield return(new WaitForSeconds(.15f));

            if (File.Exists(path))
            {
                List <string> stuffToSave = new List <string> {
                    player.CurrentGun.EncounterNameOrDisplayName
                };
                List <string> currentPassives = new List <string> {
                };
                List <string> currentActives  = new List <string> {
                };
                List <string> currentGuns     = new List <string> {
                };

                if (player.passiveItems.Any())
                {
                    foreach (PassiveItem passive in player.passiveItems)
                    {
                        bool flag  = passive.CanBeDropped;
                        bool flag2 = passive.quality != ItemQuality.EXCLUDED;
                        if (flag && flag2)
                        {
                            currentPassives.Add(passive.EncounterNameOrDisplayName);
                        }
                    }
                }
                if (player.activeItems.Any())
                {
                    foreach (PlayerItem item in player.activeItems)
                    {
                        bool flag  = item.CanBeDropped;
                        bool flag2 = item.quality != ItemQuality.EXCLUDED;
                        bool flag3 = item != this;
                        if (flag && flag2 && flag3)
                        {
                            currentActives.Add(item.EncounterNameOrDisplayName);
                        }
                    }
                }
                if (player.inventory.AllGuns.Any())
                {
                    foreach (Gun gun in player.inventory.AllGuns)
                    {
                        bool flag  = gun.CanBeDropped;
                        bool flag2 = gun.quality != ItemQuality.EXCLUDED;
                        bool flag3 = gun != player.CurrentGun;
                        if (flag && flag2 && flag3)
                        {
                            currentGuns.Add(gun.EncounterNameOrDisplayName);
                        }
                    }
                }
                if (currentGuns.Any())
                {
                    currentGuns.Remove(player.CurrentGun.EncounterNameOrDisplayName);
                }
                if (currentPassives.Any())
                {
                    for (int i = 0; i < 2; i++)
                    {
                        if (currentPassives.Any())
                        {
                            string s = currentPassives[UnityEngine.Random.Range(0, currentPassives.Count)];
                            stuffToSave.Add(s);
                            currentPassives.Remove(s);
                        }
                        else
                        {
                            break;
                        }
                    }
                }
                if (currentActives.Any())
                {
                    stuffToSave.Add(currentActives[UnityEngine.Random.Range(0, currentActives.Count)]);
                }
                if (currentGuns.Any())
                {
                    stuffToSave.Add(currentGuns[UnityEngine.Random.Range(0, currentGuns.Count)]);
                }
                if (doLoad)
                {
                    string [] lines = new string[] { };
                    lines = File.ReadAllLines(path);
                    foreach (string s in lines)
                    {
                        LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetByEncounterName(s).gameObject, player);
                    }
                }

                string[] writeData = stuffToSave.ToArray();
                File.WriteAllLines(path, writeData);
            }
            yield break;
        }
        public static void CheatMenu()
        {
            float sz = 30f;
            int   ct = 0;

            if (GUI.Button(new Rect(20f, sz * ct++, 130f, 30f), "Cheat Menu"))
            {
                ShowHide = !ShowHide;
            }
            if (ShowHide)
            {
                GUI.Box(new Rect(20f, sz * ct++, 180f, 325f), "Poop");
                if (GUI.Button(new Rect(25f, sz * ct, 170f, 30f), "Spawn Chosen Items"))
                {
                    SetItem();
                }

                if (GUI.Button(new Rect(25f + 170f, sz * ct, 170f, 30f), "my item set"))
                {
                    SetMyItem();
                }
                myitem = GUI.TextField(new Rect(25f + 170f * 2, sz * ct++, 170f, 30f), myitem);

                if (GUI.Button(new Rect(25f, sz * ct++, 170f, 30f), "Give Junkan"))
                {
                    LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(580).gameObject, GameManager.Instance.PrimaryPlayer, true);
                }
                if (GUI.Button(new Rect(25f, sz * ct, 170f, 30f), "Give Heart"))
                {
                    LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(85).gameObject, GameManager.Instance.PrimaryPlayer, true);
                }
                if (GUI.Button(new Rect(25f + 170f, sz * ct++, 170f, 30f), "MAX 9 Heart"))
                {
                    SetHealthMaximum();
                }

                if (GUI.Button(new Rect(25f, sz * ct, 170f, 30f), "Give Key"))
                {
                    LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(67).gameObject, GameManager.Instance.PrimaryPlayer, true);
                }
                if (GUI.Button(new Rect(25f + 170f, sz * ct++, 170f, 30f), "Set 99 Key"))
                {
                    SetMaxBullets();
                }

                if (GUI.Button(new Rect(25f, sz * ct, 170f, 30f), "Give Blank"))
                {
                    LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(224).gameObject, GameManager.Instance.PrimaryPlayer, true);
                }
                if (GUI.Button(new Rect(25f + 170f, sz * ct, 170f, 30f), "Set 99 Blank"))
                {
                    SetBlank99();
                }
                if (GUI.Button(new Rect(25f + 170f * 2, sz * ct++, 170f, 30f), "Blank!"))
                {
                    SetForceBlank();
                }

                if (GUI.Button(new Rect(25f, sz * ct, 170f, 30f), "Give Armor"))
                {
                    LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(120).gameObject, GameManager.Instance.PrimaryPlayer, true);
                }
                if (GUI.Button(new Rect(25f + 170f, sz * ct++, 170f, 30f), "Set 99 Armor"))
                {
                    SetArmor99();
                }

                //상자
                int xc = 0;
                if (GUI.Button(new Rect(25f + 30f * xc++, sz * ct, 30f, 30f), "D"))
                {
                    SetChest(GameManager.Instance.RewardManager.D_Chest);
                }
                if (GUI.Button(new Rect(25f + 30f * xc++, sz * ct, 30f, 30f), "C"))
                {
                    SetChest(GameManager.Instance.RewardManager.C_Chest);
                }
                if (GUI.Button(new Rect(25f + 30f * xc++, sz * ct, 30f, 30f), "B"))
                {
                    SetChest(GameManager.Instance.RewardManager.B_Chest);
                }
                if (GUI.Button(new Rect(25f + 30f * xc++, sz * ct, 30f, 30f), "A"))
                {
                    SetChest(GameManager.Instance.RewardManager.A_Chest);
                }
                if (GUI.Button(new Rect(25f + 30f * xc++, sz * ct, 30f, 30f), "S"))
                {
                    SetChest(GameManager.Instance.RewardManager.S_Chest);
                }
                if (GUI.Button(new Rect(25f + 30f * xc++, sz * ct, 30f, 30f), "RB"))
                {
                    SetChest(GameManager.Instance.RewardManager.Rainbow_Chest);
                }
                if (GUI.Button(new Rect(25f + 30f * xc++, sz * ct, 30f, 30f), "SNG"))
                {
                    SetChest(GameManager.Instance.RewardManager.Synergy_Chest);
                }
                ct++;

                if (GUI.Button(new Rect(25f, sz * ct, 170f, 30f), "Give 50 Casings"))
                {
                    LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(74).gameObject, GameManager.Instance.PrimaryPlayer, true);
                }
                if (GUI.Button(new Rect(25f + 170f, sz * ct++, 170f, 30f), "Set Max Currency"))
                {
                    SetMaxCurrency();
                }

                if (GUI.Button(new Rect(25f, sz * ct++, 170f, 30f), "Give Hegemony 50 Credit"))
                {
                    for (int j = 0; j < 50; j++)
                    {
                        LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(297).gameObject, GameManager.Instance.PrimaryPlayer, true);
                    }
                }

                if (GUI.Button(new Rect(25f, sz * ct++, 170f, 30f), "아이템99개 소지"))
                {
                    SetMAX_HELD9();
                }

                if (GUI.Button(new Rect(25f, sz * ct, 170f, 30f), "저주 제거"))
                {
                    SetClearCurse();
                }

                if (GUI.Button(new Rect(25f + 170f, sz * ct++, 170f, 30f), "저주템"))
                {
                    SetMyItemCurse();
                }


                if (GUI.Button(new Rect(25f, sz * ct, 170f, 30f), "Drop Passive all"))
                {
                    SetDropPassive(true);
                }
                if (GUI.Button(new Rect(25f + 170f, sz * ct++, 170f, 30f), "Drop Passive last"))
                {
                    SetDropPassive(false);
                }

                stringToEdit = GUI.TextField(new Rect(25f, sz * ct, 170f, 30f), stringToEdit);
                int k;
                if (GUI.Button(new Rect(25f + 170f, sz * ct++, 170f, 30f), "Give set id") && int.TryParse(stringToEdit, out k))
                {
                    LootEngine.TryGivePrefabToPlayer(PickupObjectDatabase.GetById(k).gameObject, GameManager.Instance.PrimaryPlayer, true);
                }

                if (GUI.Button(new Rect(25f, sz * ct++, 170f, 30f), "탄환의 주인"))
                {
                    SetMyItem2();
                }

                if (GUI.Button(new Rect(25f, sz * ct++, 170f, 30f), "item list out"))
                {
                    SetListOut();
                }
            }
        }
Esempio n. 27
0
        internal void AddDefaultCommands()
        {
            _LoggerSubscriber = (logger, loglevel, indent, str) => {
                PrintLine(logger.String(loglevel, str, indent: indent), color: _LoggerColors[loglevel]);
            };


            AddCommand("!!", (args, histindex) => {
                if (histindex - 1 < 0)
                {
                    throw new Exception("Can't run previous command (history is empty).");
                }
                return(History.Execute(histindex.Value - 1));
            });

            AddCommand("!'", (args, histindex) => {
                if (histindex - 1 < 0)
                {
                    throw new Exception("Can't run previous command (history is empty).");
                }
                return(History.Entries[histindex.Value - 1]);
            });

            AddCommand("echo", (args) => {
                return(string.Join(" ", args.ToArray()));
            }).WithSubCommand("hello", (args) => {
                return("Hello, world!\nHello, world!\nHello, world!\nHello, world!\nHello, world!\nHello, world!");
            });

            AddGroup("debug")
            .WithSubCommand("parser-bounds-test", (args) => {
                var text           = "echo Hello! \"Hello world!\" This\\ is\\ great \"It\"works\"with\"\\ wacky\" stuff\" \\[\\] \"\\[\\]\" [e[echo c][echo h][echo [echo \"o\"]] \"hel\"[echo lo][echo !]]";
                CurrentCommandText = text;
                return(null);
            })
            .WithSubCommand("giveid", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("Exactly 1 argument required.");
                }
                var pickup_obj = PickupObjectDatabase.Instance.InternalGetById(int.Parse(args[0]));

                if (pickup_obj == null)
                {
                    return("Item ID {args[0]} doesn't exist!");
                }

                LootEngine.TryGivePrefabToPlayer(pickup_obj.gameObject, GameManager.Instance.PrimaryPlayer, true);
                return(pickup_obj.EncounterNameOrDisplayName);
            });

            AddGroup("pool")
            .WithSubGroup(
                new Group("items")
                .WithSubCommand("idof", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("Exactly 1 argument required (numeric ID).");
                }
                var id = int.Parse(args[0]);
                foreach (var pair in ETGMod.Items.Pairs)
                {
                    if (pair.Value.PickupObjectId == id)
                    {
                        return(pair.Key);
                    }
                }
                return("Entry not found.");
            })
                .WithSubCommand("nameof", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("Exactly 1 argument required (ID).");
                }
                var id = args[0];
                foreach (var pair in ETGMod.Items.Pairs)
                {
                    if (pair.Key == id)
                    {
                        return(_GetPickupObjectName(pair.Value));
                    }
                }
                return("Entry not found.");
            })
                .WithSubCommand("numericof", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("Exactly 1 argument required (ID).");
                }
                var id = args[0];
                foreach (var pair in ETGMod.Items.Pairs)
                {
                    if (pair.Key == id)
                    {
                        return(pair.Value.PickupObjectId.ToString());
                    }
                }
                return("Entry not found.");
            })
                .WithSubCommand("list", (args) => {
                var s     = new StringBuilder();
                var pairs = new List <KeyValuePair <string, PickupObject> >();
                foreach (var pair in ETGMod.Items.Pairs)
                {
                    pairs.Add(pair);
                }
                foreach (var pair in pairs)
                {
                    if (_GetPickupObjectName(pair.Value) == "NO NAME")
                    {
                        s.AppendLine($"[{pair.Key}] {_GetPickupObjectName(pair.Value)}");
                    }
                }
                pairs.Sort((x, y) => string.Compare(_GetPickupObjectName(x.Value), _GetPickupObjectName(y.Value)));
                foreach (var pair in pairs)
                {
                    if (_GetPickupObjectName(pair.Value) == "NO NAME")
                    {
                        continue;
                    }
                    s.AppendLine($"[{pair.Key}] {_GetPickupObjectName(pair.Value)}");
                }
                return(s.ToString());
            })
                .WithSubCommand("random", (args) => {
                return(ETGMod.Items.RandomKey);
            })
                );

            AddCommand("listmods", (args) => {
                var s = new StringBuilder();

                s.AppendLine("Loaded mods:");
                foreach (var mod in ETGMod.ModLoader.LoadedMods)
                {
                    _GetModInfo(s, mod);
                }
                return(s.ToString());
            });

            AddCommand("give", (args) => {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Items[args[0]].gameObject, GameManager.Instance.PrimaryPlayer, true);
                return(args[0]);
            });

            AddCommand("exec", (args) => {
                var script = args[0];
                try {
                    var result    = ETGMod.ModLoader.LuaState.DoString(script);
                    string output = "[?]";
                    if (result.Count > 0)
                    {
                        var b = new StringBuilder();
                        foreach (var r in result)
                        {
                            b.AppendLine(r.ToString());
                        }
                        output = b.ToString();
                    }
                    else
                    {
                        output = "[ok]";
                    }
                    return(output);
                } catch (Eluant.LuaException e) {
                    return(e.ToString());
                }
            });

            AddGroup("dump")
            .WithSubCommand("synergy_chest", (args) => {
                System.Console.WriteLine(ObjectDumper.Dump(GameManager.Instance.RewardManager.Synergy_Chest, depth: 10));
                return("Dumped to log");
            })
            .WithSubCommand("synergies", (args) => {
                var id = 0;
                foreach (var synergy in GameManager.Instance.SynergyManager.synergies)
                {
                    if (synergy.NameKey != null)
                    {
                        var name = StringTableManager.GetSynergyString(synergy.NameKey);
                        System.Console.WriteLine($"== SYNERGY ID {id} NAME {name} ==");
                    }
                    else
                    {
                        System.Console.WriteLine($"== SYNERGY ID {id} ==");
                    }
                    System.Console.WriteLine($"  ACTIVATION STATUS: {synergy.ActivationStatus}");
                    System.Console.WriteLine($"  # OF OBJECTS REQUIRED: {synergy.NumberObjectsRequired}");
                    System.Console.WriteLine($"  ACTIVE WHEN GUN UNEQUIPPED?: {synergy.ActiveWhenGunUnequipped}");
                    System.Console.WriteLine($"  REQUIRES AT LEAST ONE GUN AND ONE ITEM?: {synergy.RequiresAtLeastOneGunAndOneItem}");
                    System.Console.WriteLine($"  MANDATORY GUNS:");
                    foreach (var itemid in synergy.MandatoryGunIDs)
                    {
                        System.Console.WriteLine($"  - {_GetPickupObjectName(PickupObjectDatabase.GetById(itemid))}");
                    }
                    System.Console.WriteLine($"  OPTIONAL GUNS:");
                    foreach (var itemid in synergy.OptionalGunIDs)
                    {
                        System.Console.WriteLine($"  - {_GetPickupObjectName(PickupObjectDatabase.GetById(itemid))}");
                    }
                    System.Console.WriteLine($"  MANDATORY ITEMS:");
                    foreach (var itemid in synergy.MandatoryItemIDs)
                    {
                        System.Console.WriteLine($"  - {_GetPickupObjectName(PickupObjectDatabase.GetById(itemid))}");
                    }
                    System.Console.WriteLine($"  OPTIONAL ITEMS:");
                    foreach (var itemid in synergy.OptionalItemIDs)
                    {
                        System.Console.WriteLine($"  - {_GetPickupObjectName(PickupObjectDatabase.GetById(itemid))}");
                    }
                    System.Console.WriteLine($"  BONUS SYNERGIES:");
                    foreach (var bonus in synergy.bonusSynergies)
                    {
                        System.Console.WriteLine($"  - {bonus}");
                    }
                    System.Console.WriteLine($"  STAT MODIFIERS:");
                    foreach (var statmod in synergy.statModifiers)
                    {
                        System.Console.WriteLine($"  - STAT: {statmod.statToBoost}");
                        System.Console.WriteLine($"    AMOUNT: {statmod.amount}");
                        System.Console.WriteLine($"    MODIFY TYPE: {statmod.modifyType}");
                        System.Console.WriteLine($"    PERSISTS ON COOP DEATH?: {statmod.PersistsOnCoopDeath}");
                        System.Console.WriteLine($"    IGNORED FOR SAVE DATA?: {statmod.ignoredForSaveData}");
                    }
                    id++;
                }
                return("Dumped to log");
            })
            .WithSubCommand("items", (args) => {
                var b  = new StringBuilder();
                var db = PickupObjectDatabase.Instance.Objects;
                for (int i = 0; i < db.Count; i++)
                {
                    PickupObject obj  = null;
                    string nameprefix = "";
                    string name       = null;
                    try {
                        obj = db[i];
                    } catch {
                        name = "[ERROR: failed getting object by index]";
                    }
                    if (obj != null)
                    {
                        try {
                            var displayname = obj.encounterTrackable.journalData.PrimaryDisplayName;
                            name            = StringTableManager.ItemTable[displayname].GetWeightedString();
                        } catch {
                            name = "[ERROR: failed getting ammonomicon name]";
                        }
                        if (name == null)
                        {
                            try {
                                name = obj.EncounterNameOrDisplayName;
                            } catch {
                                name = "[ERROR: failed getting encounter or display name]";
                            }
                        }
                    }
                    if (name == null && obj != null)
                    {
                        name = "[NULL NAME (but object is not null)]";
                    }

                    name = $"{nameprefix} {name}";

                    if (name != null)
                    {
                        b.AppendLine($"{i}: {name}");
                        _Logger.Info($"{i}: {name}");
                    }
                }
                return(b.ToString());
            });

            AddGroup("log")
            .WithSubCommand("sub", (args) => {
                if (_Subscribed)
                {
                    return("Already subscribed.");
                }
                Logger.Subscribe(_LoggerSubscriber);
                _Subscribed = true;
                return("Done.");
            })
            .WithSubCommand("unsub", (args) => {
                if (!_Subscribed)
                {
                    return("Not subscribed yet.");
                }
                Logger.Unsubscribe(_LoggerSubscriber);
                _Subscribed = false;
                return("Done.");
            })
            .WithSubCommand("level", (args) => {
                if (args.Count == 0)
                {
                    return(_LogLevel.ToString().ToLowerInvariant());
                }
                else
                {
                    switch (args[0])
                    {
                    case "debug": _LogLevel = Logger.LogLevel.Debug; break;

                    case "info": _LogLevel = Logger.LogLevel.Info; break;

                    case "warn": _LogLevel = Logger.LogLevel.Warn; break;

                    case "error": _LogLevel = Logger.LogLevel.Error; break;

                    default: throw new Exception($"Unknown log level '{args[0]}");
                    }
                    return("Done.");
                }
            });
        }
Esempio n. 28
0
        internal void AddDefaultCommands()
        {
            _LoggerSubscriber = (logger, loglevel, indent, str) => {
                PrintLine(logger.String(loglevel, str, indent: indent), color: _LoggerColors[loglevel]);
            };


            AddCommand("!!", (args, histindex) => {
                if (histindex - 1 < 0)
                {
                    throw new Exception("Can't run previous command (history is empty).");
                }
                return(History.Execute(histindex.Value - 1));
            });

            AddCommand("!'", (args, histindex) => {
                if (histindex - 1 < 0)
                {
                    throw new Exception("Can't run previous command (history is empty).");
                }
                return(History.Entries[histindex.Value - 1]);
            });

            AddCommand("echo", (args) => {
                return(string.Join(" ", args.ToArray()));
            }).WithSubCommand("hello", (args) => {
                return("Hello, world!\nHello, world!\nHello, world!\nHello, world!\nHello, world!\nHello, world!");
            });

            AddGroup("debug")
            .WithSubCommand("spawn-rand-chest", (args) => {
                var chest = GameManager.Instance.RewardManager.SpawnTotallyRandomChest(GameManager.Instance.PrimaryPlayer.CurrentRoom.GetRandomAvailableCellDumb());
                return(chest.name);
            })
            //.WithSubCommand("force-dual-wield", (args) => {
            //    if (args.Count < 1) throw new Exception("At least 1 argument required.");
            //    var partner_id = int.Parse(args[0]);
            //    var player = GameManager.Instance.PrimaryPlayer;
            //    var gun = player.inventory.CurrentGun;
            //    var partner_gun = PickupObjectDatabase.GetById(partner_id) as Gun;
            //    player.inventory.AddGunToInventory(partner_gun);
            //    var forcer = gun.gameObject.AddComponent<DualWieldForcer>();
            //    forcer.Gun = gun;
            //    forcer.PartnerGunID = partner_gun.PickupObjectId;
            //    forcer.TargetPlayer = player;
            //    return "Done";
            //})
            .WithSubCommand("unexclude-all-items", (args) => {
                foreach (var ent in PickupObjectDatabase.Instance.Objects)
                {
                    if (ent == null)
                    {
                        continue;
                    }
                    ent.quality = PickupObject.ItemQuality.SPECIAL;
                }
                return("Done");
            })
            .WithSubCommand("activate-all-synergies", (args) => {
                foreach (var ent in GameManager.Instance.SynergyManager.synergies)
                {
                    if (ent == null)
                    {
                        continue;
                    }
                    ent.ActivationStatus = SynergyEntry.SynergyActivation.ACTIVE;
                }
                return("Done");
            })
            .WithSubCommand("character", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("At least 1 argument required.");
                }
                var player_controller = ModUntitled.Characters[args[0]];
                if (player_controller == null)
                {
                    throw new Exception($"Character '{args[0]}' doesn't exist.");
                }
                ModUntitled.Instance.StartCoroutine(_ChangeCharacter(player_controller, args.Count > 1));
                return($"Changed character to {args[0]}");
            })
            .WithSubCommand("parser-bounds-test", (args) => {
                var text           = "echo Hello! \"Hello world!\" This\\ is\\ great \"It\"works\"with\"\\ wacky\" stuff\" \\[\\] \"\\[\\]\" [e[echo c][echo h][echo [echo \"o\"]] \"hel\"[echo lo][echo !]]";
                CurrentCommandText = text;
                return(null);
            })
            .WithSubCommand("giveid", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("Exactly 1 argument required.");
                }
                var pickup_obj = PickupObjectDatabase.Instance.InternalGetById(int.Parse(args[0]));

                if (pickup_obj == null)
                {
                    return("Item ID {args[0]} doesn't exist!");
                }

                LootEngine.TryGivePrefabToPlayer(pickup_obj.gameObject, GameManager.Instance.PrimaryPlayer, true);
                return(pickup_obj.EncounterNameOrDisplayName);
            });

            //AddGroup("pool")
            //.WithSubGroup(
            //    new Group("items")
            //    .WithSubCommand("idof", (args) => {
            //        if (args.Count < 1) throw new Exception("Exactly 1 argument required (numeric ID).");
            //        var id = int.Parse(args[0]);
            //        foreach (var pair in ModUntitled.Items.Pairs) {
            //            if (pair.Value.PickupObjectId == id) return pair.Key;
            //        }
            //        return "Entry not found.";
            //    })
            //    .WithSubCommand("nameof", (args) => {
            //        if (args.Count < 1) throw new Exception("Exactly 1 argument required (ID).");
            //        var id = args[0];
            //        foreach (var pair in ModUntitled.Items.Pairs) {
            //            if (pair.Key == id) return _GetPickupObjectName(pair.Value);
            //        }
            //        return "Entry not found.";
            //    })
            //    .WithSubCommand("numericof", (args) => {
            //        if (args.Count < 1) throw new Exception("Exactly 1 argument required (ID).");
            //        var id = args[0];
            //        foreach (var pair in ModUntitled.Items.Pairs) {
            //            if (pair.Key == id) return pair.Value.PickupObjectId.ToString();
            //        }
            //        return "Entry not found.";
            //    })
            //    .WithSubCommand("list", (args) => {
            //        var s = new StringBuilder();
            //        var pairs = new List<KeyValuePair<string, PickupObject>>();
            //        foreach (var pair in ModUntitled.Items.Pairs) {
            //            pairs.Add(pair);
            //        }
            //        foreach (var pair in pairs) {
            //            if (_GetPickupObjectName(pair.Value) == "NO NAME") {
            //                s.AppendLine($"[{pair.Key}] {_GetPickupObjectName(pair.Value)}");
            //            }
            //        }
            //        pairs.Sort((x, y) => string.Compare(_GetPickupObjectName(x.Value), _GetPickupObjectName(y.Value)));
            //        foreach (var pair in pairs) {
            //            if (_GetPickupObjectName(pair.Value) == "NO NAME") continue;
            //            s.AppendLine($"[{pair.Key}] {_GetPickupObjectName(pair.Value)}");
            //        }
            //        return s.ToString();
            //    })
            //    .WithSubCommand("random", (args) => {
            //        return ModUntitled.Items.RandomKey;
            //    })
            //);

            AddCommand("summon", (args) => {
                var player = GameManager.Instance.PrimaryPlayer;
                if (player == null)
                {
                    throw new Exception("No player");
                }
                var cell   = player.CurrentRoom.GetRandomAvailableCellDumb();
                var entity = AIActor.Spawn(ModUntitled.Enemies[args[0]], cell, player.CurrentRoom, true, AIActor.AwakenAnimationType.Default, true);

                if (ModUntitled.Enemies.HasTag(args[0], ModUntitled.EnemyTags.Friendly))
                {
                    entity.CompanionOwner    = player;
                    entity.CompanionSettings = new ActorCompanionSettings();
                    entity.CanTargetPlayers  = false;
                    var companion            = entity.GetComponent <CompanionController>();
                    if (companion != null)
                    {
                        companion.Initialize(player);
                        if (companion.specRigidbody)
                        {
                            PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(companion.specRigidbody, null, false);
                        }
                    }
                }

                var name = args[0];
                if (entity.encounterTrackable?.journalData?.PrimaryDisplayName != null)
                {
                    name = StringTableManager.GetEnemiesString(entity.encounterTrackable?.journalData?.PrimaryDisplayName);
                }

                return(name);
            });

            //AddCommand("listmods", (args) => {
            //    var s = new StringBuilder();

            //    s.AppendLine("Loaded mods:");
            //    foreach (var mod in ModUntitled.ModLoader.LoadedMods) {
            //        _GetModInfo(s, mod);
            //    }
            //    return s.ToString();
            //});

            AddCommand("lua", (args) => {
                LuaMode = true;
                return("[entered lua mode]");
            });

            AddCommand("give", (args) => {
                LootEngine.TryGivePrefabToPlayer(ModUntitled.Items[args[0]].gameObject, GameManager.Instance.PrimaryPlayer, true);
                return(args[0]);
            });

            AddGroup("dump")
            .WithSubCommand("synergy_chest", (args) => {
                System.Console.WriteLine(ObjectDumper.Dump(GameManager.Instance.RewardManager.Synergy_Chest, depth: 10));
                return("Dumped to log");
            })
            .WithSubCommand("synergies", (args) => {
                var id = 0;
                foreach (var synergy in GameManager.Instance.SynergyManager.synergies)
                {
                    if (synergy.NameKey != null)
                    {
                        var name = StringTableManager.GetSynergyString(synergy.NameKey);
                        System.Console.WriteLine($"== SYNERGY ID {id} NAME {name} ==");
                    }
                    else
                    {
                        System.Console.WriteLine($"== SYNERGY ID {id} ==");
                    }
                    System.Console.WriteLine($"  ACTIVATION STATUS: {synergy.ActivationStatus}");
                    System.Console.WriteLine($"  # OF OBJECTS REQUIRED: {synergy.NumberObjectsRequired}");
                    System.Console.WriteLine($"  ACTIVE WHEN GUN UNEQUIPPED?: {synergy.ActiveWhenGunUnequipped}");
                    System.Console.WriteLine($"  REQUIRES AT LEAST ONE GUN AND ONE ITEM?: {synergy.RequiresAtLeastOneGunAndOneItem}");
                    System.Console.WriteLine($"  MANDATORY GUNS:");
                    foreach (var itemid in synergy.MandatoryGunIDs)
                    {
                        System.Console.WriteLine($"  - {_GetPickupObjectName(PickupObjectDatabase.GetById(itemid))}");
                    }
                    System.Console.WriteLine($"  OPTIONAL GUNS:");
                    foreach (var itemid in synergy.OptionalGunIDs)
                    {
                        System.Console.WriteLine($"  - {_GetPickupObjectName(PickupObjectDatabase.GetById(itemid))}");
                    }
                    System.Console.WriteLine($"  MANDATORY ITEMS:");
                    foreach (var itemid in synergy.MandatoryItemIDs)
                    {
                        System.Console.WriteLine($"  - {_GetPickupObjectName(PickupObjectDatabase.GetById(itemid))}");
                    }
                    System.Console.WriteLine($"  OPTIONAL ITEMS:");
                    foreach (var itemid in synergy.OptionalItemIDs)
                    {
                        System.Console.WriteLine($"  - {_GetPickupObjectName(PickupObjectDatabase.GetById(itemid))}");
                    }
                    System.Console.WriteLine($"  BONUS SYNERGIES:");
                    foreach (var bonus in synergy.bonusSynergies)
                    {
                        System.Console.WriteLine($"  - {bonus}");
                    }
                    System.Console.WriteLine($"  STAT MODIFIERS:");
                    foreach (var statmod in synergy.statModifiers)
                    {
                        System.Console.WriteLine($"  - STAT: {statmod.statToBoost}");
                        System.Console.WriteLine($"    AMOUNT: {statmod.amount}");
                        System.Console.WriteLine($"    MODIFY TYPE: {statmod.modifyType}");
                        System.Console.WriteLine($"    PERSISTS ON COOP DEATH?: {statmod.PersistsOnCoopDeath}");
                        System.Console.WriteLine($"    IGNORED FOR SAVE DATA?: {statmod.ignoredForSaveData}");
                    }
                    id++;
                }
                return("Dumped to log");
            })
            .WithSubCommand("items", (args) => {
                var b  = new StringBuilder();
                var db = PickupObjectDatabase.Instance.Objects;
                for (int i = 0; i < db.Count; i++)
                {
                    PickupObject obj  = null;
                    string nameprefix = "";
                    string name       = null;
                    try {
                        obj = db[i];
                    } catch {
                        name = "[ERROR: failed getting object by index]";
                    }
                    if (obj != null)
                    {
                        try {
                            var displayname = obj.encounterTrackable.journalData.PrimaryDisplayName;
                            name            = StringTableManager.ItemTable[displayname].GetWeightedString();
                        } catch {
                            name = "[ERROR: failed getting ammonomicon name]";
                        }
                        if (name == null)
                        {
                            try {
                                name = obj.EncounterNameOrDisplayName;
                            } catch {
                                name = "[ERROR: failed getting encounter or display name]";
                            }
                        }
                    }
                    if (name == null && obj != null)
                    {
                        name = "[NULL NAME (but object is not null)]";
                    }

                    name = $"{nameprefix} {name}";

                    if (name != null)
                    {
                        b.AppendLine($"{i}: {name}");
                        _Logger.Info($"{i}: {name}");
                    }
                }
                return(b.ToString());
            });

            AddGroup("log")
            .WithSubCommand("sub", (args) => {
                if (_Subscribed)
                {
                    return("Already subscribed.");
                }
                Logger.Subscribe(_LoggerSubscriber);
                _Subscribed = true;
                return("Done.");
            })
            .WithSubCommand("unsub", (args) => {
                if (!_Subscribed)
                {
                    return("Not subscribed yet.");
                }
                Logger.Unsubscribe(_LoggerSubscriber);
                _Subscribed = false;
                return("Done.");
            })
            .WithSubCommand("level", (args) => {
                if (args.Count == 0)
                {
                    return(_LogLevel.ToString().ToLowerInvariant());
                }
                else
                {
                    switch (args[0])
                    {
                    case "debug": _LogLevel = Logger.LogLevel.Debug; break;

                    case "info": _LogLevel = Logger.LogLevel.Info; break;

                    case "warn": _LogLevel = Logger.LogLevel.Warn; break;

                    case "error": _LogLevel = Logger.LogLevel.Error; break;

                    default: throw new Exception($"Unknown log level '{args[0]}");
                    }
                    return("Done.");
                }
            });
            //// test commands to dump collection
            //AddGroup("texdump")
            //.WithSubCommand("collection", (args) =>
            //{
            //    if (args.Count == 0)
            //    {
            //        return "No name specified";
            //    }
            //    else
            //    {
            //        string collectionName = args[0];
            //        Animation.Collection.Dump(collectionName);
            //        return "Successfull";
            //    }
            //});
        }
Esempio n. 29
0
        internal void AddDefaultCommands()
        {
            _LoggerSubscriber = (logger, loglevel, indent, str) => {
                PrintLine(logger.String(loglevel, str, indent: indent), color: _LoggerColors[loglevel]);
            };


            AddCommand("!!", (args, histindex) => {
                if (histindex - 1 < 0)
                {
                    throw new Exception("Can't run previous command (history is empty).");
                }
                return(History.Execute(histindex.Value - 1));
            });

            AddCommand("!'", (args, histindex) => {
                if (histindex - 1 < 0)
                {
                    throw new Exception("Can't run previous command (history is empty).");
                }
                return(History.Entries[histindex.Value - 1]);
            });

            AddCommand("echo", (args) => {
                return(string.Join(" ", args.ToArray()));
            }).WithSubCommand("hello", (args) => {
                return("Hello, world!\nHello, world!\nHello, world!\nHello, world!\nHello, world!\nHello, world!");
            });

            AddGroup("debug")
            .WithSubCommand("summon", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("At least 1 argument required.");
                }
                var myguid = args[0];
                int count  = 0;

                if (args.Count >= 2)
                {
                    count = int.Parse(args[1]);
                }

                var prefab = EnemyDatabase.GetOrLoadByGuid(myguid);
                for (int i = 0; i < count; i++)
                {
                    IntVector2?targetCenter = new IntVector2?(GameManager.Instance.PrimaryPlayer.CenterPosition.ToIntVector2(VectorConversions.Floor));
                    Pathfinding.CellValidator cellValidator = delegate(IntVector2 c) {
                        for (int j = 0; j < prefab.Clearance.x; j++)
                        {
                            for (int k = 0; k < prefab.Clearance.y; k++)
                            {
                                if (GameManager.Instance.Dungeon.data.isTopWall(c.x + j, c.y + k))
                                {
                                    return(false);
                                }
                                if (targetCenter.HasValue)
                                {
                                    if (IntVector2.Distance(targetCenter.Value, c.x + j, c.y + k) < 4)
                                    {
                                        return(false);
                                    }
                                    if (IntVector2.Distance(targetCenter.Value, c.x + j, c.y + k) > 20)
                                    {
                                        return(false);
                                    }
                                }
                            }
                        }
                        return(true);
                    };
                    IntVector2?randomAvailableCell = GameManager.Instance.PrimaryPlayer.CurrentRoom.GetRandomAvailableCell(new IntVector2?(prefab.Clearance), new Dungeonator.CellTypes?(prefab.PathableTiles), false, cellValidator);
                    if (randomAvailableCell.HasValue)
                    {
                        AIActor aIActor = AIActor.Spawn(prefab, randomAvailableCell.Value, GameManager.Instance.PrimaryPlayer.CurrentRoom, true, AIActor.AwakenAnimationType.Default, true);
                        aIActor.HandleReinforcementFallIntoRoom(0);
                    }
                }
                return(prefab?.ActorName ?? "[Unknown]");
            })
            .WithSubCommand("force-dual-wield", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("At least 1 argument required.");
                }
                var partner_id  = int.Parse(args[0]);
                var player      = GameManager.Instance.PrimaryPlayer;
                var gun         = player.inventory.CurrentGun;
                var partner_gun = PickupObjectDatabase.GetById(partner_id) as Gun;
                player.inventory.AddGunToInventory(partner_gun);
                var forcer          = gun.gameObject.AddComponent <DualWieldForcer>();
                forcer.Gun          = gun;
                forcer.PartnerGunID = partner_gun.PickupObjectId;
                forcer.TargetPlayer = player;
                return("Done");
            })
            .WithSubCommand("unexclude-all-items", (args) => {
                foreach (var ent in PickupObjectDatabase.Instance.Objects)
                {
                    if (ent == null)
                    {
                        continue;
                    }
                    ent.quality = PickupObject.ItemQuality.SPECIAL;
                }
                return("Done");
            })
            .WithSubCommand("activate-all-synergies", (args) => {
                foreach (var ent in GameManager.Instance.SynergyManager.synergies)
                {
                    if (ent == null)
                    {
                        continue;
                    }
                    ent.ActivationStatus = SynergyEntry.SynergyActivation.ACTIVE;
                }
                return("Done");
            })
            .WithSubCommand("character", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("At least 1 argument required.");
                }
                StartCoroutine(_ChangeCharacter(args[0], args.Count > 1));
                return($"Changed character to {args[0]}");
            })
            .WithSubCommand("parser-bounds-test", (args) => {
                var text           = "echo Hello! \"Hello world!\" This\\ is\\ great \"It\"works\"with\"\\ wacky\" stuff\" \\[\\] \"\\[\\]\" [e[echo c][echo h][echo [echo \"o\"]] \"hel\"[echo lo][echo !]]";
                CurrentCommandText = text;
                return(null);
            })
            .WithSubCommand("giveid", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("Exactly 1 argument required.");
                }
                var pickup_obj = PickupObjectDatabase.Instance.InternalGetById(int.Parse(args[0]));

                if (pickup_obj == null)
                {
                    return("Item ID {args[0]} doesn't exist!");
                }

                LootEngine.TryGivePrefabToPlayer(pickup_obj.gameObject, GameManager.Instance.PrimaryPlayer, true);
                return(pickup_obj.EncounterNameOrDisplayName);
            });

            AddGroup("pool")
            .WithSubGroup(
                new Group("items")
                .WithSubCommand("idof", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("Exactly 1 argument required (numeric ID).");
                }
                var id = int.Parse(args[0]);
                foreach (var pair in ETGMod.Items.Pairs)
                {
                    if (pair.Value.PickupObjectId == id)
                    {
                        return(pair.Key);
                    }
                }
                return("Entry not found.");
            })
                .WithSubCommand("nameof", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("Exactly 1 argument required (ID).");
                }
                var id = args[0];
                foreach (var pair in ETGMod.Items.Pairs)
                {
                    if (pair.Key == id)
                    {
                        return(_GetPickupObjectName(pair.Value));
                    }
                }
                return("Entry not found.");
            })
                .WithSubCommand("numericof", (args) => {
                if (args.Count < 1)
                {
                    throw new Exception("Exactly 1 argument required (ID).");
                }
                var id = args[0];
                foreach (var pair in ETGMod.Items.Pairs)
                {
                    if (pair.Key == id)
                    {
                        return(pair.Value.PickupObjectId.ToString());
                    }
                }
                return("Entry not found.");
            })
                .WithSubCommand("list", (args) => {
                var s     = new StringBuilder();
                var pairs = new List <KeyValuePair <string, PickupObject> >();
                foreach (var pair in ETGMod.Items.Pairs)
                {
                    pairs.Add(pair);
                }
                foreach (var pair in pairs)
                {
                    if (_GetPickupObjectName(pair.Value) == "NO NAME")
                    {
                        s.AppendLine($"[{pair.Key}] {_GetPickupObjectName(pair.Value)}");
                    }
                }
                pairs.Sort((x, y) => string.Compare(_GetPickupObjectName(x.Value), _GetPickupObjectName(y.Value)));
                foreach (var pair in pairs)
                {
                    if (_GetPickupObjectName(pair.Value) == "NO NAME")
                    {
                        continue;
                    }
                    s.AppendLine($"[{pair.Key}] {_GetPickupObjectName(pair.Value)}");
                }
                return(s.ToString());
            })
                .WithSubCommand("random", (args) => {
                return(ETGMod.Items.RandomKey);
            })
                );

            AddCommand("listmods", (args) => {
                var s = new StringBuilder();

                s.AppendLine("Loaded mods:");
                foreach (var mod in ETGMod.ModLoader.LoadedMods)
                {
                    _GetModInfo(s, mod);
                }
                return(s.ToString());
            });

            AddCommand("lua", (args) => {
                LuaMode = true;
                return("[entered lua mode]");
            });

            AddCommand("give", (args) => {
                LootEngine.TryGivePrefabToPlayer(ETGMod.Items[args[0]].gameObject, GameManager.Instance.PrimaryPlayer, true);
                return(args[0]);
            });

            AddGroup("dump")
            .WithSubCommand("synergy_chest", (args) => {
                System.Console.WriteLine(ObjectDumper.Dump(GameManager.Instance.RewardManager.Synergy_Chest, depth: 10));
                return("Dumped to log");
            })
            .WithSubCommand("synergies", (args) => {
                var id = 0;
                foreach (var synergy in GameManager.Instance.SynergyManager.synergies)
                {
                    if (synergy.NameKey != null)
                    {
                        var name = StringTableManager.GetSynergyString(synergy.NameKey);
                        System.Console.WriteLine($"== SYNERGY ID {id} NAME {name} ==");
                    }
                    else
                    {
                        System.Console.WriteLine($"== SYNERGY ID {id} ==");
                    }
                    System.Console.WriteLine($"  ACTIVATION STATUS: {synergy.ActivationStatus}");
                    System.Console.WriteLine($"  # OF OBJECTS REQUIRED: {synergy.NumberObjectsRequired}");
                    System.Console.WriteLine($"  ACTIVE WHEN GUN UNEQUIPPED?: {synergy.ActiveWhenGunUnequipped}");
                    System.Console.WriteLine($"  REQUIRES AT LEAST ONE GUN AND ONE ITEM?: {synergy.RequiresAtLeastOneGunAndOneItem}");
                    System.Console.WriteLine($"  MANDATORY GUNS:");
                    foreach (var itemid in synergy.MandatoryGunIDs)
                    {
                        System.Console.WriteLine($"  - {_GetPickupObjectName(PickupObjectDatabase.GetById(itemid))}");
                    }
                    System.Console.WriteLine($"  OPTIONAL GUNS:");
                    foreach (var itemid in synergy.OptionalGunIDs)
                    {
                        System.Console.WriteLine($"  - {_GetPickupObjectName(PickupObjectDatabase.GetById(itemid))}");
                    }
                    System.Console.WriteLine($"  MANDATORY ITEMS:");
                    foreach (var itemid in synergy.MandatoryItemIDs)
                    {
                        System.Console.WriteLine($"  - {_GetPickupObjectName(PickupObjectDatabase.GetById(itemid))}");
                    }
                    System.Console.WriteLine($"  OPTIONAL ITEMS:");
                    foreach (var itemid in synergy.OptionalItemIDs)
                    {
                        System.Console.WriteLine($"  - {_GetPickupObjectName(PickupObjectDatabase.GetById(itemid))}");
                    }
                    System.Console.WriteLine($"  BONUS SYNERGIES:");
                    foreach (var bonus in synergy.bonusSynergies)
                    {
                        System.Console.WriteLine($"  - {bonus}");
                    }
                    System.Console.WriteLine($"  STAT MODIFIERS:");
                    foreach (var statmod in synergy.statModifiers)
                    {
                        System.Console.WriteLine($"  - STAT: {statmod.statToBoost}");
                        System.Console.WriteLine($"    AMOUNT: {statmod.amount}");
                        System.Console.WriteLine($"    MODIFY TYPE: {statmod.modifyType}");
                        System.Console.WriteLine($"    PERSISTS ON COOP DEATH?: {statmod.PersistsOnCoopDeath}");
                        System.Console.WriteLine($"    IGNORED FOR SAVE DATA?: {statmod.ignoredForSaveData}");
                    }
                    id++;
                }
                return("Dumped to log");
            })
            .WithSubCommand("items", (args) => {
                var b  = new StringBuilder();
                var db = PickupObjectDatabase.Instance.Objects;
                for (int i = 0; i < db.Count; i++)
                {
                    PickupObject obj  = null;
                    string nameprefix = "";
                    string name       = null;
                    try {
                        obj = db[i];
                    } catch {
                        name = "[ERROR: failed getting object by index]";
                    }
                    if (obj != null)
                    {
                        try {
                            var displayname = obj.encounterTrackable.journalData.PrimaryDisplayName;
                            name            = StringTableManager.ItemTable[displayname].GetWeightedString();
                        } catch {
                            name = "[ERROR: failed getting ammonomicon name]";
                        }
                        if (name == null)
                        {
                            try {
                                name = obj.EncounterNameOrDisplayName;
                            } catch {
                                name = "[ERROR: failed getting encounter or display name]";
                            }
                        }
                    }
                    if (name == null && obj != null)
                    {
                        name = "[NULL NAME (but object is not null)]";
                    }

                    name = $"{nameprefix} {name}";

                    if (name != null)
                    {
                        b.AppendLine($"{i}: {name}");
                        _Logger.Info($"{i}: {name}");
                    }
                }
                return(b.ToString());
            });

            AddGroup("log")
            .WithSubCommand("sub", (args) => {
                if (_Subscribed)
                {
                    return("Already subscribed.");
                }
                Logger.Subscribe(_LoggerSubscriber);
                _Subscribed = true;
                return("Done.");
            })
            .WithSubCommand("unsub", (args) => {
                if (!_Subscribed)
                {
                    return("Not subscribed yet.");
                }
                Logger.Unsubscribe(_LoggerSubscriber);
                _Subscribed = false;
                return("Done.");
            })
            .WithSubCommand("level", (args) => {
                if (args.Count == 0)
                {
                    return(_LogLevel.ToString().ToLowerInvariant());
                }
                else
                {
                    switch (args[0])
                    {
                    case "debug": _LogLevel = Logger.LogLevel.Debug; break;

                    case "info": _LogLevel = Logger.LogLevel.Info; break;

                    case "warn": _LogLevel = Logger.LogLevel.Warn; break;

                    case "error": _LogLevel = Logger.LogLevel.Error; break;

                    default: throw new Exception($"Unknown log level '{args[0]}");
                    }
                    return("Done.");
                }
            });
            // test commands to dump collection
            AddGroup("texdump")
            .WithSubCommand("collection", (args) =>
            {
                if (args.Count == 0)
                {
                    return("No name specified");
                }
                else
                {
                    string collectionName = args[0];
                    Animation.Collection.Dump(collectionName);
                    return("Successfull");
                }
            });
        }