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
  • bindet alle skins ins spiel ein (steht in der .com wiki)
    public OnPlayerRequestClass(playerid, classid)
    {
    new i = 0;
    for(; i < 299; i++)
    {
    if(IsValidSkin(i))
    {
    AddPlayerClass(i,0.0,0.0,0.0,0.0,-1,-1,-1,-1,-1,-1);
    }
    }




    return 1;
    }
    IsValidSkin(skinid)
    {
    new i = 0;
    #define MAX_BAD_SKINS 22
    new badSkins[MAX_BAD_SKINS] =
    { 3, 4, 5, 6, 8, 42, 65, 74, 86, 119, 149, 208, 268, 273, 289 };
    if (skinid < 0 || skinid > 299) return false;
    for (; i < MAX_BAD_SKINS; i++) { if (skinid == badSkins[i]) return false; }
    #undef MAX_BAD_SKINS
    //------------------------------
    return 1;
    }


    //edit
    Fährt den Server ingame herunter und speichert den namen in der logfile
    if(strcmp(cmdtext, "/shutdown", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    //if (PlayerInfo[playerid][pAdmin] >= 5)
    //{
    GetPlayerName(playerid, playername, sizeof(playername));
    printf("%s hat hat den Server InGame heruntergefahren.", playername);
    SendRconCommand("exit");
    //}
    }
    return 1;
    }

  • stock RespawnAllCars() { for(new veh = 0; veh < MAX_VEHICLES; veh++) SetVehicleToRespawn(veh); return 1; }


    • Respawn alle Autos für jeden Spieler
    • Ganz Easy

    Anwendung:
    if(strcmp(cmd, "/respawn", true) == 0) {
    if(IsPlayerAdmin(playerid)) {
    RespawnAllCars(); //Hier xD
    SendClientMessage(i, COLOR_DEFINE, "RCON-Admin hat die Cars Respawned"); }
    } else {
    SendClientMessage(playerid, COLOR_DEFINE, "Du bist kein RCON Admin"); }
    return 1; }


    RespawnAllCars - Man kann auch nen Timer erstellen der dann den Callback aufruft und halt jeden Payday oder so die Cars respawned!



    PS: Meine erste stock funktion ganz easy :P

    GreetZ

    Zitat

    Joda21:47
    Joda = mein spritzname
    xD


    Ice21:47
    zeig mir dein lichtschwert !


    Joda21:47 spitzname* xDD

    Ich bin ein Vogel (Joda)


  • stock RepairThatVehicle() { if(IsPlayerInAnyVehicle(playerid)) { SetVehicleHealth(GetPlayerVehicleID(playerid), 1000.0); RepairVehicle(GetPlayerVehicleID(playerid)); } return 1; }



    Anwendung:
    if(strcmp(cmd, "/repair", true) == 0) { RepairThatVehicle(); SendClientMessage(playerid, COLOR, "Vehicle repaired"); return 1; }


    Ist Falsch xD

    GreetZ

    Zitat

    Joda21:47
    Joda = mein spritzname
    xD


    Ice21:47
    zeig mir dein lichtschwert !


    Joda21:47 spitzname* xDD

    Ich bin ein Vogel (Joda)


    2 Mal editiert, zuletzt von Johann_x3 ()

  • Durch diesen Code kann man den Server unzugänglich/zugänglich für normale Spieler machen.


    new bool:ServerOpen = true;
    #define COLORSERVER (0xFFFFFFFF)


    forward EnableCommandUse(playerid);


    public OnPlayerConnect(playerid)
    {
    SetPVarInt(playerid, "CanUseCommand", 1);
    SetPVarInt(playerid, "CommandCounter", 0);
    if(!ServerOpen && !IsPlayerAdmin(playerid))
    {
    new nachricht[128];
    format(nachricht, sizeof(nachricht), "* Der Server ist leider nicht offen. Versuche es Später!");
    SendClientMessage(playerid, COLORSERVER, nachricht);
    return Kick(playerid);
    }
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/ocserver", true))
    {
    if(IsPlayerAdmin(playerid))
    {
    if(GetPVarInt(playerid, "CanUseCommand") == 0)
    {
    new nachricht[128];
    format(nachricht, sizeof(nachricht), "* Dafür musst du noch %d Sekunden warten.", GetPVarInt(playerid, "CommandCounter"));
    return SendClientMessage(playerid, COLORSERVER, nachricht);
    }
    if(ServerOpen)
    {
    new nachricht[128];
    format(nachricht, sizeof(nachricht), "* Der Server wird jetzt durch Admin %s geschlossen.", pName(playerid));
    SendClientMessageToAll(COLORSERVER, nachricht);
    ServerOpen = false;
    SetPVarInt(playerid, "CommandCounter", 30);
    SetPVarInt(playerid, "CanUseCommand", 0);
    SetTimerEx("EnableCommandUse", 1000, 0, "d", playerid);
    return KickNormalPlayers();
    }
    else
    {
    new nachricht[128];
    format(nachricht, sizeof(nachricht), "* Der Server wird jetzt durch Admin %s geöffnet.", pName(playerid));
    SendClientMessageToAll(COLORSERVER, nachricht);
    ServerOpen = true;
    SetPVarInt(playerid, "CommandCounter", 30);
    SetPVarInt(playerid, "CanUseCommand", 0);
    SetTimerEx("EnableCommandUse", 1000, 0, "d", playerid);
    return 1;
    }
    }
    return 1;
    }
    return 1;
    }


    stock pName(playerid)
    {
    new id_name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, id_name, MAX_PLAYER_NAME);
    return id_name;
    }


    stock KickNormalPlayers()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(IsPlayerAdmin(i)) continue;
    Kick(i);
    }
    return 1;
    }


    public EnableCommandUse(playerid)
    {
    if(GetPVarInt(playerid, "CommandCounter") > 0)
    {
    SetPVarInt(playerid, "CommandCounter", (GetPVarInt(playerid, "CommandCounter")-1));
    if(!GetPVarInt(playerid, "CommandCounter"))
    return SetPVarInt(playerid, "CanUseCommand", 1);
    return SetTimerEx("EnableCommandUse", 1000, 0, "d", playerid);
    }
    SetPVarInt(playerid, "CommandCounter", 0);
    SetPVarInt(playerid, "CanUseCommand", 1);
    return 1;
    }


    Als RCON Admin einfach /ocserver benutzen, für das ein- und ausschalten.


  • stock IsPlayerInRangeOfPlayer(inrangeofplayer,player,Float:distance)
    {
    new Float:PX,Float:PY,Float:PZ;
    GetPlayerPos(inrangeofplayer,PX,PY,PZ);
    return IsPlayerInRangeOfPoint(player,distance,PX,PY,PZ);
    }


    Gibt zurück ob der Spieler in einem bestimmten Radius zum anderen Spieler ist.


    LG


  • Gab es schon.
    http://forum.sa-mp.de/wbb/san-andreas-multiplayer/scripting-base/p194402-nützliche-codeschnipsel/#post194402

  • if(!IsPlayerConnected(i)) continue;
    if(IsPlayerAdmin(i)) continue;
    Kick(i);

    Tipp so etwas muss nicht immer schneller sein also immer schauen, überspringen sollte man nur wenn mehr als 3 Linien folgen sprich
    immer Logisch denken


    if(IsPlayerConnected (i) && IsPlayerAdmin(i))Kick(i);


    Zugriff


    • Schauen ob Spieler verbunden ( Wenn dies schon nicht stimmt & der Operator && gefunden wurde wird die Abfrage als Falsch erkannt also wird Falsch wiedergegeben & es wird der nächste Schritt eingeleitet )
    • Als nächstes Administrator Status prüfen , wenn der vorige Status stimmt
    • Spieler vom Server werfen.


    Deine Zugriffe

    if(!IsPlayerConnected(i)) continue;
    if(IsPlayerAdmin(i)) continue;
    Kick(i);


    • Überprüfen ob Spieler verbunden ist ( wenn nicht überspringen )
    • ggf. überspringen
    • Prüfen Ob Spieler Administrator ist
    • ggf. überspringen
    • Spieler vom Server werfen

    Im Endeffekt können diese Schritte schneller sein aber nicht in allen fällen.


    Wollte nur mal zeigen wie einfach das ganze ist ohne Schritte einzuleiten die nicht gebraucht werden & das ganze letztendlich langsamer machen als es sein kann.


    Genau das gleichen bei solchen Rückgaben


    if(Statement(...))return 1;
    else return 0;


    Zu lang ...


    return Statement(...); // << Gibt Direkt wieder ob Wahr oder Falsch


    Genau das gleiche wieder hier

    if(Statement(...))
    {
    DoSomething();
    }
    else
    {
    Test();
    }


    Bei Kommandos sprich Direkten Aktionen braucht man keine Bereiche eingrenzen da es sich hierbei nicht um mehrere Aktionen hintereinander handelt sprich
    Array Bereiche weisen immer darauf hin das mehrere Werte folgen.


    if(Statement(...))DoSomething();
    else Test();


    Direkt & schneller


    Hier mal ein Hinweis auf auf Dinge dieser Art ...

    if(!strlen(string))
    {
    SendClientMessage(...);
    return 1;
    }


    Zu indirekt & zu viele Schritte ...


    if(!strlen(string))return SendClientMessage(...); // SendCMessage gibt bei erfolgreichem ausführen 1 wieder


    soll der Wert umgekehrt wiedergegeben werden also aus 1 , 0 werden aus Wahr > Falsch


    if(!strlen(string))return !SendClientMessage(...); // << Wie man es gewohnt ist den Umkehr Operator verwenden


    Fakten dazu


    new var = (wert1 == wert2) // << Wird in Boolean gewandelt als Wahr / Falsch gibt je nach dem 0 & 1 wieder


    wie man sieht die Sprache selber kann auch selber etwas nachdenken & entscheidet dann bei gewissen zusammenhängen selber.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Simples Anti Spawnkill
    Ganz Oben:
    #define SPAWNTIME 10
    Bei OnPlayerSpawn:
    SetTimerEx("GiveWeapons", SPAWNTIME*1000, false, "i", playerid);
    SetPlayerHealth(playerid, 1000.0);
    Ganz unten im Skript:
    forward GiveWeapons(playerid);
    public GiveWeapons(playerid)
    {
    SetPlayerHealth(playerid, 100.0);
    return 1;
    }


    - Ungetestet

  • Da einer der Benutzer ( Ich erwähne Extra keine Namen ) mir sagt das ReturnUser nicht mehr Funktioniert,
    sprich aus teilen der Wörter den Benutzer fischen, hab ich mal eine eigene Gebaut, falls sie noch jemand braucht , Bitteschön


    ReturnUser(string[])
    {
    new retuser = -1,
    nameplayer[MAX_PLAYER_NAME];
    if(!strlen(string))return retuser;
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
    GetPlayerName(i,nameplayer,sizeof nameplayer);
    if(strlen(string) > strlen(nameplayer))continue;
    for(new j = 0;j<((strlen(nameplayer)-strlen(string))+1);j++)
    {
    if(strcmp(string,nameplayer[j],true,strlen(string)))continue;
    retuser = i;
    break;
    }
    if(retuser!=-1)break;
    }
    return retuser;
    }


    Verwendung
    // Angenommen der Nutzer heißt ,,TestNutzer´´
    new integerwert = ReturnUser("test");


    • Gibt die ID des Nutzers wieder

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Jetzt mal ne Sau dumme Frage :
    Warum heißt dein public GiveWeapons, der Spieler wird doch auf 100 HP gesetzt und bekommt keine Waffen :whistling:


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

  • Ja nur der Textdraw "MoneyText" fehlt noch und HideMoneyText usw. ^^

  • wie kriege ich nen Timer in mein tor rein?....
    also das es nach ner bestimmten zeit wieder runter fährt...

    Rechtschreibung? We braucht sowas den?


    Zitat

    [ GODFATHER-RPG ] [ 0.3 ] German-Reallife24[Selfmade Script]
    Selfowne




    FirstSelfmadeServer
    ung. noch 2Monate dan OpenBeta <3


    :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:


  • forward CloseGate();
    public CloseGate()
    {
    // MoveObject(...); zum Gate schließen.
    }


    Im Command dann:
    SendClientMessage(playerid,farbe,"Tor wird in 9 Sekunden automatisch geschlossen.");
    SetTimer("CloseGate",9000,0);


    Dürfte so gehen ;D Lange nicht mehr gemacht. :D

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