[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Korrekt, Problem besteht aber darin, dass ich die Positionen davon nicht herausfinde.

    • Offizieller Beitrag

    Ich habe das immer mit einem TextDrawEditor eingestellt. Weiß leider nicht von wem der war. Der war recht simple und lief über Dialoge.


    Zuvor habe ich es per Augenmaß eingerichtet, was auch immer gut funktioniert hat.


    Normalerweise sollte aber TextSize auch die Größe der Box regeln (wenn Box verwendet wird), wenn es mich nicht täuscht. Das heißt, du kannst ja sozusagen Ingame die Box als Prüfmaß hernehmen.

  • Der Lösungsvorschlag bringt mir leider irgendwie derzeit auch nichts. Vielleicht liegt es gerade am Wetter, dass meine Birne nicht 100%ig läuft.
    GUI_Login[playerid][3] = CreatePlayerTextDraw(playerid, 459.745239, 253.500000, "usebox");
    PlayerTextDrawLetterSize(playerid, GUI_Login[playerid][3], 0.000000, 2.340741);
    PlayerTextDrawTextSize(playerid, GUI_Login[playerid][3], 331.587097, 20.000000);
    PlayerTextDrawAlignment(playerid, GUI_Login[playerid][3], 1);
    PlayerTextDrawColor(playerid, GUI_Login[playerid][3], 0);
    PlayerTextDrawUseBox(playerid, GUI_Login[playerid][3], true);
    PlayerTextDrawBoxColor(playerid, GUI_Login[playerid][3], 0);
    PlayerTextDrawSetShadow(playerid, GUI_Login[playerid][3], 0);
    PlayerTextDrawSetOutline(playerid, GUI_Login[playerid][3], 0);
    PlayerTextDrawFont(playerid, GUI_Login[playerid][3], 0);
    PlayerTextDrawSetSelectable(playerid, GUI_Login[playerid][3], 1);

    • Offizieller Beitrag

    Was willst du denn auch für eine Position herausfinden? Du musst sie doch selbst angeben.
    Zu aller Erst: Der X-Parameter von PlayerTextDrawLetterSize liegt bei 0.0. Das ist so nicht möglich. Auch wenn eine Box angezeigt wird, diese wirst du trotzdem nicht anklicken können. Wenn du eine Box haben möchtest ohne Text, dann verwende ein "_", diese werden nämlich nicht angezeigt. Oder verwende direkt ein Sprite (Das bringt am wenigsten Probleme). Den zweiten Parameter (Y-Position) kriegst du mit einer Multiplikation von 0.135 raus. (Wie auf der Wiki-Seite: http://wiki.sa-mp.com/wiki/PlayerTextDrawLetterSize).


    Das heißt, wenn die Box bei PlayerTextDrawTextSize(playerid, tmptxd, 499.745239, 20.000000); liegt, dann sollte LetterSize folgendermaßen aussehen: PlayerTextDrawLetterSize(playerid, tmptxd, 1.000000, 2.700000); (Hier berechnet: 20*0.135).



    Die Positionen bei CreatePlayerTextDraw sind immer die Start-Positionen. Also sollte PlayerTextDrawTextSize im besten Fall über dessen sein (tausche in diesem Fall die X-Positionen der beiden Funktionen).



    Mit folgendem Code wird eine rote Box erstellt, welche keine Zeichen besitzt, 20 Einheiten hoch ist und 168.158142 Einheiten breit:


    Der ganze Bereich ist anklickbar.



    Wie gesagt, wenn du dir es einfacher machen möchtest, dann benutze einfach ein Sprite (gibt ja einen Quadrat), dann musst du nicht die Start- und End-Positionen berechnen.

  • Guten Abend,


    Ich bin grade dabei ein Dynamisches Fraktionssystem zuschreiben und komme irgendwie nicht weiter,
    wie kann ich wenn ich alle Fraktionen auflist per schleife im DIALOG_STYLE _LIST das letzte listitem herrausfinden?


    Ich bedanke mich schonmal im vorraus für eure unterstützung.



    MfG,


    iTzTrappY

  • Könntest einfach ne Variable hochzählen lassen (vorher prüfen ob die Fraktion existiert etc.) müsstest dann aber bei -1 anfangen da listitems bei 0 anfangen (bin mir da nicht sicher)

    Stimmt danke

  • Da musst du eigentlich nichts abziehen, da ja dein index bei 0 beginnt und dein listitem auch :)


    C
    //Mal bisschen Pseudo-Code:
    new string[MAX_FRAKTIONEN * 16];
    for(new i; i<MAX_FRAKTIONEN; i++)
    {
        format(string,sizeof(string),"%s%s\n",string,Fraktion[i][Frak_Name]);
    }
    if(string[0] == EOS) return SCM(playerid,-1,"* Es existieren noch keine Fraktionen!");
    ShowPlayerDialog(playerid,500,DIALOG_STYLE_LIST,"Fraktions Liste",string,"Okay","");


    Es ist wichtig, dass du keine Fraktionen auslässt.


    Sagen wir beispielsweise dein Array sieht so aus:



    C
    Fraktion[0][Frak_Name] = "LSPD";
    Fraktion[1][Frak_Name] = "Empty";
    Fraktion[2][Frak_Name] = "SFPD";

    Wichtig ist, dass du dann auch das Empty anzeigst, weil sonst ja deine listitems komplett durcheinander geraten.


    Falls du das nicht willst, gibt es viele Möglichkeiten das zu Problem anderweitig zu lösen..entweder mit Arrays oder du packst die Fraktionsid einfach in den String und splittest die wieder raus xD

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Ich möchte als letztes listitem machen das man eine erstellen kann, aber danke für die hilfreichen Informationen.


    MfG,


    iTzTrappY

  • Hey,


    ich scheitere gerade an der einfachsten Logik und bin irgendwie am verzweifeln.


    Ich habe folgenden Befehl:
    new Float:X,Float:Y,Float:Z;
    new nachricht[128], text[128];
    new pActor,Farbe;
    GetActorPos(pActor,X,Y,Z);
    if (sscanf(params, "iss",pActor,Farbe,text))return SendClientMessage(playerid,COLOR_WHITE, "[hilfe] -");
    format(nachricht, sizeof(nachricht),"%s",text);
    Create3DTextLabel(nachricht,Farbe,X,Y,Z+0.3,5.0,0);


    So jetzt das Problem: Der Befehl lautet InGame dann: /textdraw [ID des Actor] [Farbe] [Text], das Problem ist, wenn ich die Farbe eingebe, die ich oben definiert habe z.B. #define COLOR_WHITE 0xFFFFFFAA und probiere dann dort in dem Befehl einzugeben(Mit COLOR_WHITE) kommt immer ein schwarzer Text InGame. (Text und mit der ID funktioniert alles)
    Wo liegt der Fehler?


    PS: Hab erst angefangen mit dem Scripten, bitte nicht all zu streng sein mit dem Code^^


    Ich bedanke mich im Voraus für die Hilfe :)

  • Sowas kann nicht funktionieren.


    COLOR_WHITE ist nicht das selbe wie "COLOR_WHITE"
    Das eine ist eine definition, das andere ist ein string.


    Du kannst entweder den benutzer einen Farbcode eingeben lassen, oder du machst es so:

    new Float:X, Float:Y, Float:Z,
    nachricht[128], text[128],
    pActor, Farbe[32], colorcode;


    if (sscanf(params, "is[32]s[128]", pActor, Farbe, text)) return SendClientMessage(playerid, COLOR_WHITE, "[hilfe] -");


    GetActorPos(pActor, X, Y, Z);
    format(nachricht, sizeof(nachricht), "%s", text);


    if (!strcmp(Farbe, "weiß", true)) colorcode = COLOR_WHITE;
    else if (!strcmp(Farbe, "schwarz", true)) colorcode = COLOR_BLACK;
    else if (!strcmp(Farbe, "rot", true)) colorcode = COLOR_RED;
    // etc.
    else return SendClientMessage(playerid, COLOR_WHITE, "Ungültige Farbe.");



    Create3DTextLabel(nachricht, colorcode, X, Y, Z+0.3, 5.0, 0);

  • @Alva.


    Jetzt hatte ich dir gerade geantwortet :P



    Kannst ja mal n Blick darauf werden, falls es doch noch Unklarheiten geben sollte :D

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Guten Abend,


    Mein Pawno Compiler brauch ungewöhnlich lange zu compilieren bei knapp 1600 Zeilen woran kann dies Liegen?


    Mit freundlichen Grüßen,


    iTzTrappY ?(


    @Jeffry haben Sie eventuell eine Idee

    Einmal editiert, zuletzt von iTzTrappY ()

  • Hi. Ich versuche gerade, einen Actor nach Erstellung einen User anschauen zu lassen. Dazu habe ich folgende Funktion gefunden, die ich etwas für meine Zwecke angepasst habe:
    http://forum.sa-mp.com/showthread.php?t=28664&page=3


    Jetzt wird die Richtung des Actors allerdings erst geändert, wenn er neu gestreamt wird. Hat jemand eine gute Idee für einen Workaround, ohne den Spieler temporär wegporten zu müssen? Mir fiele noch ein, den Actor einfach mit der richtigen Angle neu zu erstellen, allerdings hatte ich gehofft, da eine besser Lösung zu finden.


    Danke im Voraus. :)

  • Mein Pawno Compiler brauch ungewöhnlich lange zu compilieren bei knapp 1600 Zeilen woran kann dies Liegen?

    Ein möglicher Grund sind viele Variablen oder sehr große Arrays, oder beides zusammen.
    Die Anzahl der Zeilen ist eher zweitrangig.


    Was heißt ungewöhnlich lange? Der Code meines ehemaligen Gamemodes hat ca. 1 Minute kompiliert.

  • 30 Sekunden,


    Als ich gestern weiter machte ging es noch schneller und dann hatte ich glaub das Faktionsvehicle system geschrieben und dannach braucht er länger :o

  • Möglicherweise hast du dort ein großes Array eingebaut, eventuell unabsichtlich.
    Beachte, dass mehrdimensionale Array sich natürlich aufmultiplizieren.
    Wie groß ist deine AMX Datei?

    Code
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    Header size:           3640 bytes
    Code size:           119860 bytes
    Data size:         63892348 bytes
    Stack/heap size:      16384 bytes; estimated max. usage: unknown, due to recursion
    Total requirements:64032232 bytes
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen