Beiträge von Campbell

    Du kannst mit der Funktion random() dir eine beliebige Zahl in einem bestimmten Spektrum ausgeben lassen. Damit ist es möglich Zahlen und Buchstaben damit beliebig zu erstellen und somit auch eine zufälliges Nummernschild.

    Für Gangzonen gibt es einen hilfreichen Include: http://forum.sa-mp.com/showthread.php?t=365425



    // Beispielwerte:
    Float:xMax = 1400.25;
    Float:xMin = 1200.86;
    Float:yMax = 896.26;
    Float:yMin = 726.83;


    // Funktion zur Überprüfung der Position des Spielers:
    stock IsPlayerInZone(playerid, Float:xMax, Float:xMin, Float:yMax, Float:yMin) {
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    if(X >= xMin && X <= xMax && Y >= yMin && Y <= yMax) {
    return 1;
    }
    return 0;
    }


    public OnPlayerExitVehicle(playerid) {
    if(IsPlayerInZone(playerid, xMax, xMin, yMax, yMin) == 1) {
    SendClientMessage(playerid, 0xFFFFFFFF, "Sie befinden sich nun in einer speziellen Zone.");
    }
    }

    Welche Bemerkung meinst du? Eig. bin ich nicht weiter auf ein Array eingegangen, sondern hab einen Link gepostet, wo drauf genau eingegangen wird


    Ich beziehe mich auf folgendes Problem in deinem Script (ob die Zuweisung überhaupt notwenig ist sei mal dahingestellt):

    // Dies wird nur den Index 0 auf false setzen.
    new bool: HatGemietet[MAX_PLAYERS] = false;


    // Dies wird alle Indexe des Arrays auf false setzen:
    new bool: HatGemietet[MAX_PLAYERS] = {false, ...};

    Die Respawn Zeit von 10 Minuten ist 600000 ;)
    den 1 Sekunde = 1000
    1 Minute = 1000 * 60 = 60000
    1 Minute = 10 = 10 Minuten ( 60000 * 10)

    "The delay until the car is respawned without a driver, in seconds." - Nicht in Millisekunden (http://wiki.sa-mp.com/wiki/AddStaticVehicleEx).


    Die Variable Mietauto könnte man zwar ins Enum einbauen, jedoch warum sollte man es sich etwas umständlicher machen, wenn diese Möglichkeit auch geht ;)

    Halte ich nicht für umständlicher, aber evt. ist das nur meine Einschätzung.

    Erklärung: while-, do...while-, for-Schleifen (Mit Struktogramm etc.)


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    • Initialisierung von Arrays:

      // Dies wird nur den Index 0 auf false setzen.
      new bool: HatGemietet[MAX_PLAYERS] = false;


      // Dies wird alle Indexe des Arrays auf false setzen:
      new bool: HatGemietet[MAX_PLAYERS] = {false, ...};

    • Respawn Zeit von 10 Minuten entspricht 600, nicht 600000 (60 * 10 = 600).
    • Folgende Zeile könnte man sehr simpel mit in den Enumerator einbauen:

      new Mietauto[MAX_MIETAUTOS];
    • Warum einen Timer verwenden, wenn es so oder so bereits OnPlayerDeath() gibt?
    • Warum so viele Textdraws erstellen, wenn es auch soetwas wie Player-Textdraws gibt?

    Mache dir klar, was dein Script dort tut. Finde heraus, wie die Schleife und die if-Abfrage fungiert und du wirst erkennen, woran das Problem liegt. Falls du das nicht tust, wirst du erneut und erneut auf Probleme stoßen. Falls dir irgendetwas am Code nur etwas unklar ist, frage hier nach.

    Es ist möglich mit CSS das sog. Ribbon ganz einfach zu erstellen. Der Trick liegt darin rechts und links unten einen kurzen Border zu erstellen und von diesem dennoch drei Seiten Transparent zu machen. Dadurch entsteht ein Dreieck, das man rechts und links an die Navigation anbauen kann. Ein einfaches Beispiel, das ich dir etwas verändert habe, habe ich dir mal in meinem jsFiddle Account darstellen lassen: http://jsfiddle.net/ChrisDot/j3WQn/


    Die wichtigste Zeile zur Realisierung deiner Navigation habe ich dir unten mal mit einem Kommentar makiert:



    .ribbon {
    font-size: 16px;
    width: 25%;
    position: relative;
    background: darkred;
    color: #fff;
    font: 13px Trebuchet MS;
    text-align: center;
    padding: 1em 2em;
    margin: 2em auto 3em;
    }


    .ribbon .ribbon-content:before, .ribbon .ribbon-content:after {
    content: "";
    position: absolute;
    display: block;
    border-style: solid;
    border-color: darkred transparent transparent transparent; // Erstellen des Dreiecks.
    bottom: -1em;
    }


    .ribbon .ribbon-content:before {
    left: 0;
    border-width: 1em 0 0 1em;
    }


    .ribbon .ribbon-content:after {
    right: 0;
    border-width: 1em 1em 0 0;
    }


    <h1 class="ribbon">
    <strong class="ribbon-content">Your navigation button!</strong>
    </h1>

    Was du hier berechnest ist für mich sehr schlecht zu erkennen, da ich nicht verstehe, was mit den einzelnen Variablen gemeint ist. Betreibe doch einfach mal Debugging (gebe dir jede Variable aus und vergleiche sie mit ihrem Soll-Wert. Dadurch wirst du die problematischen Werte finden und den zu durchsuchenden Bereich eingrenzen).

    Da du von einem String redest gehe ich davon aus, dass du den Wert von Per-Player Variables Typ String setzen möchtest. Den Startwert einer Per-Player Variable kannst du nicht ändern, da diese generell einfach NULL ist. Was du aber machen kannst (ob das nun Sinn mach oder nicht):


    • Alle verwendeten Per-Player-Variablen bei Verbindungsaufbau bereits setzen.

      #if !defined ppStdValue
      #define ppStdValue "Breadfish"
      #endif


      public OnPlayerConnect(playerid) {
      SetPVarString(playerid, "breadfish", ppStdValue);
      }

    • Eine extra Funktion schreiben, die bei Verwendung der Variable den Wert zuerst setzt, im Falle, dass er NULL sei (weniger effizient, da bei jeder Verwendung ein Test durchgeführt wird).


    Guten Tag,


    ich selbst selbst bin jahrelanger Programmierer in Sachen C++, PHP, HTML, MySQL, Javascript etc. und bin auch in bester Lage SA:MP Server zu realisieren. Ich biete mich demnach an Module in jeglicher Hinsicht (Includes, Filterscripte, Gamemodes, Plugins etc.) zu erstellen. Die Fertigungszeit variiert je nach Größe des Auftrags und meinem persönlichen Zeitmanagement. Ich kann jedoch sagen, dass kleinere Gamemodes innerhalb von zwei Wochen erstellt werden können und Includes/Filterscript etc., soweit es nichts spezielles ist, innerhalb von wenigen Tagen. Gegenleistungen werden in diesem Fall -ausschließlich- in Form von Geld akzeptiert (Bezahlmöglichkeiten: PayPal und Überweisung). Referenzen sind vorzeigbar, jedoch werde ich nicht jedem meine Werke vorführen, bevor es zu einem möglichen Auftrag kommt. Falls Interesse besteht meldet euch doch einfach bei mir per PN mit folgendem Inhalt, damit es für mich möglich ist Rückmeldung zu geben (desto genauer die Beschreibung des Vorhabens, desto schneller kann es zur Realisierung kommen):


    Code
    Vorhaben:
    Kontaktmöglichkeit:


    ______
    Unverbindlicher Hinweis: Die Sicherheit einer Transaktion kann am besten durch die Einschaltung eines Mittelsmannes gewährleistet werden. Weitere Informationen dazu gibt es hier.

    • dini_IntSet ist nicht das selbe wie dini_Get. Das eine setzt neue Werte in der Datei und das andere holt die Daten aus der Datei.
    • Du verfügst über ein grundlegendes Verständnisproblem, wie du den Enumerator anwenden sollst. Ein Enumerator ist generell erstmal eine Liste an Variablen. Die meisten Verwenden diesen nun in Arrays, wie du es auch getan hast. Dein Problem ist nun die Anwendung dieses Arrays. Du musst den Array durchlaufen und nicht den Enumerator. Ein einfaches Beispiel:



      #include <a_samp>


      #if !defined MAX_CLIENTS
      #define MAX_CLIENTS 50
      #endif


      // Erstellen des Enumerators.
      enum client {
      username[MAX_PLAYER_NAME],
      conTimestamp,
      bool:admin
      }


      // Zuweisung des Enumerators zu einem Array.
      new clientArray[MAX_CLIENTS][client];


      main() {
      // Zuweisung von Werten zu den einzelnen Variablen nach Format: arrayName[arrayIndex][enumVariable]
      format(clientArray[0][username], MAX_PLAYER_NAME, "Client No.001");
      clientArray[0][conTimestamp] = gettime();
      clientArray[0][admin] = true;

      format(clientArray[1][username], MAX_PLAYER_NAME, "Client No.002");
      clientArray[1][conTimestamp] = gettime();
      clientArray[1][admin] = false;

      // Ausgabe der Werte mithilfe einer for-Schleife (Durchlaufen aller Indexe des Arrays).
      for(new c = 0; c != sizeof(clientArray); c++) {
      if(strlen(clientArray[code=c][username]) > 0 && clientArray[code=c][conTimestamp] != 0) {
      printf("%s: (%i - Admin: %b)", clientArray[code=c][username], clientArray[code=c][conTimestamp], clientArray[code=c][admin]);
      }
      }
      }

      Ausgabe:

      Code
      Client No.001: (1353846975 - Admin: 1)
      Client No.002: (1353846975 - Admin: 0)


    Wäre im Stand dir das recht schnell und gut zu lösen. Habe mehrere Jahre Erfahrung in PHP (Design Patterns eg. MVC; Objektorientiertes Programmieren etc.), HTML, Javascript, MySQL, jQuery etc.
    Melde dich bei mir falls du Interesse hättest.

    • In OnPlayerDeath die jetzigen Koordinaten auslesen und zwischenspeichern.
    • Im Falle eines Todes wird der Spieler neu gespawnt. Daher in OnPlayerSpawn eine Abfrage machen, ob der Spieler tot ist. Gegebenenfalls dies in OnPlayerDeath zwischenspeichern.
    • Gesundheit neu setzen, damit der Spieler nicht mit voller Gesundheit auf dem Boden liegt.
    • In OnPlayerDeath oder beim Spawn einen 15 Minuten Timer starten, der den Spieler zum Friedhof teleportiert und ihn sterben lässt. Den Timer stoppen, im Fall, dass der Spieler behandelt wird.
    • Gegebenenfalls eine Animation hinzufügen, damit die Person auf dem Boden liegt, sobald sie gespawnt wird und ebenfalls den Spieler per TogglePlayerControllable() in dieser Position halten.
    • Der /heal Befehl muss daher lediglich die Animation stoppen, den Spieler wieder bewegen lassen und die Gesundheit setzen.