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

« back to all changes in this revision

Viewing changes to src/engine/ePlayer.cpp

  • Committer: SwagTron
  • Date: 2019-03-24 05:43:34 UTC
  • Revision ID: swagtron-20190324054334-dhst2s4vcdpuehhd
Allowed show_position to be used made it more accurate. Was kind of odd the show_position definition wasnt also if debug, so the command was in the game just didnt do anything. 
Added /info to get general information about players. Stuff /players and /colors wouldnt show. Displays: Colored Name, Position, Direction, Used Rubber out of max, Speed, Spectating / Playing, Chatting, Sometimes Alive / Dead
Usage: /info - Returns own information
       /info playername - Returns that players name. (or more depending if the search word is found in more than one player) 
Fixed the /colors command a bit, also moved the function to a proper spot and made the output editable (added player_colors_text)

Show diffs side-by-side

added added

removed removed

Lines of Context:
3044
3044
}
3045
3045
#endif // DEDICATED
3046
3046
 
3047
 
//static bool se_silenceDead = false;
3048
 
//static tSettingItem<bool> se_silenceDeadConf("SILENCE_DEAD", se_silenceDead);
 
3047
static bool se_silenceDead = false;
 
3048
static tSettingItem<bool> se_silenceDeadConf("SILENCE_DEAD", se_silenceDead);
3049
3049
 
3050
3050
// help message printed out to whoever asks for it
3051
3051
static tString se_helpMessage("");
4647
4647
    return false;
4648
4648
}
4649
4649
 
4650
 
#ifndef DEDICATED
4651
 
static bool se_enableChatCommands = true;
4652
 
static tSettingItem<bool> se_enableChatCommandsConf( "CHAT_LOCAL_COMMANDS", se_enableChatCommands );
4653
 
 
4654
 
//our local commands (should always be lowercase)
4655
 
static char const * const se_localChatCommands[] = {
4656
 
    "/console",
4657
 
    "/listcolors",
4658
 
    "/colors",
4659
 
    "/info",
4660
 
    "/rgb"
4661
 
};
4662
 
#endif //if not dedicated
4663
 
 
4664
4650
void ePlayerNetID::Chat(const tString &s_orig)
4665
4651
{
4666
4652
    tColoredString s( s_orig );
4667
4653
    s.NetFilter();
4668
4654
 
4669
4655
#ifndef DEDICATED
4670
 
 
4671
 
    std::string chatString(s_orig);
4672
 
    std::istringstream passedString(chatString);
4673
 
 
4674
 
    tString command;
4675
 
 
4676
 
    passedString >> command;
4677
 
    tToLower( command );
4678
 
    tConfItemBase::EatWhitespace(passedString);
4679
 
 
4680
 
    bool isLocalCommand  = false;
4681
 
 
4682
 
    for (int i = sizeof(se_localChatCommands)/sizeof(se_localChatCommands[0]) - 1; i >= 0; --i)
4683
 
    {
4684
 
        if (command.StartsWith(se_localChatCommands[i]))
4685
 
        {
4686
 
            isLocalCommand = true;
4687
 
        }
4688
 
    }
4689
 
 
4690
 
    if (isLocalCommand && se_enableChatCommands && (s_orig.StartsWith("/")))
4691
 
    {
4692
 
        // check for direct console commands
4693
 
        if (command == "/console")
4694
 
        {
4695
 
            // direct commands are executed at owner level
4696
 
            tCurrentAccessLevel level( tAccessLevel_Owner, true );
4697
 
 
4698
 
            tString params("");
4699
 
            if (s_orig.StrPos(" ") == -1)
4700
 
                return;
4701
 
            else
4702
 
                params = s_orig.SubStr(s_orig.StrPos(" ") + 1);
4703
 
 
4704
 
            if ( tRecorder::IsPlayingBack() )
4705
 
            {
4706
 
                tConfItemBase::LoadPlayback();
4707
 
            }
4708
 
            else
4709
 
            {
4710
 
                std::stringstream s(static_cast< char const * >( params ) );
4711
 
                tConfItemBase::LoadAll(s);
4712
 
            }
4713
 
        }
4714
 
        //Short handle for grabbing player colors.
4715
 
        else if ((command == "/listcolors") || (command == "/colors"))
4716
 
        {
4717
 
            listPlayerColors(tString(s_orig));
4718
 
        }
4719
 
        //Short handle for grabbing player information.
4720
 
        else if (command == "/info")
4721
 
        {
4722
 
            listPlayerInfo(tString(s_orig));
4723
 
        }
4724
 
        //Short handle for changing our RGB values.
4725
 
        else if (command == "/rgb")
4726
 
        {
4727
 
            currentPlayerRGB(tString(s_orig));
4728
 
        }
 
4656
    // check for direct console commands
 
4657
    if( s_orig.StartsWith("/console") )
 
4658
    {
 
4659
        // direct commands are executed at owner level
 
4660
        tCurrentAccessLevel level( tAccessLevel_Owner, true );
 
4661
 
 
4662
        tString params("");
 
4663
        if (s_orig.StrPos(" ") == -1)
 
4664
            return;
 
4665
        else
 
4666
            params = s_orig.SubStr(s_orig.StrPos(" ") + 1);
 
4667
 
 
4668
        if ( tRecorder::IsPlayingBack() )
 
4669
        {
 
4670
            tConfItemBase::LoadPlayback();
 
4671
        }
 
4672
        else
 
4673
        {
 
4674
            std::stringstream s(static_cast< char const * >( params ) );
 
4675
            tConfItemBase::LoadAll(s);
 
4676
        }
 
4677
    }
 
4678
    //Not sure if this is a good short handle. Maybe something like /colors? Then introduce the basic list if no parameters are sent, but if a players name is sent give that players colors alone.
 
4679
    else if( s_orig.StartsWith("/listcolors") || s_orig.StartsWith("/colors") )
 
4680
    {
 
4681
        listPlayerColors();
 
4682
    }
 
4683
     else if(s_orig.StartsWith("/info") )
 
4684
    {
 
4685
        listPlayerInfo(tString(s_orig));
4729
4686
    }
4730
4687
    else
4731
 
#endif //if not dedicated
 
4688
#endif
4732
4689
    {
4733
4690
        tString retStr(s);
4734
4691
        if (eBannedWords::BadWordTrigger(this, retStr))
4737
4694
 
4738
4695
        switch (sn_GetNetState())
4739
4696
        {
4740
 
        case nCLIENT:
4741
 
        {
4742
 
            se_NewChatMessage( this, s )->BroadCast();
4743
 
            break;
4744
 
        }
4745
 
        case nSERVER:
4746
 
        {
4747
 
            se_BroadcastChat( this, s );
 
4697
            case nCLIENT:
 
4698
            {
 
4699
                se_NewChatMessage( this, s )->BroadCast();
 
4700
                break;
 
4701
            }
 
4702
            case nSERVER:
 
4703
            {
 
4704
                se_BroadcastChat( this, s );
4748
4705
 
4749
 
            // falling through on purpose
4750
 
            // break;
4751
 
        }
4752
 
        default:
4753
 
        {
4754
 
            se_DisplayChatLocally( this, s );
4755
 
            break;
4756
 
        }
 
4706
                // falling through on purpose
 
4707
                // break;
 
4708
            }
 
4709
            default:
 
4710
            {
 
4711
                se_DisplayChatLocally( this, s );
 
4712
                break;
 
4713
            }
4757
4714
        }
4758
4715
    }
4759
4716
}
4773
4730
}
4774
4731
*/
4775
4732
 
4776
 
// identify a local human player
 
4733
// identify a local player
4777
4734
ePlayerNetID *se_GetLocalPlayer()
4778
4735
{
4779
4736
    for(int i=0; i<se_PlayerNetIDs.Len(); i++)
4780
4737
    {
4781
4738
        ePlayerNetID *p = se_PlayerNetIDs[i];
4782
4739
 
4783
 
        if( p->Owner() == sn_myNetID && p->IsHuman())
 
4740
        if( p->Owner() == sn_myNetID )
4784
4741
            return p;
4785
4742
    }
4786
4743
    return NULL;
8119
8076
#endif
8120
8077
}
8121
8078
 
8122
 
// Should we hide the chat flag in tab when the user is silenced?
8123
 
static bool se_HideSilencedPlayersTabChatFlag    = true;
8124
 
static tSettingItem<bool> se_HideSilencedPlayersTabChatFlagConf("HIDE_SILENCED_SCOREBOARD_CHATFLAG", se_HideSilencedPlayersTabChatFlag  );
8125
8079
 
8126
8080
tString ePlayerNetID::Ranking( int MAX, bool cut )
8127
8081
{
8169
8123
            // line << tColoredString::ColorString( p->r/15.0, p->g/15.0, p->b/15.0 ) << name << tColoredString::ColorString(1,1,1);
8170
8124
 
8171
8125
            // however, using the streaming operator is a lot cleaner. The example is left, as it really can be usefull in some situations.
8172
 
            
8173
8126
            if (p->IsChatting())
8174
 
            {
8175
 
                // If the HIDE_SILENCED_SCOREBOARD_CHATFLAG command is set to false and the player is not silenced, show the tab chatflag.
8176
 
                if (!(se_HideSilencedPlayersTabChatFlag && p->AccessSilenced()))
8177
 
                {
8178
 
                    line << tColoredString::ColorString(-1, -1, -1) << "*";
8179
 
                }
8180
 
            }
 
8127
                line << tColoredString::ColorString(-1,-1,-1) << "*";
8181
8128
            line.SetPos(2, cut);
8182
8129
            line << *p;
8183
8130
            line.SetPos(19, false );
8459
8406
}
8460
8407
 
8461
8408
 
8462
 
static int se_RandomizeColorRange = 32;
8463
 
static tSettingItem<int> se_RandomizeColorRangeConf("PLAYER_RANDOM_COLOR_RANGE", se_RandomizeColorRange);
8464
 
 
8465
 
//This seems more random. Stolen from the old randomize color, but no comparing. 
 
8409
//This seems more random. Stolen from the old randomize color, but no comparing. Also another bonus, generates multi colored cycle / tails with the limit increase to 32.
8466
8410
static void se_RandomizeColor(ePlayer * l)
8467
8411
{
8468
8412
    int currentRGB[3];
8469
8413
    int newRGB[3];
8470
 
  
 
8414
    
8471
8415
    static tReproducibleRandomizer randomizer;
8472
8416
 
8473
8417
    for( int i = 2; i >= 0; --i )
8474
 
    {
8475
 
        currentRGB[i] = l->rgb[i];
8476
 
        newRGB[i] = randomizer.Get(se_RandomizeColorRange+1);
8477
 
    }
 
8418
        {
 
8419
            currentRGB[i] = l->rgb[i];
 
8420
            newRGB[i] = randomizer.Get(32);
 
8421
        }
8478
8422
 
8479
8423
    for( int i = 2; i >= 0; --i )
8480
 
    {
8481
 
        l->rgb[i] = newRGB[i];
8482
 
    }
 
8424
        {
 
8425
            l->rgb[i] = newRGB[i];
 
8426
        }
8483
8427
}
8484
8428
 
8485
 
 
8486
8429
//This didnt seem to be too random, more like picking a unique color no one else currently has.
8487
8430
static void se_UniqueColor( ePlayer * l, ePlayerNetID * p )
8488
8431
{
8531
8474
    }
8532
8475
}
8533
8476
 
8534
 
//Gather all the rgb colors and put them in a nice list.
8535
 
//Usage /colors with no parameters returns all players and their colors.
8536
 
//      /colors playername returns that specific players color or more depending if the search term is found in other player names
8537
 
void ePlayerNetID::listPlayerColors(tString s_orig)
 
8477
void ePlayerNetID::listPlayerColors()
8538
8478
{
8539
 
 
8540
 
    if (se_PlayerNetIDs.Len()>0)
 
8479
    con << tOutput("$player_colors_text");
 
8480
    for ( int i = 0; i <= se_PlayerNetIDs.Len()-1; i++ )
8541
8481
    {
8542
 
        if (s_orig.StrPos(" ") == -1)
8543
 
        {
8544
 
            con << tOutput("$player_colors_text");
8545
 
 
8546
 
            for ( int i = 0; i <= se_PlayerNetIDs.Len()-1; i++ )
8547
 
            {
8548
 
                ePlayerNetID *p=se_PlayerNetIDs(i);
8549
 
                con << (i+1) << ": " << gatherPlayerColor(p);
8550
 
 
8551
 
            }
8552
 
        }
8553
 
        else
8554
 
        {
8555
 
            tArray<tString> msgsExt = s_orig.Split(" ");
8556
 
            bool playerFound = false;
8557
 
 
8558
 
            con << tOutput("$player_colors_text");
8559
 
 
8560
 
            for(int i = 0; i < msgsExt.Len(); i++)
8561
 
            {
8562
 
                tString word = msgsExt[i];
8563
 
                int j = 0;
8564
 
                for ( int i = 0; i <= se_PlayerNetIDs.Len()-1; i++ )
8565
 
                {
8566
 
                    ePlayerNetID *p=se_PlayerNetIDs(i);
8567
 
 
8568
 
                    if (p->GetName().Filter().Contains(word.Filter()))
8569
 
                    {
8570
 
                        playerFound = true;
8571
 
 
8572
 
                        con << (j+1) << ": " << gatherPlayerColor(p);
8573
 
                        j++;
8574
 
 
8575
 
                    }
8576
 
                }
8577
 
            }
8578
 
            //No one found.
8579
 
            if (!playerFound)
8580
 
            {
8581
 
                con << tOutput("$player_not_found_text", msgsExt[1]);
8582
 
            }
8583
 
 
8584
 
        }
 
8482
        tColoredString listColors;
 
8483
        ePlayerNetID * otherPlayers = se_PlayerNetIDs(i);
 
8484
 
 
8485
        listColors << (i+1) << ": " << otherPlayers->GetColoredName() << "0xRESETT (" << otherPlayers->r << ", " << otherPlayers->g << ", " << otherPlayers->b << ")\n";
 
8486
 
 
8487
        con << listColors;
8585
8488
 
8586
8489
    }
8587
8490
}
8588
8491
 
8589
 
//Not sure if this is better / faster but better looking I guess?
8590
 
tColoredString ePlayerNetID::gatherPlayerColor(ePlayerNetID * p)
8591
 
{
8592
 
tColoredString listColors;
8593
 
return listColors << p->GetColoredName() << "0xRESETT (" << p->r << ", " << p->g << ", " << p->b << ")\n";
8594
 
}
8595
 
 
8596
 
 
8597
 
 
8598
8492
/*
8599
8493
List player information.
8600
8494
Displays:
8618
8512
        if (s_orig.StrPos(" ") == -1)
8619
8513
        {
8620
8514
            con << tOutput("$player_info_text");
8621
 
            ePlayerNetID *p = se_GetLocalPlayer();
8622
 
            con << gatherPlayerInfo(p);
 
8515
 
 
8516
            for(int i=0; i < se_PlayerNetIDs.Len(); i++)
 
8517
            {
 
8518
 
 
8519
                ePlayerNetID *p=se_PlayerNetIDs(i);
 
8520
                if (p->Owner() == sn_myNetID)
 
8521
                {
 
8522
                    con << gatherPlayerInfo(p);
 
8523
                }
 
8524
            }
8623
8525
        }
 
8526
 
 
8527
 
8624
8528
        else
8625
8529
        {
8626
8530
            tArray<tString> msgsExt = s_orig.Split(" ");
8627
8531
            tArray<ePlayerNetID *> foundPlayers;
 
8532
 
8628
8533
            bool playerFound = false;
 
8534
 
8629
8535
            con << tOutput("$player_info_text");
 
8536
 
8630
8537
            for(int i = 0; i < msgsExt.Len(); i++)
8631
8538
            {
8632
8539
                tString word = msgsExt[i];
8644
8551
                    }
8645
8552
                }
8646
8553
            }
8647
 
 
 
8554
            //No one found.
8648
8555
            if (!playerFound)
8649
8556
            {
8650
 
                con << tOutput("$player_not_found_text", msgsExt[1]);
 
8557
                con << "No players found for "<< msgsExt[1] << ".\n";
8651
8558
            }
8652
8559
 
8653
8560
        }
8656
8563
}
8657
8564
 
8658
8565
 
8659
 
 
 
8566
// Gather all the player information and return it in a tColorString object.
8660
8567
tColoredString ePlayerNetID::gatherPlayerInfo(ePlayerNetID * p)
8661
8568
{
8662
8569
    tColoredString listinfo;
8666
8573
    listinfo << "Status: ";
8667
8574
    (p->IsHuman()) ? listinfo << "Human" : listinfo << "Bot";
8668
8575
 
8669
 
    //Oddly IsSpectating returned some confusing results.
 
8576
 
 
8577
 
 
8578
    //Oddly IsSpectating caused some confusing status.
8670
8579
    (!p->CurrentTeam()) ? listinfo << ", Spectating" : listinfo << ", Playing";
8671
8580
 
8672
8581
    //Are we chatting / out of focus? Calculating the time worked for our local player but didnt work too well for players who joined before us.
8696
8605
    return listinfo << "\n";
8697
8606
}
8698
8607
 
8699
 
// Allow us to change our current RGB easily.
8700
 
// Usage: /rgb with no parameters displays current rgb.
8701
 
//        /rgb 15 3 3 Would set player 1's RGB to R15 G3 B3. 
8702
 
//        /rgb unique gives all players unique colors.
8703
 
//        /rgb random gives all players random colors.
8704
 
//        /rgb 2 15 3 3 Will change player 2's colors to 15 3 3. 
8705
 
void ePlayerNetID::currentPlayerRGB(tString s_orig)
8706
 
{
8707
 
    if (s_orig.StrPos(" ") == -1)
8708
 
    {
8709
 
        con << tOutput("$player_colors_current_text");
8710
 
        for(int i=0; i<MAX_PLAYERS; ++i )
8711
 
        {
8712
 
            bool in_game=ePlayer::PlayerIsInGame(i);
8713
 
            ePlayer *me=ePlayer::PlayerConfig(i);
8714
 
            tASSERT(me);
8715
 
            tCONTROLLED_PTR(ePlayerNetID) &p=me->netPlayer;
8716
 
            if (bool(p) && in_game)
8717
 
            {
8718
 
                tColoredString listColors;
8719
 
                listColors << p->GetColoredName() << "0xRESETT (" << ePlayer::PlayerConfig(i)->rgb[0] << ", " << ePlayer::PlayerConfig(i)->rgb[1] << ", " << ePlayer::PlayerConfig(i)->rgb[2] << ")\n";
8720
 
                con << listColors;
8721
 
            }
8722
 
        }
8723
 
    }
8724
 
    else
8725
 
    {
8726
 
        tArray<tString> passedString = s_orig.Split(" ");
8727
 
        bool correctParameters = false;
8728
 
        bool random = false;
8729
 
        bool unique = false;
8730
 
        int ourID = 0;
8731
 
 
8732
 
        if (passedString[1] == "random")
8733
 
        {
8734
 
            correctParameters = true;
8735
 
            random = true;
8736
 
 
8737
 
            //For now everyone gets random colors.
8738
 
            for(int i=0; i<MAX_PLAYERS; ++i )
8739
 
            {
8740
 
                bool in_game = ePlayer::PlayerIsInGame(i);
8741
 
                ePlayer *me = ePlayer::PlayerConfig(i);
8742
 
                tASSERT(me);
8743
 
                tCONTROLLED_PTR(ePlayerNetID) &p=me->netPlayer;
8744
 
 
8745
 
                if (bool(p) && in_game)
8746
 
                {
8747
 
                    se_RandomizeColor(me);
8748
 
                }
8749
 
            }
8750
 
 
8751
 
        }
8752
 
        else if(passedString[1] == "unique")
8753
 
        {
8754
 
            correctParameters = true;
8755
 
            unique = true;
8756
 
            //Also everyone gets unique colors if sent.
8757
 
            for(int i=0; i<MAX_PLAYERS; ++i )
8758
 
            {
8759
 
                bool in_game=ePlayer::PlayerIsInGame(i);
8760
 
                ePlayer *me=ePlayer::PlayerConfig(i);
8761
 
                tASSERT(me);
8762
 
                tCONTROLLED_PTR(ePlayerNetID) &p=me->netPlayer;
8763
 
 
8764
 
                if (bool(p) && in_game)
8765
 
                {
8766
 
                    se_UniqueColor(me,p);
8767
 
                }
8768
 
            }
8769
 
        }
8770
 
 
8771
 
        //Not really checking if the strings passed parameters are numbers, but if someone did /rgb asd asd asd it would just make it 0 0 0.
8772
 
        else if (passedString.Len() >= 4 && !(random || unique ))
8773
 
        {
8774
 
            //Guess we must be ID 0?
8775
 
            if (passedString.Len() == 4)
8776
 
            {
8777
 
                correctParameters = true;
8778
 
 
8779
 
                unsigned short r = (unsigned short) strtoul(passedString[1], NULL, 0);
8780
 
                unsigned short g = (unsigned short) strtoul(passedString[2], NULL, 0);
8781
 
                unsigned short b = (unsigned short) strtoul(passedString[3], NULL, 0);
8782
 
                
8783
 
                ePlayer::PlayerConfig(0)->rgb[0] = r;
8784
 
                ePlayer::PlayerConfig(0)->rgb[1] = g;
8785
 
                ePlayer::PlayerConfig(0)->rgb[2] = b;
8786
 
 
8787
 
            }
8788
 
            else if (passedString.Len() == 5)
8789
 
            {
8790
 
                ourID = (unsigned short) strtoul(passedString[1], NULL, 0);
8791
 
                if ((ourID <= MAX_PLAYERS) && (ourID > 0))
8792
 
                {
8793
 
                    correctParameters = true;
8794
 
 
8795
 
                    bool in_game=ePlayer::PlayerIsInGame(ourID-1);
8796
 
                    ePlayer *me=ePlayer::PlayerConfig(ourID-1);
8797
 
 
8798
 
                    unsigned short r = (unsigned short) strtoul(passedString[2], NULL, 0);
8799
 
                    unsigned short g = (unsigned short) strtoul(passedString[3], NULL, 0);
8800
 
                    unsigned short b = (unsigned short) strtoul(passedString[4], NULL, 0);
8801
 
 
8802
 
                    ePlayer::PlayerConfig(ourID-1)->rgb[0] = r;
8803
 
                    ePlayer::PlayerConfig(ourID-1)->rgb[1] = g;
8804
 
                    ePlayer::PlayerConfig(ourID-1)->rgb[2] = b;
8805
 
                }
8806
 
            }
8807
 
        }
8808
 
 
8809
 
        // If the correct parameters are passed, display the changes.
8810
 
        if (correctParameters)
8811
 
        {
8812
 
            con << tOutput("$player_colors_current_text");
8813
 
 
8814
 
            for(int i=0; i<MAX_PLAYERS; ++i )
8815
 
            {
8816
 
                bool in_game=ePlayer::PlayerIsInGame(i);
8817
 
                ePlayer *me=ePlayer::PlayerConfig(i);
8818
 
                tASSERT(me);
8819
 
                tCONTROLLED_PTR(ePlayerNetID) &p=me->netPlayer;
8820
 
                if (bool(p) && in_game)
8821
 
                {   tColoredString listColors;
8822
 
                    listColors << i+1 << ": " << p->GetColoredName() << "0xRESETT (" << ePlayer::PlayerConfig(i)->rgb[0] << ", " << ePlayer::PlayerConfig(i)->rgb[1] << ", " << ePlayer::PlayerConfig(i)->rgb[2] << ")\n";
8823
 
                    con << listColors;
8824
 
                }
8825
 
                if(!(bool(p) && in_game) && ourID-1 == i)
8826
 
                {
8827
 
                    con << tOutput("$player_colors_changed_text", ourID, ePlayer::PlayerConfig(i)->rgb[0], ePlayer::PlayerConfig(i)->rgb[1], ePlayer::PlayerConfig(i)->rgb[2]);
8828
 
                }
8829
 
            }
8830
 
        }
8831
 
        else
8832
 
        {
8833
 
            con << tOutput("$player_colors_changed_usage_error");
8834
 
        }
8835
 
    }
8836
 
}
8837
 
 
8838
8608
 
8839
8609
 
8840
8610
 
10651
10421
 
10652
10422
static void Silence_conf(std::istream &s)
10653
10423
{
 
10424
    if ( se_NeedsServer( "SILENCE", s ) )
 
10425
    {
 
10426
        return;
 
10427
    }
 
10428
 
10654
10429
    ePlayerNetID * p = ReadPlayer( s );
10655
10430
    if ( p && !p->IsSilenced() )
10656
10431
    {
10657
 
#ifndef DEDICATED
10658
 
        if ( sn_GetNetState() == nCLIENT )
10659
 
            sn_ConsoleOut( tOutput( "$player_silenced_local", p->GetColoredName() ) );
10660
 
        else
10661
 
#endif
10662
 
            sn_ConsoleOut( tOutput( "$player_silenced", p->GetColoredName() ) );
 
10432
        sn_ConsoleOut( tOutput( "$player_silenced", p->GetColoredName() ) );
10663
10433
        p->SetSilenced( true );
10664
10434
    }
10665
10435
}
10669
10439
 
10670
10440
static void SilenceAll_conf(std::istream &s)
10671
10441
{
10672
 
    if (se_PlayerNetIDs.Len() > 0)
 
10442
    if ( se_NeedsServer( "SILENCE_ALL", s ) )
 
10443
    {
 
10444
        return;
 
10445
    }
 
10446
 
 
10447
    if (se_PlayerNetIDs.Len()>0)
10673
10448
    {
10674
10449
        int max = se_PlayerNetIDs.Len();
10675
 
        for (int i = 0; i < max; i++)
10676
 
        {
10677
 
            ePlayerNetID *p = se_PlayerNetIDs(i);
10678
 
 
10679
 
            #ifndef DEDICATED
10680
 
            if ((sn_GetNetState() == nCLIENT) && (p && !p->IsSilenced()) && ((p->Owner() != ::sn_myNetID)))
10681
 
            {
10682
 
                p->SetSilenced(true);
10683
 
            }
10684
 
            else
10685
 
            #endif
10686
 
            {
10687
 
                if ((sn_GetNetState() == nSERVER) && (p && !p->IsSilenced()))
10688
 
                {
10689
 
                    p->SetSilenced(true);
10690
 
                }
10691
 
            }
10692
 
        }
10693
 
        #ifndef DEDICATED
10694
 
        if (sn_GetNetState() == nCLIENT)
10695
 
        {
10696
 
            sn_ConsoleOut(tOutput("$player_silenced_all_local"));
10697
 
        }
10698
 
        #endif
10699
 
        if (sn_GetNetState() == nSERVER)
10700
 
        {
10701
 
            sn_ConsoleOut(tOutput("$player_silenced_all"));
10702
 
        }
 
10450
        for(int i=0; i<max; i++)
 
10451
        {
 
10452
            ePlayerNetID *p=se_PlayerNetIDs(i);
 
10453
            if ( p && !p->IsSilenced() )
 
10454
            {
 
10455
                p->SetSilenced( true );
 
10456
            }
 
10457
        }
 
10458
        sn_ConsoleOut( tOutput( "$player_silenced_all") );
10703
10459
    }
10704
10460
}
10705
10461
 
10706
 
 
10707
10462
static tConfItemFunc silenceall_conf("SILENCE_ALL",&SilenceAll_conf);
10708
10463
static tAccessLevelSetter se_silenceallConfLevel( silenceall_conf, tAccessLevel_Moderator );
10709
10464
 
10710
10465
static void Voice_conf(std::istream &s)
10711
10466
{
 
10467
    if ( se_NeedsServer( "VOICE", s ) || se_NeedsServer( "UNSILENCE", s ))
 
10468
    {
 
10469
        return;
 
10470
    }
 
10471
 
10712
10472
    ePlayerNetID * p = ReadPlayer( s );
10713
10473
    if ( p && p->IsSilenced() )
10714
10474
    {
10715
 
#ifndef DEDICATED
10716
 
        if ( sn_GetNetState() == nCLIENT )
10717
 
            sn_ConsoleOut( tOutput( "$player_voiced_local", p->GetColoredName() ) );
10718
 
        else
10719
 
#endif
10720
 
            sn_ConsoleOut( tOutput( "$player_voiced", p->GetColoredName() ) );
 
10475
        sn_ConsoleOut( tOutput( "$player_voiced", p->GetColoredName() ) );
10721
10476
        p->SetSilenced( false );
10722
10477
    }
10723
10478
}
10729
10484
 
10730
10485
static void VoiceAll(std::istream &s)
10731
10486
{
 
10487
    if ( se_NeedsServer( "VOICE_ALL", s ) || se_NeedsServer( "UNSILENCE_ALL", s ))
 
10488
    {
 
10489
        return;
 
10490
    }
10732
10491
    if (se_PlayerNetIDs.Len()>0)
10733
10492
    {
10734
10493
        int max = se_PlayerNetIDs.Len();
10740
10499
                p->SetSilenced( false );
10741
10500
            }
10742
10501
        }
10743
 
 
10744
 
        #ifndef DEDICATED
10745
 
        if ( sn_GetNetState() == nCLIENT )
10746
 
            sn_ConsoleOut( tOutput( "$player_voiced_all_local") );
10747
 
        else
10748
 
#endif
10749
10502
        sn_ConsoleOut( tOutput( "$player_voiced_all") );
10750
10503
    }
10751
10504
}