Getting Started with Development: Difference between revisions

From RAGE Multiplayer Wiki
mNo edit summary
No edit summary
Line 2: Line 2:
== Requirements ==
== Requirements ==


* [https://cdn.rage.mp/client/updater.exe Rage MP updater]
* Server files installed (from [https://cdn.rage.mp/client/updater.exe Rage MP updater])
* Basic JS/NodeJS programming knowledge
* Basic [[wikipedia:en:JavaScript|JavaScript]]/[[wikipedia:en:Node.js|NodeJS]] programming knowledge


== Introduction ==
== Introduction ==
 
We are going to show you how to start developing your own server with a simple tutorial. We will show you how you can create your own resource and run it in your server.
Today we are going to show you how you can start developing your own server with a simple tutorial. We will show you how you can create your own resource and run it in your server.


== Starting the server ==
== Starting the server ==
 
When downloading the [https://cdn.rage.mp/client/updater.exe Rage MP updater] and running it, you will get the server files. The folder name will be called <code>server-files</code>. Open the folder and you will find this:
When downloading the [https://cdn.rage.mp/client/updater.exe Rage MP updater] and running it, you'll get the server files. The folder name will be called <code>server-files</code>. When you open the folder you'll find this:


<gallery widths=800px heights=426px>
<gallery widths=800px heights=426px>
Line 17: Line 15:
</gallery>
</gallery>


*'''client_packages''': Folder in which client-side scripts are located. (Client-side allows you to draw GUI or do [https://bitbucket.org/chromiumembedded/cef CEF] work)
*'''client_packages''': Folder in which client-side scripts are located and downloaded by the client. (Client-side allows you to draw [[wikipedia:en:Graphical user interface|<abbr title="Graphical User Interface">GUI</abbr>]] or do <abbr title="Chromium Embedded Framework">[https://bitbucket.org/chromiumembedded/cef CEF]</abbr> work)
*'''packages''': Folder in which server-side scripts are located. (Server-side allows you to manage the player and create your own world)
*'''packages''': Folder in which server-side scripts are located and loaded by the server. (Server-side allows you to manage the player and create your own world)
*'''maps''': Allows you to load maps into the game world in JSON format.
*'''maps''': Folder in which map files (in [[wikipedia:en:JSON]] format) are loaded into the game world.
*'''plugins''': Allows you to load custom '''dll''' plugins into the game.
*'''plugins''': Allows you to load custom <code>.dll</code> plugins into the server.
*'''conf.json''': Contains the server configuration in JSON format. Read more about server settings [[Server_settings|here]].
*'''conf.json''': Contains the server configuration in JSON format. Read more about [[Server_settings|server settings here]].
*'''server.exe''': Server executable, which if you run, starts the game server.
*'''server.exe''': Server executable, which if you run, starts the game server.


Currently you'll find your folders empty, so if you want to load a gamemode there is a [https://github.com/n-n1ks/rage.mp-freeroam freeroam gamemode] available to study/use on your server.
Currently you'll find your folders empty, so if you want to load a gamemode there is a [https://github.com/n-n1ks/rage.mp-freeroam freeroam gamemode sample] available to study/use on your server.
 
== Setting up API autocomplete ==


Autocompletion is one of the most important features a developer can use while developing. It's annoying to keep searching in the wiki for the right syntax or find the right function you want. Thanks to '''CocaColaBear''' for his great contribution in creating an autocompletion package for RAGE JS API.
== Setting up API auto complete (TypeScript) ==
Autocompletion is one of the most important features a developer can use while developing. It is annoying to keep searching in the wiki for the right syntax or find the right function you want. Thanks to '''CocaColaBear''' for his great contribution in creating an autocompletion package for RAGE JS API.


*[https://github.com/CocaColaBear/types-ragemp-s autocomplete SERVER]
*[https://github.com/CocaColaBear/types-ragemp-s autocomplete for SERVER side script]
*[https://github.com/CocaColaBear/types-ragemp-c autocomplete CLIENT]
*[https://github.com/CocaColaBear/types-ragemp-c autocomplete for CLIENT side script]


=== Installation ===
=== Installation ===
*Open your terminal and navigate to your server's folder.
*Open your terminal (like [[wikipedia:en:cmd.exe|Command Prompt]]) and navigate to your server folder.
*Install the following Node packages:
*Install the following Node.js packages with NPM:
**<code>npm install --save-dev github:CocaColaBear/types-ragemp-s#master</code>
**<code>npm install --save-dev github:CocaColaBear/types-ragemp-s#master</code> or <code>npm install --save-dev https://github.com/CocaColaBear/types-ragemp-s/tarball/master</code>
**<code>npm install --save-dev github:CocaColaBear/types-ragemp-c#master</code> or <code>npm install --save-dev https://github.com/CocaColaBear/types-ragemp-c/tarball/master</code>
**<code>npm install --save-dev github:CocaColaBear/types-ragemp-c#master</code> or <code>npm install --save-dev https://github.com/CocaColaBear/types-ragemp-c/tarball/master</code>
*You should now get autocomplete.
*You should now get autocomplete.
Line 42: Line 39:


== Creating your first resource ==
== Creating your first resource ==
<b>Rage Multiplayer</b> consists of 2 sides of scripting:
* '''Client-side''' allows you to create and develop <abbr title="User Interface">UI</abbr>, manipulate game client features and show people your creativity.
* '''Server-side''' allows you to manipulate the server itself with things like managing all players, vehicles, markers, etc ([[:Category:Assets|see more]]).


<b>Rage Multiplayer</b> consists of 2 sides of scripting, '''Client-side''' and '''Server-side'''. So as mentioned above, '''Client-side''' allows you to create and develop UI and show people your creativity, while '''Server-side''' allows you to manage the server itself with things like managing players, vehicles, and markers etc.
We will create our first server-side resource, and will see how it works in game.


Today we will create our first server-side resource, and will see how it works ingame.
First of all, go to <code>packages</code> and create a folder (name of game mode anything you want).


First of all, go to <code>packages</code> and create a folder (Call it anything you want). Then in your server folder, create an <code>index.js</code> file. After that, open the file and write the following:
=== Scripting server commands ===
In your game mode folder, create an <code>index.js</code> file. After that, open the file and write the following:


<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
Line 54: Line 55:
</syntaxhighlight>  
</syntaxhighlight>  


Now save and close the file. Now create another file called <code>commands.js</code> and open it.
Now save and close the file, then create another file named <code>commands.js</code> and open it.


Add these simple commands to your file:
Add these simple commands to your file:


<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
mp.events.addCommand('kill', (player) => {
    player.health = 0;
});
mp.events.addCommand('hp', (player) => {
mp.events.addCommand('hp', (player) => {
     player.health = 100;
     player.health = 100;
Line 69: Line 66:
mp.events.addCommand('armor', (player) => {
mp.events.addCommand('armor', (player) => {
     player.armour = 100;
     player.armour = 100;
});
mp.events.addCommand('kill', (player) => {
    player.health = 0;
});
});
</syntaxhighlight>  
</syntaxhighlight>  


If you don't understand these, please proceed to [[Getting Started with Commands|Getting started with commands]]. Now we have created a simple source with 3 basic commands. One that gives health, one that gives armor, and one that kills you.
Learn more about these on [[Getting Started with Commands|Getting started with commands]]. Now we have created a simple source with 3 basic commands. One that gives health, one that gives armor, and one that kills you.


Now save the file and close it. Have you noticed anything wrong with the code we just wrote? If not, let me give you a hint. If you trigger the kill command, this means it will kill the player, but will you re-spawn back? I have the solution for you!
Now save the file and close it.
 
=== Scripting server event ===
Have you noticed anything wrong with the code we just wrote? If not, let me give you a hint. If you trigger the kill command, this means it will kill the player, but will you re-spawn back? I have the solution for you!


Create a '''JSON''' file and name it <code>spawn_points.json</code> and then add the following code:
Create a '''JSON''' file and name it <code>spawn_points.json</code> and then add the following code:
Line 91: Line 95:
Done? Now save it and close.  
Done? Now save it and close.  


Create a new file called <code>events.js</code> and add the following code:
Create a new file named <code>events.js</code> and add the following code:


<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
Line 103: Line 107:
</syntaxhighlight>
</syntaxhighlight>


We have defined our spawn points that we want the player to spawn in, and then we added an event for when the player dies. When this event is triggered, they re-spawn in a random location from the spawn points you defined. Also don't forget to make the player's health 100 again or they can teleport while dead to the spawn point.
We have defined our spawn points that we want the player to spawn in, and then we added an event for when the player dies. When this event is triggered, they re-spawn in a random location from the spawn points you defined. Also do not forget to restore the player's health 100 again or they can teleport while dead to the spawn point.


'''IMPORTANT''': Don't forget to require the <code>events.js</code> in the <code>index.js</code>.
'''IMPORTANT''': Do not forget to require the <code>events.js</code> in the <code>index.js</code>.


Your <code>index.js</code> file should be like this:
=== Putting it all together ===
In the end, your <code>index.js</code> file should look this:


<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
Line 117: Line 122:
</syntaxhighlight>  
</syntaxhighlight>  


Now save everything and launch your server and go test what you just wrote!
Now save everything then launch your server and go test what you just wrote!


I hope you enjoyed creating your first script in RAGE:MP and we will be sure to create further tutorials for you to learn more.
I hope you enjoyed creating your first script in RAGE:MP and we will be sure to create further tutorials for you to learn more.
Happy Gaming!
Happy Gaming!
= See also =
* [[Server-side events]]
* [[Server-side functions]]
* [[Client-side events]]
* [[Client-side functions]]


[[Category:Tutorials]]
[[Category:Tutorials]]

Revision as of 08:56, 30 April 2019

Requirements

Introduction

We are going to show you how to start developing your own server with a simple tutorial. We will show you how you can create your own resource and run it in your server.

Starting the server

When downloading the Rage MP updater and running it, you will get the server files. The folder name will be called server-files. Open the folder and you will find this:

  • client_packages: Folder in which client-side scripts are located and downloaded by the client. (Client-side allows you to draw GUI or do CEF work)
  • packages: Folder in which server-side scripts are located and loaded by the server. (Server-side allows you to manage the player and create your own world)
  • maps: Folder in which map files (in wikipedia:en:JSON format) are loaded into the game world.
  • plugins: Allows you to load custom .dll plugins into the server.
  • conf.json: Contains the server configuration in JSON format. Read more about server settings here.
  • server.exe: Server executable, which if you run, starts the game server.

Currently you'll find your folders empty, so if you want to load a gamemode there is a freeroam gamemode sample available to study/use on your server.

Setting up API auto complete (TypeScript)

Autocompletion is one of the most important features a developer can use while developing. It is annoying to keep searching in the wiki for the right syntax or find the right function you want. Thanks to CocaColaBear for his great contribution in creating an autocompletion package for RAGE JS API.

Installation

Creating your first resource

Rage Multiplayer consists of 2 sides of scripting:

  • Client-side allows you to create and develop UI, manipulate game client features and show people your creativity.
  • Server-side allows you to manipulate the server itself with things like managing all players, vehicles, markers, etc (see more).

We will create our first server-side resource, and will see how it works in game.

First of all, go to packages and create a folder (name of game mode anything you want).

Scripting server commands

In your game mode folder, create an index.js file. After that, open the file and write the following:

//init Commands file
require('./commands.js')

Now save and close the file, then create another file named commands.js and open it.

Add these simple commands to your file:

mp.events.addCommand('hp', (player) => {
    player.health = 100;
});

mp.events.addCommand('armor', (player) => {
    player.armour = 100;
});

mp.events.addCommand('kill', (player) => {
    player.health = 0;
});

Learn more about these on Getting started with commands. Now we have created a simple source with 3 basic commands. One that gives health, one that gives armor, and one that kills you.

Now save the file and close it.

Scripting server event

Have you noticed anything wrong with the code we just wrote? If not, let me give you a hint. If you trigger the kill command, this means it will kill the player, but will you re-spawn back? I have the solution for you!

Create a JSON file and name it spawn_points.json and then add the following code:

{
    "SpawnPoints": [
        { "x": -425.517, "y": 1123.620, "z": 325.8544 },
        { "x": -415.777, "y": 1168.791, "z": 325.854 },
        { "x": -432.534, "y": 1157.461, "z": 325.854 },
        { "x": -401.850, "y": 1149.482, "z": 325.854 }
    ]
}

Done? Now save it and close.

Create a new file named events.js and add the following code:

let spawnPoints = require('./spawn_points.json').SpawnPoints;

mp.events.add('playerDeath', (player) => {
    player.spawn(spawnPoints[Math.floor(Math.random() * spawnPoints.length)]);
    player.health = 100;
});

We have defined our spawn points that we want the player to spawn in, and then we added an event for when the player dies. When this event is triggered, they re-spawn in a random location from the spawn points you defined. Also do not forget to restore the player's health 100 again or they can teleport while dead to the spawn point.

IMPORTANT: Do not forget to require the events.js in the index.js.

Putting it all together

In the end, your index.js file should look this:

//init Commands file
require('./commands.js')

//init Events file
require('./events.js')

Now save everything then launch your server and go test what you just wrote!

I hope you enjoyed creating your first script in RAGE:MP and we will be sure to create further tutorials for you to learn more. Happy Gaming!

See also