1 Probleme (Textdraw anzeige)

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
  • Also ich kam grad ausversehen mit einen un-registrieren Namen drauf, und deswegen kam halt der Fragezeichen , aber jetzt bin ich mit einen erstellen Account online geommen und dann steht in der CMD:


    Skin: -1
    Skin: 10


    -> Ich hatte davor einen Mechaniker Skin.. aufeinmal bekomme ich diesen Oma skin ? Und es lädt länger als normal?


    //EDIT:


    -> Jetzt nach, wo ich das MySQL System nochmal geprüft habe und ein Fehler gefunden hab -.- , geht es , ABER immer wenn ich jetzt über meine Datenbank (sqLite) eine andere Skin ID mache , z.b. von 10 auf 11 , dann lädt es länger als normal .. eigentlich sollte es nach 3 Sekunden gehen wie immer... ?

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

    Einmal editiert, zuletzt von [GeD]Max ()

  • Was heißt länger?
    Was steht in der Datenbank?
    Stimmt die 10?


    Poste nochmal den Code wie du ihn jetzt hast.



    Also mit länger meine ich halt, dass es länger lädt .. also dauert viel länger bis das kästchen erscheint obwohl es nach 3 sekunden kommen sollte wie immer...
    Aber , wie oben erwähnt , geht es jetzt normalerweise , nur es lädt halt ab normal lange, wenn man eine andere ID in die Datenbank macht...



    -> Code:



    //Unter OnPlayerConnect:
    printf("Skin: %d",SpielerInfo[playerid][pSkin]);
    GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
    SpielerInfo[playerid][pSkin] = mysql_GetInt("accounts", "Skin", "Name", SpielerInfo[playerid][pName]);
    //Skinbox
    Textdraw7[playerid] = CreatePlayerTextDraw(playerid, 526.000000, 292.444458, "LD_SPAC:white");
    PlayerTextDrawLetterSize(playerid, Textdraw7[playerid], 0.000000, 0.000000);
    PlayerTextDrawTextSize(playerid, Textdraw7[playerid], 104.500000, 131.911102);
    PlayerTextDrawAlignment(playerid, Textdraw7[playerid], 1);
    PlayerTextDrawColor(playerid, Textdraw7[playerid], -1);
    PlayerTextDrawSetShadow(playerid, Textdraw7[playerid], 0);
    PlayerTextDrawSetOutline(playerid, Textdraw7[playerid], 0);
    PlayerTextDrawBackgroundColor(playerid, Textdraw7[playerid], 255);
    PlayerTextDrawFont(playerid, Textdraw7[playerid], TEXT_DRAW_FONT_MODEL_PREVIEW);
    PlayerTextDrawSetPreviewModel(playerid,Textdraw7[playerid], SpielerInfo[playerid][pSkin]);


    // In meinem Timer drin:
    PlayerTextDrawShow(playerid, Textdraw7[playerid]); //ist halt der skinanzeige Textdraw...




    Langsam vermute ich aber dass es am MySQL liegt... ? Könnte sein ?


    Achja eine kleine Frage nebenbei: Was bedeutet dieser code? Bzw . wozu braucht man den?:



    for(new i=0; i<MAX_PLAYERS; i++)


    //EDIT: Achja die 10 stimmte nicht, es war ein Mechanicker skin ,nicht ein Oma skin...

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • 1.) Das abnormal lange wird wohl an MySQL liegen, wenn es nur vorkommt wenn du den Wert änderst.


    2.)
    Der print gehört unter die MySQL Abfrage, sonst macht deine Ausgabe wenig Sinn:
    SpielerInfo[playerid][pSkin] = mysql_GetInt("accounts", "Skin", "Name", SpielerInfo[playerid][pName]);
    printf("Skin: %d",SpielerInfo[playerid][pSkin]);


    3.) Das ist eine Schleife durch alle Spieler, die auf dem Server möglich sein könnten.

  • 1.) Das abnormal lange wird wohl an MySQL liegen, wenn es nur vorkommt wenn du den Wert änderst.


    2.)
    Der print gehört unter die MySQL Abfrage, sonst macht deine Ausgabe wenig Sinn:
    SpielerInfo[playerid][pSkin] = mysql_GetInt("accounts", "Skin", "Name", SpielerInfo[playerid][pName]);
    printf("Skin: %d",SpielerInfo[playerid][pSkin]);


    3.) Das ist eine Schleife durch alle Spieler, die auf dem Server möglich sein könnten.



    1.) Dann wird es ja eigentlich passen oder?


    2.) Geändert!


    3.) Schleife?


    4.) Jetzt kommt in der CMD: als erstes Skin: 0 dann Skin: 12 , also passt !


    Jetz noch eine Frage: -> Derzeitg arbeite ich ja mit Textdrwas, und wie mache ich dass jetzt genau , dass z.b. Jetzt in meinem Textdrwas steht: Motor: An /// Motor: Aus


    Und : Kann man druch das Skript , gemappte dringe härter machen? Also dass man die nicht druchdringen kann? Wie z.b. Tore..

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • 1.) Eigentlich ja, wobei so lange Ladezeiten nicht wirklich toll sind. Aber das ist eben MySQL.


    2.) Ok


    3.) Eine Schleife ist eine Wiederholung, für alle i Werte. Also zum Beispiel:
    Inhalt[0]=1;
    Inhalt[1]=1;
    Inhalt[2]=1;
    Kannst du schreiben als
    for(new i=0; i<=2; i++) Inhalt[i]=1;


    4.) Super!


    5.) Mit GetVehicleParamsEx machst du das, und dann auch den string ändern.


    6.) Härter? Du meinst man kann zur Zeit einfach durchlaufen?
    Wenn ja, das geht nur, wenn du dahinter ein weiteres Objekt setzt, welches man nicht sieht. Oder du setzt das Material eines anderen Objekts zu dem den Tores.


  • Okay..


    also 1,2,4,6) erledigt!


    nur noch 3.) , 5.)


    -> 3.) Ja aber wozo sind die denn jetzt genau gut ? Oder verstehe ich was falsch?


    -> 5.) gibt es irgendie ein beispiel ? Oder ein Wiki link ? Am besten beide :)

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • 3.) Naja, stell dir mal vor du willst einen Wert für alle Spieler im Server ändern, und dein Server hat 500 Slots. Dann müsstest du 500 Zeilen schreiben, mit einer Schleife machst du es in einer Zeile. Tutorial: [ SCRIPTING ] Schleifen


    5.)
    http://wiki.sa-mp.com/wiki/GetVehicleParamsEx
    Damit kannst du herausfinden ob der Motor an oder aus ist.


    Ah okay danke. mit der Schleife hab ich es endlich kapiert.


    Jedoch mit 5.) noch nicht. Ich habe jetzt das hier hinzugefügt und ausprobiert:



    //unter onplayerconnect
    new string[128], vID, engine, lights, alarm, doors, bonnet, boot, objective;
    vID = GetPlayerVehicleID(playerid);
    GetVehicleParamsEx(vID, engine, lights, alarm, doors, bonnet, boot, objective);
    if(engine == 1)
    {
    //Wenn Motor aus ist soll bei mein Text stehen Motor: AUS )
    engine = 0;
    }
    else
    {
    //Wenn Motor an ist (soll bei mein Text stehen Motor: AN )
    engine = 1;
    }
    format(string, sizeof(string), "Motor: %u");
    TextDrawSetString(Textdraw15 ,string);


    was mache ich falsch?

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • new string[128], vID, engine, lights, alarm, doors, bonnet, boot, objective;
    vID = GetPlayerVehicleID(playerid);
    GetVehicleParamsEx(vID, engine, lights, alarm, doors, bonnet, boot, objective);
    if(engine == 1) format(string, sizeof(string), "Motor: An");
    else format(string, sizeof(string), "Motor: Aus");
    TextDrawSetString(Textdraw15 ,string);


    Und der Code muss dort hin wo du den Motor an bzw aus machst, oder wenn du in das Fahrzeug einsteigst.


    Außerdem wird das Textdraw nur für einen Spieler funktionieren, du solltest wenn nötig mit PlayerTextdraws arbeiten.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Das stimmt, aber dann sieht jeder das selbe, das heißt wenn du den Motor an machst, sehen alle, dass du den Motor an hast. Das macht ja recht wenig Sinn.


    ouh. das erklärt einiges dass auch meine Km/H anzeige nicht so richtig geht .. :X


    Also zurück zu den Motorsystem:


    Es geht jetzt zwar , danke dir , aber wenn ich in irgendein Auto/Motorrad einsteige... dann wird erst der Textdraw: Motor: ... garnicht angezeigt, nur wenn ich dann motor anschalte, warum ?

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • Du musst den Code zusätzlich bei OnPlayerStateChange, bzw dort wo du dem Spieler das Textdraw anzeigen lässt, einfügen, damit dort der Wert aktualisiert wird.


    okay , gemacht aber jetzt ist es so: Wenn ich einsteige wird es zwar angezeigt etc. aber der motor geht sofort an , und wenn ich dann absteige und motor dabei anlasse dann geht er selber aus.. und das halt sonst andersrum


    Hier der Code:



    if(newstate == PLAYER_STATE_DRIVER)
    {
    new string[128], vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective;
    TextDrawShowForPlayer(playerid,Textdraw11);
    TextDrawShowForPlayer(playerid,Textdraw12);
    TextDrawShowForPlayer(playerid,Textdraw13);
    TextDrawShowForPlayer(playerid,Textdraw14);
    TextDrawShowForPlayer(playerid,Textdraw15);
    TextDrawShowForPlayer(playerid,Textdraw16);
    TextDrawShowForPlayer(playerid,Textdraw17);
    TextDrawShowForPlayer(playerid,Textdraw18);
    vID = GetPlayerVehicleID(playerid);
    //Motor an/aus
    GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    if(tmp_engine == 1)
    {
    tmp_engine = 0;
    format(string, sizeof(string), "Motor: ~r~Aus");
    }
    else
    {
    tmp_engine = 1;
    format(string, sizeof(string), "Motor: ~g~An");
    }
    //Licht an/aus
    if(tmp_lights == 1)
    {
    tmp_lights = 0;
    format(string, sizeof(string), "Licht: ~r~Aus");
    }
    else
    {
    tmp_lights = 1;
    format(string, sizeof(string), "Licht: ~g~An");
    }
    TextDrawSetString(Textdraw17 ,string);
    TextDrawSetString(Textdraw15 ,string);
    SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    }

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • Jeffry: Im Grunde ist das doch quatsch was er da macht.


    Warum "getten" wir die VehicleParams wenn sie zum Fahren eigeschaltet werden sollen ?
    Damit ist die "X aus" Ausgabe hinfällig.


    Denn würde man es jetzt so lassen, ändert sich der Param jedes mal.
    1. mal einsteigen -> Motor an -> Aussteigen
    2. mal einsteigen -> Motor aus -> Aussteigen


    Setzt man es jetzt beim Aussteigen wieder zurück - also 0 - werden die Bedingungen nicht benötigt.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Wenn es beim einsteigen an geht, musst du
    tmp_engine = 1;
    Zu
    tmp_engine = 0;
    Machen.


    Ähnlich wird es auch beim aussteigen sein.



    erledigt ... funkt. zwar ,


    aber wenn ich einsteige steht Licht oben und nicht unten .. eigentlich sollte Licht unten stehen und Motor oben.. :/ Aber das mit Aus/An geht.

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • if(newstate == PLAYER_STATE_DRIVER)
    {
    new string[128], vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective;
    TextDrawShowForPlayer(playerid,Textdraw11);
    TextDrawShowForPlayer(playerid,Textdraw12);
    TextDrawShowForPlayer(playerid,Textdraw13);
    TextDrawShowForPlayer(playerid,Textdraw14);
    TextDrawShowForPlayer(playerid,Textdraw15);
    TextDrawShowForPlayer(playerid,Textdraw16);
    TextDrawShowForPlayer(playerid,Textdraw17);
    TextDrawShowForPlayer(playerid,Textdraw18);
    vID = GetPlayerVehicleID(playerid);
    GetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    format(string, sizeof(string), "Motor: ~r~Aus");
    TextDrawSetString(Textdraw15 ,string);
    format(string, sizeof(string), "Licht: ~r~Aus");
    TextDrawSetString(Textdraw17 ,string);
    tmp_engine = 0;
    tmp_lights = 0;
    SetVehicleParamsEx(vID, tmp_engine, tmp_lights, tmp_alarm, tmp_doors, tmp_bonnet, tmp_boot, tmp_objective);
    }


    Mache es einfach so, die if-Abfragen brauchst du nicht unbedingt.
    Wenn es falschherum ist, vertausche Textdraw15 und Textdraw17.


  • hhmm , es geht jetzt zwar , aber wenn ich jetzt z.b. Motor und Licht anmache und dann absteige, dann bleibt Motor/Licht an , aber wenn ich dann hinterher wieder einsteige, gehts wieder aus, obwohl es anbbleiben sollte.. :/

    Mit freundlichen Grüßen
    [KoSoVa] :klugs: