Beiträge von Goldkiller

    Wenn ihr es nicht wisst,wieso postet ihr dann überhaupt?


    SendClientMessage(playerid, COLOR_WASAUCHIMMER, "Dieser Text ist {FF0000}Rot {00FF00}Grün {0000FF}Blau");

    Der Text hat standartmäßig die Farbe,die du als 2Parameter angibst. Hast du aber zusätzlich im Text eingeschlossen von Klammern { } einen RGB Wert,so wird der nachfolgende Text mit dieser Farbe angezeigt.


    //Edit:
    Bild,

    Schon mal den Ansatz selber versucht?
    Ich schreib dir das nämlich definitiv nicht :).


    Hier hast du ein Beispiel aus Rivershell.pwn
    public OnPlayerRequestClass(playerid, classid)
    {
    //SetupPlayerForClassSelection(playerid); - Nicht beachten
    //SetPlayerTeamFromClass(playerid,classid); - Nicht beachten

    if(classid == 0 || classid == 1) {
    GameTextForPlayer(playerid,"~g~GREEN ~w~TEAM",1000,5);
    } else if(classid == 2 || classid == 3) {
    GameTextForPlayer(playerid,"~b~BLUE ~w~TEAM",1000,5);
    }

    return 1;
    }

    Du musst auch erst die Datei durchgehen und alle Texte erfassen und danach erst den Dialog anzeigen.


    new
    sBug[512];
    sBug[0] = '\0';
    while(fread(file,string,sizeof(string))) {
    format(sBug,sizeof(sBug),"%s%s\n",sBug,string); // Wir laden Alle Text in den String
    // Format:
    // BUG_Report1:
    // BUG_Report2:
    // BZG_Report3:
    // usw
    }
    fclose(ffile);
    ShowPlayerDialog(playerid,dialogid,dialogtyp,"Wünsche",sBug,"","");

    Starke Leistung es ihm so oft falsch vorzumachen.



    new Skins[5] =
    {
    101,
    102,
    105,
    187,
    199
    };


    public OnPlayerSpawn(playerid)
    {
    new randskin;
    randskin = Skins[ random(sizeof(Skins)) ] ; // Das hier habt ihr ALLE nicht richtig.Man muss doch auf den Index im Array zugreifen...
    SetPlayerSkin(playerid,randskin);
    return 1;
    }


    Nichts desto trotz war das ein Doppelpost von dir ...

    Wenn du Selbstmord machst ( Ich gehe mal davon aus,dass du so testest ) , kommt es zu einem Fehler.


    Angenommen du machst Selbstmord,ist die killerid INVALID_PLAYER_ID ( 0xFFFF ) 65536 .

    public OnPlayerDeath(playerid, killerid, reason)
    {
    Spieler[65536][Morde]+=1; // Du hast es bestimmt als Spieler[MAX_PLAYERS] definiert.MAX_PLAYERS ist aber definitiv kleiner als 65536 , weshalb wir ein Index out of Bounce haben.
    Spieler[0][Tode]+=1;
    return 1;
    }


    Versuch es mal mit einer Abfrage vorher,ob killerid INVALID_PLAYER_ID ist
    public OnPlayerDeath(playerid, killerid, reason)
    {
    if( killerid != INVALID_PLAYER_ID ) Spieler[killerid][Morde]+=1;
    Spieler[playerid][Tode]+=1;
    return 1;
    }

    Wieso machst du es nicht einfach, was Ich geschrieben habe?
    Hast ja auch nicht meine Frage beantwortet.Wenn du Hilfe hilfst,dann nimm sie auch :wacko: .


    Zitat

    Naja das Problem liegt glaub ich nicht an diesen Zeilen sondern von einem Mitglied meines Teams gibt es halt Problemme mit dem Account oder so weil er sieht immer der ID 0 zu.


    Bestimmt nicht daran. Das es nur bei ID 0 passiert,liegt wohl daran, dass du die SpectateID ( GettingCK ) nicht auf irgendetwas ungültiges ( in deinem Fall 999 ) setzt, denn alle Variablen werden mit 0 initialisiert sofern man keinen Wert angibt. Na , etwas aufgefallen ?

    Jo aber wie wärs wen man es so benutzt?:
    if(!strcmp(GESUCHTER_STRING,"noch",true,4))
    Dann würde es doch funktionieren..?


    Wäre auch möglich.Hab mich aber an StripNL gewöhnt, von daher brauch Ich beim Vergleichen der Strings nicht direkt die Länge zu beachten.


    @Halu,Niemals.
    SetPlayerPos(playerid,-25.7504,-139.9799,1003.5469);


    Z ist niemals richtig.1003 ist sehr sehr Hoch für die normale Welt.Kannst sicher sein,dass bis auf Mt Chilliad alle normalen Koordinanten für dich zwischen 0 und 150 liegen auf der Z Achse.


    Ist dir aber auch nicht aufgefallen,dass die Position von IsPlayerInRangeOfPoint die Gleiche ist,wie bei SetPlayerPos ?


    @[CR]xAdy,
    Hast du mal bei OnPlayerConnect GettingCK[playerid] = 999 gemacht ?. Also, beim connecten das spectaten auf ungültig stellen.
    if(GettingCK[playerid] != 999)

    Würde auch eher so abfragen.

    Du brauchst StripNewLine auch nicht unbedingt bzw StripNL.
    Es ist nur ein Fix für einen Fehler beim auslesen von Texten aus Datein. ( Weiss nicht mehr ob es Linux oder Windows war ).

    Zitat


    das
    ist
    noch
    ein
    test


    Angenommen du willst jetzt den Wert der 3 Zeile ( noch ) zurück geben. Du würdest dann fälschlicherweise "noch " bekommen ( Ja, mit den Leerzeichen ).
    Mit StripNewLine würde das nich passieren.Es entfernt jedes überflüssige Leerzeichen am Ende eines Strings.
    Das wäre zB wichtig,wenn du direkt mit Texten aus der Datei arbeiten willst.
    zB beim überprüfen ob ein Spielername in einer Datei steht.Denn strcmp() würde bei "noch " und "noch" sagen,dass wären unterschiedliche Strings.
    Ich verzichte daher nie auf StripNewLine. Hat mir früher ( SA:MP 0.2 ) nämlich viele Probleme gemacht ... :whistling:

    Direkt lesen kann man die nicht.Musst schon durch die Datei gehen,bis du selber in der X - Zeile angekommen bist.


    blubb.txt



    Konsole:

    Zitat

    [15:15:21] ReadLine("blubb.txt",3) 'für die readline funktion'


    stock ReadLine(const sFile[],iLine) {
    new
    File:fFile,
    _iLine = 0,
    _sTmp[128] = "-Datei nicht geöffnet";
    fFile = fopen(sFile,io_read);
    if(fFile) {
    while(fread(fFile,_sTmp,sizeof(_sTmp))) {
    StripNewLine( _sTmp ); // Ich hoffe du hast die Funktion,StripNewLine oder StripNL
    /* Willst du Leere Zeilen skippen ?
    if(!_sTmp[0]) {
    continue;
    }
    */
    _iLine++;
    if( _iLine == iLine ) {
    break;
    }
    }
    fclose(fFile);
    }
    return _sTmp;
    }

    Natürlich kannst mich verbessern, nur hat NeoPhoenix seinen Post gelöscht, weil er auch bemerkt hat,dass ihr es etwas umständlich macht :P.
    Auf die SitzID hab ich sowieso nicht geachtet,da Ich die Funktion ja auskommentiert habe.


    Man brauch hier weder SetPlayerPos, noch PutPlayerInVehicle. Das sind unnötige Funktionsaufrufe.
    Sitzt ein Spieler in einem Auto und das wird irgendwo hin teleportiert,wird der Spieler automatisch mitgenommen. Daher brauch man nicht die Spielerposition ändern und ihn wieder in das Auto setzen ( Da er es sowieso nie verlassen hat ). Beides funktioniert ja Fehlerfrei, nur ist dein's etwas langsamer :-X.

    Nein. Ich kann dir selber nicht sagen,ob es diese Escape Sequenzen nur bei PAWN gibt oder sie allgemein gültig.
    Eigentlich fällt es unter diese Kategorie:
    http://de.wikipedia.org/wiki/E…ndten_Programmiersprachen
    Jedenfalls,PAWNO ist nur der Editor mit dem du dein Script bearbeitest.Du könntest es auch mit dem normalen Notepad machen. Wäre es denn dann etwa auch Notepad Escape Sequenzen :P ? Die Sprache heisst PAWN,nicht PAWNO.


    Kannst es ja einfach PAWN oder SA:MP Escape Sequenzen nennen :/-


    Was mir gerade noch einfällt.Funktionieren all diese Escape Sequenzen auch Ingame im Chat oder den Dialog-Boxen ? Wäre vielleicht auch ganz nett wenn du erwähnst ob es nur in der Konsole sichtbare Zeichen ausgibt oder auch Ingame.Kann mir nämlich nicht vorstellen,dass das Venus / Mars Symbol Ingame sichtbar ist :-O

    if(strcmp(cmdtext,"/trans",true)==0)
    {
    new vehicle;
    vehicle = GetPlayerVehicleID(playerid);
    SetPlayerInterior(playerid,0);
    // SetPlayerPos(playerid,1041.8779,-1037.7628,31.7619); Diese Zeile gehört da nicht hin.Das teleportiert den Spieler ohne sein Auto,weshalb du immer neu einsteigen musst
    SetVehiclePos(vehicle,1041.8779,-1037.7628,31.7619);
    //PutPlayerInVehicle(playerid, vehicle, 1);
    SendClientMessage(playerid,0xFFF000FF,"Du bist nun am Trans Fender");
    GameTextForPlayer(playerid,"~w~Hier Kannst du dein ~g~Auto ~y~Tune",5000,5);
    return 1;
    }


    Solltest auch drauf achten,wenn du Spieler mit Fahrzeug in ein Anderes Interior setzen willst,musst du folgende Funktion noch benutzen.
    http://wiki.sa-mp.com/wiki/LinkVehicleToInterior