Jump to content

[Tutorials]CheckpointStreamer + AdminArea

Geplaatst:
comment_820127

Tutorial Checkpoints+AdminArea



Gemaakt door Sandra18[NL]

Voorlopig ff de laatste tutorial. Dan vind ik dat ik genoeg gedaan heb voor jullie.

Na vele pm-berichten met vragen hoe je meerdere checkpoints en adminarea moet maken, heb ik toch maar besloten nog 1 keer tijd te maken om voor jullie een tutorial te maken.

Tis wel een korte ditkeer.

CheckPoints Streamen:

De fucties die ik gebruik zijn gemaakt door [GM]The_Don en komen uit het script: 'lvdmod[1]'

Ik leg alleen uit hoe je er zelf checkpoints aan toevoegd.

Eerst voeg je onderaan het script de volgende 3 functies toe:

public getCheckpointType(playerID) {
return checkpointType[playerCheckpoint[playerID]];
}

public isPlayerInArea(playerID, Float:data[4])
{
new Float:X, Float:Y, Float:Z;

GetPlayerPos(playerID, X, Y, Z);
if(X >= data[0] && X <= data[2] && Y >= data[1] && Y <= data[3]) {
	return 1;
}
return 0;
}

public checkpointUpdate()
{
for(new i=0; i<MAX_PLAYERS; i++)
{
	if(IsPlayerConnected(i)) {
		for(new j=0; j < MAX_POINTS; j++) {
			if(isPlayerInArea(i, checkCoords[j])) {
				if(playerCheckpoint[i]!=j) {
					DisablePlayerCheckpoint(i);
					SetPlayerCheckpoint(i, checkpoints[j][0],checkpoints[j][1],checkpoints[j][2],2);
					playerCheckpoint[i] = j;
				}
			} else {
				if(playerCheckpoint[i]==j) {
					DisablePlayerCheckpoint(i);
					playerCheckpoint[i] = 999;
	 			}
			}
		}
	}
}
}

Dan voeg je dit bovenaan het script (wel onder de includes):

forward getCheckpointType(playerID);
forward isPlayerInArea(playerID, Float:data[4]);
forward checkpointUpdate();

new playerCheckpoint[MAX_PLAYERS];

En bij OnGameModeInit():

SetTimer("checkpointUpdate", 500, 1);

Van de bovenstaande functies moet je afblijven.

Nu komen de codes die je zelf moet aanpassen afhankelijk van je eigen wensen:

Als voorbeeld maken we 3 checkpoints in de gamemode:

- Op het piratenschip

- In de bank (24/7 winkels)

- In het 4-dragons-casino

Wat nu allemaal volgt voeg je ook bovenaan het script toe. (maar wel onder de codes die hierboven staan en bovenaan het script moeten:

Eerst moeten we een 'define' maken die aangeeft hoeveel checkpoints er moeten zijn:

#define MAX_POINTS 3

Als je een 4e checkpoint wilt maken, verander je die '3' in een '4'

Vervolgens moeten we namen voor de checkpoints verzinnen.

#define CP_BANK	0
#define CP_PIRATE	1
#define CP_DRAGON	2

Als je nu zelf een checkpoint wilt toevoegen voeg je onder die bovenstaande defines gewoon een nieuwe regel toe met: #define <naamcheckpoint> <getal 1 verhogen>

Vervolgens moeten we de gebieden aangeven waarin de checkpoints zichbaar zijn.

Het is {x_min, y_min, x_max, y_max}

new Float:checkCoords[MAX_POINTS][4] = {
{-36.5483, -57.9948,  -17.2655, -49.2967},	//bank
{1894.6128, 1445.3431, 2084.9739, 1637.8186},  //piratenschip
{1925.1511, 968.2358, 2019.0715, 1067.4276} //dragon casino
//als je checkpoints wilt toevoegen, zet je een komma achter de laatste coordinaten en voeg je hier een extra regel onder zonder komma erachter.

};

Dan moeten we de coördinaten van de checkpoints zelf bepalen:

Het is {x, y, z}

new Float:checkpoints[MAX_POINTS][3] = {
{-22.2549, -55.6575, 1003.5469},
{2000.3132, 1538.6012, 13.5859},
{1989.0619, 1005.5241, 994.4688}
//als je checkpoints wilt toevoegen, zet je een komma achter de laatste coordinaten en voeg je hier een extra regel onder zonder komma.

};

Dan moeten we nog de namen van de checkpoints in een array zetten:

new checkpointType[MAX_POINTS] = {
CP_BANK,
CP_PIRATE,
CP_DRAGON
//als je checkpoints wilt toevoegen, zet je een komma achter de laatste coordinaten en voeg je hier de naam van die nieuwe checkpoint onder zonder komma.

};

Nou, als je het gelukt is om deze codes in je script te zetten zonder errors, kan je je server ingaan.

En dan zullen de checkpoints op hun plaats staan.

Hoe zorg je er nou voor dat je alleen een bepaald commando kan gebruiken als je in een bepaalde checkpoint staat?

Je hoeft dan maar 1 regel toe te voegen aan het commando:

if(IsPlayerInCheckpoint(playerid) && getCheckpointType(playerid) == naam-van-checkpoint) 
{

Voorbeeld:

Je kan alleen teleporteren met het commando /teleport als je in de checkpoint op het piratenschip staat:

if (strcmp("/teleport", cmdtext, true, 10) == 0)
{
 if(IsPlayerInCheckpoint(playerid) && getCheckpointType(playerid) == CP_PIRATE)
{
   SetPlayerPos(playerid, -2300.6008, -1650.3129, 483.7031);
	   SendClientMessage(playerid, 0x00FF00, "Je bent nu naar Mount Chiliad geteleporteerd!");
	}
	else
	{
	SendClientMessage(playerid, 0xFF0000AA, "Je moet in de checkpoint van het PiratenSchip staan!");
}
return 1;
}

Of gebruik bij in de OnPlayerEnterCheckpoint callback:

public OnPlayerEnterCheckpoint(playerid)
{
if(getCheckpointType(playerid) == CP_PIRATE)
{
SetPlayerPos(playerid, -2300.6008, -1650.3129, 483.7031);
	SendClientMessage(playerid, 0x00FF00, "Je bent nu naar Mount Chiliad geteleporteerd!");
	return 1;
}
return 1;
}

Tot zover de checkpoints nu vlug een voorbeeld voor een admin area:

AdminArea:

Deze functie heeft ook een IsPlayerInArea functie nodig, maar omdat ik geen zin heb om de fuctie die ik had voor de adminarea aan te passen, gebruik ik maar ff een andere IsPlayerInArea functie:

Zet dit bovenaan je script:

forward AdminArea(playerid);
forward IsPlayerInArea(playerid, Float:minx, Float:maxx, Float:miny, Float:maxy);

Zet dit bij OnGameModeInit:

SetTimer("AdminArea", 400, 1);

Zet dit onderaan je script:

IsPlayerInArea(playerid, Float:minx, Float:maxx, Float:miny, Float:maxy)
{
	new Float:x, Float:y, Float:z;
	GetPlayerPos(playerid, x, y, z);
	if (x > minx && x < maxx && y > miny && y < maxy) return 1;
	return 0;
}

En zet eronder:

public AdminArea(playerid)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
	if(IsPlayerConnected(i))
	{
		if (IsPlayerInArea(i,97.5436, 285.1614, 1798.8602, 1940.8845) == 1)
		{
			if (!IsPlayerAdmin(i))
			{
								 //Doe hier je ding met je slachtoffer
			}
		}
	}
}
return 1;
}

Klik >>hier<< voor een script met de bovenstaande codes samengevoegd.

Veel plezier ermee.

Grtz Sandra

Bewerkt: door Sandra18[NL]

  • Reacties 46
  • Bezichtigingen 16.4k
  • Created
  • Laatste reactie

Top Posters In This Topic

Featured Replies

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

Recent actief 0

  • Er zijn hier geen geregistreerde gebruikers aanwezig.