Jump to content

Tol betalen in samp


Recommended Posts

Geplaatst:

Hallo,

Ik wil graag dat er op een bepaald punt in de server tol moet worden betaald, om verder te kunnen. Ik heb dit namelijk in Las Venturas Playground bij LV Airport gezien. Maar nu wil ik dat in mijn eigen server. Heeft iemand zo'n script, en misschien wat uitleg? Dan hoor ik dat graag.. :Y_O_

Groetjes SaKing

Geplaatst:

Zou met CheckPoints kunnen, of met AreaCheck. Kies maar welke je wilt hebben, dan geef ik daar wel een uitleg van:

-CheckPoints: Er word een checkpoint voor de ingang van bijvoorbeeld Las Venturas Airport gezet, die eventueel onzichtbaar is. Zodra je deze betreed, word je gevraagd om een prijsje te betalen.

-AreaCheck: Een heel gebied, zoals Las Venturas Airport word een uitgezonder gebied. Zodra je deze, maakt niet uit van welke kanten, betreed, word er om tol gevraagd. Dus ook als je met een helicopter over het hekje gaat, en dan probeert te landen.

Your choice :)

Geplaatst:
Zou met CheckPoints kunnen, of met AreaCheck. Kies maar welke je wilt hebben, dan geef ik daar wel een uitleg van:

-CheckPoints: Er word een checkpoint voor de ingang van bijvoorbeeld Las Venturas Airport gezet, die eventueel onzichtbaar is. Zodra je deze betreed, word je gevraagd om een prijsje te betalen.

-AreaCheck: Een heel gebied, zoals Las Venturas Airport word een uitgezonder gebied. Zodra je deze, maakt niet uit van welke kanten, betreed, word er om tol gevraagd. Dus ook als je met een helicopter over het hekje gaat, en dan probeert te landen.

Your choice :)

Nou dan wil ik graag de Area Check. Zou het ook mogelijk zijn om het over heel San fierro te kunnen laten gaan?

Zo ja, welke coordinaten moet ik dan hebben?

Alvast bedankt, SaKing

Geplaatst:

Areacheck, oke ;) Plaats deze code onderaan je script:

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

Die code controleert of jij in een opgegeven gebied komt.

Nu moet je aan de goede coördinaten komen van het gebied. Dat kan ik 2 manieren:

1. Linksboven in je gebied /save gebruiken, en rechtsonder ook.

Toch zal ik voor de volgende gaan, dat is zo makkelijk:

2. X-Treme's Visual Mapper: Maak snel een gebied met de goede coördinaten ;)

Hoe maak ik dan een gebied?

IsPlayerInArea(playerid, Minimale X positie, Maximale X positie, Minimale Y positie, Maximale Y positie);

Voorbeeld:

if(IsPlayerInArea(playerid, 4532.5, 264.0, 5332.4, 566.0)) //Coördinaten verzin ik ter plekke
{
SendClientMessage(playerid, COLOR, "You entered a zone!");
}

Nu willen we natuurlijk wel dat er regelmatig word gecontroleert of je al in een zone bent. Plaats dit bovenaan je script:

new AreaCheckTimer;
forward AreaCheck();

Ga nu naar OnGameModeInIt. Zet dit erin:

AreaCheckTimer = SetTimer("AreaCheck", 500, true);

Dit zorgt ervoor dat de callback AreaCheck om de 500 Milliseconden word doorlopen. Die callback gaan we nu maken.

Hier maken we een nieuwe callback. Die callback kan je ergens onderaan je script plaatsen, maar het liefst boven je STOCK die we net hebben gemaakt.

public Areacheck()
{
for(new i=0; i < MAX_PLAYERS; i++) // Alle playerid's doorlopen, de naam 'playerid' heet nu 'i'
{
	if(IsPlayerInArea(i, 4532.5, 264.0, 5332.4, 566.0))
	{
		//Doe wat je wilt als je de zone betreed
	}
	else if(IsPlayerInArea(i, 4566.5, 1345.3, 5464.0, 3567.0))
	{
		//Doe weer wat je wilt, als je een andere zone betreed
	}
	else
	{
		//Doe wat je wilt als je alle andere zones betreed, of niet meer in een zone bent
	}
}
return 1;
}

Ik hoop dat dat duidelijk is, zoniet, zeg het maar ;)

Voor de zekerheid nog even de volle code:

#include <a_samp>

new AreaCheckTimer;
forward AreaCheck();

OnGameModeInit()
{
AreaCheckTimer = SetTimer("AreaCheck", 500, true);
return 1;
}

OnGameModeExit()
{
KillTimer(AreaCheckTimer); // Als de GameMode word afgesloten, de timer ook
return 1;
}
public Areacheck()
{
for(new i=0; i < MAX_PLAYERS; i++) // Alle playerid's doorlopen, de naam 'playerid' heet nu 'i'
{
	if(IsPlayerInArea(i, 4532.5, 264.0, 5332.4, 566.0))
	{
		//Doe wat je wilt als je de zone betreed
	}
	else if(IsPlayerInArea(i, 4566.5, 1345.3, 5464.0, 3567.0))
	{
		//Doe weer wat je wilt, als je een andere zone betreed
	}
	else
	{
		//Doe wat je wilt als je alle andere zones betreed, of niet meer in een zone bent
	}
}
return 1;
}

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

Geplaatst:
Areacheck, oke ;) Plaats deze code onderaan je script:

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

Die code controleert of jij in een opgegeven gebied komt.

Nu moet je aan de goede coördinaten komen van het gebied. Dat kan ik 2 manieren:

1. Linksboven in je gebied /save gebruiken, en rechtsonder ook.

Toch zal ik voor de volgende gaan, dat is zo makkelijk:

2. X-Treme's Visual Mapper: Maak snel een gebied met de goede coördinaten ;)

Hoe maak ik dan een gebied?

IsPlayerInArea(playerid, Minimale X positie, Maximale X positie, Minimale Y positie, Maximale Y positie);

Voorbeeld:

if(IsPlayerInArea(playerid, 4532.5, 264.0, 5332.4, 566.0)) //Coördinaten verzin ik ter plekke
{
SendClientMessage(playerid, COLOR, "You entered a zone!");
}

Nu willen we natuurlijk wel dat er regelmatig word gecontroleert of je al in een zone bent. Plaats dit bovenaan je script:

new AreaCheckTimer;
forward AreaCheck();

Ga nu naar OnGameModeInIt. Zet dit erin:

AreaCheckTimer = SetTimer("AreaCheck", 500, true);

Dit zorgt ervoor dat de callback AreaCheck om de 500 Milliseconden word doorlopen. Die callback gaan we nu maken.

Hier maken we een nieuwe callback. Die callback kan je ergens onderaan je script plaatsen, maar het liefst boven je STOCK die we net hebben gemaakt.

public Areacheck()
{
for(new i=0; i < MAX_PLAYERS; i++) // Alle playerid's doorlopen, de naam 'playerid' heet nu 'i'
{
	if(IsPlayerInArea(i, 4532.5, 264.0, 5332.4, 566.0))
	{
		//Doe wat je wilt als je de zone betreed
	}
	else if(IsPlayerInArea(i, 4566.5, 1345.3, 5464.0, 3567.0))
	{
		//Doe weer wat je wilt, als je een andere zone betreed
	}
	else
	{
		//Doe wat je wilt als je alle andere zones betreed, of niet meer in een zone bent
	}
}
return 1;
}

Ik hoop dat dat duidelijk is, zoniet, zeg het maar ;)

Voor de zekerheid nog even de volle code:

#include <a_samp>

new AreaCheckTimer;
forward AreaCheck();

OnGameModeInit()
{
AreaCheckTimer = SetTimer("AreaCheck", 500, true);
return 1;
}

OnGameModeExit()
{
KillTimer(AreaCheckTimer); // Als de GameMode word afgesloten, de timer ook
return 1;
}
public Areacheck()
{
for(new i=0; i < MAX_PLAYERS; i++) // Alle playerid's doorlopen, de naam 'playerid' heet nu 'i'
{
	if(IsPlayerInArea(i, 4532.5, 264.0, 5332.4, 566.0))
	{
		//Doe wat je wilt als je de zone betreed
	}
	else if(IsPlayerInArea(i, 4566.5, 1345.3, 5464.0, 3567.0))
	{
		//Doe weer wat je wilt, als je een andere zone betreed
	}
	else
	{
		//Doe wat je wilt als je alle andere zones betreed, of niet meer in een zone bent
	}
}
return 1;
}

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

Ok bedankt, ik ga het eens proberen!!

SaKing

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