KEY_FIRE Probleme ^^

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
  • was hier rann falsch ? igendwie klappts net :(


    if(newkeys == KEY_FIRE)
    {
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && KEY_FIRE)
    {
    Schuss[playerid] = 1;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && KEY_FIRE && Schuss[playerid] == 1)
    {
    Schuss[playerid] = 2;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && KEY_FIRE && Schuss[playerid] == 2)
    {
    Schuss[playerid] = 3;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && KEY_FIRE && Schuss[playerid] == 3)
    {
    Schuss[playerid] = 4;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && KEY_FIRE && Schuss[playerid] == 4)
    {
    Schuss[playerid] = 5;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && KEY_FIRE && Schuss[playerid] == 5)
    {
    Schuss[playerid] = 6;
    SendClientMessage(playerid, Grün, "Super gehe nun zum dem Computer.");
    }
    }// geht noch weiter


    //EDIT: Angepasst

    Einmal editiert, zuletzt von Quini ()


  • if(newkeys == KEY_FIRE)
    {
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) )
    {
    Schuss[playerid] = 1;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && Schuss[playerid] == 1)
    {
    Schuss[playerid] = 2;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && Schuss[playerid] == 2)
    {
    Schuss[playerid] = 3;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && Schuss[playerid] == 3)
    {
    Schuss[playerid] = 4;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && Schuss[playerid] == 4)
    {
    Schuss[playerid] = 5;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && Schuss[playerid] == 5)
    {
    Schuss[playerid] = 6;
    SendClientMessage(playerid, Grün, "Super gehe nun zum dem Computer.");
    }
    }// geht noch weiter


    Du fragst doch oben schon die Taste ab teste es mal so

    RFT

  • Muss das nicht so heißen? if(newkeys & KEY_FIRE) Weil im Sa-Mp Wiki steht, dass man so nach einem Key fragen soll

  • Muss nicht,es kann.Ist sowieso besser bei Keys,da es dort um Bits geht.
    Das zu erklären wäre zu viel,da es Viele nicht verstehen.
    Ich hab das >> hier << mal erklärt.




    #define PRESSED(%0) \
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
    // Ist von Y_Less
    // if(newkeys == KEY_FIRE) - Anstatt diese Zeile
    //
    if(PRESSED(KEY_FIRE))

  • Das schaffst du nicht alleine ?
    if(newkeys & KEY_FIRE)
    {
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && (Schuss[playerid] < 6))
    {
    Schuss[playerid]++;
    if(Schuss[playerid] == 6) {
    SendClientMessage(playerid, Grün, "Super gehe nun zum dem Computer.");
    }
    }
    }


  • if(newkeys & KEY_FIRE)
    {
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882))
    {
    Schuss[playerid] = 1;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && (Schuss[playerid] == 1))
    {
    Schuss[playerid] = 2;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && (Schuss[playerid] == 2))
    {
    Schuss[playerid] = 3;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && (Schuss[playerid] == 3))
    {
    Schuss[playerid] = 4;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && (Schuss[playerid] == 4))
    {
    Schuss[playerid] = 5;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && (Schuss[playerid] == 5))
    {
    Schuss[playerid] = 6;
    return 1;
    }
    if(PlayerToPoint(5.0,playerid,293.8557,-159.7837,1011.9882) && (Schuss[playerid] == 6))
    {
    SendClientMessage(playerid, Grün, "Super gehe nun zum dem Computer.");
    }
    }


    // Er soll einfach nur wenn er schiesst schuss hoch gehen igendwie tuht er dies net wieso?



    //Edit1: Bisll Gerichtet und sotiert

    2 Mal editiert, zuletzt von Quini ()

  • Hmm kann mir keiner mehr helfen :(?


    //EDIT: Habe grade nen test gemacht es liegt an key fire oder so weil ich bekomme noch net mal ne narricht habs so getestet


    oder liegt es am if playertopoint?

    Einmal editiert, zuletzt von Quini ()

  • Nein es liegt nicht am PlayerToPoint, sondern du hast es 1. in falscher Ordnung gescriptet und 2. bei deiner Methode gehört sich ein else if

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Wieso hast nicht das von mir ausprobiert ?

    #define PRESSED(%0) \
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
    //
    //if(newkeys & KEY_FIRE)
    if(PRESSED(KEY_FIRE))
    {
    printf("DBG: #1,Schuss: %d",Schuss[playerid]);
    if(IsPlayerInRangeOfPoint(playerid,5.0,293.8557,-159.7837,1011.9882) && (Schuss[playerid] < 6))
    {
    printf("DBG: #2");
    Schuss[playerid]++;
    if(Schuss[playerid] == 6) {
    printf("DBG: #3");
    SendClientMessage(playerid, Grün, "Super gehe nun zum dem Computer.");
    }
    }
    }
    Ist ja wohl defintiv einfacher gescriptet.Sollte es nicht gehen,haben wir ja die Debug-Informationen.


    Anstatt PlayerToPoint() würde Ich dir sowieso empfehlen IsPlayerInRangeOfPoint() zu benutzen,ist nähmlich eine native Funktion ;)


    #1. IsPlayerInRangeOfPoint angepasst
    #2. PRESSED() eingefügt

    3 Mal editiert, zuletzt von Goldkiller ()

  • Goldkiller, IsPlayerInRangeOfPoint hat ned die gleiche Parameterstruktur, editier es schnell ^^.


    Goldkiller: Ich war mir sicher Ich hätte es geändert :pinch:

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

    Einmal editiert, zuletzt von Goldkiller ()

  • Manchmal frag ich mich wirklich wieso die neuen nicht auf die "Profis" hören.
    Meistens posten sie das richtige, aber manche verwenden es einfach nicht.
    Am besten erklären wir nochmal alles genau...
    damit auch jeder Anfänger versteht das wir Ihnen nur helfen wollen.


    EDIT: Goldkiller aber wieso verwendest du nu nichtmehr PRESSED?

  • Gute Frage,mit PRESSED() ist es natürlich besser.Habs einfach weggelassen, weil Ich mir dachte er wird es sowieso nicht benutzen.Ich hatte auch noch Recht.


    Zitat

    Am besten erklären wir nochmal alles genau...
    damit auch jeder Anfänger versteht das wir Ihnen nur helfen wollen.


    Ich hoffe doch mal,dass das Ironie ist ;D. Die meisten lesen sich ja nicht die Grundlagen durch, die dann immer alle gleich mit zu erklären hat kaum einer Lust,Ich auch nicht.

  • Teilweise war es Ironie^.^


    Nun eine Frage von mir,
    um aber für die Kleine frage keinen Extra Thread zu eröffnen stelle ich sie hier.
    Was beudetet bei dem Pressed code die %0 in der Klammer? Irgendwie ein Parameter?
    Oder sowas?
    Desweiteren für was steht das / nach dem define?
    #define PRESSED(%0) /
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
    //

  • Okay.
    Das %0 ist sozusagen ein Parameter.Anstelle wo %0 im Define steht,wird dann an diese Stelle eingesetzt,was du an der Stelle von %0 als Parameter übergeben hast.Da dass ganze vom PreProzessor abgearbeitet wird,verändert sich der Code vorm kompilieren,je nachdem welchen Wert du als %0 Parameter übergibst.
    Hast du angenommen im Code:
    PRESSED(KEY_FIRE)
    wird durch den Pre-Prozessor daraus
    (((newkeys & (KEY_FIRE)) == (KEY_FIRE)) && ((oldkeys & (KEY_FIRE)) != (KEY_FIRE)))
    Da KEY_FIRE auch nur ein define ist,wird es in etwa so aussehen ( angenommen KEY_FIRE ist 512 ) :
    (((newkeys & (512)) == (512)) && ((oldkeys & (512)) != (K512)))
    Es gibt dazu auch seit kurzem ein Tutorial -> * Klick *


    Nun zum \ ,auch bekannt als Backslash (Ganz wichtig,kein normales / Slash ).
    Das Backslash ist dazu gut,um dem Kompiler zu sagen,dass der Code in der nächsten Zeile fortgeführt wird.
    Wäre dort kein Backslash,würde der Kompiler meckern.
    #define PRESSED(%0)
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
    Denn er wüsste nichts mit
    (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
    anzufangen.
    Kannst es ja mal in PAWNO ausprobieren, auch der Highlighter erkennt das Backslash in diesem Define und highlighted demnach die folgende Zeile ;).
    Man hätte es natürlich auch so machen können, Alles in eine Zeile.
    #define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
    Doch sieht es übersichtlicher aus mit einer neuen Zeile.


    Man kann Backslash auch in Strings benutzen,aber das kannst ja selber mal austesten :p.Müsste im groben so stimmen,ob es alles richtig ist weiss niemand x).