- * Documented and improved gather event a bit more, ResourceItemDataBlock is now assigned
* Added TimedEvent.MaxElapsedCount and added argument to all createtimer functions
* Added Player.IsAtWorkbench()
* Added Player.IsCrafting()
* Added internal PlayerInventory class to PlayerInv class
* Added On_HeatZoneEnter
* Added On_WorkZoneEnter
* Added Inventory to EntityItem class
* Added IsEmpty checks everywhere in inventory functions. So far it was only safe due to name comparisms
* Documented EntityItem well
* Added EntityItem.IsEntityInv to tell which class of Inventory is held
* Added EntityItem.EntityInv to get inventory
* Fixed EntityItem.UsesLeft setter null check
* Added EntityItem.TotalModSlots getter and setter, works for weapons, returns 0 otherwise
* Added EntityItem.UsedModSlots, works for weapons, returns 0 otherwise
* Added EntityItem.FreeModSlots, works for weapons, returns 0 otherwise
* Added EntityItem.AddMod(modname, removefrominv), works for weapons
* Added EntityItem.RemoveMod(slot, giveback), works for weapons
* Added EntityItem.ClearMods(giveback), works for weapons
* Added EntityItem.GetMods, works for weapons
* InventoryModEvent has slightly changed and documented
* Added InventoryModEvent.IsInternalMove to check if source and target inventory is the same. For remove events this will always be the same. As much as i have tested at least.
* Added InventoryModEvent.FromInventory
* FInventory internal checks and docs
* Added PlayerInv.ClearItems() which goes through items
* PlayerInv checks
* PlayerItem docs
* PlayerItem.UsesLeft setter null check fix
* PlayerItem.TotalModSlots fixes and now setter as well, works for weapons only
* PlayerItem.UsedModSlots fixup
* PlayerItem.FreeModSlots fixup
* Added PlayerItem.AddMod(string modName, bool removeFromInv = true), works for weapons only
* PlayerItem.RemoveMod(int slot, bool giveBack = true) fixup, weapons only
* Farewell update to Fougerite!
* Updated patcher and prepatched dlls
* Added On_ConsumableUse
* Added On_MedikitUse
* Added On_ItemModInstall (yes, nearly after a long time here it is, attachments now have events on guns)
* Added On_BloodDraw
* Added On_ArmorEquip
* Added On_ArmorUnEquip
* Added On_FlareThrow
* Added On_FlareIgnite
* Added On_TorchIgnite
* Improved manual spawn function of sleepers in World class
* Added timer functions into C# Module classes, Util timer functions exist just due to fougerite it self..
* Fixed duplicate patching of GrenadeEvent
* Minor code fixes
* PlayerItem now has a reference to PlayerInv it was needed internally
* Added PlayerItem.TotalModSlots only works on guns
* Added PlayerItem.FreeModSlots only works on guns
* Added PlayerItem.UsedModSlots only works on guns
* Added PlayerItem.RemoveMod(slot, giveback) which you can remove attachments from weapons with
* Added PlayerItem.ClearMods(giveback) which you can remove all attachments from weapons with
* Added PlayerItem.GetMods() which will return the names of attachments on weapons
- 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.
- 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!
- 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
* 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
* 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.![]()
Fougerite/Fougerite/Fougerite/Web.cs at master · Notulp/Fougerite
Fougerite Project is an Official project based off of Magma. Built to stabilize Rust Legacy, and provide large API in many languages. - Notulp/Fougeritegithub.com
- 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
![]()
Fix ConsolEvent cancelling chat · Notulp/Fougerite@8d12e96
Fougerite Project is an Official project based off of Magma. Built to stabilize Rust Legacy, and provide large API in many languages. - Fix ConsolEvent cancelling chat · Notulp/Fougerite@8d12e96github.com
![]()
Fix up the TimedEvent logic · Notulp/Fougerite@b7d59e9
Fougerite Project is an Official project based off of Magma. Built to stabilize Rust Legacy, and provide large API in many languages. - Fix up the TimedEvent logic · Notulp/Fougerite@b7d59e9github.com
![]()
Cleanup the timers · Notulp/Fougerite@10c8b89
Fougerite Project is an Official project based off of Magma. Built to stabilize Rust Legacy, and provide large API in many languages. - Cleanup the timers · Notulp/Fougerite@10c8b89github.com
![]()
Finalize TimedEvent · Notulp/Fougerite@71d86c0
Fougerite Project is an Official project based off of Magma. Built to stabilize Rust Legacy, and provide large API in many languages. - Finalize TimedEvent · Notulp/Fougerite@71d86c0github.com
![]()
Directly access restriction fields · Notulp/Fougerite@2e8e203
Fougerite Project is an Official project based off of Magma. Built to stabilize Rust Legacy, and provide large API in many languages. - Directly access restriction fields · Notulp/Fougerite@2e8e203github.com
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