Nützliche Codeschnipsel

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
  • Keine elegante Lösung für den Fall ich schreibe folgendes:

    Zitat

    hupsdahabichdochtatsächlichdasleerzeichenvergessen. Was mach ich denn nun ? a b c d e f g h i j k l m n und jetzt wieder etwas halbwegs sinnvolles.


    Sowas solltest du lieber in erster Linie auf Textlänge beziehen und danach,falls eine Textlänge von X erreicht ist, ab dem nächsten LEERZEICHEN trennen.


    So zum Beispiel:
    stock gPM_StripMessageLines( message[ GPM_MAX_STRING ] ) {
    #define SPLIT_LEN 50
    new
    bool:_bBasic = true,
    _iParts,
    _iCount,
    _iTempLen = 0,
    _iPos = 0,
    _iTempPos = 0,
    _iLen;
    _iLen = strlen( message );
    while( ( _iPos = strfind( message , " " , false ,_iPos + 1) ) != -1 ) {
    _iCount++;
    _iTempLen += ( _iPos - _iTempPos );
    _iTempPos = _iPos;
    if( _iTempLen >= SPLIT_LEN ) {
    if( _iPos++ < sizeof( message ) ) {
    strins( message , "\n" , _iPos );
    _iCount = 0;
    _iPos += 2;
    _bBasic = false;
    _iTempLen = 0;
    }
    }
    }
    if( _bBasic ) {
    _iParts = ( _iLen / SPLIT_LEN );
    for( new i = 0 ; i < _iParts ; i++ ) {
    strins(message,"\n", ( ( i + 1 ) * SPLIT_LEN ) );
    }
    }
    #undef SPLIT_LEN
    return message;
    }
    Dann kann es so aussehen..


  • stock GeneratePassword(dest[], len = 8, bool:SpecialCharacters = false)
    {
    new Passwort[62][] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'};
    new sChars[14][] = {'.', ',', '-', '_', '!', '§', '$', '%', '&', '/', '(', ')', '=', '?'};
    for(new i=0; i<len; i++)
    {
    if(SpecialCharacters == true) {
    if(random(5) == 2) dest[i] = sChars[random(sizeof(sChars))];
    else dest[i] = Passwort[random(sizeof(Passwort))]; }
    else dest[i] = Passwort[random(sizeof(Passwort))];
    }
    }
    Pastebin
    Mit dieser Funktion kann ein zufälliges Passwort mit gewünschter Länge und ggf. Sonderzeichen erstellt werden.


    Mit freundl. Grüßen
    Padarom

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

    Einmal editiert, zuletzt von Padarom () aus folgendem Grund: Code funktioniert wieder.

  • Ehw, new Passwort[62][2]
    new sChars[14][2]
    2 ist mal gar nicht nötig da du chars benutzt bzw deren ASCII Wert direkt im Array ablegst und das sind ja nur eine normale Zahlen ist. Mach lieber [1] oder [] draus, dann kannst auch das hässliche [0] entfernen für die Buchstaben :p.

  • Goldkiller da liegst du nicht ganz falsch, aber das was da drin steht sind einzelne Buchstaben und keine strings, da fällt also eine zweite Dimension raus.


    Denn die Buchstaben sind wie du richtig festgestellt hast ASCII Code und haben einen bestimmten Zahlenwert.


    kann man zB feststellen wenn man sich das als Zahl ausgeben lässt.
    Heißt man speichert Zahlen und keine Strings ;)

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

    Margarete Stokowski

  • Hier ein paar extra Funktionen:

    stock dGivePlayerHealth(playerid,Float:health)
    {
    new Float:gethealth;
    GetPlayerHealth(playerid,gethealth);
    return SetPlayerHealth(playerid,gethealth + health);
    }
    stock dSetPlayerMoney(playerid,money)
    {
    ResetPlayerMoney(playerid);
    return GivePlayerMoney(playerid,money);
    }
    stock dGivePlayerArmour(playerid,Float:armour)
    {
    new Float:getarmour;
    GetPlayerArmour(playerid,getarmour);
    return SetPlayerArmour(playerid,getarmour + armour);
    }
    stock dGivePlayerDrunkLevel(playerid,level)
    {
    return SetPlayerDrunkLevel(playerid,GetPlayerDrunkLevel(playerid) + level);
    }
    stock dGivePlayerScore(playerid,score)
    {
    return SetPlayerScore(playerid, GetPlayerScore(playerid) + score);
    }
    stock dGivePlayerWantedLevel(playerid,wantedlevel)
    {
    return SetPlayerWantedLevel(playerid,GetPlayerWantedLevel(playerid) + wantedlevel);
    }


    dGivePlayerHealth gibt dem Spieler leben dazu.
    dGivePlayerArmour gibt dem Spieler Rüstung dazu.
    dGivePlayerWantedLevel gibt dem Spieler Wantedlevel dazu.
    dGivePlayerDrunkLevel erhöht das "DrunkLevel".
    dGivePlayerScore gibt dem Spieler Score dazu-
    dSetPlayerMoney setzt dem Spieler das geld.
    War keine Include wert.
    Sind ja nur ein paar kleine Codeschnipsel.

  • /afk und /back mit OCMD ;D


    Natürlich Ganz oben das Include ocmd Einfügen


    #include <ocmd>


    Und dann der Command


    ocmd:afk(playerid,params[])
    {
    TogglePlayerControllable(playerid, 0);
    SendClientMessage(playerid, COLOR_RED, "Du gehst nun In den Afk-Modus");
    return 1;
    }


    Und der /back Command


    ocmd:back(playerid,params[])
    {
    TogglePlayerControllable(playerid, 1);
    SendClientMessage(playerid, COLOR_RED, "Du bist nun wieder vom /afk zurück");
    return 1;
    }


    Nützlich und Klein so muss das sein ;D


    Mfg Nexiz

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • ocmd:afklist(playerid, params[])
    {
    SendClientMessage(playerid, COLOR_LIGHTBLUE,"AFK List");
    SendClientMessage(playerid, COLOR_LIGHTBLUE,"__________________________________________");
    new i = 0, aname[256], string[256];
    for(; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(GetPVarInt(i,"AFK")==1)
    {
    GetPlayerName(i, aname, sizeof(aname));
    format(string, 256, "- %s", aname);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    }
    SendClientMessage(playerid, COLOR_LIGHTBLUE,"__________________________________________");
    }
    }
    return 1;
    }


    ocmd:afk(playerid, params[])
    {
    if(GetPVarInt(playerid,"AFK")==0)
    {
    new reason[128], string[128];
    if(sscanf(params,"s",reason)) return SendClientMessage(playerid,COLOR_YELLOW,"Benutzung:/afk [Grund]");
    format(string,sizeof(string),"Spieler: %s ist AFK gegangen, Grund: %s",SpielerName(playerid),reason);
    SendClientMessageToAll(COLOR_BLUE,string);
    TogglePlayerControllable(playerid,0);
    SetPlayerVirtualWorld(playerid, 2);
    SetPVarInt(playerid, "AFK", 1);
    }
    if(GetPVarInt(playerid,"AFK")==1)
    {
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist bereits im AFK Modus, tippe /back.");
    }
    return 1;
    }


    ocmd:back(playerid, params[])
    {
    if(GetPVarInt(playerid,"AFK")!=1)
    {
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist nicht AFK!");
    }
    if(GetPVarInt(playerid,"AFK")==1)
    {
    new string[128],stringg[128];
    if(sscanf(params,"s"))
    format(string,sizeof(string),"Spieler: %s ist vom AFK-Modus zürck! ",SpielerName(playerid));
    format(stringg,sizeof(stringg),"Willkommen zurück %s",SpielerName(playerid));
    SendClientMessageToAll(COLOR_BLUE,string);
    GameTextForPlayer(playerid,stringg,5000,5);
    TogglePlayerControllable(playerid,1);
    SetPVarInt(playerid, "AFK", 0);
    SetPlayerVirtualWorld(playerid, 0);
    }
    return 1;
    }



    /e.
    SpielerName musst du noch als stock definieren :)

  • Ich komm jetzt in den AFK Modus aber ich bekomm gleichzeitig auch eine Nahricht:


    Du bist bereits im AFK Modus, tippe /back.
    Ich weiß nicht weiter könnt ihr mir weiterhelfen`?


    Ich habe das Beispiel von Deuce benutzt!

  • Sehr nützlich für ein Wanted System , wenn der Player Wanted bekommt wird er z.b. Farbe Orange, dieses Stock vereinfacht es wenn man den Wanted cleart einfach die normale Farbe wieder zu geben.



    //--------------------------------------------------PlayerColor
    stock PlayerColor (playerid)
    {
    if(IfSpielerInFrak(playerid, 5)) //Hier muss eure Fraktion hin sprich Police Sani etc. Müsst ihr natürlich auch an euren Stock anpassen
    {
    SetPlayerColor(playerid, WHITE); //Die Farbe von der Fraktion
    }
    }


    Benutzung:



    PlayerColor(playerid);


    MfG :)

    Einmal editiert, zuletzt von grauerhase ()

  • Absolut nicht nützlich.


    Sorry,aber dein Codeschnipsel hat mMn hier absolut nichts verloren.
    Ich hab weder die Funktion IfSpielerInFrak ( Die Übrigens schlecht benannt ist ) noch die Farbe WHITE im Script. Wieso er auch in Fraktion 5 sein muss,weiss ich auch nicht.
    Man müsste also alles an seine Bedürfnisse anpassen. Da kann man es auch gleich selber machen.

  • Eine einfachere und 1ne Zeilensparende Function



    stock SetPlayerPosAngle(playerid, Float:x, Float:y, Float:z, Float:a)
    {
    SetPlayerPos(playerid, x, y, z);
    SetPlayerFacingAngle(playerid, a);
    return 1;
    }


    oder schneller MapNamen wechsel



    stock SetMapName(const NAME[])
    {
    new str[64];
    format(str, 64, "mapname %s", NAME);
    SendRconCommand(str);
    }


    oder schneller HostNamen wechsel



    stock SetHostName(const NAME[])
    {
    new str[64];
    format(str, 64, "hostname %s", NAME);
    SendRconCommand(str);
    }


  • Hab vor einiger Zeit was gebastelt, was abfragt ob der Spieler hinter einem Fahrzeug steht.
    Alle anderen Varianten haben bei mir nicht funktioniert..


    stock IsPlayerBehindVehicle(playerid,veh,&Float:lenge=4.0)
    {
    new Float:vcoord[3]; GetVehiclePos(veh,vcoord[0],vcoord[1],vcoord[2]);
    new Float:pcoord[3]; GetPlayerPos(veh,pcoord[0],pcoord[1],pcoord[2]);
    new Float:vangle; GetVehicleZAngle(veh,vangle);
    vcoord[0] = floatadd(vcoord[0],(-lenge * floatsin(-vangle,degrees)));
    vcoord[1] = floatadd(vcoord[1],(-lenge * floatcos(-vangle,degrees)));
    if(IsPlayerInRangeOfPoint(playerid,3.0,vcoord[0],vcoord[1],vcoord[2])){return 1;}
    else{return 0;}
    }

  • Es ist ziehmlich blöd eine Länge mit angeben zu müssen,
    da ein Fahrzeug kein Kasten ist^^
    es gibt ja die Funktion GetVehicleModelInfo, welches die breite, länge und höhe des Fahrzeuges zurück geben kann.
    Sinnvoller wäre es die zu nutzen

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

    Margarete Stokowski