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
  • Ach was.
    Bei meins kann man die Commands überall verteilen etc., es hat MEHR sinn als deins.
    Wo hat deins bitte Anfängerfreundlichkeit? Und weniger schreibarbeit LOL ??


    Hier werde ich nicht darüber streiten, mit soeinem typen wie dir schonmal garnicht.
    Du bist schwer von verstand.

  • SetVehicleNumberPlateEx


    Da ja jeder ein Tutorial aufmacht (soviel ich bemerkt hab), oder danach fragt wie man Nummernschilder erstellt ohne Fahrzeuge zu respawnen, habe ich mal eine neue Funktion dafür gemacht:
    http://pastebin.com/jBY5Q3wK


    stock SetVehicleNumberPlateEx(veh, string[]) //bY FoxHound
    {
    new i=0,Float:vPos[4],vDmg[4],carMod[16],seat[MAX_PLAYERS]={-1,...};
    GetVehiclePos(veh,vPos[0],vPos[1],vPos[2]);
    GetVehicleZAngle(veh,vPos[3]);
    GetVehicleDamageStatus(veh,vDmg[0],vDmg[1],vDmg[2],vDmg[3]);
    for(i=0; i<GetMaxPlayers(); i++) {
    if(IsPlayerConnected(i) && IsPlayerInVehicle(i, veh)) {
    seat[i]=GetPlayerVehicleSeat(i); RemovePlayerFromVehicle(i); } }
    for(i=0; i<=13; i++) { carMod[i]=GetVehicleComponentInSlot(veh,i); }
    /**/SetVehicleNumberPlate(veh,string);
    SetVehicleToRespawn(veh);
    SetVehiclePos(veh,vPos[0],vPos[1],vPos[2]);
    SetVehicleZAngle(veh,vPos[3]);
    for(i=0; i<=13; i++) { AddVehicleComponent(veh,carMod[i]); }
    UpdateVehicleDamageStatus(veh,vDmg[0],vDmg[1],vDmg[2],vDmg[3]);
    for(i=0; i<GetMaxPlayers(); i++) {
    if(IsPlayerConnected(i) && seat[i]!=-1) {
    PutPlayerInVehicle(i,veh,seat[i]); } }
    }

    2 Mal editiert, zuletzt von FoxHound ()

  • Du lässt das Fahrzeug doch aber auch respawnen.Du "vertuschst" es doch nur doch nur :/.
    Hast du es eigentlich getestet? Ich meine nämlich,dass man Fahrzeuge nicht an eine Andere Position setzen kann,wenn keiner darin sitzt.


    Und nebenbei:

    new seat[MAX_PLAYERS]=-1;

    ist

    new seat[MAX_PLAYERS];
    seat[0] = -1;


    Damit aber alle mit -1 initialisiert werden,müsstest du folgendes machen:
    new seat[MAX_PLAYERS]= {-1,...};

  • Achso ok danke, ich fixx es jetz :D
    Und ja, ich habs aufm HomeServer getestet und es funktioniert wunderbar.


    ToggleVehicleEngine


    Kleine, aber eine gute Funktion. Benutze ich auch selbst, dann muss ich auch net immer soviele Sachen schreiben.


    http://pastebin.com/WuqyW2fs
    stock ToggleVehicleEngine(vehicleid,toggle) {
    new data[7];
    GetVehicleParamsEx(vehicleid,data[0],data[1],data[2],data[3],data[4],data[5],data[6]);
    SetVehicleParamsEx(vehicleid,toggle,data[1],data[2],data[3],data[4],data[5],data[6]); }


    €dit:// Kleine Rechtschreibfehler gefixxt.


    €dit 2:// ToggleVehicleEngine.

    3 Mal editiert, zuletzt von FoxHound ()

  • GetOnlinePlayers


    Diese Funktion gibt die Zahl von den Online Spielern zurück.
    Würde ich aber lieber nicht an der Stelle von "GetMaxPlayers" benutzen.
    Aber man könnte es z.B. dafür benutzen um als Textdraw anzuzeigen wieviele Spieler online sind.


    Funktion:
    http://pastebin.com/0T0jMXZd
    stock GetOnlinePlayers() {
    new i[3]={0,...};
    for(i[0]=GetMaxPlayers(); i[1]<=i[0]; i[1]++) {
    if(IsPlayerConnected(i[1])) { i[2]++; } }
    return i[2]; }

    2 Mal editiert, zuletzt von FoxHound ()

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

  • würde ich eher so machen :

    stock randomEx(const min, const max)
    {
    return random(max-min)+min;
    }



    dein code ruft GetMaxPlayers() bei jedem Schleifendurchlauf auf, solltest du besser so machen :



    stock GetOnlinePlayers()
    {
    new i,j,players_online;
    for(j=GetMaxPlayers(); i<=j; i++) {
    if(IsPlayerConnected(i)) {
    players_online++; } }
    return players_online; }


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

  • Hmm genau.
    Ist das hier eigentlich nicht besser, so muss man auch nicht 3 Funktionen auf einmal erstellen:
    stock GetOnlinePlayers() {
    new i[3]={0,...};
    for(i[0]=GetMaxPlayers(); i[1]<=i[0]; i[1]++) {
    if(IsPlayerConnected(i[1])) { i[2]++; } }
    return i[2]; }

  • Hier zwar nichts besonderes aber hilfreich :P


    Ob es jedoch Ressourcensparend ist, weiß ich nicht, müsste eig. nicht Ressourcensparend sein, da es ja immer wieder Ausgeführt wird (Wenn man es benötigt ^^)



    #define ForPlayers for(new i=0; i<MAX_PLAYERS; i++)


    Hiermit muss man nicht immer eine For - Schleife erneut Schreiben also
    ist das:



    ForPlayers
    {
    SendClientMessage(i,COLOR_RED,"Hallo!");
    }


    Ganz genau das Gleiche wie:



    for(new i=0; i<MAX_PLAYERS; i++)
    {
    SendClientMessage(i,COLOR_RED,"Hallo!");
    }


    Wichtig:
    Als Parameter muss immer "i" benutzt werden wie oben im Beispiel


    Das Gleiche für Autos:

    #define ForVehicles for(new c=0; c<MAX_VEHICLES; c++)

    Hierbei wird als Parameter "c" benutzt!



    MfG

  • Bild:


    Eine Funktion, um zu überprüfen, ob Tabellen in einer Datenbank vorhanden sind.


    Voraussetzungen:
    • MySQL Plugin von G-sTyLeZzZ
    • MySQL Datenbank mit Verbindungsdaten


    Gesamte Funktion:
    (Pastebin)
    stock mysql_table_existence(amount, tables[][], connection = 1)
    {
    print("\n[MySQL] Checking if connection exists.");
    if(mysql_ping(connection) == 1)
    {
    print("[MySQL] Connection exists. Checking tables.\n");


    // Check if there are tables to check
    if(!strlen(tables[0]))
    {
    print("[MySQL] Script won't work. No tables avaible to check.");
    print("[MySQL] Table checking done. Have fun!\n");
    gDatabaseError = true;
    return 1;
    }


    // Storage, Query, MissingTables Counter, FoundTables Counter
    // [0] = Query
    // [1] = Storage
    new string[2][64],
    missingTables = 0,
    foundTables = 0;


    for(new t=0; t<amount; t++)
    {
    // Create Query
    format(string[0], 64, "SHOW TABLES LIKE '%s'", tables[t]);
    mysql_query(string[0], -1, -1, connection);
    mysql_store_result(connection);


    // Check if it exists
    while(mysql_fetch_row_format(string[1], "|", connection))
    {
    if(!strcmp(string[1], tables[t])) { gDatabaseError = false; break; }
    else gDatabaseError = true;
    }


    // Anti-Empty-Failure
    if(!string[1][0]) gDatabaseError = true;


    // Output Message
    if(gDatabaseError == true)
    printf("[MySQL] Table '%s' not found.", tables[t]);
    else
    printf("[MySQL] Table '%s' found.", tables[t]);


    // Release Memory and Reset
    mysql_free_result(connection);
    string[0][0] = '\0';
    string[1][0] = '\0';


    if(gDatabaseError == true) ++missingTables;
    else ++foundTables;
    gDatabaseError = false;
    }


    // Output Error, when a table is missed
    if(missingTables >= 1)
    {
    if(missingTables == 1) printf ("\n[MySQL] Script won't work. One table wasn't found.");
    else printf ("\n[MySQL] Script won't work. %d tables weren't found.", missingTables);
    printf("[MySQL] Table checking done. Have fun!\n");
    gDatabaseError = true;
    }
    else
    {
    if(foundTables == 1) printf("\n[MySQL] No table is missing. One table found.");
    else printf("\n[MySQL] No table is missing. %d tables found.", foundTables);
    printf("[MySQL] Table checking done. Have fun!\n");
    gDatabaseError = false;
    }


    printf("[MySQL] Copyright (c) [OSF]Atom - Table Check\n");
    return 1;
    }
    else
    {
    print("[MySQL] Connection doesn't exist. Aborting.\n");


    // No connection - no databas'es
    gDatabaseError = true;
    return 0;
    }
    }


    Verwendung:
    new table[][] = {"alpha", "beta", "charlie", "delta"};
    mysql_table_existence(4, table);


    Parameter:
    amount = Anzahl der Tabellen
    tables[][] = Der Array mit den Tabellen-Namen
    connection = Falls jemand eine spezielle Verbindung benutzt



    Sonstige Voraussetzungen:
    new bool:gDatabaseError = false;



    Hinweise:
    Wenn (gDatabaseError == true) ist, dann könnt ihr den Spieler vorm Registrieren,
    was vielleicht mehr Fehler gibt, aufhalten und rauskicken.

    Beispiel:

    public OnPlayerConnect(playerid)
    {
    // When a table or something else is broken
    if(gDatabaseError == true)
    {
    ShowPlayerDialog(playerid, 0, 0, "Database Error", "Sie wurden vom Server entfernt, da ein Problem mit der Datenbank vorliegt, um jegliche Fehler zu vermeiden.\n\nFreundliche Grüße\nDas Team", "Schließen", "");
    Kick(playerid);
    return 0;
    }
    return 1;
    }



    Freundliche Grüße
    Martez

  • Hat jemand ein Schnippsel wo man Abfragen kann ob ein Auto in der nähe von x,y,z ist? Quasi ein IsPlayerInRangeOfPOint nur al IsCarInRangeOfPoint? Ich bekomms nich gebacken. Ja ich hab schon Sufu genutzt und auch Google hab ich walten lassen.

  • Sowas?
    stock IsVehicleInRangeOfPoint(vehicleid, Float:range, Float:x, Float:y, Float:z)
    {
    new Float:px,Float:py,Float:pz;
    GetVehiclePos(vehicleid,px,py,pz);
    px -= x;
    py -= y;
    pz -= z;
    return ((px * px) + (py * py) + (pz * pz)) < (range * range);
    }

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Oh man ich komm wieder nich weiter^^ ich will eine Autobombe bauen und die Karre soll aber auch in die Luft fliegen wenn keiner in dem Auto drin ist. Funktioniert das so überhaupt?



    public BombEx(playerid)
    {
    for(new v=0; v<MAX_VEHICLES; v++)
    {
    if(IsVehicleInRangeOfPoint(v, 20, ExplosionZ[1], ExplosionY[1], ExplosionZ[1]))
    {
    SetVehicleHealth(v,1.0);
    }
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerInRangeOfPoint(i,20,ExplosionX[1], ExplosionY[1], ExplosionZ[1]))
    {
    SetPlayerHealth(i,0.0);
    }
    }
    CreateExplosion(ExplosionX[1], ExplosionY[1], ExplosionZ[1], 10, 0);
    }


    Ich sterbe innerhalb der 20 Meter allerdings bleibt der Wagen in Ordnung.

  • Kleine Funktion um durch die Waffen-ID den Slot der Waffe zu erfahren (Mit Switch)
    stock GetSlot(waffenid)
    {
    new slot;
    switch(waffenid)
    {
    case 0,1: {slot = 0;}
    case 2,3,4,5,6,7,8,9: {slot = 1;}
    case 10,11,12,13,14,15: {slot = 10;}
    case 39,16,17,18: {slot = 8;}
    case 22,23,24: {slot = 2;}
    case 25,26,27: {slot = 3;}
    case 28,29,32: {slot = 4;}
    case 30,31: {slot = 5;}
    case 33,34: {slot = 6;}
    case 35,36,37,38: {slot = 7;}
    case 41,42,43: {slot = 11;}
    case 40: {slot = 12;}
    }
    return slot;
    }

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