OnPlayerKeyStateChange Problem..

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
  • public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if (newkeys == KEY_CROUCH)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, -461.6102,-399.9878,15.4470) || IsPlayerInRangeOfPoint(playerid, 5.0, -462.3371,-392.3457,16.0813))
    {
    MoveObject(tor_1_1,-462.283203125, -396.0244140625, 22.504844665527,2.0);
    MoveObject(tor_1_2,-462.283203125, -396.0244140625, 22.504844665527,2.0);
    SetTimer("tor_1",5000,0);
    }
    }
    else
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, -448.8922,-398.8117,15.8786) || IsPlayerInRangeOfPoint(playerid, 5.0, -449.9979,-393.2130,16.0813))
    {
    MoveObject(tor_2_1,-449.75784301758, -396.0732421875, 22.525371551514,2.0);
    MoveObject(tor_2_2,-449.75784301758, -396.0732421875, 22.525371551514,2.0);
    SetTimer("tor_2",5000,0);
    }
    }
    return 1;
    }


    also Tor 2 geht immer automatisch Auf zu ohne dass ich was drücke..


    und der Key geht nur wen ich in einem VEH bin..


    //e: ich habe noch dass prob..
    C:\Dokumente und Einstellungen\Haustein\Desktop\Marcel\GTA\filterscripts\garage.pwn(308) : error 017: undefined symbol "IsPlayerInRangeOfPoint"
    C:\Dokumente und Einstellungen\Haustein\Desktop\Marcel\GTA\filterscripts\garage.pwn(317) : error 017: undefined symbol "IsPlayerInRangeOfPoint"
    C:\Dokumente und Einstellungen\Haustein\Desktop\Marcel\GTA\filterscripts\garage.pwn(347) : error 017: undefined symbol "IsPlayerInRangeOfPoint"
    C:\Dokumente und Einstellungen\Haustein\Desktop\Marcel\GTA\filterscripts\garage.pwn(356) : error 017: undefined symbol "IsPlayerInRangeOfPoint"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.

    Einmal editiert, zuletzt von xuNsHiNe ()

  • okay und hier? ^^


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if (newkeys == KEY_CROUCH)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, -461.6102,-399.9878,15.4470) || IsPlayerInRangeOfPoint(playerid, 5.0, -462.3371,-392.3457,16.0813))
    {
    MoveObject(tor_1_1,-462.283203125, -396.0244140625, 22.504844665527,2.0);
    MoveObject(tor_1_2,-462.283203125, -396.0244140625, 22.504844665527,2.0);
    SetTimer("tor_1",5000,0);
    }
    }
    else
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, -448.8922,-398.8117,15.8786) || IsPlayerInRangeOfPoint(playerid, 5.0, -449.9979,-393.2130,16.0813))
    {
    MoveObject(tor_2_1,-449.75784301758, -396.0732421875, 22.525371551514,2.0);
    MoveObject(tor_2_2,-449.75784301758, -396.0732421875, 22.525371551514,2.0);
    SetTimer("tor_2",5000,0);
    }
    }
    return 1;
    }




    also Tor 2 geht immer automatisch Auf zu ohne dass ich was drücke..


    und der Key geht nur wen ich in einem VEH bin..


    lg Marci

  • Jo wenn du zu Fuss bist ist das ein andere KEY!
    Da Samp wieder mal was komischgemacht oder ist Srtandart!


    Ixh habe auch ein Tor das soll eigentlich mit Pfeiltaste nach vorne aufgehen geht es auch und nun wenn ich laufe geht es mit sprinten auf o.o xD

  • Kurzer, informier Du dich mal:


    http://wiki.sa-mp.com/wiki/OnPlayerKeyStateChange

    Zitat

    How NOT to check for a key


    Lets presume that you want to detect when a player presses their FIRE button, the obvious code would be:


    if (newkeys == KEY_FIRE)


    Zitat

    How to check for a key


    So, if the variable can contain multiple keys at once, how do you check for just a single one? The answer is bit masking. Each key has it's own bit in the variable (some keys have the same bit, but they are onfoot/incar keys, so can never be pressed at the same time anyway) and you need to check for just that single bit:


    if (newkeys & KEY_FIRE)

  • es geht mit ==(wenn auch schlecht) und schick mir keine Links die du dir eh nicht zu ende angeschaut hast und durchgelesen hast


    Zitat

    This code may even work in your testing, but it is wrong


    es ist mir nie vorgekommen , dass es nicht gegangen ist ...nur halt schlecht (1-3 mal drücken)
    edit:Zitat eingefügt

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • habe auch nie was anderes behauptet , oder ? Und wo ist hier eine Halbwahrheit habe sogar geschrieben , dass es einen Unterschied gibt wollte aber nicht genauer drauf eingehen .
    und jetzt b2t:


    Mach dir am besten SendClientMessage rein und schau halt wann was passiert


    edit: @Portgas sollte aber so auch gehen ... ist aber egal ^^ hast schon recht dass er lieber gleich & benutzen sollte habe deine Aussage falsch interpretiert


    edit2:verbessert

    2 Mal editiert, zuletzt von zabus ()

  • habe auch nie was anderes behauptet , oder ? Und wo ist hier eine Halbwahrheit habe sogar geschrieben , dass es einen Unterschied gibt wollte aber nicht genauer drauf eingehen .


    Ja es gibt einen Unterschied: Und zwar das "==" schlicht falsch ist.
    Und wenn er seine Keys mit & überprüft sollte es funktionieren.

  • mh ich habe es jetzt so gemacht..


    forward tor_1();
    public tor_1()
    {
    if(tor_1_status == 1)
    {
    MoveObject(tor_1_1, -462.283203125,-396.0244140625,15.817977905273,2.0);//Hier kommen eure Coords hin wo das Tor geschlossen ist!
    MoveObject(tor_1_2, -462.283203125,-396.0244140625,19.153314590454,2.0);//Hier kommen eure Coords hin wo das Tor geschlossen ist!
    tor_1_status = 0;
    }
    return 1;
    }


    forward tor_2();
    public tor_2()
    {
    if(tor_2_status == 1)
    {
    MoveObject(tor_2_1, -449.7373046875,-396.0244140625,19.153314590454,2.0);//Hier kommen eure Coords hin wo das Tor geschlossen ist!
    MoveObject(tor_2_2, -449.7373046875,-396.0244140625,15.817977905273,2.0);//Hier kommen eure Coords hin wo das Tor geschlossen ist!
    tor_2_status = 0;
    }
    return 1;
    }


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if (newkeys & KEY_FIRE)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, -461.6102,-399.9878,15.4470) || IsPlayerInRangeOfPoint(playerid, 5.0, -462.3371,-392.3457,16.0813))
    {
    MoveObject(tor_1_1,-462.283203125, -396.0244140625, 22.504844665527,2.0); // Die Kords, wo das tor sein soll wenns offen ist
    MoveObject(tor_1_2,-462.283203125, -396.0244140625, 22.504844665527,2.0);
    SetTimer("tor_1",5000,0);//Der Timer wird gestartet sobald der CMD verwendet wird!5000 ist die Zeit in Ms!
    tor_1_status = 1;
    }
    }
    else
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, -448.8922,-398.8117,15.8786) || IsPlayerInRangeOfPoint(playerid, 5.0, -449.9979,-393.2130,16.0813))
    {
    MoveObject(tor_2_1,-449.75784301758, -396.0732421875, 22.525371551514,2.0); // Die Kords, wo das tor sein soll wenns offen ist
    MoveObject(tor_2_2,-449.75784301758, -396.0732421875, 22.525371551514,2.0);
    SetTimer("tor_2",5000,0);//Der Timer wird gestartet sobald der CMD verwendet wird!5000 ist die Zeit in Ms!
    }
    }
    return 1;
    }


    aber Tor 2 öffnet sich automatisch aber ich drücke nix..


  • public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if (newkeys & KEY_FIRE)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, -461.6102,-399.9878,15.4470) || IsPlayerInRangeOfPoint(playerid, 5.0, -462.3371,-392.3457,16.0813))
    {
    MoveObject(tor_1_1,-462.283203125, -396.0244140625, 22.504844665527,2.0); // Die Kords, wo das tor sein soll wenns offen ist
    MoveObject(tor_1_2,-462.283203125, -396.0244140625, 22.504844665527,2.0);
    SetTimer("tor_1",5000,0);//Der Timer wird gestartet sobald der CMD verwendet wird!5000 ist die Zeit in Ms!
    tor_1_status = 1;
    }
    else if(IsPlayerInRangeOfPoint(playerid, 5.0, -448.8922,-398.8117,15.8786) || IsPlayerInRangeOfPoint(playerid, 5.0, -449.9979,-393.2130,16.0813))
    {
    MoveObject(tor_2_1,-449.75784301758, -396.0732421875, 22.525371551514,2.0); // Die Kords, wo das tor sein soll wenns offen ist
    MoveObject(tor_2_2,-449.75784301758, -396.0732421875, 22.525371551514,2.0);
    SetTimer("tor_2",5000,0);//Der Timer wird gestartet sobald der CMD verwendet wird!5000 ist die Zeit in Ms!
    }
    }
    return 1;
    }

  • mh und in demfall hier


    forward tor_1();
    public tor_1()
    {
    if(tor_1_status == 1)
    {
    MoveObject(tor_1_1, -462.283203125,-396.0244140625,15.817977905273,2.0);//Hier kommen eure Coords hin wo das Tor geschlossen ist!
    MoveObject(tor_1_2, -462.283203125,-396.0244140625,19.153314590454,2.0);//Hier kommen eure Coords hin wo das Tor geschlossen ist!
    tor_1_status = 0;
    }
    return 1;
    }


    forward tor_2();
    public tor_2()
    {
    if(tor_2_status == 1)
    {
    MoveObject(tor_2_1, -449.7373046875,-396.0244140625,19.153314590454,2.0);//Hier kommen eure Coords hin wo das Tor geschlossen ist!
    MoveObject(tor_2_2, -449.7373046875,-396.0244140625,15.817977905273,2.0);//Hier kommen eure Coords hin wo das Tor geschlossen ist!
    tor_2_status = 0;
    }
    return 1;
    }


    so oder?


    forward tor_1();
    public tor_1()
    {
    MoveObject(tor_1_1, -462.283203125,-396.0244140625,15.817977905273,2.0);//Hier kommen eure Coords hin wo das Tor geschlossen ist!
    MoveObject(tor_1_2, -462.283203125,-396.0244140625,19.153314590454,2.0);//Hier kommen eure Coords hin wo das Tor geschlossen ist!
    tor_1_status = 0;
    return 1;
    }


    forward tor_2();
    public tor_2()
    {
    MoveObject(tor_2_1, -449.7373046875,-396.0244140625,19.153314590454,2.0);//Hier kommen eure Coords hin wo das Tor geschlossen ist!
    MoveObject(tor_2_2, -449.7373046875,-396.0244140625,15.817977905273,2.0);//Hier kommen eure Coords hin wo das Tor geschlossen ist!
    return 1;
    }

  • Hi


    Nur zur erklärung: (ich finde es sollte immer eine dabei sein damit man weiß was man falsch gemacht hat:D)


    Du hast das else auf der gleichen höhe von der key-abfrage gemacht. Das geht nicht. Weil wenn du irgendein key drückst, es aber nicht der gewünschte in der abfrage ist, wird das in der else ausgeführt.


    Zu der Abfrage der Key´s folgendes:


    Die Key´s werden, ich sag mal als binärer code ausgegeben. Es gibt also für jede taste eine stelle. Mal ein Beispiel:


    0000


    1. Stelle ist jetzt mal KEY_FIRE. Die 2. KEY_CROUCH. Die 3. KEY_WALK. die 4. KEY_SECONDARY_ATTACK. Drückst du alle 4 tasaten wird


    1111


    ausgegeben.


    wenn du nur eine drückst ist dann logischerweise nur eine 1 im "Tastencode". die "==" abfrage ist dazu also nicht zu gebrauchen. & dagegen vergleicht sozusagen an der stelle des tastencodes der bestimmten taste ob dort eine 1 ist :)


    Wenn man sich jetzt mal die ID´s der Tasten im SAMP-Wiki anschaut sollte einem etwas auffallen. Es sind Quadratzahlen (heißt doch so oda? xD)
    Wandelt man sie in Dualzahlen um sieht das so aus:


    1 = 1
    2 = 10
    4 = 100
    8 = 1000
    .
    .
    .


    d.h. jeder Key hat eine eigene stelle im code.


    Ich hoffe ich konnte damit ein wenig wissen beisteuern :D


    MFG, Robdeflop®