Example #1
0
BOOL CGameServDlg::Init()
{
	if(!m_bCSInitted)
	{
		InitializeCriticalSection(&m_CS);
		m_bCSInitted = TRUE;
	}
	
	// Display a console message...

	WriteConsoleString(IDS_CONSOLE_INITSERVER);


	// Get the server interface...

	m_pServerMgr = GetServerInterface();
	if (!m_pServerMgr) return(FALSE);


	// Set our app handler...

	m_pServerMgr->SetAppHandler(&g_AppHandler);


	// Set the tab stops for the player list box...

	int nTabs[10] = { 30, 116, 181, 84, 86, 88, 90, 92, 94, 96 };

	m_lbPlayers.SetTabStops(10, nTabs);


	// Load some strings...

	g_sSpyGameName.LoadString(IDS_SPYGAMENAME);
	g_sSpyGameKey.LoadString(IDS_SPYGAMEKEY);
	g_sWebRegUrl.LoadString(IDS_WEBREGURL);

#ifdef _ADDON
	g_sSpyGameVer.LoadString(IDS_SPYGAMEVER_AO);
	g_sWebGameName.LoadString(IDS_WEBGAMENAME_AO);
	g_sWebGameVer.LoadString(IDS_WEBGAMEVER_AO);
#else
	g_sSpyGameVer.LoadString(IDS_SPYGAMEVER);
	g_sWebGameName.LoadString(IDS_WEBGAMENAME);
	g_sWebGameVer.LoadString(IDS_WEBGAMEVER);
#endif


	// All done...

	WriteConsoleString(IDS_CONSOLE_SERVERINITED);
	return(TRUE);
}
Example #2
0
void CGameServDlg::OnCommandsNextLevel() 
{
	if (m_pServerMgr)
	{
		WriteConsoleString(IDS_NEXTLEVEL);
		m_pServerMgr->SendToServerShell("NEXTLEVEL");
	}
}
Example #3
0
void CGameServDlg::OnConsoleMessageUpdate(char* pMsg)
{
	char sTemp[128];

	if (Sparam_Get(sTemp, pMsg, NST_CONSOLEMSG))
	{
		WriteConsoleString(sTemp);
	}
}
Example #4
0
void CGameServDlg::WriteServerError()
{
	char str[256];

	if (m_pServerMgr)
	{
		m_pServerMgr->GetErrorString(str, sizeof(str)-1);
		WriteConsoleString(str);
	}
}
Example #5
0
void CPerformanceMgr::SetPerformanceCfg(int nCfg)
{
	if (nCfg < 0 || (uint32)nCfg >= m_ConfigList.size())
	{
		WriteConsoleString("PerformanceConfig",".CustomConfig");
//		g_pLTClient->WriteConfigFile("autoexec.cfg");
		return;
	}

	sPerformCfg *pCfg = m_ConfigList[nCfg];

	SetPerformanceOptions(pCfg,nCfg);

}
Example #6
0
void CGameServDlg::OnConsoleSend() 
{
	if (!m_pServerMgr) return;

	char sCmd[128];
	sCmd[0] = '\0';
	if (GetDlgItemText(IDC_CONSOLE_COMMAND, sCmd, 120) == 0) return;

	WriteConsoleString(sCmd);
	SetDlgItemText(IDC_CONSOLE_COMMAND, "");

	m_pServerMgr->RunConsoleString(sCmd);

	UpdateConsoleVars();
}
void CFolderHostLevels::SaveLevelList(CListCtrl *pList)
{
	// Sanity checks...

	if (!pList) return;


	// Write out the level count...
	int cLevels = pList->GetNum();

	if (m_nGameType == COOPERATIVE_ASSAULT)
	{
		WriteConsoleInt("NetCANumLevels", cLevels);
	}
	else
	{
		WriteConsoleInt("NetNumLevels", cLevels);
	}


	// Write out each level...

	for (int i = 0; i < cLevels; i++)
	{
		char sLabel[32];
		if (m_nGameType == COOPERATIVE_ASSAULT)
		{
			wsprintf(sLabel, "NetCALevel%i", i);
		}
		else
		{
			wsprintf(sLabel, "NetLevel%i", i);
		}
		CStaticTextCtrl *pCtrl = (CStaticTextCtrl *)pList->GetControl(i);
		HSTRING hText = pCtrl->GetString();
        char *pTemp = g_pLTClient->GetStringData(hText);
		char sLevel[256] = "";
		sprintf(sLevel,"%s\\%s",szPath,pTemp);

		WriteConsoleString(sLabel, sLevel);
	}
}
Example #8
0
void CGameServDlg::WriteConsoleString(int nStringID)
{
	CString sMsg;
	if (!sMsg.LoadString(nStringID)) return;
	WriteConsoleString(sMsg);
}
Example #9
0
BOOL CGameServDlg::StartServer()
{
	// Sanity checks...

	if (!m_pServerMgr) return(FALSE);


	// Set the debug level...

	m_pServerMgr->RunConsoleString("debuglevel 0");


	// Set the server options...

	NetStart_RunServerOptions(m_pServerMgr, &g_ServerOptions);


	// Set the game type string based on the game type...

	int nStringID = IDS_GAMETYPE_DEATHMATCH;

	switch (g_NetGame.m_byType)
	{
		case NGT_CAPTUREFLAG:	nStringID = IDS_GAMETYPE_CAPTUREFLAG; break;
		case NGT_COOPERATIVE:	nStringID = IDS_GAMETYPE_COOPERATIVE; break;
		case NGT_TEAMS:			nStringID = IDS_GAMETYPE_TEAM; break;

#ifdef _ADDON
		case NGT_SOCCER:		nStringID = IDS_GAMETYPE_SOCCER; break;
#endif

	}

	m_sGameSpyGameType.LoadString(nStringID);


	// Look at some console vars...

	HCONSOLEVAR hVar = NULL;

	DRESULT dr = m_pServerMgr->GetConsoleVar("WebRegUpdate", &hVar, NULL);
	if (dr == LT_OK && hVar)
	{
		float fVal = 0;
		dr = m_pServerMgr->GetVarValueFloat(hVar, &fVal);
		if (dr == LT_OK && fVal > 1)
		{
			s_timerWebRegUpdate = (DWORD)fVal;
		}
	}

	hVar = NULL;
	dr   = m_pServerMgr->GetConsoleVar("EmptyExit", &hVar, NULL);
	if (dr == LT_OK && hVar)
	{
		float fVal = 0;
		dr = m_pServerMgr->GetVarValueFloat(hVar, &fVal);
		if (dr == LT_OK && fVal >= 1)
		{
			g_bEmptyExit = TRUE;
		}
	}

	hVar = NULL;
	dr   = m_pServerMgr->GetConsoleVar("EmptyExitDelay", &hVar, NULL);
	if (dr == LT_OK && hVar)
	{
		float fVal = 0;
		dr = m_pServerMgr->GetVarValueFloat(hVar, &fVal);
		if (dr == LT_OK && fVal >= 1)
		{
			g_nEmptyExitDelay = (int)fVal;
		}
	}

	hVar = NULL;
	dr   = m_pServerMgr->GetConsoleVar("SpyGameType", &hVar, NULL);
	if (dr == LT_OK && hVar)
	{
		char sTemp[64] = { "" };
		dr = m_pServerMgr->GetVarValueString(hVar, sTemp, 64);
		if (dr == LT_OK && sTemp[0] != '\0')
		{
			m_sGameSpyGameType = sTemp;
		}
	}

	hVar = NULL;
	dr   = m_pServerMgr->GetConsoleVar("SpyGameMode", &hVar, NULL);
	if (dr == LT_OK && hVar)
	{
		char sTemp[64] = { "" };
		dr = m_pServerMgr->GetVarValueString(hVar, sTemp, 64);
		if (dr == LT_OK && sTemp[0] != '\0')
		{
			m_sGameSpyGameMode = sTemp;
		}
	}


	// Host the game...

	CWaitCursor wc;

	NetHost nh;

	memset(&nh, 0, sizeof(nh));

	nh.m_dwMaxPlayers = g_ServerInfo.m_dwMaxPlayers;
	nh.m_Port         = NetStart_GetPort();

	CString sHost;

#ifdef _ADDON
	sHost.LoadString(IDS_APPNAME_AO);
#else
	sHost.LoadString(IDS_APPNAME);
#endif

	Sparam_Add(nh.m_sName, NST_GAMENAME,  g_ServerInfo.m_sName);
	Sparam_Add(nh.m_sName, NST_GAMEHOST,  sHost);
	Sparam_Add(nh.m_sName, NST_GAMELEVEL, g_NetGame.m_sLevels[0]);
	Sparam_Add(nh.m_sName, NST_GAMETYPE,  g_NetGame.m_byType);

	if (m_pServerMgr->HostGame(&nh) != DTRUE)
	{
		WriteConsoleString(IDS_CONSOLE_UNABLETOHOST);
		StopServer();
		return(FALSE);
	}


	// Start the world...

	StartGameRequest req;
	memset(&req, 0, sizeof(req));

	req.m_Type = STARTGAME_HOST;
	req.m_pGameInfo   = &g_NetGame;
	req.m_GameInfoLen = sizeof(NetGame_t);

	strcpy(req.m_WorldName, g_NetGame.m_sLevels[0]);

	if (m_pServerMgr->StartWorld(&req) != DTRUE)
	{
		WriteConsoleString(IDS_CONSOLE_UNABLETOSTARTWORLD);
		WriteConsoleString(req.m_WorldName);
		StopServer();
		return(FALSE);
	}


	// Update the service info with the tcp/ip address if available...

	g_ServerInfo.m_sAddress[0] = '\0';
	g_wPort = 0;

	m_pServerMgr->GetTcpIpAddress(g_ServerInfo.m_sAddress, 128, g_wPort);

	CString sService    = g_ServerInfo.m_sService;
	g_sFullTcpIpAddress = "";
	if (g_ServerInfo.m_sAddress[0] != '\0')
	{
		sService += " ";
		g_sFullTcpIpAddress = g_ServerInfo.m_sAddress;
		if (g_wPort > 0 && g_wPort != DEFAULT_PORT)
		{
			char sTemp[32];
			wsprintf(sTemp, ":%i", g_wPort);
			g_sFullTcpIpAddress += sTemp;
		}
		sService += "[";
		sService += g_sFullTcpIpAddress;
		sService += "]";
	}
	SetDlgItemText(IDC_SERVER_SERVICE, sService);


	// Tell the server shell to update the game info parameters...

	m_pServerMgr->SendToServerShell("GAMEINIT");


	// Tell the server that this is a stand-alone server hosted game...

	m_pServerMgr->SendToServerShell("SERVHOST");


	// Init some stuff now that we're running...

	m_bRunning        = TRUE;
	m_timeServerStart = timeGetTime();
	g_timeStart       = timeGetTime();
	m_timeLevelStart  = m_timeServerStart;


	// Init the GameSpy manager...

	if (g_ServerInfo.m_bUseGameSpy)
	{
		if (m_GameSpyMgr.Init(g_sSpyGameName, g_sSpyGameVer, g_sSpyGameKey, 0, g_wPort, (g_wPort+166), GSMF_USEGAMEPORTFORHEARTBEAT))
		{
			m_GameSpyMgr.SetSendHandler(&m_SendHandler);
		}
		else
		{
			g_ServerInfo.m_bUseGameSpy = FALSE;
		}
	}


	// Create the thread to do our updating...

	m_hThread = CreateThread(NULL, 0, ThreadUpdate, (void*)g_pDialog, 0, &m_dwThreadID);


	// All done...

	WriteConsoleString(IDS_CONSOLE_SERVERRUNNING);
	return(TRUE);
}
Example #10
0
void CGameServDlg::OnConsoleOutput(char* pMsg)
{
	WriteConsoleString(pMsg);
}
Example #11
0
void CGameServDlg::OnStandardUpdate(char* pMsg)
{
	// Update the level info...

	char sTemp[128];

	if (Sparam_Get(sTemp, pMsg, NST_CURLEVEL))
	{
		SetDlgItemText(IDC_GAME_CURLEVEL, sTemp);
	}

	if (Sparam_Get(sTemp, pMsg, NST_NEXTLEVEL))
	{
		SetDlgItemText(IDC_GAME_NEXTLEVEL, sTemp);
	}


	// Get the current player selection info...

	CString sCurSel;
	CString sCurSelName;
	int     nCurSel = m_lbPlayers.GetCurSel();

	if (nCurSel != LB_ERR)
	{
		m_lbPlayers.GetText(nCurSel, sCurSel);

		int i = 0;

		while (sCurSel[i] >= 32)
		{
			sCurSelName += sCurSel[i];
			i++;
		}
	}


	// Update the player info...

	m_lbPlayers.ResetContent();

	int count    = 0;
	int cPlayers = 0;
	int nNewSel  = nCurSel;

	if (Sparam_Get(sTemp, pMsg, NST_PLRCOUNT))
	{
		count = atoi(sTemp);
	}

	for (int i = 1; i <= count; i++)
	{
		char sBase[32];
		char sName[64];

		int j = i-1;

		wsprintf(sBase, "%s%i", NST_PLRNAME_BASE, i);

		if (Sparam_Get(sName, pMsg, sBase))
		{
			strcpy(m_aPis[j].sName, sName);

			wsprintf(sBase, "%s%i", NST_PLRFRAG_BASE, i);

			if (Sparam_Get(sTemp, pMsg, sBase))
			{
				m_aPis[j].nFrags = atoi(sTemp);

				wsprintf(sBase, "%s%i", NST_PLRID_BASE, i);

				if (Sparam_Get(sTemp, pMsg, sBase))
				{
					m_aPis[j].dwID = atoi(sTemp);
				}
				else
				{
					m_aPis[j].dwID = 0;
				}
			}
		}

		int clientIndex = ClientIDToIndex(m_pServerMgr, m_aPis[j].dwID);
		m_aPis[j].dwPing = 0;
		if(clientIndex != -1)
		{
			ClientInfo info;

			if(m_pServerMgr->GetClientInfo(clientIndex, &info))
			{
				m_aPis[j].dwPing = (DWORD)(info.m_Ping * 1000.0f);
			}
		}

		cPlayers++;
	}


	// Sort the players...

	PLAYERINFO TempPi;

	for (i = 0; i < count - 1; i++)
	{
		for (int j = i+1; j < count; j++)
		{
			BOOL bSwap = FALSE;

			if (m_aPis[i].nFrags < m_aPis[j].nFrags) bSwap = TRUE;

			if (m_aPis[i].nFrags == m_aPis[j].nFrags)
			{
				if (strcmp(m_aPis[i].sName, m_aPis[j].sName) > 0) bSwap = TRUE;
			}

			if (bSwap)
			{
				memcpy(&TempPi,  &m_aPis[i], sizeof(PLAYERINFO));
				memcpy(&m_aPis[i], &m_aPis[j], sizeof(PLAYERINFO));
				memcpy(&m_aPis[j], &TempPi,  sizeof(PLAYERINFO));
			}
		}
	}


	// Add the players to the list box...

	nNewSel = LB_ERR;

	for (i = 0; i < count; i++)
	{
		CString sPlayer;
		sPlayer.Format("(%d)\t%s\t%i", m_aPis[i].dwPing, m_aPis[i].sName, m_aPis[i].nFrags);
		int nIndex = m_lbPlayers.AddString(sPlayer);

		if (nIndex != LB_ERR)
		{
			m_lbPlayers.SetItemData(nIndex, m_aPis[i].dwID);

			if (!sCurSelName.IsEmpty() && strcmp(m_aPis[i].sName, sCurSelName) == 0) nNewSel = nIndex;
		}
	}


	// Reselect the selected player if necessary...

	if (nNewSel != LB_ERR)
	{
		m_lbPlayers.SetCurSel(nNewSel);
	}

	CWnd* pWnd = GetDlgItem(IDC_PLAYERS_BOOT);
	if (pWnd)
	{
		pWnd->EnableWindow(nNewSel != LB_ERR);
	}


	// Check for empty exit...

	if (g_bEmptyExit)
	{
		if (m_cPlayers > 0 && cPlayers == 0)
		{
			WriteConsoleString(IDS_CONSOLE_LASTPLAYERLEFT);
			g_bDoEmptyExit   = TRUE;
			g_timerEmptyExit = g_nEmptyExitDelay * 1000;
		}
		else
		{
			if (cPlayers >= 1) g_bDoEmptyExit = FALSE;
		}
	}


	// Set the number of players...

	m_cPlayers = cPlayers;

	SetDlgItemInt(IDC_GAME_PLAYERS, cPlayers);
}
Example #12
0
//sets current options from given cfg
void CPerformanceMgr::SetPerformanceOptions(sPerformCfg *pCfg, int nCfg)
{
	for (int i = 0; i < kNumDetailSettings; i++)
	{
		WriteConsoleInt(sSettings[i].szVar,pCfg->nSettings[i]);
	}

	uint32 dwAdvancedOptions = g_pInterfaceMgr->GetAdvancedOptions();
	//disable triple buffer 
	if ( !(dwAdvancedOptions & AO_TRIPLEBUFFER))
	{
		
	}
	if (nCfg == 2 && kPerform_TripleBuffering)
	{
		//for high detail, the triple buffering default value depends on the VSyncOnFlip setting
		int vsync = !!GetConsoleInt("VSyncOnFlip",1);
		WriteConsoleInt(sSettings[kPerform_TripleBuffering].szVar,vsync+1);
	}


	//disable music
	if ( !(dwAdvancedOptions & AO_MUSIC))
	{
		WriteConsoleInt(sSettings[kPerform_MusicActive].szVar,0);
	}

	if (pCfg->nSettings[kPerform_MusicActive] == 0)
	{
		WriteConsoleInt("musicvolume",MUSIC_MIN_VOL);
	}

	if (pCfg->nSettings[kPerform_ShadowDetail] <= 0)
	{
		//turn off shadows if appropriate
		WriteConsoleInt("ModelShadow_Proj_Enable",   0 );
	}
	else
	{
		WriteConsoleInt("ModelShadow_Proj_Enable",   1 );
		int8 nDetail = pCfg->nSettings[kPerform_ShadowDetail] - 1;
		for (int sub = 0; sub < kNumShadowDetails; sub++)
		{
			WriteConsoleInt(sShadowDetails[sub].szVar,sShadowDetails[sub].nSetting[nDetail]);
		}

	}

	uint8 nDetail = pCfg->nSettings[kPerform_FXDetail];
	for (int sub = 0; sub < kNumFXDetails; sub++)
	{
		WriteConsoleInt(sFXDetails[sub].szVar,sFXDetails[sub].nSetting[nDetail]);
	}

	// Set the fx detail setting here (it is set in the loop above) so we know it is 
	// always correct...
	g_pGameClientShell->GetClientFXMgr()->SetDetailLevel( GetConsoleInt("ClientFXDetailLevel", 0) );


	switch (pCfg->nSettings[kPerform_EnvironmentalDetail])
	{
	case 0: //off
		WriteConsoleInt("ScatterEnable",  0 );
		WriteConsoleInt("SnowEnable",  0 );
		break;
	case 1: //low
		WriteConsoleInt("ScatterEnable",  0 );
		WriteConsoleInt("SnowEnable",  1 );
		WriteConsoleFloat("SnowDensityScale",  0.25f );
		break;
	case 2: //medium
		WriteConsoleInt("ScatterEnable",  1 );
		WriteConsoleInt("SnowEnable",  1 );
		WriteConsoleFloat("SnowDensityScale",  0.5f );
		break;
	case 3: //high
		WriteConsoleInt("ScatterEnable",  1 );
		WriteConsoleInt("SnowEnable",  1 );
		WriteConsoleFloat("SnowDensityScale",  1.0f );
		break;
	}
	
	

	nDetail = pCfg->nSettings[kPerform_DetailLevel];
	if ( nDetail >= 0 && nDetail < kNumDetailLevels)
	{
		for (int grp = 0; grp < kNumTextureGroups; grp++)
		{
			WriteConsoleInt(sTextureGroups[grp].szVar,sTextureGroups[grp].nSetting[nDetail]);
		}
	}
	else
	{
		for (int grp = 0; grp < kNumTextureGroups; grp++)
		{
			WriteConsoleInt(sTextureGroups[grp].szVar,pCfg->nDetails[grp]);
		}
	}

	if (nCfg < 0)
		nCfg = GetPerformanceCfg(false);

	if (nCfg < 0 || (uint32)nCfg >= m_ConfigList.size())
	{
		WriteConsoleString("PerformanceConfig",".CustomConfig");
	}
	else
	{
		sPerformCfg *pPresetCfg = m_ConfigList[nCfg];
		WriteConsoleString("PerformanceConfig",pPresetCfg->szName);
	}

//	g_pLTClient->WriteConfigFile("autoexec.cfg");

}
Example #13
0
// Change in focus
void    CFolderPlayer::OnFocus(LTBOOL bFocus)
{

	if (bFocus)
	{
		m_bRestoreSkinHead = LTTRUE;

		m_nModNum = -1;
		m_nSkinNum = 0;
		m_nHeadNum = 0;

		int nUpdateRate = GetConsoleInt("UpdateRate",10);
		m_nConnect = 3;
		while (m_nConnect && nUpdateRate < kConnectSpeeds[m_nConnect])
			m_nConnect--;

		nInitConnect = m_nConnect;

		SAFE_STRCPY(m_szPlayerModel,g_vtPlayerModel.GetStr() );
		GetConsoleString("NetPlayerSkin",m_szPlayerSkin,"");
		GetConsoleString("NetPlayerHead",m_szPlayerHead,"");

		if ( !m_szPlayerSkin[0] || !m_szPlayerHead[0] )
		{
			char szTemp[512];
			strcpy(szTemp, m_szPlayerModel);
			if ( strchr(szTemp, ',') )
			{
				*strchr(szTemp, ',') = '_';
				_strlwr(szTemp);
				strcpy(m_szPlayerSkin, g_pModelButeMgr->GetButeMgr()->GetString(szTemp, "Skin0"));
				strcpy(m_szPlayerHead, g_pModelButeMgr->GetButeMgr()->GetString(szTemp, "Head0"));
			} 
		}

		BuildModelList();
		SAFE_STRCPY(m_szPlayerName,g_vtPlayerName.GetStr() );

		if (m_nModNum < 0)
		{
			m_nModNum = 0;
			HSTRING hStr = m_pModelCtrl->GetString(0);
            strcpy(m_szPlayerModel,g_pLTClient->GetStringData(hStr));

		}

		m_nTeam = (int)g_vtPlayerTeam.GetFloat();
		m_nTargetNameSize = (int)g_vtTargetNameSize.GetFloat();
		m_nTargetNameTransparency = (int)(100.0f*g_vtTargetNameTransparency.GetFloat());
		m_bAutoSwitchWeapons =  (LTBOOL)GetConsoleInt("AutoWeaponSwitch",1);
		m_bAutoSwitchAmmo =  (LTBOOL)GetConsoleInt("AutoAmmoSwitch",1);
		m_bIgnoreTaunts =  (LTBOOL)GetConsoleInt("IgnoreTaunts",0);
	
        UpdateData(LTFALSE);
	}
	else
	{
		UpdateData();

		if (nInitConnect != m_nConnect)
		{
			WriteConsoleInt("UpdateRate",kConnectSpeeds[m_nConnect]);
		}

		LTBOOL bChanged = LTFALSE;
		char szTemp[32];
		SAFE_STRCPY(szTemp,g_vtPlayerModel.GetStr() );
		if (strcmp(szTemp,m_szPlayerModel) != 0)
			bChanged = LTTRUE;


		GetConsoleString("NetPlayerSkin",szTemp,"");
		if (strcmp(szTemp,m_szPlayerSkin) != 0)
			bChanged = LTTRUE;

		GetConsoleString("NetPlayerHead",szTemp,"");
		if (strcmp(szTemp,m_szPlayerHead) != 0)
			bChanged = LTTRUE;

		SAFE_STRCPY(szTemp,g_vtPlayerName.GetStr() );
		if (strcmp(szTemp,m_szPlayerName) != 0)
			bChanged = LTTRUE;

		if (m_nTeam != (int)g_vtPlayerTeam.GetFloat())
			bChanged = LTTRUE;

		g_vtPlayerName.SetStr(m_szPlayerName);
		g_vtPlayerModel.SetStr(m_szPlayerModel);
		WriteConsoleString("NetPlayerHead",m_szPlayerHead);
		WriteConsoleString("NetPlayerSkin",m_szPlayerSkin);
        g_vtPlayerTeam.WriteFloat((LTFLOAT)m_nTeam);
        g_vtTargetNameSize.WriteFloat((LTFLOAT)m_nTargetNameSize);
        g_vtTargetNameTransparency.WriteFloat((LTFLOAT)m_nTargetNameTransparency/100.0f);
		WriteConsoleInt("AutoWeaponSwitch",(int)m_bAutoSwitchWeapons);
		WriteConsoleInt("AutoAmmoSwitch",(int)m_bAutoSwitchAmmo);
		WriteConsoleInt("IgnoreTaunts",(int)m_bIgnoreTaunts);

        HLOCALOBJ hPlayerObj = g_pLTClient->GetClientObject();
		if (bChanged && g_pGameClientShell->IsInWorld() && hPlayerObj && g_pGameClientShell->IsMultiplayerGame())
		{
            HSTRING hstrName = g_pLTClient->CreateString(m_szPlayerName);
			if (!hstrName) return;
            HSTRING hstrModel = g_pLTClient->CreateString(m_szPlayerModel);
			if (!hstrModel) return;
            HSTRING hstrSkin = g_pLTClient->CreateString(strchr(m_szPlayerSkin, ',')+1);
			if (!hstrSkin) return;
            HSTRING hstrHead = g_pLTClient->CreateString(strchr(m_szPlayerHead, ',')+1);
			if (!hstrHead) return;

			// Init multiplayer info on server...

            HMESSAGEWRITE hWrite = g_pLTClient->StartMessage(MID_PLAYER_MULTIPLAYER_CHANGE);
            g_pLTClient->WriteToMessageHString(hWrite, hstrName);
            g_pLTClient->WriteToMessageHString(hWrite, hstrModel);
            g_pLTClient->WriteToMessageHString(hWrite, hstrSkin);
            g_pLTClient->WriteToMessageHString(hWrite, hstrHead);
            g_pLTClient->WriteToMessageByte(hWrite, (uint8)m_nTeam);
            g_pLTClient->EndMessage(hWrite);

			g_pLTClient->FreeString(hstrName);
			g_pLTClient->FreeString(hstrModel);
			g_pLTClient->FreeString(hstrSkin);
			g_pLTClient->FreeString(hstrHead);

			ClearModelList();
		}

		g_pLTClient->FreeUnusedModels();

        g_pLTClient->WriteConfigFile("autoexec.cfg");

	}
	CBaseFolder::OnFocus(bFocus);
}