Пример #1
0
 public static bool PlayerHasActiveSynergy(this PlayerController player, string synergyNameToCheck)
 {
     foreach (int num in player.ActiveExtraSynergies)
     {
         AdvancedSynergyEntry advancedSynergyEntry = GameManager.Instance.SynergyManager.synergies[num];
         bool flag = advancedSynergyEntry.NameKey == synergyNameToCheck;
         if (flag)
         {
             return(true);
         }
     }
     return(false);
 }
Пример #2
0
 public static string getName(this AdvancedSynergyEntry e)
 {
     return(StringTableManager.GetSynergyString(e.NameKey));
 }
Пример #3
0
        public static bool SynergyAvailableHook(Func <AdvancedSynergyEntry, PlayerController, PlayerController, int, bool> orig, AdvancedSynergyEntry self, PlayerController p, PlayerController p2, int additionalID = -1)
        {
            if (self.ActivationStatus == SynergyEntry.SynergyActivation.INACTIVE)
            {
                return(false);
            }
            if (self.ActivationStatus == SynergyEntry.SynergyActivation.DEMO)
            {
                return(false);
            }
            bool flag = SynergiesHub.PlayerHasCompletionItem(p) || SynergiesHub.PlayerHasCompletionItem(p);
            bool playerHasCompletionGun = SynergiesHub.PlayerHasCompletionGun(p) || SynergiesHub.PlayerHasCompletionGun(p);

            if (self.IgnoreLichEyeBullets)
            {
                flag = false;
            }
            int num  = 0;
            int num2 = 0;

            for (int i = 0; i < self.MandatoryGunIDs.Count; i++)
            {
                if (SynergiesHub.PlayerHasPickup(p, self.MandatoryGunIDs[i]) || SynergiesHub.PlayerHasPickup(p2, self.MandatoryGunIDs[i]) || self.MandatoryGunIDs[i] == additionalID)
                {
                    num++;
                }
            }
            for (int j = 0; j < self.MandatoryItemIDs.Count; j++)
            {
                if (SynergiesHub.PlayerHasPickup(p, self.MandatoryItemIDs[j]) || SynergiesHub.PlayerHasPickup(p2, self.MandatoryItemIDs[j]) || self.MandatoryItemIDs[j] == additionalID)
                {
                    num2++;
                }
            }
            int num3 = 0;
            int num4 = 0;

            for (int k = 0; k < self.OptionalGunIDs.Count; k++)
            {
                if (SynergiesHub.PlayerHasPickup(p, self.OptionalGunIDs[k]) || SynergiesHub.PlayerHasPickup(p2, self.OptionalGunIDs[k]) || self.OptionalGunIDs[k] == additionalID)
                {
                    num3++;
                }
            }
            for (int l = 0; l < self.OptionalItemIDs.Count; l++)
            {
                if (SynergiesHub.PlayerHasPickup(p, self.OptionalItemIDs[l]) || SynergiesHub.PlayerHasPickup(p2, self.OptionalItemIDs[l]) || self.OptionalItemIDs[l] == additionalID)
                {
                    num4++;
                }
            }
            bool flag2 = self.MandatoryItemIDs.Count > 0 && self.MandatoryGunIDs.Count == 0 && self.OptionalGunIDs.Count > 0 && self.OptionalItemIDs.Count == 0;
            bool flag3 = self.MandatoryGunIDs.Count > 0 && self.MandatoryItemIDs.Count == 0 && self.OptionalItemIDs.Count > 0 && self.OptionalGunIDs.Count == 0;

            if (((self.MandatoryGunIDs.Count > 0 && num > 0) || (flag2 && num3 > 0)) && flag)
            {
                num++;
                num2++;
            }
            if (((self.MandatoryItemIDs.Count > 0 && num2 > 0) || (flag3 && num4 > 0)) && playerHasCompletionGun)
            {
                num++;
                num2++;
            }
            if (num < self.MandatoryGunIDs.Count || num2 < self.MandatoryItemIDs.Count)
            {
                return(false);
            }
            int num5 = self.MandatoryItemIDs.Count + self.MandatoryGunIDs.Count + num3 + num4;
            int num6 = self.MandatoryGunIDs.Count + num3;
            int num7 = self.MandatoryItemIDs.Count + num4;

            if (num6 > 0 && (self.MandatoryGunIDs.Count > 0 || flag2 || (self.RequiresAtLeastOneGunAndOneItem && num6 > 0)) && flag)
            {
                num7++;
                num6++;
                num5 += 2;
            }
            if (num7 > 0 && (self.MandatoryItemIDs.Count > 0 || flag3 || (self.RequiresAtLeastOneGunAndOneItem && num7 > 0)) && playerHasCompletionGun)
            {
                num7++;
                num6++;
                num5 += 2;
            }
            if (self.RequiresAtLeastOneGunAndOneItem && self.OptionalGunIDs.Count + self.MandatoryGunIDs.Count > 0 && self.OptionalItemIDs.Count + self.MandatoryItemIDs.Count > 0 && (num6 < 1 || num7 < 1))
            {
                return(false);
            }
            int num8 = Mathf.Max(2, self.NumberObjectsRequired);

            return(num5 >= num8);
        }
Пример #4
0
        public static AdvancedSynergyEntry CreateSynergy(string name, List <int> mandatoryIds, List <int> optionalIds = default, bool activeWhenGunsUnequipped = true, List <StatModifier> statModifiers = default, bool ignoreLichsEyeBullets = false,
                                                         int numberObjectsRequired = 2, bool suppressVfx = false, bool requiresAtLeastOneGunAndOneItem = false, List <CustomSynergyType> bonusSynergies = default)
        {
            AdvancedSynergyEntry entry = new AdvancedSynergyEntry();
            string key = "#" + name.ToUpper().Replace(" ", "_").Replace("'", "").Replace(",", "").Replace(".", "");

            entry.NameKey = key;
            SpecialItemModule.Strings.Synergies.Set(key, name);
            foreach (int id in mandatoryIds)
            {
                bool isGun = false;
                if (PickupObjectDatabase.GetById(id) is Gun)
                {
                    isGun = true;
                }
                if (isGun)
                {
                    entry.MandatoryGunIDs.Add(id);
                }
                else
                {
                    entry.MandatoryItemIDs.Add(id);
                }
            }
            if (optionalIds != null)
            {
                foreach (int id in optionalIds)
                {
                    bool isGun = false;
                    if (PickupObjectDatabase.GetById(id) is Gun)
                    {
                        isGun = true;
                    }
                    if (isGun)
                    {
                        entry.OptionalGunIDs.Add(id);
                    }
                    else
                    {
                        entry.OptionalItemIDs.Add(id);
                    }
                }
            }
            entry.ActiveWhenGunUnequipped = activeWhenGunsUnequipped;
            entry.statModifiers           = new List <StatModifier>();
            if (statModifiers != null)
            {
                foreach (StatModifier mod in statModifiers)
                {
                    if (mod != null)
                    {
                        entry.statModifiers.Add(mod);
                    }
                }
            }
            entry.IgnoreLichEyeBullets            = ignoreLichsEyeBullets;
            entry.NumberObjectsRequired           = numberObjectsRequired;
            entry.SuppressVFX                     = suppressVfx;
            entry.RequiresAtLeastOneGunAndOneItem = requiresAtLeastOneGunAndOneItem;
            entry.bonusSynergies                  = new List <CustomSynergyType>();
            if (bonusSynergies != null)
            {
                foreach (CustomSynergyType type in bonusSynergies)
                {
                    entry.bonusSynergies.Add(type);
                }
            }
            synergies.Add(entry);
            GameManager.Instance.SynergyManager.synergies = GameManager.Instance.SynergyManager.synergies.Concat(new AdvancedSynergyEntry[] { entry }).ToArray();
            return(entry);
        }
Пример #5
0
 public static void Add(AdvancedSynergyEntry synergyEntry)
 {
     AdvancedSynergyEntry[] array = new AdvancedSynergyEntry[] { synergyEntry };
     GameManager.Instance.SynergyManager.synergies = GameManager.Instance.SynergyManager.synergies.Concat(array).ToArray <AdvancedSynergyEntry>();
 }
Пример #6
0
        // Token: 0x060000C7 RID: 199 RVA: 0x00009464 File Offset: 0x00007664
        public static AdvancedSynergyEntry Add(string name, List <string> mandatoryConsoleIDs, List <string> optionalConsoleIDs = null, bool ignoreLichEyeBullets = true)
        {
            bool flag = mandatoryConsoleIDs == null || mandatoryConsoleIDs.Count == 0;
            AdvancedSynergyEntry result;

            if (flag)
            {
                ETGModConsole.Log("Synergy " + name + " has no mandatory items/guns.", false);
                result = null;
            }
            else
            {
                List <int> list  = new List <int>();
                List <int> list2 = new List <int>();
                List <int> list3 = new List <int>();
                List <int> list4 = new List <int>();
                foreach (string text in mandatoryConsoleIDs)
                {
                    PickupObject pickupObject = Game.Items[text];
                    bool         flag2        = pickupObject && pickupObject.GetComponent <Gun>();
                    if (flag2)
                    {
                        list2.Add(pickupObject.PickupObjectId);
                    }
                    else
                    {
                        bool flag3 = pickupObject && (pickupObject.GetComponent <PlayerItem>() || pickupObject.GetComponent <PassiveItem>());
                        if (flag3)
                        {
                            list.Add(pickupObject.PickupObjectId);
                        }
                    }
                }
                bool flag4 = optionalConsoleIDs != null;
                if (flag4)
                {
                    foreach (string text2 in optionalConsoleIDs)
                    {
                        PickupObject pickupObject = Game.Items[text2];
                        bool         flag5        = pickupObject && pickupObject.GetComponent <Gun>();
                        if (flag5)
                        {
                            list4.Add(pickupObject.PickupObjectId);
                        }
                        else
                        {
                            bool flag6 = pickupObject && (pickupObject.GetComponent <PlayerItem>() || pickupObject.GetComponent <PassiveItem>());
                            if (flag6)
                            {
                                list3.Add(pickupObject.PickupObjectId);
                            }
                        }
                    }
                }
                AdvancedSynergyEntry advancedSynergyEntry = new AdvancedSynergyEntry
                {
                    NameKey          = name,
                    MandatoryItemIDs = list,
                    MandatoryGunIDs  = list2,
                    OptionalItemIDs  = list3,
                    OptionalGunIDs   = list4,
                    bonusSynergies   = new List <CustomSynergyType>(),
                    statModifiers    = new List <StatModifier>()
                };
                CustomSynergies.Add(advancedSynergyEntry);
                result = advancedSynergyEntry;
            }
            return(result);
        }