Fougerite Official

Fougerite Official 1.9.7

No permission to download
**Full Changelog**: https://github.com/Notulp/Fougerite/compare/v1.9.6...v1.9.7
* Documented Module.cs and CSPlugin.cs
* Documented PluginWatcher
* Fixed error when doing CTRL+C for shutdown when the server is not initialized yet
* Added sanity checks to Config.cs
* Fixes in Logger.cs
## x64 Upgrade (v1.9.7+)

Starting from version **1.9.7**, Fougerite ships [Fougerite_LibRust_x64] for testing, a full x64 reimplementation of the original x86 `librust.dll`, alongside x64 builds of `rust_server.exe` and `mono.dll`.

**Delete these files from the server root**, they are x86-only Steam redistributables that do not belong in an x64 process:

- `steamclient.dll`
- `steam_api.dll`
- `tier0_s.dll`
- `vstdlib_s.dll`

**Overwrite these files** with the x64 versions from the release:

- `librust.dll`
- `rust_server.exe`
- `mono.dll`

### Why x64 on a 2013 Unity 4.5.5f Engine

- **No 4 GB memory ceiling.** x86 processes are limited to roughly 4 GB of virtual address space. x64 removes that cap entirely, meaning large maps, high player counts, and heavy plugin loads no longer risk out-of-memory crashes that previously required server restarts.
- **More CPU registers.** x64 doubles the number of general-purpose registers over x86. The Mono (Mini) JIT compiler can keep more values in registers rather than spilling to the stack, reducing memory traffic on hot paths like the game loop, plugin execution, and networking.
- **Native on modern operating systems.** Running natively x64 removes the WOW64 compatibility layer that every x86 process runs under on modern Windows, eliminating a layer of overhead on every system call.
- **Better calling convention.** The x64 calling convention passes more arguments in registers rather than on the stack, which is more efficient than the x86 stdcall/cdecl conventions used by the original server.
- **Stability.** Address space exhaustion is one of the leading causes of long-running Rust Legacy server crashes.
- **Future compatibility.** x86 tooling, runtimes, and OS support will continue to erode. The x64 build ensures Fougerite can run on whatever comes next without requiring a compatibility update hopefully for the next 20 years..
**Full Changelog**: https://github.com/Notulp/Fougerite/compare/v1.9.5...v1.9.6

* Added fougerite.load console command
* Added custom mono.dll which allows C# plugins to be properly reloaded for easier testing. Each plugin has its own appdomain.
* Fixed up fougerite.unload and fougerite.reload commands
* Added SilentConsoleCommands to Fougerite.cfg allowing to suppress console messages in F1 console for certain commands
* More Rust and Fougerite config options logged during boot
* Added Data.IsStringNullOrEmpty
* Added Data.IsStringNullOrWhiteSpace
**Full Changelog**: https://github.com/Notulp/Fougerite/compare/v1.9.4...v1.9.5

* Supplied xml files to help plugin development with visible documentation.
* Documented more code
* Code fixes
* Added buffersize to ScriptWebSocket
* Added BasePlugin.WebSockets
* Supplied PDB file
* Fougerite.Module now derives from BasePlugin with backwards compatibility. Should not cause errors but help boost the experience of C# development and now all things should be at the same place.
* ScriptWebSocket has been finalized and implemented properly
* Data class has received lots of helper functions for script plugins and docs
* Lazy type implementations where it was needed
* Rust++ updated and history command was refined
* Added World.GetAllTreeInstances()
* Initialized the never used WoodBlockerTemp class to take the responsibility of proper tree cutting to the server rather than the client. Infinite wood cutting cheats will no longer work on trees. You can also no longer farm trees without being actually close to them using a cheat.
* GatherEvent was refined, AmountLeft and PercentFull will no longer throw errors on use when cutting a Tree
* Added GatherEvent.WoodBlockerTemp
* Added GatherEvent.TreeGameObject
* Added GatherEvent.ResourceTargetType
* Added World.AllTrees which gets filled after Server initialization complete event
* Refined ConcurrentDictionary
* Refined ConcurrentList
* Refined Server.ChatHistoryUsers and Server.ChatHistoryMessages
* Added Util.ChatHistory, only 2000 messages are kept and 1000 is proned after reaching 2000.
* **Patcher updated please re-patch or use prepatched files**
## What's Changed
* Websocket test by @DreTaX in https://github.com/Notulp/Fougerite/pull/160


**Full Changelog**: https://github.com/Notulp/Fougerite/compare/v1.9.3...v1.9.4

* Added IsIntensiveEventAllowed warning
* Refactored plugin loader
* Added Plugin.CreateWebSocket for websockets
* Fixed patcher crash, RE-PATCH OR USE PREPATCHED DLLS!!
* Added On_WebSocketMessage
* Added On_WebSocketClosed
* Added On_WebSocketConnected
* Added On_WebSocketError
**Full Changelog**: https://github.com/Notulp/Fougerite/compare/v1.9.2...v1.9.3

* Documented additional code like Moonsharp, Jint, Server, events and so on
* Added SystemTimerEvent and CreateSystemTimer and other pairs into the Util class to support a timer system that is not tied to the UnityEngine game objects to avoid crashes when you want to use timers on threads
* Added a warning log for all the timers
* Added file download, and upload and their async version to Fougerite/Fougerite/WinHttpClient.cs
* Added Plugin IPC with Plugin.SendMessage, see https://github.com/Notulp/Fougerite/commit/7fedb8f300b0b0e81da58043f2d9590f4ba96672 and https://github.com/Notulp/Fougerite/commit/8aef8d698cd4d551c6cc6967bbd8014190b0832c
* Added On_CraftingCancel
* Added On_CraftingComplete
* Added On_ServerTick
* Added On_MetabolismUpdate
* Removed CTimer
* Updated options of PlayerApprovalEvent see https://github.com/Notulp/Fougerite/commit/0851d997c7a75a17d2f32c35df8d4fda18945159
* Added Lazy class https://github.com/Notulp/Fougerite/commit/41a76f60e0f1838b2a5f59dafee5058f5f5752db
* Fixed some parallel issues within the Plugin class, C# plugins never used it so there should not be a problem https://github.com/Notulp/Fougerite/commit/cb3d8f1fa105b10f163fe8327f8397220ee0d8b5
* Added proper ZoneAPI https://github.com/Notulp/Fougerite/commit/7c2a50e3f3664479fd6594778c51693dfbad58a8
* Refactored Base Hooks https://github.com/Notulp/Fougerite/commit/c25cfe2437773ce69a22451ae5a014f032fcca50
* Fixed ActiveItem throwing exception instead of null when player holds nothing https://github.com/Notulp/Fougerite/commit/d377aef804a272372522679a293679158c6516f2
* Fixed Decay config option, now you can fully disable the rust legacy default decay system https://github.com/Notulp/Fougerite/commit/9b6906d4be251149f6d31cb22557dc174f0f5d04
  • Added some docs
  • Fixed obsolete marker for HurtEvent.Sleeper
  • Added UOwnerID to Sleeper class
  • Re-worked Falldamage event, the event is much more customizable, and the cancel functionality is much better
  • Fixed wrong patching for airdrops, the event should no longer crash the server.
  • Patcher updated re patch or use prepatched dlls
* Added documentations everywhere where I felt it was still needed
* Cleaned up the usings and some code related stuffs
* Fully removed Rust++'s System.Timer dependency.
* PermissionSystem handles exceptions even though it should never occur and also logs them
* Uploaded missing project files
* Fixed Util.GetLastSaveFile
* Added Player.WaterLevel
* Added Player.PoisonLevel
* Added Player.AntiRadLevel
* Rust++ xml files are automatically converted to json for much more clarity.
* Updated PermissionSystem module and GlitchFix
* Updated prepatched files, Fougerite, and Fougerite Patcher

P.S: I tried making one last hook which would trigger on weapon attachment toggle. I didn't find the place apparently where server side would be calling it, all trivial places do not seem to be called at all.
This is my final-final Fougerite update. Unless there is a critical bug, I'll not be making additional updates any time soon.
Want a feature added? Add it yourself, and shoot a pull request to github. Relatively easy to do so.
  • * 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!
  • Like
Reactions: Pompeyo
  • Like
Reactions: Pompeyo
* 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
  • Like
Reactions: Pompeyo
  • Like
Reactions: Pompeyo
  • 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