Einfach nur ein Pickup hinsetzen mit der ID 23, also so:
CreatePickup(MODELID,23,X,Y,Z,-1);
Und die Abfrage mit RangeOfPoint packst du in /drivein rein
Einfach nur ein Pickup hinsetzen mit der ID 23, also so:
CreatePickup(MODELID,23,X,Y,Z,-1);
Und die Abfrage mit RangeOfPoint packst du in /drivein rein
Du musst einen Dialog ja auch nicht definieren, aber dann musst du eine Zahl in die Funktion schreiben
Die Errorzeile gibt an das die Parameter nicht richtig angegeben wurden.
Die Funktion heisst übersetzt "IstSpielerInReichweiteEinesPunktes", du hast zwar die Koordinaten angegeben, aber nicht die Reichweite, sprich den Radius um die Koordinate herum.
Richtig heisst deine Abfrage also:
if(IsPlayerInRangeOfPoint(playerid,3.0,1214.0985,-904.3343,42.9216))
3.0 ist der Radius.
Ist auch logisch weil die Funktion anders geschrieben wird. Sie wird "IsPlayerInRangeOfPoint" geschrieben. Falls es noch nie jemanden aufgefallen ist, dass Wörter in Pawn zwar aneinandergereiht, aber groß geschrieben werden, z.B. SendClientMessage
Habe das mit dem Timer nun draussen, aber mal eine andere Frage zum selben System. Ich möchte Tickets am Automaten und im Bus (Modelid 431) kaufen können. Dazu habe ich diese Abfrage verändert. An den Koordinaten kann man kaufen, jedoch nicht im Bus. Wieso?
ocmd:ticketkaufen(playerid,params[])
{
if(GetVehicleModel(vehicleid) == 431 || IsPlayerInRangeOfPoint(playerid,3.0,1436.5356,2656.1499,11.3926) || IsPlayerInRangeOfPoint(playerid,3.0,2840.6609,1276.1277,11.3906) || IsPlayerInRangeOfPoint(playerid,3.0,2840.5479,1304.0836,11.3906) || IsPlayerInRangeOfPoint(playerid,3.0,2856.7517,1314.5154,11.3906) || IsPlayerInRangeOfPoint(playerid,3.0,2857.1738,1266.7858,11.3906))
{
TicketGekauft=true;
GivePlayerMoney(playerid,-TICKETPREIS);
SendClientMessage(playerid,COLOR_GREEN, "Du hast dir für 5$ ein Ticket der SATS gekauft");
GameTextForPlayer(playerid,"~y~-~r~5$",6000,1);
return 1;
}
return 1;
}
//E: Hat sich erledigt, ich habe trotteligerweise vergessen die Vehicleid mir zu besorgen.
Mit dem Timer funktionierts nun, okay dann ist man eine Erfahrung reicher. Welche Möglichkeiten fallen euch sonst noch ein?
Hab den Timer als MAX_PLAYERS Variable erstellt, ginge das auch oder wozu die Schleife an der Stelle?
Nee ich schreibe ein Selfmade
Ich probiere das kurz mit dem Timer, wobei ich das nicht als Resourcenschonend ansehe xD
Man braucht kein Timer dafür o.o
Das geht auch ohne...
Bisher leider nicht und die Koordinaten stimmen schon. Noch jemand eine Lösung? Ansonsten muss ich mir was anderes einfallen lassen.
Der Gametext wird nicht angezeigt, obwohl ich direkt da stehe.
@Tommy: Muss ein Timer unbedingt nötig sein bei einem Public? Ich hätte gedacht das geht auch ohne. Mal angenommen das stimmt, dass wäre dann ja sicherlich nicht Resourcenschonend oder?
Hallo Leute ich komme hier nicht weiter, wünsche mir das mir jemand kurz hilft
Ich habs mit IsPlayerInRangeOfPoint und der Funktion PlayerToPoint ausprobiert. Beides geht nicht.
Hier der Code:
public Tickets(playerid)
{
if(PlayerToPoint(1.0,playerid, 1436.5356,2656.1499,11.3926) || (playerid,1.0,2840.6609,1276.1277,11.3906) || (playerid,1.0,2840.5479,1304.0836,11.3906) || (playerid,1.0,2856.7517,1314.5154,11.3906) || (playerid,1.0,2857.1738,1266.7858,11.3906))
{
GameTextForPlayer(playerid, "~w~/~r~ticketkaufen", 3000, 4);
}
return 1;
}
Der Server muss FTP Zugang haben, die Zugangsdaten wirst du ja wohl besitzen. Auf diesen loggst du dich mit einem FTP Client (z.B. WinScp) ein und lädtst die Dateien hoch.
Die SErverdateien erhälst du hier(http://www.sa-mp.com/download.php), je nachdem ob du einen Windows oder Linux Server hast, musst du ein anderes Paket herunterladen.
Ausserdem benötigst du einen Gamemode. Samp hat vorab fertige Gamemodes integriert. Selbst erstellte sind, wie man sich vorstellen, aber halt um einiges toller.
Tunings speichern
Jobs erstellen
Tanksystem
Bus/Bahn System
Shopsystem
Banksystem
usw.
Halt ein eigenes RL Script.
Ich wollte mir einen Gametext anzeigen lassen, sobald man in der nähe folgender Koordinaten ist. Passiert allerdings gerade gar nichts. Liegt das am Public?
public Tickets(playerid)
{
if(IsPlayerInRangeOfPoint(playerid, 1.0, 1436.5356,2656.1499,11.3926) || (playerid,1.0,2840.6609,1276.1277,11.3906) || (playerid,1.0,2840.5479,1304.0836,11.3906) || (playerid,1.0,2856.7517,1314.5154,11.3906) || (playerid,1.0,2857.1738,1266.7858,11.3906))
{
GameTextForPlayer(playerid, "~w~/~r~ticketkaufen", 3000, 4);
}
return 1;
}
if(pickupid == ADACSymbol)
{
new pName[MAX_PLAYER_NAME], save[28],santow;
GetPlayerName(playerid,pName,sizeof(pName));
format(save,sizeof(save),"/Spieler/%s.ini",pName);
if(dini_Exists(save))
{
sInfo[playerid][job] = dini_Int(save,"job");
if(sInfo[playerid][job] == 3 && OnDuty[playerid] == 0)
{
santow = SetTimerEx("SanTow", 10000, true, "i", playerid);
Color[playerid] = GetPlayerColor(playerid);
SkinSave[playerid] = GetPlayerSkin(playerid);
SetPlayerSkin(playerid, 50);
SetPlayerColor(playerid, COLOR_ORANGE);
SendClientMessage(playerid, COLOR_ORANGE, "Willkommen im Dienst als Pannenhelfer!");
OnDuty[playerid] = 1;
}
else if(OnDuty[playerid] == 1)
{
SetPlayerSkin(playerid, SkinSave[playerid]);
SetPlayerColor(playerid, Color[playerid]);
SendClientMessage(playerid, COLOR_ORANGE, "Dienst als Pannenhelfer beendet!");
OnDuty[playerid] = 0;
KillTimer(santow);
}
else
{
SendClientMessage(playerid, COLOR_RED, "Info: Du musst dich erst als Pannenhelfer bewerben.");
}
}
return 1;
}
Der Titel sagt alles, ich gehe in Job und der Timer startet, allerdings wird er nicht beendet. Wo hab ich da einen Logikfehler?
Der Timer soll jetzt eine Stunde durchgehend laufen Daher wird erst dann ne 1 dran gehängt. Würde er vorher das Spiel verlassen, wäre die Zeit wieder weg.
Und dadurch würde er die gesammte Anzahl an Millisekunden speichern bei der er grad war wo der den Server verlassen hat und setzt es dann auch entsprechend fort?
Dann setze den Intervall auf 60000.
Ich habs sogar noch höher eingestellt und es geht nicht. Ich habe das ganze in die Userdatei schreiben lassen, da stand eben ein Wert von 451 drin. Das haut nicht ganz hin.
//E: Kp warum es eben auf 451 stand, aber der Timer scheint nun richtig zu laufen. Nun meine letzte Frage und zwar mal angenommen der Timer zählt seine Millisekunden und irgendwann beendet eine Person das Spiel. Wie kann ich an der Stelle des Disconnects, die Zeit Zwischenspeichern in Dini. Also ich weiss zwar wie man speichert, aber ich weiss immernoch nicht wie ich den Timer auslesen lassen könnte. Ich hoffe es versteht jemand was ich meine
Das klappt nun mit dem Timer, allerdings ist der Timer extrem schnell. Trotzdem ich ihn auf eine Stunde nun gestellt habe, läuft er so schnell, dass mein Score beim Spawn schon 451 betrug.
Kannst du mir ein Beispiel geben? Ich kriege das grad nicht hin, Syntax Fehler -.-
Ich sobald der GM lädt, aber der Timer ist auf Wiederholung eingestellt, also sollte ich ja was davon mitbekommen. Kann man einen Timer irgendwie auslesen lassen bei welcher Sekunde er grad ist und diese sendet in einer SendClientMessage oder via printf? Wüsste sonst grad keine Lösung.