Skip to content
Bekijk in de app

Een betere weg om onze GTA community te volgen. Leer meer.

GTAGames.nl - De Nederlandse Grand Theft Auto Community!

Een volledig scherm app op het beginscherm inclusief notificaties, badges en meer.

Om deze app op je iPhone en iPad te installeren
  1. Druk op het icoon in Safari
  2. Scroll in het menu en druk op Zet op beginscherm.
  3. Druk op Voeg toe rechts bovenaan.
Om deze app op je Android toe te voegen
  1. Druk op het 3-punten menu (⋮) rechts bovenaan in de browser.
  2. Druk op Toevoegen aan beginscherm of Installeer app.
  3. Druk op Toevoegen om te bevestigen.

Probleem met scripten

Geplaatst:

Ik heb wat problemen met de volgende code:

complete code:

http://www.pastebin.ca/866481

de code onderaan:

bool:IsPositionInArea(Float:x,Float:y,Float:poss[][2],edges = sizeof poss)
{
if(edges < 3) return false;

new last = edges - 1,
Float:rsideangles = 0.0,
Float:lsideangles = 0.0;

for(new i = 0; i < edges; i++)
{
new next = (i == last) ? 0 : i + 1,
	next2 = (next == last) ? 0 : next + 1,
Float:langle,
Float:floats[4];

floats[0] = poss[next][1] - poss[i][1];
if(floats[0] < 0.0) floats[0] = poss[i][1] - poss[next][1];

floats[1] = poss[i][0] - poss[next][0];
if(floats[1] < 0.0) floats[1] = poss[next][0] - poss[i][0];

floats[2] = poss[next2][0] - poss[next][0];
if(floats[2] < 0.0) floats[2] = poss[next][0] - poss[next2][0];

floats[3] = poss[next2][1] - poss[next][1];
if(floats[3] < 0) floats[3] = poss[next][1] - poss[next2][1];

langle = atan(floats[0] / floats[1]) + atan(floats[2] / floats[3]) + 180;

lsideangles += langle;
rsideangles += 360.0 - langle;
}

if(lsideangles > rsideangles)
{
for(new i = 0; i < edges; i++)
{
new next = (i == last) ? 0 : i + 1,
Float:em = (poss[i][0] - poss[next][0]) / (poss[i][1] - poss[next][1]), // y = mx + c
Float:ec = poss[next][1] - (poss[next][0] * em);

if(poss[i][0] < poss[next][0])
{
if(y > ((em * x) + ec)) return false;
} else if(poss[i][0] > poss[next][0])
{
if(y < ((em * x) + ec)) return false;
} else if(poss[i][1] < poss[next][1])
{
		new Float:val = y - ec;
		if(em != 0) val /= em;
if(x < val) return false;
} else if(poss[i][1] > poss[next][1])
{
		new Float:val = y - ec;
		if(em != 0) val /= em;
if(x > val) return false;
}
}
} else if(lsideangles < rsideangles)
{
for(new i = 0; i < edges; i++)
{
new next = (i == last) ? 0 : i + 1,
Float:em = (poss[i][0] - poss[next][0]) / (poss[i][1] - poss[next][1]), // y = mx + c
Float:ec = poss[next][1] - (poss[next][0] * em);

if(poss[i][0] < poss[next][0])
{
if(y < ((em * x) + ec)) return false;
} else if(poss[i][0] > poss[next][0])
{
if(y > ((em * x) + ec)) return false;
} else if(poss[i][1] < poss[next][1])
{
		new Float:val = y - ec;
		if(em != 0) val /= em;
if(x > val) return false;
} else if(poss[i][1] > poss[next][1])
{
		new Float:val = y - ec;
		if(em != 0) val /= em;
if(x < val) return false;
}
}
} else return false;
return true;
}

code bovenaan

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

hier zou de functie in moeten staan

public OnPlayerDeath(playerid, killerid, reason)
{
if IsPositionInArea(playerid,2471.1379,-2297.2871,2330.9753,-2450.1772,2325.3369,-2722.1604,2843.7278,-2736.2388,2877.4270,-2302.5518),
},
	{
		SendDeathMessage(killerid, playerid, reason); // send deathmessage
		GivePlayerMoney(killerid, 1000); // give player 1000
	}
	else IsPositionInArea(playerid,0,0,100,100),
// else
	{
		SendDeathMessage(killerid, playerid, reason); // send deathmessage
		GivePlayerMoney(killerid, -10000); // give the player -10000
		}
}

Ik hoop dat iemand het kan fixen, want ik heb er al veel tijd aan besteed, en het is nog steeds niet gelukt. Degene die dit lukt krijgt natuurlijk een eervolle vermelding op de server.

TNX Clank

Featured Replies

Geplaatst:

Als je even wilt zeggen wat de error is die je krijgt, krijgen wij ook een idee wat het zou kunnen zijn, en zet desnoods even de betreffende regelnummers erbij. Sowieso heb ik nog nooit het gebruik van komma's gezien in Pawn(wel AddPlayerClass enzo, maar zo als jij het gebruikt niet).

Geplaatst:
  • Auteur

D:\Cas\GTASA\GTASAN~1\samp\GAMEMO~1\Freeroom.pwn(23) : error 025: function heading differs from prototype
D:\Cas\GTASA\GTASAN~1\samp\GAMEMO~1\Freeroom.pwn(327) : warning 202: number of arguments does not match definition
D:\Cas\GTASA\GTASAN~1\samp\GAMEMO~1\Freeroom.pwn(327) : warning 202: number of arguments does not match definition
D:\Cas\GTASA\GTASAN~1\samp\GAMEMO~1\Freeroom.pwn(327) : warning 202: number of arguments does not match definition
D:\Cas\GTASA\GTASAN~1\samp\GAMEMO~1\Freeroom.pwn(327) : warning 202: number of arguments does not match definition
D:\Cas\GTASA\GTASAN~1\samp\GAMEMO~1\Freeroom.pwn(327) : warning 202: number of arguments does not match definition
D:\Cas\GTASA\GTASAN~1\samp\GAMEMO~1\Freeroom.pwn(327) : warning 202: number of arguments does not match definition
D:\Cas\GTASA\GTASAN~1\samp\GAMEMO~1\Freeroom.pwn(328) : error 029: invalid expression, assumed zero
D:\Cas\GTASA\GTASAN~1\samp\GAMEMO~1\Freeroom.pwn(330) : error 008: must be a constant expression; assumed zero
D:\Cas\GTASA\GTASAN~1\samp\GAMEMO~1\Freeroom.pwn(333) : error 010: invalid function or declaration
D:\Cas\GTASA\GTASAN~1\samp\GAMEMO~1\Freeroom.pwn(335) : error 055: start of function body without function header
D:\Cas\GTASA\GTASAN~1\samp\GAMEMO~1\Freeroom.pwn(472) : error 025: function heading differs from prototype
D:\Cas\GTASA\GTASAN~1\samp\GAMEMO~1\Freeroom.pwn(472) : error 025: function heading differs from prototype
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


7 Errors.

hier zijn de errors

Geplaatst:

waarschijnlijk moet je beginnen met:

bool:IsPositionInArea(Float:x,Float:y,Float:poss[][2],edges = sizeof poss

)

te veranderen in:

new bool:IsPositionInArea(Float:x,Float:y,Float:poss[][2],edges = sizeof(poss));

Dan komen we op het volgende, het is heel goed dat je jouw functies forward, maar je forward heeft andere parameters dan je functie zelf..

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

Hier heb je 5 parameters achter je 'IsPositionInArea' staan, maar hier:

IsPositionInArea(Float:x,Float:y,Float:poss[][2],edges = sizeof(poss));

heb je maar 4 parameters, de code ziet er rommelig uit, een ik twijfel of het jouw eigen code is aangezien je niet weet wat er fout is, maar wel in staat bent de hele code te maken tot dusver..

Ik raad je aan een manuel te lezen..

Geplaatst:
  • Auteur

Je hebt gelijk ik heb die code niet zelf geschreven. Ik heb een tutorial gebruikt (ik geloof van gtaforum.nl). maar k heb het aangepast naar mijn eigen smaak (jullie staan bij credits erbij hoor). Maar ik heb het heel moeilijk aangepakt. Ik heb nu een simpelere versie (IsPlayerInArea), maar hij doet niks :S er komen geen errors, maar ook geenboetes bij het killen van iemand buiten de dm zone. misschien weten jullie het? ik doe dit namelijk met een vriend van mij, maar hij weet het ook al niet:S

bovenaan:

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

Code zelf (die de functie uitvoert)

public OnPlayerDeath(playerid, killerid, reason)
{
{
	   if (IsPlayerInArea(2367,-2327,2899,-2765,0) == 1)
		{
								  //Doe hier je ding met je slachtoffer


	{
		SendDeathMessage(killerid, playerid, reason); // send deathmessage
		GivePlayerMoney(killerid, 1000); // give player 1000
				}
	if (IsPlayerInArea(2367,-2327,2899,-2765,0) == 0)
	{
		SendDeathMessage(killerid, playerid, reason); // send deathmessage
		GivePlayerMoney(killerid, -1000); // give the player -1000
		}
	}
}
return 0;
}

en code onderaan

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

EDIT: ik denk dat ik er een stap voor stap tutorial van maak als het helemaal is gelukt.

Bewerkt: door Clank

Geplaatst:

Kijk eens goed naar die regel, er klopt helemaal niks van.

Vergelijk jou IsPlayerInArea-regel eens met de functie:

if (IsPlayerInArea(2367,-2327,2899,-2765,0) == 1)

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

Dit staat er nu bij jou:

- Als speler met het id '2367', tussen de coordinaten '-2327', '2899', '-2765' en '0' zit dan moet die rest van je OnPlayerDeath code uitgevoerd worden....

Bewerkt: door Sandra18[NL]

Geplaatst:
  • Auteur

(*)... je hebt gelijk. Moet ik dan beginnen met playerid en dan de coordinaten?

Geplaatst:

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

Volgens die functie wel ja....

Geplaatst:

Ik heb het allemaal zo'n beetje zitten doorlezen:

Als ik het goed begrijp is het doel als volgt: mensen mogen elkaar ALLEEN in de DeathMatch killen, mensen die elkaar daarbuiten killen krijgen een boete, toch?

je komt in die Deahtmatch door de command /deathmatch te gebruiken? (volgens de help-functie in je script)

dan lijkt mij het eenvoudigste om bij /deathmatch een waarde op 1 te laten zetten, bijvoorbeeld IsPlayerInDM. En als ze dm verlaten weer terug op 0.

daarna bij public OnPlayerDeath neerzetten dat als je killt en waarde 1 hebt geld krijgt, als je waarde 0 hebt krijg je een boete.

Ik kan evt. het script ervan hier neerzetten, maar kweetniet of je het zo bedoeld?

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.

Account

Navigatie

Zoeken

Zoeken

Configureer push berichten

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.