static bool Prefix(JobLicenses jobLicense, ref LicenseTemplatePaperData __result) { if (jobLicense == PassLicenses.Passengers1) { // override the BookletCreator method __result = PassengerLicenseUtil.GetPassengerLicenseTemplate(); return(false); } return(true); }
static bool Prefix(JobLicenses license, Vector3 position, Quaternion rotation, Transform parent) { if (license != PassLicenses.Passengers1) { return(true); } // we'll try to copy from the Hazmat 1 license prefab GameObject licenseObj = spawnLicenseMethod.Invoke(null, new object[] { COPIED_PREFAB_NAME, position, rotation, true, parent }) as GameObject; PassengerLicenseUtil.SetLicenseObjectProperties(licenseObj, PassBookletType.Passengers1License); PassengerJobs.ModEntry.Logger.Log("Created Passengers 1 license"); return(false); }
public static bool Load(UnityModManager.ModEntry modEntry) { ModEntry = modEntry; CargoTypes.cargoTypeToCargoMassPerUnit[CargoType.Passengers] = 3000f; if (AccessTools.Field(typeof(ResourceTypes), "cargoToFullCargoDamagePrice")?.GetValue(null) is Dictionary <CargoType, float> cdpDict) { cdpDict[CargoType.Passengers] = 70_000f; } else { ModEntry.Logger.Warning("Failed to adjust passenger damage cost"); } try { PassengerLicenseUtil.RegisterPassengerLicenses(); } catch (Exception ex) { var sb = new StringBuilder("Failed to inject new license definitions into LicenseManager:\n"); for ( ; ex != null; ex = ex.InnerException) { sb.AppendLine(ex.Message); } ModEntry.Logger.Error(sb.ToString()); return(false); } // Initialize settings Settings = UnityModManager.ModSettings.Load <PJModSettings>(ModEntry); ModEntry.OnGUI = DrawGUI; ModEntry.OnSaveGUI = SaveGUI; if (Settings.UniformConsists) { SkinManager_Patch.Initialize(); } var harmony = HarmonyInstance.Create("com.foxden.passenger_jobs"); harmony.PatchAll(Assembly.GetExecutingAssembly()); return(true); }
static void Prefix(ref List <StorageItemData> storageItemData, ref GameObject __state) { var bookProps = PassengerLicenseUtil.BookletProperties[PassBookletType.Passengers1License]; StorageItemData itemData = storageItemData.Find(sid => bookProps.Name.Equals(sid.itemPrefabName)); if (itemData != null) { storageItemData.Remove(itemData); GameObject licenseObj = Resources.Load(BC_CreateLicense_Patch.COPIED_PREFAB_NAME) as GameObject; if (licenseObj == null) { PassengerJobs.ModEntry.Logger.Error("Couldn't spawn saved Passengers 1 license"); return; } // GameObject properties and state licenseObj = UnityEngine.Object.Instantiate(licenseObj); PassengerLicenseUtil.SetLicenseObjectProperties(licenseObj, PassBookletType.Passengers1License); licenseObj.GetComponent <InventoryItemSpec>().belongsToPlayer = itemData.belongsToPlayer; if (licenseObj.GetComponent <IStateSave>() is IStateSave stateSave) { stateSave.SetStateSaveData(itemData.state); } // Position / rotation data Transform carTransform = null; Vector3 itemPos = new Vector3(itemData.itemPositionX, itemData.itemPositionY, itemData.itemPositionZ); if (!string.IsNullOrEmpty(itemData.carGuid)) { var car = TrainCar.GetTrainCarByCarGuid(itemData.carGuid); if (car) { if (car.GetComponent <TrainPhysicsLod>() is TrainPhysicsLod carPhysics) { carPhysics.ForceItemUpdate(false); } else { Debug.LogError($"Car {car.name} doesn't have TrainPhysicsLod component. Skipping."); } carTransform = car.interior; itemPos += new Vector3(0, 0.3f, 0); } } licenseObj.transform.position = itemPos; licenseObj.transform.rotation = new Quaternion(itemData.itemRotationX, itemData.itemRotationY, itemData.itemRotationZ, itemData.itemRotationW); Transform worldTransform = SingletonBehaviour <WorldMover> .Exists ? SingletonBehaviour <WorldMover> .Instance.originShiftParent : null; licenseObj.transform.SetParent(carTransform ?? worldTransform, true); __state = licenseObj; } else { // itemData == null __state = null; } }
public void PurgeData() { PassengerLicenseUtil.RefundLicenses(); PassengerLicenseUtil.DestroySpawnedLicenses(); PassengerJobGenerator.PurgePassengerJobChains(); }