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); }
public static string getName(this AdvancedSynergyEntry e) { return(StringTableManager.GetSynergyString(e.NameKey)); }
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); }
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); }
public static void Add(AdvancedSynergyEntry synergyEntry) { AdvancedSynergyEntry[] array = new AdvancedSynergyEntry[] { synergyEntry }; GameManager.Instance.SynergyManager.synergies = GameManager.Instance.SynergyManager.synergies.Concat(array).ToArray <AdvancedSynergyEntry>(); }
// 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); }