You are viewing a potentially older version of this package. View all versions.
JacobG5-JLL-1.7.1 icon

JLL

Jacob's Lethal Libraries - For Jacob's Mods

Date uploaded 10 hours ago
Version 1.7.1
Download link JacobG5-JLL-1.7.1.zip
Downloads 7090
Dependency string JacobG5-JLL-1.7.1

This mod requires the following mods to function

BepInEx-BepInExPack-5.4.2100 icon
BepInEx-BepInExPack

BepInEx pack for Mono Unity games. Preconfigured and ready to use.

Preferred version: 5.4.2100
Evaisa-LethalLib-0.16.1 icon
Evaisa-LethalLib

Personal modding tools for Lethal Company

Preferred version: 0.16.1

README

Jacob's Lethal Libraries

My personal Library for my Lethal Company Mods.

I made this to contain some custom scripts I plan to use on my custom moons, and possibly other mods.

Other people can use this as a dependency if you want.

CHANGELOG

1.7.1

  • Fixed missing PlayerEvents on ItemConsumer, JPlayerInsideRegion, and ObjectConverter.

1.7.0

  • Weather Registry compatibility updated for 0.2.0
  • A lot of components have default custom presets for lists that way when creating components for the first time you don't have to check a bunch of default options.

JLL Core Module

  • Fixed issue with random weighted index generation.
  • Fixed bug with item spawners not updating scan nodes to show the value of spawned scrap items.
  • TelePoint now has options for teleporting players to random positions. These can be anywhere in the level or specifically indoor or outdoor positions. There is also an option for a random position within a certain range of the player and one for the position to be around a random player in the lobby.
  • TelePoint now has options to add a teleport sound and play teleport particles on players. NameFilters now have a compareMethod field. The default compare method is Equal, which has the same functionality as before. You can also filter for whether a string contains, starts with, or ends with another string.
  • Added JClientSync script which modders can use to run UnityEvents on the host or for all clients in the lobby.
  • Changed RandomizedEvent's triggerOnEnable to trigger on start. Turns out Unity Netcode does some kinda screwy things I didn't know about with enabling/disabling netcode objects. Changing this to the start method removes the ability for this to get triggered by enabling/disabling the object but fixes some syncing issues. This doesn't affect any already existing moons just some in development ones.
  • JFilters now have an interface for interacting with them on a more abstract level.
  • Added JShipController which allows you to trigger some things to happen with the autopilot ship. You can trigger power surges, toggle monitors or lights, or even tell the ship to leave due to dangerous conditions.
  • Added JTerminalController which allows you to manipulate the terminal. Right now you can award/take away money from the player and trigger the signal transmitter.
  • Added JClientAttatchedObject which lets you target an object that you can set to enable/disable based on whether the player is inside the facility or not. It also has options for teleporting the object onto the local client.
  • RandomizedEvent now has an option to disable sending the client RPC on certain weighted events. For example, if you want one of your events to just be a nothing happens event you shouldn't have to send a message to every client to do nothing. You can mark it to not send an RPC when that event gets rolled.
  • Added JPlayerInsideRegion which can be used for a continuous chance-based event when a player is inside of a trigger collider. There's also an event for when a player enters the collider.

JLL Items Module

  • JThrowableItem:
    • Now has a check to toggle if it is throwable or not.
    • Now has an option for explodeOnTimer. When enabled an attempt to explode the projectile will instead start a timer and will explode on the timer's completion.
    • Now has a function for resetting the explosion timer. You can trigger this with events or custom scripts.
    • Now has support for triggering a custom animation on explode. Remember interactions set the "pullPin" trigger the same as vanilla. Explosions in this script set the "explode" trigger.
    • Publicized ExplodeProjectile function that way you can trigger it with events or other code. The boolean you input is whether to destroy the object or not.
    • wasThrown now gets reset on pickup.
  • JGrabbableObject:
    • Added OnSetInsideShip virtual method for coders and OnSetInShip UnityEvent which both get triggered when the item gets brought inside the autopilot ship. Both the method and event are given a boolean representing if the item is entering or exiting the ship.
  • JEventBoxItem
    • Updated RandomOpenEvent to support unchecking SendClientRPC from RandomizedEvent.

JLL Editor Module

This is a new module that has been added to provide custom inspector windows in the unity editor. Right now I have set up a handful of scripts to hide certain properties based on other properties to hopefully make it easier to understand what is going on in some scripts. In the future, I plan to add some extra help messages for some scripts to make it easier to set up some things.

  • The editor module does not add any new components, in fact, it only will do anything unless placed inside the Unity Editor with the other modules of this mod.
  • Added Help Boxes which can describe how to fix some common issues when they are detected. I'm not going to list all of them in the changelog but one example is having damage triggers set to damage vehicles but having the trigger on a layer that can't interact with the vehicle layer. The hope is that these messages can help people fix some issues before they happen and turn into a false bug report. cough -Wesley- cough

1.6.5

JLL Core Module

  • Added JLLMod scriptable object that allows you to set up mod config properties the same way you could before with JSON. The JSON functionality will remain. You can use either one you'd like.
  • Added JLevelProperties scriptable object that allows you to mess with the level property override system I added several updates ago. This functionality is experimental and hasn't gotten much testing so you may run into issues using it.
  • Moved ObjectConverter to a new namespace for helper components.
  • Added BooleanHelper which can split boolean events into separate events or invert the boolean value.
  • Added TransformHelper which can allow you to Parent / Unparent GameObjects through Unity Events.
  • Added EventLimiter which you can set a maximum number of times it is allowed to trigger an event. A player can optionally be passed too.
  • Added DateFilter which can filter based on your computer's system time.
  • JLevelEventTriggers now has a trigger for the breaker box that passes a boolean of whether it was turned on or off.
  • TerrainObsticle now has events for OnDamaged and onDestroy.
  • Renamed JsonHelper to JFileHelper. It also was relocated outside of the JSON namespace.
  • JLL can now read scriptable objects out of asset bundles. JLL reads asset bundles using the .lethalbundle or .jll extensions.
  • DelayScript now has a method to clear the event queue along with an option to clear the queue when the object is disabled.
  • Renamed JsonConfigGrabber to JModConfigGrabber since json is no longer required. I kept the old version because Unity would be dumb and remove everybody's scripts on this change. JsonConfigGrabber now adds a JModConfigGrabber script to the object and removes the old script on Start().
  • I also renamed a bunch of other scripts related to the JSON stuff added in the last update as it is no longer exclusively registered as JSON.
  • ItemSpawner and EnemySpawner now have options to input position targets to spawn them somewhere other than the object's position similar to ExplosiveEmitter added in the last update.
  • EnemySpawner now has the option to change the spawned enemy's rotation. The default is ObjectRotation which is the same behavior as before. But now you can make it have no rotation or a random rotation.
  • PlayerFilter can now filter for if a player is the local player and filter for username.
  • DamageTrigger's list of colliders inside now gets cleared on the object being disabled.
  • DamageTrigger now does a calculation to change the hit direction based on the rotation of the object it is attached to. You can select a different option for hitRotation to change this behavior.
  • Fixed an issue where DamageTrigger could modify the list of colliders inside during a traversal.
  • EnemySpawner now samples the level's NavMesh to make sure it only spawns an enemy on a NavMesh. If a NavMesh is not found it won't spawn anything. The default search range is 1 but can be set on the component.
  • TelePoint now has an option to rotate objects that now default to true.
  • Did some code optimizations for EnemySpawner. Also added a check to skip empty EnemyTypes put inside the random pool.
  • Added various new console logs to a bunch of scripts for help debugging.
  • Fixed issue with DamageTriggers where MoreCompany would attempt to place cosmetics on the corpse that never spawned. Now I am destroying the corpse after it spawns instead of blocking it from spawning.
  • ItemSpawner now has an option to apply rotations to spawned items.
  • Added RandomClipPlayer which can be used to play a random unsynced audio clip. Handy for adding variation to sounds triggered by events.
  • Made a bunch of weighted arrays on components that have defaults to hopefully make setting them up for the first time easier.
  • DamageTrigger now has a killEvent that gets run when the thing hit by the trigger dies.
  • Added option to disable network syncing on RandomizedEvent.
  • Added NotEqualTo as an option on NumFilters.

v1.6.0

JLL Items Module

  • Added a new Items Module DLL. This is a separate DLL that's part of the same mod. This script will contain custom / modified item scripts.

The rest of the change notes for this section will be the new item scripts.

  • JMeleeWeapon can be used to create shovel and knife variants. Any form of melee weapon can be made with this.
  • JEventBoxItem is similar to gift boxes and has both overridable methods for scripting custom events and a UnityEvent for linking with other JLL scripts. It also has the combined functionality of RandomizedEvent and ItemSpawner which should make them pretty versatile.
  • JNoisemakerProp is similar to vanilla Noisemaker prop but has some extra options like making it able to be toggled off and waiting for a sound to finish before being able to use the prop again. It also inherits from JGrabbableObject so it has extra code inherited from that.
  • JThrowableItem is a more customizable version of a throwable item with configurable events for when dropped, thrown, landed, and other things.
  • JGrabbableObject is the base item that all my other item scripts extend from. It has some extra-base methods for coders and some configurable options for disabling things like lights and particles when pocketed.

JLL Core Module

  • JEventVariables Number Variables now have an event for sending a rounded integer number.
  • EnemySpawner now has an event for when something is spawned that uses the newly spawned enemy.
  • Code optimizations for DamageTrigger.
  • Added tooltips to a LOT of components.
  • Added ExplosiveEmitter. This can be used to generate explosions and screen-shake effects.
  • Added ObjectConverter which is sort of like a filter that allows grabbing GameObjects from mono behaviors along with determining if GameObjects are Players or Enemies.
  • Added InventoryRemover which can be used to remove items from a player's inventory.
  • Added ItemConsumer which checks the player's held item for a match, destroys their item if it matches any of the items in the list, and runs an event on success.
  • Added JsonHelper class for creating and reading JSON files easily with other mods.
  • Added JsonMod which can allow people to create basic config options by placing a file ending with "JLLMod.json" (Example: "PinnacleJLLMod.json") anywhere inside the plugins folder with their moon, interior, or other mod. This implementation isn't super fancy but it is intended to allow basic configs for things like moons without having to create an entire .dll along with some scripts to disable something in a level. Note: Currently LethalConfig isn't able to recognise config files created from JLL. You can edit these config files externally in a mod manager like R2modman, Thunderstore, Gale, or even open the config folder in File Explorer and open the .cfg files and edit them manually. They just won't appear in any in-game GUI's. I want to fix this in the future but don't currently have a way.
  • Added JsonConfigGrabber which is a component you can use to check/get config values from your JsonMod.
  • Fixed issue where DamageTrigger did not include code to prevent damaging already dead Players, Enemies, and Vehicles. DamageZoneTrigger had this functionality and it just got forgotten in the refactor.
  • DamageTrigger now lets you toggle if custom sounds should play for each target individually.
  • Changed how some random weighted events work to reduce duplicate code.
  • Fixed issue with PlayerFilter's held item check always returning false when enabled.
  • Added LethalConfig as a soft dependency.
  • DelayScript has had its code for counting down completely rewritten. This won't affect any existing scripts that make use of this but is hopefully a slightly better implementation.
  • I AM GOING TO KILL WESLEY
  • Added ItemSpawner component which can be used to spawn items from either a custom pool, a random registered item, an item from the current moon's scrap pool, or the list of store items.
  • JEventVariables now has an easy method to check if all Boolean Variables are true and runs an event if so.
  • JEventVariabls Number Variables now has an option for adding a number filter check when running the normal trigger. If the check passes it will run like normal, if it fails it will run the failed event. There is also an option to run an event if all number variables pass their checks.
  • The NumberFilter JFilterProperty now is made from an abstract class called NumFilter.
  • IntFilter has been added as another type of filter that takes inheritance from NumFilter.
  • NumFilter now has filter options for GreaterThanOrEqual, LessThanOrEqual, and ModuloZero. The first two are pretty self-explanatory but the last one can be used to determine if the current value can evenly be divided by the value you're checking. For example, if you want to check if the number is an even number you can make the operand ModuloZero and input the number 2.
  • Added ShipLeaving event to JLevelEventTriggers.
  • Fixed hourly event hour slider being smaller than the number of hours in the game. (The TimeOfDay script sets the value to 7 by default so I figured that was what the cap should be but turns out Zeekers overrides that value in unity to 18)
  • Added LevelFilter that lets you search through some vanilla-level properties along with LethalLevelLoader tags and properties. You can search the current level on awake or manually, or search a given level. One use case for this could be to allow interiors to change things based on the level they are loaded into.
  • NameFilter JFilterProperty now has an option to enable case sensitivity. Before it was always not case sensitive but now you can enable it.
  • PlayerFilter now has an option to filter for the local player client and an option to filter all clients currently in the game.
  • PlayerFitler can now filter for if a player is inside the facility. HeldItemFilter can now check LLL conetent tags.
  • All JFilters have had their performance improved by no longer checking all the filter properties after one that's already failed since the overall result would be a failure regardless.
  • Added JActionEvents component can be used to get Unity Events out of being damaged by a weapon or hazard, being shocked by a stun gun, or listening to sounds similar to how Eyeless Dogs can hear things.
  • Fixed issue with DamageTriggers involving mods that allow a player to respawn after having died inside a continuous damage trigger causing the player to continue to take damage until they either died again or touched the trigger they died in.
  • Rewrote ExtendedLevelLocker to be easier to use. It now only requires the scene name which should allow people to use it easier. If anyone was using this script before it may break in the new version.
  • Fixed issue with EnemySpawner & ItemSpawner, TriggerEnterEvent, DelayScript, & RandomizedEvent's awake toggle not working under certain conditions.
  • Most things that previously used awake have been replaced with OnEnable and have been renamed accordingly.
  • JLevelProperties now uses the scene Name instead of the object name because that was a mistake. It should be usable now.
  • JLevelProperties can now be included inside of a JLLMod.json file.
  • DelayScript now has an option to wait on enable. That way you don't have to have another script with an enabled event to trigger it.
  • DamageTrigger now has a DamageRaycast option. You can attach a transform that it will use to calculate the direction of the ray and specify a length for the Raycast. The Raycast can be triggered either by enabling continuous Raycast damage or manually through UnityEvents. The Raycast will attempt to damage the first thing the ray hits.
  • Added a JLogHelper class along with config options for logging level. You can now adjust how many logs you want to receive in the mod's brand-new config. Config gets registered with LethalConfig as well.
  • JLevelPropertyRegistry now caches the terminal so my mods don't have to do a lengthy FindObjectOfType call anymore.
  • Fixed bug where damage triggers would ignore if a target is alive or not.

v1.5.2

  • Fixed x2

v1.5.0

  • Replaced DamageZoneTrigger with DamageTrigger. The new version has been reoptimized following some suggestions from IAmBatby (thanks!) I haven't removed DamageZoneTrigger just yet that way people have a chance to update without breaking their mods.
  • DamageTrigger's methods for damaging individual types can now be called by UnityEvents again.
  • DamageTrigger now has damage multipliers which can modify the damage applied to things.
  • DamageTrigger's damage for each type can now be set through UnityEvent scripting.
  • You can change the damage amount for each type through UnityEvent scripting.
  • RandomizedEvent now optionally be given to a player to trigger a PlayerEvent. PlayerEvent only gets triggered if a player is given when the script is initially triggered. Regardless if a player is given or not the old event still triggers.
  • Optimized TriggerEnterEvent by reusing some of the new code for DamageTriggers.
  • DelayScript can now also optionally be given a player similar to RandomizedEvent.
  • JLevelEventTriggers now have an option to only trigger ApparatusPulled on the first instance of an apparatus being pulled. (For interiors with multiple apparatus's)
  • Added ClientSeperator which can be used to trigger events only for specific targets. Be careful when using this to avoid client desync. This can allow you to do interesting things in combination with other scripts such as displaying a hud tip when a client enters a room without displaying that tip to every client in the game.
  • RandomizedEvent can now be used to trigger an event on a random player in the lobby. RandomPlayerEvent is the event triggered with a random player in the lobby after StartRandomPlayerEvent() is triggered.
  • JLevelProperties now get properly removed when leaving a game mid-round.
  • Packaged MagicWesley into the .dll. (Don't ask)
  • Added PlayerFilter which can be used to check the properties of a player and if all checks succeed will trigger an event. Currently, PlayerFilter is capable of checking if items are in a player's inventory, some properties of the currently held item, the player's health, the player's stamina, and the player's carry weight. I know this is very similar to Lethal Toolbox but some people wanted it anyway so I added it. I may add more filters in the future if they're requested.
  • Added JEventVariables which can be used to store variables for use in events. Say you want to make a damage trigger do 2 more damage each time it hurts somebody, or you want to save the first player to enter a trigger for use with a different event later. You can do that now! This script supports storing Numbers (floats), Booleans (true/false), GameObjects, Players, and Enemies. To modify the values of these variables you need to first set the target index with an event by calling TargetIndex(index). Some variable types have special operations you can perform such as AddNumber(number). When you want to trigger the Event related to a variable you must first set your target index to the correct index and then call Trigger(varType). The string identifier for varTypes is listed in parenthesis above each variable in the inspector.
  • JLevelEventTriggers now updates on FixedUpdate instead of Update.
  • Added EnemyFilter which can be used to check the properties of an enemy. It can currently check an enemy's type, if the enemy is invincible, and its health.
  • EnemySpawner should no longer throw an error when given an empty copy of a modded enemy when that modded enemy is not present in the game.
  • JWeatherObject now has the option to disable setting the active object to itself when no active object is provided.

v1.4.0

  • Added TelePoint which when triggered by an event can be used to teleport things to that object.
  • Added TriggerEnterEvent which can be used to trigger events when something enters a trigger collider on the same object.
  • Added a timeScale variable to DayCycleAnimator to change the length of time an in-game daylight cycle will animate through the animation.
  • Added custom UnityEvents: EnemyEvent (EnemyAI) VehicleEvent (VehicleController) and DamageableEvent (IHittable) among others.
  • Added RandomizedEvent which can be used to trigger events based on a randomized weight system that gets synced between clients.
  • Publicized the damage methods in DamageZoneTrigger to allow invoking them through Unity Events.
  • Added JMessageLogger which can be triggered by events to send log messages, chat messages, and HUD tips/warnings.
  • JLevelEventTriggers now can run events on hour changes.
  • JLevelPropertyRegistry now caches all entrance teleports for easy access to them.
  • JLevelProperties can now contain LevelPrefabs. When a level gets loaded these prefabs will be spawned at the specified location. This can be used to add new structures of objects to other vanilla or modded levels.
  • Added SeatController which can be used to make functional seats or benches. This acts similar to sitting in the passenger seat of a cruiser. I recommend looking at the cruiser prefab to figure out how to set it up with interact triggers.
  • JLevelPropertyRegistry when registering new level properties if properties already exist for that level will merge the contents of both.

v1.3.0

  • DamageZoneTriggers no longer damage already dead players and creatures.
  • DamageZoneTriggers now have a public method to damage everything inside, which can be used for events.
  • Added EnemySpawner which can be used to spawn enemies without code. You can spawn from a random weighted pool or spawn a specific enemy. When spawning random if you don't include any enemies in your weighted pool then it will have an equal chance of spawning any enemy.
  • Added JWaterFilter which can be used to replace the HDRP Volume. (Basically, Change the color or completely override the water shader when attached to a water trigger)
  • Added JLevelEventTrigger. This object will probably get some updates in the future with more stuff but the idea is you can use it to add events that run scripts based on certain level events occurring. Right now there's: OnLevelLoaded (When the level finishes loading) OnShipLanded (When the ship landing animation finishes) and ApparatusPulled (When the apparatus gets pulled inside the facility.)
  • New additions to JWeatherObject: You can now specify the active object to enable/disable along with an inverse object that will be enabled/disabled the opposite of the normal object. When activeObject is left empty it reverts to the old behavior of enabling/disabling it's self. There are also now onActivate and onDeactivate events that you can use to script code execution.
  • Added JLevelPropertyRegistry which can be used to specify override properties for levels. Unlike a lot of the other bits in this mod, this registry is only usable through code and not an editor script as of now.
  • Added JMaterialReplacer. This was something Nikki originally requested. It can be used to replace the materials on objects. It also has the functionality to search through all of its children automatically. Only use this if you know what you are doing basically. This feature is experimental and may even be removed in the future.
  • JCompatabilityHelper now has a check for SimpleCommands (One of my other mods) and LLL.
  • Added LLL as a soft dependency and added a Helper Class for interacting with LLL.
  • Cleaned up DamageZoneTrigger code a bit.
  • Added damageOnCollision as an option for DamageZoneTriggers.
  • DamageZoneTriggers can now optionally damage Vehicles.
  • Added ExtendedLevelLocker which can either be used with triggers or in combination with UnityEvents to lock/unlock LLL extended levels.
  • Added event for DamageZoneTriggers for OnPlayerDamaged.
  • Replaced JFloodPath entirely with the new DayCycleAnimator. DayCycleAnimator lets you animate things synced with the time of day. To set this up add DayCycleAnimator to the same object that has your Animator script. Go into the animator pane and add a float called "time". Finally, in your animation clip check "parameter" for "Motion Time" and select the "time" variable you just created. After that, it should just work. 0 is the start of the day and 1 is the end of the day.
  • Added DelayScript which can be used as a timer before triggering events. Invoke "StartWaiting()" and after the delay you input it will invoke the events you put in it.

v1.2.0

Note: I talked with Mrov and & decided to delay JWeatherOverride compatibility with WeatherTweaksBeta because I might help implement a similar object override API to WeatherRegistry in the future. For now, I have worked on adding other compatibility features with WeatherRegistry.

  • Added MIT license.
  • Added DamageZoneTrigger which can be used by level creators to make triggers that can do customizable 1 time damage or continuous damage. You can also define if it can damage players, enemies, or objects individually.
  • Added TerrainObstacle which makes an object destructable by the cruiser with custom sounds and particle fx.
  • JWeatherObject now allows you to toggle between a whitelist (the only option before) and blacklist mode.
  • JWeatherObject now has options for dropdown weather selection instead of being forced to use string IDs.
  • JWeatherObject now supports custom weathers registered through WeatherRegistry. Check custom weather mods to see what name they were registered with.
  • JWeatherOverride can now override weathers registered through WeatherRegistry. (I've not tested this very extensively so there may still be issues)
  • Some minor tweaks to other code for performance & memory reduction.
  • Made project Netcode Compatible.
  • Added LethalLib as a dependency to make networking easier for me.
  • Added a small helper class for WeatherRegistry compatibility.
  • Changed how ChargeLimiter works.
  • Removed the Behaviors API for editing weather objects as it is no longer used. I marked it deprecated in the last patch so removing it now just felt right since nothing else uses it.

v1.1.5

  • Fixed issues with JWeatherOverride improperly handling weather-effect objects.
  • Fixed the issue causing JWeatherOverride to not work if the override was missing a permanent object.
  • Added JWeatherObject which can be used to make objects on custom moons only appear under certain weather conditions at the start of the round.
  • Added JFloodPath which can be used to make objects in custom moons lerp between different transform states throughout the day. This can be used to create custom flood planes in flooded weather or for basically whatever you want.
  • Added Support for applying fog weather variables to HDRP Volume Fog.
  • Fixed issue where multiple fog volumes in foggy weather would have different fog thicknesses.
  • Support for other mods hasn't been properly tested as of yet so there may be issues.
  • Deprecated the old weather override system from Pinnacle's release build. I may completely remove it in a later update, but for now, I'm keeping it for legacy reasons.

v1.1.0

  • Added weather override script that when placed on a custom moon allows you to replace weather objects.

v1.0.2

  • Fixed Missing Icon

v1.0.0 Release

  • Limited Use Recharge Stations
  • Level Weather Effect Modifications