tag mismatch: verzweifelt

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Ohai.
    Kurzfassung:
    D:\Programme\SA-MP Server\gamemodes\Gamemode.pwn(92) : warning 213: tag mismatch
    D:\Programme\SA-MP Server\gamemodes\Gamemode.pwn(94) : warning 213: tag mismatch
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Warnings.


    Zeile 92:
    GetPlayerHealth(playerid,float:health);
    Zeile 94:
    if (float:health > 0)


    kompletter Code:
    if (strcmp("/kill", cmdtext, true, 10) == 0)
    {
    new float:health;
    GetPlayerHealth(playerid,float:health);

    if (float:health > 0)
    {
    SetPlayerHealth(playerid,0);
    SendClientMessage(playerid,COLOR_RED,"You committed suicide!");
    }
    else
    { SendClientMessage(playerid,COLOR_YELLOW,"You cannot suicide while you're dead!"); }
    return 1;
    }


    Auf gut Deutsch: Ich will abfragen ob der Spieler schon tot ist ( Also ob Lebenspunkte = 0 sind )
    und daraufhin ihn entweder Töten oder schreiben, dass es nicht geht, da er schon tot ist.


    Hoffe es war nicht zu kurz, will es so simple aber dennoch info-reich wie möglich halten. :)


    MfG

  • Float schreibt man groß, es ist dann nicht blau aber das tut nichts zur sache ;)

    //
    if (strcmp("/kill", cmdtext, true, 10) == 0)
    {
    new Float:health;
    GetPlayerHealth(playerid,health);
    if (health > 0)
    {
    SetPlayerHealth(playerid,0);
    SendClientMessage(playerid,COLOR_RED,"You committed suicide!");
    }
    else
    { SendClientMessage(playerid,COLOR_YELLOW,"You cannot suicide while you're dead!"); }
    return 1;
    }
    //Du brauchst auch eigentlich garnicht Abfragen wieviel Leben der hat:
    if (strcmp("/kill", cmdtext, true) == 0)
    {
    SetPlayerHealth(playerid,0.0);
    SendClientMessage(playerid,COLOR_RED,"You committed suicide!");
    return 1;
    }

  • Ahh, okay, also wie bei jeder Programmiersprache ist auch PAWN eine Rechtschreib-Whore ...
    Danke für die Hilfe, funktioniert jetzt endlich. :)


    /edit:
    Achja, ja, es stimmt dass ich nicht abfragen muss ob der Spieler schon tot ist, aber dann wäre es
    1. nur halb so viel spaßig,
    2. nicht so viel code. :P


    Außerdem mag ich es, wenn man eine Meldung bei einem CMD Fehler bekommt. :)


    /edit²:
    !!!
    Mir fiel gerade etwas auf - wenn ich /kill eingebe, nachdem ich /kill verwendet habe und ich dannach immernoch tot bin, dann kommt trotzdem noch der "You commited suicide!" Text.
    Ich habe sogar noch etwas zu der if abfrage hinzugefügt, hat aber nichts gebracht. Woran liegt das? Es ergibt keinen Sinn, warum der Text auch bei "Health ist gleich 0" noch aufpoppt.
    if (strcmp("/kill", cmdtext, true, 10) == 0)
    {
    new Float:health;
    GetPlayerHealth(playerid,health);

    if (health > 0 && health != 0)
    {
    SetPlayerHealth(playerid,0);
    SendClientMessage(playerid,COLOR_RED,"You committed suicide!");
    }
    else
    { SendClientMessage(playerid,COLOR_YELLOW,"You cannot suicide while you're dead!"); }
    return 1;
    }





    /edit³:
    Wow, soviele edits... eh, egal, also:
    Ich habe herrausgefunden woran es iegt, trotzdem noch nicht gelöst:
    Ich habe per Abfrage gefragt, wieviel HP der Spieler nach dem Tod hat, wärend er am Boden liegt.
    Überraschenderweiße 100, obwohl die HP anzeige auf 0 stehen zu scheint.


    Wie kann ich checken, ob der Spieler tot ist?
    Oder gibt es noch eine simplere Lösung auf die ich gerade nicht komme?


    Hier der Abfrage-Code, falls selbst DARAN etwas falsch sein sollte;
    [...]if (health > 0)
    {
    SetPlayerHealth(playerid,0);
    SendClientMessage(playerid,COLOR_RED,"You committed suicide!");
    // Hier der Abfrage Code
    new string[100];
    GetPlayerHealth(playerid,health);
    format(string, sizeof(string), "[SERVER] You have %f healthpoints after you died.", health);
    SendClientMessage(playerid,COLOR_YELLOW,string);
    }[...]

  • Mehrere Möglichkeiten:


    Du kannst die Auf-Dem-Boden-Lieg-Animation überprüfen (sicherlich am einfachsten), Eine Spielervariable zu erstellen, diese bei OnPlayerDeath auf 1 zusetzen und bei OnPlayerSpawn auf 0 zu setzen und entsprechend abzufragen oder bei GetPlayerState nach "PLAYER_STATE_WASTED" fragen, wobei ich mir beim letzten nicht hundertprozentig sicher bin.

  • Du wirst lachen, ich habe schon nach GetPlayerState gesucht, ( http://wiki.sa-mp.com/wiki/GetPlayerState ) wusste aber nicht, ob es damit auch geht ...
    Denke ich werde die Variabel-Version benutzen, Ich mag Variabeln. :3 Danke für den Tipp, werd's direkt mal ausprobieren :)


    /edit:
    Mmmmm...
    Wird aber nicht funktionieren, da die Variable ( "alive" in dem Fall ) bei JEDEM Spieler geändert wird. Kann man für jeden Spieler eine eigene "alive" Variable erstellen, ohne "alive1, alive2[...]" zu erstellen?

  • Entweder per array:


    new alive[MAX_PLAYERS];


    und dann per alive[playerid] drauf zugreifen (dabei aber darauf achten, dass du bei jedem Connecten die Variable auf 0 setzt) oder alternativ per PVar, das geht (wenn du es einmal verstanden hast) für solche Fälle meiner Meinung nach schneller, ich bin sicher du findest ein Tutorial dazu. :P

  • In der Zeit bin ich doch zur GetPlayerState gewechselt :D
    Selbe if-Abfrage, sieht bisjetzt so aus:
    new pState = GetPlayerState(playerid);
    if (pState == PLAYER_STATE_WASTED )


    Möchte aber noch abfragen, ob der Spieler überhaupt gespawnt ist, sodass man auch im Char-select-screen sich nicht töten kann.
    Habe schon auf der englischen Wiki nachgeschaut, finde nichts darüber. Denke wenn du mir damit nochmal kurz helfen kannst sollte es klappen, danke. :)

  • Besser wäre für jede Frage ein eigener Thread zwecks Übersichtlichkeit und einfacher Suche (Threadtitel daher präzise verfassen).


    Wie sieht denn deine Abrage genau aus? Poste am besten den gesamten /kill CMD ;)

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • ( Das Thema wäre ein weiterer Command, ein /ammo command mit dem man seiner momentan-ausgerrüstete Waffe Munition für bestimmtes Geld erwerben kann, aber ein simpler /ammo cmd ;) )
    Hier der Code vom /kill Command:
    if (strcmp("/kill", cmdtext, true, 10) == 0)
    {
    if(GetPlayerState(playerid)==PLAYER_STATE_WASTED)
    {
    SetPlayerHealth(playerid,0);
    SendClientMessage(playerid,COLOR_RED,"You committed suicide!");
    }else{
    SendClientMessage(playerid,COLOR_YELLOW,"You cannot suicide while you're dead!"); }
    return 1;
    }

  • Okay, wenns tatsächlich damit nicht geht wirds vermutlich an PLAYER_STATE_WASTED liegen, dass das nicht so funktioniert wie wir das wollen. ;)


    Vielleicht solltest du doch den PVar-Weg einschlagen, damit geht es garantiert so wie du möchtest. :)

  • Oder ich müsste damit leben. Ich werd mal schauen was ich darauß mache, bin ja nicht gerade lange dabei zu scripten, hehe.
    Na gut, denke das wars erstmal. Bist du dir sicher, dass ich den anderen command in einem extra-Thread machen soll?
    Ich habe schon einige gesehen die deswegen eine Verwarnung bekamen ...
    ( zur Info: war zwar schon lange als zuschauer da, habe mich aber erst heute registriert. :D )

  • Solange es sich um inhaltlich wirklich treffende Fragen handelt, der Threadtitel stimmt und es nicht soo wenig ist, dass es in den "Kleine Fragen - Sammelthread" kommen sollte, kannst du ohne Probleme nen neuen Thread aufmachen. ;)