Beiträge von Goldkiller

    Hast du dir den Wiki Eintrag gerade angeschaut ?
    Du brauchst dort kein format nutzen.Es macht nur die Arbeit von GetPVarString kaputt.


    format(str4, sizeof(str4), "%s", GetPVarString(pID, "ticket_text", str4, 100));
    Hier mal die Reihenfolge wie es abläuft:


    1. GetPVarString(pID, "ticket_text", str4, 100) -> in str4 steht jetzt der Text.Zum Beispiel: "Test"
    2. GetPVarString gibt die Länge des Textes wieder ( "Test" ) , also 4.
    Was also konkret zu diesem Ergebnis führt:
    format(str4,sizeof(str4),"%s", 4 );
    Das dass Quatsch ist,sollte dir klar sein. Da kann also gar kein Sinnvoller Text stehen.


    Es reicht völlig aus nur GetPVarString zu nutzen um den Text in die Variable str4 zu laden. Lediglich für str3 lohnt sich format.

    piohh hat da schon recht.
    Ich bezweifel dass es hier viele User im Forum gibt die selber tatsächlich Modden. Denn wer kann hier wirklich mit 3D-Programmen umgehen und Beispielsweise seine eigenen Modelle erstellen,texturieren und in GTA einfügen ( Fahrzeuge oder Objekte ) ?! Selbst wenn man nicht mit 3D-Programmen umgehen kann, Texturen austauschen wäre ja auch schon okay. Mappen wäre auch eine Kategorie oder das Coden. Gibt es denn überhaupt noch Interesse am Modding ? Denn so wie ich es sehe,ist die Modding-Szene in GTA SA mit der Zeit geschrumpft und die SA:MP Szene gewachsen ( Ich bekenne mich auch schuldig :p ). Die damals großen deutschen Foren die sich mit Modding rund um GTA beschäftigten sind nicht mehr wirklich produktiv. Ich rede nur von den Foren, keine Mods die einfach auf der Mainpage erscheinen.
    Ich weiss worum es geht, habe nämlich früher auch eher gemoddet als mich mit SA:MP beschäftigt. Dem ein oder anderen sollte piohh auch ein Begriff sein,sofern er sich bis vor paar Jahren auch mal mit Mods in GTA beschäftigt hatte. Man kann die Sektion gerne anlegen, ich bin mir aber ziemlich sicher dass dort kaum eigene Mods präsentiert werden. Sollte es nämlich so kommen,erfüllt die Sektion nicht ihren Zweck.


    Wo liegt dein Problem ?

    Darf ein PIN etwa nicht mi einer 0 beginnen ? Auch wäre
    if(pin < 9999)
    nicht richtig. Entweder <= 9999 oder < 10000 , wenn es nicht mit einer 0 beginnen darf. Ob 99999 ein gültiger PIN ist lässt sich streiten, falls ja , dann müsste auch random( 100000 ) sein,nicht random( 99999 ).
    Übrigens ist goto keine schöne Lösung. Do-while tut es auch:
    Pin() {
    new
    _pin;
    do {
    _pin = random( 100000 );
    }
    while( _pin < 10000 ) ;
    return _pin;
    }
    Komm ja ganz durcheinander mit den 0-en


    //Edit: Was geht denn mit dir ab. Löschst du jetzt jeden Inhalt deiner Posts? Du verstehst wohl nicht wofür ein Forum gut ist. Wo kommen wir denn hin wenn jeder so einen Quatsch macht 0o.

    Wie benutzt du was ? Whirlpool ? Dafür gibt es ein Plugin. Anleitung ist dabei.
    Rainbow Table ? Gar nicht.Was willst du denn damit.
    o.Ä ? Keine Ahnung. Du hast ja nicht genau gesagt worum es in deiner Frage geht.

    Dann zeig doch lieber mal wie du versuchst die Daten aus der Datenbank auszulesen:
    LoadPlayer(playerid); //Der Spieler wird "geladen", speich es werden seine Daten aus der Datenbank geholt und in variablen gespeichert um diese im Skript zu verwenden.

    Ist sicherer. Bei MD5 kannst Rainbow Tables benutzen. Necktrox meint bestimmt ein zustätzlichen "Salt" um das Passwort zu verschlüsseln.


    http://en.wikipedia.org/wiki/W…raphy%29#Whirlpool_hashes

    Zitat

    People incorporating Whirlpool will most likely use the most recent revision of Whirlpool; while there are no known security weaknesses in earlier versions of Whirlpool, the most recent revision has better hardware implementation efficiency characteristics, and is also likely to be more secure.

    Überladen kannst nicht. Das einzige was Ansatzweise mit Überladen zu vergleichen wäre , wären standardwerte bei Funktionen.
    bla( a , b = 1 , c[] = "c" ) { }
    Für Unterschiedliche Parameter-Anzahl kannst du ja einfach "verstecke" Befehle erstellen. Es gibt den Allg. Befehl der nur schaut welcher Unter-Befehl genutzt werden soll und leitet die Parameter dann weiter. Mit DCMD kann man die Befehle sogar wirklich verstecken für den direkten gebrauch.


    Ich hab mir das vor langer Zeit auch mal überlegt gehabt und einen kleinen Test angelegt.Hab es für dich bischen abgeändert. Du kannst ihn dir gerne mal ansehen:
    http://goldkiller.bplaced.net/filemanager/udsvmw.pwn

    Ich bin nicht der einzige der hier Werbungen freischaltet oder eben nicht freischaltet. Wenn mal schlechte dabei sind,dann wird die wohl Jemand genehmigt haben. Du kannst die im Nachhinein immernoch melden wenn sie deiner Meinung nach schlecht sind. Eventuell werden die ja nachträglich noch deaktiviert bzw gelöscht.


    Damit sich mal Jeder ein Bild von der Serverwerbung machen kann:



    Die Werbung ist nun mal schlecht. Da ist nichts zu sehen außer Text, der auch noch auffalend dick und groß ist.Du kannst ja gerne mal die Werbungen posten,die deiner Meinung nach schlechter sind als deine.


    //Edit: Bild ausgetauscht.

    Kommt drauf an wie dein Tacho aufgebaut ist.
    Du könntest mal ein Screenshot zeigen.


    Sollte die Tankanzeige nur als ZAHL den Tachostand angeben, dann könnte man es über die Einfärbung durch ~r~ , ~g~ usw mache:


    Pseudocode:
    if( Tank[vehicleid] <= 5 ) {
    string = "~r~%d",Tank[vehicleid] ;
    }else if( 5 < Tank[vehicleid] <= 15 ) {
    string = "~y~%d",Tank[vehicleid] ;
    }else if( Tank[vehicleid] > 15 ) {
    string = "~g~%d",Tank[vehicleid] ;
    }
    Ob du damit was anfangen kannst ?!

    Habe es ebend mit ",.." und ",..." probiert,habe keine Warnungen. Ist aber auch egal,da du sowieso bei OnPlayerConnect auf ungültig setzt.
    Ich poste aus gutem Grund keine fertigen Lösungen mehr ( , schon lange nicht mehr ) . Da habe Ich nichts von und erst recht nicht Derjenige der es benötigt. Verstehe auch nicht wieso es immernoch so viele User gibt,die Anderen die Lösung vorschreiben. So lernt man es nie selber.


    Zum Befehl:
    In der if() Abfrage kannst du jailplayer benutzen. Wozu hast du denn sonst die Variable ;) ?
    Vergiss auch nicht die Variable KilledBy auf ungültig zu setzen,wenn der Spieler in's Gefängnis gesteckt wurde.


    Zum Problem mit den Zonen:
    In der Schleife bei OnPlayerDeath hast du im else-Zweig ein return. Überleg mal ob es dort wirklich hin gehört. Denn zur Zeit wird die Funktion OnPlayerDeath bei dir beendet,wenn der Spieler sich nicht in der ersten NoDM-Zone befindet. Eventuell verpackst es auch in eine eigene Funktion, zB IsPlayerInNoDMZone() .

    Nicht ganz.
    new KilledBy[MAX_PLAYERS] = {INVALID_PLAYER_ID};
    Ich habe ",.." nicht ohne Grund bei mir im Quellcode gehabt. Damit werden alle Einträge mit INVALID_PLAYER_ID initialisiert. So wie du es jetzt hast,nur der mit dem Index 0.


    Zitat

    if(KilledBy[playerid] = jailplayer)
    oder wie :D?


    Das macht gar keinen Sinn.
    Denn auf der einen Seite wird jailplayer sowieso der Wert hinter KilledBy sein ( Habe extra die Variable genommen damit du es leichter verstehst ) und auf der Anderen Seite vergleicht man mit dem Doppeltem Gleichzeichen ( == ) .


    Zum Beispiel bei OnPlayerConnect solltest du den KilledBy Wert des Spielers auf ungültig festlegen. Dafür würde ich INVALID_PLAYER_ID nehmen.
    Bei dem Befehl abfragen,ob KilledBy INVALID_PLAYER_ID ist oder nicht. Ist es nicht INVALID_PLAYER_ID, so wurde er von einem Spieler getötet. Achtung, wurde der Befehl erfolgreich genutzt müssen wir KilledBy auf ungültig setzen. Sonst könnte man den Befehl beliebig oft wiederholen.
    Übrigens könntest du ein break setzen, wenn die Nachricht versenden wurde bei OnPlayerDeath

    Das habe ich doch geschrieben. Es ist doch leichter nur den eigenen Killer zu bestrafen als Alle Spieler,die eventuell Jemanden in einer NoDM-Zone getötet haben.
    Hier mal ein kleiner Denkanstoß:
    new KilledBy[MAX_PLAYERS] = {INVALID_PLAYER_ID,..}; // INVALID_PLAYER_ID für "ungültig"
    // OnPlayerDeath
    KilledBy[playerid] = killerid;
    // /punish
    new jailplayer;
    jailplayer = KilledBy[playerid];

    Was heisst denn "falsche Parameter"?
    new Reason;
    Da ist definitiv ein Fehler.Die Begründung sollte ein String sein.


    format(str, sizeof(str), "Officer %s hat dir %s Punkte ins Autoführerschein Strafregister eingetragen [Grund:%s]!", Officer, Anzahl, Reason);
    Die Anzahl ist kein String. Integers haben einen Anderen Platzhalter.Gilt auch für den Anderen Text.