Textdraws + Autositze

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
  • Hi,
    ich habe mir einen Tacho mit Tankanzeige usw. gebaut, aber es gibt Probleme damit:
    der Tacho funktioniert nur einwandfrei, wenn nur ein Spieler im Auto sitzt, sobald ein weiterer dazu kommt funktioniert er mal und mal nicht (Timer wiederholt sich jede halbe Sekunde)
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER) {
    new i=0;
    for(; i<12; i++) {
    TextDrawShowForPlayer(playerid,Textdraw[i]);
    }
    }
    if(newstate != PLAYER_STATE_DRIVER) {
    new i=0;
    for(; i<12; i++) {
    TextDrawHideForPlayer(playerid,Textdraw[i]);
    }
    TextDrawDestroy(Autoname[playerid]);
    TextDrawDestroy(Speed1[playerid]);
    TextDrawDestroy(Speed2[playerid]);
    TextDrawDestroy(Kraftstoff[playerid]);
    TextDrawDestroy(Tankvoll[playerid]);
    TextDrawDestroy(Tankinhalt[playerid]);
    TextDrawDestroy(Kilometer[playerid]);
    }
    return 1;
    }


    public AmaturenUpdate()
    {
    new i;
    for(; i<MAX_PLAYERS; i++) {
    if(IsPlayerConnected(i)) {
    if(GetPlayerState(i) == PLAYER_STATE_DRIVER) {
    //Auto
    TextDrawDestroy(Autoname[i]);
    TextDrawDestroy(Speed1[i]);
    TextDrawDestroy(Speed2[i]);
    TextDrawDestroy(Kraftstoff[i]);
    TextDrawDestroy(Tankvoll[i]);
    TextDrawDestroy(Tankinhalt[i]);
    TextDrawDestroy(Kilometer[i]);

    [...]

    TextDrawShowForPlayer(i,Autoname[i]);
    TextDrawShowForPlayer(i,Speed1[i]);
    TextDrawShowForPlayer(i,Speed2[i]);
    TextDrawShowForPlayer(i,Kraftstoff[i]);
    TextDrawShowForPlayer(i,Tankvoll[i]);
    TextDrawShowForPlayer(i,Tankinhalt[i]);
    TextDrawShowForPlayer(i,Kilometer[i]);
    }
    }
    }
    [...]


    2. Wie fügt man weitere Sitzplätze für Fahrzeuge hinzu?
    Beispiel: Bei Booten wie Squalo oder Marquis sollen die Beifahrersitze benutzbar sein und die Stretch soll auch 2 weitere Sitzplätze haben. Wie mache ich das?

  • if(newstate == PLAYER_STATE_PASSENGER)
    {
    SetPlayerPos(
    Ein Beispiel, damit müsst ihr jetzt selber was anfangen können

  • Mit Booten ist das nicht möglich

  • Auf irgendeinem Server habe ich schon gesehen, dass zum Beispiel Marquis 5 Sitzplätze oder Stehplätze hatte
    Edit: Kann auch mal bitte jemand auf meine erste Frage mit den Textdraws eingehen?
    Edit2: Komischerweise geht das mit den Textdraws wenn man zum ersten mal in ein Auto einsteigt und dann ein anderer Spieler in ein Auto steigt. Aber wenn man dann aussteigt und wieder einsteigt geht es nicht mehr
    Edit3: Hat niemand eine Idee?

    3 Mal editiert, zuletzt von Winnetou ()

  • lass das edit pushen -,- sonst geben dir Moderatoren oder höher gleich mal haue :D


    Ich glaube nicht das es Gescriptet wurde mit den Plätzen sondern die user sich da einfach hingestellt haben =)

    Opa :love: Freund und helfer =)

  • Guck doch mal auf das Datum vom Beitrag vorher...
    Glaubst du jemand (mit wenigen Ausnahmen) würde dieses Thema noch lesen wenn es auf Seite 10 stünde?


    Viel wichtiger ist mir jetzt meine Frage zum Speedometer weil das mit den Sitzen hat sich geklärt


    Edit: Liegt das vielleicht daran, dass die Textdraws beim einsteigen zerstört werden obwohl die gar nicht vorhanden sind?
    Edit2: Es ist immer die höchste ID, die die Textdraws sieht, der Rest sieht nur den Hintergrund und nicht die sich verändernden Textdraws

    2 Mal editiert, zuletzt von Winnetou ()

  • Komischerweise geht jetzt überhaupt nichts mehr:

    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER) {
    new i=0;
    for(; i<12; i++) {
    TextDrawShowForPlayer(playerid,Textdraw[i]);
    }


    [...]


    }

    if(newstate != PLAYER_STATE_DRIVER) {
    new i=0;
    for(; i<12; i++) {
    TextDrawHideForPlayer(playerid,Textdraw[i]);
    }
    TextDrawDestroy(Autoname[playerid]);
    TextDrawDestroy(Speed1[playerid]);
    TextDrawDestroy(Speed2[playerid]);
    TextDrawDestroy(Tankinhalt[playerid]);
    TextDrawDestroy(Kilometer[playerid]);
    }
    return 1;
    }


    public AmaturenUpdate()
    {
    new i;
    for(; i<MAX_PLAYERS; i++) {
    if(IsPlayerConnected(i)) {
    if(GetPlayerState(i) == PLAYER_STATE_DRIVER) {
    TextDrawDestroy(Autoname[i]);
    TextDrawDestroy(Speed1[i]);
    TextDrawDestroy(Speed2[i]);
    TextDrawDestroy(Tankinhalt[i]);
    TextDrawDestroy(Kilometer[i]);

    new output[64], Float:kommazahl;
    //print("test1")
    //Autoname
    format(output,sizeof(output),"%s",GetVehicleName(GetPlayerVehicleID(i)));


    [...]
    //print("test2")
    //Speed
    format(output,sizeof(output),"%d km/h",ErmittleGeschwindigkeit(i,true));


    [...]

    //Speedbalken
    kommazahl=524+ErmittleGeschwindigkeit(i,true)/3.06122;


    [...]


    //Tankzeiger
    kommazahl=524+Tankmenge[GetPlayerVehicleID(i)]/1.020408;


    [...]

    //Kilometer
    kilometercount[GetPlayerVehicleID(i)] += ErmittleGeschwindigkeit(i,true)/(60*60*0.5);
    format(output,sizeof(output),"%.1f km",kilometercount[GetPlayerVehicleID(i)]);


    [...]

    TextDrawShowForPlayer(i,Autoname[i]);
    TextDrawShowForPlayer(i,Speed1[i]);
    TextDrawShowForPlayer(i,Speed2[i]);
    TextDrawShowForPlayer(i,Tankinhalt[i]);
    TextDrawShowForPlayer(i,Kilometer[i]);
    }
    }
    }


    Das "[...]" bedeutet, dass an der Stelle im Script die ganzen TextDrawCreate usw. stehen (ich habe die mal der Übersicht halber weggelassen, da dort kein Fehler vorhanden ist).
    Wenn man in ein Fahrzeug einsteigt, werden die Hintergrundtextdraws alle angezeigt, bis auf das erste (Textdraw[0]). Die Variablen Textdraws werden überhaupt nicht angezeigt und der Server schmiert ab. Ich habe das auch mal mit print("test1") und print("test2") versucht und komischerweise werden die Variablen dann angezeigt, aber falsch. Beim Autonamen stand dann einfach "Ö". Wo ist jetzt das Problem? Ich sitze da jetzt schon seit mehreren Wochen dran, aber es funktioniert einfach nicht. Oder liegt das am Code von GetVehicleName??

  • So bitte, hab mir mal alles durchgelesen.. Scheiß Arbeit das sag ich dir ^^


    Alle Änderungen wurden mit // kommentiert!


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) //Auch für Passagiere!
    {
    for(new i=0; i<12; i++) //Aus irgendeinem Grund übernimmt er es nie richtig! Weitere Fragen folgen unten!
    {
    TextDrawShowForPlayer(playerid,Textdraw[i]);
    }


    [...]


    }

    if(newstate == PLAYER_STATE_ONFOOT) //Sicher ist sicher..
    {
    new i=0;
    for(; i<12; i++)
    {
    TextDrawHideForPlayer(playerid,Textdraw[i]);
    }
    TextDrawDestroy(Autoname[playerid]);
    TextDrawDestroy(Speed1[playerid]);
    TextDrawDestroy(Speed2[playerid]);
    TextDrawDestroy(Tankinhalt[playerid]);
    TextDrawDestroy(Kilometer[playerid]);
    }
    return 1;
    }


    public AmaturenUpdate()
    {
    new i = 0; //Eher unwichtig ^^
    for(; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInAnyVehicle(i)) //Nicht 'GetPlayerState(i) == PLAYER_STATE_DRIVER' da du es Spielerbezogen machst
    {
    TextDrawDestroy(Autoname[i]);
    TextDrawDestroy(Speed1[i]);
    TextDrawDestroy(Speed2[i]);
    TextDrawDestroy(Tankinhalt[i]);
    TextDrawDestroy(Kilometer[i]);

    new output[64], Float:kommazahl;
    //print("test1")
    //Autoname
    format(output,sizeof(output),"%s",GetVehicleName(GetPlayerVehicleID(i)));
    //Für GetVehicleName wird AddStaticVehicle2 vorrausgesetzt siehe hier: http://wiki.sa-mp.com/wiki/Useful_Functions#GetVehicleName


    [...]
    //print("test2")
    //Speed
    format(output,sizeof(output),"%d km/h",ErmittleGeschwindigkeit(i,true));


    [...]

    //Speedbalken
    kommazahl=524+ErmittleGeschwindigkeit(i,true)/3.06122;


    [...]


    //Tankzeiger
    kommazahl=524+Tankmenge[GetPlayerVehicleID(i)]/1.020408;


    [...]

    //Kilometer
    kilometercount[GetPlayerVehicleID(i)] += ErmittleGeschwindigkeit(i,true)/(60*60*0.5);
    format(output,sizeof(output),"%.1f km",kilometercount[GetPlayerVehicleID(i)]);


    [...]

    TextDrawShowForPlayer(i,Autoname[i]);
    TextDrawShowForPlayer(i,Speed1[i]);
    TextDrawShowForPlayer(i,Speed2[i]);
    TextDrawShowForPlayer(i,Tankinhalt[i]);
    TextDrawShowForPlayer(i,Kilometer[i]);
    }
    }
    }


    Also meine Frage, zeig mir die new Definition von Textdraw !

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • new Text:Textdraw[12];
    new Text:Autoname[MAX_PLAYERS];
    new Text:Speed1[MAX_PLAYERS];
    new Text:Speed2[MAX_PLAYERS];
    new Text:Tankinhalt[MAX_PLAYERS];
    new Text:Kilometer[MAX_PLAYERS];


    Und das GetVehicleName ist nicht aus den Useful Functions, kann aber trotzdem falsch sein, da ich es selbst geschrieben habe:
    stock GetVehicleName(vehicleid)
    {
    new model=612;
    model=GetVehicleModel(vehicleid);
    return Autonamen[model - 400];
    }
    und oben im Script aus dem Debug-FS:
    new Autonamen[212][] = { // Vehicle Names - Betamaster
    {"Landstalker"},
    {"Bravura"},
    {"Buffalo"},
    {"Linerunner"},
    {"Perrenial"},
    {"Sentinel"},
    [...]
    {"Luggage Trailer A"}, //bagboxa
    {"Luggage Trailer B"}, //bagboxb
    {"Stair Trailer"}, //tugstair
    {"Boxville"},
    {"Farm Plow"}, //farmtr1
    {"Utility Trailer"} //utiltr1
    };

  • Bitte überall diese Zeile
    for(new i=0; i<12; i++)
    durch das hier ersetzen.
    for(new i=0; i<11; i++)
    Ein Array zählt ab 0 nicht ab 1.



    Bei deinem stock sollte man es doch eher so machen ^^


    stock GetVehicleName(vehicleid)
    {
    new model = GetVehicleModel(vehicleid);
    return Autonamen[model-400];
    }


    sollte jedoch dennoch passen.. Naja probiers mal aus ^^

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Hast du Textdraw 0 überhaupt erstellt? ^^

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Gut, dann weiß ich es auch nicht.. Textdraw Limit überschritten?

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!