Clank Geplaatst: 21 januari 2008 Rapport Geplaatst: 21 januari 2008 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 Reageren
.Timothy Geplaatst: 21 januari 2008 Rapport Geplaatst: 21 januari 2008 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). Reageren
Clank Geplaatst: 21 januari 2008 Auteur Rapport Geplaatst: 21 januari 2008 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 Reageren
Hannovd Geplaatst: 22 januari 2008 Rapport Geplaatst: 22 januari 2008 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.. Reageren
Clank Geplaatst: 24 januari 2008 Auteur Rapport Geplaatst: 24 januari 2008 (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: 24 januari 2008 door Clank Reageren
Sandra Geplaatst: 24 januari 2008 Rapport Geplaatst: 24 januari 2008 (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: 24 januari 2008 door Sandra18[NL] Reageren
Clank Geplaatst: 24 januari 2008 Auteur Rapport Geplaatst: 24 januari 2008 (*)... je hebt gelijk. Moet ik dan beginnen met playerid en dan de coordinaten? Reageren
Sandra Geplaatst: 24 januari 2008 Rapport Geplaatst: 24 januari 2008 IsPlayerInArea(playerid, Float:minx, Float:maxx, Float:miny, Float:maxy) Volgens die functie wel ja.... Reageren
Ymosky Geplaatst: 24 januari 2008 Rapport Geplaatst: 24 januari 2008 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? Reageren
Twinsen Geplaatst: 25 januari 2008 Rapport Geplaatst: 25 januari 2008 Mocht het niet lukken, heb ik hier een link naar een goed werkend dm filterscript. (gebruik ik op mijn server ook) http://forum.sa-mp.com/index.php?topic=37229.0 Cheers, Twinsen (Hannibal_Smith) Reageren
Recommended Posts
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.