[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
  • ocmd:makeadmin(playerid, params[])
    {
    new query[128], string[128], rank, pID, name[MAX_PLAYER_NAME];
    if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid,ROT,"Du brauchst das Rcon Passwort.");
    if(sscanf(params,"ui",pID,rank))return SendClientMessage(playerid,-1,"Tippe: /makeadmin [spieler] [level]");
    if(rank<0||rank>7)return SendClientMessage(playerid,ROT,"Ungültig.");
    GetPlayerName(pID, name, MAX_PLAYER_NAME);
    format(string, sizeof(string),"Du hast Adminlevel erhalten. Checke /stats");
    SendClientMessage(pID,ROT,string);
    format(query, sizeof(query), "UPDATE accounts SET adminlevel = '%d' WHERE name = '%s'",name);
    mysql_tquery(mysqlHandle, query, "", "");
    return 1;
    }


    "name" nach "WHERE" eben dazu ändern, wie die Spalte heißt, in der der Name des Spielers steht.



    Zwecks des zweiten Befehls: Was willst du überhaupt machen?

  • Was genau stimmt bei der Abfrage nicht:


    if(GetPVarInt(name, "Banned") == 1)return SendClientMessage(playerid,Rot,"Der Spieler ist bereits gebannt!");
    if(name == playerid) return SendClientMessage(playerid, Rot, "Du kannst dich nicht selbst bannen!");


    ocmd:unban(playerid,params[])
    {
    new Spielerdatei[128],name[MAX_PLAYER_NAME];
    if(GetPVarInt(playerid, "loggedin") == 0)return SendClientMessage(playerid,Rot,"Du bist nicht eingeloggt!");
    if(!IsPlayerAnAdmin(playerid,5))return SendClientMessage(playerid,Rot,"Du bist kein Admin oder dein Adminrang ist zu niedrig!");
    if(GetPVarInt(name, "Banned") == 1)return SendClientMessage(playerid,Rot,"Der Spieler ist bereits gebannt!");
    if(name == playerid) return SendClientMessage(playerid, Rot, "Du kannst dich nicht selbst bannen!");
    if(sscanf(params,"s",name)) return SendClientMessage(playerid,Gelb,"Benutzung: /unban [Spielername/ID]");
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    if(!dini_Exists(Spielerdatei)) return SendClientMessage(playerid, Rot, "Es existiert kein Spieler mit diesem Namen in der Datenbank.");
    dini_IntSet(Spielerdatei,"Banned",0);
    dini_IntSet(Spielerdatei,"Grund",0);
    new string[128];
    format(string,sizeof(string),"AdmCmd: %s wurde von %s entbannt!",name,SpielerName(playerid));
    SendClientMessageToAll(HOrange,string);
    return 1;
    }
    709) : error 035: argument type mismatch (argument 1)
    (726) : error 035: argument type mismatch (argument 1)
    (727) : error 033: array must be indexed (variable "name")

  • So sollte es passen:
    ocmd:unban(playerid,params[])
    {
    new Spielerdatei[128],name[MAX_PLAYER_NAME];
    if(GetPVarInt(playerid, "loggedin") == 0)return SendClientMessage(playerid,Rot,"Du bist nicht eingeloggt!");
    if(!IsPlayerAnAdmin(playerid,5))return SendClientMessage(playerid,Rot,"Du bist kein Admin oder dein Adminrang ist zu niedrig!");
    if(sscanf(params,"s",name)) return SendClientMessage(playerid,Gelb,"Benutzung: /unban [Spielername/ID]");
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    if(!strcmp(name, SpielerName(playerid))) return SendClientMessage(playerid, Rot, "Du kannst dich nicht selbst bannen!");
    if(!dini_Exists(Spielerdatei)) return SendClientMessage(playerid, Rot, "Es existiert kein Spieler mit diesem Namen in der Datenbank.");
    if(strval(dini_Get(Spielerdatei,"Banned")) == 0)return SendClientMessage(playerid,Rot,"Der Spieler ist bereits entbannt!");
    dini_IntSet(Spielerdatei,"Banned",0);
    dini_IntSet(Spielerdatei,"Grund",0);
    new string[128];
    format(string,sizeof(string),"AdmCmd: %s wurde von %s entbannt!",name,SpielerName(playerid));
    SendClientMessageToAll(HOrange,string);
    return 1;
    }


    Die Reihenfolge und die Verwendung der Variablen war nicht korrekt.

  • Was genau hast du denn vor, nachdem es gespeicher worden ist? Wird der HEX Wert in einem String verwendet (also muss er genau in dem Format ausgegeben werden), oder willst du es zum Beispiel für SetPlayerColor verwenden?

    Wenn du es als String haben willst, dann kannst du es mit "%x" formatieren (format) und als VARCHAR in der Tabelle speichern. Und wenn du es nur für eine Anweisung wie SetPlayerColor (o.ä.) speichern willst, dann reicht es, wenn du es wie eine Ganzzahl (Integer) behandelst, sprich du speicherst den HEX Wert einfach als Integer ("%d" bzw. "%i") und in der Datenbank als INT, und liest ihn so auch aus. Es ist bei solchen Funktionen (SetPlayerColor) egal, ob du beispielsweise "-1" oder "0xFFFFFFFF" verwendest, da beides das Gleiche ist.

  • Du erstellst ein Objekt und verwendest SetObjectMaterialText um den Hintergrund transparent zu machen und die Schrift zu erstellen.
    Dann attachst du das Objekt an das Fahrzeug.
    Um die Koordinaten dafür herauszufinden hab es mal ein Filterscript - Du kannst es aber auch per Hand ausprobieren. Allerdings werde ich das Filterscipt gleich mal suchen und reineditieren.

  • Ich habe das jetzt so, aber das Objekt wird nicht an das Vehicle attached. Und es wird in der mitte des Sultans gespawnt, weil ich noch nicht die Koordniaten der Türen habe.


    Spoiler anzeigen
    ocmd:supcar(playerid,params[])

    Spoiler anzeigen
    if(!IsPlayerAnAdmin(playerid,1)) return SendClientMessage(playerid,0xFF3C3CFF,"AdmCmd: Sie besitzen nicht die nötigen Rechte um diesen Befehl zu nutzen!");

    Spoiler anzeigen
    if(HatSupmobil[playerid] == 1) return SendClientMessage(playerid,0x00D2D2FF,"Du hast bereits ein Supporter Fahrzeug erstellt! Lösche es bevor du dir ein neues erstellst.");

    Spoiler anzeigen
    new Float:X, Float:Y, Float:Z, SupText;

    Spoiler anzeigen
    GetPlayerPos(playerid,X,Y,Z);

    Spoiler anzeigen
    SupMobil[playerid] = CreateVehicle(560,X,Y,Z,3,165,165,-1);

    Spoiler anzeigen
    SetVehicleNumberPlate(SupMobil[playerid],"Supporter");

    Spoiler anzeigen
    PutPlayerInVehicle(playerid, SupMobil[playerid], 0);

    Spoiler anzeigen
    Support3DText[playerid] = Create3DTextLabel("Supporter im Dienst",0xFFFFFF,0.0,0.0,0.0,50.0,0,0);

    Spoiler anzeigen
    Attach3DTextLabelToVehicle(Support3DText[playerid],SupMobil[playerid],0.0,0.0,1.0);

    Spoiler anzeigen
    new objfont = CreateObject(19483,X,Y,Z,0,0,0,300.0);

    Spoiler anzeigen
    AttachObjectToVehicle(objfont,SupText,0.0, 0.0, 1.0, 0.0, 0.0, 0.0);

    Spoiler anzeigen
    SetObjectMaterialText(objfont,"Supporter",0,90,"Arial", 28, 0, 0xFFFF8200, 0xFF000000,1);

    Spoiler anzeigen
    HatSupmobil[playerid] = 1;

    Spoiler anzeigen
    SendClientMessage(playerid,0xFFFFFF,"Du hast ein Supporter Fahrzeug erstellt! Benutze /delscar um das Fahrzeug zu Entfernen.");

    Spoiler anzeigen
    return 1;

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • Das Objekt wird leider nicht Attached, und ich kann damit leider nichts anfangen. habe das geprintet bekommen. Wo muss jetzt die Länge rein? :pinch: [18:33:30] Der Sultan ist 2.3m Breit, 5.4m Lang und 1.6m Hoch


    //Edit


    Ich habe es hinbekommen, Danke ;) :thumbup:

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • Ist es möglich, in irgendeiner Art & Weise die "Strcat" Funktion mit einem Format zu belegen? :huh:

    Mein Fehlversuch


    CMD:admins(playerid, params[])
    {
    new stringfull[524], string[128], count = 0;
    foreach (new i : Player) if (PlayerData[i][pAdmin] > 0 && PlayerData[i][pAdminHide] < 1)
    {
    if (PlayerData[i][pAdminDuty])
    format(string,sizeof(string), "%s {33CC33}(%s (%d)) {33CC33}(Im Support-Dienst)\n", ReturnName(i, 0), adminname(i), PlayerData[i][pAdmin]);
    strcat(stringfull,string);

    Mein Fehlversuch
    else
    format(string,sizeof(string), "%s {33CC33}(%s (%d)) {FF6347}(Nicht im Dienst)\n", ReturnName(i, 0), adminname(i), PlayerData[i][pAdmin]);
    strcat(stringfull,string);

    Mein Fehlversuch
    count++;
    }
    if (!count) {
    strcat(stringfull,"Kein Administrator online.");
    }
    Dialog_Show(playerid, AdminList, DIALOG_STYLE_MSGBOX, "Administratoren", string, "Schließen", "");
    return 1;
    }

  • Das strcat kannst du dir sparen, so ist es besser:
    CMD:admins(playerid, params[])
    {
    new stringfull[524], count = 0;
    foreach (new i : Player) if (PlayerData[i][pAdmin] > 0 && PlayerData[i][pAdminHide] < 1)
    {
    if(PlayerData[i][pAdminDuty]) format(stringfull,sizeof(stringfull), "%s%s {33CC33}(%s (%d)) {33CC33}(Im Support-Dienst)\n", stringfull, ReturnName(i, 0), adminname(i), PlayerData[i][pAdmin]);
    else format(stringfull,sizeof(stringfull), "%s%s {33CC33}(%s (%d)) {FF6347}(Nicht im Dienst)\n", stringfull, ReturnName(i, 0), adminname(i), PlayerData[i][pAdmin]);
    count++;
    }
    if (!count)
    {
    format(stringfull,sizeof(stringfull), "Kein Administrator online.");
    }
    Dialog_Show(playerid, AdminList, DIALOG_STYLE_MSGBOX, "Administratoren", stringfull, "Schließen", "");
    return 1;
    }

  • @BlackAce: Jap, ist mir erst im Nachhinein auch nochmal aufgefallen. Wäre so oder so aber falsch. ^^
    Danke danke. Ich dachte nur, dass man eventuell irgendwie die Strcat-Funktion als Format machen könnte.
    Aber wenn es so auch möglich ist, dann ist's ja gut. :)

  • Jeffry: Wie es es am besten, das Geburtsdatum zu Speichern? ist es möglich, dies in das Alter umzuwandeln? Also dass das Geburtsdatum sowie das Alter gespeichert werden? :D

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • Jeffry: Wie es es am besten, das Geburtsdatum zu Speichern? ist es möglich, dies in das Alter umzuwandeln? Also dass das Geburtsdatum sowie das Alter gespeichert werden? :D


    Das Prinzip haben wir hier schon mal durchgearbeitet: http://forum.sa-mp.de/gta-mult…er-abfragen-2#post1991628 Ich denke damit kommst du klar.


    Geburtsdatum als VARCHAR speichern (String) und Alter als INT (Integer). Achte aber darauf, die Spalte nicht unbedingt "Alter" zu nennen, da dies ein MySQL Befehl ist. Nenn es lieber "Age" oder "pAlter", dann passieren dir keine unerklärlichen Fehler.