Kleiner Bug, wie beheben ?

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
  • Hey Breadis,


    Habe das Problem:


    Habe eine Klassenauswahl gemacht, für einen Battlefield SAMP Server.


    Wenn man rechte Maustaste drückt, kommt man eine Klasse nach rechts.
    Wenn man linke drückt, andersrum.


    Das Problem ist:
    Wenn ich rechte maustaste drücke, wird die Variable von 4 auf 5 gesetzt.


    Moment, irgendwie doch falsch^^


    Jedenfalls, wenn ich KLasse 1 bin, drücke ich 2x nach rechts, bzw. rechte maustaste, dann bin ich Klasse 3.
    Wenn ich dann linke einmal drücke, komme ich auf Klasse 4
    und wenn ich nochmal linke drücke geht es erst wieder zurück, also 3, 2, 1 etc.


    Wie beheben ?


    if(newkeys == KEY_HANDBRAKE)
    {
    if(ChooseClass[playerid] == 1)
    {
    ChooseClass[playerid] = 2;
    new string[1250];
    format(string, sizeof(string), "~r~2 ~w~Class");
    TextDrawSetString(CCClass[playerid], string);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid, 34, 1);
    SetPlayerAmmo(playerid, 34, 10);
    format(string, sizeof(string), "~r~Waffen: ~w~M4, Desert Eagle, Smoke Grenades~n~~b~Extras: ~w~Kann nicht auf der Minimap gesehen werden, spawnt mit vollem Level + 20 Armour~n~~g~Info: ~w~Gut gegen Infanterien und Bodentrupps.");
    TextDrawSetString(CCInfos[playerid], string);
    }
    else if(ChooseClass[playerid] == 2)
    {
    ChooseClass[playerid] = 3;
    new string[1250];
    format(string, sizeof(string), "~g~3 ~w~Class");
    TextDrawSetString(CCClass[playerid], string);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid, 31, 1);
    SetPlayerAmmo(playerid, 31, 1);
    format(string, sizeof(string), "~r~Waffen: ~w~M4, Desert Eagle, Smoke Grenades~n~~b~Extras: ~w~Kann nicht auf der Minimap gesehen werden, spawnt mit vollem Level + 20 Armour~n~~g~Info: ~w~Gut gegen Infanterien und Bodentrupps.");
    TextDrawSetString(CCInfos[playerid], string);
    }
    else if(ChooseClass[playerid] == 3)
    {
    ChooseClass[playerid] = 4;
    new string[1250];
    format(string, sizeof(string), "~g~4 ~w~Class");
    TextDrawSetString(CCClass[playerid], string);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid, 31, 1);
    SetPlayerAmmo(playerid, 31, 10);
    format(string, sizeof(string), "~r~Waffen: ~w~M4, Desert Eagle, Smoke Grenades~n~~b~Extras: ~w~Kann nicht auf der Minimap gesehen werden, spawnt mit vollem Level + 20 Armour~n~~g~Info: ~w~Gut gegen Infanterien und Bodentrupps.");
    TextDrawSetString(CCInfos[playerid], string);
    }
    else if(ChooseClass[playerid] == 4)
    {
    ChooseClass[playerid] = 5;
    new string[1250];
    format(string, sizeof(string), "~g~5 ~w~Class");
    TextDrawSetString(CCClass[playerid], string);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid, 31, 1);
    SetPlayerAmmo(playerid, 31, 10);
    format(string, sizeof(string), "~r~Waffen: ~w~M4, Desert Eagle, Smoke Grenades~n~~b~Extras: ~w~Kann nicht auf der Minimap gesehen werden, spawnt mit vollem Level + 20 Armour~n~~g~Info: ~w~Gut gegen Infanterien und Bodentrupps.");
    TextDrawSetString(CCInfos[playerid], string);
    }
    else if(ChooseClass[playerid] == 5)
    {
    ChooseClass[playerid] = 6;
    new string[1250];
    format(string, sizeof(string), "~g~6 ~w~Class");
    TextDrawSetString(CCClass[playerid], string);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid, 31, 1);
    SetPlayerAmmo(playerid, 31, 10);
    format(string, sizeof(string), "~r~Waffen: ~w~M4, Desert Eagle, Smoke Grenades~n~~b~Extras: ~w~Kann nicht auf der Minimap gesehen werden, spawnt mit vollem Level + 20 Armour~n~~g~Info: ~w~Gut gegen Infanterien und Bodentrupps.");
    TextDrawSetString(CCInfos[playerid], string);
    }
    else if(ChooseClass[playerid] == 6)
    {
    ChooseClass[playerid] = 1;
    new string[1250];
    format(string, sizeof(string), "~w~1 ~w~Class");
    TextDrawSetString(CCClass[playerid], string);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid, 31, 1);
    SetPlayerAmmo(playerid, 31, 10);
    format(string, sizeof(string), "~r~Waffen: ~w~M4, Desert Eagle, Smoke Grenades~n~~b~Extras: ~w~Kann nicht auf der Minimap gesehen werden, spawnt mit vollem Level + 20 Armour~n~~g~Info: ~w~Gut gegen Infanterien und Bodentrupps.");
    TextDrawSetString(CCInfos[playerid], string);
    }
    }
    if(newkeys == KEY_FIRE)
    {
    if(ChooseClass[playerid] == 1)
    {
    ChooseClass[playerid] = 6;
    new string[1250];
    format(string, sizeof(string), "~r~2 ~w~Class");
    TextDrawSetString(CCClass[playerid], string);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid, 34, 1);
    SetPlayerAmmo(playerid, 34, 10);
    format(string, sizeof(string), "~r~Waffen: ~w~M4, Desert Eagle, Smoke Grenades~n~~b~Extras: ~w~Kann nicht auf der Minimap gesehen werden, spawnt mit vollem Level + 20 Armour~n~~g~Info: ~w~Gut gegen Infanterien und Bodentrupps.");
    TextDrawSetString(CCInfos[playerid], string);
    }
    else if(ChooseClass[playerid] == 2)
    {
    ChooseClass[playerid] = 1;
    new string[1250];
    format(string, sizeof(string), "~g~3 ~w~Class");
    TextDrawSetString(CCClass[playerid], string);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid, 31, 1);
    SetPlayerAmmo(playerid, 31, 1);
    format(string, sizeof(string), "~r~Waffen: ~w~M4, Desert Eagle, Smoke Grenades~n~~b~Extras: ~w~Kann nicht auf der Minimap gesehen werden, spawnt mit vollem Level + 20 Armour~n~~g~Info: ~w~Gut gegen Infanterien und Bodentrupps.");
    TextDrawSetString(CCInfos[playerid], string);
    }
    else if(ChooseClass[playerid] == 3)
    {
    ChooseClass[playerid] = 2;
    new string[1250];
    format(string, sizeof(string), "~g~4 ~w~Class");
    TextDrawSetString(CCClass[playerid], string);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid, 31, 1);
    SetPlayerAmmo(playerid, 31, 10);
    format(string, sizeof(string), "~r~Waffen: ~w~M4, Desert Eagle, Smoke Grenades~n~~b~Extras: ~w~Kann nicht auf der Minimap gesehen werden, spawnt mit vollem Level + 20 Armour~n~~g~Info: ~w~Gut gegen Infanterien und Bodentrupps.");
    TextDrawSetString(CCInfos[playerid], string);
    }
    else if(ChooseClass[playerid] == 4)
    {
    ChooseClass[playerid] = 3;
    new string[1250];
    format(string, sizeof(string), "~g~5 ~w~Class");
    TextDrawSetString(CCClass[playerid], string);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid, 31, 1);
    SetPlayerAmmo(playerid, 31, 10);
    format(string, sizeof(string), "~r~Waffen: ~w~M4, Desert Eagle, Smoke Grenades~n~~b~Extras: ~w~Kann nicht auf der Minimap gesehen werden, spawnt mit vollem Level + 20 Armour~n~~g~Info: ~w~Gut gegen Infanterien und Bodentrupps.");
    TextDrawSetString(CCInfos[playerid], string);
    }
    else if(ChooseClass[playerid] == 5)
    {
    ChooseClass[playerid] = 4;
    new string[1250];
    format(string, sizeof(string), "~g~6 ~w~Class");
    TextDrawSetString(CCClass[playerid], string);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid, 31, 1);
    SetPlayerAmmo(playerid, 31, 10);
    format(string, sizeof(string), "~r~Waffen: ~w~M4, Desert Eagle, Smoke Grenades~n~~b~Extras: ~w~Kann nicht auf der Minimap gesehen werden, spawnt mit vollem Level + 20 Armour~n~~g~Info: ~w~Gut gegen Infanterien und Bodentrupps.");
    TextDrawSetString(CCInfos[playerid], string);
    }
    else if(ChooseClass[playerid] == 6)
    {
    ChooseClass[playerid] = 5;
    new string[1250];
    format(string, sizeof(string), "~w~1 ~w~Class");
    TextDrawSetString(CCClass[playerid], string);
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid, 31, 1);
    SetPlayerAmmo(playerid, 31, 10);
    format(string, sizeof(string), "~r~Waffen: ~w~M4, Desert Eagle, Smoke Grenades~n~~b~Extras: ~w~Kann nicht auf der Minimap gesehen werden, spawnt mit vollem Level + 20 Armour~n~~g~Info: ~w~Gut gegen Infanterien und Bodentrupps.");
    TextDrawSetString(CCInfos[playerid], string);
    }
    }


    MfG
    Me

  • Was du da hast geht auch viel einfacher.


    if(newkeys == KEY_HANDBRAKE) {
    var++; // Denn du gehst nach rechts
    }else if(newkeys == KEY_FIRE) {
    var--;// Denn du gehst nach Links
    }
    // Falls var < 1 ist, dann ist var jetzt 6
    // Falls var > 6 ist, dann ist var jetzt 1


    // Jetzt zeigst du die Klasse erst an! Dann brauchst du nicht selber manuell von 6 auf 5, von 5 auf 4 oder von 4 auf 5 die var setzen
    if( var == 1 ) { ... }
    else if( var == 2 ) { ... }
    // usw

  • Und an welcher stelle soll ich dann diese If Abfrage reintun ?
    Also die mit var == Variable ?
    Unter die Abfrage mit dem jeweiligen Key ?
    also:


    if(newkeys == KEY_FIRE)
    {
    var--;
    //hier die If Abfrage und bei KEY_HANDBRAKE dann ? ALso einfach nach var--; bzw. var++; ?
    }


    MfG
    Me

  • Das ist nur n pseudo-code, bei dir gibt es doch gar nicht "var". var steht für Variable, wäre in deinem Fall "ChooseClass[]". Wann du abfragen sollst steht auch im Pseudocode. Nämlich nachde du die Variable verringert ( -- ) oder erhöht ( ++ ) hast. In deinem jetztigen Code gibt es jeden Fall doppelt,je nachdem ob er vorher links oder rechts klickt. Im Endeffekt kannst du aber auch den Fall nur 1x abdecken und vorher prüfen ob links oder rechts geklickt wurde.