[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
  • @Jeffry


    Danke, nun klappt das schon viel besser :) !


    Nur erscheint der Name von mir selber und nicht von dem Spieler den ich markiere.
    Beispiel: Jeffry ID 1, ich markiere dich, dann soll der 3D Text auch deinen Namen enthalten. Und kann ich die Textfarbe auch so ändern, wie der Name des Spielers?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Klappt nun, danke erneut :)


    Kann ich die Farbe nach der Namensfarbe des Spielers ändern? Oder ist das nicht möglich?


    Ich habs so gemacht, das funktioniert aber nicht.


    format(str, sizeof(str), "{%06x} %s", name,GetPlayerColor(playerid) >>> 8); playertextid = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 1);


    Edit: Fehler gefunden.
    Lösung: Habe name und GetPlayerColor vertauscht.




    Kleine Frage: Wie frage ich ab ob der Spieler schon markiert ist?



    Mit freundlichen Grüßen
    JustMe.77 8)

    Einmal editiert, zuletzt von JustMe.77 ()

  • Beitrag von Jeffry ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: ^ ().
  • Kleine Frage: Wie frage ich ab ob der Spieler schon markiert ist?

    Dazu musst du dann das Array anlegen (unter den Includes):
    new PlayerText3D:pLabel[MAX_PLAYERS][MAX_PLAYERS];


    und es so abfragen:
    if(pLabel[playerid][pID] != PlayerText3D:-1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du hast diesem Spieler bereits ein Label gesetzt.");
    pLabel[playerid][pID] = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 1);


    Bei OnPlayerConnect:
    for(new i = 0; i < MAX_PLAYERS; i++) pLabel[playerid][i] = PlayerText3D:-1;


    Beim Löschen die Variable entsprechend auch auf -1 setzen.

  • Beitrag von malE ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Damit erhalte ich Errors @Jeffry



    CMD:paint(playerid,params[])
    {
    if(!CheckAdminName(playerid)) return 0;
    new pID, tmp[20], idx;
    tmp = strtok(params, idx);
    new name[MAX_PLAYER_NAME];
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    if(!strlen(tmp)) return SendClientMessage(playerid,0x6FFFFFFF,"ERROR:: /paint [ID]");
    if(IsNumeric(tmp)) pID = strval(tmp);
    else pID = ReturnPlayerID(tmp);
    if(pLabel[playerid][pID] != PlayerText3D:-1) return SendClientMessage(playerid, -1, "Error: Du hast diesem Spieler bereits ein Label gesetzt.");
    pLabel[playerid][pID] = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 1)
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,0x6FFFFFFF,"The Player is not online");
    GetPlayerName(pID, name, sizeof(name));
    new str[32];
    format(str, sizeof(str), "{%06x} %s",GetPlayerColor(pID) >>> 8,name);
    pLabel = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 0);
    return 1;
    }



    Mit freundlichen Grüßen
    JustMe.77 8)

  • CMD:paint(playerid,params[])
    {
    if(!CheckAdminName(playerid)) return 0;
    new pID, tmp[20], idx, str[32];//
    tmp = strtok(params, idx);
    new name[MAX_PLAYER_NAME];
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    if(!strlen(tmp)) return SendClientMessage(playerid,0x6FFFFFFF,"ERROR:: /paint [ID]");
    if(IsNumeric(tmp)) pID = strval(tmp);
    else pID = ReturnPlayerID(tmp);
    if(pLabel[playerid][pID] != PlayerText3D:-1) return SendClientMessage(playerid, -1, "Error: Du hast diesem Spieler bereits ein Label gesetzt.");
    pLabel[playerid][pID] = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 1);// Hier hast du ein Semikolon vergessen
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,0x6FFFFFFF,"The Player is not online");
    GetPlayerName(pID, name, sizeof(name));
    format(str, sizeof(str), "{%06x} %s",GetPlayerColor(pID) >>> 8,name);
    pLabel = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 0);
    return 1;
    }

  • @T4eZ


    So weit bin ich eben auch gekommen, ich erhalte bei dir und bei mir diesen Error.


     error 033: array must be indexed (variable "pLabel")


    Zeile:



    pLabel = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 0);



    Mit freundlichen Grüßen
    JustMe.77 8)

  • CMD:paint(playerid,params[])
    {
    if(!CheckAdminName(playerid)) return 0;
    new pID, tmp[20], idx;
    tmp = strtok(params, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,0x6FFFFFFF,"ERROR:: /paint [ID]");
    if(IsNumeric(tmp)) pID = strval(tmp);
    else pID = ReturnPlayerID(tmp);
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,0x6FFFFFFF,"The Player is not online");
    if(pLabel[playerid][pID] != PlayerText3D:-1) return SendClientMessage(playerid, -1, "Error: Du hast diesem Spieler bereits ein Label gesetzt.");
    new name[MAX_PLAYER_NAME];
    GetPlayerName(pID, name, sizeof(name));
    new str[32];
    format(str, sizeof(str), "{%06x} %s",GetPlayerColor(pID) >>> 8,name);
    pLabel[playerid][pID] = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 1);
    return 1;
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry () aus folgendem Grund: Semikolon vergessen

  • Es erscheint die Meldung das ich bereits ein Label gesetzt habe, obwohl das nicht der Fall ist.

    for(new i = 0; i < MAX_PLAYERS; i++) pLabel[playerid][i] = PlayerText3D:-1;
    Hast du das bei OnPlayerConnect eingefügt?




    PS: Du hast bei Zeile 15 den Simikolon vergessen

    Oh, stimmt, das habe ich nicht gesehen. Das habe ich von dir einfach so mitkopiert.

  • Komisch, OnPlayerConnect wird nicht aufgerufen. Ich habe alles im FilterScript erstellt und benutze das bare Script.
    Da ich aber das FS für alle Server kompatibel machen möchte und nicht jedes mal aufs Script zugreifen möchte, habe ich eine Idee wie man es anders lösen könnte, nur weiß
    ich nicht genau wie ich das zu machen habe.


    Ich möchte mit dem Befehl abfragen ob er bereits einen Label hat, wenn ja, dann soll der Label einmal gelöscht werden und wieder erstellt werden.
    Dafür bräuchte ich dann nicht die Abfrage in OnPlayerConnect, oder doch? So hätte ich es sowieso lieber, nur weiß ich nicht genau wie ich das anstellen soll @Jeffry


    Mit freundlichen Grüßen
    JustMe.77 8)

  • @Jeffry


    Es sind nebenbei keine andere FilterScripts am laufen, und im Gamemode returnt OnPlayerConnect 1.
    Vielleicht kann man das ja auch anders abfragen.


    -1 steht für der Spieler hat kein Label, welche Zahl steht dafür das er bereits einen hat (xx)?
    Dann würde ich das so machen und abfragen ob die Zahl xx == xx ist.


    Mit freundlichen Grüßen
    JustMe.77 8)

  • -1 steht für der Spieler hat kein Label, welche Zahl steht dafür das er bereits einen hat (xx)?

    Eine Zahl von 0 bis zum Maximum an erstellbaren Player-Labels heißt, dass er eines hat. Da 0 aber der Standard-Wert der Variable ist, geht das nicht abzufragen, da es auch ein Label mit der ID 0 gibt.


    Alternativ, falls du das OnPlayerConnect nicht aufgerufen bekommst, mache es so:
    new PlayerText3D:pLabel[MAX_PLAYERS][MAX_PLAYERS];
    new bool:pLabelSet[MAX_PLAYERS][MAX_PLAYERS];


    if(pLabelSet[playerid][pID]) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du hast diesem Spieler bereits ein Label gesetzt.");
    pLabel[playerid][pID] = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 1);
    pLabelSet[playerid][pID] = true;


    Und beim Löschen bzw. beim Disconnect:
    pLabelSet[playerid][pID] = false;

  • @Jeffry


    Endlich funktioniert es :)!


    Nur habe ich noch eine kleine Frage, ich sagte ja bereits das ich wenn der Spieler bereits ein Label hat, diesen löschen und wieder erstellen möchte.
    Ist das so korrekt oder kann man das auch besser machen?



    CMD:paint(playerid,params[])
    {
    if(!CheckAdminName(playerid)) return 0;
    new str[32];
    new pID, tmp[20], idx;
    tmp = strtok(params, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,0x6FFFFFFF,"ERROR:: /paint [ID]");
    if(IsNumeric(tmp)) pID = strval(tmp);
    else pID = ReturnPlayerID(tmp);
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,0x6FFFFFFF,"The Player is not online");
    if(pLabelSet[playerid][pID])
    {
    pLabelSet[playerid][pID] = false;
    pLabel[playerid][pID] = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 1);
    pLabelSet[playerid][pID] = true;
    new name[MAX_PLAYER_NAME];
    GetPlayerName(pID, name, sizeof(name));
    format(str, sizeof(str), "{%06x} %s",GetPlayerColor(pID) >>> 8,name);
    }
    pLabel[playerid][pID] = CreatePlayer3DTextLabel(playerid,str,0xFF0000FF,0,0,0.2,350.0, pID, INVALID_VEHICLE_ID, 1);
    pLabelSet[playerid][pID] = true;
    new name[MAX_PLAYER_NAME];
    GetPlayerName(pID, name, sizeof(name));
    format(str, sizeof(str), "{%06x} %s",GetPlayerColor(pID) >>> 8,name);
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Naja du könntest sscanf nutzen bei deinem Befehl ^^ sonst sind paar kleine Fehler drin