Individuelle Wanted textDraw?

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


    Nachdem ich heute herausgefunden habe wie man per TextDraw einen (Wanted)Stern ausgibt wollte ich halt durch 2 TextDraw's das WantedLevel anzeigen lassen
    Scripttechnisch habe ich das so gelöst



    new Text:Stern;
    new Text:WtdZahl;
    Stern = TextDrawCreate(510 ,100 , "]");
    TextDrawFont(Stern , 0);
    TextDrawLetterSize(Stern , 0.5, 2.6);
    TextDrawColor(Stern , 0xffd500FF);
    TextDrawSetOutline(Stern , true);
    TextDrawSetProportional(Stern , true);
    TextDrawSetShadow(Stern , 1);


    WtdZahl = TextDrawCreate(528 ,98 , "0");
    TextDrawFont(WtdZahl , 2);
    TextDrawLetterSize(WtdZahl , 0.5, 2.8);
    TextDrawColor(WtdZahl , 0xFEFEFEFF);
    TextDrawSetOutline(WtdZahl , true);
    TextDrawSetProportional(WtdZahl , true);
    TextDrawSetShadow(WtdZahl , 1);
    ocmd:sw(playerid,params[])
    {
    new pID,wanteds,grund[128],wantedmessage[256],wantedmessage2[256],test[10];
    if(pInfo[playerid][Fraktion] == 2 || pInfo[playerid][Fraktion] == 3 ||pInfo[playerid][Fraktion] == 4)
    {
    if(sscanf(params,"uis",pID,wanteds,grund))return SendClientMessage(playerid,rot,"Benutze /sw [ID] [Anzahl der Wanteds] [Grund]");
    //if(wanteds < 1 || wanteds > 6)return SCM(playerid,rot,"Du kannst nur 1 bis 6 Wanteds geben");
    switch(pInfo[playerid][Fraktion])
    {
    case 2:{format(wantedmessage,sizeof(wantedmessage),"Officer %s gibt dir %i Wanted(s) || Grund: %s",Spielername(playerid),wanteds,grund);
    format(wantedmessage2,sizeof(wantedmessage2),"Du hast %s %i Wanteds gegeben || Grund: %s",Spielername(pID),wanteds,grund);
    SCM(playerid,weinrot,wantedmessage2);
    SCM(pID,weinrot,wantedmessage);
    pInfo[pID][Wanteds] += wanteds;
    format(test,sizeof(test),"%i",pInfo[pID][Wanteds]);
    TextDrawSetString(WtdZahl,test);
    TextDrawShowForPlayer(pID,WtdZahl);}
    case 3:{format(wantedmessage,sizeof(wantedmessage),"Agent %s gibt dir %i Wanted(s) || Grund: %s",Spielername(playerid),wanteds,grund);
    format(wantedmessage2,sizeof(wantedmessage2),"Du hast %s %i Wanteds gegeben || Grund: %s",Spielername(pID),wanteds,grund);
    SCM(playerid,weinrot,wantedmessage2);
    SCM(pID,weinrot,wantedmessage);
    pInfo[pID][Wanteds] += wanteds;
    format(test,sizeof(test),"%i",pInfo[pID][Wanteds]);
    TextDrawSetString(WtdZahl,test);
    TextDrawShowForPlayer(pID,WtdZahl);}
    case 4:{format(wantedmessage,sizeof(wantedmessage),"Soldat %s gibt dir %i Wanted(s) || Grund: %s",Spielername(playerid),wanteds,grund);
    format(wantedmessage2,sizeof(wantedmessage2),"Du hast %s %i Wanteds gegeben || Grund: %s",Spielername(pID),wanteds,grund);
    SCM(playerid,weinrot,wantedmessage2);
    SCM(pID,weinrot,wantedmessage);
    pInfo[pID][Wanteds] += wanteds;
    format(test,sizeof(test),"%i",pInfo[pID][Wanteds]);
    TextDrawSetString(WtdZahl,test);
    TextDrawShowForPlayer(pID,WtdZahl);}
    }
    }
    return 1;
    }


    Meine Frage dazu ist folgende:


    Ich bin zurzeit leider allein was den Server und das Script angeht und kann deswegen nicht alles bestens testen.
    Ich weiß, dass die Wanteds vergeben werden und auch in der TextDraw angezeifgt werden aber kann es sein, dass wenn ein Cop jmd 5 Wanteds gibt,
    dass dann für jeden die 5 Wanteds in der TextDraw dastehen?
    Ich bin mir bei der Funktion TextDrawSetString unsicher
    Die gilt doch bei jedem für die TextDraw oder? Also wenn einer 5Wanteds hat stehen bei jedem 5 egal wv er/sie hat
    Wie kann ich das besser lösen?


    So ich hoffe das war nicht zu Wild formuliert und das mit jmd helfen kann :D


    Ich muss übrigens gleich off wenn noch jmd Fragen oder so hat kann ich erst morgen antworten :S


    MfG
    MrMonkey

  • Mit deiner Vermutung hast du Recht das , wenn sich die wanetdanzahl bei einem spieler ändert das dies bei jedem ist.


    Wie kann man das verhindern das jeder dies unterschiedlich hat.
    Dazu gäbe es zwei option wenn die textdraws für den spieler erstellst wenn ein neuer Spielerconnectet.
    daher solltest du deine definierte Textdraws umbennen
    von


    new Text:Stern;
    new Text:WtdZahl;


    zu


    new Text:Stern[MAX_PLAYERS];
    new Text:WtdZahl[MAX_PLAYERS];


    oder du arbeitet mit PlayerTextDraws


    http://wiki.sa-mp.com/wiki/CreatePlayerTextDraw


  • Vielen Dank für die ausführliche Hilfe
    Ich bin gestern Abend selbst noch drauf gekommen, dass man ja auch eine TextDraw mit [MAX_PLAYERS] versehen kann um sie für jeden unterschiedlich zumachen
    und hab das ganze dann wie folgt gelöst:


    new Text:Stern;
    new Text:WtdZahl[MAX_PLAYERS];
    Public OnGameModeInit()
    Stern = TextDrawCreate(510 ,100 , "]");
    TextDrawFont(Stern , 0);
    TextDrawLetterSize(Stern , 0.5, 2.6);
    TextDrawColor(Stern , 0xffd500FF);
    TextDrawSetOutline(Stern , true);
    TextDrawSetProportional(Stern , true);
    TextDrawSetShadow(Stern , 1);
    public OnPlayerSpawn
    new WtdAnzahl[10];
    format(WtdAnzahl,sizeof(WtdAnzahl),"%i",pInfo[playerid][Wanteds]);
    TextDrawShowForPlayer(playerid,Stern);
    WtdZahl[playerid] = TextDrawCreate(528 ,98 ,"0");
    TextDrawFont(WtdZahl[playerid] , 2);
    TextDrawLetterSize(WtdZahl[playerid] , 0.5, 2.8);
    TextDrawColor(WtdZahl[playerid] , 0xFEFEFEFF);
    TextDrawSetOutline(WtdZahl[playerid] , true);
    TextDrawSetProportional(WtdZahl[playerid] , true);
    TextDrawSetShadow(WtdZahl[playerid] , 1);
    TextDrawSetString(WtdZahl[playerid],WtdAnzahl);
    TextDrawShowForPlayer(playerid,WtdZahl[playerid]);
    ocmd:sw(playerid,params[])
    {
    new pID,wanteds,grund[128],wantedmessage[256],wantedmessage2[256],test[10];
    if(pInfo[playerid][Fraktion] == 2 || pInfo[playerid][Fraktion] == 3 ||pInfo[playerid][Fraktion] == 4)
    {
    if(sscanf(params,"uis",pID,wanteds,grund))return SendClientMessage(playerid,rot,"Benutze /sw [ID] [Anzahl der Wanteds] [Grund]");
    if(wanteds < 1 || wanteds > 20)return SCM(playerid,rot,"Du kannst nur 1 bis 20 Wanteds geben");
    switch(pInfo[playerid][Fraktion])
    {
    case 2:{format(wantedmessage,sizeof(wantedmessage),"Officer %s gibt dir %i Wanted(s) || Grund: %s",Spielername(playerid),wanteds,grund);
    format(wantedmessage2,sizeof(wantedmessage2),"Du hast %s %i Wanteds gegeben || Grund: %s",Spielername(pID),wanteds,grund);
    SCM(playerid,weinrot,wantedmessage2);
    SCM(pID,weinrot,wantedmessage);
    pInfo[pID][Wanteds] += wanteds;
    format(test,sizeof(test),"%i",pInfo[pID][Wanteds]);
    TextDrawSetString(WtdZahl[pID],test);
    if(pInfo[pID][Wanteds] > 20)
    {
    pInfo[pID][Wanteds] = 20;
    }
    TextDrawShowForPlayer(pID,WtdZahl[playerid]);}
    case 3:{format(wantedmessage,sizeof(wantedmessage),"Agent %s gibt dir %i Wanted(s) || Grund: %s",Spielername(playerid),wanteds,grund);
    format(wantedmessage2,sizeof(wantedmessage2),"Du hast %s %i Wanteds gegeben || Grund: %s",Spielername(pID),wanteds,grund);
    SCM(playerid,weinrot,wantedmessage2);
    SCM(pID,weinrot,wantedmessage);
    pInfo[pID][Wanteds] += wanteds;
    format(test,sizeof(test),"%i",pInfo[pID][Wanteds]);
    TextDrawSetString(WtdZahl[pID],test);
    if(pInfo[pID][Wanteds] > 20)
    {
    pInfo[pID][Wanteds] = 20;
    }
    TextDrawShowForPlayer(pID,WtdZahl[playerid]);}
    case 4:{format(wantedmessage,sizeof(wantedmessage),"Soldat %s gibt dir %i Wanted(s) || Grund: %s",Spielername(playerid),wanteds,grund);
    format(wantedmessage2,sizeof(wantedmessage2),"Du hast %s %i Wanteds gegeben || Grund: %s",Spielername(pID),wanteds,grund);
    SCM(playerid,weinrot,wantedmessage2);
    SCM(pID,weinrot,wantedmessage);
    pInfo[pID][Wanteds] += wanteds;
    format(test,sizeof(test),"%i",pInfo[pID][Wanteds]);
    TextDrawSetString(WtdZahl[pID],test);
    if(pInfo[pID][Wanteds] > 20)
    {
    pInfo[pID][Wanteds] = 20;
    }
    TextDrawShowForPlayer(pID,WtdZahl[playerid]);}
    }
    }
    return 1;
    }


    Das sollte doch auch funktionieren oder?
    Wie gesgat ich kanns leider nicht testen :(


    Und was ist der Unterschied zu den PlayerTextDraw's haben die einen Vorteil?


    Den Stern habe ich übrigens bei OnGameModeInit gelassen weil der sich nie verändert und bei jedem immer dasteht auch bei 0 Wantds dann steht da ne 0 neben dem Stern^^

  • ich hab dein code gestern nicht wirklich durch geschaut und bin ihrgend wie davon ausgegangen das du die wanted anzahl des spuelers mit den sternen ausgeben wills. naja leider weisss ich nicht wie weit die anzahl von dem stern weg ist . da du das ganze auch zusammen legen kannst. die oben genannte funktion erstellt fuer jeden spieler der connectet ein textdraw steht ja auch im name das kennt man ja auch bei den 3d textlabels oder auch bei objekten.

  • Das ist nicht weit weg sieht man ja an dem X-Wert


    Ja das es für jeden Spieler beim Connect eine TextDraw erstellt verstehe ich schon aber ob ich nun eine textDraw mache die für jeden Spieler unterschiedlich ist/sein kann oder eine die für einen beim Connect erstellt wird ist doch egal oder?
    Oder gibts doch unterschiede wo man sagen kann ja eine PlayerTextDraw zunutzen ist viel besser als eine "normale" mit [MAX_PLAYERS]


    Sry für die Fragen^^ aber ich hab bisher noch nie wirklich mit textDraw's gearbeitet

  • der vorteil ist das die playertextdraws sich automatisch zerstoeren wenn sich der spieler auslogt und es hat so gesehen kein limit wie die normalen textdraws welche du nur 256 mal erstellen kannst.also im klar text du hast 300 spieler auf dem server so wuerden bei 44 kein textdraw angezeigt werden