Jump to content
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_938377

hmmm ik probeer hiermee(en je menu tut) een cartuning te maken.. eerst moet ik dan natuurlijk een checkpoint hebben.. Ik kom er alleen neit uit :( hmm en nog een vraagje :puh: ik wil dat het menutje zich toont zodra je erop gaat staan.. hoe doe ik dit?

Me code: CODE HIER!!

en de errors:

D:\GTA SA\GTA San Andreas\samp\gamemodes\tut_cartuning.pwn(19) : error 018: initialization data exceeds declared size
D:\GTA SA\GTA San Andreas\samp\gamemodes\tut_cartuning.pwn(22) : error 018: initialization data exceeds declared size
D:\GTA SA\GTA San Andreas\samp\gamemodes\tut_cartuning.pwn(226) : error 017: undefined symbol "playerid"
D:\GTA SA\GTA San Andreas\samp\gamemodes\tut_cartuning.pwn(228) : error 017: undefined symbol "playerid"
D:\GTA SA\GTA San Andreas\samp\gamemodes\tut_cartuning.pwn(228) : error 001: expected token: ",", but found ";"
D:\GTA SA\GTA San Andreas\samp\gamemodes\tut_cartuning.pwn(231) : warning 209: function "isPlayerInArea" should return a value
D:\GTA SA\GTA San Andreas\samp\gamemodes\tut_cartuning.pwn(232) : error 010: invalid function or declaration
D:\GTA SA\GTA San Andreas\samp\gamemodes\tut_cartuning.pwn(241) : error 047: array sizes do not match, or destination array is too small
D:\GTA SA\GTA San Andreas\samp\gamemodes\tut_cartuning.pwn(244) : error 032: array index out of bounds (variable "checkpoints")
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


8 Errors.

PS: die game text hoeft niet dat doe ik op een andere manier ;)

EDIT:

Laatmaar :)

Bewerkt: door nick5556

  • 2 weken later...
Geplaatst:
comment_949847

Ik heb nog iets om toe te voegen, als je een admin area hebt met alleen X en Z coordinaten aangegeven, en je hebt ingelsteld dat je gekild word als je erin komt, is dat nogal onhandig voor mensen met vliegtuigen.

Je zou beter ook een Z coordinaat kunnen toevoegen zodat je er wel overheen kan vliegen maar als je te laag vliegt dat je dan pas dood gaat.

Want dit had ik in een server die dit hadden, ik vloog gewoon rond in een hydra en ineens DOOD, you enterd admin area and are killed by automatic missiles

  • 2 maanden later...
  • 1 maand later...
Geplaatst:
comment_1080645

:tu: Heel erg Handig =>Sandra<= :tu:

Dit is Precies wat ik Nodig Had :dans:

Misschien kun je me dan ook helpen met iets anders

Ik gebruik Jouw Admin Area script/Code. Maar ik Ben Bezig met een Begraaf plaats, En ik wil daar ook zo'n area doen. maar niet dat je eruit gezet word, Maar dat je wapens Tijdelijk Disabled zijn.

Zodat je niet kunt vechten enzo.

Ik weet niet of het mogelijk is, Niet dat de wapens weg zijn. Maar dat je ze gewoon niet kan gebruiken

Alvast bedankt. Chan_Young

  • 2 maanden later...
Geplaatst:
comment_1145466

TOPPIE SANDRA :tu:

maar ik heb een racebaan gemaakt

maar ik zie die checkpoints helemaal niet :(

kan jij zeggen wat ik in mijn command moet doen om mijn checkpoints te zien

ik heb dit:

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

#define MAX_POINTS 8
#define race1   1
#define race2   2
#define race3   3
#define race4   4
#define race5	5
#define race6	6
#define race7	7
#define race8	8

new playerCheckpoint[MAX_PLAYERS];
new Float:checkCoords[MAX_POINTS][4] = {
{817.2147,-3008.7788,30.1007,270.0286},	//bank
{861.8925,-3008.7478,30.1176,270.0226},  //piratenschip
{888.0269,-2989.1135,30.1145,0.1053}, //dragon casino
{888.0109,-2955.7234,30.1152,359.2467},	//bank
{862.3562,-2938.8894,30.1137,90.2987},  //piratenschip
{801.8018,-2938.9172,30.1010,90.1250}, //dragon casino
{768.2263,-2955.6958,30.0998,178.9262},	//bank
{790.0901,-3008.8230,30.1003,271.2616}  //piratenschip
//als je checkpoints wilt toevoegen, zet je een komma achter de laatste coordinaten en voeg je hier een extra regel onder zonder komma erachter.
};
new checkpointType[MAX_POINTS] = {
race1,
race2,
race3,
race4,
race5,
race6,
race7,
race8
//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.
};
new Float:checkpoints[MAX_POINTS][3] = {
{817.2147,-3008.7788,30.1007},
{861.8925,-3008.7478,30.1176},
{888.0269,-2989.1135,30.1145},
{888.0109,-2955.7234,30.1152},
{862.3562,-2938.8894,30.1137},
{801.8018,-2938.9172,30.1010},
{768.2263,-2955.6958,30.0998},
{790.0901,-3008.8230,30.1003}
//als je checkpoints wilt toevoegen, zet je een komma achter de laatste coordinaten en voeg je hier een extra regel onder zonder komma.

};

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

Bewerkt: door kasco

Geplaatst:
comment_1146143
Jij heb jou coords van wanneer je de CPs kan zien. Heb nog nooit met CPs gewerkt maar aan de TUT te lezen heb je dat fout. Ik kan je nu niet verder helpen. Sorry

weet iemand het nu wel

want ik heb het echt nodig

Geplaatst:
comment_1146289
Heb je wel

SetTimer("checkpointUpdate", 500, 1);

bij OnGameModeInit() gezet?

ja ik heb het bij

public OnFilterScriptInit()

{

SetTimer("checkpointUpdate", 500, 1);

return 1;

}

Geplaatst:
comment_1147797

Hoe werkt die admin base area ik kom er niet uit.

Als ik nara d ie basis gaat werkt hij wel maar ik wil het op een ander plek hebben.

Ik heb nu deze coorordinaten:

   
		if (IsPlayerInArea(i,3002.9917, -1990.2168, 1.6396,103.6917) == 1) // mensen dit is mijn nieuwe cor's

		{
			if (!IsPlayerAdmin(i))
			{
				GameTextForPlayer(i, "~r~ You are not allowed to enter the AdminArea!", 70000, 3);
			   // SetPlayerPos(i, 77.7069,1920.8846,17.6406);
				SetPlayerFacingAngle(i, 270);
SetPlayerHealth(i, 0.00);
			}
		}
	}
}
return 1;
}

Wie weet wat er fout is? ik snap echt die fout niet.

En dan ga ik snel naar de die plaats toe en er gebeurd niks......

Bewerkt: door kevinkrs

  • 2 maanden later...
Geplaatst:
comment_1232158

Hey ik begrijp niet precies wat dat X_min, Y_min, X_max en Y_MAX inhouden...

wat moet ik daar precies neerzetten?

voorderest dankje voor deze Tutorial!!

Geplaatst:
  • Auteur
comment_1232561
Hey ik begrijp niet precies wat dat X_min, Y_min, X_max en Y_MAX inhouden...

wat moet ik daar precies neerzetten?

Dat zijn de coordinaten. Ik heb dit stukje even gekopieerd uit mijn Beginner-Tutorial:

Coordinaten:

Om bepaalde dingen (zoals voertuigen en objecten) op de juiste plaats te zetten, zijn er coödinaten.

Het is hetzelfde als een grafiek:

- Een y-as die loopt van zuid naar noord

- Een x-as die loopt van west naar oost

Het midden van San Andreas is coördinaat 0,0

De x-as loopt van -3000 (in san fiero) tot 3000 (kust van Las Venturas)

De y-as loopt ook van -3000 tot 3000.

post-70241-1201376821.jpg

Om coördinaten op te slaan, kan je in een server gaan, en dan het commando /save typen

(daarachter kan je nog opmerkingen typen. (bijvoorbeeld “/save spawnplaats #1

Deze coördinaten worden dan opgeslagen in het bestand ‘savedpositions.txt

Dit bestand staat in de map waar je gta-sa hebt geïnstalleerd.

(C/Programfiles/Rockstargames/San Andreas/savedpositions.txt)

De regels waar de coördinaten instaan kan je op deze manier treffen:

AddPlayerClass(id, x-coördinaat, y=coördinaat, z-coordinaat, rotatie, 0,0,0,0,0,0); // spawnplaats #1

Bewerkt: door =>Sandra<=

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.