Beiträge von Piranha

    Wer das Problem (dass man nach der Registrierung gefreezt ist) wirklich dauerhaft lösen will, sollte folgende Änderungen im Script vornehmen:


    Also in Zeile 6413:
    ShowPlayerDialog(playerid, 40, DIALOG_STYLE_MSGBOX, "",tutorial[tid][0][tutext], "Weiter","Weiter");
    und in Zeile 24709:
    ShowPlayerDialog(playerid, 40, DIALOG_STYLE_MSGBOX, "",tutorial[tuid][page][tutext], "Weiter","Weiter");
    bei den beiden doppelten Anführungszeichen entweder ein Leerzeichen zwischen die Anführungszeichen machen oder einen gewünschten Text einfügen, der für alle Dialoge des Tutorials dann angezeigt wird.


    Mit freundlichen Grüßen,
    Piranha.

    Mehrere Bedingungen packt man in eine if-Abfrage und verknüpft die Bedingungen dann mit logischen Operatoren.
    Du hast jedoch zwei if-Abfragen erstellt und die if-Abfragen (mit dem logischen Oder) verknüpft.
    Also: Nur eine if-Abfrage erstellen und darin die zwei Bedingungen verknüpfen.


    Ich hoffe, dass der Unterschied deutlich wird; wusste es jetzt nicht besser zu erklären... ^^
    So sollte es dann richtig aussehen:
    if (GetPVarInt(playerid, "Fahrstunde") != 1 || GetPVarInt(playerid, "Fraktion") != 3)

    format(Jahrgang,sizeof(Jahrgang),"%s.%s.%s",DateInfo[0],DateInfo[1],DateInfo[2]);
    Ohne strval, da sonst die Strings in Integer umgewandelt werden würden, du aber Platzhalter für Strings verwendest.


    Oder alternativ mit strval (und Platzhaltern für Integer statt Strings):
    format(Jahrgang,sizeof(Jahrgang),"%i.%i.%i",strval(DateInfo[0]),strval(DateInfo[1]),strval(DateInfo[2]));

    Ist wie beschrieben nichts besonderes und relativ schlicht gehalten. Wer ein simples System für Errungenschaften braucht, welches die
    Errungenschaften nicht speichert, für den wird es wohl eine hilfreiche Include sein, mit der er sich ein wenig Arbeit ersparen kann.
    Die Textdraws könnten aber schöner gestaltet sein, denn so würde ich lieber einen GameText verwenden, da ich dann keine Probleme mit den Textdraws habe (Textdraw-Limit etc).


    Die Textdraws 0-2 für jeden Spieler einzeln zu erstellen ist immer noch überflüssig, da der
    Text von diesen Textdraws doch für jeden Spieler gleich bleibt.
    Das wäre nochmals Sparpotential. Denn statt 2500 Textdraws hätte man nur noch 1003 Textdraws (solange MAX_PLAYERS 500 beträgt).


    BTW: Im Beispiel für eine mögliche Anwendung ist ein kleiner Fehler drin.
    Der gestorbene Spieler würde dort die Errungenschaft fürs Töten bekommen.

    und mit den code hat es nichts zu tun du musst deinen windows bildschirmauflösung so umändern das es raufpasst

    Man sollte seinen CSS-Code schon so angepasst haben, dass es bei möglichst vielen Benutzern richtig angezeigt wird, unabhängig davon, wie hoch die Auflösung der Benutzer oder welchen Browser die Benutzer verwenden.
    Denn du willst ja, dass möglichst viele Benutzer die Seite verwenden können.


    Wenn die Seite nur bei einer bestimmten Bildschirmauflösung richtig angezeigt wird, erfüllt die Seite/der CSS-Code nicht ihren/seinen Zweck.


    Im Internet Explorer (9) ist die Darstellung übrigens noch schlimmer... und sollte daher dringends angepasst werden.

    Chrome traue ich eine derartige Funktion aber zu.

    Für Chrome:
    Einfach in die Addresszeile die URL ( wiki.sa-mp.com ) eintippen und danach ein Leerzeichen machen.
    Dann einfach den Suchbegriff eingeben, nachdem man in der SA-MP Wiki suchen will.


    So einfach gehts. ;)


    // Edit:
    Wer es noch kürzer haben will, wie mit dem Schlüsselwort ("samp"), der geht unter Optionen -> Grundeinstellungen -> Suchmaschinen verwalten.
    Dort nach wiki.sa-mp.com suchen und in der mittleren Zeile das gewünschte Schlüsselwort eingeben.
    Sollte wiki.sa-mp.com nicht in der Liste der Suchmaschinen stehen, dann kann man ganz unten die Seite auch noch selbst hinzufügen.



    // Edit 2:
    Gerade erst aufgefallen, dass es mit Chrome genau so wie mit dem Firefox geht. ^^
    Rechtsklick auf Suchfeld -> Als Suchmaschine hinzufügen -> In der mittleren Zeile das Suchkürzel anpassen

    @Draheera:

    Also in Zeile 6413:
    ShowPlayerDialog(playerid, 40, DIALOG_STYLE_MSGBOX, "",tutorial[tid][0][tutext], "Weiter","Weiter");
    und in Zeile 24709:
    ShowPlayerDialog(playerid, 40, DIALOG_STYLE_MSGBOX, "",tutorial[tuid][page][tutext], "Weiter","Weiter");
    "bei den beiden doppelten Anführungszeichen entweder ein Leerzeichen zwischen die Anführungszeichen machen oder einen gewünschten Text einfügen, der für alle Dialoge des Tutorials dann angezeigt wird."


    Nur wenige Beiträge über deinem.

    Habe es mir nochmal neu runtergeladen, weil meine "Version" schon den Fehler behoben hatte.
    Der Fehler ist nicht nur in Zeile #6413, sondern auch in Zeile #24709. Musste ich gerade feststellen.



    Also in Zeile 6413:
    ShowPlayerDialog(playerid, 40, DIALOG_STYLE_MSGBOX, "",tutorial[tid][0][tutext], "Weiter","Weiter");
    und in Zeile 24709:
    ShowPlayerDialog(playerid, 40, DIALOG_STYLE_MSGBOX, "",tutorial[tuid][page][tutext], "Weiter","Weiter");
    "bei den beiden doppelten Anführungszeichen entweder ein Leerzeichen zwischen die Anführungszeichen machen oder einen gewünschten Text einfügen, der für alle Dialoge des Tutorials dann angezeigt wird."

    Wieso fügst du "strlen(tmp)" bei format ein?
    Du willst doch den eingegebenen Text ausgegeben haben und nicht die Länge. Zumal es bei der Länge dann auch %i sein müsste.


    Und wofür ist die Abfrage, ob der Spieler auf dem Server ist (IsPlayerConnected) ?
    Um den Befehl einzugeben, muss er sich auch auf dem Server befinden. ;)


    if(strcmp(cmd, "/fwgov", true) == 0)
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GRAD1, "Benutze: /fwgov [Text]");
    return 1;
    }
    if(PlayerInfo[playerid][pLeader] == 22)
    {
    SendClientMessageToAll(COLOR_RED, "|___________ Feuerwehr Zentrale ___________|");
    new stringfw[256];
    format(stringfw, sizeof(stringfw), "%s", tmp);
    SendClientMessageToAll(COLOR_WHITE, stringfw);
    }
    return 1;
    }

    Wo hast du es eingefügt ?
    Der Code gehört natürlich außerhalb von jenen anderen Funktionen und darf nicht in einem public oder sonstigem stehen, weil es eine eigene Funktion ist.


    BTW: Solltest du die defines von Digidiligitia noch drinnen haben, dann lösch diese. ;)

    Erstmal muss die Funktion "strtok" überhaupt erstellt werden.
    Dafür ins Script folgendes einfügen:
    strtok(const string[], &index)
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
    index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    }


    Unter OnPlayerCommandText dann noch folgendes einfügen:
    new cmd[128], idx;
    cmd = strtok(cmdtext, idx);
    Damit wäre das Thema strtok schon mal abgeschlossen (hier gibt es das nochmal zum nachlesen (Englisch)).


    Jetzt den Befehl noch etwas umbauen:
    if(strcmp(cmd, "/freeze", true)==0)
    {
    if(IsPlayerAnAdmin(playerid,2))
    {
    new tmp[128],tmpstring[64]; // die Zeichenkette tmpstring muss vor ihrer Benutzung erstellt werden, die Größe 64 sollte für die Zeichenkette reichen (23 Zeichen Text + 2 Namen mit je maximal 20 Zeichen)
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, 0xFF0019FF, "Benutze: /freeze [ID]");
    return 1;
    }
    new pid = strval(tmp);
    TogglePlayerControllable(pid,0);
    format(tmpstring,sizeof(tmpstring),"%s wurde von %s eingefroren",PlayerName(pid),PlayerName(playerid));
    SendClientMessageToAll(0x00CDFFFF,tmpstring);
    }
    return 1;
    }

    Der Dialogstil "DIALOG_STYLE_PASSWORD" ist erst in der Version 0.3d RC2 dazugekommen.
    Also entweder eine Version von 0.3d RC2 aufwärts draufspielen oder "DIALOG_STYLE_PASSWORD" in "DIALOG_STYLE_INPUT" umändern.


    Letzteres würde bewirken, dass die Eingabe in Klartext angezeigt wird, da "DIALOG_STYLE_PASSWORD" die Eingabe verdeckt.
    Ansonsten würde alles gleich bleiben.

    Da du den Spieler beim Betreten eines Burger-Shot's ja in eine virtuelle Welt setzt, kannst du eine Abfrage der virtuellen Welt zur Abfrage der Position hinzufügen, um zu überprüfen, in welchem Burger Shot
    der Spieler sich wirklich befindet und den Spieler dann entsprechend an die richtige Position setzen.


    Dabei muss also jeder in diesem Fall Burger Shot eine andere virtuelle Welt 'besitzen'.


    In der Praxis kann das bei deinem Code dann so aussehen:
    //Burger Shot
    //Nord eingang
    if(IsPlayerInRangeOfPoint(playerid,1.0,1199.2136,-918.3740,43.1218))
    {
    SetPlayerPos(playerid,364.0744,-74.4609,1001.5078);
    SetPlayerFacingAngle(playerid,302.1245);
    SetPlayerInterior(playerid,10);
    SetPlayerVirtualWorld(playerid,0);
    }
    //Nord Ausgang
    if(IsPlayerInRangeOfPoint(playerid,1.0,363.5795,-74.5731,1001.5078) && GetPlayerVirtualWorld(playerid) == 0)
    {
    SetPlayerPos(playerid,1199.2112,-919.2182,43.1154);
    SetPlayerFacingAngle(playerid,182.0906);
    SetPlayerInterior(playerid,0);
    SetPlayerVirtualWorld(playerid,0);
    }
    //Süd Eingang
    if(IsPlayerInRangeOfPoint(playerid,1.0,810.8580,-1616.2261,13.5469))
    {
    SetPlayerPos(playerid,364.0744,-74.4609,1001.5078);
    SetPlayerFacingAngle(playerid,302.1245);
    SetPlayerInterior(playerid,10);
    SetPlayerVirtualWorld(playerid,1);
    }
    //Süd Ausgang
    if(IsPlayerInRangeOfPoint(playerid,1.0,363.5795,-74.5731,1001.5078) && GetPlayerVirtualWorld(playerid) == 1)
    {
    SetPlayerPos(playerid,811.8393,-1616.0159,13.5469);
    SetPlayerFacingAngle(playerid,267.5374);
    SetPlayerInterior(playerid,0);
    SetPlayerVirtualWorld(playerid,0);
    }

    Der Spieler muss ebenfalls in der nähe sein und nicht nur die Kamera des Spielers, da von GTA : San Andreas aus alles in weiterer Entfernung unscharf angezeigt wird (um Leistung zu sparen).
    GTA : San Andreas geht dabei von der Position des Spielers aus und nicht von der Kamera-Position. ;)

    new sID, reason[128], string[128], string2[128], string3[128];
    Versuch es mal so. ;)
    Denn vorher war 'reason' ein Integer und sscanf hat versucht einen String darin abzuspeichern, was in einem Integer natürlich nicht möglich ist.