Ist es möglich das man bei Fahrkarten-Automaten Fahrkartenverkauf Scripten kann? für den Zug? wenn ja, wie Funktioniert das?
Fahrkahrten-Automaten für den Zug
- schadra
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Klar, du kannst eine Abfrage machen ob er davor steht und dann via Menü/Textdraws den Kauf ermöglichen.
-
Kannst du scripten oder nicht?
-
Einfach sowas:
C
Alles anzeigen//Oben im Skript: new bool:ticket[MAX_PLAYERS char]; //Du erstellst ja z.B. irgendwo den zug: zug = AddStaticVehicle(...); //OnPlayerEnterVehicle if(vehicleid == zug && !IsPlayerNPC(playerid)) { if(!ticket{playerid}) { RemovePlayerFromVehicle(playerid); //Hier hat er halt kein Ticket... } else { ticket{playerid}=false; //Hier hat er es benutzt } } //Um dem Spieler irgendwo ein Ticket zu geben: if(ticket{playerid}) return SendClientMessage(playerid,-1,"Sie besitzen bereits ein Ticket!"); ticket{playerid} = true; //Hier gibst du ihm ein Ticket //Und unter OnPlayerConnect ticket{playerid}=false; //damit es immer resettet wird
-
Ja, das ist möglich, du kannst das sogar auf verschiedene Arten machen, diese wären:
- Objekt setzen + Pickup => Menü anzeigen bei OnPlayerPickUpPickup.
- Objekt setzen + Checkpoint => Menü anzeigen bei OnPlayerEnterCheckpoint (gegebenenfalls mit einem Checkpoint-Streamer).
- Wenn der Spieler in der Nähe des gesetzten Objektes einen Befehl (z.B. /automat) eingibt => Menü anzeigen.
- Per Timer/OnPlayerUpdate prüfen, ob der Spieler in der Nähe des Objektes ist => Menü anzeigen.Persönlich finde ich die Variante mit dem Pickup am sinnvollsten, vor allem weil es am wenigsten auf die Ressourcen geht und der Code am leichtesten ist, da man keine Berechnungen braucht, daher beschreibe ich dir diese Variante. Falls du eine andere der oben genannten haben willst, oder dir selbst noch eine einfällt, die du lieber haben willst, dann sag bitte Bescheid.
Unter den Includes die Deklaration für den Speicher der Objekt-IDs und Pickup-IDs:
C#define DIALOG_FAHRKARTEN 1403 new fahrkartenAutomat[10] = {-1,...}; //Maximal 10 Fahrkartenautomaten new fahrkartenPickup[10] = {-1,...};
Unter OnGameModeInit:CfahrkartenAutomat[0] = CreateObject(/*Model & Koordinaten hier einfügen*/); fahrkartenAutomat[1] = CreateObject(/*Model & Koordinaten hier einfügen*/); //... fahrkartenAutomat[9] = CreateObject(/*Model & Koordinaten hier einfügen*/);
[wiki]CreateObject[/wiki]
Und dazu dann, jeweils vor dem Fahrkartenautomaten, bzw. in ihm drin, so dass das Pickup nicht sichtbar ist, falls du das so haben willst:CfahrkartenPickup[0] = CreatePickup(/*Model & Koordinaten hier einfügen*/); fahrkartenPickup[1] = CreatePickup(/*Model & Koordinaten hier einfügen*/); //... fahrkartenPickup[9] = CreatePickup(/*Model & Koordinaten hier einfügen*/);
[wiki]CreatePickup[/wiki]
Dann brauchst du nur noch bei OnPlayerPickUpPickup folgendes einfügen:
Cfor(new i=0; i<sizeof(fahrkartenPickup); i++) { if(fahrkartenPickup[i] == pickupid) { ShowPlayerDialog(playerid, DIALOG_FAHRKARTEN, DIALOG_STYLE_LIST, "Fahrkartenautomat", "Text Hier\nUnd Hier\n...", "Ok", "Abbrechen"); return 1; } }
Und bei OnDialogResponse entsprechend dann die Aktionen durchführen, die gemacht werden sollen, wenn der Spieler das jeweilige Item ausgewählt hat:C
Alles anzeigenif(dialogid == DIALOG_FAHRKARTEN) { if(!response) return 1; switch(listitem) { case 0: { //... } case 1: { //... } //... } return 1; }
Anschließend musst du dann abfragen, ob der Spieler einen Zug betreten hat, oder nicht, und dort dann abfragen, ob er das korrekte Ticket für die Strecke gekauft hat (zuvor mit dem Dialog).Die entsprechend markierten Stellen musst du natürlich mit deinen Dingen ausfüllen.
-
breadfish.de
Hat das Thema geschlossen.