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

Geplaatst:
comment_1233179

ja ik begreip Coördinaten wel maar wat heeft min en max er precies mee te maken.

en van wat moet ik de coordinaten (X_MIN, Y_MIN, X_MAX, Y_MAX) invoegen.. een gebied ofzoiets las ik??

of is dit hoe groot de checkpoint wordt, of waar het komt te staan?

Geplaatst:
comment_1237635

.. sorry maar ik begrijp het nog steeds niet helemaal.

Hoe moet ik de coördinaten van dit gebied vinden... en waarom zijn de gebieden bij de voorbeelden best wel groot?

een checkpoint is toch niet zo groot..? als het het gebied is waarin het checkpoint gezien kan worden hoe kan ik die coördinaten dan vinden .. ook met /save @.... ? welke moet ik dan nemen? alleen de x alleen de y of x en y of x y z enz.... ? en je moet dan toch 4 keer /save doen??? (gebied is vierkant neem ik aan)

Geplaatst:
comment_1242451
.. sorry maar ik begrijp het nog steeds niet helemaal.

Hoe moet ik de coördinaten van dit gebied vinden... en waarom zijn de gebieden bij de voorbeelden best wel groot?

een checkpoint is toch niet zo groot..? als het het gebied is waarin het checkpoint gezien kan worden hoe kan ik die coördinaten dan vinden .. ook met /save @.... ? welke moet ik dan nemen? alleen de x alleen de y of x en y of x y z enz.... ? en je moet dan toch 4 keer /save doen??? (gebied is vierkant neem ik aan)

Ik snap het al je hoeft maar 1 coördinaat op te slaan

en die voeg je toe bij de 2e float checkpoints (X,Y,Z)

en bij de eerste zet je bij X_min de X coordinaat maar bijvoorbeeld -10 (dus als x coordinaat 1341.872 was wordt het 1331.872) en hetzelfde geld voor Y_min

en bij max doe je erbijvoorbeeld 10 bij

  • 2 maanden later...
Geplaatst:
comment_1326141
Kan je hier ook de grote van de checkpoints bepalen? En klopt het dat het systeem niet 2 checkpoints, die vlak bij elkaar staan, tegelijk kan laten zien? Die 2 problemen heb ik namelijk :7

Sa-mp kna toch maar een checkpoint tegelijk en anders een checkpoint streamer ofzo

Geplaatst:
comment_1326144
Kan je hier ook de grote van de checkpoints bepalen? En klopt het dat het systeem niet 2 checkpoints, die vlak bij elkaar staan, tegelijk kan laten zien? Die 2 problemen heb ik namelijk :7

Sa-mp kna toch maar een checkpoint tegelijk en anders een checkpoint streamer ofzo

Wat Sandra hier gepost heeft IS een checkpoint streamer :7

  • 1 maand later...
Geplaatst:
comment_1368369

een hele mooie tutorial dit heb ik echt nodig

nu heb ik de checkpoint gebruikt van het piratenschip

en een functie toegevoegd dat als je erin staat je 5000 krijgt

maar als ik er ingame in ga staan gebeurd er niks

ik heb alles hetzelfde gedaan alleen de naam van de checkpoint veranderd

public OnPlayerEnterCheckpoint(playerid)
{
if(getCheckpointType(playerid) == CP_TRUCK)
{
	GivePlayerMoney(playerid,5000);
	return 1;
}
return 1;
}

als ik mijn hele gamemode moet posten zeg het maar

  • 4 maanden later...
  • 3 weken later...
Geplaatst:
comment_1528017

Klein probleempje: Checkpoint 1 is WEL gescript maar wordt NIET getoond. Nu kan ik checkpoint 1 gewoon ergens ver weg neer zetten, maar dan heb ik toch nog een paar regels overbodige tekst. Iemand een idee waardoor dit komt en hoe dit is te verhelpen?

Bewerkt: door nulop

  • 4 maanden later...
  • 4 weken later...
Geplaatst:
comment_1641737

ik heb een AdminArea gemaakt maar als ik er in ga ga ik niet dood, kan iemand mij helpen? ^_^

code:

forward AdminArea(playerid);

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

public OnGameModeInit()

{

SetTimer("AdminArea", 1000, true);

return 1;

}

public 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;

}

public AdminArea(playerid)

{

for(new i = 0; i < MAX_PLAYERS; i++)

{

if(IsPlayerConnected(i))

{

if (IsPlayerInArea(i, -2742, -1361, -2871 , -1737) == 1)

{

if (!IsPlayerAdmin(i))

{

SetPlayerHealth(playerid, 0);

}

}

}

}

return 1;

}

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.