Beiträge von Kaliber

    Früher im Forum gab es den [PWN] BBCode, der sofort den Code in der Pawn (oder C) Syntax angezeigt hat.


    Viele Tutorials etc (z.B. SQLite | Die alternative zu MySQL) sind immer noch so geschrieben, sehen aber heute scheiße aus deshalb.


    Meine Frage wäre nun, kann man das wieder einführen, dass der existiert uuund dann eben als C-Code interpretiert wird?


    Mit freundlichen Grüßen

    Euer Kalle

    Ja, kann gut sein, dass das dini gar nicht kann, da das = ein key Zeichen ist für dini ^^


    0PfMfYb.gif


    Ist wohl am Einfachsten, wenn du SQLite nutzt, da gibts die Probleme nicht und musst nicht erst eine MySQL Datenbank aufsetzen.

    Musst oben

    if( strcmp( key , "Teamspeak" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pTeamspeak] = strval( val ); }

    Das musst du so schreiben:


    C
    if( strcmp( key , "Teamspeak" , true ) == 0 ) { format(PlayerInfo[playerid][pTeamspeak],128,ini_GetValue( Data )); }

    und oben musst du:


    C
    format(var, 32, "Teamspeak=%s\n",PlayerInfo[playerid][pTeamspeak]);fwrite(hFile, var);

    schreiben.

    Das ist merkwürdig...mach den Server nochmal aus...schau dass das File 1:1 so aussieht, wie du es hier gepostet hattest und mach ihn nochmal an...


    Alsoo bei mir geht es, da liest er das genauso aus...


    Falls es nicht geht (was sein kann), das was ich damals geschrieben hatte ist nicht sonderlich Robust, musst du wohl auf deine dini Speichermethode zurückgreifen.

    Pack mal unter das Load ein:


    C
    printf("%s|%d|%d|%d",TeamSpeakInfo[playerid][playerUID],TeamSpeakInfo[playerid][accepted],TeamSpeakInfo[playerid][acceptcode],TeamSpeakInfo[playerid][playerClientid]);

    Wird das richtig ausgegeben?


    //Edit:


    Ahhh weil du vermutlich das Filterscript erst später lädst? Oder schon auf dem Server warst?


    C
    //Pack das mal zustäzlich unter OnFilterscriptInit
    for(new i=GetPlayerPoolSize(); i!=-1; i--) if(IsPlayerConnected(i)) Load(i,TeamSpeak,TeamSpeakInfo[i]);

    Hmm komisch, damals ging das noch.


    Naja, schreib es so:


    C
    //Dann unter OnPlayerDisconnect
    Save(playerid,_:TeamSpeak,TeamSpeakInfo[playerid]);
    
    //Unter OnPlayerConnect
    Load(playerid,_:TeamSpeak,TeamSpeakInfo[playerid]);

    Hier bietet sich evtl mein Easy-Save Include an: Easy Saving


    C
    //Oben in deinem Filterskript:
    //Halt den Pfad wo die Accounts gespeichert werden sollen angeben: (wichtig den Ordner ts_info in dem Beispiel erst in den scriptfiles erstellen!!!)
    #define PATH "ts_info/%s.ini"
    #include <k_save>
    
    //Dann unter OnPlayerDisconnect
    Save(playerid,TeamSpeak,TeamSpeakInfo[playerid]);
    
    //Unter OnPlayerConnect
    Load(playerid,TeamSpeak,TeamSpeakInfo[playerid]);


    Kannst doch ruhig while nutzen, da bedarf es doch kein for :)

    So zum Beispiel:


    PS: Die richtige Angel Animation ist ApplyAnimation(playerid,!"SAMP",!"FishingIdle",4.1,0,0,0,1,-1,1); Musst den Spieler dafür auch nicht freezen! Das wird über die Animation gemacht (so kann er sich nicht bewegen, aber die Kamera noch bewegen!).

    Ahoi, ich wollte fragen wie man den Befehl so schreibt dass man wenn man z.B. /kick eingibt dass man als Parameter auch den Namen des Spielers angeben kann.

    Einfach sscanf(params,"u",pID) verwenden, also das "u" sorgt dafür, dass sowohl Spielername, als auch playerid verwendet werden kann.


    sscanf sucht dann direkt, ob es einen Spieler mit diesem Namen gibt und übergibt die playerid von dem Spieler an pID (in diesem Beispiel).

    Kaliber Weißt du eventuell weiter?

    Na klar, sry, war den ganzen Tag unterwegs. Schaue nur ab und an am Handy vorbei, das darüber zu erklären ist aber nur mäßig spaßig.


    Also das kannst du einfach so machen:

    C
    new Float:x,Float:y,Float:a,veh=GetPlayerVehicleID(playerid);
    GetVehicleZAngle(veh,a);
    x = floatsin(-a,degrees)/2.0;
    y = floatcos(-a,degrees)/2.0;
    SetVehicleVelocity(veh,x,y,0);

    Je nachdem wie stark der Boost sein soll, kannst natürlich auch die /2.0 entfernen und *2.0 o.ä. machen ^^

    Jetzt habe die abfrage so allerdings funktioniert es nicht er führt die anmiation nicht aus,

    Lösche mal die Zeile aus der Funktion:


    if(!GetPlayerVehicleID(playerid))return 0;


    Musst lernen, was ein print-Debug ist. printe dir jeweils, was die Funktionen zurückgeben und schau, wo der Code hängen bleibt, dann weißt du was passiert.

    new i=strfind(text,word),j=i+strlen(word)-1; text[i++]='[';
    while(i<j){text[i]='F'[i++]} //Zeile die gemeint ist
    text[j]='];

    Was versuchst du denn damit zu erreichen? text wird später doch gar nicht mehr verwendet?!


    Aus diesem Grund kannst es eigentlich löschen.

    Ich denke ursprünglich sollte das wohl das Wort extrahieren, welches im Text erkannt wurde...


    Da kann man dann auch einfach direkt word ausgeben, da dies ja quasi das Wort ist, welches im Text gefunden wurde.


    Syntaktisch ist das was da steht halt komplett falsch.

    C
    text[i]='F'[i++] //Da fehlt das ;...da macht das 'F' keinen Sinn..das ist einfach Müll, was da steht :D
    
    text[j]=']; // Da fehlt das Ende von '

    Aber wie gesagt, lösch es einfach.