[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
  • Wieso werden mir hier keine Nachrichten gesendet? Der Spieler wird zwar Entbannt, aber es wird mir, wenn ich einen nicht Existierenden Namen angebe, wird mir dort keine Nachricht gesendet.
    In der Log wird es richtig angezeigt: 19/01/2015-18:51:47 | Admin: Eddy_Mind * Zielperson: Eddy * Grund: Test
    geprintet wird: [18:51:47] {FF1111}Admin Info: {E5E5E5}Der Admin {23A7F5}Eddy_Mind {E5E5E5}(ID:{23A7F5}0{E5E5E5}) hat den Spieler {23A7F5}Eddy{E5E5E5} Entbannt.- {FF7979}Grund: {E5E5E5}Test




    {
    new query[1000],rows,fields;
    switch(sqlresultid)
    {
    case MySQL_Check_UnBan:
    {
    cache_get_data(rows,fields);
    if(!rows)
    {
    if(!IsPlayerAnAdmin(extraid,1)) return SendClientMessage(extraid,0xCC4747,"Dieser Spieler ist laut der Datenbank nicht Gesperrt oder nicht Registriert! Bitte Überprüfen Sie den Spielernamen.");
    return 1;
    }
    format(query,sizeof(query),"DELETE FROM `Banned` WHERE Name = '%s'",index);
    mysql_function_query(DBHandle,query,false,"","");
    format(query,sizeof(query),"{FF1111}Admin Info: {E5E5E5}Der Admin {23A7F5}%s {E5E5E5}(ID:{23A7F5}%i{E5E5E5}) hat den Spieler {23A7F5}%s{E5E5E5} Entbannt.- {FF7979}Grund: {E5E5E5}%s",Spieler[extraid][pName],extraid,index,index2);
    SendClientMessageToAll(0xCC4747,query);
    printf(query);
    format(query,sizeof(query),"Admin: %s * Zielperson: %s * Grund: %s",Spieler[extraid][pName],index,index2);
    SavePlayerData(extraid);
    Log("Unbansqllog",query);
    return 1;
    }
    }
    return 1;
    }


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

    – Noël Coward

  • Ich versuche mich derzeit von Funktionen fernzuhalten und probiere mit Makros rum, nur warum bekomme ich hier denn Fehlermeldungen.


    PWN CODE
    #define givePlayerMoney(%0,%1) pInfo[%0][pGeld]+=%1 && GivePlayerMoney(%0,%1)
    #define setPlayerMoney(%0,%1) ResetPlayerMoney(%0) && pInfo[%0][pGeld]=0 && GivePlayerMoney(%0,%1)


    Fehlermeldung

    Zitat

    error 022: must be lvalue (non-constant)


    Zeile
    setPlayerMoney(playerid, cache_get_field_content_int(0, "Geld", Handle));


    mfg :thumbup:

  • Schreib mal deine Makros so:


    #define givePlayerMoney(%0,%1) pInfo[%0][pGeld]+=%1,GivePlayerMoney(%0,%1)
    #define setPlayerMoney(%0,%1) ResetPlayerMoney(%0),pInfo[%0][pGeld]=%1,GivePlayerMoney(%0,%1)


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Bin gerade an einem Tut Textdraw und wollte fragen ob es eine andere Möglichekit gibt ein Große flächte mit Text zufüllen als mit 20 Textdraws.


    Ja, du kannst mit ~n~ einen Zeilenumbruch in deinem TextDraw machen und somit über mehrere Zeilen schreiben :)


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Ich bin hier gerade mächtig am überlegen wie man eine Variable durchgeht.


    Ist nützlich für meine Skin Auswahl.


    PWN CODE:
    new skins[16][1] = {
    {1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13},{14},{15},
    };


    for(new i;i<sizeof skins;i++)
    {
    if(GetPlayerSkin(playerid) == skins[i]){
    SendClientMessage(playerid, -1, "Du warst auf dem Wert bereits, der Integer wird erhöht.");
    SetPlayerSkin(playerid,skins[i+1]);
    }
    }


    Ich weiß aber nicht direkt ob ich das richtig angehe, habt ihr bessere Vorschläge?


    Das soll heißen, das ich am ende mit der Rechten und Linken Pfeiltaste den Skin 1-15 Switchen kann, jetzt so als Beispiel.


    mfg :thumbup:

  • Zitat

    habt ihr bessere Vorschläge?

    Ja.
    A) Änder deinen Avatar, sieht nicht so schön aus.
    B) Achte bitte auf die Rechtschreibung, auch in DEBUG Nachrichten

    Zitat

    Du warst auf dem Wert bereits, der Integer wird erhöht. -> Du warst bereits auf diesem Wert

    C) Sehe eig. keinen Fehler, ich denke ich würde es nicht anders angehen. Wie wär's wenn du es mal ausprobierst ?


    EDIT
    Du solltest dir angewöhnen, Befehle(Funktionen) zusammen ausführen zu lassen.


    SendClientMessage(playerid, -1, "Du warst auf dem Wert bereits, der Integer wird erhöht."); //Du lässt erst die Nachricht abschicken
    SetPlayerSkin(playerid,skins[i+1]);//Dann setzt du den Skin
    SendClientMessage(playerid, -1, "Du warst auf dem Wert bereits, der Integer wird erhöht."),//Du schickst die Nachricht ab
    SetPlayerSkin(playerid,skins[i+1]);//Und setzt direkt den Skin
    Der nette [DT]Sniper: hatte dazu mal was geschrieben, ich suchs dir gleich raus.



  • Gut, ist soweit Funktionstüchtig.
    Aber wenn ich das ganze zurücklaufen lassen will?


    static x;
    if(x == sizeof(SKINS_ZIVI)) x=1;
    SetPlayerSkin(playerid,SKINS_ZIVI[x]),x--;


    So Funktioniert das nicht :/
    Außerdem mal ne frage nebenbei, wenn man die Pfeiltasten benutzt..wird dann OnPlayerKeyStateChange aufgerufen?


    mfg :thumbup:

  • Als erstes muss das so:
    static x;
    if(x == sizeof(SKINS_ZIVI)) x=0;
    SetPlayerSkin(playerid,SKINS_ZIVI[x]),x--;


    Die Pfeiltasten werden nicht über OnPlayerKeyStateChange aufgerufen, sondern die musst du mit OnPlayerUpdate abfragen.
    Das ganze kannst du mit GetPlayerKeys anstellen ;)

  • Als erstes muss das so:
    static x;
    if(x == sizeof(SKINS_ZIVI)) x=0;
    SetPlayerSkin(playerid,SKINS_ZIVI[x]),x--;


    Die Pfeiltasten werden nicht über OnPlayerKeyStateChange aufgerufen, sondern die musst du mit OnPlayerUpdate abfragen.
    Das ganze kannst du mit GetPlayerKeys anstellen ;)


    Ich weiß, habe ich bereits gemacht.


    Über OnPlayerUpdate läuft mir das zu "Hyper aktiv " ab ..... :rolleyes:


    if(GetPVarInt(playerid,"SkinC"))
    {
    new key[3];
    GetPlayerKeys(playerid, key[0], key[1], key[2]);
    switch(key[2])
    {
    case KEY_RIGHT:
    {
    static x;
    if(x == sizeof(SKINS_ZIVI)) x=1;
    SetPlayerSkin(playerid,SKINS_ZIVI[x]),x++;
    /*if(getPlayerTeam(playerid) == TEAM_ZIVI)
    {
    switch(GetPlayerSkin(playerid))
    {
    case 1:SetPlayerSkin(playerid,2);
    case 2:SetPlayerSkin(playerid,3);
    case 3:SetPlayerSkin(playerid,4);
    case 4:SetPlayerSkin(playerid,5);
    case 5:SetPlayerSkin(playerid,6);
    case 6:SetPlayerSkin(playerid,7);
    case 7:SetPlayerSkin(playerid,8);
    case 8:SetPlayerSkin(playerid,14);
    case 14:SetPlayerSkin(playerid,15);
    case 15:SetPlayerSkin(playerid,16);
    case 16:SetPlayerSkin(playerid,17);
    case 17:SetPlayerSkin(playerid,18);
    case 18:SetPlayerSkin(playerid,19);
    case 19:SetPlayerSkin(playerid,20);
    case 20:SetPlayerSkin(playerid,21);
    case 21:SetPlayerSkin(playerid,22);
    case 22:SetPlayerSkin(playerid,23);
    case 23:SetPlayerSkin(playerid,24);
    case 24:SetPlayerSkin(playerid,25);
    case 25:SetPlayerSkin(playerid,26);
    case 26:SetPlayerSkin(playerid,27);
    case 27:SetPlayerSkin(playerid,28);
    case 28:SetPlayerSkin(playerid,29);
    case 29:SetPlayerSkin(playerid,30);
    }
    }*/
    }
    case KEY_LEFT:
    {
    static x;
    if(x == sizeof(SKINS_ZIVI)) x=1;
    SetPlayerSkin(playerid,SKINS_ZIVI[x]),x--;
    /*if(getPlayerTeam(playerid) == TEAM_ZIVI)
    {
    switch(GetPlayerSkin(playerid))
    {
    case 30:SetPlayerSkin(playerid,29);
    case 29:SetPlayerSkin(playerid,28);
    case 28:SetPlayerSkin(playerid,27);
    case 27:SetPlayerSkin(playerid,26);
    case 26:SetPlayerSkin(playerid,25);
    case 25:SetPlayerSkin(playerid,24);
    case 24:SetPlayerSkin(playerid,23);
    case 23:SetPlayerSkin(playerid,22);
    case 22:SetPlayerSkin(playerid,21);
    case 21:SetPlayerSkin(playerid,20);
    case 20:SetPlayerSkin(playerid,19);
    case 19:SetPlayerSkin(playerid,18);
    case 18:SetPlayerSkin(playerid,17);
    case 17:SetPlayerSkin(playerid,16);
    case 16:SetPlayerSkin(playerid,15);
    case 15:SetPlayerSkin(playerid,14);
    case 14:SetPlayerSkin(playerid,8);
    case 8:SetPlayerSkin(playerid,7);
    case 7:SetPlayerSkin(playerid,6);
    case 6:SetPlayerSkin(playerid,5);
    case 5:SetPlayerSkin(playerid,4);
    case 4:SetPlayerSkin(playerid,3);
    case 3:SetPlayerSkin(playerid,2);
    case 2:SetPlayerSkin(playerid,1);
    }
    }*/
    }
    }
    }


    Glaube ein Timer wäre dafür angebracht ..


    mfg :thumbup:

  • Wozu denn einen Timer?
    Unter OnPlayerUpdate wird doch nur abgefragt, ob er diese Taste drückt, wenn ja -> wird das ausgeführt, wenn nein -> wird das beendet.
    Das ganze kannst du mit gutem Gewissen einbauen :)


  • Dann musst du es so schreiben:


    static x = sizeof(SKINS_ZIVI)-1;
    if(x == -1) x=sizeof(SKINS_ZIVI)-1;
    SetPlayerSkin(playerid,SKINS_ZIVI[x]),x--;


    mfg. :thumbup:


    Funktioniert nicht ganz...


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Und @lcy. ..wenn ich die Rechte Pfeiltaste verwende..dann switcht er bei OnPlayerUpdate 2x ;)


    mfg :thumbup:

  • Ich hab da ein GlobalenArray gemacht


    new ID[MAX_PLAYERS];


    und diese Variable will ich dann in diesen Befehl einbauen


    ID[playerid] = pID;


    ocmd:id(playerid,params[])
    {


    new string[128];


    new name[MAX_PLAYER_NAME];


    if(sscanf(params, "u", pID)) return SendClientMessage(playerid, GRAU, "Verwende: /id {C67700}<Spieler-ID>");


    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid, GRAU, "Ungültige ID!");


    GetPlayerName(pID,name,sizeof(name));


    format(string,sizeof(string), "%s hat die ID %i.",name,pID);


    SendClientMessage(playerid, GELB, string);


    return 1;
    }


    Nur wo kommt das hin? Ich habe das Tutorial von Raven auf aber dort wird nur gesagt das kommt in den Befehl. Ich bekomme aber Errors.

    Mit freundlichen Grüßen,
    Derakar

  • Ich hoffe ich bin nicht der einzigste, der deine Frage nicht ganz versteht.
    Deine Frage ist: Wo musst du die ID[playerid] = pID; eintragen.
    Im Prinzip ist das egal , hauptsache nach der sscanf-Abfrage.

  • So moin hab mal ne kleine anfängerfrage.
    habe mir mithilfe der nemesus tutorials ein adminsystem erstellt, das auch top funktioniert.


    Nun will ich aber noch haben, das ich bzw leute die das rcon pw haben sich zum Fulladmin machen können.
    Leider scheitert es grade.


    dcmd_rmakeadmin(playerid,params[])
    {
    new pid;//Das sind die Variablen, /MakeAdmin [pID] [AdminLevel]
    if(sscanf(params, "u",pid))
    {
    if(IsPlayerAdmin(playerid);
    {
    sSpieler[playerid][Adminlevel] = 4;
    SendClientMessage(playerid,Weiß,"Du hast dich über Rcon zum Vorstandsadmin befördert!");
    }
    else
    {
    SendClientMessage(playerid,Weiß,"Du hast dafür keine Berechtigung!");
    return 1;
    }


    Ich weiß nun aber nicht ob das new was da steht wirkloich brauche, weil ja per abfrage des rcon nur das adminlevel in die spieler datei eingetragen werden soll.