Brauche Hilfe mit Dialog

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
  • Hey Leute ich möchte was in ein Dialog gändert haben und brauche bissen hilfe
    Ich möchte das wenn ich in den Taxi einsteige das dan der Dialog Inpute kommt wo mann den Preis Eintragen Kann deswegen wolte ich fragen ob mir einer den behfehl hier in dialog ändern kann MfG LUi



    COMMAND:taxidienst(playerid,params[])
    {
    new string[128],pricetaxi,vehicleid = GetPlayerVehicleID(playerid);
    if(!isPlayerInJob(playerid,17))return SCM(playerid,SYSTEMGELB,"["TS"] Kein Taxifahrer.");
    if(!IsVehicleATaxi(GetPlayerVehicleID(playerid)))return SCM(playerid,SYSTEMGELB,"["TS"] In keinem Taxi.");
    if(GetPlayerVehicleSeat(playerid) != 0)return SCM(playerid,SYSTEMGELB,"["TS"] Nicht der Fahrer des Fahrzeugs.");
    if(sscanf(params,"d",pricetaxi)) return SCM(playerid,SYSTEMGELB,"["TS"] Verwende: /taxidienst [Preis]");
    Spieler[playerid][pTaxiDuty] = 1;
    PlayerTextDrawShow(playerid,TAXOdraw[playerid][1]);
    format(string,sizeof(string),"Dienstpreis: %i$",pricetaxi);
    PlayerTextDrawSetString(playerid,TAXOdraw[playerid][1],string);
    format(string,sizeof(string),"Taxifahrer/in %s ist im Dienst. Kosten %i$",SpielerName(playerid),pricetaxi);
    SCMALL(SYSTEMGELB,string);
    DestroyDynamic3DTextLabel(taxipriceinfo[GetPlayerVehicleID(playerid)]);
    VehicleOnDuty[GetPlayerVehicleID(playerid)] = true;
    format(string,sizeof(string),"San Andreas Taxi \nTaxifahrer/in: %s\nDienstpreis: %i$",SpielerName(playerid),pricetaxi);
    UpdateDynamic3DTextLabelText(vFahrzeug[vehicleid][VehText], TAXIFARBESYSTEM, string);
    PlayerTextDrawShow(playerid,TAXOdraw[playerid][0]);
    PlayerTextDrawSetString(playerid,TAXOdraw[playerid][0],"Frei...");
    PlayerTextDrawShow(playerid,TAXOdraw[playerid][2]);
    PlayerTextDrawSetString(playerid,TAXOdraw[playerid][2],"Frei...");
    PlayerTextDrawShow(playerid,TAXOdraw[playerid][3]);
    PlayerTextDrawSetString(playerid,TAXOdraw[playerid][3],"Frei...");
    return 1;
    }

  • Hey, leider wirds hier keinen geben, der so nett ist dir das zu machen.
    Ich hab gerad wenig Zeit, daher helfe ich etwas.


    Du musst als erstes das Taxi fest für den Taxijob definiert haben. Bei dir wäre das mit der Abfrage "IsVehicleATaxi".


    Dann musss die Abfrage bei folgendem Public/ Function eingefügt werden:


    Code
    Function OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)







    Nun fragst du das Fahrzeug ab, zum Beispiel als ID Oder Taxiveh.


    zB

    Code
    if(GetVehicleModel(vehicleid) == xxx)
    {
    }


    oder fals das Veh definiert ist:



    Code
    if(IsATPCar(vehicleid) )    {    }


    In der "if" kannst du natürlich auch abfragen, ob du als Fahrer einsteigst oder Beifahrer bist. Wenn nix abgefragt wird, löst die ABfrage immer aus.



    So also innerhalb der Klammern kanst du nun deine Dialoge ausführen lassen.



    Ich hoffe ich konnte dir etwas helfen.

    Blub

  • Da ich so etwas schonmal ausprobiert habe, poste ich das einfach mal. Ich bin allerdings kein Scripter und weiß, dass das Speichern der Text3D Variablen in PVarInts zu "tag mismatches" führt, aber für meine Zwecke (einfach zum Testen) war mir das egal und es ist einfacher und effizienter, das ganze so zu machen.



    Das mit den Dialogen kannst du aber im Prinzip genau so machen, den Rest kannst du ja anpassen.

    Einmal editiert, zuletzt von Madd92 ()

  • Brauche noch bissen hilfe wenn ich aus dem auto aussteige und wieder einsteige ob wohl ich im taxi noch Angemeldet bin also duty kommt der dialog noch mall ob wogl ich noch duty im taxi bit kann mir da einer helfen MfG Lui

    if(IsVehicleATaxi(vehicleid))
    {
    if(Spieler[playerid][pJob] != 17)
    {
    TextDrawShowForPlayer(playerid,InfoSign);
    PlayerTextDrawSetString(playerid,INFOdraw[playerid][2],"~r~Info:~w~~n~Du besitzt nicht den jeweiligen Job.");
    PlayerTextDrawShow(playerid,INFOdraw[playerid][2]);
    SetTimerEx("HideInfoBox",3000,0,"i",playerid);
    return RemovePlayerFromVehicle(playerid);
    }
    if(GetPlayerVehicleSeat(playerid) != 0)return SCM(playerid,SYSTEMGELB,"["TS"] Nicht der Fahrer des Fahrzeugs.");
    {
    ShowPlayerDialog(playerid, DIALOG_TAXIPICE, DIALOG_STYLE_INPUT, "{FFFF00}Taxi - Preis festlegen", "{FFFFFF}Lege den Preis für die Taxifahrt fest:", "Ok", "Abbrechen");
    }
    }




    case DIALOG_TAXIPICE:
    {
    if (!response)
    RemovePlayerFromVehicle(playerid); // Den Spieler aus dem Fahrzeug werfen, wenn er abbrechen drückt
    else
    {
    new taxifare = strval(inputtext);
    if (taxifare > 150 || taxifare < 50) // Ein maximales und minimales Limit für den Preis?
    {
    // Der Spieler kann es nochmal versuchen:
    ShowPlayerDialog(playerid, DIALOG_TAXIPICE, DIALOG_STYLE_INPUT, "{FFFF00}Taxi - Preis festlegen", "{FFFFFF}Lege den Preis für die Taxifahrt fest:", "Ok", "Abbrechen");
    return SCM(playerid, 0xFF0000FF, "[TAXI] Der Preis muss zwischen 50 und 150$ liegen.");
    }



    SetPVarInt(playerid, "taxifare", taxifare);
    new string[128],vehicleid = GetPlayerVehicleID(playerid);
    Spieler[playerid][pTaxiDuty] = 1;
    PlayerTextDrawShow(playerid,TAXOdraw[playerid][1]);
    format(string,sizeof(string),"Dienstpreis: %i$",taxifare);
    PlayerTextDrawSetString(playerid,TAXOdraw[playerid][1],string);
    format(string,sizeof(string),"Taxifahrer/in %s ist im Dienst. Kosten %i$",SpielerName(playerid),taxifare);
    SCMALL(SYSTEMGELB,string);
    VehicleOnDuty[GetPlayerVehicleID(playerid)] = true;
    format(string,sizeof(string),"San Andreas Taxi \nTaxifahrer/in: %s\nDienstpreis: %i$",SpielerName(playerid),taxifare);
    UpdateDynamic3DTextLabelText(vFahrzeug[vehicleid][VehText], TAXIFARBESYSTEM, string);
    PlayerTextDrawShow(playerid,TAXOdraw[playerid][0]);
    PlayerTextDrawSetString(playerid,TAXOdraw[playerid][0],"Frei...");
    PlayerTextDrawShow(playerid,TAXOdraw[playerid][2]);
    PlayerTextDrawSetString(playerid,TAXOdraw[playerid][2],"Frei...");
    PlayerTextDrawShow(playerid,TAXOdraw[playerid][3]);
    PlayerTextDrawSetString(playerid,TAXOdraw[playerid][3],"Frei...");
    format(string, sizeof(string), "[TAXI] Du hast den Preis auf %d$ festgelegt.", taxifare);
    return SCM(playerid, 0xFFFF00FF,string);
    }
    }

  • Verwendest du OnPlayerStateChange und speicherst du, ob der Spieler im Dienst ist, bzw. die Fahrzeug-ID? Dann einfach bei if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER) und danach mit der Abfrage, ob das Fahrzeug ein Taxi ist, auch abfragen, ob der Spieler schon im Dienst ist. Gegebenenfalls auch noch prüfen, ob das Fahrzeug das selbe ist. Aber einfacher wäre es eben, den Dienst des Spielers zu beenden, wenn er aussteigt, so wie es bei mir der Fall ist.

    C
    else if (oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT) // Der Spieler verlässt als Fahrer ein Fahrzeug
        {
                    if (!GetPVarInt(playerid, "taxiid"))
                          return 1;
    		Delete3DTextLabel(GetPVarInt(playerid, "taxiid"));
                    // Dienstvariable auf 0 setzen?
    		SetPVarInt(playerid, "taxiid", 0);
    		return SendClientMessage(playerid, 0xFFFF00FF, "[TAXI] Du hast deinen Dienst beendet.");
        }
  • C
    if(GetPlayerVehicleSeat(playerid) != 0)return SCM(playerid,SYSTEMGELB,"["TS"] Nicht der Fahrer des Fahrzeugs.");
    if (Spieler[playerid][pTaxiDuty]) return true;
    
    
    ShowPlayerDialog(playerid, DIALOG_TAXIPICE, DIALOG_STYLE_INPUT, "{FFFF00}Taxi - Preis festlegen", "{FFFFFF}Lege den Preis für die Taxifahrt fest:", "Ok", "Abbrechen");

    Im Prinzip so, aber das wird wie gesagt zu Problemen führen, wenn das Taxi nicht das gleiche ist z.B.


  • if(IsVehicleATaxi(vehicleid))
    {
    if(Spieler[playerid][pJob] != 17)
    {
    TextDrawShowForPlayer(playerid,InfoSign);
    PlayerTextDrawSetString(playerid,INFOdraw[playerid][2],"~r~Info:~w~~n~Du besitzt nicht den jeweiligen Job.");
    PlayerTextDrawShow(playerid,INFOdraw[playerid][2]);
    SetTimerEx("HideInfoBox",3000,0,"i",playerid);
    return RemovePlayerFromVehicle(playerid);
    }
    if(Spieler[playerid][pTaxiDuty] == true)
    {
    ShowPlayerDialog(playerid, DIALOG_TAXIPICE, DIALOG_STYLE_INPUT, "{FFFF00}Taxi - Preis festlegen", "{FFFFFF}Lege den Preis für die Taxifahrt fest:", "Ok", "Abbrechen");
    }


    }

  • Wenn du die Variable auf 1 setzt, dann muss du natürlich abfragen ob die Variable 0 ist:

    C
    if(Spieler[playerid][pTaxiDuty] == false)


    Oder eben wie ich es geschrieben hatte:


    C
    if (Spieler[playerid][pTaxiDuty]) return true;
  • Initialisiert du das Array denn, bzw. setzt du den Wert noch irgendwo anders? Denn wenn nicht, wird es mit dem Wert 0 oder eben false initialisiert. Heißt, der Dialog wird dann nur angezeigt, wenn die Variable auch 0 ist, zum Beispiel wenn sie noch gar nicht gesetzt wurde.

  • Das funktioniert also nicht?