Beiträge von Campbell

    Meist entspricht es immer dem gleichen Format. Player am Anfang der Funktion hinzufügen und die PlayerID als ersten Parameter ergänzen (Ausnahme: CreatePlayerTextDraw(playerid, ...)). Ebenfalls muss das Ganze unter OnPlayerConnect() verwendet werden. Demnach:



    new PlayerText:Death2;
    new PlayerText:Kills2;


    public OnPlayerConnect(playerid) {
    Death2 = CreatePlayerTextDraw(playerid, 401.000000, 391.000000, "0"); // Tode Anzahl
    PlayerTextDrawBackgroundColor(playerid, Death2, 255);
    PlayerTextDrawFont(playerid, Death2, 3);
    PlayerTextDrawLetterSize(playerid, Death2, 0.659999, 1.600000);
    PlayerTextDrawColor(playerid, Death2, 7864575);
    PlayerTextDrawSetOutline(playerid, Death2, 0);
    PlayerTextDrawSetProportional(playerid, Death2, 1);
    PlayerTextDrawSetShadow(playerid, Death2, 1);


    Kills2 = CreatePlayerTextDraw(playerid, 221.000000, 391.000000, "0"); // Morde Anzahl
    PlayerTextDrawBackgroundColor(playerid, Kills2, 255);
    PlayerTextDrawFont(playerid, Kills2, 3);
    PlayerTextDrawLetterSize(playerid, Kills2, 0.569999, 1.700000);
    PlayerTextDrawColor(playerid, Kills2, -1358954241);
    PlayerTextDrawSetOutline(playerid, Kills2, 0);
    PlayerTextDrawSetProportional(playerid, Kills2, 1);
    PlayerTextDrawSetShadow(playerid, Kills2, 1);
    }

    Dies ist ein Fehler von meiner Seite:


    if(VehicleFuelType[GetVehicleModel(vehicleid)-400][0] == 0) {}
    // Dies sollte den Fehler beheben, da angegeben werden muss, dass man den ersten Wert geliefert bekommen haben möchte.

    Eine Möglichkeit:



    new RankNames[][] {
    "None", "Private First Class", "Lance Corporal", // ...
    }


    Rank = TextDrawCreate(); // ...


    stock GetRankName(playerid) {
    return RankNames[PlayerInfo[playerid][pRank];
    }

    Die folgende Rechnung ist etwas lächerlich, da es einfach Entfernung * 3.5 entspricht. Man könnte das Ganze vereinfachen (1000/1000 = 1; Enfernung / 1 = Entfernung - Daher: Entfernung * 3.5).
    Geschwindigkeit = (Entfernung / (1000/1000)) * 3.5;


    Das Problem: Du verwendest ein logisches Oder und demnach ist folgendes immer erfüllt:
    if(floatround(Geschwindigkeit) >= 1 || floatround(Geschwindigkeit) <= 60)


    Die Geschwindigkeit wird wahrscheinlich immer größergleich 1 bzw. kleinergleich 60 sein und demnach wird dein Textdraw wahrscheinlich immer grün sein. Es würden sich also andere Bedingungen empfehlen, die alle Geschwindigkeiten abdecken (auch 0) und auch dem gewünschtem entsprechen.

    • Werte aus der Datenbank laden und in Variablen zwischenspeichern.
    • GangZoneCreate() verwenden und die entsprechenden Parameter mit den Variablen mit den zwischengespeicherten Daten füllen.
    • Beim Erstellen mehrerer Gangzonen lediglich eine while-Schleife anwenden, um den kompletten Datensatz, der zurückgelieft wurde, abzuarbeiten.
    • Evt. zusätzlich die Gangzonen auf einem extra Thread laden lassen, um unerwarteten Performanceproblemen vorzubeugen.
    • Erstelle Timer, der jede Sekunde aufgerufen wird.
    • Erstelle eine Variable vom Typ Integer, der die Zahl 3600 enthält.
    • Ziehe bei jedem Durchlauf des Timers 1 von der Variable ab.
    • Falls die Variable den Wert 0 erreicht würde es naheliegen, den Timer zu stoppen.
    • Falls nicht, blende den Textdraw aus.
    • Erneuere den String des Textdraws mit den neuen Werten. Eine Möglichkeit wurde bereits oben gezeigt.
    • Blende den Textdraw wieder ein.

    Das Ganze könnte durch weitere Abfragen des Werts noch verfeinert und optimiert werden. Bei einer Möglichkeit von mehreren Countdowns müsste diese Variante etwas abgeändert werden.

    1, Es muss natürlich valstr() heißen und nicht varlstr().
    2, Es könnte sein, dass du mit normalen Textdraws arbeitest. In diesem Fall habe ich im Beispiel Player-Textdraws verwendet, da diese hier viel Sinn ergeben würden. Dein bzw. der Quellcode des Beispiels müsste natürlich vor Verwendung angepasst werden.

    Es ist nicht möglich einer Zahl in einem String zu rechnen. Was dennoch möglich ist ist folgendes:



    new deaths[MAX_PLAYERS];
    new kills[MAX_PLAYERS];
    new PlayerText:deathcounter;
    new PlayerText:killcounter;


    public OnPlayerDeath(playerid, killerid, reason) {
    new deathstr[5],
    killstr[5];


    PlayerTextDrawHide(playerid, deathcounter);
    PlayerTextDrawHide(killerid, killcounter);
    deaths[playerid]++;
    kills[killerid]++;
    valstr(deathstr, deaths[playerid]);
    valstr(killstr, kills[killerid]);
    PlayerTextDrawSetString(playerid, deathcounter, deathstr);
    PlayerTextDrawSetString(killerid, killcounter, killstr);
    PlayerTextDrawShow(playerid, deathcounter);
    PlayerTextDrawShow(killerid, killcounter);
    }

    Zitat

    der befehl für mein Support geht nicht also das gesammte ding geht nicht

    • Exakte Fehlerbeschreibung.
    • Entsprechender Quellcode (Ein Quellcode, der nicht zum Problem gehört, ist nutzlos, da dort der Fehler nicht zu finden ist).
    • Quellcode ordentlich darstellen, da es so sehr mühsam ist, diesen zu kontrollieren.

    Schritte zur Realisierung:

    • Textdraw des getöteten Spielers und des Vollstreckers ausblenden.
    • Variablen, welche die Tote und die Vollstreckungen eines Spielers enthalten, erhöhen bzw. erniedrigen.
    • Strings der Textdraws' erneuern.
    • Textdraws für die entsprechenden Spieler wieder einblenden.

    Ein Timer ist hier überflüssig, da der Callback OnPlayerDeath() vorhanden ist.

    Generell würe ich einfach zwei Parameter empfehlen (Einmal für Diesel und einmal für Benzin) und diese in einem Array für jedes Auto zuweisen. Diese lassen sich einfach überprüfen und jederzeit leicht ändern. Das einzigste Hürde ist, dass die VehicleIDs erst bei 400 beginnen. Demnach müsste zum Vergleich immer 400 von der ModellID des Autos abgezogen werden.



    // Parameter: Benzin - 0; Diesel - 1


    new VehicleFuelType[][1] {
    {1}, // Index 0, Vehicle ID: 400
    {0}, // Index 1, Vehicle ID: 401
    {0}, // Index 2, Vehicle ID: 402
    {1], // Index 3, Vehicle ID: 403
    // ...
    }


    // Beispiel der Verwendung:


    public OnPlayerEnterVehicle(playerid,vehicleid,ispassenger) {
    if(VehicleFuelType[GetVehicleModel(vehicleid)-400][0] == 0) {
    SendClientMessage(playerid, 0x80A05CFF, "Es empfiehlt sich, dieses Auto mit Benzin zu tanken.");
    } else {
    SendClientMessage(playerid, 0x80A05CFF, "Es empfiehlt sich, dieses Auto mit Diesel zu tanken.");
    }
    }


    Auch diese Fehler werden in meinem Beitrag oben bereits beantwortet, nur dass der Array diesmal nicht PlayerInfo sondern pinfo heißt.

    Es wäre sinnvoll, sich den Quellcode anzuschauen, bevor man irgendwelche Antworten gibt. Fakt ist, dass man die Errors am besten von oben nach unten löst. Demnach stößt man auf folgende Probleme:


    if(PlayerInfo[playerid][pDonateRank] >= 1) {
    // ...
    }


    Der Array PlayerInfo ist nicht vorhanden. Demnach wäre es sinnvoll, diesen am besten mithilfe eines Enumerators zu erstellen (Falls du versuchst Variablen aus deinem Gamemode in dem Filterscript zu verwenden, muss das anderst realisiert werden). Demnach werden sich auch die restlichen Probleme in Zeile 32 von selbst auflösen. Es könnte jedoch ein weiterer Fehler in Zeile 36 auftreten, da dort zwei mal ein Semikolon gesetzt wurde. Weiteres bin ich nicht durchgegangen.



    ShowPlayerDialog(playerid,
    neondialog,
    DIALOG_STYLE_LIST,
    "Neon Farben",
    "DunklesBlau\nRot\nGruen\nWhite\nViolet\nGelb\nCyan\nLightBlau\nPink\nOrange\nLightGruen\nLightGelb\nNeon Loeschen",
    "Wählen",
    "Abbrechen"
    );;


    Zitat

    Cal hat es mir jetzt soweit erstellt. Nur nicht ganz fertig. Ich suche jetzt einen der es eben fertigstellt.



    Gruß
    Barney

    Ich war gestern nicht da, konnte es von daher nicht erstellen, sag bescheid, falls ich mich weiterhin hinsetzen sollte.

    Ok XSS habe ich vergessen. Benutze auch normaler weise Zend was alles automatisch escapet bei einträgen ;)

    Als sehr erfahrener und professioneller Webentwickler frage ich dich dann mal, was Cross Site Scripting mit Escaping zu tun hat. Bitte zieh hier keine Masche auf. Kann den Vorposter nur zitieren, "Pappnase".