Waterinclude - Stelle fest ob sich ein Fahrzeug oder ein Spieler im Wasser befindet

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
  • Soo nach ein paar Stunden arbeit ist es nun soweit, ich veröffentliche die "Waterinclude".


    Was sie speziell macht ist nichts besonderes und auch recht simpel gehalten.


    Sie durchforstet die Wasserbereich von GTA SA, welche ich in der Include aufgelistet habe.
    Um das ganze für euch zu vereinfachen habe, befinden sich 2 Funktion in der Include


    IsVehicleInWater(vehicleid)
    // Diese Funktion gibt den Wert 1 zurück, wenn sich das Fahrzeug im Wasser befindet.
    // und den Wert 0, wenn sich das fahrzeug nicht im Wasser befindet



    IsPlayerInWater(playerid)
    // Diese Funktion gibt:
    // den Wert 1 zurück, wenn sich der Spieler im Wasser befindet und schwimmt.
    // den Wert 2, wenn sich der Spieler unter Wasser befindet, aber nicht schwimmt.
    // den Wert 3, wenn der Spiele schwimmt, aber nicht im / unter Wasser ist.
    // den Wert -1, wenn der Spieler keine Animation hat aber in einer Wasserzone ist, bspw. wenn er sich in einem Fahrzeug befindet.
    // den Wert 0, wenn de Spieler nicht im Wasser ist oder eine Schwimmanimation ausführt.


    Download: http://preview.cr-ti.cc/Downloads/water.inc
    Dies dient gleichzeitig als Pastebin


    Sollten Fehler auftreten bitte meldet sie mir nicht per PN, sondern schreibt sie in diesen Thread rein.
    Gleiches gilt für, Verbesserungen oder wenn eine Funktion fehlen sollte.


    "Edits"
    1. falscher Link
    2. Dateianhang geupdatet
    3. Edit vergessen

    Dateien

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

    Margarete Stokowski

    2 Mal editiert, zuletzt von Akino Kiritani ()

  • Sie durchforstet die Wasserbereich von GTA SA, welche ich in der Include aufgelistet habe.


    Ahahaha da hatte jemand Langeweile ^^


    Nette Idee und gute Umsetzung, nur wieso setzt du dein Array nicht auf const?


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Eisbär_: Ist behoben - danke.
    Hab da doch glatt den falschen Link erwischt :/


    Kaliber: Weil ich das nicht für nötig hielt :D
    Kann ich aber ändern, nur für dich :P

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

    Margarete Stokowski

  • Wie kann ich mir folgendes denn vorstellen?

    Zitat

    // den Wert 3, wenn der Spiele schwimmt, aber nicht im / unter Wasser ist.


    An Land kann ich ja nicht Schwimmen und in dem Kommentar steht ja, wenn ich nicht im oder unter Wasser bin.

  • An Land kann ich ja nicht Schwimmen und in dem Kommentar steht ja, wenn ich nicht im oder unter Wasser bin.


    Es kann vorkommen, mus aber nicht.
    Das ist bspw. beim Fallen oder Airbreak der Fall ;)

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

    Margarete Stokowski

  • new idx = GetPlayerAnimationIndex(playerid); // <---
    new lib[32], name[32];
    GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,animname,32); // <-- idx statt GetPlayerAnimationIndex

    for(new i, size = sizeof(WaterCords); i != size; i++) // <-- sizeof ist keine Funktion. Ich weiss das Fachwort nicht, jedenfalls ist in der AMX der Wert wie n Konstante drin. Per DeAMX wird man das sicherlich sehen


    if(x >= WaterCords[i][0] && x <= WaterCords[i][3] && y >= WaterCords[i][1] && y <= WaterCords[i][4])
    {
    // if( ... ) { }
    break; // <- Hier vllt ein break. Kann mir nicht vorstellen, dass es Wasserplanen gibt die sich in den Koordinaten ( X , Y ) überschneiden. Sollte man vielleicht mal prüfen ob es wirklich so ist.
    }


    // den Wert 3, wenn der Spiele schwimmt, aber nicht im / unter Wasser ist.
    if(strcmp(animlib, "SWIM", true)) // <-- dann aber strcmp() == 0
    {
    return 3;
    }


    else return 2; // <-- Geschmackssache, aber das "else" braucht man ja nicht unbedingt
    else return -1; // ""

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • stock IsPlayerInWater(playerid)
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    new idx = GetPlayerAnimationIndex(playerid);
    new lib[32], name[32];
    GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,animname,32);
    for(new i, size = sizeof(WaterCords); i != size; i++)
    {
    if(x >= WaterCords[i][0] && x <= WaterCords[i][3] && y >= WaterCords[i][1] && y <= WaterCords[i][4])
    {
    if(z < WaterCords[i][2] || z < WaterCords[i][5])
    {
    if(idx)
    {
    if(!strcmp(animlib, "SWIM", true))
    {
    return 1;
    }
    else return 2;
    }
    else return -1;
    }
    }
    }
    if(strcmp(animlib, "SWIM", true))
    {
    return 3;
    }
    return 0;
    }
    Da ist ein Fehler.
    Du musst das new lib[32], name[32]; zu new animlib[32], animname[32]; machen, sonst gibt es Errors ;)

  • Hmm Blöd, hab ich wohl die falsche Datei hoch geladen.
    Lad ich, wenn ich das morgen nicht vergesse :D


    Goldkiller:
    Das mit sizeof werde ich einmal überprüfen, war/bin irgendwie der Meinung, sizeof wäre so eine "halbe" Funktion, um das mal zu umschreiben :D
    Wie gesagt, ich kümmer mich drum. ;)

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

    Margarete Stokowski

  • Das mit sizeof werde ich einmal überprüfen, war/bin irgendwie der Meinung, sizeof wäre so eine "halbe" Funktion, um das mal zu umschreiben


    sizeof ist ein unärer Operator :)


    mfg. :thumbup:

    ast2ufdyxkb1.png


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

  • Wenn ich mir die opcodes anschaue gibt es kein unterschied was darauf verweißt


    main()
    {
    for(new i; i != 10; ++i){ }
    }




    main()
    {
    for(new i; i != sizeof(ar); ++i){ }
    }


  • if(!strcmp(animlib, "SWIM", true))


    Geht das nicht einfacher, indem man nur den Schwimmanimationsindex abfragt?
    Jede Animation hat doch ihre eigene Nummer (index), also musst du garnicht den Animationsnamen
    herausfinden und diesen vergleichen, oder liege ich da falsch?

  • if(!strcmp(animlib, "SWIM", true))


    Geht das nicht einfacher, indem man nur den Schwimmanimationsindex abfragt?
    Jede Animation hat doch ihre eigene Nummer (index), also musst du garnicht den Animationsnamen
    herausfinden und diesen vergleichen, oder liege ich da falsch?


    Nicht in jedem bereich wo wasser existiert kannst du auch schwimmen.

  • Ich weiß gehört hier zwar nicht rein, aber ist die Abfrage so richtig?


    if(IsPlayerInWater(playerid) == 3)


    Ich möchte abfragen ob er die Schwimmanimation ausführt aber nicht im Wasser ist.
    /edit So funktioniert das nicht, irgendwas mache ich da falsch :evil:

    Einmal editiert, zuletzt von Man]ne. ()