Fougerite Official

Fougerite Official 1.9.8

No permission to download
  • Added helper functions into PlayerCache class for plugins.
  • Added documentation to Lock and other classes
  • Added World.ManuallySpawnSleeper(steamid). It allows you to spawn the exact sleeper of a player, for example after server start, on On_ServerLoaded event or any case.
  • DataStore loads earlier than plugins now. This was a mistake.
  • Script plugins now automatically reload on the main thread
  • Patched newest Jint 2.7.1 dll so plugins using foreach on dictionaries, or lists within a class should work. This was a disaster to make. Even after 10 years lol.
  • Like
Reactions: Pompeyo
  • Like
Reactions: Pompeyo
  • Missing documentation of Logger and BeltUseEvent
  • Documentation of rpctracer config flag
  • Add new EnableScriptPluginsIntensiveEvents setting into Fougerite.cfg make sure to add this value into your config based on the provided Fougerite.cfg! This is for developers that want to enable On_PlayerMove, On_Shoot, On_ShotgunShoot, On_BowShoot, On_AnimalMovement events on script plugins like py, lua, js. By default you can leave it on false
  • Added event On_DayCycleChanged
  • Documented GetInstanceField and SetInstanceField for setting fields that are private
  • Added GetInstanceProperty and SetInstanceProperty for setting properties that are private with reflection
  • Added CallInstanceMethod to call any private function with reflection
  • Added On_AnimalMovement
  • Improved the NPC class's safety
  • Patcher updated, re-patch or use prepatched dlls!
  • Like
Reactions: Pompeyo
  • Like
Reactions: Pompeyo
  • Improve lock in EntityCache
  • Fix small uLink spam issue and check
  • Add On_FireBarrelToggle which triggers on use of campfire and furnace
  • Turn DataStore into json with improvements, customizable parser support, and backwards compatibility
  • Improve jint js experience by being able to properly import types + exception handling
  • Jint recursion max to 1 million
  • Patcher updated
  • Like
Reactions: Pompeyo
  • Like
Reactions: Pompeyo
* Timer system is no longer making a separate thread, it runs as a couroutine by monobehaviour, and upon fire it runs on the main thread. This unfortunatel doesn't include C# plugins as they never had their own timer system, everyone had to do it on their own. This is now also resolved, and you can find create timer functions in the Util class as well. It should stabilize the server as well.
* Loom no longer queues on main thread if you are already running on the main thread.
* Added new properties to TimedEvent
* TimedEvents are now measured and logged
* Updated Rust++ for timer and shutdown fixes
* Some script plugins now store the last error in baseplugin variable
* Added an anti-ddos checker requested by a user. Connections from the same ip within 5 seconds are instantly dropped
* Updated JintEngine from 0.9 to 2.0+. This is a big change, because back then I didn't know how to properly make it backwards compatible with our old plugins due to their trash changes. This is handled now. Jint.dll updated! This unlocks possibilities in javascript that were not possible before and also comes with a performance boost.
* Fixed Airdrop event not being notified always. Patcher updated.
* ChatEvent is improved.

Thanks KickDM for testing
  • Like
Reactions: Pompeyo
  • Like
Reactions: Pompeyo
* Fixed backwards compatibility issues with some plugins
* Fixed JsPlugins directory for javascript plugins
* EntityCache will no longer propagate exceptions if there were even any
* Some sanity checks in caches
* Improvements for permissionsystem class
* Implemented a full C++ WinHttpClient which relies on native winhttp.dll imported from Windows operating system it self. Since we are no longer able to talk to websites from this mono version and unityengine, updating this and maintaining it would be really hard. I wrote a complete wrapper around winhttp.dll and updated all existing Web class functions so you are properly able to communicate with any website you like from now on. This has been an issue since all websites began to enforce TLS 1.2 which we just didn't have the means to talk to anymore and all those past updates became worthless over the years. Hopefully we have something solid now. No plugin update is needed. See
and
I've provided many examples and tested it well.
  • Like
Reactions: Pompeyo
  • Like
Reactions: Pompeyo
  • IniParser is now thread safe by default.
  • Fixed the major issue with Entities not having values properly thus breaking many plugins using Entities
  • All the events are now being called in every plugin regardless whether one caused an error during the fire of the event. The exception of this is the chat/console events.
  • Fixed an issue where console event cancelled the chat event
  • Fixed up the script plugins timer class, they will be more robust, functioning better, less error prone
  • Fixed Command/Console restriction not working properly
  • Only Fougerite.dll updated

PATCHER UPDATED, RE-PATCH, OR USE THE PRE-PATCHED DLLS.

The past 21 days Fougerite went through lots of internal changes, which comes with bug fixes, improvements, and performance / stability increasements.

  • Rust++ updated
  • MoonSharp.Interpreter.dll updated
  • NewtonSoft dlls updated
  • Bunch of internal code fixes, code quality, and performance improvements
  • Lots of refactoring
  • Added Util.SplitInPartsLs
  • All string used in the core was changed from concatenation to interpolation
  • Fixed PlayerCache not saving the DateTimes properly https://github.com/Notulp/Fougerite/commit/e40d08341be0f88165f2ea939fc0da995c75df4c
  • Added UnhandledException event internally which should print unhandledexceptions into the log files, when the exception happens in timers or threads.
  • Introduces 3 new Cache types into Fougerite. EntityCache, NPCCache, SleeperCache. All these caches are being called from the internal netcull instantiation classes, or certain Rust Legacy manager classes. ALL these classes are thread safe, and they store all current Entities, NPCs, and Sleepers on their own. This is a major step in the Fougerite core It self, as the EntityCache It self procudes 10ms delay for copying and iterating 80000 objects, instead of UnityEngine's built in FindObjectsOfType, which causes crashes when used by threads/timers for being non thread safe, and FindObjectsOfType caused 800ms delay (0.8 seconds) causing laggs on 80000 objects. Plugins should no more worry of using World.Entities, as It is now directly using the EntityCache, and all old plugins should be performing way more faster than before. EntityCache makes the server use up to 100-150mb ram on 80000 objects. Your server should atleast have 4 (this is barely enough nowadays lol), but 8 gb RAM by the way. NPCCache, EntityCache, and SleeperCache is directly accessable from script plugins too if needed for some reason.
  • Added Server.ServerLoaded property.
  • Added Entity.ChangeOwner(ulong steamid)
  • Fixed an Entity HurtEvent error, where the decay wasn't properly handled. I wiped out the bullshit decay logic implemented by Riketta, and now It is properly handled. Also removed this useless usage from Rust++
  • Fixed a DestroyEvent error
  • Multiple functionalities were marked as Obsolete in the World class
  • Old World.Entities is now World.RangedEntities, and is marked obsolete
  • Added proper == and != implementations for the Entity, Player, NPC classes for easy comparism.
  • Added Entity bool GetObject<T>(out T type) function
  • Entity class's handlings were cleaned up
  • Added On_NPCSpawn event
  • Added NPC.HostileWildlifeAI property
  • Added NPC.BasicWildLifeAI property
  • Added NPC.InstanceID property
  • Added NPC.Damage() function
  • Added World.Animals
  • Added On_TimedExplosiveSpawned event
  • Added On_SleeperSpawned event
  • Added Sleeper.SleepingAvatar property
  • Server.GetRustPPAPI() is now marked as obsolete
  • Added DoorEvent.BasicDoor property
  • Added DoorEvent.Cancelled property
  • Added DoorEvent.State
  • Added World.Doors
  • Added World.Resources
  • Added HurtEvent.Cancelled (HurtEvent is now cancelled if HurtEvent.DamageAmount was set to 0f by a plugin)
  • PlayerCache.LastLogout and LastLogin is now in UTC time
  • Improved ConsoleEvent by minor code changes
  • Fixed Restriction check issue, case is now ignored when comparing the commands / console commands
  • Fixed internal chatreceived logic, OnChatRaw event should no longer fire if It was a command written in the chat, and It is restricted, meaning that Rust++ commands should no longer be accessible when commands are restricted
  • Almost all internal new Entity() was swapped to Entity.GrabOrAllocate to increase performance and maintain memory usage
  • Player.Structures / Deployables / Shelters / Storage / Fires are now all using EntityCache
  • Added bool GetComponent<T>(this GameObject gameObject, out T component) where T : Component extension method
  • Added some overloads for World.SpawnEntity
  • Added On_CommandRestriction event, reason for this is because we never had command registration over the years, and now that part is fucked, so here is an alternative solution
  • All Console/Command Restriction list is now thread safe
  • Fougerite went through tons of refactoring and code optimizations, I tried to cleanup most of the tragical issues, but I don't think alone I'll have any energy left for the rest
  • Fixed an old issue from 2016 that was quite trivial, but lacked the experience to see back then. https://fougerite.com/threads/fougerite-official.348/page-33#post-10567 You can now reference Assembly-CSharp from your script plugins without an issue
  • Added LastLogin, and LastLogout properties to the CachedPlayer class
  • Fixed a very trash inventory fix logic implemented by Riketta ages ago. https://github.com/Notulp/Fougerite/commit/c0b087fef137f5054d55932f4bbdf0abf4fd15a6#diff-5a31291786c67de060470fb99c016810cf5156585b076bc3658216dbe5c2a3b5L24 This is now handled in the main hook event instead of registering playerkilled event for each player, and leaving those events nowhere in the memory. Jesus...
  • Fixed CreateAsyncHTTPRequest for handling other response codes than 200, and 201. Your code should get called with the response codes, and if there is any message to read. https://github.com/Notulp/Fougerite/commit/c8db79d48d2896f01351e16452b748f62256cbec
  • Utilized the Stopper class during the cleanup of code. Almost every Hook class will now print if they are taking longer than 100ms. If you keep seeing these messages you probably have a plugin that causes lagg during execution.
  • Fixed up the Entity, and DataStore classes. They had very ugly code at some part, and bad error management. I'd say they are now sufficient. Also a bit at Util class.
  • Added On_AirdropCrateDropped event. More on this later when i have time to finish wiki for 1.8.1 and 1.8.2. You may ask on discord for usage or figure using github / source code
  • Added On_SupplyDropPlaneCreated
  • Upgraded patcher's Mono.Cecil to 0.9.6 so we are not so dead-ass outdated. Maybe one day I'll set it up for 0.1.0.0
  • Fixed a pathetic mistake for On_ConsoleWithCancel not being called for script plugins.
  • Fixed a pathetic mistake for On_PlayerSpawning not being called for script plugins due to naming convention mistake back in 2018.
  • Fixed up some weird ass decay logic from Riketta. I made the list ConcurrentList
  • Updated Rust++ just because it was using this weird decay logic, please update it along
  • Patcher updated, use prepatched dlls or patcher. Beware of the new Mono.Cecil dll files!
  • Like
Reactions: P0LENT4 and KankTry
  • Like
Reactions: P0LENT4 and KankTry
  • Fixed ConcurrentDictionary not having Clear() method
  • Fixed Rust++ references to Server.Cache causing errors, all of it is now using the correct functions. Update your RustPP dll.
  • Type of Server.Cache has been changed back to IDictionary to retain compatibility
  • Improved function calling speed for Python scripts
  • Sleeper class now uses PlayerCache to get the name of the player
  • https://github.com/Notulp/Fougerite/commit/3f1484244af71e27c8de307032ca196520695172