/** Klasa przechowujaca komunikat przychodzacy z sieci wraz z 
 * jego wszystkimi wymaganymi parametrami.
 * W momencie gdy komunikat ten gotowy jest do zlozenia (na lokalnej
 * maszynie sa juz wszystkie potrzebne dane) zostanie zwrocony String
 * ktorego mozna wyswietlic na HUDzie
 */

public class NetIncomingMsg extends NetIncomingMsgBase
{
    
    NetIncomingMsg(NetGameInfoBase cGameInfo,int nMessageId, int nPlayerInfoId1)
    {
        this( cGameInfo, nMessageId );
        m_nPlayerInfoId1    = nPlayerInfoId1;
    }
    
    NetIncomingMsg(NetGameInfoBase cGameInfo,int nMessageId, int nPlayerInfoId1, int nPlayerInfoId2)
    {
        this( cGameInfo, nMessageId );
        m_nPlayerInfoId1    = nPlayerInfoId1;
        m_nPlayerInfoId2    = nPlayerInfoId2;
    }
    
    NetIncomingMsg(NetGameInfoBase cGameInfo,int nMessageId, int nPlayerInfoId1, int nPlayerInfoId2, int nTeamInfoId)
    {
        this( cGameInfo, nMessageId );
        m_nPlayerInfoId1    = nPlayerInfoId1;
        m_nPlayerInfoId2    = nPlayerInfoId2;
        m_nTeamInfoId       = nTeamInfoId;
    }
    
    NetIncomingMsg(NetGameInfoBase cGameInfo,int nMessageId, int nPlayerInfoId1, int nPlayerInfoId2, int nTeamInfoId, int nAddInfo )
    {
        this( cGameInfo, nMessageId );
        m_nPlayerInfoId1    = nPlayerInfoId1;
        m_nPlayerInfoId2    = nPlayerInfoId2;
        m_nTeamInfoId       = nTeamInfoId;
        m_nAddInfo          = nAddInfo;
    }
    
    NetIncomingMsg(NetGameInfoBase cGameInfo,int nMessageId, int nPlayerInfoId1, int nPlayerInfoId2, int nTeamInfoId, int nAddInfo, int nAddObjectId )
    {
        this( cGameInfo, nMessageId );
        m_nPlayerInfoId1    = nPlayerInfoId1;
        m_nPlayerInfoId2    = nPlayerInfoId2;
        m_nTeamInfoId       = nTeamInfoId;
        m_nAddInfo          = nAddInfo;
        m_nAddObjectId      = nAddObjectId;
    }

    NetIncomingMsg(NetGameInfoBase cGameInfo,int nMessageId, String sText, int nPlayerInfoId1)
    {
        this( cGameInfo, nMessageId );
        m_sText             = sText;
        m_nPlayerInfoId1    = nPlayerInfoId1;
    }
    
    NetIncomingMsg(NetGameInfoBase cGameInfo,int nMessageId, String sText, String sText2, int nPlayerInfoId1)
    {
        this( cGameInfo, nMessageId );
        m_sText             = sText;
        m_sText2            = sText2;
        m_nPlayerInfoId1    = nPlayerInfoId1;
    }
    
    NetIncomingMsg(NetGameInfoBase cGameInfo,int nMessageId,String sText)
    {
        this( cGameInfo, nMessageId );
        m_sText             = sText;
    }
    
    NetIncomingMsg(NetGameInfoBase cGameInfo,int nMessageId)
    {
        m_cGameInfo         = cGameInfo;
        m_nId               = nMessageId;
    }
    
    final static int _MSG_NON_STANDARD                  = 0;
    final static int _GAME_STARTED                      = 1;
    final static int _GAME_OVER                         = 2;
    final static int _GAME_RESTARTED                    = 3;
    final static int _GAME_RESTARTED_NEXT_ROUND         = 4;
    final static int _GAME_RESTARTED_NEXT_REVENGE_ROUND = 5;
    final static int _GAME_RESTARTED_REVENGE_MATCH      = 6;
    final static int _PLAYER_JOINED                     = 7;
    final static int _PLAYER_JOINED_TEAM                = 8;
    final static int _PLAYER_DIED                       = 9;
    final static int _PLAYER_DIED_TEAM_KILL             = 10;
    final static int _PLAYER_LEFT                       = 11;
    final static int _PLAYER_KICKED_OUT                 = 12;
    final static int _PLAYER_BANNED                     = 13;
    final static int _PLAYER_ASSIGNED_TEAM              = 14;
    final static int _PLAYER_CHANGED_TEAM               = 15;
    final static int _PLAYER_CHANGED_NICK               = 16;
    final static int _PLAYER_RESPAWN_LIMIT_OUT          = 17;
    final static int _PLAYER_EXCLUDED                   = 18;
    final static int _TEAM_EXCLUDED                     = 19;
    final static int _CTF_FLAG_CAPTURED                 = 20;
    final static int _CTF_FLAG_DROPPED                  = 21;
    final static int _CTF_FLAG_RETURNED                 = 22;
    final static int _CTF_FLAG_DELIVERED                = 23;
    final static int _SMD_BASE_CAPTURED                 = 24;
    final static int _SMD_BASE_LOST                     = 25;
    final static int _TD_BASE_CAPTURED                  = 26;
    final static int _FRONT_BASE_DESTROYED              = 27;
    final static int _ASSAULT_OBJECT_UNDER_ATTACK       = 28;
    final static int _ASSAULT_OBJECT_DESTROYED          = 29;    
    final static int _ASSAULT_OBJECTIVE_COMPLETED       = 30;
    final static int _ASSAULT_OBJECTIVE_FAILED          = 31;
    final static int _TYPED_TEXT                        = 32;
    final static int _VOICE                             = 33;
    final static int _ANSWER_COMMAND                    = 34;
    final static int _SERVER_MESSAGE                    = 35;
    final static int _NEXT_LEVEL                        = 36;               
    
    
    /** Skladamy stringa na podstawie szablonu i identyfikatorow 
     *  PlayerInfo
     */
    void SetMessage()
    {
        switch (m_nId)
        {
        case _MSG_NON_STANDARD:
            m_sMessage = m_sText;
            break;
        
        case _GAME_STARTED:
            m_sMessage = GetMessageGameStarted();
            break;
            
        case _GAME_OVER    :
            m_sMessage = GetMessageGameOver();
            break;
            
        case _GAME_RESTARTED:
            m_sMessage = GetMessageGameRestarted();
            break;
            
        case _GAME_RESTARTED_NEXT_ROUND:
            m_sMessage = GetMessageGameRestartedNextRound();
            break;
            
        case _GAME_RESTARTED_NEXT_REVENGE_ROUND:
            m_sMessage = GetMessageGameRestartedNextRevengeRound();
            break;
            
        case _GAME_RESTARTED_REVENGE_MATCH:
            m_sMessage = GetMessageGameRestartedRevengeMatch();
            break;
            
        case _PLAYER_JOINED:
            m_sMessage = GetMessagePlayerJoined();
            break;
            
        case _PLAYER_JOINED_TEAM:
            m_sMessage = GetMessagePlayerJoinedTeam();
            break;
            
        case _PLAYER_DIED:
        case _PLAYER_DIED_TEAM_KILL:
            m_sMessage = GetMessagePlayerDied();
            break;
            
        case _PLAYER_LEFT:
            m_sMessage = GetMessagePlayerLeft();
            break;
            
        case _PLAYER_KICKED_OUT:
            m_sMessage = GetMessagePlayerKickedOut();
            break;            
    
        case _PLAYER_BANNED:
            m_sMessage = GetMessagePlayerBanned();
            break;            

        case _PLAYER_ASSIGNED_TEAM:
            m_sMessage = GetMessagePlayerAssignedTeam();
            break;
            
        case _PLAYER_CHANGED_TEAM:
            m_sMessage = GetMessagePlayerChangedTeam();
            break;
            
        case _PLAYER_CHANGED_NICK:
            m_sMessage = GetMessagePlayerChangedNick();
            break;            
            
        
        case _PLAYER_RESPAWN_LIMIT_OUT:
            m_sMessage = GetMessagePlayerRespawnLimitOut();
            break;

        case _PLAYER_EXCLUDED:
            m_sMessage = GetMessagePlayerExcluded();
            break;
        
        case _TEAM_EXCLUDED:
            m_sMessage = GetMessageTeamExcluded();
            break;
            
        case _CTF_FLAG_CAPTURED:
            m_sMessage = GetMessageFlagCaptured();
            break;
        
        case _CTF_FLAG_RETURNED:
            m_sMessage = GetMessageFlagReturned();
            break;
        
        case _CTF_FLAG_DROPPED:
            m_sMessage = GetMessageFlagDropped();
            break;
                
        case _CTF_FLAG_DELIVERED:
            m_sMessage = GetMessageFlagDelivered();
            break;
            
        case _SMD_BASE_CAPTURED:
            m_sMessage = GetMessageBaseCaptured();
            break;
            
        case _SMD_BASE_LOST:
            m_sMessage = GetMessageBaseLost();
            break;
            
        case _TD_BASE_CAPTURED:
            m_sMessage = GetMessageBaseCapturedTeam();
            break;
            
        case _FRONT_BASE_DESTROYED:
            m_sMessage = GetMessageFrontBaseDestroyed();
            break;
            
        case _ASSAULT_OBJECT_UNDER_ATTACK:
            m_sMessage = GetMessageObjectUnderAttack();
            break;            
            
        case _ASSAULT_OBJECT_DESTROYED:
            m_sMessage = GetMessageObjectDestroyed();
            break;            
            
        case _ASSAULT_OBJECTIVE_COMPLETED:
            m_sMessage = GetMessageAssaultObjectiveCompleted();
            break;
            
        case _ASSAULT_OBJECTIVE_FAILED:
            m_sMessage = GetMessageAssaultObjectiveFailed();
            break;
            
        case _TYPED_TEXT:
        case _VOICE:            
            m_sMessage = GetMessagePlayerMessage();
            break;
            
        case _ANSWER_COMMAND:
            m_sMessage = GetMessageAnswerCommand();
            break;
            
        case _SERVER_MESSAGE:
            m_sMessage = GetMessageFromServer();
            break;
            
        case _NEXT_LEVEL:
            m_sMessage = GetMessageNextLevel();
            break;
        }
            
        m_bValid = ( m_sMessage != null );
    }
    
    /** Okreslamy dzwiek jaki ma byc odegrany
     */
    void SetTargetHud()
    {
        switch (m_nId)
        {
        case _MSG_NON_STANDARD:
        case _GAME_STARTED:
        case _GAME_OVER    :
        case _GAME_RESTARTED:
        case _PLAYER_DIED:
        case _PLAYER_DIED_TEAM_KILL:
        case _PLAYER_CHANGED_TEAM:
        case _PLAYER_RESPAWN_LIMIT_OUT:
        case _TEAM_EXCLUDED:
        case _PLAYER_EXCLUDED:
        case _PLAYER_JOINED:
        case _PLAYER_JOINED_TEAM:
        case _PLAYER_LEFT:
        case _PLAYER_KICKED_OUT:
        case _PLAYER_BANNED:
        case _CTF_FLAG_CAPTURED:
        case _CTF_FLAG_RETURNED:
        case _CTF_FLAG_DROPPED:
        case _CTF_FLAG_DELIVERED:
        case _SMD_BASE_CAPTURED:
        case _SMD_BASE_LOST:
        case _TD_BASE_CAPTURED:
        case _FRONT_BASE_DESTROYED:
        case _ASSAULT_OBJECT_UNDER_ATTACK:
        case _ASSAULT_OBJECT_DESTROYED:
        case _ASSAULT_OBJECTIVE_COMPLETED:
        case _ASSAULT_OBJECTIVE_FAILED:
        case _TYPED_TEXT:
        case _VOICE:
        case _ANSWER_COMMAND:
        case _SERVER_MESSAGE:
            m_nTargetHudId  = NetMsg._TARGETHUD_INCOMING;
            break;
        }
        
    }
    
    
    
    /** Okreslamy dzwiek jaki ma byc odegrany
     */
    void SetSound()
    {
        if ( m_sRequestedWave != null )
        {
            m_sWave = m_sRequestedWave;
            return;
        }
        
        boolean bSetSoundFinished = false;
        
        if ( m_bYouAreMainSubject )
        {
            //zakladamy ze obsluzymy to tu
            bSetSoundFinished = true;
        
            switch (m_nId)
            {
            //tu teksty ktorym chcemy przypisac inne
            //dzwieki gry dotycza bezposrednio nas
            case _TYPED_TEXT:
                m_sWave = NetMsg._SND_INMSG_CHAT_MY;
                break;
                
            case _PLAYER_EXCLUDED:
                m_sWave = NetMsg._SND_INMSG_GAME_PLAYEREXCLUDED_MY;
                break;
                
            case _CTF_FLAG_CAPTURED:
                m_sWave = NetMsg._SND_INMSG_GAME_FLAGCAPTURED_MY;
                break;
                
            case _SMD_BASE_CAPTURED:
            case _TD_BASE_CAPTURED:
                m_sWave = NetMsg._SND_INMSG_GAME_OBJECTCAPTURED_MY;
                break;
            case _CTF_FLAG_RETURNED:
                m_sWave = NetMsg._SND_INMSG_GAME_FLAGRETURNED_MY;
                break;
            case _CTF_FLAG_DELIVERED:
                m_sWave = NetMsg._SND_INMSG_GAME_FLAGDELIVERED_MY;
                break;    
            case _FRONT_BASE_DESTROYED:
                m_sWave = NetMsg._SND_INMSG_GAME_BASEDESTROYED_MY;
                break;    
            case _CTF_FLAG_DROPPED:
            case _SMD_BASE_LOST:                
                m_sWave = NetMsg._SND_INMSG_GAME_FLAGDROPPED_MY;
                break;

            //pozostale beda obslugiwane w drugim switchu
            default:
                bSetSoundFinished = false;
            }
        }
        
        if ( bSetSoundFinished )
            return;
        
        switch (m_nId)
        {
        case _PLAYER_JOINED:
        case _PLAYER_JOINED_TEAM:
        case _PLAYER_CHANGED_TEAM:            
        case _PLAYER_LEFT:
        case _PLAYER_KICKED_OUT:
        case _PLAYER_BANNED:
            //TODO: dzwieki na eventy "sieciowe"
            m_sWave = NetMsg._SND_INMSG_SYSTEM;
            break;
            
        case _MSG_NON_STANDARD:
        case _PLAYER_DIED:
        case _PLAYER_DIED_TEAM_KILL:
        case _PLAYER_RESPAWN_LIMIT_OUT:
        case _TEAM_EXCLUDED:
        case _PLAYER_EXCLUDED:
            //tu raczej dzwiekow nie potrzeba
            break;
            
        case _GAME_STARTED:
        case _GAME_OVER    :
        case _GAME_RESTARTED:
        case _CTF_FLAG_CAPTURED:
        case _CTF_FLAG_RETURNED:
        case _CTF_FLAG_DROPPED:
        case _CTF_FLAG_DELIVERED:
        case _SMD_BASE_CAPTURED:
        case _SMD_BASE_LOST:
        case _TD_BASE_CAPTURED:
        case _FRONT_BASE_DESTROYED:
        case _ASSAULT_OBJECT_DESTROYED:
        case _ASSAULT_OBJECT_UNDER_ATTACK:
        case _ASSAULT_OBJECTIVE_COMPLETED:
        case _ASSAULT_OBJECTIVE_FAILED:
            m_sWave = NetMsg._SND_INMSG_GAME;
            break;
            
        case _TYPED_TEXT:
        case _VOICE: //dzwieki Voice beda obslugiwane osobno 
            //poprzed RequestedVawe ale gdybu dla ktoregos nie bylo dzwieku 
            //to bedzie domyslny
            //TODO: dzwieki na komunikaty przychodzace z sieci
            m_sWave = NetMsg._SND_INMSG_CHAT;
            break;
            
        case _SERVER_MESSAGE:
        case _ANSWER_COMMAND:
            m_sWave = NetMsg._SND_INMSG_SERVER;
            break;
        }
        
    }
            
    /** Okreslamy dzwiek jaki ma byc odegrany
     */
    void SetColor()
    {
        if ( m_vRequestedColor != null )
        {
            m_vColor = m_vRequestedColor;
            return;
        }
        
        boolean bSetColorFinished = false;
        
        if ( m_bYouAreMainSubject )
        {
            //zakladamy ze obsluzymy to tu
            bSetColorFinished = true;
        
            switch (m_nId)
            {
            //tu teksty ktorym chcemy przypisac inne
            //dzwieki gry dotycza bezposrednio nas
            case _TYPED_TEXT:
            case _VOICE:
                m_vColor = NetMsg._COL_INMSG_CHAT_MY;
                break;
                
            case _PLAYER_DIED_TEAM_KILL:
                m_vColor = NetMsg._COLOR_RED;
                break;

            //pozostale beda obslugiwane w drugim switchu
            default:
                bSetColorFinished = false;
            }
        }
        
        if ( bSetColorFinished )
            return;
        
            
        switch (m_nId)
        {
        case _PLAYER_JOINED:
        case _PLAYER_JOINED_TEAM:
        case _PLAYER_LEFT:
            m_vColor = NetMsg._COL_INMSG_SYSTEM;
            break;
        
        case _PLAYER_DIED_TEAM_KILL:
        case _PLAYER_KICKED_OUT:
        case _PLAYER_BANNED:
            m_vColor = NetMsg._COLOR_RED;
            break;
                
        case _MSG_NON_STANDARD:
        case _PLAYER_DIED:
        case _PLAYER_CHANGED_TEAM:
        case _PLAYER_RESPAWN_LIMIT_OUT:
            m_vColor = NetMsg._COL_INMSG_DEFAULT;
            break;        

        case _GAME_STARTED:
        case _GAME_OVER    :
        case _GAME_RESTARTED:
        case _TEAM_EXCLUDED:
        case _PLAYER_EXCLUDED:
        case _CTF_FLAG_CAPTURED:
        case _CTF_FLAG_RETURNED:
        case _CTF_FLAG_DROPPED:
        case _CTF_FLAG_DELIVERED:
        case _SMD_BASE_CAPTURED:
        case _SMD_BASE_LOST:
        case _TD_BASE_CAPTURED:
        case _FRONT_BASE_DESTROYED:
        case _ASSAULT_OBJECT_DESTROYED:
        case _ASSAULT_OBJECT_UNDER_ATTACK:
        case _ASSAULT_OBJECTIVE_COMPLETED:
        case _ASSAULT_OBJECTIVE_FAILED:
            m_vColor = NetMsg._COL_INMSG_GAME;
            break;
                
        case _TYPED_TEXT:
        case _VOICE:            
            m_vColor = NetMsg._COL_INMSG_CHAT;
            break;
                
        case _SERVER_MESSAGE:
            m_vColor = NetMsg._COL_INMSG_SERVER;
            break;
        case _ANSWER_COMMAND:    
            m_vColor = NetMsg._COL_INMSG_COMMAND;
            break;
        }
        
    }
    
    /** 
     * Skladanie poszczegolnych komunikatow
     */
    

    private String GetMessageGameStarted()
    {
        GameObject.LogD("\n");
		String sText = NetMsg.sGameStarted;
		return sText;
    }
    
    private String GetMessageGameOver()
    {
        GameObject.LogD("\n");
		String sText = NetMsg.sGameOver;
		return sText;
    }
    
    private String GetMessageGameRestarted()
    {
		String sText = NetMsg.sGameRestarted;
		return sText;
    }
    
    private String GetMessageGameRestartedNextRound()
    {
		String sText = NetMsg.sGameRestartedNextRound;
		return sText;
    }
    
    private String GetMessageGameRestartedNextRevengeRound()
    {
		String sText = NetMsg.sGameRestartedNextRevengeRound;
		return sText;
    }
    
    private String GetMessageGameRestartedRevengeMatch()
    {
		String sText = NetMsg.sGameRestartedRevengeMatch;
		return sText;
    }

    
    private String GetMessagePlayerJoined()
    {
        GameObject.LogD("\n");
		String sText = null;
                
        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetMsg.sYouJoinedGame;
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString( NetMsg.sPlayerJoinedGame,m_cPlayerInfo1.GetNick() );
        }
        else
        {
            GameObject.LogD(" ERROR: m_cPlayerInfo == null!\n");
            sText = "";
        }
        				
		return sText;
    }
    
    private String GetMessagePlayerJoinedTeam()
    {
        GameObject.LogD("\n");
		String sText = null;
                
        if ( m_cPlayerInfo1 != null )
        {
            if ( m_cTeamInfo != null )
            {
                if (m_cPlayerInfo1.bNetIsOwner)
                {
                    sText = NetGameTools.MixString( NetMsg.sYouJoinedGameTeam,m_cTeamInfo.GetTeamName()) ;
                    m_bYouAreMainSubject = true;
                }
                else
                    sText = NetGameTools.MixString( NetMsg.sPlayerJoinedGameTeam,m_cPlayerInfo1.GetNick(),m_cTeamInfo.GetTeamName());
            }
            else
            {
                if (m_cPlayerInfo1.bNetIsOwner)
                    sText = NetMsg.sYouJoinedGame;
                else
                    sText = NetGameTools.MixString( NetMsg.sPlayerJoinedGame,m_cPlayerInfo1.GetNick());
            }
        }
        else
        {
            GameObject.LogD(" ERROR: m_cPlayerInfo == null!\n");
            sText = "";
        }
        				
		return sText;
    }
    
    private String GetMessagePlayerDied()
	{
        GameObject.LogD("\n");
		String sText = null;
                
        //m_cPlayerInfo1 -> victim;
        //m_cPlayerInfo2 -> assassin;
        
        if ( m_cPlayerInfo1 != null && m_cPlayerInfo2 != null )
        {
            // obydwoje sa znani
            if ( m_cPlayerInfo1 == m_cPlayerInfo2 )
            {
                // jakis samobojca
                
                if (m_cPlayerInfo1.bNetIsOwner)
                {
                    sText = NetMsg.sYouKilledByYouSelf;
                    m_bYouAreMainSubject = true;
                }
                else
                    sText = NetGameTools.MixString( NetMsg.sPlayerKilledByHisSelf,m_cPlayerInfo1.GetNick());
            }
            else
            {
                // ktos kogos zabil
                
                if (m_cPlayerInfo1.bNetIsOwner)
                {
                    sText = NetGameTools.MixString( NetMsg.sYouKilledByPlayer,m_cPlayerInfo2.GetNick());
                    m_bYouAreMainSubject = true;
                }
                else if (m_cPlayerInfo2.bNetIsOwner)
                    sText = NetGameTools.MixString( NetMsg.sPlayerKilledByYou,m_cPlayerInfo1.GetNick());
                else
                    sText = NetGameTools.MixString( NetMsg.sPlayerKilledByPlayer,m_cPlayerInfo1.GetNick(),m_cPlayerInfo2.GetNick());
            }
        }
        else if ( m_cPlayerInfo1 != null ) 
        {
            // ofiara znana
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetMsg.sYouKilled;
                m_bYouAreMainSubject = true;
            }
            else 
                sText = NetGameTools.MixString( NetMsg.sPlayerKilled,m_cPlayerInfo1.GetNick());
        }
        else
        {
            GameObject.LogD(" ERROR: m_cPlayerInfo1 == null!\n");
            sText = "";
        }
                
        return sText;
	}
    
    private String GetMessagePlayerLeft()
    {
        GameObject.LogD("\n");
		String sText = null;
                
        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetMsg.sYouLeftGame;
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString( NetMsg.sPlayerLeftGame,m_cPlayerInfo1.GetNick());
        }
        else
        {
            GameObject.LogD(" ERROR: m_cPlayerInfo1 == null!\n");
            sText = "";
        }
        			
        return sText;
    }    
    
    private String GetMessagePlayerKickedOut()
    {
        GameObject.LogD("\n");
		String sText = null;
                
        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetMsg.sYouHaveBeenKickedOutFromTheGame;
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString( NetMsg.sPlayerHasBeenKickedOutFromTheGame,m_cPlayerInfo1.GetNick());
            
            if ( m_sText != null &&
                 m_sText.length() > 0 )
                sText = NetGameTools.MixString( sText, "("+m_sText+")" );                
            else
                sText = NetGameTools.MixString( sText, "" );                
        }
        else
        {
            GameObject.LogD(" ERROR: m_cPlayerInfo1 == null!\n");
            sText = "";
        }
        return sText;
    }    
      
    
    private String GetMessagePlayerBanned()
    {
        GameObject.LogD("\n");
		String sText = null;
                
        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetMsg.sYouHaveBeenBannedOnTheServer;
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString( NetMsg.sPlayerHasBeenBannedOnTheServer,m_cPlayerInfo1.GetNick());
            
            if ( m_sText != null &&
                 m_sText.length() > 0 )
                sText = NetGameTools.MixString( sText, "("+m_sText+")" );                
            else
                sText = NetGameTools.MixString( sText, "" );                
            
        }
        else
        {
            GameObject.LogD(" ERROR: m_cPlayerInfo1 == null!\n");
            sText = "";
        }
        return sText;
    }    
    
    private String GetMessageFlagCaptured()
    {
        GameObject.LogD("\n");
        String sFlagName = ( m_nAddInfo == NetTeamInfo.BLUE ) ? 
                           NetMsg.sFlagBlue : NetMsg.sFlagRed;
		String sText = null;
        
        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetGameTools.MixString( NetMsg.sFlagCapturedByYou,sFlagName ); 
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString( NetMsg.sFlagCapturedByPlayer,sFlagName,m_cPlayerInfo1.GetNick() );
        }
        else
        {
            sText = NetGameTools.MixString( NetMsg.sFlagCaptured,sFlagName );
        }
        
        
        			
        return sText;
    }
    
    private String GetMessageFlagDropped()
    {
        GameObject.LogD("\n");
        String sFlagName = ( m_nAddInfo == NetTeamInfo.BLUE ) ? 
                           NetMsg.sFlagBlue : NetMsg.sFlagRed;
		String sText = null;
        
        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetGameTools.MixString( NetMsg.sFlagDroppedByYou, sFlagName ); 
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString( NetMsg.sFlagDroppedByPlayer, sFlagName, m_cPlayerInfo1.GetNick() );
        }
        else
        {
            sText = NetGameTools.MixString( NetMsg.sFlagDropped, sFlagName );
        }
        return sText;
    }
    
    private String GetMessageFlagReturned()
    {
        GameObject.LogD("\n");
        String sFlagName = ( m_nAddInfo == NetTeamInfo.BLUE ) ? 
                           NetMsg.sFlagBlue : NetMsg.sFlagRed;
		String sText = null;
        
        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetGameTools.MixString( NetMsg.sFlagReturnedByYou,sFlagName); 
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString( NetMsg.sFlagReturnedByPlayer,sFlagName,m_cPlayerInfo1.GetNick());
        }
        else
        {
            sText = NetGameTools.MixString( NetMsg.sFlagReturned,sFlagName);
        }
        return sText;
    }
    
    
    
    
    private String GetMessageFlagDelivered()
    {
        GameObject.LogD("\n");
        String sFlagName = ( m_nAddInfo == NetTeamInfo.BLUE ) ? 
                           NetMsg.sFlagBlue : NetMsg.sFlagRed;
		String sText = null;
        
        if ( m_cTeamInfo != null )
        {
            if ( m_cPlayerInfo1 != null )
            {
                if (m_cPlayerInfo1.bNetIsOwner)
                {
                    sText = NetGameTools.MixString( NetMsg.sFlagDeliveredByYouTeamScored,sFlagName,m_cTeamInfo.GetTeamName()); 
                    m_bYouAreMainSubject = true;
                }
                else
                    sText = NetGameTools.MixString( NetMsg.sFlagDeliveredByPlayerTeamScored,sFlagName,m_cPlayerInfo1.GetNick(),m_cTeamInfo.GetTeamName());
            }
            else
            {
                sText = NetGameTools.MixString( NetMsg.sFlagDeliveredTeamScored,sFlagName,m_cTeamInfo.GetTeamName());
            }
        
        }
        else
        {
            GameObject.LogD(" ERROR: m_cTeamInfo == null!\n");
            sText = "";
        }
        			
        return sText;
    }
    
    private String GetMessageBaseCapturedTeam()
    {
        String sText = null;
        
        if ( m_cTeamInfo != null )
        {
            if ( m_cPlayerInfo1 != null )
            {
                if (m_cPlayerInfo1.bNetIsOwner)
                {
                    sText = NetGameTools.MixString( NetMsg.sBaseCapturedByYouYouTeamIsOwner,m_cTeamInfo.GetTeamName()); 
                    m_bYouAreMainSubject = true;
                }
                else
                    sText = NetGameTools.MixString( NetMsg.sBaseCapturedByPlayerTeamIsOwner,m_cPlayerInfo1.GetNick(),m_cTeamInfo.GetTeamName());
            }
            else
            {
                GameObject.LogD(" ERROR: m_cPlayerInfo == null!\n");
                sText = "";
            }
        
        }
        else
        {
            GameObject.LogD(" ERROR: m_cTeamInfo == null!\n");
            sText = "";
        }
        			
        return sText;
    }
    
        
    private String GetMessageBaseCaptured()
    {
        String sText = null;

        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetMsg.sBaseCapturedByYouYouAreOwner; 
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString( NetMsg.sBaseCapturedByPlayerHeIsOwner,m_cPlayerInfo1.GetNick());
        }
        else
        {
            GameObject.LogD(" ERROR: m_cPlayerInfo == null!\n");
            sText = "";
        }
        
        			
        return sText;
    }
    
    private String GetMessageBaseLost()
    {
        String sText = null;
        
        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetMsg.sBaseLostByYou; 
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString( NetMsg.sBaseLostByPlayer,m_cPlayerInfo1.GetNick());
        }
        else
        {
            GameObject.LogD(" ERROR: m_cPlayerInfo == null!\n");
            sText = "";
        }
        
        			
        return sText;
    }
    
    private String GetMessageFrontBaseDestroyed()
    {
        GameObject.LogD("\n");
        String sBaseName = ( m_nAddInfo == NetTeamInfo.BLUE ) ? 
                           NetMsg.sFrontBaseBlue : NetMsg.sFrontBaseRed;
		String sText = null;
        
        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetGameTools.MixString( NetMsg.sBaseDestroyedByYou,
                                                sBaseName ); 
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString( NetMsg.sBaseDestroyedByPlayer,
                                                sBaseName,
                                                m_cPlayerInfo1.GetNick() );
        }
        else
        {
            sText = NetGameTools.MixString( NetMsg.sBaseDestroyed,
                                            sBaseName );
        }
        return sText;
    }
    
    private String GetMessageObjectUnderAttack()
    {
        GameObject.LogD("\n");
        String sText = null;
        
        if ( m_cAddObject != null )
        {
            sText = NetGameTools.MixString( NetMsg.sObjectUnderAttack,
                                            m_cAddObject.GetName() );
        }
		    
        return sText;
    }
    
    private String GetMessageObjectDestroyed()
    {
        GameObject.LogD("\n");
		String sText       = null;
        String sObjectName = ( m_cAddObject != null )? m_cAddObject.GetName() : "";
        
        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetGameTools.MixString( NetMsg.sObjectDestroyedByYou,
                                                sObjectName ); 
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString( NetMsg.sObjectDestroyedByPlayer,
                                                sObjectName,
                                                m_cPlayerInfo1.GetNick() );
        }
        else
        {
            sText = NetGameTools.MixString( NetMsg.sObjectDestroyed,
                                            sObjectName );
        }
        return sText;
    }
     
    private String GetMessageAssaultObjectiveCompleted()
    {
        GameObject.LogD("\n");
		String sText = null;
        
        if ( m_cTeamInfo != null )
        {
            sText = NetGameTools.MixString( NetMsg.sAssaultObjectiveCompletedTeamScored,
                                            m_cTeamInfo.GetTeamName());
        }
        else
        {
            GameObject.LogD(" ERROR: m_cTeamInfo == null!\n");
            sText = "";
        }
        			
        return sText;
    }
    
    private String GetMessageAssaultObjectiveFailed()
    {
        GameObject.LogD("\n");
		String sText = null;
        
        if ( m_cTeamInfo != null )
        {
            sText = NetGameTools.MixString( NetMsg.sAssaultObjectiveFailedTeamScored,
                                            m_cTeamInfo.GetTeamName());
        }
        else
        {
            GameObject.LogD(" ERROR: m_cTeamInfo == null!\n");
            sText = "";
        }
        			
        return sText;
    }
    
    private String GetMessagePlayerAssignedTeam()
    {
        GameObject.LogD("\n");
		String sText = null;
                
        if ( m_cPlayerInfo1 != null )
        {
            if ( m_cTeamInfo != null )
            {
                if (m_cPlayerInfo1.bNetIsOwner)
                {
                    sText = NetGameTools.MixString( NetMsg.sYouAssignedToTeam,m_cTeamInfo.GetTeamName()); 
                    m_bYouAreMainSubject = true;
                }
                else
                    sText = NetGameTools.MixString( NetMsg.sPlayerAssignedToTeam,m_cPlayerInfo1.GetNick(),m_cTeamInfo.GetTeamName());
            }
            else
            {
                if (m_cPlayerInfo1.bNetIsOwner)
                {
                    sText = NetMsg.sYouChangedTeam;
                    m_bYouAreMainSubject = true;
                }
                else
                    sText = NetGameTools.MixString( NetMsg.sPlayerChangedTeam,m_cPlayerInfo1.GetNick());
            }
        }
        else
        {
            GameObject.LogD(" ERROR: m_cPlayerInfo1 == null!\n");
            sText = "";
        }
        			
        return sText;
    }    
    
    private String GetMessagePlayerChangedTeam()
    {
        GameObject.LogD("\n");
		String sText = null;
                
        if ( m_cPlayerInfo1 != null )
        {
            if ( m_cTeamInfo != null )
            {
                if (m_cPlayerInfo1.bNetIsOwner)
                {
                    sText = NetGameTools.MixString( NetMsg.sYouChangedTeamFor,m_cTeamInfo.GetTeamName()); 
                    m_bYouAreMainSubject = true;
                }
                else
                    sText = NetGameTools.MixString( NetMsg.sPlayerChangedTeamFor,m_cPlayerInfo1.GetNick(),m_cTeamInfo.GetTeamName());
            }
            else
            {
                if (m_cPlayerInfo1.bNetIsOwner)
                {
                    sText = NetMsg.sYouChangedTeam;
                    m_bYouAreMainSubject = true;
                }
                else
                    sText = NetGameTools.MixString( NetMsg.sPlayerChangedTeam,m_cPlayerInfo1.GetNick());
            }
        }
        else
        {
            GameObject.LogD(" ERROR: m_cPlayerInfo1 == null!\n");
            sText = "";
        }
        			
        return sText;
    }    
    
    private String GetMessagePlayerChangedNick()
    {
		String sText = null;
                
        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetGameTools.MixString( Text.Get("&ConsoleCommandYouAreNowKnownAs&"),
                                                m_sText2 );
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString( Text.Get("&ConsoleCommandPlayerIsNowKnownAs&"),
                                                 m_sText, m_sText2 );
        }
        else
        {
            GameObject.LogD(" ERROR: m_cPlayerInfo1 == null!\n");
            sText = "";
        }
        			
        return sText;
    }    
    
    
    
    private String GetMessagePlayerRespawnLimitOut()
    {
        GameObject.LogD("\n");
		String sText = null;
                
        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetMsg.sYouRespawnLimitOut; 
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString( NetMsg.sPlayerRespawnLimitOut,m_cPlayerInfo1.GetNick());
        }
        else
        {
            GameObject.LogD(" ERROR: m_cPlayerInfo1 == null!\n");
            sText = "";
        }
        			
        return sText;
    }    
    
    private String GetMessagePlayerExcluded()
    {
        GameObject.LogD("\n");
		String sText = null;
                
        if ( m_cPlayerInfo1 != null )
        {
            if (m_cPlayerInfo1.bNetIsOwner)
            {
                sText = NetMsg.sYouExcluded; 
                m_bYouAreMainSubject = true;
            }
            else
                sText = NetGameTools.MixString(NetMsg.sPlayerExcluded,m_cPlayerInfo1.GetNick());
        }
        else
        {
            GameObject.LogD(" ERROR: m_cPlayerInfo1 == null!\n");
            sText = "";
        }
        			
        return sText;
    }    
    
    private String GetMessageTeamExcluded()
    {
        GameObject.LogD("\n");
		String sText = null;
                
        if ( m_cTeamInfo != null )
        {
            sText = NetGameTools.MixString( NetMsg.sTeamExcluded,m_cTeamInfo.GetTeamName());
            //TODO: m_bYouAreMainSubject = true;
        }
        else
        {
            GameObject.LogD(" ERROR: m_cTeamInfo == null!\n");
            sText = "";
        }
        			
        return sText;
    }
    
    private String GetMessagePlayerMessage()
    {
        GameObject.LogD("\n");
		String sText = null;
                
        if ( m_cPlayerInfo1 != null )
        {
            if ( m_cPlayerInfo1.bNetIsOwner )
            {
                sText = "> ";
                m_bYouAreMainSubject = true;
            }
            else
                sText = "<"+m_cPlayerInfo1.GetNick()+"> ";    
            
            sText = sText + m_sText;
        }
        else
        {
            sText = NetGameTools.MixString( NetMsg.sServerMessage, m_sText );
        }
        
        NetLog.Test("CHAT MSG: "+sText);
        return sText;
    }    
    
    private String GetMessageAnswerCommand()
    {
        GameObject.LogD("\n");
		String sText = NetGameTools.MixString( 
                                              NetMsg.sAnswerCommand,
                                              ConsoleCommand.GetResultsPrefix(),
                                              m_sText );
        
        return sText;
    }    
    
    private String GetMessageFromServer()
    {
    	//String sText = NetGameTools.MixString( NetMsg.sServerMessage,m_sText );
        String sText = NetGameTools.MixString( ">> %s",m_sText );
        return sText;
    }    
    
    private String GetMessageNextLevel()
    {
        GameObject.LogD("\n");
		String sText = NetGameTools.MixString( NetMsg.sNextLevel,m_sText );
        
        return sText;
    }    
    
    void OnMessageAppearsOnHud()
    {
    }
}
