Fragen zu Taxisystem

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


    Ich habe mir gedacht, da ich überhaupt nicht weiß wie ich anfangen soll, euch zu fragen.


    Undzwar geht es um ein Taxisystem, dass aber nicht nach Zeit berechnet sondern nach gefahrenen Metern.
    Bsp:
    Spieler A
    Taxifahrer


    "Spieler A steig in das Auto von Taxifahrer, beginnen wir mit 5$ für die Fahrt an sich und auf jeden gefahrenen Kilometer gibt es dann 10$ zuschlag"
    Hat der Spieler bsp bei 60$ kein Geld mehr, wird er aus dem Taxi geschmissen"


    Versteht ihr wie ich es meine?
    Wie frage ich das alles ab, vorallem wieviele Km ein Spieler fährt^^


    Ich habe nur eine Funktion fürs Tacho im Script:


    Spoiler anzeigen
    GetPlayerSpeed(playerid)
    {
    new Float:ST[4];
    if(IsPlayerInAnyVehicle(playerid))
    GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]);
    else GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]);
    ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 179.28625;
    return floatround(ST[3]);
    }

    Spoiler anzeigen
    /*stock GetVehicleSpeed(vehicleid)
    {
    new Float:_Pos[3];
    GetVehicleVelocity(vehicleid,_Pos[0],_Pos[1],_Pos[2]);
    return floatround(floatsqroot(_Pos[0]*_Pos[0] + _Pos[1]*_Pos[1] + _Pos[2]*_Pos[2]))*200;
    }*/


    Hoffe auf Hilfe, vielen dank!


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Hi,


    könntest du mir ein Beispiel geben das leicht zu verstehen ist?
    Bin noch ziemlich neu im Scripten :)


    Mit freundlichen Grüßen


    @:Jeffry :love:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    2 Mal editiert, zuletzt von ENEF () aus folgendem Grund: Jeffry hinzugefügt

  • Hallo,


    ich habe es jetzt mal mit Zeit gemacht nur um zu testen ob es geht.
    Es hat geklappt, jedoch muss ich ein paar Anmerkungen machen undzwar;


    Ich habe es mit einem Timer geregelt, der jede 10 Sekunden den Preis verdoppelt.
    Leider wird beim Einsteigen nicht direkt der Fahrpreis berechnet sondern erst nach 10 Sekunden.
    Es sollte eigentlich so sein das wenn der Spieler einsteigt es ihm bsp direkt sagt Fahrpreis 11 $
    Dann nach 1 KM soll es sich verdoppeln, nicht nach 10 Sekunden(hab es jetzt nur zum testen gemacht)


    Dann soll der Spieler rausgeworfen werden wenn er nicht genug Geld hat(jetzt kommt man ins Minus)
    Und einsteigen soll man erst garnicht können man soll direkt Removed werden.
    Mein Code:
    Kopf:

    Spoiler anzeigen
    //________Taxi_________//
    #define PAY_TIME 10//Nach 10 Sekunden, am besten hier einstellbar ab wieviel KM
    new player_preis[MAX_PLAYERS];
    new player_taxi[MAX_PLAYERS];
    new pay_taxi[MAX_PLAYERS];
    new payed[MAX_PLAYERS];
    forward check_taxi(playerid,fahrerid,kosten);


    OnPlayerStateChange

    Spoiler anzeigen
    //_______Taxi System________//
    new frak = GetVehicleFrak(vehicleid);
    if(newstate == PLAYER_STATE_DRIVER && SpielerInfo[playerid][pTeam] == 4)
    {
    if(frak == 4)
    {
    player_taxi[playerid]=GetPlayerVehicleID(playerid);
    }
    }
    else if(newstate == PLAYER_STATE_PASSENGER)
    {
    if(frak == 4)
    {
    for(new t=0;t<MAX_PLAYERS;t++)
    {
    if(t != playerid)
    {
    if(GetPlayerVehicleID(playerid) == player_taxi[t])
    {
    return pay_taxi[playerid]=SetTimerEx("check_taxi",PAY_TIME*1000,1,"ddd",playerid,t,player_preis[t]);
    }
    }
    }
    }
    }
    if(oldstate == PLAYER_STATE_PASSENGER || oldstate == PLAYER_STATE_DRIVER )
    {
    player_taxi[playerid]=0;
    payed[playerid]=0;
    return KillTimer(pay_taxi[playerid]);
    }


    Command:

    Spoiler anzeigen
    ocmd:fahren(playerid,params[])
    {
    if(SpielerInfo[playerid][pTeam] != 4 && SpielerInfo[playerid][pDuty] != 4) return SendClientMessage(playerid, error, "Du bist kein Taxifahrer oder nicht im Dienst!");
    new preis,say[80];
    if(sscanf(params, "d",preis)) return SendClientMessage(playerid, info,"Benutze: /fahren [PREIS]");
    else if(preis > 200 || preis < 1) return SendClientMessage(playerid, warn, "Preis muss zwischen 1$ und 75$ liegen!");
    else if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, error, "Du musst in einem Auto sitzen!");
    player_preis[playerid]=preis;
    format(say,sizeof say,"%s ist nun mit dem Taxi unterwegs |Preis: %d$|",SpielerName(playerid),player_preis[playerid]);
    SendClientMessageToAll(taxi,say);
    return 1;
    }


    Public:

    Spoiler anzeigen
    public check_taxi(playerid,fahrerid,kosten)
    {
    new say[50];
    payed[playerid]+=kosten;
    format(say,sizeof say,"~r~Kosten: ~w~%d $",payed[playerid]);
    GameTextForPlayer(playerid, say, PAY_TIME*1010, 4);
    format(say,sizeof say,"~g~Gehalt: ~w~%d $",payed[playerid]);
    GameTextForPlayer(fahrerid, say, PAY_TIME*1010, 4);
    GivePlayerMoney(playerid,-kosten);
    GivePlayerMoney(fahrerid,kosten);
    return 1;
    }


    Hoffe auf schnelle Hilfe :)


    Jeffry:


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Also, du kannst es folgendermaßen machen, indem du die gefahrene Distanz berechnest, jede Sekunde.


    Kopf:
    //________Taxi_________//
    new player_preis[MAX_PLAYERS];
    new player_taxi[MAX_PLAYERS];
    new Float:player_distance[MAX_PLAYERS];
    new Float:player_pos[MAX_PLAYERS][3];
    new pay_taxi[MAX_PLAYERS];
    new payed[MAX_PLAYERS];
    new oldpayed[MAX_PLAYERS];
    forward check_taxi(playerid,fahrerid,kosten);


    OnPlayerStateChange
    //_______Taxi System________//
    new frak = GetVehicleFrak(GetPlayerVehicleID(playerid));
    if(newstate == PLAYER_STATE_DRIVER && SpielerInfo[playerid][pTeam] == 4)
    {
    if(frak == 4)
    {
    player_taxi[playerid]=GetPlayerVehicleID(playerid);
    }
    }
    else if(newstate == PLAYER_STATE_PASSENGER)
    {
    if(frak == 4)
    {
    for(new t=0;t<MAX_PLAYERS;t++)
    {
    if(t != playerid)
    {
    if(GetPlayerVehicleID(playerid) == player_taxi[t])
    {
    GetPlayerPos(playerid, player_pos[playerid][0], player_pos[playerid][1], player_pos[playerid][2]);
    pay_taxi[playerid]=SetTimerEx("check_taxi",1000,1,"dd",playerid,t);
    return 1;
    }
    }
    }
    }
    }
    if(oldstate == PLAYER_STATE_PASSENGER || oldstate == PLAYER_STATE_DRIVER )
    {
    player_taxi[playerid]=0;
    payed[playerid]=0;
    oldpayed[playerid]=0;
    player_distance[playerid] = 0.0;
    return KillTimer(pay_taxi[playerid]);
    }


    Command:
    ocmd:fahren(playerid,params[])
    {
    if(SpielerInfo[playerid][pTeam] != 4 && SpielerInfo[playerid][pDuty] != 4) return SendClientMessage(playerid, error, "Du bist kein Taxifahrer oder nicht im Dienst!");
    new preis,say[80];
    if(sscanf(params, "d",preis)) return SendClientMessage(playerid, info,"Benutze: /fahren [PREIS]");
    else if(preis > 200 || preis < 1) return SendClientMessage(playerid, warn, "Preis muss zwischen 1$ und 200$ liegen!");
    else if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, error, "Du musst in einem Auto sitzen!");
    player_preis[playerid]=preis;
    format(say,sizeof say,"%s ist nun mit dem Taxi unterwegs |Preis: %d$|",SpielerName(playerid),player_preis[playerid]);
    SendClientMessageToAll(taxi,say);
    return 1;
    }


    Public:
    public check_taxi(playerid,fahrerid)
    {
    new say[50], kosten, Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);

    //Hier wird die zurückgelegte Distanz berechnet
    new Float:dist = floatsqroot(((player_pos[playerid][0]-x)*(player_pos[playerid][0]-x))+((player_pos[playerid][1]-y)*(player_pos[playerid][1]-y))+((player_pos[playerid][2]-z)*(player_pos[playerid][2]-z)));
    player_distance[playerid]+=dist;

    //Neue Position speichern
    player_pos[playerid][0] = x;
    player_pos[playerid][1] = y;
    player_pos[playerid][2] = z;

    //Und hier berechnen wir den Gesamtpreis der zu zahlen ist.
    //Falls das geteilt durch 100.0 nicht passt, erhöhe oder verkleinere es.
    //Pro Kilometer wird der player_preis drauf gerechnet, Grundpreis ist ebenfalls der player_preis.
    payed[playerid] = floatround(player_distance[playerid]/100.0) * player_preis[fahrerid] + player_preis[fahrerid];

    //Hier das Geld abziehen, wenn sich der zu zahlende Betrag ändert.
    if(payed[playerid] > oldpayed[playerid])
    {
    kosten = payed[playerid] - oldpayed[playerid];
    oldpayed[playerid] = payed[playerid];
    GivePlayerMoney(playerid,-kosten);
    GivePlayerMoney(fahrerid,kosten);
    }
    format(say,sizeof say,"~r~Kosten: ~w~%d $",payed[playerid]);
    GameTextForPlayer(playerid, say, 2000, 4);
    format(say,sizeof say,"~g~Gehalt: ~w~%d $",payed[playerid]);
    GameTextForPlayer(fahrerid, say, 2000, 4);
    return 1;
    }


    Ich hoffe, das hilft dir soweit.



    PS: Eigentlich heißt es ja "paid" und nicht "payed". ;)

  • Jeffry:


    Ich habe jetzt leider ein kleines Problem, mit dem ich nicht weiter komme.
    Undzwar wollte ich den Gametext in Textdraws machen, mit dem Inhalt


    Gast/Fahrer
    Preis
    Kilometer


    Nunja es klappt eigentlich auch, bloß wird für den Beifahrer den Name vom Fahrer nicht angezeigt.
    Beziehungsweiße das ganze Textdraw fehlt, es steht auch kein "Fahrer:" da.


    Problem und unwissenheit Nr2:


    Wenn der Taxifahrer aussteigt, und wieder einsteigt läuft das System weiter, der Textdraw verschwindet nicht und steigt er wieder ein, dann setzt es fort.
    Wenn aber der Beifahrer aussteigt ist es vorbei, ist das Absichtlich so?


    Wenn der Taxifahrer aussteigt sollte das System beendet werden und wenn der Beifahrer aussteigt ebenso.
    Noch dazu wenn ich garnicht /fahren gemacht habe, kommt der Textdraw trotzdem bloß der Preis ist 0, dass sollte eigentlich nicht so sein..


    Falls du was nicht verstehst, schreib einfach :)
    Code:


    Spoiler anzeigen
    ocmd:fahren(playerid,params[])
    {
    new preis,say[80];
    if(sscanf(params, "d",preis)) return SendClientMessage(playerid, info,"Benutze: /fahren [PREIS]");
    if(SpielerInfo[playerid][pTeam] != 4 && SpielerInfo[playerid][pDuty] != 4) return SendClientMessage(playerid, error, "Du bist kein Taxifahrer oder nicht im Dienst!");
    if(preis > 200 || preis < 1) return SendClientMessage(playerid, warn, "Preis muss zwischen 1$ und 200$ liegen!");
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, error, "Du musst in einem Auto sitzen!");
    player_preis[playerid]=preis;
    format(say,sizeof say,"%s ist nun mit dem Taxi unterwegs |Preis: %d$|",SpielerName(playerid),player_preis[playerid]);
    SendClientMessageToAll(taxi,say);
    return 1;
    }
    //Am liebsten würde ich hier eine Variable auf 1 setzen, die dann abgefragt wird und so verwindert wird das der Textdraw angezeigt wird, aber wie?


    Spoiler anzeigen
    public check_taxi(playerid,fahrerid)
    {
    new say[128],say1[128],say2[128],say3[128], kosten, Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    new Float:dist = floatsqroot(((player_pos[playerid][0]-x)*(player_pos[playerid][0]-x))+((player_pos[playerid][1]-y)*(player_pos[playerid][1]-y))+((player_pos[playerid][2]-z)*(player_pos[playerid][2]-z)));
    player_distance[playerid]+=dist;
    player_pos[playerid][0] = x;
    player_pos[playerid][1] = y;
    player_pos[playerid][2] = z;
    payed[playerid] = floatround(player_distance[playerid]/500.0) * player_preis[fahrerid] + player_preis[fahrerid];
    new geld = GetPlayerMoney(playerid);
    if(geld < kosten) return RemovePlayerFromVehicle(playerid), SendClientMessage(playerid, warn, "Du hast nicht genug Geld!"),SendClientMessage(fahrerid, info, "Spieler hat nicht genug Geld!");
    if(payed[playerid] > oldpayed[playerid])
    {

    kosten = payed[playerid] - oldpayed[playerid];
    oldpayed[playerid] = payed[playerid];
    fkm[playerid] += 1;
    GivePlayerMoney(playerid,-kosten);
    GivePlayerMoney(fahrerid,kosten);
    }
    //_______________Fahrer______________//
    new fname[MAX_PLAYER_NAME];
    GetPlayerName(fahrerid,fname,sizeof(fname));
    PlayerTextDrawShow(fahrerid, Textwarn[fahrerid]);
    PlayerTextDrawShow(fahrerid, Textstatus[fahrerid]);
    PlayerTextDrawShow(fahrerid, Textzustand[fahrerid]);
    PlayerTextDrawShow(fahrerid, Job[fahrerid]);
    PlayerTextDrawShow(fahrerid, Job1[fahrerid]);
    PlayerTextDrawShow(fahrerid, StatusJob[fahrerid]);
    format(say,sizeof say,"~w~Gast: ~y~%s",SpielerName(playerid));
    format(say1,sizeof say1,"~w~Gehalt: ~g~%d$",payed[playerid]);
    format(say2,sizeof say2,"~w~Status: ~y~Taxi-System");
    format(say3,sizeof say3,"~w~Kilometer: ~y~%d",fkm[playerid]);
    PlayerTextDrawSetString(fahrerid,Textwarn[fahrerid],say);
    PlayerTextDrawSetString(fahrerid, Textzustand[fahrerid],say1);
    PlayerTextDrawSetString(fahrerid,StatusJob[fahrerid],say2);
    PlayerTextDrawSetString(fahrerid,Textstatus[fahrerid],say3);
    //________________Passagier____________//
    PlayerTextDrawShow(playerid, Textwarn[playerid]);
    PlayerTextDrawShow(playerid, Textstatus[playerid]);
    PlayerTextDrawShow(playerid, Textzustand[playerid]);
    PlayerTextDrawShow(playerid, Job[playerid]);
    PlayerTextDrawShow(playerid, Job1[playerid]);
    PlayerTextDrawShow(playerid, StatusJob[playerid]);
    format(say,sizeof say,"~w~Fahrer: ~y~%s ",fname);
    format(say1,sizeof say1,"~w~Kosten: ~r~%d$",payed[playerid]);
    format(say2,sizeof say2,"~w~Status: ~y~Taxi-System");
    format(say3,sizeof say3,"~w~Kilometer: ~y~%d",fkm[playerid]);
    PlayerTextDrawSetString(playerid,Textwarn[playerid],say);
    PlayerTextDrawSetString(playerid,Textzustand[playerid],say1);
    PlayerTextDrawSetString(playerid,StatusJob[playerid],say2);
    PlayerTextDrawSetString(playerid,Textstatus[playerid],say3);
    return 1;
    }


    Und nun eigentlich, bei ExitVehicle sollte alles auf 0 sein und der Textdraw verschwinden, jedoch denke ich das der Timer noch im gange ist und er deshalb wieder angezeigt wird(er geht kurz weg, dann kommt er wieder)


    Spoiler anzeigen
    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    PlayerTextDrawHide(playerid, Textwarn[playerid]);
    PlayerTextDrawHide(playerid, Textstatus[playerid]);
    PlayerTextDrawHide(playerid, Textzustand[playerid]);
    PlayerTextDrawHide(playerid, Job[playerid]);
    PlayerTextDrawHide(playerid, Job1[playerid]);
    PlayerTextDrawHide(playerid, StatusJob[playerid]);
    PlayerTextDrawHide(playerid, Tacho1[playerid]);
    PlayerTextDrawHide(playerid, Tacho2[playerid]);
    PlayerTextDrawHide(playerid, Tacho3[playerid]);
    PlayerTextDrawHide(playerid, CarFahrzeug[playerid]);
    PlayerTextDrawHide(playerid, CarTankart[playerid]);
    PlayerTextDrawHide(playerid, CarSpeed[playerid]);
    PlayerTextDrawHide(playerid, CarKmh[playerid]);
    PlayerTextDrawDestroy(playerid, MotorIMG[playerid]);
    payed[playerid]=0;
    player_preis[playerid]=0;
    player_taxi[playerid]=0;
    fkm[playerid] = 0;
    PlayerTextDrawHide(playerid, Textwarn[playerid]);
    PlayerTextDrawHide(playerid, Textstatus[playerid]);
    PlayerTextDrawHide(playerid, Textzustand[playerid]);
    PlayerTextDrawHide(playerid, Job[playerid]);
    PlayerTextDrawHide(playerid, Job1[playerid]);
    PlayerTextDrawHide(playerid, StatusJob[playerid]);
    return 1;
    }


    Falls ein Code fehlt, ich reiche ihn dir nach.


    Danke!


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • 1.) Werden denn die Kosten etc für den Kunde angezeigt? Kannst du davon vielleicht mal einen Screenshot machen?


    2.) Damit es nicht wieder kommt, musst du
    if(pay_taxi[playerid] != -1) KillTimer(pay_taxi[playerid]);
    pay_taxi[playerid] = -1;
    bei OnPlayerStateChange hinzufügen. Der Code den du bei OnPlayerExit hast muss auch zu OnPlayerStateChange, das ist sicherer.

  • Ja es wird alles angezeigt außer halt der Fahrer textdraw..


    Ich Versuch es morgen mal, und dann kann ich dir den Screen schicken:)


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ok, du kannst es ja ggf. dann auch mal so probieren:
    format(say,sizeof say,"~w~Fahrer: ~y~%s ",fname);
    zu:
    format(say,sizeof say,"~w~Fahrer: ~y~%s ",SpielerName(fahrerid));


    Vielleicht hilft das.
    Wenn nicht, setzte danach mal einen print:
    printf("say: %s", say);
    und poste was da geprintet wird.

  • Hallo,


    Jeffry:


    Erstmal wenn ich als Fahrer aussteige bleibt der Textdraw trotzdem bzw geht kurz weg und wird wieder angezeigt, nur wenn der Beifahrer aussteigt bleibt er beim Beifahrer auch gleich weg, wenn dann der Fahrer aussteigt geht es auch weg.
    Kurz: Bleibt Beifahrer im Auto, steigt Fahrer aus(Textdraw bleibt)
    Steigt beifahrer aus(Textdraw geht bei beifahrer weg) steigt fahrer aus(Textdraw geht nur weg wenn beifahrer auch draussen ist)
    Sollte aber einer aussteigen, egal weg sollte bei beiden der Textdraw weg gehen..


    Zu dem Problem mit dem Namen, Print:

    Spoiler anzeigen
    [11:41:59] say: ~w~Fahrer: ~y~niddo_189
    [11:42:00] say: ~w~Fahrer: ~y~niddo_189
    [11:42:01] say: ~w~Fahrer: ~y~niddo_189
    [11:42:38] say: ~w~Fahrer: ~y~barbie444
    [11:42:39] say: ~w~Fahrer: ~y~barbie444
    [11:42:41] say: ~w~Fahrer: ~y~barbie444
    [11:42:42] say: ~w~Fahrer: ~y~barbie444

    Kein Gast:
    (lass dich von dem Name nicht ablenken war meine Freundin ^^)


    Screen vom Fahrer(So sollte es auch bei Beifahrer aussehen blos Fahrer:%s)


    Beifahrer:



    Hier mal die Aktuellen Codes:
    Taxicheck:

    Spoiler anzeigen
    public check_taxi(playerid,fahrerid)
    {
    new say[128],say1[128],say2[128],say3[128], kosten, Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    new Float:dist = floatsqroot(((player_pos[playerid][0]-x)*(player_pos[playerid][0]-x))+((player_pos[playerid][1]-y)*(player_pos[playerid][1]-y))+((player_pos[playerid][2]-z)*(player_pos[playerid][2]-z)));
    player_distance[playerid]+=dist;
    player_pos[playerid][0] = x;
    player_pos[playerid][1] = y;
    player_pos[playerid][2] = z;
    payed[playerid] = floatround(player_distance[playerid]/500.0) * player_preis[fahrerid] + player_preis[fahrerid];
    new geld = GetPlayerMoney(playerid);
    if(geld < kosten) return RemovePlayerFromVehicle(playerid), SendClientMessage(playerid, warn, "Du hast nicht genug Geld!"),SendClientMessage(fahrerid, info, "Spieler hat nicht genug Geld!");
    if(payed[playerid] > oldpayed[playerid])
    {

    kosten = payed[playerid] - oldpayed[playerid];
    oldpayed[playerid] = payed[playerid];
    fkm[playerid] += 1;
    GivePlayerMoney(playerid,-kosten);
    GivePlayerMoney(fahrerid,kosten);
    }
    //_______________Fahrer______________//
    PlayerTextDrawShow(fahrerid, Textwarn[fahrerid]);
    PlayerTextDrawShow(fahrerid, Textstatus[fahrerid]);
    PlayerTextDrawShow(fahrerid, Textzustand[fahrerid]);
    PlayerTextDrawShow(fahrerid, Job[fahrerid]);
    PlayerTextDrawShow(fahrerid, Job1[fahrerid]);
    PlayerTextDrawShow(fahrerid, StatusJob[fahrerid]);
    format(say,sizeof say,"~w~Gast: ~y~%s",SpielerName(playerid));
    format(say1,sizeof say1,"~w~Gehalt: ~g~%d$",payed[playerid]);
    format(say2,sizeof say2,"~w~Status: ~y~Taxi-System");
    format(say3,sizeof say3,"~w~Kilometer: ~y~%d",fkm[playerid]);
    PlayerTextDrawSetString(fahrerid,Textwarn[fahrerid],say);
    PlayerTextDrawSetString(fahrerid, Textzustand[fahrerid],say1);
    PlayerTextDrawSetString(fahrerid,StatusJob[fahrerid],say2);
    PlayerTextDrawSetString(fahrerid,Textstatus[fahrerid],say3);
    //________________Passagier____________//
    PlayerTextDrawShow(playerid, Textwarn[playerid]);
    PlayerTextDrawShow(playerid, Textstatus[playerid]);
    PlayerTextDrawShow(playerid, Textzustand[playerid]);
    PlayerTextDrawShow(playerid, Job[playerid]);
    PlayerTextDrawShow(playerid, Job1[playerid]);
    PlayerTextDrawShow(playerid, StatusJob[playerid]);
    format(say,sizeof say,"~w~Fahrer: ~y~%s ",SpielerName(fahrerid));
    format(say1,sizeof say1,"~w~Kosten: ~r~%d$",payed[playerid]);
    format(say2,sizeof say2,"~w~Status: ~y~Taxi-System");
    format(say3,sizeof say3,"~w~Kilometer: ~y~%d",fkm[playerid]);
    PlayerTextDrawSetString(playerid,Textwarn[playerid],say);
    printf("say: %s", say);
    PlayerTextDrawSetString(playerid,Textzustand[playerid],say1);
    PlayerTextDrawSetString(playerid,StatusJob[playerid],say2);
    PlayerTextDrawSetString(playerid,Textstatus[playerid],say3);
    return 1;
    }


    Und OnPlayerStateChange

    Spoiler anzeigen
    if(oldstate == PLAYER_STATE_PASSENGER || oldstate == PLAYER_STATE_DRIVER )
    {
    if(pay_taxi[playerid] != -1) KillTimer(pay_taxi[playerid]);
    pay_taxi[playerid] = -1;
    player_taxi[playerid]=0;
    payed[playerid]=0;
    oldpayed[playerid]=0;
    player_distance[playerid] = 0.0;
    fkm[playerid] = 0;
    PlayerTextDrawHide(playerid, Textwarn[playerid]);
    PlayerTextDrawHide(playerid, Textstatus[playerid]);
    PlayerTextDrawHide(playerid, Textzustand[playerid]);
    PlayerTextDrawHide(playerid, Job[playerid]);
    PlayerTextDrawHide(playerid, Job1[playerid]);
    PlayerTextDrawHide(playerid, StatusJob[playerid]);
    return KillTimer(pay_taxi[playerid]);
    }


    Wie gesagt, der Textdraw kommt auch wenn man nicht /Fahren [preis]
    gemacht hat, da wird dann nur Gehalt: 0$ angezeigt und das sollte auch nicht sein..


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Dann würde ich es so machen:
    public check_taxi(playerid,fahrerid)
    {
    new say[128],say1[128],say2[128],say3[128], kosten, Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    new Float:dist = floatsqroot(((player_pos[playerid][0]-x)*(player_pos[playerid][0]-x))+((player_pos[playerid][1]-y)*(player_pos[playerid][1]-y))+((player_pos[playerid][2]-z)*(player_pos[playerid][2]-z)));
    player_distance[playerid]+=dist;
    player_pos[playerid][0] = x;
    player_pos[playerid][1] = y;
    player_pos[playerid][2] = z;
    payed[playerid] = floatround(player_distance[playerid]/500.0) * player_preis[fahrerid] + player_preis[fahrerid];
    new geld = GetPlayerMoney(playerid);
    if(geld < kosten) return RemovePlayerFromVehicle(playerid), SendClientMessage(playerid, warn, "Du hast nicht genug Geld!"),SendClientMessage(fahrerid, info, "Spieler hat nicht genug Geld!");
    if(payed[playerid] > oldpayed[playerid])
    {

    kosten = payed[playerid] - oldpayed[playerid];
    oldpayed[playerid] = payed[playerid];
    fkm[playerid] += 1;
    GivePlayerMoney(playerid,-kosten);
    GivePlayerMoney(fahrerid,kosten);
    }
    //_______________Fahrer______________//
    PlayerTextDrawShow(fahrerid, Textwarn[fahrerid]);
    PlayerTextDrawShow(fahrerid, Textstatus[fahrerid]);
    PlayerTextDrawShow(fahrerid, Textzustand[fahrerid]);
    PlayerTextDrawShow(fahrerid, Job[fahrerid]);
    PlayerTextDrawShow(fahrerid, Job1[fahrerid]);
    PlayerTextDrawShow(fahrerid, StatusJob[fahrerid]);
    format(say,sizeof say,"~w~Gast: ~y~%s",SpielerName(playerid));
    format(say1,sizeof say1,"~w~Gehalt: ~g~%d$",payed[playerid]);
    format(say2,sizeof say2,"~w~Status: ~y~Taxi-System");
    format(say3,sizeof say3,"~w~Kilometer: ~y~%d",fkm[playerid]);
    PlayerTextDrawSetString(fahrerid,Textwarn[fahrerid],say);
    PlayerTextDrawSetString(fahrerid, Textzustand[fahrerid],say1);
    PlayerTextDrawSetString(fahrerid,StatusJob[fahrerid],say2);
    PlayerTextDrawSetString(fahrerid,Textstatus[fahrerid],say3);
    //________________Passagier____________//
    PlayerTextDrawShow(playerid, Textwarn[playerid]);
    PlayerTextDrawShow(playerid, Textstatus[playerid]);
    PlayerTextDrawShow(playerid, Textzustand[playerid]);
    PlayerTextDrawShow(playerid, Job[playerid]);
    PlayerTextDrawShow(playerid, Job1[playerid]);
    PlayerTextDrawShow(playerid, StatusJob[playerid]);
    format(say,sizeof say,"~w~Fahrer: ~y~%s ",SpielerName(fahrerid));
    format(say1,sizeof say1,"~w~Kosten: ~r~%d$",payed[playerid]);
    format(say2,sizeof say2,"~w~Status: ~y~Taxi-System");
    format(say3,sizeof say3,"~w~Kilometer: ~y~%d",fkm[playerid]);
    PlayerTextDrawSetString(playerid,Textwarn[playerid],say);
    printf("say: %s ||| ID: %d", say, _:Textwarn[playerid]);
    PlayerTextDrawSetString(playerid,Textzustand[playerid],say1);
    PlayerTextDrawSetString(playerid,StatusJob[playerid],say2);
    PlayerTextDrawSetString(playerid,Textstatus[playerid],say3);
    if(!IsPlayerInAnyVehicle(fahrerid) || !IsPlayerInAnyVehicle(playerid))
    {
    if(pay_taxi[playerid] != -1) KillTimer(pay_taxi[playerid]);
    pay_taxi[playerid] = -1;
    player_taxi[playerid]=0;
    payed[playerid]=0;
    oldpayed[playerid]=0;
    player_distance[playerid] = 0.0;
    fkm[playerid] = 0;
    PlayerTextDrawHide(playerid, Textwarn[playerid]);
    PlayerTextDrawHide(playerid, Textstatus[playerid]);
    PlayerTextDrawHide(playerid, Textzustand[playerid]);
    PlayerTextDrawHide(playerid, Job[playerid]);
    PlayerTextDrawHide(playerid, Job1[playerid]);
    PlayerTextDrawHide(playerid, StatusJob[playerid]);
    PlayerTextDrawHide(fahrerid, Textwarn[fahrerid]);
    PlayerTextDrawHide(fahrerid, Textstatus[fahrerid]);
    PlayerTextDrawHide(fahrerid, Textzustand[fahrerid]);
    PlayerTextDrawHide(fahrerid, Job[fahrerid]);
    PlayerTextDrawHide(fahrerid, Job1[fahrerid]);
    PlayerTextDrawHide(fahrerid, StatusJob[fahrerid]);
    }
    return 1;
    }

    Den Teil bei OnPlayerStateChange machst du einfach weg.


    Zwecks dem Textdraw das nicht angezeigt wird:
    Poste nochmal den jetzigen Log.



    Zwecks den 0$:
    Steigt der Spieler denn erst ein, und gibt es dann ein, oder wie rum ist das? Und ab wann soll es die Textdraws anzeigen?

  • Ich werde es mal testen :)


    Also es soll so sein, wenn man /fahren (Preis)
    Gemacht hat und jemand einsteigt dann soll der textdraw kommen sonst nicht.


    Mit freundlichen grüßen


    //Edit:


    Spoiler anzeigen
    ocmd:fahren(playerid,params[])
    {
    new preis,say[80];
    if(sscanf(params, "d",preis)) return SendClientMessage(playerid, info,"Benutze: /fahren [PREIS]");
    if(SpielerInfo[playerid][pTeam] != 4 && SpielerInfo[playerid][pDuty] != 4) return SendClientMessage(playerid, error, "Du bist kein Taxifahrer oder nicht im Dienst!");
    if(preis > 200 || preis < 1) return SendClientMessage(playerid, warn, "Preis muss zwischen 1$ und 200$ liegen!");
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, error, "Du musst in einem Auto sitzen!");
    player_preis[playerid]=preis;
    format(say,sizeof say,"%s ist nun mit dem Taxi unterwegs |Preis: %d$|",SpielerName(playerid),player_preis[playerid]);
    SendClientMessageToAll(taxi,say);
    return 1;
    }


    Hier mal der Fahren Befehl ^^


    Jeffry:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Dann so:

    Spoiler anzeigen
    public check_taxi(playerid,fahrerid)
    {
    if(!IsPlayerInAnyVehicle(fahrerid) || !IsPlayerInAnyVehicle(playerid))
    {
    if(pay_taxi[playerid] != -1) KillTimer(pay_taxi[playerid]);
    pay_taxi[playerid] = -1;
    player_taxi[playerid]=0;
    payed[playerid]=0;
    oldpayed[playerid]=0;
    player_distance[playerid] = 0.0;
    fkm[playerid] = 0;
    PlayerTextDrawHide(playerid, Textwarn[playerid]);
    PlayerTextDrawHide(playerid, Textstatus[playerid]);
    PlayerTextDrawHide(playerid, Textzustand[playerid]);
    PlayerTextDrawHide(playerid, Job[playerid]);
    PlayerTextDrawHide(playerid, Job1[playerid]);
    PlayerTextDrawHide(playerid, StatusJob[playerid]);
    PlayerTextDrawHide(fahrerid, Textwarn[fahrerid]);
    PlayerTextDrawHide(fahrerid, Textstatus[fahrerid]);
    PlayerTextDrawHide(fahrerid, Textzustand[fahrerid]);
    PlayerTextDrawHide(fahrerid, Job[fahrerid]);
    PlayerTextDrawHide(fahrerid, Job1[fahrerid]);
    PlayerTextDrawHide(fahrerid, StatusJob[fahrerid]);
    return 1;
    }
    if(player_preis[fahrerid] == 0) return 1;
    new say[128],say1[128],say2[128],say3[128], kosten, Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    new Float:dist = floatsqroot(((player_pos[playerid][0]-x)*(player_pos[playerid][0]-x))+((player_pos[playerid][1]-y)*(player_pos[playerid][1]-y))+((player_pos[playerid][2]-z)*(player_pos[playerid][2]-z)));
    player_distance[playerid]+=dist;
    player_pos[playerid][0] = x;
    player_pos[playerid][1] = y;
    player_pos[playerid][2] = z;
    payed[playerid] = floatround(player_distance[playerid]/500.0) * player_preis[fahrerid] + player_preis[fahrerid];
    new geld = GetPlayerMoney(playerid);
    if(geld < kosten) return RemovePlayerFromVehicle(playerid), SendClientMessage(playerid, warn, "Du hast nicht genug Geld!"),SendClientMessage(fahrerid, info, "Spieler hat nicht genug Geld!");
    if(payed[playerid] > oldpayed[playerid])
    {

    kosten = payed[playerid] - oldpayed[playerid];
    oldpayed[playerid] = payed[playerid];
    fkm[playerid] += 1;
    GivePlayerMoney(playerid,-kosten);
    GivePlayerMoney(fahrerid,kosten);
    }
    //_______________Fahrer______________//
    PlayerTextDrawShow(fahrerid, Textwarn[fahrerid]);
    PlayerTextDrawShow(fahrerid, Textstatus[fahrerid]);
    PlayerTextDrawShow(fahrerid, Textzustand[fahrerid]);
    PlayerTextDrawShow(fahrerid, Job[fahrerid]);
    PlayerTextDrawShow(fahrerid, Job1[fahrerid]);
    PlayerTextDrawShow(fahrerid, StatusJob[fahrerid]);
    format(say,sizeof say,"~w~Gast: ~y~%s",SpielerName(playerid));
    format(say1,sizeof say1,"~w~Gehalt: ~g~%d$",payed[playerid]);
    format(say2,sizeof say2,"~w~Status: ~y~Taxi-System");
    format(say3,sizeof say3,"~w~Kilometer: ~y~%d",fkm[playerid]);
    PlayerTextDrawSetString(fahrerid,Textwarn[fahrerid],say);
    PlayerTextDrawSetString(fahrerid, Textzustand[fahrerid],say1);
    PlayerTextDrawSetString(fahrerid,StatusJob[fahrerid],say2);
    PlayerTextDrawSetString(fahrerid,Textstatus[fahrerid],say3);
    //________________Passagier____________//
    PlayerTextDrawShow(playerid, Textwarn[playerid]);
    PlayerTextDrawShow(playerid, Textstatus[playerid]);
    PlayerTextDrawShow(playerid, Textzustand[playerid]);
    PlayerTextDrawShow(playerid, Job[playerid]);
    PlayerTextDrawShow(playerid, Job1[playerid]);
    PlayerTextDrawShow(playerid, StatusJob[playerid]);
    format(say,sizeof say,"~w~Fahrer: ~y~%s ",SpielerName(fahrerid));
    format(say1,sizeof say1,"~w~Kosten: ~r~%d$",payed[playerid]);
    format(say2,sizeof say2,"~w~Status: ~y~Taxi-System");
    format(say3,sizeof say3,"~w~Kilometer: ~y~%d",fkm[playerid]);
    PlayerTextDrawSetString(playerid,Textwarn[playerid],say);
    printf("say: %s ||| ID: %d", say, _:Textwarn[playerid]);
    PlayerTextDrawSetString(playerid,Textzustand[playerid],say1);
    PlayerTextDrawSetString(playerid,StatusJob[playerid],say2);
    PlayerTextDrawSetString(playerid,Textstatus[playerid],say3);
    return 1;
    }


    Dann zeigt es die Textdraws an, sobald der Spieler /fahren gemacht hat und ein Beifahrer dabei ist.

  • Hi, also das mit dem Textdraw funktioniert soweit !
    Der Fahrer wird leider immer noch nicht angezeigt und geprintet wird:
    say: ~w~Fahrer: ~y~niddo_189 ||| ID: 5


    Nunja geprintet wird es zwar aber mehr auch nicht :/



    Jeffry:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Also wenn ich als Fahrer dann als Beifahrer einsteige wird es trotzdem nicht angezeigt.
    Steigt der Beifahrer jedoch als Fahrer ein, wird dann halt für ihn Gast: angezeigt.


    "Fahrer: %s" wird für keinen angezeigt 8|



    Jeffry:



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)