]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/mapvoting.qc
Fix #2701 "Unwanted random auto-join". This patch basically reverts 4941322
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / mapvoting.qc
index 65cbc3f93528fc9f08eafe560ffbd5d080e531cb..29640128c0abf575c8a8b43fa03cb81c5d044e9e 100644 (file)
@@ -760,9 +760,11 @@ int MapVote_MoveUp(int pos)
                imp = pos - mv_columns;
                if ( imp < 0 )
                {
-                       imp = floor(mv_num_maps/mv_columns)*mv_columns + pos % mv_columns;
-                       if ( imp >= mv_num_maps )
-                               imp -= mv_columns;
+                       int mv_rows = ceil(mv_num_maps / mv_columns);
+                       if (imp == -mv_columns) // pos == 0
+                               imp = mv_columns * mv_rows - 1;
+                       else
+                               imp = imp + mv_columns * mv_rows - 1;
                }
        }
        if ( !(mv_flags[imp] & GTV_AVAILABLE) && imp != mv_ownvote )
@@ -779,7 +781,12 @@ int MapVote_MoveDown(int pos)
        {
                imp = pos + mv_columns;
                if ( imp >= mv_num_maps )
-                       imp = imp % mv_columns;
+               {
+                       if ((imp % mv_columns) == mv_columns - 1)
+                               imp = 0;
+                       else
+                               imp = imp % mv_columns + 1;
+               }
        }
        if ( !(mv_flags[imp] & GTV_AVAILABLE) && imp != mv_ownvote )
                imp = MapVote_MoveDown(imp);
@@ -827,33 +834,34 @@ float MapVote_InputEvent(int bInputType, float nPrimary, float nSecondary)
                        first_digit = 0;
        }
 
+       // Key release events must be handled by the engine otherwise the on-press command such as +jump
+       // executed by pressing SPACE before entering the map voting screen won't be followed by the
+       // on-release command (-jump) on key release once entered the map voting screen, causing +jump
+       // to stay active even on the next map and automatically forcing the player to join
+       if (!key_pressed) return false;
+
        int imp = 0;
        switch(nPrimary)
        {
                case K_RIGHTARROW:
-                       if (!key_pressed) return true;
                        mv_selection_keyboard = 1;
                        mv_selection = MapVote_MoveRight(mv_selection);
                        return true;
                case K_LEFTARROW:
-                       if (!key_pressed) return true;
                        mv_selection_keyboard = 1;
                        mv_selection = MapVote_MoveLeft(mv_selection);
                        return true;
                case K_DOWNARROW:
-                       if (!key_pressed) return true;
                        mv_selection_keyboard = 1;
                        mv_selection = MapVote_MoveDown(mv_selection);
                        return true;
                case K_UPARROW:
-                       if (!key_pressed) return true;
                        mv_selection_keyboard = 1;
                        mv_selection = MapVote_MoveUp(mv_selection);
                        return true;
                case K_KP_ENTER:
                case K_ENTER:
                case K_SPACE:
-                       if (!key_pressed) return true;
                        if ( mv_selection_keyboard )
                                MapVote_SendChoice(mv_selection);
                        return true;
@@ -873,8 +881,6 @@ float MapVote_InputEvent(int bInputType, float nPrimary, float nSecondary)
        {
                if (!first_digit)
                {
-                       if (!key_pressed)
-                               return true;
                        first_digit = imp % 10;
                        return true;
                }
@@ -884,8 +890,6 @@ float MapVote_InputEvent(int bInputType, float nPrimary, float nSecondary)
 
        if (nPrimary == K_MOUSE1)
        {
-               if (!key_pressed)
-                       return true;
                mv_selection_keyboard = 0;
                mv_selection = mv_mouse_selection;
                if (mv_selection >= 0)
@@ -897,8 +901,6 @@ float MapVote_InputEvent(int bInputType, float nPrimary, float nSecondary)
 
        if (imp)
        {
-               if (!key_pressed)
-                       return true;
                if (imp <= mv_num_maps)
                        localcmd(strcat("\nimpulse ", ftos(imp), "\n"));
                return true;