private bool TryParseGearID(GearIDRange gearIDRange, out ItemDataBlock itemData, out int inventorySlot) { inventorySlot = 0; itemData = null; if (gearIDRange == null) { Log.Warn("Unable to parse GearIDRange due to it being null"); return(false); } uint compID = gearIDRange.GetCompID(eGearComponent.BaseItem); itemData = compID > 0U ? GameDataBlockBase <ItemDataBlock> .GetBlock(compID) : null; if (itemData == null) { Log.Warn($"Invalid ItemDataBlock for component in offlinear gear [c:{compID}]"); return(false); } inventorySlot = (int)itemData.inventorySlot; return(true); }
private static IDChangePair DissolveBase <T>(string content, uint offset) where T : GameDataBlockBase <T> { try { var setting = GameDataSettingBase; var block = JsonConvert.DeserializeObject <T>(content, setting); if (GameDataBlockBase <T> .HasBlock(block.persistentID)) { throw new InvalidDataException($"Data already exist for ID: {block.persistentID} ({typeof(T).Name})"); } var change = new IDChangePair() { Previous = block.persistentID, New = offset }; block.persistentID = change.New; GameDataBlockBase <T> .AddBlock((T)block, -1); return(change); } catch (Exception e) { MelonLogger.Log(e.ToString()); return(default);
public static uint Parse(string input) { if (input == null) { return(0U); } if (uint.TryParse(input, out uint dbID)) { if (GameDataBlockBase <T> .GetBlock(dbID) != null) { return(dbID); } else { Utilities.Log.Warn("DataBlockIDParser: Failed to get enemy data block with id '" + dbID + "'"); } } T namedBlock = GameDataBlockBase <T> .GetBlock(input); if (namedBlock != null) { return(namedBlock.persistentID); } Utilities.Log.Warn("DataBlockIDParser: Failed to get enemy data block with name '" + input + "'"); return(0U); }
public static List <pAvailableEnemyTypes> GetAvailableSpawnData() { if (enemyTypes == null) { SetupData(GameDataBlockBase <EnemyPopulationDataBlock> .GetBlock(RundownManager.ActiveExpedition.Expedition.EnemyPopulation)); } return(enemyTypes); }
public void DoSaveToDisk(string fullPath) { var oldPath = GameDataBlockBase <T> .m_filePathFull; GameDataBlockBase <T> .m_filePathFull = fullPath; GameDataBlockBase <T> .DoSaveToDisk(false, false); GameDataBlockBase <T> .m_filePathFull = oldPath; }
public static void AssignForceChangeMethod(IDataBlockType blockTypeCache) { //TODO: Better Support switch (blockTypeCache.GetShortName().ToLower()) { case "fogsettings": blockTypeCache.RegisterOnChangeEvent(() => { if (Builder.CurrentFloor.IsBuilt) { Logger.Error("Fog Transition Code is not working properly, Skipping this one"); return; var instance = EnvironmentStateManager.Current; Logger.Error("Read Replicator"); var replicator = instance.m_stateReplicator; Logger.Error("Read State"); var state = replicator.State; Logger.Error("Read FogState"); var fogState = state.FogState; Logger.Error("Read ID"); var id = fogState.FogDataID; Logger.Error($"FogTransition {id}"); if (!GameDataBlockBase <FogSettingsDataBlock> .HasBlock(id)) { id = RundownManager.ActiveExpedition.Expedition.FogSettings; } if (GameDataBlockBase <FogSettingsDataBlock> .HasBlock(id)) { EnvironmentStateManager.SetFogSettingsLocal(id); } } }); break; case "lightsettings": blockTypeCache.RegisterOnChangeEvent(() => { if (!Builder.CurrentFloor.IsBuilt) { return; } foreach (var zone in Builder.CurrentFloor.allZones) { foreach (var node in zone.m_courseNodes) { LG_BuildZoneLightsJob.ApplyLightSettings(node.m_lightsInNode, zone.m_lightSettings, false); } } }); break; } }
private static void OnLevelChanged(int level) { if (!(0 <= level && level < LevelCount)) { return; } CurrentLevel = level; _EndTime = Clock.Time + _FogSettings[CurrentLevel].TransitionTime; var block = GameDataBlockBase <FogSettingsDataBlock> .GetBlock(_FogSettings[CurrentLevel].FogSetting); LocalPlayerAgentSettings.Current.SetTargetFogSettings(block); }
public void AddBlock(T block) { var existingBlock = GameDataBlockBase <T> .GetBlock(block.persistentID); if (existingBlock != null) { CopyProperties(block, existingBlock); Logger.Warning($"Replaced Block: {existingBlock.persistentID}, {existingBlock.name}"); return; } GameDataBlockBase <T> .AddBlock(block, -1); Logger.Log($"Added Block: {block.persistentID}, {block.name}"); }
public bool IsMatch(EnemyAgent agent) { var enemyData = GameDataBlockBase <EnemyDataBlock> .GetBlock(agent.EnemyDataID); var comparisonMode = NameIgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; return(Mode switch { TargetMode.PersistentID => PersistentIDs.Contains(agent.EnemyDataID), TargetMode.NameEquals => enemyData?.name?.Equals(NameParam, comparisonMode) ?? false, TargetMode.NameContains => enemyData?.name?.Contains(NameParam, comparisonMode) ?? false, TargetMode.Everything => true, _ => false, });
/// <summary> /// Load and set up all the gear from the offline data /// </summary> private void LoadOfflineGearDatas() { var blocks = GameDataBlockBase <PlayerOfflineGearDataBlock> .GetAllBlocks(); if (blocks == null) { Log.Warn("Unable to get Player Offline Gear blocks"); return; } Log.Verbose($"Loading {blocks.Length} gear"); foreach (var block in blocks) { OfflineGear.Load(block); } }
public override void Postspawn(EnemyAgent agent) { var eabBirth = agent.GetComponentInChildren <EAB_Birthing>(true); if (eabBirth != null) { eabBirth.m_groupDataBlock = GameDataBlockBase <EnemyGroupDataBlock> .GetBlock(EnemyGroupToSpawn); eabBirth.m_childrenCost = ChildrenCost.GetAbsValue(eabBirth.m_childrenCost); eabBirth.m_childrenPerBirth = ChildrenPerBirth.GetAbsValue(eabBirth.m_childrenPerBirth); eabBirth.m_childrenAllowedSpawn = ChildrenPerBirth.GetAbsValue(eabBirth.m_childrenAllowedSpawn); eabBirth.m_childrenPerBirthMin = ChildrenPerBirthMin.GetAbsValue(eabBirth.m_childrenPerBirthMin); eabBirth.m_childrenMax = ChildrenMax.GetAbsValue(eabBirth.m_childrenMax); eabBirth.m_minDelayUntilNextBirth = MinDelayUntilNextBirth.GetAbsValue(eabBirth.m_minDelayUntilNextBirth); eabBirth.m_maxDelayUntilNextBirth = MaxDelayUntilNextBirth.GetAbsValue(eabBirth.m_maxDelayUntilNextBirth); } }
/// <summary> /// The Code which will Randomize your Weapon Layout /// </summary> public void RandomizeCurrentWeapons() { GearIDRange[] standardWeapons = GearManager.GetAllGearForSlot(InventorySlot.GearStandard); GearIDRange[] specialWeapons = GearManager.GetAllGearForSlot(InventorySlot.GearSpecial); PlayerDataBlock playerDataBlock = GameDataBlockBase <PlayerDataBlock> .GetBlock(1U); int standardArrayIndex = _random.Next(0, standardWeapons.Length); int specialArrayIndex = _random.Next(0, specialWeapons.Length); var currentAmmoInStandard = PlayerBackpackManager.LocalBackpack.AmmoStorage.StandardAmmo.AmmoInPack; var currentAmmoInSpecial = PlayerBackpackManager.LocalBackpack.AmmoStorage.SpecialAmmo.AmmoInPack; PlayerBackpackManager.LocalBackpack.AmmoStorage.SetAmmo(AmmoType.Standard, 0f); PlayerBackpackManager.LocalBackpack.AmmoStorage.SetAmmo(AmmoType.Special, 0f); PlayerBackpackManager.EquipLocalGear(standardWeapons[standardArrayIndex]); LocalInventory.WieldedItem.SetCurrentClip(PlayerBackpackManager.LocalBackpack.AmmoStorage.GetClipBulletsFromPack(LocalInventory.m_wieldedItem.WeaponComp.GetCurrentClip(), LocalInventory.m_wieldedItem.AmmoType)); PlayerBackpackManager.EquipLocalGear(specialWeapons[specialArrayIndex]); LocalInventory.WieldedItem.SetCurrentClip(PlayerBackpackManager.LocalBackpack.AmmoStorage.GetClipBulletsFromPack(LocalInventory.m_wieldedItem.WeaponComp.GetCurrentClip(), LocalInventory.m_wieldedItem.AmmoType)); PlayerBackpackManager.LocalBackpack.AmmoStorage.m_hasMappedCMPageMapInventory = false; PlayerBackpackManager.LocalBackpack.AmmoStorage.m_cmPageMapInventory = (PUI_Inventory)null; //Hardcoded +10 to recompensate the Fact, that the Magazine Ammunition is somehow Bugged //PlayerBackpackManager.LocalBackpack.AmmoStorage.StandardAmmo.AddAmmo(currentAmmoInStandard + 10); //PlayerBackpackManager.LocalBackpack.AmmoStorage.SpecialAmmo.AddAmmo(currentAmmoInSpecial + 10); PlayerManager.GetLocalPlayerAgent().GiveAmmoRel(1f, 1f, 0f); PlayerBackpackManager.LocalBackpack.AmmoStorage.UpdateAllAmmoUI(); PlayerBackpackManager.LocalBackpack.AmmoStorage.NeedsSync = true; //PlayerBackpackManager.LocalBackpack.AmmoStorage.PickupAmmo(AmmoType.Standard, 40); //PlayerBackpackManager.LocalBackpack.AmmoStorage.SetClipAmmoInSlot(InventorySlot.GearStandard); //PlayerBackpackManager.LocalBackpack.AmmoStorage.UpdateAmmoInPack(AmmoType.Special, 20); //PlayerBackpackManager.LocalBackpack.AmmoStorage.UpdateBulletsInPack(AmmoType.Special, 15); //PlayerBackpackManager.LocalBackpack.AmmoStorage.PickupAmmo(AmmoType.Special, 40); //PlayerBackpackManager.LocalBackpack.AmmoStorage.SetClipAmmoInSlot(InventorySlot.GearSpecial); PlayerBackpackManager.LocalBackpack.AmmoStorage.FillAllClips(); }
private static void Pre_LoadOfflineGearDatas() { var allBlocks = GameDataBlockBase <PlayerOfflineGearDataBlock> .GetAllBlocks(); foreach (var block in allBlocks) { if (!block.internalEnabled || string.IsNullOrEmpty(block.GearJSON)) { continue; } if (block.Type != eOfflineGearType.StandardInventory && block.Type != eOfflineGearType.RundownSpecificInventory) { continue; } var newGearJson = block.GearJSON; var isChanged = false; using var doc = JsonDocument.Parse(block.GearJSON); if (!doc.RootElement.TryGetProperty("Packet", out var packetProp)) { continue; } if (!packetProp.TryGetProperty("Comps", out var compProp)) { continue; } foreach (var c in COMP_CHARS) { if (!compProp.TryGetProperty(c.ToString(), out var compEProp)) { continue; } if (!compEProp.TryGetProperty("v", out var valueProp)) { continue; } if (valueProp.ValueKind != JsonValueKind.String) { continue; } var strValue = valueProp.GetString(); Logger.Warning($"Found String id: {strValue}"); var id = PersistentIDManager.GetId(strValue); if (id != 0) { var regex = new Regex($"(\"v\")\\s*:\\s*(\"{strValue}\")"); newGearJson = regex.Replace(newGearJson, $"\"v\":{id}"); isChanged = true; } } if (isChanged) { Logger.Warning(block.GearJSON); Logger.Warning(newGearJson); block.GearJSON = newGearJson; } } }