您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ Com_Milliseconds函数代码示例

51自学网 2021-06-01 20:12:32
  C++
这篇教程C++ Com_Milliseconds函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中Com_Milliseconds函数的典型用法代码示例。如果您正苦于以下问题:C++ Com_Milliseconds函数的具体用法?C++ Com_Milliseconds怎么用?C++ Com_Milliseconds使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了Com_Milliseconds函数的19个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: S_EndLoadSound

/*==============S_EndLoadSound==============*/qboolean S_EndLoadSound( sfx_t *sfx ){    wavinfo_t	info;    byte*		data;    ALuint		Buffer;    assert(sfx->iFlags & SFX_FLAG_LOADING);    sfx->iFlags &= ~SFX_FLAG_LOADING;    // was the read successful?    if (Sys_StreamIsError(sfx->iStreamHandle))    {#if defined(FINAL_BUILD)        /*        extern void ERR_DiscFail(bool);        ERR_DiscFail(false);        */#endif        Sys_StreamClose(sfx->iStreamHandle);        Z_Free(sfx->pSoundData);        sfx->iFlags |= SFX_FLAG_RESIDENT | SFX_FLAG_DEFAULT;        return qfalse;    }    Sys_StreamClose(sfx->iStreamHandle);    SND_TouchSFX(sfx);    sfx->iLastTimeUsed = Com_Milliseconds()+1;	// why +1? Hmmm, leave it for now I guess    // loading a WAV, presumably...    data = (byte*)sfx->pSoundData;    info = GetWavInfo( data );    if (info.size == 0)    {        Z_Free(sfx->pSoundData);        sfx->iFlags |= SFX_FLAG_RESIDENT | SFX_FLAG_DEFAULT;        return qfalse;    }    sfx->iSoundLength = info.size;    // make sure we have enough space for the sound    SND_update(sfx);    // Clear Open AL Error State    alGetError();    // Generate AL Buffer    alGenBuffers(1, &Buffer);    // Copy audio data to AL Buffer    alBufferData(Buffer, info.format, data,                 sfx->iSoundLength, info.rate);    if (alGetError() != AL_NO_ERROR)    {        Z_Free(sfx->pSoundData);        sfx->iFlags |= SFX_FLAG_UNLOADED;        return qfalse;    }    sfx->Buffer = Buffer;#ifdef _GAMECUBE    Z_Free(sfx->pSoundData);#endif    sfx->iFlags |= SFX_FLAG_RESIDENT;    return qtrue;}
开发者ID:Tloz,项目名称:Jedi-Outcast,代码行数:75,


示例2: SVC_RemoteCommand

/*===============SVC_RemoteCommandAn rcon packet arrived from the network.Shift down the remaining argsRedirect all printfs===============*/void SVC_RemoteCommand( netadr_t from, msg_t *msg ) {	qboolean valid;	unsigned int time;	char remaining[1024];	// show_bug.cgi?id=376	// if we send an OOB print message this size, 1.31 clients die in a Com_Printf buffer overflow	// the buffer overflow will be fixed in > 1.31 clients	// but we want a server side fix	// we must NEVER send an OOB message that will be > 1.31 MAXPRINTMSG (4096)#define SV_OUTPUTBUF_LENGTH ( 256 - 16 )	char sv_outputbuf[SV_OUTPUTBUF_LENGTH];	static unsigned int lasttime = 0;	char *cmd_aux;	// TTimo - show_bug.cgi?id=534	time = Com_Milliseconds();	if ( time < ( lasttime + 500 ) ) {		return;	}	lasttime = time;	if ( !strlen( sv_rconPassword->string ) ||		 strcmp( Cmd_Argv( 1 ), sv_rconPassword->string ) ) {		valid = qfalse;		Com_Printf( "Bad rcon from %s:/n%s/n", NET_AdrToString( from ), Cmd_Argv( 2 ) );	} else {		valid = qtrue;		Com_Printf( "Rcon from %s:/n%s/n", NET_AdrToString( from ), Cmd_Argv( 2 ) );	}	// start redirecting all print outputs to the packet	svs.redirectAddress = from;	// FIXME TTimo our rcon redirection could be improved	//   big rcon commands such as status lead to sending	//   out of band packets on every single call to Com_Printf	//   which leads to client overflows	//   see show_bug.cgi?id=51	//     (also a Q3 issue)	Com_BeginRedirect( sv_outputbuf, SV_OUTPUTBUF_LENGTH, SV_FlushRedirect );	if ( !strlen( sv_rconPassword->string ) ) {		Com_Printf( "No rconpassword set on the server./n" );	} else if ( !valid ) {		Com_Printf( "Bad rconpassword./n" );	} else {		remaining[0] = 0;		// ATVI Wolfenstein Misc #284		// get the command directly, "rcon <pass> <command>" to avoid quoting issues		// extract the command by walking		// since the cmd formatting can fuckup (amount of spaces), using a dumb step by step parsing		cmd_aux = Cmd_Cmd();		cmd_aux += 4;		while ( cmd_aux[0] == ' ' )			cmd_aux++;		while ( cmd_aux[0] && cmd_aux[0] != ' ' ) // password			cmd_aux++;		while ( cmd_aux[0] == ' ' )			cmd_aux++;		Q_strcat( remaining, sizeof( remaining ), cmd_aux );		Cmd_ExecuteString( remaining );	}	Com_EndRedirect();}
开发者ID:Justasic,项目名称:RTCW-MP,代码行数:77,


示例3: S_Update_

void S_Update_(void){    unsigned        endtime;    int				samps;    static			float	lastTime = 0.0f;    float			ma, op;    float			thisTime, sane;    static			int ot = -1;    if ( !s_soundStarted || s_soundMuted )    {        return;    }    thisTime = Com_Milliseconds();    // Updates s_soundtime    S_GetSoundtime();    if (s_soundtime == ot)    {        return;    }    ot = s_soundtime;    // clear any sound effects that end before the current time,    // and start any new sounds    S_ScanChannelStarts();    sane = thisTime - lastTime;    if (sane<11)    {        sane = 11;			// 85hz    }    ma = s_mixahead->value * dma.speed;    op = s_mixPreStep->value + sane*dma.speed*0.01;    if (op < ma)    {        ma = op;    }    // mix ahead of current position    endtime = s_soundtime + ma;    // mix to an even submission block size    endtime = (endtime + dma.submission_chunk-1)              & ~(dma.submission_chunk-1);    // never mix more than the complete buffer    samps = dma.samples >> (dma.channels-1);    if (endtime - s_soundtime > samps)        endtime = s_soundtime + samps;    SNDDMA_BeginPainting ();    S_PaintChannels (endtime);    SNDDMA_Submit ();    lastTime = thisTime;}
开发者ID:zturtleman,项目名称:recoil,代码行数:65,


示例4: Com_Init

void Com_Init( char *commandLine ) {	char	*s;	Com_Printf( "%s %s %s/n", Q3_VERSION, PLATFORM_STRING, __DATE__ );	try {		Cvar_Init ();		// prepare enough of the subsystems to handle		// cvar and command buffer management		Com_ParseCommandLine( commandLine );		//Swap_Init ();		Cbuf_Init ();		Com_InitZoneMemory();		Cmd_Init ();		// override anything from the config files with command line args		Com_StartupVariable( NULL );		// done early so bind command exists		CL_InitKeyCommands();		com_homepath = Cvar_Get("com_homepath", "", CVAR_INIT);		FS_InitFilesystem ();	//uses z_malloc		//re.R_InitWorldEffects();   // this doesn't do much but I want to be sure certain variables are intialized.				Com_ExecuteCfg();		// override anything from the config files with command line args		Com_StartupVariable( NULL );				// allocate the stack based hunk allocator		Com_InitHunkMemory();		// if any archived cvars are modified after this, we will trigger a writing		// of the config file		cvar_modifiedFlags &= ~CVAR_ARCHIVE;				//		// init commands and vars		//		Cmd_AddCommand ("quit", Com_Quit_f);		Cmd_AddCommand ("writeconfig", Com_WriteConfig_f );				com_maxfps = Cvar_Get ("com_maxfps", "125", CVAR_ARCHIVE);				com_developer = Cvar_Get ("developer", "0", CVAR_TEMP );		com_logfile = Cvar_Get ("logfile", "0", CVAR_TEMP );		com_speedslog = Cvar_Get ("speedslog", "0", CVAR_TEMP );				com_timescale = Cvar_Get ("timescale", "1", CVAR_CHEAT );		com_fixedtime = Cvar_Get ("fixedtime", "0", CVAR_CHEAT);		com_showtrace = Cvar_Get ("com_showtrace", "0", CVAR_CHEAT);		com_viewlog = Cvar_Get( "viewlog", "0", CVAR_TEMP );		com_speeds = Cvar_Get ("com_speeds", "0", 0);		#ifdef G2_PERFORMANCE_ANALYSIS		com_G2Report = Cvar_Get("com_G2Report", "0", 0);#endif		cl_paused	   = Cvar_Get ("cl_paused", "0", CVAR_ROM);		sv_paused	   = Cvar_Get ("sv_paused", "0", CVAR_ROM);		com_sv_running = Cvar_Get ("sv_running", "0", CVAR_ROM);		com_cl_running = Cvar_Get ("cl_running", "0", CVAR_ROM);		com_skippingcin = Cvar_Get ("skippingCinematic", "0", CVAR_ROM);		com_buildScript = Cvar_Get( "com_buildScript", "0", 0 );		com_affinity = Cvar_Get( "com_affinity", "1", CVAR_ARCHIVE );		com_bootlogo = Cvar_Get( "com_bootlogo", "1", CVAR_ARCHIVE );				if ( com_developer && com_developer->integer ) {			Cmd_AddCommand ("error", Com_Error_f);			Cmd_AddCommand ("crash", Com_Crash_f );			Cmd_AddCommand ("freeze", Com_Freeze_f);		}				s = va("%s %s %s", Q3_VERSION, PLATFORM_STRING, __DATE__ );		com_version = Cvar_Get ("version", s, CVAR_ROM | CVAR_SERVERINFO );#ifdef JK2_MODE		JK2SP_Init();		Com_Printf("Running Jedi Outcast Mode/n");#else		SE_Init();	// Initialize StringEd		Com_Printf("Running Jedi Academy Mode/n");#endif			Sys_Init();	// this also detects CPU type, so I can now do this CPU check below...		Com_SetProcessorAffinity();		Netchan_Init( Com_Milliseconds() & 0xffff );	// pick a port value that should be nice and random//	VM_Init();		SV_Init();		//.........这里部分代码省略.........
开发者ID:BSzili,项目名称:OpenJK,代码行数:101,


示例5: SVC_RemoteCommand

/*===============SVC_RemoteCommandAn rcon packet arrived from the network.Shift down the remaining argsRedirect all printfs===============*/void SVC_RemoteCommand( netadr_t from, msg_t *msg ) {	qboolean	valid;	unsigned int time;	char		remaining[1024];	// TTimo - scaled down to accumulate, but not overflow anything network wise, print wise etc.	// (OOB messages are the bottleneck here)#define SV_OUTPUTBUF_LENGTH (1024 - 16)	char		sv_outputbuf[SV_OUTPUTBUF_LENGTH];	static unsigned int lasttime = 0;	char *cmd_aux;	// TTimo - https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=534	time = Com_Milliseconds();		if ( !strlen( sv_rconPassword->string ) || strcmp (Cmd_Argv(1), sv_rconPassword->string) ) 	{		// MaJ - If the rconpassword is bad and one just happned recently, don't spam the log file, just die.		if ( (unsigned)( time - lasttime ) < 50u ) 			return;					valid = qfalse;		Com_Printf ("Bad rcon from %s:/n%s/n", NET_AdrToString (from), Cmd_Argv(2) );	} else {		// MaJ - If the rconpassword is good, allow it much sooner than a bad one.		if ( (unsigned)( time - lasttime ) < 25u ) 			return;				valid = qtrue;		Com_Printf ("Rcon from %s:/n%s/n", NET_AdrToString (from), Cmd_Argv(2) );	}	lasttime = time;	// start redirecting all print outputs to the packet	svs.redirectAddress = from;	Com_BeginRedirect (sv_outputbuf, SV_OUTPUTBUF_LENGTH, SV_FlushRedirect);	if ( !strlen( sv_rconPassword->string ) ) {		Com_Printf ("No rconpassword set on the server./n");	} else if ( !valid ) {		Com_Printf ("Bad rconpassword./n");	} else {		remaining[0] = 0;				// https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=543		// get the command directly, "rcon <pass> <command>" to avoid quoting issues		// extract the command by walking		// since the cmd formatting can fuckup (amount of spaces), using a dumb step by step parsing		cmd_aux = Cmd_Cmd();		cmd_aux+=4;		while(cmd_aux[0]==' ')			cmd_aux++;		while(cmd_aux[0] && cmd_aux[0]!=' ') // password			cmd_aux++;		while(cmd_aux[0]==' ')			cmd_aux++;				Q_strcat( remaining, sizeof(remaining), cmd_aux);				Cmd_ExecuteString (remaining);	}	Com_EndRedirect ();}
开发者ID:ghostmod,项目名称:PB-ioq3-for-UrbanTerror-4.1,代码行数:73,


示例6: SV_SpawnServer

/*================SV_SpawnServerChange the server to a new map, taking all connectedclients along with it.This is NOT called for map_restart================*/void SV_SpawnServer( char *server, qboolean killBots ) {	int			i;	int			checksum;	qboolean	isBot;	char		systemInfo[16384];	const char	*p;	// shut down the existing game if it is running	SV_ShutdownGameProgs();	Com_Printf ("------ Server Initialization ------/n");	Com_Printf ("Server: %s/n",server);	// if not running a dedicated server CL_MapLoading will connect the client to the server	// also print some status stuff	CL_MapLoading();	// make sure all the client stuff is unloaded	CL_ShutdownAll();	// clear the whole hunk because we're (re)loading the server	Hunk_Clear();#ifndef DEDICATED	// Restart renderer	CL_StartHunkUsers( qtrue );#endif	// clear collision map data	CM_ClearMap();	// init client structures and svs.numSnapshotEntities 	if ( !Cvar_VariableValue("sv_running") ) {		SV_Startup();	} else {		// check for maxclients change		if ( sv_maxclients->modified ) {			SV_ChangeMaxClients();		}	}	// clear pak references	FS_ClearPakReferences(0);	// allocate the snapshot entities on the hunk	svs.snapshotEntities = Hunk_Alloc( sizeof(entityState_t)*svs.numSnapshotEntities, h_high );	svs.nextSnapshotEntities = 0;	// toggle the server bit so clients can detect that a	// server has changed	svs.snapFlagServerBit ^= SNAPFLAG_SERVERCOUNT;	// set nextmap to the same map, but it may be overriden	// by the game startup or another console command	Cvar_Set( "nextmap", "map_restart 0");//	Cvar_Set( "nextmap", va("map %s", server) );	for (i=0 ; i<sv_maxclients->integer ; i++) {		// save when the server started for each client already connected		if (svs.clients[i].state >= CS_CONNECTED) {			svs.clients[i].oldServerTime = sv.time;		}	}	// wipe the entire per-level structure	SV_ClearServer();	for ( i = 0 ; i < MAX_CONFIGSTRINGS ; i++ ) {		sv.configstrings[i] = CopyString("");	}	// make sure we are not paused	Cvar_Set("cl_paused", "0");	// get a new checksum feed and restart the file system	srand(Com_Milliseconds());	sv.checksumFeed = ( ((int) rand() << 16) ^ rand() ) ^ Com_Milliseconds();	FS_Restart( sv.checksumFeed );	CM_LoadMap( va("maps/%s.bsp", server), qfalse, &checksum );	// set serverinfo visible name	Cvar_Set( "mapname", server );	Cvar_Set( "sv_mapChecksum", va("%i",checksum) );	// serverid should be different each time	sv.serverId = com_frameTime;	sv.restartedServerId = sv.serverId; // I suppose the init here is just to be safe	sv.checksumFeedServerId = sv.serverId;	Cvar_Set( "sv_serverid", va("%i", sv.serverId ) );//.........这里部分代码省略.........
开发者ID:kingtiger01,项目名称:OpenMOHAA,代码行数:101,


示例7: SV_SpawnServer

/*================SV_SpawnServerChange the server to a new map, taking all connectedclients along with it.This is NOT called for map_restart================*/void SV_SpawnServer( char *server, qboolean killBots ) {	int i;	int checksum;	qboolean isBot;	char systemInfo[MAX_INFO_STRING];	const char  *p;	// shut down the existing game if it is running	SV_ShutdownGameProgs();	Com_Printf( "------ Server Initialization ------/n" );	Com_Printf( "Server: %s/n",server );	// if not running a dedicated server CL_MapLoading will connect the client to the server	// also print some status stuff	CL_MapLoading();	// make sure all the client stuff is unloaded	CL_ShutdownAll(qfalse);	// clear the whole hunk because we're (re)loading the server	Hunk_Clear();	// clear collision map data		// (SA) NOTE: TODO: used in missionpack	CM_ClearMap();	// wipe the entire per-level structure	SV_ClearServer();	// MrE: main zone should be pretty much emtpy at this point	// except for file system data and cached renderer data	Z_LogHeap();	// allocate empty config strings	for ( i = 0 ; i < MAX_CONFIGSTRINGS ; i++ ) {		sv.configstrings[i] = CopyString( "" );	}	// init client structures and svs.numSnapshotEntities	if ( !Cvar_VariableValue( "sv_running" ) ) {		SV_Startup();	} else {		// check for maxclients change		if ( sv_maxclients->modified ) {			SV_ChangeMaxClients();		}	}	// clear pak references	FS_ClearPakReferences( 0 );	// allocate the snapshot entities on the hunk	svs.snapshotEntities = Hunk_Alloc( sizeof( entityState_t ) * svs.numSnapshotEntities, h_high );	svs.nextSnapshotEntities = 0;	// toggle the server bit so clients can detect that a	// server has changed	svs.snapFlagServerBit ^= SNAPFLAG_SERVERCOUNT;	// set nextmap to the same map, but it may be overriden	// by the game startup or another console command	Cvar_Set( "nextmap", "map_restart 0" );//	Cvar_Set( "nextmap", va("map %s", server) );	for (i=0 ; i<sv_maxclients->integer ; i++) {		// save when the server started for each client already connected		if (svs.clients[i].state >= CS_CONNECTED) {			svs.clients[i].oldServerTime = sv.time;		}	}	// Ridah	// DHM - Nerve :: We want to use the completion bar in multiplayer as well	if ( sv_gametype->integer == GT_SINGLE_PLAYER || sv_gametype->integer >= GT_WOLF ) {		SV_SetExpectedHunkUsage( va( "maps/%s.bsp", server ) );	} else {		// just set it to a negative number,so the cgame knows not to draw the percent bar		Cvar_Set( "com_expectedhunkusage", "-1" );	}	// make sure we are not paused	Cvar_Set( "cl_paused", "0" );#if !defined( DO_LIGHT_DEDICATED )	// get a new checksum feed and restart the file system	sv.checksumFeed = ( ((int) rand() << 16) ^ rand() ) ^ Com_Milliseconds();	// DO_LIGHT_DEDICATED	// only comment out when you need a new pure checksum string and it's associated random feed	//Com_DPrintf("SV_SpawnServer checksum feed: %p/n", sv.checksumFeed);//.........这里部分代码省略.........
开发者ID:MAN-AT-ARMS,项目名称:iortcw-archive,代码行数:101,


示例8: SVC_RemoteCommand

void SVC_RemoteCommand(netadr_t from, void* msg){	bool valid;	unsigned int time;	char remaining[1024] = {0};	size_t current = 0;	static unsigned int lasttime = 0;	remaining[0] = '/0';	time = Com_Milliseconds();	if (time < (lasttime + 100))	{		return;	}	lasttime = time;	if (!sv_rconPassword)	{		return;	}	if (!strlen(sv_rconPassword->current.string) || strcmp(Cmd_Argv(1), sv_rconPassword->current.string))	{		valid = false;		Com_Printf(1, "Bad rcon from %s:/n%s/n", NET_AdrToString(from), Cmd_Argv(2));	}	else	{		valid = true;		Com_Printf(1, "Rcon from %s:/n%s/n", NET_AdrToString(from), Cmd_Argv(2));	}	// start redirecting all print outputs to the packet	redirectAddress = from;	Com_BeginRedirect(sv_outputbuf, SV_OUTPUTBUF_LENGTH, SV_FlushRedirect);	if (!valid)	{		if (!strlen(sv_rconPassword->current.string))		{			Com_Printf(0, "The server must set 'rcon_password' for clients to use 'rcon'./n");		}		else		{			Com_Printf(0, "Invalid password./n");		}	}	else	{		remaining[0] = 0;		if (Cmd_Argc() > 2)		{			for (int i = 2; i < Cmd_Argc(); i++)			{				current = Com_AddToString(Cmd_Argv(i), remaining, current, sizeof(remaining), true);				current = Com_AddToString(" ", remaining, current, sizeof(remaining), false);			}		}		else		{			memset(remaining, 0, sizeof(remaining));			strncpy(remaining, Cmd_Argv(2), sizeof(remaining) - 1);		}		Cmd_ExecuteSingleCommand(0, 0, remaining);	}	Com_EndRedirect();	if (strlen(remaining) > 0)	{		Com_Printf(0, "handled rcon: %s/n", remaining);	}}
开发者ID:HOOman33,项目名称:openiwnet-iw4,代码行数:76,


示例9: CL_ServerStatusResponse

void CL_ServerStatusResponse( const netadr_t& from, msg_t *msg ){	char	info[MAX_INFO_STRING];	int		i, l, score, ping;	int		len;	serverStatus_t* serverStatus = NULL;	for (i = 0; i < MAX_SERVERSTATUSREQUESTS; i++) {		if ( NET_CompareAdr( from, cl_serverStatusList[i].address ) ) {			serverStatus = &cl_serverStatusList[i];			break;		}	}	// if we didn't request this server status	if (!serverStatus) {		return;	}	const char* s = MSG_ReadStringLine( msg );	len = 0;	Com_sprintf(&serverStatus->string[len], sizeof(serverStatus->string)-len, "%s", s);	if (serverStatus->print) {		Com_Printf("Server settings:/n");		// print cvars		while (*s) {			for (i = 0; i < 2 && *s; i++) {				if (*s == '//')					s++;				l = 0;				while (*s) {					info[l++] = *s;					if (l >= MAX_INFO_STRING-1)						break;					s++;					if (*s == '//') {						break;					}				}				info[l] = '/0';				if (i) {					Com_Printf("%s/n", info);				}				else {					Com_Printf("%-24s", info);				}			}		}	}	len = strlen(serverStatus->string);	Com_sprintf(&serverStatus->string[len], sizeof(serverStatus->string)-len, "//");	if (serverStatus->print) {		Com_Printf("/nPlayers:/n");		Com_Printf("num: score: ping: name:/n");	}	for (i = 0, s = MSG_ReadStringLine( msg ); *s; s = MSG_ReadStringLine( msg ), i++) {		len = strlen(serverStatus->string);		Com_sprintf(&serverStatus->string[len], sizeof(serverStatus->string)-len, "//%s", s);		if (serverStatus->print) {			score = ping = 0;			sscanf(s, "%d %d", &score, &ping);			s = strchr(s, ' ');			if (s)				s = strchr(s+1, ' ');			if (s)				s++;			else				s = "unknown";			Com_Printf("%-2d   %-3d    %-3d   %s/n", i, score, ping, s );		}	}	len = strlen(serverStatus->string);	Com_sprintf(&serverStatus->string[len], sizeof(serverStatus->string)-len, "//");	serverStatus->time = Com_Milliseconds();	serverStatus->address = from;	serverStatus->pending = qfalse;	if (serverStatus->print) {		serverStatus->retrieved = qtrue;	}}
开发者ID:ShaneIsley,项目名称:challengeq3,代码行数:86,


示例10: SVC_RemoteCommand

/*===============SVC_RemoteCommandAn rcon packet arrived from the network.Shift down the remaining argsRedirect all printfs===============*/void SVC_RemoteCommand( netadr_t from, msg_t *msg ) {	qboolean	valid;	unsigned int time;	char		remaining[1024];	// TTimo - scaled down to accumulate, but not overflow anything network wise, print wise etc.	// (OOB messages are the bottleneck here)#define SV_OUTPUTBUF_LENGTH (1024 - 16)	char		sv_outputbuf[SV_OUTPUTBUF_LENGTH];	static unsigned int lasttime = 0;	char *cmd_aux;	// TTimo - https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=534	// I believe that this code (and the dead link above) are to address a brute	// force attack that guesses the rcon password.	time = Com_Milliseconds();	if ( !strlen( sv_rconPassword->string ) ||		strcmp (Cmd_Argv(1), sv_rconPassword->string) ) {		if ( (unsigned)( time - lasttime ) < 500u ) {			return;		}		valid = qfalse;		if (sv_logRconArgs->integer > 0) {			Com_Printf("Bad rcon from %s/n", NET_AdrToString(from));		}		else {			Com_Printf("Bad rcon from %s:/n%s/n", NET_AdrToString(from), Cmd_Argv(2));		}	} else {		if (!Sys_IsLANAddress(from) && (unsigned) (time - lasttime) < 100u) {			return;		}		valid = qtrue;		remaining[0] = 0;				// https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=543		// get the command directly, "rcon <pass> <command>" to avoid quoting issues		// extract the command by walking		// since the cmd formatting can fuckup (amount of spaces), using a dumb step by step parsing		cmd_aux = Cmd_Cmd();		cmd_aux+=4;		while(cmd_aux[0]==' ')			cmd_aux++;		while(cmd_aux[0] && cmd_aux[0]!=' ') // password			cmd_aux++;		while(cmd_aux[0]==' ')			cmd_aux++;				Q_strcat( remaining, sizeof(remaining), cmd_aux);		if (sv_logRconArgs->integer > 0) {			Com_Printf("Rcon from %s: %s/n", NET_AdrToString(from), remaining);		}		else {			Com_Printf("Rcon from %s:/n%s/n", NET_AdrToString(from), Cmd_Argv(2));		}	}	lasttime = time;	// start redirecting all print outputs to the packet	svs.redirectAddress = from;	Com_BeginRedirect (sv_outputbuf, SV_OUTPUTBUF_LENGTH, SV_FlushRedirect);	if ( !strlen( sv_rconPassword->string ) ) {		Com_Printf ("No rconpassword set on the server./n");	} else if ( !valid ) {		Com_Printf ("Bad rconpassword./n");	} else {				Cmd_ExecuteString (remaining);	}	Com_EndRedirect ();}
开发者ID:promolic1,项目名称:iourt-fru,代码行数:82,


示例11: SVC_RemoteCommand

/*===============SVC_RemoteCommandAn rcon packet arrived from the network.Shift down the remaining argsRedirect all printfs===============*/void SVC_RemoteCommand(netadr_t from, msg_t * msg) {	bool        valid;	unsigned int    time;	char            remaining[1024];	// show_bug.cgi?id=376	// if we send an OOB print message this size, 1.31 clients die in a Com_Printf buffer overflow	// the buffer overflow will be fixed in > 1.31 clients	// but we want a server side fix	// we must NEVER send an OOB message that will be > 1.31 MAXPRINTMSG (4096)#define SV_OUTPUTBUF_LENGTH ( 256 - 16 )	char            sv_outputbuf[SV_OUTPUTBUF_LENGTH], *cmd_aux;	static unsigned int lasttime = 0;	// TTimo - show_bug.cgi?id=534    time = Com_Milliseconds();	// Do we have a whitelist for rcon?	if(sv_WhiteListRcon->string && *sv_WhiteListRcon->string) {		// Prevent use of rcon from addresses that have not been whitelisted		if(!SV_IsRconWhitelisted(&from))		{			Com_Printf( "SVC_RemoteCommand: attempt from %s who is not whitelisted/n", NET_AdrToString( from ) );			NET_OutOfBandPrint(NS_SERVER, from, "print/nClient not found whitelist data./n");			SV_DropClientsByAddress(&from, "Client tried to access to RCON password.");			return;		}	}    if ( !strlen( sv_rconPassword->string ) || strcmp (Cmd_Argv(1), sv_rconPassword->string) ) {        // MaJ - If the rconpassword is bad and one just happned recently, don't spam the log file, just die.        if ( (unsigned)( time - lasttime ) < 500u ) {			return;        }        valid = false;        Com_Printf ("Bad rcon from %s:/n%s/n", NET_AdrToString (from), Cmd_Argv(2) );    } else {        // MaJ - If the rconpassword is good, allow it much sooner than a bad one.        if ( (unsigned)( time - lasttime ) < 200u ) {			return;        }        valid = true;        Com_Printf ("Rcon from %s:/n%s/n", NET_AdrToString (from), Cmd_Argv(2) );    }    lasttime = time;	// start redirecting all print outputs to the packet	svs.redirectAddress = from;	// FIXME TTimo our rcon redirection could be improved	//   big rcon commands such as status lead to sending	//   out of band packets on every single call to Com_Printf	//   which leads to client overflows	//   see show_bug.cgi?id=51	//     (also a Q3 issue)	Com_BeginRedirect(sv_outputbuf, SV_OUTPUTBUF_LENGTH, SV_FlushRedirect);	if(!strlen(sv_rconPassword->string)) {		Com_Printf("No rconpassword set on the server./n");	} else if(!valid) {		Com_Printf("Bad rconpassword./n");	} else {		remaining[0] = 0;		// ATVI Wolfenstein Misc #284		// get the command directly, "rcon <pass> <command>" to avoid quoting issues		// extract the command by walking		// since the cmd formatting can fuckup (amount of spaces), using a dumb step by step parsing		cmd_aux = Cmd_Cmd();		cmd_aux += 4;		while(cmd_aux[0] == ' ') {			cmd_aux++;		}		while(cmd_aux[0] && cmd_aux[0] != ' ') { // password			cmd_aux++;		}		while(cmd_aux[0] == ' ') {			cmd_aux++;		}		Q_strcat(remaining, sizeof(remaining), cmd_aux);		Cmd_ExecuteString(remaining);	}	Com_EndRedirect();}
开发者ID:TheDushan,项目名称:OpenWolf,代码行数:96,


示例12: SV_SpawnServer

//.........这里部分代码省略.........	svs.snapFlagServerBit ^= SNAPFLAG_SERVERCOUNT;	// set nextmap to the same map, but it may be overriden	// by the game startup or another console command	Cvar_Set( "nextmap", "map_restart 0");//	Cvar_Set( "nextmap", va("map %s", server) );	// wipe the entire per-level structure	SV_ClearServer();	for ( i = 0 ; i < MAX_CONFIGSTRINGS ; i++ ) {		sv.configstrings[i] = CopyString("");	}	// decide which serverversion to host	mv_serverversion = Cvar_Get("mv_serverversion", "1.04", CVAR_ARCHIVE | CVAR_LATCH | CVAR_GLOBAL);	if (FS_AllPath_Base_FileExists("assets5.pk3") && (!strcmp(mv_serverversion->string, "auto") || !strcmp(mv_serverversion->string, "1.04"))) {		Com_Printf("serverversion set to 1.04/n");		MV_SetCurrentGameversion(VERSION_1_04);	}	else if (FS_AllPath_Base_FileExists("assets2.pk3") && (!strcmp(mv_serverversion->string, "auto") || !strcmp(mv_serverversion->string, "1.03"))) {		Com_Printf("serverversion set to 1.03/n");		MV_SetCurrentGameversion(VERSION_1_03);	} else {		Com_Printf("serverversion set to 1.02/n");		MV_SetCurrentGameversion(VERSION_1_02);	}	Cvar_Set("protocol", va("%i", MV_GetCurrentProtocol()));	// make sure we are not paused	Cvar_Set("cl_paused", "0");	// get a new checksum feed and restart the file system	srand(Com_Milliseconds());	sv.checksumFeed = ( ((int) rand() << 16) ^ rand() ) ^ Com_Milliseconds();	FS_PureServerSetReferencedPaks("", "");	FS_Restart( sv.checksumFeed );	CM_LoadMap( va("maps/%s.bsp", server), qfalse, &checksum );	SV_SendMapChange();	// set serverinfo visible name	Cvar_Set( "mapname", server );	Cvar_Set( "sv_mapChecksum", va("%i",checksum) );	// serverid should be different each time	sv.serverId = com_frameTime;	sv.restartedServerId = sv.serverId;	Cvar_Set( "sv_serverid", va("%i", sv.serverId ) );	// clear physics interaction links	SV_ClearWorld ();	// media configstring setting should be done during	// the loading stage, so connected clients don't have	// to load during actual gameplay	sv.state = SS_LOADING;	// load and spawn all other entities	SV_InitGameProgs();	// don't allow a map_restart if game is modified	sv_gametype->modified = qfalse;
开发者ID:entdark,项目名称:jk2mv,代码行数:67,


示例13: SV_SpawnServer

void SV_SpawnServer( char *mapname, qboolean killBots, cb_context_t *after ) {	int                i;	cb_context_t       *context;	spawnserver_data_t *data;	// shut down the existing game if it is running	SV_ShutdownGameProgs();	Com_Printf ("------ Server Initialization ------/n");	Com_Printf ("Server: %s/n",mapname);	// if not running a dedicated server CL_MapLoading will connect the client to the server	// also print some status stuff	CL_MapLoading();	// make sure all the client stuff is unloaded	CL_ShutdownAll(qfalse);	// clear the whole hunk because we're (re)loading the server	Hunk_Clear();	// clear collision map data	CM_ClearMap();	// init client structures and svs.numSnapshotEntities 	if ( !Cvar_VariableValue("sv_running") ) {		SV_Startup();	} else {		// check for maxclients change		if ( sv_maxclients->modified ) {			SV_ChangeMaxClients();		}	}	// clear pak references	FS_ClearPakReferences(0);	// allocate the snapshot entities on the hunk	svs.snapshotEntities = Hunk_Alloc( sizeof(entityState_t)*svs.numSnapshotEntities, h_high );	svs.nextSnapshotEntities = 0;	// toggle the server bit so clients can detect that a	// server has changed	svs.snapFlagServerBit ^= SNAPFLAG_SERVERCOUNT;	// set nextmap to the same map, but it may be overriden	// by the game startup or another console command	Cvar_Set( "nextmap", "map_restart 0");//	Cvar_Set( "nextmap", va("map %s", server) );	for (i=0 ; i<sv_maxclients->integer ; i++) {		// save when the server started for each client already connected		if (svs.clients[i].state >= CS_CONNECTED) {			svs.clients[i].oldServerTime = sv.time;		}	}	// wipe the entire per-level structure	SV_ClearServer();	for ( i = 0 ; i < MAX_CONFIGSTRINGS ; i++ ) {		sv.configstrings[i] = CopyString("");	}	// make sure we are not paused	Cvar_Set("cl_paused", "0");	// set serverinfo visible name	Cvar_Set("mapname", mapname);	// get a new checksum feed and restart the file system	sv.checksumFeed = ( ((int) rand() << 16) ^ rand() ) ^ Com_Milliseconds();	// Setup callback context.	context = cb_create_context( SV_SpawnServer_after_FS_Restart, spawnserver_data_t );	data = (spawnserver_data_t *)context->data;	Q_strncpyz(data->mapname, mapname, MAX_QPATH);	data->killBots = killBots;	data->after = after;	FS_Restart( sv.checksumFeed, context );}
开发者ID:CarterTsai,项目名称:ioq3,代码行数:81,


示例14: SV_SpawnServer

//.........这里部分代码省略.........	// allocate the snapshot entities 	svs.snapshotEntities = new entityState_s[svs.numSnapshotEntities];	// we CAN afford to do this here, since we know the STL vectors in Ghoul2 are empty	memset(svs.snapshotEntities, 0, sizeof(entityState_t)*svs.numSnapshotEntities);/*Ghoul2 Insert End*/	// toggle the server bit so clients can detect that a	// server has changed	svs.snapFlagServerBit ^= SNAPFLAG_SERVERCOUNT;	// set nextmap to the same map, but it may be overriden	// by the game startup or another console command	Cvar_Set( "nextmap", "map_restart 0");//	Cvar_Set( "nextmap", va("map %s", server) );	// wipe the entire per-level structure	SV_ClearServer();	for ( i = 0 ; i < MAX_CONFIGSTRINGS ; i++ ) {		sv.configstrings[i] = CopyString("");	}	//rww - RAGDOLL_BEGIN	G2API_SetTime(svs.time,0);	//rww - RAGDOLL_END	// make sure we are not paused	Cvar_Set("cl_paused", "0");	// get a new checksum feed and restart the file system	srand(Com_Milliseconds());	sv.checksumFeed = ( ((int) rand() << 16) ^ rand() ) ^ Com_Milliseconds();	FS_Restart( sv.checksumFeed );#ifdef _XBOX	CL_StartHunkUsers();	CM_LoadMap( va("maps/%s.bsp", server), qfalse, &checksum );//	RE_LoadWorldMap(va("maps/%s.bsp", server));	// Start up voice system if it isn't running yet. (ie, if we're on syslink)	if( !logged_on )		g_Voice.Initialize();#else	CM_LoadMap( va("maps/%s.bsp", server), qfalse, &checksum );#endif	SV_SendMapChange();	// set serverinfo visible name	Cvar_Set( "mapname", server );	Cvar_Set( "sv_mapChecksum", va("%i",checksum) );	// serverid should be different each time	sv.serverId = com_frameTime;	sv.restartedServerId = sv.serverId;	Cvar_Set( "sv_serverid", va("%i", sv.serverId ) );	// clear physics interaction links	SV_ClearWorld ();		// media configstring setting should be done during	// the loading stage, so connected clients don't have
开发者ID:Drakesinger,项目名称:jediacademypc,代码行数:67,


示例15: S_LoadSound

/*==============S_LoadSoundThe filename may be different than sfx->name in the caseof a forced fallback of a player specific sound==============*/bool S_LoadSound( sfx_t *sfx ){	byte	*data;	short	*samples;	snd_info_t	info;//	int		size;	// player specific sounds are never directly loaded	if ( sfx->soundName[0] == '*') {		return false;	}	// load it in	data = (byte*)S_CodecLoad(sfx->soundName, &info);	if(!data)		return false;	if ( info.width == 1 ) {		Com_DPrintf(S_COLOR_YELLOW "WARNING: %s is a 8 bit audio file/n", sfx->soundName);	}	if ( info.rate != 22050 ) {		Com_DPrintf(S_COLOR_YELLOW "WARNING: %s is not a 22kHz audio file/n", sfx->soundName);	}	samples = (short*)Hunk_AllocateTempMemory(info.samples * sizeof(short) * 2);	sfx->lastTimeUsed = Com_Milliseconds()+1;	// each of these compression schemes works just fine	// but the 16bit quality is much nicer and with a local	// install assured we can rely upon the sound memory	// manager to do the right thing for us and page	// sound in as needed	if( sfx->soundCompressed == true) {		sfx->soundCompressionMethod = 1;		sfx->soundData = NULL;		sfx->soundLength = ResampleSfxRaw( samples, info.rate, info.width, info.samples, data + info.dataofs );		S_AdpcmEncodeSound(sfx, samples);#if 0	} else if (info.samples>(SND_CHUNK_SIZE*16) && info.width >1) {		sfx->soundCompressionMethod = 3;		sfx->soundData = NULL;		sfx->soundLength = ResampleSfxRaw( samples, info.rate, info.width, info.samples, (data + info.dataofs) );		encodeMuLaw( sfx, samples);	} else if (info.samples>(SND_CHUNK_SIZE*6400) && info.width >1) {		sfx->soundCompressionMethod = 2;		sfx->soundData = NULL;		sfx->soundLength = ResampleSfxRaw( samples, info.rate, info.width, info.samples, (data + info.dataofs) );		encodeWavelet( sfx, samples);#endif	} else {		sfx->soundCompressionMethod = 0;		sfx->soundLength = info.samples;		sfx->soundData = NULL;		ResampleSfx( sfx, info.rate, info.width, data + info.dataofs, false );	}		Hunk_FreeTempMemory(samples);	Hunk_FreeTempMemory(data);	return true;}
开发者ID:TheDushan,项目名称:OpenWolf,代码行数:72,


示例16: PHYS_InitVM

/*====================PHYS_InitVMCalled for both a full init and a restart====================*/void PHYS_InitVM(qboolean restart){  VM_Call(pvm, PHYSICS_INIT, sv.time, Com_Milliseconds(), restart);}
开发者ID:SinSiXX,项目名称:Rogue-Reborn,代码行数:11,


示例17: S_AddLoopSounds

/*==================S_AddLoopSoundsSpatialize all of the looping sounds.All sounds are on the same cycle, so any duplicates can justsum up the channel multipliers.==================*/void S_AddLoopSounds (void) {	int			i, j, now;	int			left_total, right_total, left, right;	channel_t	*ch;	loopSound_t	*loop, *loop2;	static int	loopFrame;	numLoopChannels = 0;	now = Com_Milliseconds();	loopFrame++;	for ( i = 0 ; i < MAX_GENTITIES ; i++) {		loop = &loopSounds[i];		if ( !loop->active || loop->mergeFrame == loopFrame ) {			continue;	// already merged into an earlier sound		}		if (loop->kill) {			S_SpatializeOrigin( loop->origin, 127, &left_total, &right_total);			// 3d		} else {			S_SpatializeOrigin( loop->origin, 90,  &left_total, &right_total);			// sphere		}		loop->sfx->lastTimeUsed = now;		for (j=(i+1); j< MAX_GENTITIES ; j++) {			loop2 = &loopSounds[j];			if ( !loop2->active || loop2->doppler || loop2->sfx != loop->sfx) {				continue;			}			loop2->mergeFrame = loopFrame;			if (loop2->kill) {				S_SpatializeOrigin( loop2->origin, 127, &left, &right);				// 3d			} else {				S_SpatializeOrigin( loop2->origin, 90,  &left, &right);				// sphere			}			loop2->sfx->lastTimeUsed = now;			left_total += left;			right_total += right;		}		if (left_total == 0 && right_total == 0) {			continue;		// not audible		}		// allocate a channel		ch = &loop_channels[numLoopChannels];				if (left_total > 255) {			left_total = 255;		}		if (right_total > 255) {			right_total = 255;		}				ch->master_vol = 127;		ch->leftvol = left_total;		ch->rightvol = right_total;		ch->thesfx = loop->sfx;		ch->doppler = loop->doppler;		ch->dopplerScale = loop->dopplerScale;		ch->oldDopplerScale = loop->oldDopplerScale;		numLoopChannels++;		if (numLoopChannels == MAX_CHANNELS) {			return;		}	}}
开发者ID:he110world,项目名称:quake3-ios,代码行数:80,


示例18: S_LoadSound

/*==============S_LoadSoundThe filename may be different than sfx->name in the caseof a forced fallback of a player specific sound==============*/qboolean S_LoadSound( sfx_t *sfx ){	byte	*data;	short	*samples;	snd_info_t	info;	int		size_per_sec;	// load it in	data = S_CodecLoad(sfx->soundName, &info);	if(!data)		return qfalse;	size_per_sec = info.rate * info.channels * info.width;	if( size_per_sec > 0 )		sfx->duration = (int)(1000.0f * ((double)info.size / size_per_sec));	if ( info.width == 1 ) {		Com_DPrintf(S_COLOR_YELLOW "WARNING: %s is a 8 bit audio file/n", sfx->soundName);	}	if ( info.rate != 22050 && info.rate != 44100 ) {		Com_DPrintf(S_COLOR_YELLOW "WARNING: %s is not a 22kHz or 44.1kHz audio file/n", sfx->soundName);	}	samples = Hunk_AllocateTempMemory(info.channels * info.samples * sizeof(short) * 2);	sfx->lastTimeUsed = Com_Milliseconds()+1;	// each of these compression schemes works just fine	// but the 16bit quality is much nicer and with a local	// install assured we can rely upon the sound memory	// manager to do the right thing for us and page	// sound in as needed	if( info.channels == 1 && sfx->soundCompressed == qtrue) {		sfx->soundCompressionMethod = 1;		sfx->soundData = NULL;		sfx->soundLength = ResampleSfxRaw( samples, info.channels, info.rate, info.width, info.samples, data + info.dataofs );		S_AdpcmEncodeSound(sfx, samples);#if 0	} else if (info.channels == 1 && info.samples>(SND_CHUNK_SIZE*16) && info.width >1) {		sfx->soundCompressionMethod = 3;		sfx->soundData = NULL;		sfx->soundLength = ResampleSfxRaw( samples, info.channels, info.rate, info.width, info.samples, (data + info.dataofs) );		encodeMuLaw( sfx, samples);	} else if (info.channels == 1 && info.samples>(SND_CHUNK_SIZE*6400) && info.width >1) {		sfx->soundCompressionMethod = 2;		sfx->soundData = NULL;		sfx->soundLength = ResampleSfxRaw( samples, info.channels, info.rate, info.width, info.samples, (data + info.dataofs) );		encodeWavelet( sfx, samples);#endif	} else {		sfx->soundCompressionMethod = 0;		sfx->soundData = NULL;		sfx->soundLength = ResampleSfx( sfx, info.channels, info.rate, info.width, info.samples, data + info.dataofs, qfalse );	}	sfx->soundChannels = info.channels;		Hunk_FreeTempMemory(samples);	Hunk_FreeTempMemory(data);	return qtrue;}
开发者ID:DaneTheory,项目名称:spearmint,代码行数:72,


示例19: S_Base_StartSound

/*====================S_StartSoundValidates the parms and ques the sound upif pos is NULL, the sound will be dynamically sourced from the entityEntchannel 0 will never override a playing sound====================*/void S_Base_StartSound(vec3_t origin, int entityNum, int entchannel, sfxHandle_t sfxHandle ) {	channel_t	*ch;	sfx_t		*sfx;  int i, oldest, chosen, time;  int	inplay, allowed;	if ( !s_soundStarted || s_soundMuted ) {		return;	}	if ( !origin && ( entityNum < 0 || entityNum > MAX_GENTITIES ) ) {		Com_Error( ERR_DROP, "S_StartSound: bad entitynum %i", entityNum );	}	if ( sfxHandle < 0 || sfxHandle >= s_numSfx ) {		Com_Printf( S_COLOR_YELLOW "S_StartSound: handle %i out of range/n", sfxHandle );		return;	}	sfx = &s_knownSfx[ sfxHandle ];	if (sfx->inMemory == qfalse) {		S_memoryLoad(sfx);	}	if ( s_show->integer == 1 ) {		Com_Printf( "%i : %s/n", s_paintedtime, sfx->soundName );	}	time = Com_Milliseconds();//	Com_Printf("playing %s/n", sfx->soundName);	// pick a channel to play on	allowed = 16;	if (entityNum == listener_number) {		allowed = 32;	}	ch = s_channels;	inplay = 0;	for ( i = 0; i < MAX_CHANNELS ; i++, ch++ ) 	{		if (ch[i].entnum == entityNum && ch[i].thesfx == sfx)		{			if (time - ch[i].allocTime < 30)			{//				if (Cvar_VariableValue( "cg_showmiss" )) {//					Com_Printf("double sound start/n");//				}				return;			}			inplay++;		}	}	if (inplay > allowed) {		return;	}	sfx->lastTimeUsed = time;	ch = S_ChannelMalloc();	// entityNum, entchannel);	if (!ch) {		ch = s_channels;		oldest = sfx->lastTimeUsed;		chosen = -1;		for ( i = 0 ; i < MAX_CHANNELS ; i++, ch++ ) {			if (ch->entnum != listener_number && ch->entnum == entityNum && ch->allocTime<oldest && ch->entchannel != CHAN_ANNOUNCER) {				oldest = ch->allocTime;				chosen = i;			}		}		if (chosen == -1) {			ch = s_channels;			for ( i = 0 ; i < MAX_CHANNELS ; i++, ch++ ) {				if (ch->entnum != listener_number && ch->allocTime<oldest && ch->entchannel != CHAN_ANNOUNCER) {					oldest = ch->allocTime;					chosen = i;				}			}			if (chosen == -1) {				if (ch->entnum == listener_number) {					for ( i = 0 ; i < MAX_CHANNELS ; i++, ch++ ) {						if (ch->allocTime<oldest) {							oldest = ch->allocTime;							chosen = i;						}					}				}//.........这里部分代码省略.........
开发者ID:CoolOppo,项目名称:ioq3-for-UrbanTerror-4,代码行数:101,



注:本文中的Com_Milliseconds函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ Com_Print函数代码示例
C++ Com_Memset函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。