keessie Geplaatst: 31 maart 2009 Rapport Geplaatst: 31 maart 2009 hallo ik ben bezig met een bewegend piratenschip nu is het bewegen al af maar ik wil nog een bug fixen dat je er niet afvalt daar kan je toch een timer voor gebruiken? mijn idee was alsvolgt: als je /forward doe gaat het schip vooruit en jij wordt elke seconde(of halve als dat ook mogelijk is) geteleporteerd terug naar het schip. zodat je erniet af glijd of is er een mogelijkheid dat je op het schip blijft staan zonder dat je mee hoeft te lopen? grz Reageren
Sandra Geplaatst: 31 maart 2009 Rapport Geplaatst: 31 maart 2009 Het kan wel, maar je kan dan helemaal niet meer lopen. Je zou dus bijvoorbeeld een timer kunnen laten lopen met een interval van 1 seconde die je telkens naar de huidige positie van het schip teleporteerd. new Float:X, Float:Y, Float:Z; GetObjectPos(schip, X, Y, Z); SetPlayerPos(playerid, X, Y, Z+5); Ik heb Z+5 gedaan, want anders word je ergens in de binnenkant van het schip gezet. Je zal die '5' nog moeten veranderen naar een juiste hoogte Ik hoop dat je het idee een beetje begrijpt. Reageren
keessie Geplaatst: 31 maart 2009 Auteur Rapport Geplaatst: 31 maart 2009 (bewerkt) ja ik denk het wel maar je zegt dat je dan helemaal niet meer kan lopen maar als je /stop typt kan je dan de timer stoppen zodat je wel weer kan lopen? en ik ben nog niet een ervaren scripter dus ik weet nog niet helemaal hoe je die timer met interval maakt grz Bewerkt: 31 maart 2009 door keessie Reageren
Sandra Geplaatst: 31 maart 2009 Rapport Geplaatst: 31 maart 2009 Je kan die timer wel stoppen, maar dan beweegt het schip wel weer onder je door. Een timer maak je zo: SetTimerEx("TeleNaarSchip", 1000, 1, "i", playerid); De "TeleNaarSchip" is de naam van de callback die word geactiveerd. Dus ergens (onderaan) in je script krijg je zoiets als: forward TeleNaarSchip(playerid); public TeleNaarSchip(playerid) { new Float:X, Float:Y, Float:Z; GetObjectPos(schip, X, Y, Z); SetPlayerPos(playerid, X, Y, Z+5); } Reageren
David22 Geplaatst: 31 maart 2009 Rapport Geplaatst: 31 maart 2009 Op deze manier kan je de timer met een command in- en uitschakelen, en het script controleert of de timer aan of uit moet. new Timer; //variabele voor de timer aanmaken new TimerActivated[MAX_PLAYERS]; //variabele waarmee je kan controleren of de speler de timer heeft ingeschakeld. OnPlayerConnect(playerid) { TimerActivated[playerid] = 0; //de speler heeft de timer niet gebruikt, variabele is dus 0 return 1; } OnPlayerCommandText(playerid, text[]) { if(!strcmp("/timer", text, true)) { if(TimerActivated[playerid] == 0) //als de speler de timer nog niet heeft gebruikt { //dan... Timer = SetTimerEx("TeleNaarSchip", 1000, 1, "i", playerid); // zet de timer aan TimerActivated[playerid] = 1; //de speler heeft de timer nu wel gebruikt. return 1; //functie beëindigen } else if(TimerActivated[playerid] == 1) //als de speler de timer al heeft gebruikt: { KillTimer(Timer); //de timer uitzetten TimerActivated[playerid] = 0; //de speler kan de timer met de volgende /timer weer aanzetten return 1; } } return 0; } Uiteraard moet je wel de code van hierboven gebruiken . Reageren
keessie Geplaatst: 31 maart 2009 Auteur Rapport Geplaatst: 31 maart 2009 (bewerkt) ok ik heb het erin gezet maar krijg nu 5 warnings en 5 errors het is nogal een groot script maar ik heb dit nu bovenaan new Timer; new TimerActivated[MAX_PLAYERS]; if(strcmp(cmdtext,"/sforward1",true)==0) { if(TimerActivated[playerid] == 0) { Timer = SetTimerEx("TeleNaarSchip", 1000, 1, "i", playerid); TimerActivated[playerid] = 1; return 1; } else if(TimerActivated[playerid] == 1) { KillTimer(Timer); TimerActivated[playerid] = 0; return 1; } en daaronder dan de dingen om vooruit te gaan onderaan heb ik dan forward TeleNaarSchip(playerid); public TeleNaarSchip(playerid) { new Float:X, Float:Y, Float:Z; GetObjectPos(schip, X, Y, Z); SetPlayerPos(playerid, X, Y, Z+6); } ik zal het script wel ff uploaden op pastebin klik grz Bewerkt: 31 maart 2009 door keessie Reageren
David22 Geplaatst: 31 maart 2009 Rapport Geplaatst: 31 maart 2009 Het helpt als je verteld welke errors en warnings je krijgt... Reageren
keessie Geplaatst: 1 april 2009 Auteur Rapport Geplaatst: 1 april 2009 ja dat zal zeker wel handig zijn D:\program files\Sony Setup\Grand Theft Auto San Andreas\server\filterscripts\Ship.pwn(320) : warning 225: unreachable code D:\program files\Sony Setup\Grand Theft Auto San Andreas\server\filterscripts\Ship.pwn(320) : warning 217: loose indentation D:\program files\Sony Setup\Grand Theft Auto San Andreas\server\filterscripts\Ship.pwn(447) : warning 225: unreachable code D:\program files\Sony Setup\Grand Theft Auto San Andreas\server\filterscripts\Ship.pwn(447) : warning 217: loose indentation D:\program files\Sony Setup\Grand Theft Auto San Andreas\server\filterscripts\Ship.pwn(573) : warning 225: unreachable code D:\program files\Sony Setup\Grand Theft Auto San Andreas\server\filterscripts\Ship.pwn(573) : warning 217: loose indentation D:\program files\Sony Setup\Grand Theft Auto San Andreas\server\filterscripts\Ship.pwn(638) : warning 217: loose indentation D:\program files\Sony Setup\Grand Theft Auto San Andreas\server\filterscripts\Ship.pwn(638) : error 029: invalid expression, assumed zero D:\program files\Sony Setup\Grand Theft Auto San Andreas\server\filterscripts\Ship.pwn(638) : error 017: undefined symbol "TeleNaarSchip" D:\program files\Sony Setup\Grand Theft Auto San Andreas\server\filterscripts\Ship.pwn(639) : error 029: invalid expression, assumed zero D:\program files\Sony Setup\Grand Theft Auto San Andreas\server\filterscripts\Ship.pwn(639) : error 017: undefined symbol "TeleNaarSchip" D:\program files\Sony Setup\Grand Theft Auto San Andreas\server\filterscripts\Ship.pwn(646) : error 030: compound statement not closed at the end of file (started at line 195) de errors zijn voornamelijk bij een nieuwe command met if(strmp(cmdtext grz Reageren
Remi-X Geplaatst: 2 april 2009 Rapport Geplaatst: 2 april 2009 (bewerkt) Voor de loose indentations: Plaats dit bij je Defines, of ergens daar in de buurt en van deze warning ben je af. #pragma tabsize 0 Dan, voor je Unreachable code: Er zal waarschijnlijk wel ergens een return missen. Undefined Symbol. Spreekt eigenlijk wel voor zich. Onherkend symbool. Dus TeleNaarSchip heb je niet gedefineerd, of je hebt een typfout. compound statement not closed at the end of file: Ken ik niet Ik zal even kijken naar je script of ik een oplossing zie. EDIT: Nee, lol ik zie het niet Bewerkt: 2 april 2009 door Remi-X Reageren
Big Boss Geplaatst: 2 april 2009 Rapport Geplaatst: 2 april 2009 Voor de loose indentations:Plaats dit bij je Defines, of ergens daar in de buurt en van deze warning ben je af. #pragma tabsize 0 En dan krijg je op den duur zo'n script: public OnPlayerConnect(playerid) { { blabla } { blabla } return 1; } Beter is om gewoon de indentation meteen goed te doen. 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.