Jump to content

timer maken


keessie

Recommended Posts

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

Link to comment
Delen op andere websites

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.

Link to comment
Delen op andere websites

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 :puh:

grz

Bewerkt: door keessie
Link to comment
Delen op andere websites

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

Link to comment
Delen op andere websites

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

Link to comment
Delen op andere websites

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: door keessie
Link to comment
Delen op andere websites

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

Link to comment
Delen op andere websites

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 :N

Ik zal even kijken naar je script of ik een oplossing zie.

EDIT: Nee, lol ik zie het niet :(

Bewerkt: door Remi-X
Link to comment
Delen op andere websites

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.

Link to comment
Delen op andere websites

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