~swag/armagetronad/0.2.9-sty+ct+ap-fork

« back to all changes in this revision

Viewing changes to src/engine/ePlayer.cpp

Shuffling no longer uses tString::toInt so it can (and does) report input errors.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2873
2873
// team shuffling: reorders team formation
2874
2874
static void se_ChatShuffle( ePlayerNetID * p, std::istream & s )
2875
2875
{
2876
 
    tString msg;
2877
 
    msg.ReadLine( s );
2878
 
 
2879
2876
    // team position shuffling. Allow players to change their team setup.
2880
2877
    // syntax:
2881
2878
    // /teamshuffle: shuffles you all the way to the outside.
2889
2886
        return;
2890
2887
    }
2891
2888
    int len = p->CurrentTeam()->NumPlayers();
 
2889
   
 
2890
    // but read the target position as additional parameter
2892
2891
    int IDWish = len-1; // default to shuffle to the outside
2893
 
    
2894
 
                        // but read the target position as additional parameter
2895
 
    if (msg.Len() > 1)
 
2892
 
 
2893
    // peek at the first nonwhite character
 
2894
    std::ws( s );
 
2895
    char first = s.get();
 
2896
    if ( !s.eof() && !s.fail() )
2896
2897
    {
2897
 
        IDWish = IDNow;
2898
 
        if ( msg[0] == '+' )
2899
 
            IDWish += msg.toInt(1);
2900
 
        else if ( msg[0] == '-' )
2901
 
            IDWish -= msg.toInt(1);
 
2898
        s.unget();
 
2899
 
 
2900
        int shuffle = 0;
 
2901
        s >> shuffle;
 
2902
 
 
2903
        if ( s.fail() )
 
2904
        {
 
2905
            sn_ConsoleOut( tOutput("$player_shuffle_error"), p->Owner() );
 
2906
            return;
 
2907
        }
 
2908
 
 
2909
        if ( first == '+' || first == '-' )
 
2910
        {
 
2911
            IDWish = IDNow;
 
2912
            IDWish += shuffle;
 
2913
        }
2902
2914
        else
2903
 
            IDWish = msg.toInt()-1;
 
2915
        {
 
2916
            IDWish = shuffle-1;
 
2917
        }
2904
2918
    }
2905
2919
 
2906
2920
    if (IDWish < 0)