Jump to content

[Tutorials]CheckpointStreamer + AdminArea


Sandra

Recommended Posts

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]
Link to comment
Delen op andere websites

  • Reacties 46
  • Created
  • Laatste reactie

Top Posters In This Topic

  • Sandra

    10

  • kasco

    4

  • jesse237

    4

  • Donwell

    3

Als dit een korte is, dan wil ik liever geen lange meemaken. ^_^ Zal hem ook volgen, je komt precies op tijd.

Bedankt!

Edit:

Ik stuit op een error waarvan ik er niet uitkom wat het probleem is. Het stukje }; is regel 121, waar de fout ligt. Ik heb het bovenste stukje meegezet, misschien zie je de fout?

new Float:checkCoords[MAX_POINTS][4] = { //minX, minY, maxX, maxY
{65.2402, 1768.7271, 413.5624, 2104.1318}	//Checkpoints Area69
};

Bewerkt: door Donwell
Link to comment
Delen op andere websites

Je hebt de error niet vermeldt, maar ik denk dat ik al weet waar de fout ligt.

Ik ben vergeten te vertellen dat als je een nieuwe checkpoint toevoegd, dat je achter zijn voorganger een komma moet toevoegen.

Voorbeeld:

Als je hieraan een checkpoint wilt toevoegen:

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

Dan moet achter de coordinaten van het dragon casino een komma worden toevoegd:

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
{65.2402, 1768.7271, 413.5624, 2104.1318} //area69
};

Alleen achter de laatse coördinaten moet dus geen komma.

Ik hoop dat dit de oplossing voor je probleem is :)

Link to comment
Delen op andere websites

Klopt, daar was ik ook achter. Echter, ik heb maar één gebied waar een aantal checkpoints moeten komen, dit is Area69. Ik heb dus ook maar één stukje geplaatst bij dat desbetreffende stukje code.

samp\gamemodes\mijnscript.pwn(121) : error 052: multi-dimensional arrays must be fully initialized

Dit is de error, en op regel 121 bevind zich de acolade (}/{) met de puntkomma, het precieze stukje staat in mijn vorige post.

Edit:

Volgens mij heb ik het al opgelost, ik heb evenveel gebieden als checkpoints gedaan en nu geeft hij geen errors meer, dus volgens mij is het eerst klaar.

Edit[2]:

Even gekeken of alles het deed, maar ik zie maar één checkpoint staan en that's it. Ik heb alles bij de 'OnPlayerEnterCheckpoint' gezet, maar er verschijnt niets. Heb ik niets vergeten?

Bewerkt: door Donwell
Link to comment
Delen op andere websites

Die error kwam idd omdat je precies evenveel gebieden moet hebben, als je bij MAX_POINTS hebt ingesteld.

Door dit systeem kan je meerdere checkpoints in je server zetten, maar je kan nog steed maar 1 checkpoint tegelijk zien.

Dit is niet te veranderen, omdat dat een sa:mp-ding is.

Als je dus meerdere checkpoints op een kleine plaats wil, zal je de gebiede nog kleiner moeten maken.

Zodat de gebieden elkaar niet overlappen.

Link to comment
Delen op andere websites

Ik heb alles gedaan zoals het in de tutorial stond maar ik krijg naast wat warnings die ik al kreeg ook een stel nieuwe + errors:

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(150) : warning 204: symbol is assigned a value that is never used: "checkpointType"

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(143) : warning 204: symbol is assigned a value that is never used: "checkpoints"

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(136) : warning 204: symbol is assigned a value that is never used: "checkCoords"

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(645) : warning 217: loose indentation

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(648) : warning 209: function "OnPlayerCommandText" should return a value

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(649) : error 017: undefined symbol "checkpointType"

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(649) : warning 215: expression has no effect

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(649) : error 001: expected token: ";", but found "]"

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(649) : error 029: invalid expression, assumed zero

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(649) : fatal error 107: too many error messages on one line

Regel 649 waar hij naar verwijst is deze regel:

return checkpointType[playerCheckpoint[playerID]];

Op regel 648 heb ik helemaal geen OnPlayerCommandText code staan :cab:

en bij de andere warnings gaat het om deze 3 regels:

Regel 150, aan het einde van de op 2 na laatste code in public OnGameModeInit()

};

Regel 136, aan het einde van de op één na laatste code in public OnGameModeInit()

};

Regel 143, aan het einde van de laatste code in public OnGameModeInit()

};

En nu?

[edit]Intussen zijn er nog maar 8 warnings over, waarvan 6 van het script.

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(139) : warning 217: loose indentation

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(241) : warning 217: loose indentation

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(152) : warning 204: symbol is assigned a value that is never used: "checkpointType"

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(145) : warning 204: symbol is assigned a value that is never used: "checkpoints"

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(138) : warning 204: symbol is assigned a value that is never used: "checkCoords"

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(643) : warning 217: loose indentation

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(646) : warning 209: function "OnPlayerCommandText" should return a value

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(646) : warning 203: symbol is never used: "playerCheckpoint"

Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

8 Warnings.

[edit2] Ik heb wat foutjes gemaakt, nu ik de tut weer doorlees. FF verbeteren :7

[edit3] Alles staat nu zoals het moet denk ik maar ik krijg nog steeds warnings dat sommige dingen niet eens gebruikt zouden worden.....Ik heb nog geen checkpoints ingevoerd, ligt het daar misschien aan?

Checkpoint geplaatst, krijg 1 error:

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(481) : error 004: function "getCheckpointType" is not implemented

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(484) : warning 217: loose indentation

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(659) : warning 217: loose indentation

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(662) : warning 209: function "OnPlayerCommandText" should return a value

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(662) : warning 203: symbol is never used: "checkCoords"

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(662) : warning 203: symbol is never used: "checkpointType"

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(662) : warning 203: symbol is never used: "checkpoints"

C:\Documents and Settings\Martijn\Mijn documenten\samp022server.win32\gamemodes\area51.pwn(662) : warning 203: symbol is never used: "playerCheckpoint"

Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

Bewerkt: door Galiorix
Link to comment
Delen op andere websites

Heel lastig om zo te zien waar nou de fout zit.

maar ik heb zo het gevoel dat je een

}

teveel hebt.

Je moet wel alles goed ingevuld hebben

Als jij MAX_POINTS op bijvoorbeeld 4 hebt gezet, dan moet je wel 4 checkpoints, 4 gebieden en 4 namen in hebben gevoerd.

Link to comment
Delen op andere websites

-

Edit@hieronder:

Ook al dus ;)

Edit:

Beide problemen opgelost, maar toch is er nog ééntje waar ik maar niet uitkom, het script geeft geen errors aan en naar mijn weten is het helemaal goed.

Ik heb 2 checkpoints toegevoegd, dat als je er in staat, dat het hek open gaat. Ik heb voor het stukje dat hij ópent, dat je RCON logged in moet zijn. Ik sta erin, hij gaat open. Sta ik in hetzelfde checkpoint als hij open is, dan sluit hij niet. Moet dat checkpoint dan allebei RCON login zijn? Mocht het niet zo zijn, hier het stukje script (het andere heb ik op dezelfde manier aangepakt).

if(getCheckpointType(playerid) == CP_A69EXIT_1 && Area69GateACheck == 0)
{
	MoveObject(Area69gate1,97.1103,1926.8425,18.7528,3);
	SendClientMessage(playerid,COLOR_LIME,"***The gate's opened");
	Area69GateACheck = 1;
	}
	else if(getCheckpointType(playerid) == CP_A69EXIT_1 && Area69GateACheck == 1)
	{
	MoveObject(Area69gate1,97.1103,1920.3425,18.7528,3);
	SendClientMessage(playerid,COLOR_RED,"***The gate's closed");
	Area69GateACheck = 0;
	}
	else if(getCheckpointType(playerid) == CP_A69EXIT_2 && Area69GateACheck == 0 && IsPlayerAdmin(playerid) >= 1)
	{
	MoveObject(Area69gate1,97.1103,1926.8425,18.7528,3);
	SendClientMessage(playerid,COLOR_LIME,"***The gate's opened");
	Area69GateACheck = 1;
	}
	else if(getCheckpointType(playerid) == CP_A69EXIT_1 && Area69GateACheck == 1)
	{
	MoveObject(Area69gate1,97.1103,1920.3425,18.7528,3);
	SendClientMessage(playerid,COLOR_RED,"***The gate's closed");
	Area69GateACheck = 0;
		return 1;
}

Edit:

Het is opgelost. Het probleem was, dat ik bij de laatste 'if' i.p.v. 'CP_A69EXIT_2' 'CP_A69EXIT_1' had staan. Daardoor had ik 3 op één stuk staan, waardoor hij het niet deed. :)

Bewerkt: door Donwell
Link to comment
Delen op andere websites

  • 4 maanden later...
Een admin area is een plaats waar alleen admins in kunnen. Zoals een huis, of een stad. :Y

Jep, en als normale spelers in dat gebied komen, worden ze er uitgezet (of vermoord, of verbannen :7)

Vaak word Area69 in de woestijn gebruikt als adminarea

Link to comment
Delen op andere websites

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...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.

×
×
  • Create New...