Jump to content
View in the app

A better way to browse. Learn more.

GTAGames.nl - De Nederlandse Grand Theft Auto Community!

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Probleem met scripten

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

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

  • Author

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

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

  • Author

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.

Edited by Clank

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

Edited by Sandra18[NL]

  • Author

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

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

Volgens die functie wel ja....

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?

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

Configure browser push notifications

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.