[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
  • SpielerName(playerid)


    Es wäre gut zu wissen, wo und wie du GetPlayerName nutzt...


    Aber anhand deiner Variable musst du es so schreiben:


    format(string,sizeof(string),"* HQ: Officer %s hat die S.W.A.T erlaubnis entzogen.",SpielerName);


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

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


  • jetzt so als Beispiel.


    Schreib das mal so:


    //Oben im Skript
    stock const skins[] = {
    1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
    };


    //In deinem Callback
    static x;
    if(x == sizeof(skins)) x=0;
    SetPlayerSkin(skins[x]),x++;


    mfg. :thumbup:

    ast2ufdyxkb1.png


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


  • 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: