Ticketsystem

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

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • 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? :S

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • public Tickets(playerid)
    {
    if(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))
    {
    GameTextForPlayer(playerid, "~w~/~r~ticketkaufen", 3000, 4);
    }
    return 1;
    }


    PS: Ansonsten noch mal die Coords überprüfen z.b mit einem /gototicket befehl oder so..

  • Nein, mach einen Timer oder dort einen Pickup hin....
    Und dann mit einem Pickup:


    OnPlayerPickupPickup arbeiten...

    Zita aus dem Livestream chat von Internetlink von BigYoda ;)


    Zitat

    BigYoda: Ink sagt: "Ach OnGamemodeInit brauchen wir nicht löschen" Yoda: "Was ist das andere für ein Kram?". Ink: "Egal lösch einfach alles". Tutorial Ende :D





    DDG is Back


    Froum: DDG Forum
    Server IP: 85.25.20.59:7777
    Team Speak 3: 85.25.20.59

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

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Nee ich schreibe ein Selfmade ^^
    Ich probiere das kurz mit dem Timer, wobei ich das nicht als Resourcenschonend ansehe xD

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • nicht vergessen das ganze in eine for Schleife einzubauen wenn du es mit einem Timer machen willst ;)


    Ressourcenschonender wäre es aber defintitv, falls du mit einem Pickup arbeitest, das ganze einfach unter OnPlayerPickUpPickup zu packen.

  • Mit dem Timer funktionierts nun, okay dann ist man eine Erfahrung reicher. :D 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?

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • So , sorry noch mal.


    Also du machst erstmal ganz oben im Script



    new TexteTimer;
    forward Texte();


    Dann machst du unter OnGameModeInit:

    TexteTimer = SetTimer("Texte", 1000, 1);


    Und unter OnGameModeExit:

    KillTimer(TexteTimer);


    Und ganz unten Im Script machst du:



    Public Texte()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerInRangeOfPoint(i,3.0,1436.5356,2656.1499,11.3926) || IsPlayerInRangeOfPoint(i,3.0,2840.6609,1276.1277,11.3906) || IsPlayerInRangeOfPoint(i,3.0,2840.5479,1304.0836,11.3906) || IsPlayerInRangeOfPoint(i,3.0,2856.7517,1314.5154,11.3906) || IsPlayerInRangeOfPoint(i,3.0,2857.1738,1266.7858,11.3906))
    {
    GameTextForPlayer(i, "~w~/~r~ticketkaufen", 3000, 4);
    }
    }
    return 1;
    }


    So, und nun kannst du ganz einfach immer mehr solche dinger in "Texte" einfügen


    //Edit: Playerid -> i

    ktos-dev.de
    Webentwicklung & Gestaltung uvm.

    Einmal editiert, zuletzt von Nico65 ()

  • 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. :rolleyes:

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche


  • Ich weiss, war auch nur ein Boolean zum testen. Wird jetzt eh über Dini gespeichert :D Trotzdem danke.


    //E: Ich habe eine große Frage und zwar wird man nun nicht mehr aus dem Zug geworfen, wenn man kein Ticket hat. Beim Bus klappt das jedoch. Für die Brownstreak, habe ich die Modelid 538 verwendet.


    OnPlayerEnterVEhicle:
    if(GetVehicleModel(vehicleid) == 431 || GetVehicleModel(vehicleid) == 538)
    {
    sInfo[playerid][gotticket] = dini_Int(save,"gotticket");
    if(sInfo[playerid][gotticket] == 0)
    {
    SetTimerEx("TicketKaufen", 10000,false, "i", playerid);
    SendClientMessage(playerid,COLOR_RED,"Du musst dir erst ein Fahrticket der SATS für 5$ kaufen!");
    SendClientMessage(playerid,COLOR_RED,"Verwende dazu /ticketkaufen");
    }
    if(sInfo[playerid][gotticket] == 1)
    {
    dini_IntSet(save, "gotticket", 0);
    }
    }


    public TicketKaufen:
    public TicketKaufen(playerid)
    {
    new pName[MAX_PLAYER_NAME], save[62];
    GetPlayerName(playerid,pName,sizeof(pName));
    format(save,sizeof(save),"/Spieler/%s.ini",pName);
    sInfo[playerid][gotticket] = dini_Int(save,"gotticket");
    if(sInfo[playerid][gotticket] == 0)
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,COLOR_RED,"Du benötigst ein gültiges Fahrticket zum Mitfahren");
    }
    }

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

    Einmal editiert, zuletzt von Addickted ()

  • Versuche es mal so


    if(GetVehicleModel(vehicleid) == 431 || GetVehicleModel(vehicleid) == 538)
    {
    sInfo[playerid][gotticket] = dini_Int(save,"gotticket");
    if(sInfo[playerid][gotticket] == 0)
    {
    SetTimerEx("TicketKaufen", 10000,false, "i", playerid);
    SendClientMessage(playerid,COLOR_RED,"Du musst dir erst ein Fahrticket der SATS für 5$ kaufen!");
    SendClientMessage(playerid,COLOR_RED,"Verwende dazu /ticketkaufen");
    RemovePlayerFromVehicle(playerid);
    }
    if(sInfo[playerid][gotticket] == 1)
    {
    dini_IntSet(save, "gotticket", 0);
    }
    }

  • Dann würde er ihn ja sofort aus dem Fahrzeug werfen, sofern er kein Ticket hat. Aber ich habe extra den Timer, damit man noch z.B. im Bus sich ein Ticket kaufen kann.
    Das muss an der ModelID der BrownStreak liegen, weil beim Bus klappt es astrein so wie es grad ist :)

    "Dem wird befohlen, der sich nicht selbst gehorchen kann" - Friedrich Nietzsche

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen