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

JLL

Jacob's Lethal Libraries - For Jacob's Mods

Date uploaded 3 days ago
Version 1.6.0
Download link JacobG5-JLL-1.6.0.zip
Downloads 8635
Dependency string JacobG5-JLL-1.6.0

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

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 enabled 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