亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? client.cpp

?? 我對他如何控制準星、顯示敵友很好奇
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
	if( b==0 && g>0 && cvar.hud)
	{
		register double ratio = (double(r)/double(g));
		if( ratio>=1.5 && ratio<=1.7 )
		{
			register ColorEntry* color = colorList.get(5);
			return gEngfuncs.pfnDrawCharacter(x,y,number,color->r*r/255,color->g*r/255,color->b*r/255);
		}
	}
	return gEngfuncs.pfnDrawCharacter(x,y,number,r,g,b);
}

//========================================================================================
static void updateLocalPlayer()
{
	me.ent    = gEngfuncs.GetLocalPlayer();

	static cl_entity_s dummy;
	memset((char*)&dummy,0,sizeof(dummy));
	
	if(!me.ent){ me.ent = &dummy; }
}

//========================================================================================
void SPR_Set (HSPRITE hPic, int r, int g, int b)
{
	if(cvar.sniper)
	{
		const char * SPR_TOP        = "sprites/top";
		const char * SPR_BOTTOM     = "sprites/bottom";
		const char * SPR_LEFT       = "sprites/left";
		const char * SPR_RIGHT      = "sprites/right";
		const char * SPR_VERTICAL   = "sprites/vertical";
		const char * SPR_HORIZONTAL = "sprites/horizontal";
		const char * sprite_name    =  sprite_lookup(hPic);	

		if( !strncmp(sprite_name, SPR_TOP,      strlen(SPR_TOP)       )
		||  !strncmp(sprite_name, SPR_BOTTOM,   strlen(SPR_BOTTOM)    )
		||  !strncmp(sprite_name, SPR_LEFT,     strlen(SPR_LEFT)      )
		||  !strncmp(sprite_name, SPR_RIGHT,    strlen(SPR_RIGHT)     )
		||  !strncmp(sprite_name, SPR_VERTICAL, strlen(SPR_VERTICAL)  )
		||  !strncmp(sprite_name, SPR_RIGHT,    strlen(SPR_HORIZONTAL)))
		{
			sniper=true;
		} 
		else sniper = false;
	}
	else sniper = false;


	if(cvar.hud)
	{
		register ColorEntry* color = colorList.get(5);
		sprset_hsprite=hPic;
		int intensity = MAX_VALUE(r,g,b);
		sprset_r = color->r*intensity/255;
		sprset_g = color->g*intensity/255;
		sprset_b = color->b*intensity/255;
	}
	
	gEngfuncs.pfnSPR_Set (hPic,r,g,b);
}

//========================================================================================
void tintArea(int x,int y,int w,int h, ColorEntry* clr)
{
	oglSubtractive = true;
	gEngfuncs.pfnFillRGBA(x,y,w,h,clr->r,clr->g,clr->b,clr->a);
	oglSubtractive = false;
}

//========================================================================================
int DrawLen(char *fmt)
{
	int len=0;
	for ( char * p = fmt; *p; p++ ) len+=screeninfo.charWidths[*p]; 
	return len;
}

//========================================================================================
void DrawHudStringCenter (int x, int y, int r, int g, int b, const char *fmt, ... )
{
	va_list va_alist;
	char buf[256];

	va_start (va_alist, fmt);
	_vsnprintf (buf, sizeof(buf), fmt, va_alist);
	va_end (va_alist);
	
	if( cvar.confont ) {
		int length, height;
		gEngfuncs.pfnDrawConsoleStringLen( buf, &length, &height );
		x = x - length/2;
		gEngfuncs.pfnDrawSetTextColor((float)r/255.0,(float)g/255.0,(float)b/255.0);
		gEngfuncs.pfnDrawConsoleString(x,y,buf);

	} else {
		// y-check
		int borderY = displayCenterY*2-18;
		if( y<0 || y>borderY ) { return; }

		int drawLen = DrawLen(buf);
		x = x-drawLen/2;

		if(cvar.text_background)
		{
			// only do this with opengl:
			extern hookinfo glBeginInfo;
			if( glBeginInfo.oldfunc )
			{
				tintArea(x-2,y,drawLen+4,16,colorList.get(24));
			}
		}

		int borderX = displayCenterX*2-11;
		int minX = x;
		int maxX = x+drawLen;
		bool needSingleCheck = (minX<1 || maxX>borderX);

		if( needSingleCheck )
		{
			for ( char * p = buf; *p; p++ )
			{
				int next = x + screeninfo.charWidths[*p];
				// IMPORTANT NOTE: when drawing admin-mod style charactters
				//    you MAY NOT provide x/y coordinates that cause drawing
				//    off screen. This causes HL to crash or just quit
				if( x>0 && x<borderX )
					gEngfuncs.pfnDrawCharacter (x, y, *p, r, g, b);
				x = next;
			}
		} else {
			for ( char * p = buf; *p; p++ )
			{
				int next = x + screeninfo.charWidths[*p];
				
				// IMPORTANT NOTE: when drawing admin-mod style charactters
				//    you MAY NOT provide x/y coordinates that cause drawing
				//    off screen. This causes HL to crash or just quit
				gEngfuncs.pfnDrawCharacter (x, y, *p, r, g, b);
				x = next;
			}
		}
	}
}

//========================================================================================
void DrawHudString (int x, int y, int r, int g, int b, const char *fmt, ... )
{
	va_list va_alist;
	char buf[256];

	va_start (va_alist, fmt);
	_vsnprintf (buf, sizeof(buf), fmt, va_alist);
	va_end (va_alist);
	
	if(cvar.confont)
	{
		gEngfuncs.pfnDrawSetTextColor((float)r/255.0,(float)g/255.0,(float)b/255.0);
		gEngfuncs.pfnDrawConsoleString(x,y,buf);
	} else {
		// y-check
		int borderY = displayCenterY*2-18;
		if( y<0 || y>borderY ) { return; }
		
		bool needSingleCheck=false;
		int borderX = displayCenterX*2-11;
		
		int drawLen = DrawLen(buf);
		if( x<1 ){ needSingleCheck=true; }
		else
		{
			int maxX = x+drawLen;
			needSingleCheck = (maxX>borderX);
		}

		if(cvar.text_background)
		{
			tintArea(x-2,y,drawLen+4,16,colorList.get(24));
		}

		if( needSingleCheck )
		{
			for ( char * p = buf; *p; p++ )
			{
				int next = x + screeninfo.charWidths[*p];
				// IMPORTANT NOTE: when drawing admin-mod style charactters
				//    you MAY NOT provide x/y coordinates that cause drawing
				//    off screen. This causes HL to crash or just quit
				if( x>0 && x<borderX )
					gEngfuncs.pfnDrawCharacter (x, y, *p, r, g, b);
				x = next;
			}
		}else {
			for ( char * p = buf; *p; p++ )
			{
				int next = x + screeninfo.charWidths[*p];
				// IMPORTANT NOTE: when drawing admin-mod style charactters
				//    you MAY NOT provide x/y coordinates that cause drawing
				//    off screen. This causes HL to crash or just quit
				gEngfuncs.pfnDrawCharacter (x, y, *p, r, g, b);
				x = next;
			}
		}
	}
}

//========================================================================================
void Con_Echo(const char *fmt, ... )
{
	va_list va_alist;
	char buf[256];

	va_start (va_alist, fmt);
	_vsnprintf (buf, sizeof(buf), fmt, va_alist);
	va_end (va_alist);

	// echo + scroll up:
	gConsole.echo("%s",buf);
}

//===========================================================================================
//======================== USER MESSAGE HOOKS ===============================================
//===========================================================================================
#define USER_MSG_INTERCEPT(name) \
	static pfnUserMsgHook name ## Org = NULL; \
	static int UserMsg ## name ( const char *pszName, int iSize, void *pbuf)
#define USER_MSG_CALL(name) (*name ## Org)(pszName,iSize,pbuf)

//===========================================================================================
USER_MSG_INTERCEPT(TeamInfo)
{
	static bool         done=false;
	static StringFinder teamNumber;
	if(!done)
	{
		// cs
		teamNumber.add("terrorist"  ,1);teamNumber.add("ct"         ,2);
		teamNumber.add("unassigned" ,0);teamNumber.add("spectator"  ,0);
		teamNumber.add("axis"   ,1);teamNumber.add("allies" ,2);
		teamNumber.add("red force", 1);teamNumber.add("blue force",2);
		teamNumber.add("usa",    2);teamNumber.add("up-ko",  4);
		teamNumber.add("rebels", 2);teamNumber.add("agents", 4);
		teamNumber.add("united nations", 2);teamNumber.add("arab liberation force", 4);
		teamNumber.add("#dustbowl_team1",2 );teamNumber.add("#dustbowl_team2",3 );
		teamNumber.add("#dunted_team1"  ,2 );teamNumber.add("#dunted_team2"  ,2 );
		teamNumber.add("#dunted_team3"  ,3 );
		teamNumber.add("red"    ,1);teamNumber.add("blue"   ,2);
		teamNumber.add("yellow" ,3);teamNumber.add("green"  ,4);

		done = true;
	}

	BEGIN_READ(pbuf,iSize);
	int px = READ_BYTE();
	char * teamtext = READ_STRING();

	updateLocalPlayer();

	if(!*teamtext) { vPlayers[px].team = 0; }
	else
	{
		_strlwr(teamtext);
		if(teamNumber.find(teamtext))
		{
			vPlayers[px].team = teamNumber.num;
			if(px==me.ent->index){ me.team = teamNumber.num; }
		}
		else
		{
            Con_Echo("TeamInfo: unknown px=%d, team=%s",px,teamtext);
			vPlayers[px].team = -1;
			if(px==me.ent->index){ me.team = -1; }
		}
	}

	return USER_MSG_CALL(TeamInfo);
}

//===========================================================================================
USER_MSG_INTERCEPT(CurWeapon)
{
	BEGIN_READ( pbuf, iSize );
	int iState = READ_BYTE();
	int iID    = READ_CHAR();
	int iClip  = READ_CHAR();
	if (iState) me.iClip = iClip;
	playerItems.msgCurWeapon (iState,iID,iClip);

	// update our own weaponID:
	if(iState)
	{
		char * name = playerItems.getNamebyId(iID);

		if(!strcmp(name,"mp5navy")) currentWeaponID = WEAPON_MP5;
		else currentWeaponID = burstInfo.getWeaponID( name );
	}

	return USER_MSG_CALL(CurWeapon);
}

//========================================================================================
USER_MSG_INTERCEPT(Concuss)
{
	return 1;
}

//========================================================================================
USER_MSG_INTERCEPT(SayText)
{
	updateLocalPlayer();

	if(gConsole.mode == OgcConsole::MODE_CHAT)
	{
		BEGIN_READ( pbuf, iSize);
		int    client = READ_BYTE(); // the client who spoke the message
		char*  text   = READ_STRING();

		// cut name
		char* realtext = strstr(text," : ");
		if(realtext)
		{
			char* name = text; 
			*realtext=0;
			realtext+=3;
			while(*realtext==' ')realtext++;

			if( vPlayers[client].entinfo.name[0]!='\\' || client==me.ent->index ) 
			{
				cmd.exec("sigmessage");
				gConsole.say(realtext,name,vPlayers[client].team );
				return 1;
			} 
		}
	}
	return USER_MSG_CALL(SayText);
}

//========================================================================================
USER_MSG_INTERCEPT(DeathMsg)
{
	updateLocalPlayer();

	//DeathMsg: [B]Killer [B]Victim [B]Headshot [S]Weapon Name
	BEGIN_READ( pbuf, iSize );
	int killer = READ_BYTE();
	int victim = READ_BYTE();
	int headshot = READ_BYTE();
    char* weaponName = READ_STRING();

	if(cvar.alive_method==1)
	{
		vPlayers[victim].setAlive(false);
		if(victim==me.ent->index){ me.alive = false; }
	}

	if( killer==me.ent->index && headshot)
	{
		bGotHeadshot=true;
	}
	
	if(victim==me.ent->index && killer!=victim && cvar.death)
	{
		int ax = killer;
		if(ax!=-1)
		{
			PlayerInfo& theKiller = vPlayers[ax];
			float* from = theKiller.getEnt()->curstate.origin;
			float* to   = me.pmEyePos;

			VectorCopy(from,deathInfos.from);
			VectorCopy(to,deathInfos.to);

			if( theKiller.getEnt()->curstate.usehull ) deathInfos.from[2]+=12.1f;
			else                                       deathInfos.from[2]+=17.1f;

			deathInfos.killerName = vPlayers[ax].entinfo.name;
			deathInfos.weaponName = weaponName;
			deathInfos.active     = true;
		}
	}

	return USER_MSG_CALL(DeathMsg);
}

//========================================================================================
USER_MSG_INTERCEPT(Money)
{
	BEGIN_READ( pbuf, iSize );
	playerItems.money = READ_SHORT();
	return USER_MSG_CALL(Money);
}

//========================================================================================
USER_MSG_INTERCEPT(Battery)
{
	BEGIN_READ( pbuf, iSize );
	playerItems.armor = READ_BYTE();
	return USER_MSG_CALL(Battery);
}

//========================================================================================
USER_MSG_INTERCEPT(SetFOV)
{
	BEGIN_READ( pbuf, iSize );
	me.iFOV = READ_BYTE();
	if(!me.iFOV)   { me.iFOV=90; }

	if(me.iFOV==90){ me.inZoomMode=false; }
	else           { me.inZoomMode=true;  } 

	if(cvar.antizoom && me.iFOV!=90 ) 
	{ 
		me.iFOV     = 89; 
		((unsigned char*)pbuf)[0]=89;	
	}

	iCurrentFOV = me.iFOV;
	fCurrentFOV = me.iFOV;
	return USER_MSG_CALL(SetFOV);
}

//========================================================================================
USER_MSG_INTERCEPT(ScoreAttrib)
{
	updateLocalPlayer();

	BEGIN_READ(pbuf, iSize);
    int idx  = READ_BYTE();
    int info = READ_BYTE();
    vPlayers[idx].iInfo = info;

	if( cvar.alive_method==0)
	{
		if(info&1) { vPlayers[idx].setAlive(false); vPlayers[idx].clearPVS(); }
		else       { vPlayers[idx].setAlive(); }
	}

	if(idx==me.ent->index) me.alive = ((info&1)==0);

	return USER_MSG_CALL(ScoreAttrib);
}

//========================================================================================
USER_MSG_INTERCEPT(ScoreInfo)
{
	updateLocalPlayer();

	BEGIN_READ(pbuf, iSize);
	int idx = READ_BYTE();
	PlayerInfo& r = vPlayers[idx];

	r.frags  = READ_SHORT();
	r.deaths = READ_SHORT();

	if(r.frags<=0 )   { r.ratio=0; }
	else              { r.ratio = (double)r.frags / ((r.deaths<=0)?1:r.deaths); }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色哟哟一区二区在线观看 | 久久中文娱乐网| 亚洲色图在线播放| 激情都市一区二区| 在线精品视频一区二区三四| 日韩欧美的一区| 日日夜夜精品视频免费| kk眼镜猥琐国模调教系列一区二区| 欧美日韩国产免费一区二区| 中文字幕制服丝袜一区二区三区| 日韩影视精彩在线| 欧美一a一片一级一片| 国产午夜精品一区二区三区视频| 99天天综合性| 成人av综合在线| 制服视频三区第一页精品| 亚洲国产成人在线| 日本三级亚洲精品| 色狠狠色狠狠综合| 一区二区欧美视频| 91久久国产综合久久| 欧美系列亚洲系列| 久久亚洲精华国产精华液| 亚洲一区二区三区不卡国产欧美| 精彩视频一区二区| 91国产免费观看| 欧美国产激情二区三区| 国产成人在线网站| 国产精品久久久久三级| 99久久婷婷国产综合精品| 国产免费观看久久| av亚洲精华国产精华精| 亚洲日本护士毛茸茸| 欧美日韩国产区一| 成人一区二区在线观看| 日韩高清国产一区在线| 日韩三级在线免费观看| 亚洲精品国产a| 欧洲精品一区二区三区在线观看| 午夜视黄欧洲亚洲| 久久久www免费人成精品| 欧洲一区在线观看| 国产福利精品一区二区| 亚洲成人精品影院| 成人av电影观看| 天天影视网天天综合色在线播放| 久久一日本道色综合| 日本高清视频一区二区| 免费成人在线影院| 日韩一级二级三级精品视频| 国产精品一卡二卡在线观看| 舔着乳尖日韩一区| 亚洲一区成人在线| 欧美日本一区二区| 99麻豆久久久国产精品免费优播| 国产一区二区三区免费看| 三级久久三级久久久| 亚洲bt欧美bt精品777| 91老司机福利 在线| 中文字幕成人在线观看| 久久青草欧美一区二区三区| 欧美一区午夜视频在线观看| 7777女厕盗摄久久久| 欧美人体做爰大胆视频| 欧美日韩高清一区二区| 欧美日韩夫妻久久| 4438亚洲最大| 91精品国产综合久久久久久漫画| 欧美日韩www| 日韩一本二本av| 555www色欧美视频| 日本精品一级二级| 欧美精品亚洲一区二区在线播放| 欧美无乱码久久久免费午夜一区| 欧美色网一区二区| 精品久久久三级丝袜| 日韩午夜中文字幕| 久久精品一区蜜桃臀影院| 国产色91在线| 亚洲国产精品成人综合| 亚洲乱码国产乱码精品精小说| 亚洲成人www| 黄页网站大全一区二区| 91影视在线播放| 91麻豆精品91久久久久同性| 国产亚洲欧美中文| 亚洲成人av一区| 91亚洲午夜精品久久久久久| 欧美人伦禁忌dvd放荡欲情| 久久久www成人免费无遮挡大片| 国产精品拍天天在线| 亚洲成人综合网站| fc2成人免费人成在线观看播放| 欧美系列一区二区| 亚洲视频 欧洲视频| 国产精品亚洲а∨天堂免在线| 色系网站成人免费| 中文字幕不卡的av| 日本成人在线网站| 国产麻豆精品theporn| 欧美精三区欧美精三区| 中文成人综合网| 美女视频黄久久| 91精品国产色综合久久不卡蜜臀| 日韩理论片在线| 在线观看视频91| 欧美一二三区在线观看| 国产精品久久久久久久久免费相片 | 中文字幕一区免费在线观看| 国产主播一区二区三区| 精品国内二区三区| 国产精品亚洲专一区二区三区| 精品国产乱码久久久久久免费 | 中文字幕va一区二区三区| 成人性生交大片免费看中文 | 午夜精品久久久久久久| 欧美色图片你懂的| 天天色图综合网| 91精品国产欧美一区二区18| 蜜桃精品在线观看| 精品99久久久久久| 成人h动漫精品一区二| 亚洲高清视频中文字幕| 日韩精品一区国产麻豆| 成人夜色视频网站在线观看| 一区二区三区在线播| 91精品国产一区二区三区香蕉| 另类小说综合欧美亚洲| 国产精品不卡一区| 91精品国产综合久久国产大片 | 日韩国产成人精品| 国产精品国模大尺度视频| 91视视频在线观看入口直接观看www | 一区二区三区在线视频播放| 国产成人啪午夜精品网站男同| 337p日本欧洲亚洲大胆色噜噜| 亚洲一区二区视频| 亚洲精品一二三| 欧美韩日一区二区三区四区| 欧美性猛交xxxx乱大交退制版| 亚洲第一二三四区| 欧美精品一区二区三区蜜桃视频| 久久精品人人做| 韩国精品一区二区| 亚洲精品成人天堂一二三| 色噜噜偷拍精品综合在线| 亚洲一区二区av电影| 欧美一区二区在线免费观看| 中文字幕一区在线观看视频| 欧美亚一区二区| 亚洲欧美在线另类| 色av成人天堂桃色av| 亚洲综合免费观看高清完整版| 激情综合五月婷婷| 久久久久国产精品免费免费搜索| 国产麻豆视频一区| 国产精品国产a| 日韩精品一区二区三区四区| 色av一区二区| 懂色av一区二区三区免费观看 | 亚洲欧美日韩小说| 国产欧美日韩不卡| 亚洲男人都懂的| 一区二区三区不卡视频在线观看| 国产精品免费久久| 一区二区在线观看不卡| 日韩一区欧美二区| 国产精品一品二品| 91久久精品一区二区| 91精品国产福利| 国产精品美女久久久久久久久久久| 1000部国产精品成人观看| 日韩国产在线一| 不卡一区二区三区四区| 91精品国产91综合久久蜜臀| 久久久久久久综合日本| 亚洲精品v日韩精品| 久久99国产精品久久| 色88888久久久久久影院按摩 | 男女男精品网站| 97久久超碰精品国产| 久久众筹精品私拍模特| 五月天激情综合| 欧美在线短视频| 亚洲人一二三区| 成人高清免费在线播放| 国产一区二区在线视频| 日本韩国欧美在线| 欧美国产乱子伦| 狠狠色狠狠色综合| 91麻豆精品国产91久久久 | 国产乱一区二区| 日韩免费电影一区| 日韩精品一二三四| 欧美午夜精品免费| 亚洲成人免费在线| 欧美日韩一区二区三区四区| 依依成人精品视频| 欧美撒尿777hd撒尿| 亚洲一区二区三区四区在线免费观看|