Beiträge von Jeffry

    Ich auch nicht wirklich, ist halt die Wantedanzahl die bei "aktuelles wantedlevel" angezeigt wird wenn man den befehl /su ausführt & der andere einfach nur um die aktuelle wantedanzahl per format anzeigen zu lassen.

    Ich habe mir den Code angeschaut und mir ist folgendes aufgefallen:
    public Stern()
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    new stern = WantedLevel[i];
    SetPlayerWantedLevel(i,stern);
    WantedLevel[i] = stern * 2;
    }
    }
    }
    Das wird durch einen Timer jede 30 Sekunden aufgerufen, sprich alle 30 Sekunden wird das Wanted Level verdoppelt.
    Das dürfte der Grund sein.


    Was hat es damit auf sich?


    Falls du das nicht benötigst, dann kannst du Zeile 11940 auskommentieren.
    [pwn=11940]SetTimer("Stern",30000,1);[/pwn]


    Damit sollte das Problem behoben sein.
    Du musst natürlich das Wanted Level in der Spielerdatei zurücksetzen, bevor du den Server betrittst.

    Habe mir endlich die Panasonic LUMIX DMC-FZ1000 gekauft. Nachdem ich schon das ganze Jahr die Auktionen und Preis verfolgt habe, hab ich heute zugeschlagen.



    Habe zusätzlich noch die 30€ Rabatt durch die heutige Aktion (POOL18) an Rabatt bekommen, was klasse ist, da ich die Auktion ohnehin die ganze Woche schon im Auge hatte und auch für diesen Preis regulär gekauft hätte.
    Gesamtpreis ist daher 441,29€.



    Dazu dann noch:

    Die SD Karte natürlich für die Kamera und zufällig habe ich bei dealdoktor.de den Deal gesehen, dass es für die 3 USB-C Kabel 5,99€ Rabatt gibt (gilt übrigens noch heute!), was genial ist, da mir somit auch die Versandkosten erspart geblieben sind. Damit waren die Kabel fast kostenlos dabei :D
    Gegen Ende des Jahres werde ich die Kabel ohnehin brauchen, da gibt's dann einen neuen Vertrag mit Galaxy S9(+).

    Der Unterschied zwischen Datei und Server kann sich natürlich dadurch erklären, dass der Wert noch nicht fort geschrieben wurde. Da ich den Code nicht kenne, kann ich das aber nicht genau sagen.


    Printf nutzt du so:
    printf("Wanted Level: %d", WantedLevel[pid]);

    Dann liegt die Vermutung nahe, dass an dieser Stelle der Wert nochmal aufaddiert wird.
    Prüfe, wo du überall in die Variable schreibst, setze gegebenenfalls Prints hin, und prüfe dabei, an welcher Stelle sich der Wert verdoppelt.
    Anhand dessen, weißt du dann, woran es liegt und kannst den Code entsprechend anpassen, oder hier posten.

    Stellvertretend für @_Max

    Versucht es so:
    if(SpielerDaten[playerid][pFunkgeraet] == 0 || fv != -1 && fVehicle[fv][vehFraktion] == SpielerDaten[playerid][pFraktion])return SendClientMessage(playerid, GRAU, "Du hast kein Funkgerät mit oder sitzt in keinem Fraktionsfahrzeug!");
    zu:
    if(SpielerDaten[playerid][pFunkgeraet] == 0 && (fv == INVALID_VEHICLE_ID || fVehicle[fv][vehFraktion] != SpielerDaten[playerid][pFraktion]))return SendClientMessage(playerid, GRAU, "Du hast kein Funkgerät mit oder sitzt in keinem Fraktionsfahrzeug!");

    Wie genau kann ich das dann noch machen?


    Du erstellst ein PlayerTextDraw für den Spieler bei OnPlayerConnect, und wenn er eingesperrt wird, zeigst du es ihm an.
    Mit PlayerTextDrawSetString setzt du dann die verbleibende Zeit in das Textdraw.


    Zusätzlich erstellst du einen Timer bei OnGameModeInit, der jede Sekunde läuft (1000ms). Dort machst du eine Schleife durch alle Spieler, und ziehst eine Sekunde von der Jail Zeit des Spielers ab, wenn er eingesperrt ist. Dann zeigst du das Textdraw wieder aktualisiert über PlayerTextDrawSetString an.


    Dadurch kannst du dann auch den Timer weg lassen, den du beim Einsperren startest. Das Unjail Event kann exakt dann starten, wenn die Jail Zeit 0 ist. Das *1000 kannst du dann auch wieder weg machen.

    Das kannst du mit format machen:
    format(string, sizeof(string), "Du wurdest für %d Sekunden eingesperrt.", WantedLevel[pID] * 60);
    SendClientMessage(pID, COLOR_RED, string);


    Edit:
    Müsste doch auch eigentlich
    WantedLevel[pID]
    sein (habe es geändert), wenn ich den Ablauf richtig verstanden habe. Es bezieht sich ja auf das WantedLevel des Spielers, der eingesperrt wird. Also ändere das auch beim Timer.

    1. Medic kann /d chat nicht lesen

    Ein Medic kann den /d Chat nur lesen, wenn die Nachricht von einem Medic kommt, nicht von einem Polizist.



    2. Jede Fraktion kann /f Chat von jeder anderen lesen

    Nur Medic und Polizei können den Chat gemeinsam lesen.



    3. /f für Medic funktioniert nicht

    Was heißt es funktioniert nicht? Was passiert bzw. passiert nicht?



    4. /f bei Hitman (Fraktion 3) braucht man ein manchmal ein Funkgerät

    if(SpielerDaten[playerid][pFunkgeraet] == 0 || fv != -1 && fVehicle[fv][vehFraktion] == SpielerDaten[playerid][pFraktion])return SendClientMessage(playerid, GRAU, "Du hast kein Funkgerät mit oder sitzt in keinem Fraktionsfahrzeug!");
    Diese Zeile muss aus der Schleife raus und unter Zeile 10 im Befehl eingefügt werden.



    PS:
    Dieser Thread ist eigentlich für kleine Scripting Fragen gedacht.
    Bitte öffne für Fragen deiner Art nächstes mal einen separaten Thread.

    Ich hab die String Var´s so abgespeichert wie du beim Beispiel den Spielernamen auch speicherst.

    Das passt dann auch so, den Name lade ich im Beispiel aber nicht aus der Datenbank, sondern fülle ihn mit GetPlayerName, daher ist im Beispiel kein Auslesen eines Strings drin.



    Wofür ist Null da?

    Das sagt aus, dass der Wert der Spalte leer (NULL) sein darf.

    Super!
    Kein Problem, dafür der Thread ja da. :)


    Bei Strings, die in Variablen geladen werden, hinter denen ein enum steht, muss die Länge explizit angegeben werden (http://wiki.sa-mp.com/wiki/MySQL/R40#cache_get_value_name).
    cache_get_value_name(i, "hDiscription", HouseInfo[i][hDiscription]);
    zu:
    cache_get_value_name(i, "hDiscription", HouseInfo[i][hDiscription], MAX_PLAYER_NAME);


    Gleiches also auch bei hOwner.