Thread: [Tutorial] How To Create Random Spawns!
View Single Post
Old 23/07/2019, 06:39 PM   #1
YouShootIDodge
Little Clucker
 
Join Date: May 2019
Posts: 44
Reputation: 11
Default How To Create Random Spawns!

Creating Random Spawns


So this is a very simple, straight-forward tutorial on how to make random spawns.

For creating random spawns, there are 2 methods i can think of right now. First simple switch () statement and second using milti-dimentional arrays.

There are alot of beginners who are unable to understand the concept of multi-dimensional arrays so in this tutorial i will show them how to make a random spawn system and similar stuff without using the arrays. Since the array method is explained in the wiki, i'll be explaining the second one.

Here is a code showing the OnPlayerSpawn () callback, for-example if you want to spawn the player at one of five random positions, this code will work:

Code:
public OnPlayerSpawn (playerid)
{
    new selected_spawn = random (5);

    switch (selected_spawn)
    {
        case 0: { SetPlayerPos (playerid, 0.0,   0.0,   0.0);  SetPlayerFacingAngle (playerid, 0.0); }
        case 1: { SetPlayerPos (playerid, 10.0, 10.0, 10.0); SetPlayerFacingAngle (playerid, 10.0); }
        case 2: { SetPlayerPos (playerid, 20.0, 20.0, 20.0); SetPlayerFacingAngle (playerid, 20.0); }
        case 3: { SetPlayerPos (playerid, 30.0, 30.0, 30.0); SetPlayerFacingAngle (playerid, 30.0); }
        case 4: { SetPlayerPos (playerid, 40.0, 40.0, 40.0); SetPlayerFacingAngle (playerid, 40.0); }
    }
    return 1;
}
Explained:

1.
Code:
new selected_spawn = random (5);
Here you can see a new integer type variable being created followed by an assignment operator and a function named 'random ()'. This semantic of this line of code works like this:

- It creates an integer variable.
- It then generates a random value between 0 and 4 (5 is the size of its range, since in coding counting starts from 0 so 0, 1, 2, 3, 4 = 5)
- It assigns the randomly generated value to the newly created variable.


2.
Code:
switch (selected_spawn) { }
This is called a switch statement, in simple words it is an alternative to the if-statement with some limitations but it can be used neatly in this case. So it will execute a function or set of functions depending upon the value of variable 'selected_spawn'.

As you can see, we have provided it 2 functions to perform in each case, for-example if the value of 'selected_spawn' turns out to be 1, it will perform the following functions and hence the player's position will be set to the given coordinates.

Code:
switch (selected_spawn)
    {
        case 0: { SetPlayerPos (playerid, 0.0,   0.0,   0.0);  SetPlayerFacingAngle (playerid, 0.0); }
        case 1: { SetPlayerPos (playerid, 10.0, 10.0, 10.0); SetPlayerFacingAngle (playerid, 10.0); }
        case 2: { SetPlayerPos (playerid, 20.0, 20.0, 20.0); SetPlayerFacingAngle (playerid, 20.0); }
        case 3: { SetPlayerPos (playerid, 30.0, 30.0, 30.0); SetPlayerFacingAngle (playerid, 30.0); }
        case 4: { SetPlayerPos (playerid, 40.0, 40.0, 40.0); SetPlayerFacingAngle (playerid, 40.0); }
    }

Now, that was all, if you want to add another random spawn, you can increment the range of the random () function and add it's coordinates in the switch () statement.

You can also make a function out of it, so if you want to set random positions multiple times in the code, it will be useful.

Here is an example code:

Code:
public OnPlayerSpawn (playerid)
{
    SetRandomPosition (playerid); // You can use this multiple times in other parts of code too.
    return 1;
}

stock SetRandomPosition (playerid)
{
    new selected_spawn = random (5);

    switch (selected_spawn)
    {
        case 0: { SetPlayerPos (playerid, 0.0,   0.0,   0.0);  SetPlayerFacingAngle (playerid, 0.0); }
        case 1: { SetPlayerPos (playerid, 10.0, 10.0, 10.0); SetPlayerFacingAngle (playerid, 10.0); }
        case 2: { SetPlayerPos (playerid, 20.0, 20.0, 20.0); SetPlayerFacingAngle (playerid, 20.0); }
        case 3: { SetPlayerPos (playerid, 30.0, 30.0, 30.0); SetPlayerFacingAngle (playerid, 30.0); }
        case 4: { SetPlayerPos (playerid, 40.0, 40.0, 40.0); SetPlayerFacingAngle (playerid, 40.0); }
    }
    return 1;
}
YouShootIDodge is offline   Reply With Quote