Jump to content

Probleem met scripten


Recommended Posts

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

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:

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: (bewerkt)

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: (bewerkt)

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:

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

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