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
  • Hier ein Mini-Gamemode, indem beim Start der aktuelle Unixtimestamp ausgegeben wird:



    #include a_samp


    stock mktime(hour,minute,second,day,month,year)
    {
    new timestamp2, days_of_month[12];


    timestamp2 = second + (minute * 60) + (hour * 3600);
    if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
    days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31};
    } else {
    days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31};
    }
    new days_this_year = 0;
    days_this_year = day;
    if(month > 1) {
    for(new i=0; i<month-1;i++) {
    days_this_year += days_of_month[i];
    }
    }
    timestamp2 += days_this_year * 86400;
    for(new j=1970;j<year;j++) {
    timestamp2 += 31536000;
    if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) timestamp2 += 86400;
    }
    return timestamp2;
    }


    public OnGameModeInit()
    {
    new hour, minute, second, year, month, day, timestamp;


    gettime(hour, minute, second);
    getdate(year, month, day);
    timestamp = mktime(hour,minute,second,day,month,year);
    printf("UNIX Timestamp: %d", timestamp);
    }

  • Grade durch zufall rausgefunden:
    public SlowMotion(playerid)
    {
    SetPlayerDrunkLevel(playerid,2000);
    new Float:adrenalinx,Float:adrenaliny,Float:adrenalinz;
    GetPlayerPos(playerid,adrenalinx,adrenaliny,adrenalinz);
    adrenalinpickup[playerid] = CreatePickup(1241,3,adrenalinx,adrenaliny,adrenalinz,GetPlayerVirtualWorld(playerid));
    SetTimerEx("DisappearPickup",1000,0,"i",adrenalinpickup[playerid]);
    return 1;
    }


    Bewirkt, dass der Spieler sich gaaaaaaaaanz langsam bewegen kann, ihr wisst was ich meine.
    So wie die Pille im SP Modus.

  • Da ich die IG Befehle, wie /save nicht mehr nutzen kann, habe ich eigenes gescriptet.
    strtok(const string[], &index)
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
    index++;
    }


    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new cmd[256], idx;
    cmd = strtok(cmdtext,idx);

    if(strcmp(cmd, "/ssave", true) == 0) {
    new length = strlen(cmdtext);
    while ((idx < length) && (cmdtext[idx] <= ' ')) {
    idx++;
    }
    new offset = idx;
    new result[64];
    while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) {
    result[idx - offset] = cmdtext[idx];
    idx++;
    }
    result[idx - offset] = EOS;
    if(!strlen(result)) return SendClientMessage(playerid, COLOR_GREEN, "[BENUTUNG]: /ssave [Name]");
    new Float:each[3];
    GetPlayerPos(playerid, each[0], each[1], each[2]);
    new File:hFile,coordsstring[128];
    format(coordsstring,128, "%d,%d,%d, %s\r\n", each[0], each[1], each[2], result);
    hFile = fopen("Saves.cfg", io_append);
    fwrite(hFile, coordsstring);
    fclose(hFile);
    SendClientMessage(playerid, COLOR_GREEN, "Position gespeichert");
    PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
    return 1;
    }
    return 0;
    }
    }
    Viel Spaß damit

    Kalcor: "... it makes the game look like it's not GTA. This mod is called San Andreas Multiplayer. It's not a custom game engine which you can script..."

  • /save funktioniert noch genauso wie in 0.2X - Mit der Ausnahme dass man keine Messages mehr gesendet bekommt.


    // Ich wollte es nur mal anmerken - Nicht damit jetzt jeder denkt dass /save nichtmehr funktioniert.

    Einmal editiert, zuletzt von [NSG]Bright ()

  • Wenn ich sag, es geht bei mir nicht, dann ist es. Keine Disskussion bitte.
    Vielleicht bringt es ja welchen etwas.

    Kalcor: "... it makes the game look like it's not GTA. This mod is called San Andreas Multiplayer. It's not a custom game engine which you can script..."

  • Ein automatisches Fahrzeugheilsystem.
    Zuerst der forward, der über Main ist:
    forward fahrzeugheilen();
    Dann der Timer:
    SetTimer("fahrzeugheilen", 500, 1);//1000 = 1 Sekunde
    Als letztes der public:


    public fahrzeugheilen()
    {
    for(new playerid=0; playerid<MAX_PLAYERS; playerid++)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:health, fahrzeug;
    if (IsPlayerInAnyVehicle(playerid))
    {
    fahrzeug = GetPlayerVehicleID(playerid);
    GetVehicleHealth(fahrzeug, health);
    if (health < 700)
    {
    SetVehicleHealth(fahrzeug, 1000);
    }
    }
    }
    }
    return 1;
    }

    Gruß Nate

  • Mal ein klein bisschen optimierter und kürzer:
    public fahrzeugheilen()
    {
    new g,Float:health,gVeh;
    for( ; g < MAX_PLAYERS; g++) {
    gVeh = GetPlayerVehicleID(g);
    if(!gVeh) continue;
    GetVehicleHealth(gVeh, health);
    if(health < 700.0) {
    SetVehicleHealth(gVeh, 1000.0);
    }
    }
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • stock RandomStr(output[],const len)
    {
    for(new i = 0;i<len;i++)
    {
    while(output[i] < 0x41 && output[i] > 0x39 || output[i] < 0x30 || output[i] > 0x5A && output[i] < 0x61 || output[i] > 0x7A){output[i] = random(127);}
    }
    }


    Anwendung :
    new deinstring[9];
    RandomStr(deinstring,8);


    • Text/String/Index Variable wo der Inhalt rein soll
    • Länge des Wertes

    Erstellt ein Zufallswert mit Inhalt von A-Z Klein & Groß & Zahlen

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • mal was einfaches:
    stock SpielerLebenSetzen(playerid, Float:health)
    {
    new Float:SHealth;
    GetPlayerHealth(playerid, SHealth);
    SetPlayerHealth(playerid, SHealth + health);
    }
    beispiel:

    if (strcmp("/kill", cmdtext, true, 10) == 0)
    {
    SpielerLebenSetzen(playerid, 0.0);
    SendClientMessage(playerid, COLOR_RED, "Selbstmord ist keine Loesung...");
    }


    oder:
    stock SpielerGeldSetzen(playerid, money)
    {
    GivePlayerMoney(playerid, money);
    }


    extra für noobs :D

    Gruß Nate

  • das ist sinnlos, da du somit Zeit verbrauchst durchdsa stock. BEi langen scripst sollte man ressourcen schonend scripten also eher nativs nahmen als so ne schei*e^^

  • Einfache Loopmethode mit Beispiel
    Verbesserungsvorschläge erwünscht :sleeping:



    #define MAX_LOOPS 10
    new c[MAX_LOOPS];


    stock loop(loopnmb, times, bool:state) { if(state==true) { return for(c[loopnmb] = 0; c[loopnmb]>sizeof(times); c[loopnmb]++); } else { return break(); }


    public loopings()
    {
    loop(1, 20, true) { SendClientMessage(c, MAX_MUSTERMANN_FARBE, "Diese Nachricht geht an 20 Spieler von ID 0-20"); }
    loop(1, 14, true) { while(c[1]==10) { loop(c[1], 0, false); } SendClientMessage(c, MAX_MUSTERMANN_FARBE, "Diese Nachricht geht an 10 Spieler, ab ID 10 unterbricht die Funktion"); }
    return 1;
    }

    [align=center]
    Mta Script Editor - Work in Progress

  • Also so wäre es einfacher


    #define foreachplayer(%1,%2) for(new %1;%1<MAX_PLAYERS;%1++) if(IsPlayerConnected(%1))



    foreachplayer(player,playerid) // player ist eine Variable die ihr selber festlegen könnt
    {



    }


    Wird nur für Spieler übernommen die Online sind , wenn man es nicht gerade auf dei Spieler bezieht kann man es auch ändern bzw. IsPlayerConnected Löschen,


    geht auch für Objekte :


    #define foreachobject(%1,%2) for(new %1;%1<MAX_OBJECTS;%1++) if(IsValidObject(%1))

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Haha nette Idee, find die IsPlayerConnected Schleife gut eingebaut.
    Hier zum Abschluss :sleeping:


    #define foreachvehicle(%1,%2) for(new %1;%1<MAX_VEHICLES;%1++) if(IsValidVehicle(%1))


    Nur fährt er da 2000 mal durch, auch wenn er die ungültigen Id´s rauswirft

    [align=center]
    Mta Script Editor - Work in Progress

  • Mal was kleines:
    /* Gibt den Spielerstatus als String zurück */
    stock GetStateName(state) {
    new retstr[16];
    switch(state) {
    case 0: retstr = "No State";
    case 1: retstr = "On Foot";
    case 2: retstr = "Driver";
    case 3: retstr = "Passenger";
    case 7: retstr = "Wasted";
    case 8: retstr = "Spawned";
    case 9: retstr = "Spectating";
    default: restr = "No State";
    }
    return retstr;
    }

  • hier mal ein kleiner waffencheck für anfänger.
    hier mal die color define für den script:
    #define COLOR_RED 0xAA3333AA


    erstmal der forward:
    forward waffencheck(playerid);


    dann der timer:
    SetTimer("waffencheck",1000,1);//1000 = 1 sekunde, also jede sekunde wird überprüft


    als nächtes der public:
    public waffencheck(playerid)
    {
    if(IsPlayerConnected(playerid))


    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    new waffe = GetPlayerWeapon(playerid);


    if(GetPlayerState(i) == PLAYER_STATE_DRIVER)
    {
    if(waffe == 35 || waffe == 36 || waffe == 38) /*35 = rocket launcher, 36 = hs rocket launcher, 38 = minigun */
    {
    Ban(i);
    SendClientMessage(i,COLOR_RED,"Du wurdest gebannt, wegen unerlaubten Waffen du Noob!");
    }
    }
    }
    return 1;
    }
    es kann auch erweitert werden, also für mehr waffencheck´s.
    das wars im prinzip. ist einfach und unkompliziert für anfänger gemacht.

    Gruß Nate

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