~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:
4678
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
4679
    else if( s_orig.StartsWith("/listcolors") || s_orig.StartsWith("/colors") )
4680
4680
    {
4681
 
        con << "Player Colors: \n";
4682
 
        se_listPlayerColors();
 
4681
        listPlayerColors();
 
4682
    }
 
4683
     else if(s_orig.StartsWith("/info") )
 
4684
    {
 
4685
        listPlayerInfo(tString(s_orig));
4683
4686
    }
4684
4687
    else
4685
4688
#endif
8471
8474
    }
8472
8475
}
8473
8476
 
8474
 
//Gather all the rgb colors and put them in a nice list.
8475
 
static void se_listPlayerColors()
 
8477
void ePlayerNetID::listPlayerColors()
8476
8478
{
8477
 
    tColoredString listColors;
8478
 
     for ( int i = 0; i <= se_PlayerNetIDs.Len()-1; i++ )
 
8479
    con << tOutput("$player_colors_text");
 
8480
    for ( int i = 0; i <= se_PlayerNetIDs.Len()-1; i++ )
8479
8481
    {
 
8482
        tColoredString listColors;
8480
8483
        ePlayerNetID * otherPlayers = se_PlayerNetIDs(i);
8481
8484
 
8482
 
 
8483
8485
        listColors << (i+1) << ": " << otherPlayers->GetColoredName() << "0xRESETT (" << otherPlayers->r << ", " << otherPlayers->g << ", " << otherPlayers->b << ")\n";
8484
 
     
 
8486
 
8485
8487
        con << listColors;
8486
8488
 
8487
 
        listColors  = "";
8488
 
 
8489
 
    }
8490
 
}
 
8489
    }
 
8490
}
 
8491
 
 
8492
/*
 
8493
List player information.
 
8494
Displays:
 
8495
Colored Name
 
8496
Position
 
8497
Direction
 
8498
Used Rubber out of max
 
8499
Speed
 
8500
Spectating / Playing
 
8501
Chatting
 
8502
Sometimes Alive / Dead
 
8503
Usage: /info - Returns own information
 
8504
       /info playername - Returns that players name. (or more depending if the search word is found in more than one player)
 
8505
*/
 
8506
 
 
8507
void ePlayerNetID::listPlayerInfo(tString s_orig)
 
8508
{
 
8509
 
 
8510
    if (se_PlayerNetIDs.Len()>0)
 
8511
    {
 
8512
        if (s_orig.StrPos(" ") == -1)
 
8513
        {
 
8514
            con << tOutput("$player_info_text");
 
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
            }
 
8525
        }
 
8526
 
 
8527
 
 
8528
        else
 
8529
        {
 
8530
            tArray<tString> msgsExt = s_orig.Split(" ");
 
8531
            tArray<ePlayerNetID *> foundPlayers;
 
8532
 
 
8533
            bool playerFound = false;
 
8534
 
 
8535
            con << tOutput("$player_info_text");
 
8536
 
 
8537
            for(int i = 0; i < msgsExt.Len(); i++)
 
8538
            {
 
8539
                tString word = msgsExt[i];
 
8540
 
 
8541
                for(int i=0; i < se_PlayerNetIDs.Len(); i++)
 
8542
                {
 
8543
                    ePlayerNetID *p=se_PlayerNetIDs(i);
 
8544
 
 
8545
                    if (p->GetName().Filter().Contains(word.Filter()))
 
8546
                    {
 
8547
                        playerFound = true;
 
8548
 
 
8549
                        con << gatherPlayerInfo(p);
 
8550
 
 
8551
                    }
 
8552
                }
 
8553
            }
 
8554
            //No one found.
 
8555
            if (!playerFound)
 
8556
            {
 
8557
                con << "No players found for "<< msgsExt[1] << ".\n";
 
8558
            }
 
8559
 
 
8560
        }
 
8561
 
 
8562
    }
 
8563
}
 
8564
 
 
8565
 
 
8566
// Gather all the player information and return it in a tColorString object.
 
8567
tColoredString ePlayerNetID::gatherPlayerInfo(ePlayerNetID * p)
 
8568
{
 
8569
    tColoredString listinfo;
 
8570
    listinfo << "Results for " << p->GetColoredName() << "0xRESETT: \n";
 
8571
 
 
8572
    ///Status. Includes player type, spectating or playing, and if the player is chatting.
 
8573
    listinfo << "Status: ";
 
8574
    (p->IsHuman()) ? listinfo << "Human" : listinfo << "Bot";
 
8575
 
 
8576
 
 
8577
 
 
8578
    //Oddly IsSpectating caused some confusing status.
 
8579
    (!p->CurrentTeam()) ? listinfo << ", Spectating" : listinfo << ", Playing";
 
8580
 
 
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.
 
8582
    (p->IsChatting()) ? listinfo << ", Chatting" : listinfo << ""; // ("<< fabs(p->TimeChatting()) << ") seconds\n" : listinfo << "\n";
 
8583
 
 
8584
 
 
8585
    //Only grab this information if the player is an active object.
 
8586
    if (p->Object() && p->currentTeam)
 
8587
    {
 
8588
        //If the player is an active object, are they alive? Pretty sure we know this already but no harm in including it.
 
8589
        (p->Object()->Alive()) ? listinfo << ", Alive\n" : listinfo << ", Dead\n";
 
8590
 
 
8591
        //Only grab this information if the player is an alive object.
 
8592
        if (p->Object()->Alive())
 
8593
        {
 
8594
            gCycle *pCycle = dynamic_cast<gCycle *>(p->Object());
 
8595
 
 
8596
            listinfo <<  "Position: x: " << pCycle->MapPosition().x << ", y: " << pCycle->MapPosition().y  << "\n";
 
8597
 
 
8598
            //Had trouble converting the direction to an angle, will have to visit this later
 
8599
            listinfo << "Map Direction: " << "x: " << pCycle->MapDirection().x << ", y: " << pCycle->MapDirection().y << "\n";
 
8600
            listinfo << "Speed: " << pCycle->verletSpeed_  << "\n";
 
8601
            listinfo << "Rubber: " << pCycle->GetRubber() << "/" << sg_rubberCycle << "\n";
 
8602
        }
 
8603
    }
 
8604
 
 
8605
    return listinfo << "\n";
 
8606
}
 
8607
 
 
8608
 
8491
8609
 
8492
8610
 
8493
8611
static nSettingItem<int> se_pingCharityServerConf("PING_CHARITY_SERVER",sn_pingCharityServer );