[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
  • Also so schwer ist es jetzt nicht die Sequenz zu ändern oder?


    dcmd_showlic(playerid,params[])
    {
    new pID, name[MAX_PLAYER_NAME], Oname[MAX_PLAYER_NAME], str1[64], str2[64];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,Gelb,"Benutze:/showlic [id]");
    GetPlayerName(playerid,name,sizeof(name));
    GetPlayerName(pID,Oname,sizeof(Oname));
    format(str1,sizeof(str1),"Du zeigst %s deine Lizenzen",Oname);
    format(str2,sizeof(str2),"%s zeigt dir seine Lizenzen",name);//3319
    SendClientMessage(playerid,Grün,str1);
    SendClientMessage(pID,Grün,str2);
    ShowLicense(playerid,pID);
    return 1;
    }


  • Setz das als String zusammen


    %d:%d minuten,sekunden :thumbup:

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Ich möchte es genauso speichern wie du es gerade gesagt hast.. Mit nem String kann ich es doch nur anzeigen lassen was ich nicht vorhabe.


    Du kannst es doch wieder ausgeleben in dem du das aufspilittest


    strfind -> :
    strmid 0 bis : -1
    strmid : + 1 bis Ende


    Das wandelst du dann via strval in Zahlen um ;)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski


  • new CBUG[MAX_PLAYERS];
    new CString[128];
    new name[MAX_PLAYER_NAME+1];
    GetPlayerName(playerid, name, sizeof(name));
    format(CString, sizeof(CString), "%s wurde vom Anti-Cbug System gekickt!", name);
    if ((newkeys & KEY_FIRE) && (oldkeys & KEY_CROUCH))
    {
    CBUG[playerid]++;
    if(CBUG[playerid] == 3)return SendClientMessageToAll(0xffffff, CString), Kick(playerid);
    }

    Hmm, grad mal geschrieben, funktioniert das so?


    //Edit Code angepasst


    MFG


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Müsste das Format nicht unter die If Abfrage?
    Und abgesehen davon, was ist wenn man das in einem Abstand von 5 Minuten macht. Dann wird man ebenfalls gebannt obwohl man den cbug nicht mal richtig angewandt hat oder habe ich einen Timer übersehen //Edit stell ich mir komisch vor das das Format über der eigentlichen Aktion ausgeführt wird:D


    /e

    KleineHilfe 2.0

  • Müsste das Format nicht unter die If Abfrage?


    Ne, das lässt sich auch dadrüber formatieren (Geht bei Forschleifen ja auch!) und unten ausgeben, denk ich mal. :P


    //Edit: Warum gebannt? Du wirst nur gekickt, nach 3x Cbuggen, natürlich kann man noch nen Timer zum resetten von der Variable CBUG einbauen. :)


    MFG


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Evt baust du noch ein Timer ein, der den Counter löscht nach 10 Sekunden o.ä.
    Ich meine, wenn du jetzt alle 30 Sek C Buggst und das nur einmal, ist man in 90 Minuten gekickt obwohl man den C-Bug nicht mal gescheit angewandt hat.


    //E
    Natürlich meinte ich gekickt nicht gebannt.


    //Edit


    Ich suche wen der mir über TeamViewer einen Bug den man vorher bespricht fixxen kann bzw. es versucht.
    Schreibt mir bitte eine PN wer gerade die Zeit finden kann.

    KleineHilfe 2.0


  • ohne timer kann man auch zeit messen... sollte echt mal jemand ein Tutorial machen wie oft eigentlich sinnlos komplizierte Timer verwendet werden.


    Der code unterhalb erhöht CBUG[playerid] nur wenn innerhalb von 15 Sekunden erneut die tastenkombi für CBUG verwendet wird, ansonsten wird CBUG[playerid] wieder auf 0 gesetzt :D
    (code von BOMBER übernommen)
    new CBUG[MAX_PLAYERS], lastCBUG[MAX_PLAYERS];
    new CString[128];
    new name[MAX_PLAYER_NAME+1];
    GetPlayerName(playerid, name, sizeof(name));
    format(CString, sizeof(CString), "%s wurde vom Anti-Cbug System gekickt!", name);
    if ((newkeys & KEY_FIRE) && (oldkeys & KEY_CROUCH))
    {
    if(gettime() - lastCBUG[playerid] < 15 || CBUG[playerid] == 0)
    {
    CBUG[playerid]++;
    lastCBUG[playerid] = gettime();
    if(CBUG[playerid] == 3)return SendClientMessageToAll(0xffffff, CString), Kick(playerid);
    }
    else CBUG[playerid] = 0;
    }

  • Ich wollte ihn lediglich darauf hinweisen, das diese Lücke noch gefüllt werden muss mit einem Timer. Wie auch immer man das gestaltet ist ja irrelevant Hauptsache man wird nicht nur gekickt weil man irgendwann während dem Spiel 3x C+Fire gedrückt hat.

    KleineHilfe 2.0


  • Danke für deine Hilfe, jetzt hab ich grad n Timer dazu geschrieben.


    if(gettime() - lastCBUG[playerid] < 15 || CBUG[playerid] == 0)


    Soll heißen, falls Zeit - LastCBUG < 15 (Sek?) ist oder (||) CBUG ==) wird der Code ausgeführt?


    MFG


    Engelsflügel am Astonkühler, als Schutz vor dem Teufel!

  • Ich brauch mal eben einen kleinen Rat
    Bei der Funktion wird mir immer mein name Ausgegeben obwohl andere den schlüssel auch haben
    Sprich ich such schlüssen ABC ~> 3 User haben den
    3 User sollen mir angezeigt werden
    Dies macht er nicht stattdessen bekomm ich 3 mal meinen Namen aber wiso?
    format(query, 500,"SELECT `DTuser`.`Name`,`DTuser`.`Team`,`DTuser`.`Rank`,`DTuser`.`Leader` FROM `DTKeys`, `DTuser` WHERE `DTKeys`.`userid` = `DTuser`.`userid` AND `DTKeys`.`Kennzeichen` = '%s';", VehicleData[vid][Kennzeichen]);
    mysql_query(query, (-1), (0), SQL);
    mysql_store_result(SQL);
    new rows = mysql_num_rows(SQL);
    for(new i; i < rows; i++)
    {
    mysql_fetch_row(Inhalt,"|",SQL);
    mysql_fetch_field("Name",Titel,SQL);
    format(str, sizeof str, "• %s", Titel);
    mysql_fetch_field("Team",Titel,SQL);
    new TeamID = strval(Titel);
    format(str, sizeof str, "%s (Team: %s)",str, TeamName[TeamID]);
    mysql_fetch_field("Rank",Titel,SQL);
    format(str, sizeof str, "%s (Rank: %s)",str, TeamRank[TeamID][strval(Titel)]);
    mysql_fetch_field("Leader",Titel,SQL);
    if(strval(Titel) == 1)
    format(str, sizeof str, "%s (Leader)", str);
    SendClientMessage(playerid, cGreen, str);
    }
    mysql_free_result(SQL);

    All in all it's just another brick in the wall

  • Zitat

    format(query, 500,"SELECT `DTuser`.`Name`,`DTuser`.`Team`,`DTuser`.`Rank`,`DTuser`.`Leader` FROM `DTKeys`, `DTuser` WHERE `DTKeys`.`userid` = `DTuser`.`userid` AND `DTKeys`.`Kennzeichen` = '%s';", VehicleData[vid][Kennzeichen]);


    Was machen denn die ganzen Punkte da?
    Mit DTuser?


  • ist
    mysql_fetch_row(Inhalt,"|",SQL);
    nicht die Funktion, die einfach die "row"/Zeile in "Inhalt" Speichert und die einzelnen Werte mit "|" trennt ?
    Unterhalb verwendest du aber wieder die direkte Methode mit mysql_fetch_field(...) und arbeitest garnicht mit "Inhalt" und "|"..


    Könnte mir vorstellen das der Code immer nur die erste Zeile verarbeitet, da mysql_fetch_field nicht auf die nächste Zeile geschaltet wird mit mysql_fetch_row(Inhalt,"|",SQL); da dies ja wie gesagt, die andere Methode ist ;)


    //Edit: native mysql_fetch_row_data(MySQL:handle = MySQL:0);
    sieht nach der richtigen Funktion aus