Scripts
207 files
-
Inventory System
By shrox
RAGE Multiplayer Inventory System
A simple inventory system with plenty of features and a neat UI!
*This script does not provide a saving or loading system, that's your doing, there's a 'save' method in the inventory class where you can implement your own saving system depending on what database you're using.
*Comes in typescript & javascript version.
*The keys binded in the clientside script are temporary, you should change them based on your preference.
*Easy to use & implement.
> Will be generally maintained and updated.
Items
Down below is a list of item properties, each property has its own unique use so read it please.
type: ITEM_TYPES; //item type typeCategory: ITEM_TYPE_CATEGORY; //item category see ITEM_TYPE_CATEGORY enum in index.d.ts isPlaced: boolean; //whether item is 'placed' in clothes quality: number; //item quality level image: string; //item image hash: string; //unique item hash, also used as linked to a child item key: string; //item key which contains clothes data only (such as component id, drawable and texture) render: string; //item render image which later on can be used in CDN if you have plenty items. name: string; //item name description: string; //item description count: number; //item count, also determines whether you can split an item up weight: number; //item weight maxStack: number; //max stack determines how many items can be stacked in one slot options: string[]; //item options (to be used when you right click an item) such gender: number | null; //item gender, used on clothes whether the clothe is for female or male modelHash?: string; //prop model name or hash that will be used to create object when dropping item ammoType?: string; //ammo type that a weapon will contain ammoInClip?: number; //ammo in weapon clip amount?: number; //used for armor to contain its amount effect?: { //a feature to be developed whether the item will have an effect or not [key: string]: number; }; components?: Array<number>; //will be used for weapon attachments in future
Class Structure
The Inventory class is the main class for managing player inventories in a game. It extends from other classes such as InventoryClothes, QuickUse, and InventoryItem.
InventoryBase: Base class for inventory management. It initializes the inventory structure and handles basic operations. InventoryItem: Extends InventoryBase and adds methods for managing individual items in the inventory. QuickUse: Extends InventoryItem and adds methods for managing quick-use slots. InventoryClothes: Extends QuickUse and adds methods for managing clothing items in the inventory. This class provides comprehensive functionality for managing player inventories, including adding, removing, equipping, and using items.
Properties
items: Contains the player's inventory items, divided into pockets and clothes. quickUse: Contains items assigned to quick-use slots. weight: Represents the total weight capacity of the inventory. equippedWeapons: Keeps track of equipped weapons. Constructor
Initializes the inventory with player-specific data such as clothes, pockets, and quick-use items. Methods
addItem: Adds an item to the inventory's pockets. addClothingItem: Adds a clothing item to the inventory. removeClothes: Removes a clothing item from the player's character. loadClothes: Loads clothing items onto the player's character. setClothes: Sets clothing items on the player's character. reloadClothes: Reloads clothing items onto the player's character. getFreeSlot: Retrieves a free slot in the inventory pockets. getTotalFreeSlots: Counts the total number of free slots in the inventory. getClothingIndex: Retrieves the index of a specific clothing item type. resetItemData, resetClothingItemData, resetBackpackItemData: Resets item data in the inventory. updateOnScreenPed: Updates the player's character appearance on-screen. getItemModel: Retrieves the model hash of an item type. getItemAndStack, getItemsByHashName, getItemsInCategoryByHashName, getItemsByHashNameEx: Methods for retrieving items by their type or category. getItemByUUID: Retrieves an item by its UUID. hasPistolItem, hasShotgun, hasAssault, hasSMG, hasWeaponInFastSlot: Methods for checking if the inventory contains specific weapon types. getActualWeight, getWeight, getItemsWeight: Methods for calculating the weight of the inventory and its items. checkWeight: Checks if adding a new item will exceed the weight limit. getFreeSlotCount: Retrieves the count of free slots in the inventory. dropItem, splitStack, addPlayerItem, addPlayerItemEx, addMultipleItems, addCountToPlayerItem, manageFastSlots, pickupItem, moveItem, openItem, useItem: Methods for managing inventory actions such as dropping, splitting, adding, and using items. deleteItemStack, deleteItem: Methods for deleting items from the inventory. checkQuickUse: Checks if an item is in a quick-use slot.
Adding new items:
Javscript
-> Navigate to Items.module.js located inside inventory folder, there you can see a list of already added items, and you can follow the path, after adding an item there make sure the item image exists in the frontend, if it doesn't then add it and rebuild the frontend.
Typescript
-> Navigate to Items.module.ts located inside inventory folder, there you can see a list of already added items, and you can follow the path, after adding an item there make sure the item image exists in the frontend, if it doesn't then add it and rebuild the frontend.
Getting Started with Development
Install the required packages by executing `npm install`
If you're on typescript version after installing packages you can execute `npm run watch:server` to watch/build server side and `npm run watch:client` to watch/build client side, if you're on the javascript version, you don't have to do anything.
Getting started with frontend.
In your terminal navigate to the frontend folder (cd frontend)
Run frontend in development mode by executing: `npm run start`
Build the frontend (inventory ui) by executing `npm run build`
After you're done see the gifs below what to do next:
Creating package2 folder:
https://github.com/shr0x/ragemp-inventory-system/raw/main/gifs/create_package2.gif
Building Inventory UI:
https://github.com/shr0x/ragemp-inventory-system/raw/main/gifs/build_frontend.gif
Moving built files to package2:
https://github.com/shr0x/ragemp-inventory-system/raw/main/gifs/move_to_package2.gif
352 downloads
0 comments
Updated
-
Windows style cursor pack
By hartority
An example of a cursor pack that replaces the default cursor.
Replaced cursors:
default (CT_POINTER) help (CT_HELP) none (CT_NONE) pointer (CT_HAND) text (CT_IBEAM) move (CT_MOVE) ew-resize (CT_EASTWESTRESIZE) ns-resize (CT_NORTHSOUTHRESIZE) not-allowed (CT_NOTALLOWED) This resource also has a browser page with a list of all possible cursors for the test.
Have fun customizing your cursors!
104 downloads
0 comments
Updated
-
Winter Event Gift Collector - WIP - but working
By krane
Hello, this is the winter event script I was planning to release this winter.
As it currently stands i'll be a bit bussy this winter, won't have time for free open source projects like this one.
I've wanted to create a more complex one, with lots of micro-events inside but time won't allow it so this is useable, you just need to get 10 coordinates of your choice for this fully work for your server.
GET A DEVELOPER !
This script is !NOT! plug-and-play since it requires AT LEAST adding 7 more coordinates.
I promise next winter for a better event, but for now, i'm struggling with my GF birthday also LOL
🥰🤪
Get in contact with me:
Discord: kraneq
I'll respond to question
72 downloads
0 comments
Submitted
-
Attachments editor
By PepeCortez
V2
Menu to show and select between all bones avaliable (https://wiki.rage.mp/index.php?title=Bones) Camera focus on the bone you select. Added more keys to edit the object. Menu to edit or remove objects that were already placed. Object information save on *attachments.txt* on serverside. Keys
/attach [object_name] · Command to start editing the object. TAB · Key to open the menu to edit objects placed. Enter · Key to finish the editing the current object. Cancel · Key to cancel the editing the current object. Space · Key to reset the pos and rot the current object. R · Key to change mode between pos and rot. L · Key to change the camera's fov. UP | DOWN · Edit pos/rot X the current object. LEFT | RIGHT · Edit pos/rot Y the current object PageUp | PageDown · Edit pos/rot Z the current object. Shift · Increase speed the editing. AltLeft + X · Reset pos/rot X the current object. AltLeft + Y · Reset pos/rot Y the current object. AltLeft + Z · Reset pos/rot Z the current object. Notes
Also on GitHub: https://github.com/1PepeCortez/Attachments-editor
227 downloads
0 comments
Updated
-
[TS] Animation Viewer
By ncls.
Hello,
I needed a script which lets me view animations. I found Hazes' resource (linked below) which is written in C# so I decided to transform it to TypeScript so that I can use it in TypeScript servers as well.
Installation:
Download and extract the script Put the files inside the "server" folder into your server packages Put the files in the "client" folder into your client packages Import the "animator" files on server and client side.
Instructions on how to use the script can be found in the original resources's description.
This script is based on:
105 downloads
- animation
- animations
- (and 5 more)
0 comments
Updated
-
draw-zone
By cacao
Draw-zone script
Description: Drawing zones on map by using (tab, space, del) buttons and save it as polygon (call remote event drawZone.save)
Controls:
Tab - Place user mark on map (can be moved to draw lines)
Space - Save dot on mark place
Del - delete previous dot
Commands:
/zstart - Start drawing zones on map
/zstop - Stop drawing zones
/zreset - Reset drawing
/zsave - Saving coords (Calling remote event drawZone.save)
/zlist - list of commands
Video snippet: https://imgur.com/a/liLwZo5
Repository: https://github.com/READYTOMASSACRE/ragemp-draw-zone
134 downloads
- clientside
- 1.1
- (and 1 more)
0 comments
Updated
-
Electrician Job - Modern, fast, lightweight - JS only
By krane
Hello, this Electrician job was made last night, in an effort to get to understand the more complex and the workflow for RageMP, i find it really interesting and i'm looking for your feedback.
How does it work:
You will get a blip on the map
If you get there, you need to talk to the Electrician guy to hire yourself and get the garage access to spawn vehicles
Once you get in range for the Garage blip, you need to press `E` to spawn the job vehicle and to get missions to go to:
There is implemented an "inaccesible" script, that you can just be around the general entrance area, and you get teleported to the exit and the same for exit:
Once you get inside, you can go to the mission to repair the electric panel:
I do custom work and take script requests, feel free to message me: krane#2890 on discord
948 downloads
- job
- electrician
- (and 2 more)
0 comments
Submitted
-
[JS] Player Location Display ported over to javascript
A Javascript remake of https://rage.mp/files/file/461-c-player-location-display/ (all credits go to him)
Hey!
This is my first resource that I am publicly releasing.
For you all, I have ported the C# Player Location Display (https://rage.mp/files/file/461-c-player-location-display/) into JS.
Install
Place `/street` into your server's client_packages directory, then add `require("./street/index.js");` to client_packages/index.js
I know the code isn't the best optimized, please feel free to open a pull request on GitHub.
GITHUB: https://github.com/realdiegopoptart/ragemp-pld
603 downloads
-
Bounding Box
By Zekiloni
Simple script to get dimensions of any entity (object, vehicle, ped), center of entity and corners.
Also you can draw bounding box.
318 downloads
- Clientside
- Entity
- (and 2 more)
-
Generic Native Keypad
By -Andreas
Originally created around 2019, so it might be broken with newer versions of RageMP, though I believe I fixed this at some point.
The system allows you to set up a keypad server-side and hook an action to the Confirm button in the keypad. The action is invoked server-side and as argument you get the value which the user put in the keypad client-side. You can set the title, subtitle and even control if the input in the field will be asterisks for cases where the player would be typing a pin etc.
The entire keypad requires no CEF at all, and no web related dependencies. Instead the whole thing is defined and rendered using native GTA:V UI elements.
Getting started
To get started put the keypad.js in your client folder and remember to include it in the index.js. Then grab the KeypadLibrary.cs and put it in your server project. With this you are ready to create keypads wherever you need them. Invoke the following function:
StartKeypadForPlayer(Player player, string title, string subTitle, bool useAsterisk, Action<Player,int> callback) as such:
KeypadLibrary.StartKeypadForPlayer( ply, "Withdraw", $"Current bank balance: ~g~${ply.cash}", false, (ply, x) => { ply.SendChatMessage("You are withdrawing: " + x); }); The system supports all native colors from GTA:V so you can color the title and subtitle if needed.
Here's the GitHub link for those interested https://github.com/Andreas1331/ragemp-keypad
72 downloads
0 comments
Submitted
-
EasyCEF
By DevMarvin
This resource adds a simplified system for creating HTML browsers, as well as other features such as forcing the cursor to display.
Requirements
RAGE Multiplayer 1.1 and above. Installing
Put the folder into 'client_packages' (client_packages/easycef). Add require('easycef') to 'client_packages/index.js'. Clientside API
/** * Creates Browser and pushes it into instances array with given parameters. * @param {string} browserName Browser identifier (example: "TestBrowser1"). * @param {string} browserPath Browser Path / starts from client_packages (example: "testcef/index.html"). * @param {bool} forceToCursor Forces the game to display the cursor, even if the player can disable it until the browser is destroyed again. */ mp.game.app.createBrowser(browserName, browserPath, forceToCursor); /** * Destroys Browser and removes it from instances array. * @param {string} browserName Browser identifier (example: "TestBrowser1"). */ mp.game.app.destroyBrowser(browserName); /** * Returns searched browser exists or not. (Available as of version 1.1.0) * @param {string} browserName Browser identifier (example: "TestBrowser1"). * @return {bool} True if exists, otherwise false. */ mp.game.app.browserExists(browserName); /** * Switches browser (destroys old browser and creates new one with same name). * @param {string} browserName Browser identifier (example: "TestBrowser1"). * @param {string} newPath Browser Path / starts from client_packages (example: "testcef/index.html"). * @param {bool} forceToCursor Forces the game to display the cursor, even if the player can disable it until the browser is destroyed again. */ mp.game.app.switchBrowser(browserName, newPath, forceToCursor); /** * Reloads the browser. * @param {string} browserName Browser identifier (example: "TestBrowser1"). * @param {bool} ignoreCache True to ignore cache. */ mp.game.app.reloadBrowser(browserName, ignoreCache); /** * Calls JavaScript code inside the browser. * @param {string} browserName Browser identifier (example: "TestBrowser1"). * @param {string} codeToExecute JavaScript code to be executed in browser. */ mp.game.app.executeClientFunction(browserName, codeToExecute); /** * Set cursor in a specific browser forced or unforced. * @param {string} browserName Browser identifier (example: "TestBrowser1"). * @param {bool} force True to force the cursor to be there. */ mp.game.app.setCursorForced(browserName, force); /** * Returns is the cursor forced in browser * @param {string} browserName Browser identifier (example: "TestBrowser1"). * @return {bool} True if forced, otherwise false. */ mp.game.app.isCursorForcedInBrowser(browserName); /** * Returns is a cursor forced in any browser. * @return {bool} True if any cursor is forced, otherwise false. */ mp.game.app.isAnyCursorForced(); /** * Returns the specified item. * @param {string} browserName Browser identifier (example: "TestBrowser1"). * @return {object} The function will return nothing if browser does not exist. */ mp.game.app.getBrowserObject(browserName);
Notes
With 'isAnyCursorForced' you can work for example by checking in your cursor keybind function if a cursor is forced in any CEF. For any error messages or questions: Feel free to write me on Discord: мαяνιη.#9554 Not all RAGE browser functions are implemented yet, should be relatively easy to add, maybe an update will come soon There is a 'better cursor' system implemented that automatically shows the cursor if there is a browser that forces it. If you want to disable it and build your own, just set 'isBetterCursorEnabled' in the file to false. If you want you can check my GitHub Repository: https://github.com/sckindvl/easycef126 downloads
0 comments
Updated
-
[C#] Player Location Display
By kymboy
Hello!
This is my first ever resource, hopefully I've done everything right.
For you all, I have recreated the popular Player Location Display by Lt.Caine for RageMP with the help of codibez's streetLabel repo on GitHub.
The code is in C# so you will have to activate C# in your server's conf.json if you haven't yet.
Place both folders in your client_packages and you're good to go.
Enjoy!
581 downloads
0 comments
Updated
-
Dronesytem
By Ju88
Installing
Put drone into your server's client_packages directory, then add require('drone'); to client_packages/index.js.
Controls
F2 = Toggle Drone
ARROW UP = Forward
ARROW DOWN = Backward
ARROW LEFT = Left
ARROW RIGHT = Right
Q = Rotate Left
E = Rotate Right
SPACE = Go Up
CTRL = Go Down
N = Toggle Camera
T = Taze
F6 = Toggle Nightvision
F7 = Toggle Thermalvision
Information
Hello friends, this is my first public script I hope you like it. I would be happy about constructive comments and suggestions for improvement
💖
580 downloads
0 comments
Submitted
-
Speedometer
By Katu__
Installation
Copy "Speedometer" folder to client_packages.
Add "require('./Speedometer/index.js');" to your index.js in client_packages, and you should be good to go!
1132 downloads
0 comments
Submitted
-
Native storage
By hartority
Installing
Put the files you downloaded in client_packages Add require('gameStorage') to client_packages/index.js All done Notes
This storage is cleared only after a complete re-entry into the game
Client API
mp.gameStorage.setFloat(property, value); mp.gameStorage.setInt(property, value); mp.gameStorage.setString(property, value); mp.gameStorage.getFloat(property); mp.gameStorage.getInt(property); mp.gameStorage.getString(property);
Examples
Setting and getting value:
mp.gameStorage.setFloat('floatKey', 0.51243); mp.gameStorage.setInt('intKey', 15621); mp.gameStorage.setString('stringKey', 'ragemp'); mp.gui.chat.push(`${mp.gameStorage.getFloat('floatKey')}`); mp.gui.chat.push(`${mp.gameStorage.getInt('intKey')}`); mp.gui.chat.push(`${mp.gameStorage.getString('stringKey')}`); Deleting blips created with mp.game.ui.addBlipForCoord after reconnecting:
const PLAYER_READY_EVENT = 'playerReady'; const CREATED_BLIPS_KEY = 'createdBlips'; const F2_KEYCODE = 0x71; const createdBlips = []; const addHandle = (handle) => { createdBlips.push(handle); mp.gameStorage.setString( CREATED_BLIPS_KEY, JSON.stringify(createdBlips) ); }; const getDepricatedBlips = () => { try { return JSON.parse(mp.gameStorage.getString(CREATED_BLIPS_KEY)); } catch { return []; } }; const handlePlayerReady = () => { const blips = getDepricatedBlips(); for (let handle of blips) { if (mp.game.ui.doesBlipExist(handle)) { mp.game.ui.removeBlip(handle); } } mp.gameStorage.setString(CREATED_BLIPS_KEY, ''); }; const handleCreateBlip = () => { const handle = mp.game.ui.addBlipForCoord(0, 0, 0); addHandle(handle); }; mp.events.add(PLAYER_READY_EVENT, handlePlayerReady); mp.keys.bind(F2_KEYCODE, true, handleCreateBlip);
137 downloads
0 comments
Updated
-
Disabling props(hats/glasses) knock off
By H5tred
Basically this file disables props being knocked off the player by any possible damage. I remember that when i tried by script it didn't work, i haven't checked the one by script in a while, but I m assuming it still doesn't work.
If the one by script works just delete this resource.
How to use , just paste the content of the zip in your server files in client_packages\game_resources !
If you have other questions/suggestion regarding what can be edited from the files from the games, feel free to contact me on discord Cricket#1276 !
272 downloads
0 comments
Submitted
-
Disabling stealth kills through GTA files
By H5tred
So i have been getting a lot of DMs on discord regarding how to disable the stealth kills.
Basically this file contains the edited conditions that are checked by GTA in order for the player to perform a stealth kill and are changed so they are never met, making it impossible for any player to perform them.
How to use , just paste the content of the zip in your server files in client_packages\game_resources !
If you have other questions/suggestion regarding what can be edited from the files from the games, feel free to contact me on discord Cricket#1276 !
350 downloads
0 comments
Submitted
-
Circuit Breaker - C# Minigame
By Develuxe
Minigame from the original heist update, done with scaleform without CEF.
Installing:
Put all files in client_packages\cs_packages\
To call that script:
Event name:
CircuitBreakerStart
Event args:
Count of Lives (1 - 10)
Difficulty Level (0 - 4) (0 is beginner, 4 is expert)
Levels to complete (1 - 6)
C# Server Example:
player.TriggerEvent("CircuitBreakerStart", 5, 1, 6);
Game results events:
CircuitBreakerWIN - is called at client side, when player succeed at all levels, no args.
CircuitBreakerLOSE - is called at client side, when player quits (Q button) OR lost all his lives, no args.
If you are using JS client side:
You need to create 2 events (described above) at your client side to catch game results.
If you are using C# client side:
You can just modify 2 methods inside Main.cs, which already contains both methods to catch game results.
Minigame Preview, done on this system:
209 downloads
0 comments
Updated
-
CircuitBreaker - JS Minigame
By xNameless69
Hello again, Ragers.
This minigame is the same as the one in the base game heists. It's purely scaleform, and no CEF.
(Thanks to Develuxe for C# version)
Simply put this into client_packages, and add this to your index.js:
require('./CircuitBreaker'); It has three events:
CircuitBreakerWIN - This event is called on the client when the client player has successfully won the minigame
CircuitBreakerLOSE - This event is called on the client when the client player quits, or fails to complete the minigame
CircuitBreakerStart - This event is callable on the client (from server with player.call), and is used as follows:
// Lives (any number), this number is the total amount of lives for all levels // Difficulty (0-4), where 0 is easiest and 4 is hardest // Level Count (1-6), how many levels have to be completed player.call('CircuitBreakerStart', /* lives */ 3, /* difficulty */ 1, /* level count */ 2);382 downloads
0 comments
Updated
-
Advanced Chat - Upgraded
By fl1k
About
This is a fork of Advanced Chat - Dependency free with a few new features implemented that were present in SA:MP
Features Added
/chathelp - view all commands /fontsize [size(0.5 - 1.5)] - sets the size of the font /pagesize [size(4-24)] - sets the size of the page /timestamp - toggles between timestamp /togglechat - toggles chat hidden/visible - The features added were present in SA:MP,
DEPENDENCIES
INSTALLATION
Download files Include advanced-chat in your index.js REPO
If you want to contribute, the link to the repository is - https://github.com/fl1k/advanced-chat
SCREENSHOTS
VIDEO
1612 downloads
-
Custom pause menu header
By hartority
This resource allows you to customize the header of the pause menu.
423 downloads
-
[dl] Debug Labels / Vehicle Info
By fl1k
Information:
A small script implementing the /dl feature from SAMP (vehicle info - vehicle id, position, rotation, model, health)
Usage:
Use the command /dl to enable/disable.
Installation:
1) Install Better Clientside Commands by rootcause
2) Put it somewhere and include it in your index.js
Requirements:
484 downloads
0 comments
Submitted
-
Pause Menu Player Scaleform (NO BACKGROUND!)
By xNameless69
RAW RESOURCES ONLY - NO SCRIPT HERE.
Today I have for you a beast resource that will fix your problems with Ped Displaying using Native Menu Ped. This resource contains Custom Scaleform changes to some menu components, and pause menu definition, that allows the Ped to be rendered WITHOUT a background box around it, or even on screen (fuck you Rockstar for making this Scaleform so shit).
You use this in the same way you use any other raw resource by placing the contents into client_packages/game_resources
If you already modify the Pause Menu xml file in some way, please see the changes in my own pausemenu.xml files and attempt to add them to your own, it shouldn't cause any problems!
The script can be found in many different places already, so no need to show it here - this is not possible to render on top of CEF, so just use CSS to make some hole in your UI that this can show through.
The menu version is custom here so that if Rockstar adds anything else or messes with dependencies, it doesn't immediately break. This means it's not really "documented" in natives (duh)
The version used should be as follows:
mp.game.ui.activateFrontendMenu(mp.game.joaat('FE_MENU_VERSION_RAGEBEAST'), false, -1);440 downloads
-
Client-Side Packet encryption
By kemperrr
About This File
This package contains a full implementation of client-side packet encryption for RAGE 0.3.7 which obviously doesn't have build-in encryption for packages.
Includes packer like webpack (with watch mode), import/export from ES6 (thanks https://github.com/alangpierce/sucrase) and picking packages from node_modules
To use the script, you'll need to have hands and installed node js.
Idea behind?
The idea behind was to make it hard as possible to block leakers/leechers copy client-side scripts. And it works!
Security issues?
Make sure that you send your encryption key from server to client with encrytion enabled, so people cannot sniff your key to decrypt your files. Even tho, it should be possible to dump the script-files from memory, but this progress will still not make sense, since noone puts such effort into it.
How start work?
Steps:
unpack zip archive to root server folder (path like a 'game-server/src_client') Open terminal in src_client directory Enter npm install or yarn in terminal Enter npm run watch or yarn watch to start watching 'src_client/sourcecode' directory Complete, now u can edit files in 'src_client/sourcecode' directory
Enjoy!
304 downloads
-
Advanced Chat - Dependency free
By pichalomo
Very simple but complete chat written in vanilla js with arrows history navigation, time stamp, user colors prevention, character count, lower cased commands and scrollbar.
Ragemp chat api works perfectly
Settings
Edit settings in advanced-chat/js/main.js
Install
Extract in to advanced-chat folder and copy it to client_packages Add this somewhere client-side. (Eg: index.js) mp.gui.chat.show(false); //Disables default RageMP Chat const chat = mp.browsers.new('package://advanced-chat/index.html'); chat.markAsChat(); Add this somewhere server-side (Eg: index.js)
mp.events.add("playerChat", (player, message) => { mp.players.broadcast(`${player.name}: ${message}`); });
1495 downloads