Search the Community

Showing results for tags 'devblog'.

More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


  • RAGE Multiplayer
    • Announcements
    • Discussion
    • Suggestions
    • RDR2 Multiplayer
  • Scripting
    • Scripting
    • Resources
  • Community
    • Support
    • Servers
    • Media Gallery
  • Non-English
    • Русский - Russian
    • Français - French
    • Deutsch - German
    • Espanol - Spanish
    • Română - Romanian
    • Portuguesa - Portuguese
    • Polski - Polish


  • Scripts
  • Gamemodes
  • Libraries
  • Plugins
  • Maps
  • Tools

Find results in...

Find results that contain...

Date Created

  • Start


Last Updated

  • Start


Filter by number of...


  • Start



About Me






Found 11 results

  1. RAGE Multiplayer 1.1 is the new version based on 1.0-DP1, with almost 200 bug-fixes from 1.0 just in the last few weeks of pre-public testing and cool new features such as synchronised NPCs and more! So far, a tiny part of 1.0 known as "DP#2" has been delayed in favour of earlier and way more stable 1.1-DP1 release. DP2 requires more time with QA and you will get updated on that accordingly. Today's release means you will get immediate access to a public Windows Client/Server testing build branch aimed for server developers and for testing, you won't be able to join public 0.3.7 servers with this branch. Resources Updated: drastically improved streaming performance of encrypted game resources, also improved ram usage on heavy dlcpacks. Made encryption of game resources independent of individual system information, so you can keep redistributing huge files separately. Added support for overloading whole default dlcpacks (previously this would've caused "undefined" behaviour). Re-implemented the server resource scanner with better parallelisation of compression/encryption and the whole process (e.g. time required to scan and cache in the server memory 6GB of assets (LC-IV and VC to V map conversions bundle) has been decreased from >30s to 8-10s on test machine) Made client launcher and in-game resource verification multi-threaded. Added an ability to register raw game assets (i.e., you could decrease dlcpacks weight using this), example: /client_packages/game_resources/raw/infernus2.ytd. Synchronization Updated: synchronisation extrapolation is now optional, toggle-able through server config: "'enable-synchronisation-extrapolation': true". It's disabled by default (recommended for gamemodes when any desynchronisation caused by that latency is important though) in 1.0, this was always enabled in earlier releases, and the difference is it's just optional now. A few optimisations have been implemented for the new synchronisation. Security Ported 0.3.7’s latest anti-cheat/security mitigations, optimisations and additional useful branch changes that have not been ported yet. Implemented more multiplayer memory protections measures. Improved client-side package management code protection. Implemented additional cheating protecting over C# client-side scripting runtime API. Added "server-side-weapons-only-mode" to synchronise only weapons that have been given to the player by the server and not client-side script (which features it's own protection measurements too, which is why this option is disabled by default). API Added: out of the box (experimental) server-sided static and dynamic (synchronised) peds. Dynamic peds are synchronised/controlled by the player that your gamemode manually assigns and can be reassigned at any moment. let dynamicPed ='mp_m_freemode_01'),, {dynamic:true}); dynamicPed.controller =; let staticPed ='player_zero'),, { dynamic: false, // still server-side but not sync'ed anymore frozen: true, invincible: true }); Basic footage of peds on-foot sync (Franklin NPC shown in static mode): Cops AI/ped driving synchronisation: Added: server-side player.kickSilent, useful for quick reconnects, debugging and such (the client will act as if it's been timed out). Added: client-side cancellable event incomingDamage(sourceEntity, sourcePlayer, targetEntity, weapon, boneIndex, damage). Added: client-side cancellable event outgoingDamage(sourceEntity, targetEntity, targetPlayer, weapon, boneIndex, damage). Added: client-side dummyEntityDestroyed(entity, dummyType). Added: mp.Pool.getClosestInDimension(position, dimension[, numberOfEntities]); only server-side. Added: client-side event entityControllerChange(entity, newController) for peds and vehicles. Added: client-side C# API: renamed server-side "Client" to "Player" to match other APIs. C# API: implement client-side-like entity pool APIs (e.g., RAGE.Entities.Players - yes, it *already* uses RAGE namespace like client-side API instead of "API" or "NAPI"). C# API: add UIMenu.SetMenuData and UIMenuItem.SetItemData which lets you link your own data to items to make menu handling logic simpler. C# API: Fixed incorrect boolean results in a few client-side methods. C# API: Added: AddSubMenu(UIMenu menu, string text, string description, System.Drawing.Point offset) overload. C# API: Added missing client-side 1.0 methods to C#. C# API: Fixed a naming mistake in RAGE.Game.Gxt. C# API: Fixed NAPI.Task-related issue. C# API: Added missing enums hashes. C# API: Updated vehicle seats enum. C# API: Updated vehicleData.json. C# API: Added support for custom vehicleData.json: name your file "vehicleData.custom.json" to use it instead (useful for add-on vehicle servers). C# API: Added missing IncomingConnection event. C# API: Fixed System.EntryPointNotFoundException. C# API: Fixed NAPI.Command not being available. C# API: Changed Entity.GetSharedData return type to object from dynamic. C# API: Added server-side player.Heading (with setter as well), fixed player.SetRotation. C++ API: Server: Increment SDK version (so it gives plugin incompatibility warning when it should). NodeJS API: Updated to NodeJS to v13.1.0. NodeJS API: Fixed NodeJS issues happening since 1.0/v13. NodeJS API: Fixed entity.setVariable and other related issues. NodeJS API: Fixed --inspect option not being handled by NodeJS. JS API: Changed mp.Pool.forEach behavior back to how it worked in 0.3 to prevent potential crashes; added mp.Pool.forEachFast for fast (but not entity.destroy()-safe) lookups (how it used to work in 1.0/1.1 initially). Other 1.50 game patch compatibility (the current public stable branch has already been updated to 1.50 (The Diamond Casino Heist Update) and was done in less than 5 hours after release - that's a new record for game's major patches!). Huge networking library optimisations - live 1800+ players server stress tests on an actual "feature-rich" gamemode with that optimisations ported to an experimental 0.3.7 server showed roughly ~10x networking performance improvements, possibly delivering even more effect on higher-end CPUs. Fixed a server memory leak (which occurred most often when there was a single player on the server, but other cases were possible also). Optimised client-side shared data getters for both scripting runtimes. Fixed nametag rendering jitter when target player is in a vehicle on high speed. Wine Launcher compatibility improvements (still can't get in the game at this stage though). Fixed bug that caused a ped to get duplicated after a model took too long to load. Added long string support for nametags and text labels. Updated Chromium to 79.0.3945.117. Fixed playerCreate/RemoveWaypoint client-side event. Updated server-side .NET Core to 3.1. Fixed client-side C# senseless "error" being logged into 'clientside_cs.txt' once on every initialisation. Update localisations: added Indonesian and Thai languages; updated a few other localisations. Fixed some of game limit adjustments not being applied correctly resulting in undefined behaviour. Fixed a few legacy crashes. Fixed updater image so configs don't get overwritten. Launcher: Fixed launcher storage.json being overwritten. Launcher: Fixed CEF debugger port not being saved when changed through launcher. Known Issues (ones that we didn't consider breaking and decided to not delay public testing because of them - they will be fixed before stable release though) There are a few cases when vehicle synchronisation might get "glitched" (like tyres state desync or unexpected unoccupied synchronisation behaviour). "trailerAttached" server-side event is not currently functioning exactly like it did in 0.3.*. Timeout reconnect might require manual rejoin through F1. Peds API is still at experimental stage and there are a few issues being worked on right now (mostly related to smoothing streaming). You might just crash 😶 And a few more bugs, to be listed once BugTracker goes online Download Branch name is "10_mNwuchuQ4ktWbR8d2N5jUzRt". If you don't know what to do with this, you probably don't need this. We only recommend you download this branch if you are comfortable with testing experimental features and software. 1.1 bugs and issues should only be reported where it's explicitly allowed and nowhere else.
  2. HERE COMES THE F*CKING UPDATE, B*TCHES 1.0. Yep. Developer Preview #1. Yupper. Let's start now! Developer Preview #1? What's going to be featured in #2? Sadly, Developer Preview #1 doesn't feature all the 1.0 stuff, and it's simple why - it's too big to be released at once. With new synchronization, new APIs and tonnes of internal reworks, we need to get better feedback from the community, and this is why Developer Preview #1 includes 90% of what's been awaited the longest, and Developer Preview #2 will deliver the rest, including (and not limited to!): Graphics API: 3D and 2D; the 3D being completely integrated into the game's "depthness" to render stuff in actual world; tldr: custom images, fonts, primitives and such. A few examples: Audio API: client-sided 2D and 3D audio sources based on sound files in the client-side packages. Vehicles API overhaul: reworked custom handling mechanism; wheels API and more; Weapons API: getting and updating weapon params; also supports all weapons, not just those from DLC Water API: updating water grid through API, at runtime Developer Preview #2 is coming later, separately from main 1.0 Developer Preview 1 release, and is the only remaining Developer Preview release we're planing for 1.0. UI New launcher UI New in-game menu UI based on the launcher, with a few updates to provide better fullscreen experience Favourites Tab has been added History Tab has been added Launcher masterlist displays unicode server names correctly now UI supports more than 25 languages now - and more yet to come (feel free to contribute to translations)! Launcher window is now draggable! 👌 New loading screen has been added, it's going to be customisable for every server you're joining to in the future! Server browser now measures only ping to the servers from your history and favourites Microphone access and CEF debugging port options are now configurable through UI Red Dead Redemption 2 compatibility mode also added! SYNCHRONISATION On-foot, combat and shooting synchronisation has been overhauled: there shouldn't be those animation jitters, lack of synchronisation in specific scenarios and most of the issues should be gone. Vehicle synchronisation has been extended with unoccupied vehicle synchronisation, with both now featuring vehicle damage and vehicle door states synchronisation. Here's a quick gun fight game play footage recorded with 1.0: Client console A few of you must've used client console resource by @Kasimir released back in 2018. It's been integrated into the new UI, with some handy file sync/async logging API being added. Added: client-side mp.console.clear() Added: client-side mp.console.reset() Added: client-side mp.console.verbosity Added: client-side mp.console.logInfo/logWarning/logError/logFatal(message[, save = false[, saveAsync = true]]); Added: client-side event "consoleCommand"'consoleCommand', command => { mp.console.verbosity = 'info'; mp.console.logInfo(`Received a command: ${command}`, true, true); }); P2P Partial Peer To Peer connectivity is now present in 1.0. While this feature is great for private lobbies (for example, there's a server hosted in Europe, but you and your American friend are playing from the same city, in these cases latency should drastically decrease), it is disabled by default due to user privacy considerations, at least until we add support for relay server networks. P2P triggers work even if P2P is disabled though, and requests are sent through the server. Added: client-side Added: client-side Player.p2pEnabled Added: client-side Player.p2pConnected // client 2"private_message", (player, msg) => {`${} [${player.remoteId}]: ${msg}`); }); // client 1 let receiver = mp.players.atRemoteId(playerId); if(mp.players.local.p2pEnabled) // check if the player (local player in that case) allows p2p connections { if(receiver.p2pConnected) // check if direct client-to-client connection is established {"private_message", ["hello beast"]); } } Streamer Client-side entity streamer, of which you might've seen before, has been ported into this branch, having had intensive testing sessions resulting in its improvements. It also introduces new client-side API to let you configure streaming per every object. There are also some tweaks to make streaming of huge maps that consist of many different models a bit quicker, or at least provide zero effect on player and vehicle streaming. Resource Subsystem Updates In addition to the in-game resource downloader, we have added yet another downloader right into the launcher. It is actually faster than the in game downloader since it doesn't have to share your PC resources with the game. No worries: in game downloader is still there! Encryption has been added. Note: you should consider that once data is downloaded to a 3rd-party PC, you can never be sure if it's going to be decrypted, therefore you should not share any sensitive data. Resource compression with configurable compression level has been added. It decreases not just data transfer bandwidth, but taken HDD space as well! Client packages CDN mechanism has been reimplemented, it's now cool to use! Outdated resource removal has been added: once in-launcher downloading gets finished, it also checks out the whole resources folder for expired files. Developer Preview #1 API Updates Added: bool OnIncomingConnection(ip, serial, rgscName, rgscId) which is called before the final handshake happens Added: "serverShutdown" event for graceful shutdown, in JS you could use to let all async calls get done (in C#/C++ you don't need it due to obvious reasons):"serverShutdown", async () => { = true; await yourAsyncFunction(); = false; }); Added: unreliable event triggers that _are_ affected by potential packet loss but are way more faster when you need frequent triggers // Server-side player.callUnreliable(eventName[, args]); mp.players.callUnreliable([players,] eventName, ...); mp.players.callUnreliableInRange(eventName, ...); mp.players.callUnreliableInDimension(eventName, ...); // Client-side, args); Added: client-side player to player triggers API Added: dummy entities. Here's an example of dummy entities usage to make simple server-sided peds: // client-side function initializeStaticPeds() { mp.dummies.forEachByType(1337, (entity) => // loop though dummy entities with "dummy" id 1337 { if(!entity.pedInstance) { entity.pedInstance = mp.peds.newLegacy(entity.getVariable("position"), entity.getVariable("heading"), (function(ped) { ped.taskPlayAnim(this.getVariable("animationDict"), this.getVariable("animation"), 8.0, 1.0, -1, this.getVariable("animationFlag"), 1.0, true, true, true); }).bind(entity), entity.dimension); entity.pedInstance.parentEntity = entity; } }); } // server-side function addStaticPed(model, position, heading, animationDict, animationFlag, animation, dimension) { let entity =, // dummy entity type dimension, { // initial shared variables heading: heading, animationDict: animationDict, animationFlag: animationFlag, animation: animation }); entity.playAnimation = function(dict, anim) { this.setVariables({ animationDict: dict, animation: animation }); }; return entity; } Added: mp.objects.newWeak (client-side) Added: bool mp.Object.hidden (client-side) Added: float mp.Object.streamingRange (client-side) Added: bool mp.Object.notifyStreaming (client-side) Added: bool mp.Object.isWeak (client-side) Added: player.rgscId (do not confuse with player.socialClub which is name, not an ID) Added: (client-side) Added: entity.forceStreamingUpdate() (for an entity) Added: (for the whole streaming) Added: player.setOwnVariable(key, value) - an alternative to entity.setVariable, which makes the data to be exclusively known by the player. At the player's client-side it's handled as regular shared data, through regular methods and events. Added: player.setOwnVariables(keyValuesObject) Added: player.getOwnVariable(key) Added: local inter-runtime server-side calls (similar to what client-side got with 0.3.7's C# introduction): // JS"event_name", [0, 5]); // C# NAPI.LocalEvents.Trigger("event_name", 0, 5); Updated: clothes API now supports the whole draw-able models range Added: player.setHeadBlendPaletteColor(rgbColor, type); type value range is 0 to 3 Added: player.getHeadBlendPaletteColor(type) Added: vehicle.customTires Updated: client-side entities are now being processed by the streamer on the frame after creation, to make a few things more predictable for resource developers. Check entity.forceStreamingUpdate() for immediate processing, though. Updated: data change handlers now have old value param added after new value one Added: you can now transfer binary buffers (ArrayBuffer for JS, byte[] for C#) through triggers and shared data Added: you can now transfer 64 bit integers (BigInt for JS, long for C#) through triggers and shared data Added: Client-side:, newLabelValue) Added: Client-side: Added: Client-side: Added: Client-side: Added: mp.Pool.getClosest(position[, num]) let player = mp.players.getClosest([0,0,0]); console.log(; let players = mp.players.getClosest([0,0,0], 2); console.log(players[0].id); let allPlayersSortedByDistanceToPoint = mp.players.getClosest([0,0,0], mp.players.length); Server-side player weapon's API has been reworked to behave properly with the server's custom addon weapons, as well as fix a few related issues. All changes were internal and didn't break resource compatibility. Server-side vehicle occupants handling has been reworked to improve security and reliability, and all related bugs have been fixed; key changes are: improved performance; setOccupant(seat, null) now removes the player in the seat specified, if any; updated vehicle dimension handling; occupant limit has been increased to 16 per vehicle to cover busses; seat ids now start at 0 instead of -1 like it used to be. API: CEF Updates CEF event system, similar to the existing JS API event system, has been added which is a more secure and better performing (not in every single case at the moment though) alternative to Browser.execute. Added: CEF: eventName, function handler) Added: CEF: Added: CEF: eventName) Added: CEF: eventName) (an alias of mp.trigger, for API design consistency purposes) Added: Client-side:, arguments...) There's also now the possibility to cache your evaluated browser code, so as not recompile the same browser JavaScript code again and again: Added: Client-side: Browser.executeCached(string code) API: JS Updates General JavaScript runtime optimisations, especially syntactic sugar in the API, pools and more Fix player.eval when JS runtime is disabled Fix vehicle.dimension setter Updated: entity.setVariable now supports objects to set multiple variables at once Added: clientside read-only property Array mp.vehicles/players/markers/checkpoints/labels/colshapes.streamed ES6 modules are supported now: use mjs file extension to enable it for scripts, e.g. index.mjs. "require()" is still compatible and it works even in an "ES6 module" context. Added: event "packagesLoaded" for a better entry point when all packages are loaded and getting started, use to make sure your async calls are completed before "packagesLoaded" gets triggered: // packages/module/index.js = true; let asyncDone = false; getAsync(() => { // async calls done, now let it invoke "packagesLoaded" = true; asyncDone = true; });'packagesLoaded', () => { console.log(`async done: ${asyncDone}`); }); Updated: has been greatly overhauled and now supports different return values and variable types (we still recommend to use *official* API whenever possible though, for the best stability and performance) // let phoneGestureAnimTime ='0x47619ABE8B268C60', mp.players.local.handle); let stateString ='0x717E4D1F2048376D', mp.players.local.handle); let bonePosVector ='0x44A8FCB8ED227738', mp.players.local.handle, boneId); // You should use arrays with one element of required type to pass variable as a reference let posixTime = { year: [0], month: [0], day: [0], hour: [0], minute: [0], second: [0] };'0xDA488F299A5B164E', posixTime.year, posixTime.month, posixTime.hour, posixHour.minute, posixHour.second);`Year: ${posixTime.year[0]}`); // that works for all types let matrix = { r: [[0, 0, 0]], f: [[0, 0, 0]], u: [[0, 0, 0]], p: [[0, 0, 0]] };'0xECB2FC7235A7D137', handle, matrix.r, matrix.f, matrix.u, matrix.p); // ArrayBuffers could be used too let outDataBuffer = [new ArrayBuffer(256)];'0x79923CD21BECE14E', 0, outDataBuffer); API: C# Updates Server-side .NET Core dependency has been updated to .NET Core 3.0; client-side .NET Core has yet to be updated because of our sand-boxed .NET Core fork "Deprecated" methods have been removed; some of them are coming back though, with new implementation C# API core has been moved into the server codebase to achieve better flexibility and to use better API implementations wherever possible. "Bridge" folder has been renamed into "dotnet", keep this in mind. C# API is still optional though and you have to enable it via server configuration files first. Entity system has been re-implemented and is akin to client-side C# entity system now, which is more performant. User API wasn't affected by this change. Updated: event system performance has been improved Updated: entity.ResetData now returns a boolean according to existence of data with given key Updated: entity != and == operators now compare object reference instead of id Added: entity.IsInstanceAlive (gets set to false when "entity" object gets destroyed) Added: explicit entity.SetVariable non-object overloads for compile time type detection Updated: NAPI entity data API now uses Entity instead of NetHandle. OOP API didn't change Updated: triggers/shared data objects are now serialised through MsgPack, instead of the Json serialiser we used before. Be sure to update all your classes with proper attributes. Bonus feature: you can utilise new byte[] transfer feature to use typed MsgPack serialisation for the best performance Updated: entity data has been updated to utilise the new entity system's features and performs better now Added: per-entity external data (up to 16 objects) for the fastest & cheapest possible data access: // MyGamemodePlayerData obj = new MyGamemodePlayerData(); obj.level = 10; obj.uid = 512; obj.faction = 12; player.SetExternalData(0, obj); // MyGamemodePlayerData obj = player.GetExternalData<MyGamemodePlayerData>(0); Fixed: player.SetClothes (dictionary variant) Added: Methods to register Commands at runtime using NAPI.Command.Register and NAPI.Command.Unregister Added: Ability to register RemoteEvents at runtime using NAPI.ClientEvent.Register and NAPI.ClientEvent.Unregister Updated: all the enums are up to date now Fixed: a few keybind-related crashes Updated: world data, entity data and shared entity data received performance improvements thanks to a bunch of lower level optimisations, especially in the case of Shared Data which means server C++ to C# API transfer. * Note: 1KK stands for 1KK benchmark iterations, it's not related to the amount of data used. Every type of data has its own different benchmark code. Updated: remote events perform faster for both incoming and outgoing triggers Updated: server-side NetHandle pools API that have been marked for deprecation since 0.3.3, has been removed Added: thread-safe remote event triggers implementation has been added for: 1) global broadcast; 2) specific players; 3) specific player. Note that it's not just thread-safe implementation with internal locks but an actual overhead-free implementation. NetHandle netHandle = client.HandleCopy; Task.Run(() => { // .... NAPI.ClientEvents.ThreadSafe.TriggerForAll("test_event", 0); NAPI.ClientEvents.ThreadSafe.TriggerFor(netHandle, "test_event", 1); NAPI.ClientEvents.ThreadSafe.TriggerToPlayers(netHandles, "test_event", 1); }); Updated: C# command processing performance has been improved Added: NAPI.Server.SetLogCommandParamParserExceptions Added: NAPI.Server.SetLogRemoteEventParamParserExceptions Updated: NAPI.Vector3 has been changed from "class" to "struct" Fixed: clothes set via SetCustomization API: Client-side C# Updates Client-side C# is now enabled by default! 🎉 Our internal "sand-boxed" .NET Core fork has been updated to deliver sand-boxing at lower performance penalty Detailed C# troubleshooting tutorial alert has been added popping up in case if client-side .NET Core did not manage to initialise Fixed: RAGE.Game.Invoker.Invoke Added: RAGE.NUI.UIMenuSliderItem Fixed: typo in marker.Visble in C# Fixed: client-side C# entity transfer in remote events Fixed: pool.GetAtHandle Fixed: pool.Streamed Added: entity.ResetData Added: entity.HasData Updated: added more game API functions, check rage-sharp.xml for more information Server-sided Modding OpenIV-ish RPF encryption is now compatible with RAGE Multiplayer, without any additional manual labour of re-encoding it. Server-sided DLC Pack loader has been reimplemented to make the loading faster. It now should load all server-sided mods in a moment All the game-modding related files are moved into /game_resources now. E.g., your DLC pack path should look like: /client_packages/game_resources/dlcpacks/customdlcpack/dlc.rpf Complete Server-Sided Modding™ has been added: you are now able to edit every single game file, and load it just like a regular *modded* game before the game starts. Your players will have to restart the game on every content update if this feature is enabled on your server, though. Example: /server/client_packages/game_resources/common/data/gameconfig.xml Local client-sided game engine limit adjuster feature has been added. Use "" in ragempfolder/clientdata to adjust any game limit you wish, by its name or hash. You can't decrease existing limits. Here's a quick example: <overrides> <pool name="fwLodNode">30000</pool> <pool hash="B81A5FEA">10000</pool> </overrides> DIAGNOSTICS Launcher now has built-in diagnostics tool to automatically detect: Software conflicts Bad installation Bad client-side packages A few more user-related issues In case an issue is detected, you will be offered with steps to fix it. MISC Fixed "undefined" JavaScript errors not related to client-side scripts nor RAGE Multiplayer CEF rendering has been optimised NodeJS dependency has been updated to 13.0.1 Client-side V8 dependency has been updated to v7.8 CEF dependency updated to CEF 78.2.10 (Chromium 78.0.3904.70) Internal entity pool optimisations resulting in performance improvements of our internals, but of some entity-related APIs as well Added "node-commandline-flags" server configuration param, e.g. "node-commandline-flags": "--inspect" Added "resources-compression-level" server configuration param. Default value is 1. Use 0 for local server, or a higher value for bandwidth optimisation. Added "fqdn" server configuration param, e.g. "fqdn": "". Thanks to this option your players won't notice any server IP change, including the re-utilisation of downloaded packages. Added "api-threading-debugging" server configuration param, e.g. "api-threading-debugging": true. If set to true, it'll report every single usage of the API out of proper thread. Use it only for debugging since it adds some CPU overhead. Game native function invoker implementation has been optimised: up to 2x more performant now! Here's a comparison table that we've posted in our Discord a few months ago: Voice chat recorder has been re-implemented to provide better performance and stability Internal refactoring has been done to prepare JS scripting runtime codebase for an updated game API in the next updates (one which is currently used in C#) Client-side part of player and vehicle streaming has been improved to decrease the time interval from "stream in" notification, to an actual physical creation, especially when it comes to handling many entities at once Rockstar Editor crash has been fixed CEF input handling has been improved to fix specific charset issues What to update in my resources to make it compatible with the update? Make sure your resources use correct seat IDs (it starts from 0, not -1 anymore) C# only: Make sure to update GetData syntax Optional: Make sure to use RGSC IDs instead of RGSC Nicknames Make sure to implement new chat API initerface (look for default chat implementation for example) 0.3.7 plugins should be removed from /plugins/ More may follow, be sure to check this again if you find incompatibility issues. Downloads Client (includes Windows Server) Linux Server (not available for testing release) C# Package (Windows) C# Package (Linux) (not available for testing release) Download links will be available starting from 6 Nov, 8pm GMT, as we have determined that this is the best time to provide interactive help and will be able assist people with issues with this release. The public bug tracker will be back online for any issues you wish to report (so it doesn't get lost in the chain of messages on discord). This announcement is being posted in advance to provide the syntax and expected features, especially for those epic wiki contributors. See ya! 🎉
  3. Update: 1.48 support has been pushed into main updater branch. This morning we've announced public beta testing of 1.47 compatibility patch in the Discord, but as far as we realized later a lot of players still didn't join our Discord server (or just got banned for rules violation) so we've decided to inform everyone about the testing here as well. If you wish to participate in the testing, please open config.xml in RAGE Multiplayer root folder and change "prerelease" to "03_undefined". Bugs are possible since it's a testing release but issues are being rapidly resolved to make it stable enough to push it into the default branch. Server update is not required. { reminder to join our Discord here }
  4. Пишу клиентскую часть на c#. В примерах кода на JS используется функция mp.joaat(...) и на сервере и клиенте соответственно. Вот есть ли она на c#? Подскажите как ее найти.
  5. RAGE Multiplayer 0.3.7 introduces client-side C# scripting. Thanks to an incoming game update announcement today it goes into the stable branch with client updates that make it easier (you will have to back up your game files that are going to update still) to stay on the latest supported version until a compatibility update is done (previous time it has been made in a day, we can't give ETA though as the amount of changes is not known yet). STABLE RELEASE CHANGELOG (changes done from 0.3.7 Testing Release) Note: while there are no known security issues in the latest build, for now, it has been decided to not enable client-side C# by default in the Stable Release due to potential security concerns. Enabling it as pretty easy: just create "enable-clientside-cs.txt" file in your RAGE Multiplayer root folder. Added: Events.OnEventTriggeredByKey Added: Events.EnableKeyRemoteEvent Added: Events.OnEntityDataChangeByKey Added: Events.EnableKeyDataChangeEvent Added: Performance improvements thanks to utilizing some .NET Core features Added: Colshape.OnEnter (cancellable via OnPlayerEnterColshape) Added: Colshape.OnExit (cancellable via OnPlayerExitColshape) Added: Checkpoint.OnEnter (cancellable via OnPlayerEnterCheckpoint) Added: Checkpoint.OnExit (cancellable via OnPlayerExitCheckpoint) Added latest C# standard support Enhancements over providing secure .NET Core environment (@server devs: no worries for partial reflection restrictions introduced - that's going to be whitelisted per local contexts in future updates) .NET Core has been updated to our own fork based on .NET Core 2.2.0 Added: vehicle.nosActive Added: vehicle.nosAmount Peds are using entity streaming events now instead of what it used to be Fixed reported client-side JS regressions Fixed reported C# bugs Updating 0.3.6 resources Client-side: Update all the entityDataChange events to proper // old:"entityDataChange", (entity, dataName, value) => { if(dataName === "mydata") { HandleIt(); } }); // new:"mydata", (entity, value) => { HandleIt(); }); Client-side: Update ped stream in eventing (streamIn param got deprecated in favor of regular entity streaming events). Here's a function to reproduce 0.3.6 behavior: mp.peds.newLegacy = (hash, position, heading, streamIn, dimension) => { let ped =, position, heading, dimension); ped.streamInHandler = streamIn; return ped; };"entityStreamIn", (entity) => { if(entity.streamInHandler) { entity.streamInHandler(entity); } }); Downloads Client* (includes Windows server) Linux server Linux C# API *if you already have RAGE Multiplayer installed, it will update itself on the next launch
  6. RAGE Multiplayer 0.3.7 is another iteration of the 0.4 major features testing backport, this update is to assure the smoothest transition to 0.4. 0.3.7 introduces backports of major client-side scripting subsystem improvements, such as C# implementation (.NET Core, just like server-side) bringing new possibilities for C# game mode developers, but enhancements for the JavaScript runtime as well. C# C# scripts are stored in the /client_packages/cs_packages/ folder. Once a player connects, it collects all the scripts, checks its integrity and compiles into an in-memory assembly. Thanks to a number of compilation-time checks, there's no way to allow C# client-side scripts to maliciously hurt users. Despite the community concerns, all events and functions are available in C#! Here's a quick peek of basic C# stuff: EVENTS public class EventsExample : RAGE.Events.Script { public EventsExample() { // this kind of events receives mp.trigger,, but also remote events RAGE.Events.AddEvent("remote_triggerable_event", SomeEvent); RAGE.Events.AddDataHandler("some_data", SomeDataHandler); RAGE.Events.Tick += Tick; RAGE.Events.OnPlayerChat += ChatHandler; // trigger a js event RAGE.Events.CallLocal("eventName", 1, "someString", 1.0f); } public void SomeEvent(object[] args) { } public void SomeDataHandler(RAGE.Elements.Entity entity, object value) { } public void ChatHandler(string text, RAGE.Events.CancelEventArgs cancel) { if(text == "cancelme") { cancel.Cancel = true; } } // known as "render" in JS public void Tick(System.Collections.Generic.List<RAGE.Events.TickNametagData> nametags) { } } GAME INTERACTION // trivial game stuff int interior = RAGE.Game.Interior.GetInteriorFromCollision(0.0f, 0.0f, 0.0f); // player interaction RAGE.Elements.Entities.Players.GetAtRemote(1).ClearDecorations(); // player interaction using a game entity handle RAGE.Game.Ped.ClearPedDecorations(RAGE.Elements.Player.LocalPlayer.Handle); // ped creation uint freeroamHash = RAGE.Game.Misc.GetHashKey("mp_m_freemode_01"); RAGE.Elements.Ped ped = new RAGE.Elements.Ped(freeroamHash, new RAGE.Vector3(0.0f, 0.0f, 0.0f), dimension: 5); CEF ... public void OurEventHandler(object[] args) { RAGE.Chat.Output("Got actually called! {0}", (string)args[0]); } public void TriggerMe() { RAGE.Events.Add("eventExample", OurEventHandler); RAGE.Ui.HtmlWindow wnd = new RAGE.Ui.HtmlWindow("package://index.html"); wnd.ExecuteJs("mp.trigger('eventExample', 'yep')"); // "mp.gui.execute" RAGE.Ui.DefaultWindow.ExecuteJs("test()"); } BUILT-IN NATIVEUI using System; using System.Collections.Generic; using RAGE.NUI; public class MenuExample : RAGE.Events.Script { private bool ketchup = false; private string dish = "Banana"; private MenuPool _menuPool; public void AddMenuKetchup(UIMenu menu) { var newitem = new UIMenuCheckboxItem("Add ketchup?", ketchup, "Do you wish to add ketchup?"); menu.AddItem(newitem); menu.OnCheckboxChange += (sender, item, checked_) => { if (item == newitem) { ketchup = checked_; Notify("~r~Ketchup status: ~b~" + ketchup); } }; } public void AddMenuFoods(UIMenu menu) { var foods = new List<dynamic> { "Banana", "Apple", "Pizza", "Quartilicious", 0xF00D, // Dynamic! }; var newitem = new UIMenuListItem("Food", foods, 0); menu.AddItem(newitem); menu.OnListChange += (sender, item, index) => { if (item == newitem) { dish = item.IndexToItem(index).ToString(); Notify("Preparing ~b~" + dish + "~w~..."); } }; } public void AddMenuCook(UIMenu menu) { var newitem = new UIMenuItem("Cook!", "Cook the dish with the appropiate ingredients and ketchup."); newitem.SetLeftBadge(UIMenuItem.BadgeStyle.Star); newitem.SetRightBadge(UIMenuItem.BadgeStyle.Tick); menu.AddItem(newitem); menu.OnItemSelect += (sender, item, index) => { if (item == newitem) { string output = ketchup ? "You have ordered ~b~{0}~w~ ~r~with~w~ ketchup." : "You have ordered ~b~{0}~w~ ~r~without~w~ ketchup."; Notify(String.Format(output, dish)); } }; menu.OnIndexChange += (sender, index) => { if (sender.MenuItems[index] == newitem) newitem.SetLeftBadge(UIMenuItem.BadgeStyle.None); }; } public void AddMenuAnotherMenu(UIMenu menu) { var submenu = _menuPool.AddSubMenu(menu, "Another Menu"); for (int i = 0; i < 20; i++) submenu.AddItem(new UIMenuItem("PageFiller", "Sample description that takes more than one line. Moreso, it takes way more than two lines since it's so long. Wow, check out this length!")); } public void DrawMenu(System.Collections.Generic.List<RAGE.Events.TickNametagData> nametags) { _menuPool.ProcessMenus(); } public MenuExample() { _menuPool = new MenuPool(); var mainMenu = new UIMenu("Native UI", "~b~NATIVEUI SHOWCASE"); // original NativeUI replicates GTA V "interaction menu", //changing FreezeAllInput to true makes the player completely frozen // while the menu is active mainMenu.FreezeAllInput = true; _menuPool.Add(mainMenu); AddMenuKetchup(mainMenu); AddMenuFoods(mainMenu); AddMenuCook(mainMenu); AddMenuAnotherMenu(mainMenu); _menuPool.RefreshIndex(); RAGE.Events.Tick += DrawMenu; mainMenu.Visible = true; } public static void Notify(string text) { RAGE.Game.Ui.SetNotificationTextEntry("STRING"); RAGE.Game.Ui.AddTextComponentSubstringPlayerName(text); RAGE.Game.Ui.DrawNotification(false, false); } } Here's how that NativeUI example looks in the game: General Changes JS: "entityDataChange" event has been replaced with ", handler)" JS: added Improvements on initial server loading Fix voice chat not getting cleared properly after setting "voice3d" to false Improve voice chat playback thread synchronization mechanism, so it doesn't affect anything else Fix reported voice chat crashes 0.4's game interaction performance improvements backport Fix in-game UI not saving "latest IP connected to" correctly DataStorage UTF-8 support fixes Added a smoother voice chat packet loss handling Fixed reported voice chat stability issues Fixed some specific remote player tasks stuck after finished Added "experimental web platform features" flag to the in-game CEF Fixed key binding issues with isDown param = false Downloads You can download the update using the regular RAGE Multiplayer updater. Open config.xml and set your updater branch to 037_testing. Once you restart the client, it will download the update. We don't recommend to use the testing release build to play on 3rd-party servers. NOTE: In order to enable the client-side C# API IntelliSense fanciness, you should add the "dotnet/rage-sharp.dll" as a reference. additionally, You can reference "dotnet/Newtonsoft.Json.dll" for the Json functionalities.
  7. Even though a major update is under development still, it has been decided to push an update containing new features alongside with 1.45 game patch compatibility update. Today, nearly a week after public beta started, RAGE Multiplayer 0.3.6 goes into the stable branch! General changes Added: server-based voice chat (server config option to enable: `voice-chat`: true) Updated: Scripting stability improvements ("undefined" errors should be fixed now, needs to be confirmed) Updated: V8 (a separate vanilla one is used client-side now, not the one bundled with NodeJS) Updated: Security enhancements Added: Grand Theft Auto V's 1.45 patch support Reimplemented "construction zone crash" fix Vehicle model limit adjustment (it's not an actual 0.4 backport since it uses another method that doesn't rely on 0.4 features) Updated NodeJS Backported native fool proofing Added "allow-voice-chat-input" option (only available via registry at the moment); default value: 1 Updated: CEF (Chromium 70.0.3538.77) Fixed: potential aiming synchronization data corruption Added: more game limits have been adjusted so more global conversion mods are compatible now Fixed: custom dlc packs conflicting with certain game dlc pack Fixed: dlc packs not working correctly with FQDN Miscellaneous fixes Scripting Added: mp.voiceChat.muted (client-side) Added: mp.voiceChat.getPreprocessingParam(param) (client-side) Added: mp.voiceChat.setPreprocessingParam(param, value) (client-side) Added: player.voiceVolume (client-side) Added: player.voice3d (client-side) Added: player.voiceAutoVolume (client-side) Added: player.isVoiceActive (client-side) Added: event: playerStartTalking (client-side) Added: event: playerStopTalking (client-side) Added: player.enableVoiceTo(target) (server-side) Added: player.disableVoiceTo(target) (server-side) Added: player.voiceListeners (server-side) Added: mp.voiceChat.isAllowed (read-only) (client-side) Added: player.clearDecorations() (server-side) Added: player.getVoiceAttribute(attribute) (client-side) Added: player.setVoiceAttribute(attribute, value) (client-side) Fixed: vehicle.getOccupant Updated: C# enums Fixed: C# UTF-8 support improvements Downloads Client* (includes Windows server), complete package mirror #1 (EU), mirror #2 (EU), mirror #3 (NA) Linux server Linux C# API *if you already have RAGE Multiplayer installed, it will update itself on the next launch changelog The "Zero Dot Four" updater is used now Additional voice chat sanity checks Added "voice-chat-sample-rate" server config option (allowed values are 8000, 16000, 24000, 48000) More client fool-proofing
  8. Greetings, we have a project about hardcore RolePlay and we finally find that Rage MP. I want you guys to help us about creating a basic server because we are started from zero. We are welcome to all opinion and suggestions from you guys. thanks
  9. Нид хелп, ставлю Райдж на пиратку 1.0.1180, все инсталиться, качае и т.д, выбираю папку, клиент все чекает и происходит следующее Черный экран и все,никаких больше движений
  10. do a tutorial on your youtube channel on how to make a server of all kinds of servers like racing, freeroam and all that
  11. Кулити детишки! Я новенький в этом деле и попрошу вас когда будут выходить сервера с бонусами то кидать названия и айпи сюда. Прост хочеться поиграть на сервере с бонусами. Спасибо за понимание!