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
  • Doppelter schutz - ganz einfach


    Ganz oben:
    new Rcon_Admins[][] = {
    "Msk."
    };
    Ganz unten:
    stock GetPlayerIDbyIP(const ip[])
    {
    new pip[16];
    for (new i = 0; i < GetMaxPlayers(); i ++)
    {
    if(!IsPlayerConnected(i)) continue;
    GetPlayerIp(i, pip, 16);
    if (!strcmp(ip, pip, true))
    {
    return i;
    }
    }
    return -1;
    }


    unter OnRconLoginAttempt
    new playerid = GetPlayerIDbyIP( ip );
    if(success) {
    new Name[MAX_PLAYER_NAME+1];
    GetPlayerName ( playerid, Name, sizeof(Name) );
    for( new x = 0; x != sizeof(Rcon_Admins); x++ ) {
    if(!strcmp( Name,Rcon_Admins[x], true)) {
    SendClientMessage( playerid, 0xffffffff, "Du hast dich Erfolgreich als RCON Administrator eingelogt");
    } else {
    SendClientMessage( playerid, 0xffffffff, "Du bist doch kein RCON Administrator. Dein Versuch wurde in der Log geschpeichert");
    printf("Der Spieler: %s hat sich als RCON Administrator eingelogt, jedoch ist der nicht auf der RCON Liste",Name);
    Kick(playerid);
    }
    }
    }

  • stock ClearChat(playerid,zeilen)
    {
    for(new i=0;i!=zeilen;i++)
    {
    SendClientMessage(playerid, -1, " ");
    }
    }


    Zitat

    Anwendungsbeispiel:

    public OnPlayerConnect(playerid)
    {
    ClearChat(playerid,12);
    return 1;
    }



    //edit [03.12.2012]
    #define ClosePlayerDialog(%0) \
    ShowPlayerDialog(%0, -1, 0, "-", "-", "-", "-")

    Einmal editiert, zuletzt von k4biX ()

  • Hier mal ein Weihnachtsmützencodeschnipsel ;P


    Mütze:


    SetPlayerAttachedObject(playerid, 1, 19065, 2, 0.120000, 0.040000, -0.003500, 0, 100, 100, 1.4, 1.4, 1.4);



    Löschbefehl:




    if(strcmp("/rmuetze", cmdtext, true,10)== 0)
    {
    for(new i=0; i<MAX_PLAYER_ATTACHED_OBJECTS; i++)
    {
    if(IsPlayerAttachedObjectSlotUsed(playerid, i))
    {
    RemovePlayerAttachedObject(playerid, i);
    new pname[24];
    new string[128];
    GetPlayerName(playerid,pname,sizeof(pname));
    format(string,sizeof(string),"{37DB45}[_Weihnacht{37DB45}en_] %s(%d) hat seine Weihnachtsmütze abgesetzt.",pname,playerid);
    SendClientMessageToAll(COLOR_CYAN,string);
    }
    }
    return 1;


    (Einrückung Spinnt hier irgendwie, tut mir leid)


  • Mhm, besser wäre es so:


    stock RadiusChat(playerid,Float:meter,farbe,string[]){ /* Edited by Kaliber */
    new Float:Q[3],i;
    GetPlayerPos(playerid,Q[0],Q[1],Q[2]);
    for(; i < MAX_PLAYERS; i++){
    if(IsPlayerInRangeOfPoint(i,meter,Q[0],Q[1],Q[2]))SCM(i,farbe,string);
    }
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • RadiusChat(playerid,farbe,const string[],Float:meter=25.0){ /* Edited by Kaliber - more by BlackAce */
    new Float:Q[3];
    GetPlayerPos(playerid,Q[0],Q[1],Q[2]);
    for(new i; i < MAX_PLAYERS; i++) if(IsPlayerInRangeOfPoint(i,meter,Q[0],Q[1],Q[2]))SCM(i,farbe,string);
    }


    So wäre das NOCH besser ;)


    BTW: Ich würde an eurer stelle die Schleifen variable nur dann Außerhalb setzten, wenn diese nach der schelife erneut gebracht wird ;)
    Ansonsten ist sie nur RAM Verschwendung ;)

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

    Margarete Stokowski

  • stock SetPlayerFacingAngleToPoint(playerid,Float:X, Float:Y){
    new Float: Pos[3];
    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
    new Float:Angle = 180.0-atan2(Pos[0]-X,Pos[1]-Y);
    SetPlayerFacingAngle(playerid,Angle);
    }


    Eine neue Funktion nach langem Testen geht sie nun :D.
    Damit ist es möglich die person auf einen punkt zu fixxieren oder besser gesagt zu drehen.


    Weiters klein Wissen.


    #pragma ctrlchar


    Damit kann man das Zeichen definieren mit dem man in Strings die doppelten Anführungszeichen verwenden kann. (Standart ist \)
    printf("\"Hallo\"");



    #pragma ctrlchar '^'
    printf("^"Hallo^"");


    Um alle Werte eines true/false Arrays zu setzen auf einen wert wird dies so gemacht
    {true, ...}
    new bool:array[5] = {true, ...};


    Nun um bei arrays noch bytes zu sparen gibt man dem compiler die benachrichtung das es sich um ein bestimmten Datentyp handelt.
    In dem fall char.
    Damit ist es möglich Zahlen von 0 - 255 zu speichern.
    new array[MAX_PLAYERS char];
    array{playerid} = 2;
    if(array{playerid} == 2)return SendClientMessage(playerid,-1,"Hallo");


    aber zurück zu den strings.

    Einmal editiert, zuletzt von IPrototypeI ()

  • stock SetPlayerFacingAngleToPoint(playerid,Float:X, Float:Y){
    new Float: Pos[3];
    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
    new Float:Angle = 180.0-atan2(Pos[0]-X,Pos[1]-Y);
    SetPlayerFacingAngle(playerid,Angle);
    }



    Würd ich ja so machen
    stock SetPlayerFacingAngleToPoint(playerid,Float:X, Float:Y){
    new Float: Pos[2];
    GetPlayerPos(playerid, Pos[0], Pos[1], 0);
    return SetPlayerFacingAngle(playerid,180.0-atan2(Pos[0]-X,Pos[1]-Y));
    :thumbup:

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

    Margarete Stokowski

  • Würd ich ja so machen
    stock SetPlayerFacingAngleToPoint(playerid,Float:X, Float:Y){
    new Float: Pos[2];
    GetPlayerPos(playerid, Pos[0], Pos[1], 0);
    return SetPlayerFacingAngle(playerid,180.0-atan2(Pos[0]-X,Pos[1]-Y));
    :thumbup:


    trotzdem ist das return nicht nötig und die paar bytes auf die kam es mir jetzt auch nicht an :D
    man hätte sogar noch draus ein makro machen können.
    Aber wir wissen ja alle das du ein kleiner Perfektionist bist und was auch hier in dem bereich gepostet wurde soll auch eine gewisse qualität aufzeigen ^^.


    Frohe Weihnachten dir.


    Aber um noch was zu ergänzen sollte man variabeln verwenden die nur einen wert haben sollen 0 oder 1 (false oder true)so sollte man y_bit benutzen.

  • ocmd:setstat(playerid, params[]){
    new pID, stat, amount;
    if(IstAdmin(playerid)){
    if(sscanf(params, "udd", pID, stat,amount)){
    SendClientMessage(playerid, COLOR_CORNSILK, "Benutzung: /setstat [id] [Statistikcode] [Wert]");
    SendClientMessage(playerid, COLOR_CORNSILK, "Code: 1 Level | 2 Respekt | 3 Skin | 4 PKW | 5 LKW | 6 Bike | 7 Flugschein | 8 Premiumrang |");
    SendClientMessage(playerid, COLOR_CORNSILK, "Code: 9 Job |");
    return 1;}
    new string[200];
    switch (stat){
    case 1:PI[pID][pLevel] = amount, format(string, sizeof(string), " Spielerlevel auf %d gesetzt", amount);
    case 2:PI[pID][pRespekt] = amount,format(string, sizeof(string), " Respektpunkte auf %d gesetzt", amount);
    case 3:PI[pID][pSkin] = amount,SetPlayerSkin(pID, amount),format(string, sizeof(string), " Spielerskin : %d", amount);
    case 4:PI[pID][pCar] = amount,format(string, sizeof(string), " PKW - Führerschein : %d", amount);
    case 5:PI[pID][pLKW] = amount,format(string, sizeof(string), " LKW - Führerschein : %d", amount);
    case 6:PI[pID][pBike] = amount,format(string, sizeof(string), " Bike - Führerschein : %d", amount);
    case 7:PI[pID][pFly] = amount,format(string, sizeof(string), " Flugschein : %d", amount);
    case 8:PI[playerid][pPremium] = amount,format(string, sizeof(string), " Premiumrang : %d", amount);
    case 9:PI[playerid][DT_Job] = amount,format(string, sizeof(string), " DT_Job : %d", amount);
    default: format(string, sizeof(string), " Falscher Statistikcode", amount);}
    SavePlayer(pID), SendClientMessage(playerid, FARBE_FADE1, string), SendClientMessage(pID, FARBE_FADE1, string);}
    return 1;}


    Hier ein Beispiel aus meinem Gamemode für Setstat ;)
    Kann beliebig geändert werden, es ist nicht ganz optimiert.

  • Naja die Methode ist was scheinheilig, er hat schon recht ist etwas resourcen schonender, trotzdem mache ich erstmal ne schleife mit allen spielern.

  • stock ChangeCar(playerid, modelid)
    {
    new
    Float:x,Float:y,Float:z,Float:a,
    Float:vx,Float:vy,Float:vz;
    if(IsPlayerInAnyVehicle(playerid))
    {
    new veh = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(veh) == modelid)
    {
    return 0;
    }
    else
    {
    GetPlayerPos(playerid,x,y,z);
    GetVehicleVelocity(veh,vx,vy,vz);
    DestroyVehicle(veh);
    new car = CreateVehicle(modelid, x,y,z,a,-1,-1, -1);
    PutPlayerInVehicle(playerid, car, 0);
    SetVehicleVelocity(veh, vx,vy,vz);

    }
    }
    return 1;
    }


    Beispiel



    //Oben


    new VehPickup;



    //OnGameMode


    VehPickup = CreatePickup(1239,1,476.127,1384.4345,1234.123,0);



    //OnPlayerPickUpPickup


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == VehPickup) ChangeCar(playerid, 522);
    return 1;
    }

    [tabmenu][tab='Angebote','http://cdn3.iconfinder.com/data/icons/glyph/227/Tag-48.png']

    + Die Preise liegen bei 5-100+€ Ablauf:
    + Entweder ihr addet mich in Skype (PN vorher Schreiben) oder Ihr schreibt eine PN an mich (Betreff - Euer Wunsch z.B. Filterscript)
    + So nun schreibt ihr mir was ihr alles in dem Script haben wollt ich werd euch dann sagen ob ich es hinbekomme.
    + Dann machen wir ein groben Preis aus. Ich werde das Script erstellen und es zusammen mit dem Kunden Testen.



    [tab='Kontakt','http://cdn3.iconfinder.com/data/icons/line/36/person_add-48.png']
    edmix23

    + Bitte beim Adden angeben wer ihr seit oder per PN bescheid sagen!
    [tab='Zahlungs Methoden','https://cdn3.iconfinder.com/data/icons/line/36/check_money-32.png']
    +Paypal!
    +Direkte Banküberweisung

  • !TheO ,


    dein Code ist falsch und unübersichtlich, schreibe hin so:


    stock ChangeCar(playerid, modelid) {
    if(!IsPlayerInAnyVehicle(playerid)) return 0;
    new veh = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(veh) == modelid) return 0;
    new Float:Q[7];
    GetVehiclePos(veh,Q[0],Q[1],Q[2]);
    GetVehicleZAngle(veh,Q[3]);
    GetVehicleVelocity(veh,Q[4],Q[5],Q[6]);
    DestroyVehicle(veh);
    veh = CreateVehicle(modelid,Q[0],Q[1],Q[2],Q[3],-1,-1,-1);
    PutPlayerInVehicle(playerid,veh, 0);
    SetVehicleVelocity(veh, Q[4],Q[5],Q[6]);
    return 1;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

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