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

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

?? bind.cpp

?? 我對他如何控制準星、顯示敵友很好奇
?? CPP
字號:
// 
// Online Game Cheats Client.dll hook
// Copyright (c) system   2001-2002
// Copyright (c) bunny771 2001-2002
// 
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
// 
// NOTE:
// GNU license doesn't cover Engine directory.
// Content of Engine directory is copyrighted (c) 1999, 2000, by Valve LLC
// and it is licensed under Valve's proprietary license (see original HL SDK).
// 

#pragma warning (disable:4786) // vc++ stl "truncated browser info"
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <vector>
#include <string>
#include <fstream>
#include "cvar.h"
#include "bind.h"
#include "console.h"
using namespace std;

#include "interpreter.h"
extern bool bIsHooked;

//========================================================================================
KeyBindManager keyBindManager;

void Con_Echo(const char *fmt, ... );
string getOgcDirFile(const char* basename);
bool gMenuActive();
void func_menu_select();
void func_menu_back  ();
void func_menu_up    ();
void func_menu_down  ();


//========================================================================================
static int getConsoleExtraCode( int scancode )
{
	switch(scancode)
	{
	case 14:  return -1;   // backspace
	case 28:  return '\n'; // enter
	case 57:  return ' ';  // space 
	case 172: return -2;   // uparrow
	case 180: return -3;   // downarrow
	case 175: return -4;   // leftarrow
	case 177: return -5;   // rightarrow
	default:  return  0;   // 0= not found
	}
}


//========================================================================================
bool KeyBindManager::keyBlocked(int scancode,bool down)
{
	if( (con_visible && con_visible()) || messageMode ) return false;

	const char* name = keyNames[scancode].c_str();
	if( !*name ){ return false; }

	if( gConsole.active && down )
	{
		if( !name[1] && name[0]!='~' )      return true; // alpha-numeric keys
		if( getConsoleExtraCode(scancode) ) return true; // extra keys
	}

	const char* keyname = keyNames[scancode].c_str();
	return myBind.find(keyname) ;
}


//========================================================================================
bool KeyBindManager::keyBlocked(const char* name)
{
	bool block = myBind.find(name);
	return block||gMenuActive();
}

//========================================================================================
void KeyBindManager::remapKey(char* from, char* to)
{
	int scancode_from = -1;
	int scancode_to   = -1;

	for(int i=0;i<256;i++)
	{
		if( !strcmp(from,keyNames[i].c_str()) ){ scancode_from = i; }
		if( !strcmp(to  ,keyNames[i].c_str()) ){ scancode_to   = i; }
	}
	
	keyRemapTable[scancode_from] = scancode_to;
}


//========================================================================================
void KeyBindManager::expandCommand(string& expand,bool down)
{
	if(expand[0]=='+')
	{
		if(down){
			CallBack_Execute(expand);
		}else {
			expand[0]='-';
			CallBack_Execute(expand);
			expand[0]='+';
		}
	}
	else if( (expand[0]=='.'||expand[0]=='#') && expand[1]=='+' )
	{
		if(down){
			CallBack_Execute(expand);
		}else {
			expand[1]='-';
			CallBack_Execute(expand);
			expand[1]='+';
		}
	}
	else
	{
		if(down) { CallBack_Execute(expand); }
	}
}

//========================================================================================
void KeyBindManager::notifyKeyEvent(int scancode,bool down,bool repeat)
{
	const char* keyname = keyNames[scancode].c_str();

	if(!*keyname ) 
		return;
	
	if( !keyname[1] && down && (messageMode || (con_visible && con_visible()))  )
		return;

	if( gConsole.active && down && bIsHooked)
	{ 
		if( !keyname [1] && keyname [0]!='~' )
		{
			int code = keyname [0];
			if( GetAsyncKeyState(VK_SHIFT) )
			{
				code = shiftRemap[code];
			}
			if(CallBack_ConType) CallBack_ConType(code);
			return;
		} else {
			int extra = getConsoleExtraCode(scancode);
			if (extra && CallBack_ConType) CallBack_ConType(extra);
		}
	}

	if(myBind.find(keyname) && !repeat)
	{
		string& expand = myBindExpand[myBind.num];
		expandCommand(expand,down);
	}
}

//========================================================================================
void KeyBindManager::save()
{
	ofstream ofs(getOgcDirFile("bind.cfg").c_str());
	if(!ofs){ Con_Echo("&rcannot save bind.cfg"); return; }
	ofs<<"// this file is generated automatically. do not edit!"<<endl;

	for(myBind.it_start();myBind.it_running();myBind.it_next())
	{
		string& value = myBindExpand[myBind.num];
		ofs << "bind " << myBind.str << " \"" << value << "\"\x0D\x0A";
	}
}


//========================================================================================
void KeyBindManager::notifyMouseEvent(char* name,bool down)
{
	if(!bIsHooked) return;

	if(gMenuActive())
	{
		if(!strcmp(name,"mouse1"     )) { if(down)func_menu_select(); return; } else
		if(!strcmp(name,"mouse2"     )) { if(down)func_menu_back  (); return; } else
		if(!strcmp(name,"mwheelup"   )) { if(down)func_menu_up    (); return; } else
		if(!strcmp(name,"mwheeldown" )) { if(down)func_menu_down  (); return; } 
	}
	
	if(myBind.find(name))
	{
		string& expand = myBindExpand[myBind.num];
		expandCommand(expand,down);
	}
}

//========================================================================================
inline static void lowercase(char* str)
{
	while(*str){ *str = tolower(*str); ++str; }
}

//========================================================================================
void KeyBindManager::addBind(char* key, char* value)
{
	if(!*key)
	{
		Con_Echo("valid keys: ");
		string line;
		for(int i=0;i<256;i++)
		{ 
			string& name = keyNames[i];
			if(!name.empty())
			{ 
				line += " [";
				line += name;
				line += "] ";
			}
			if(line.size()>50)
			{
				Con_Echo(line.c_str());
				line.erase();
			}
		}
		Con_Echo(" [mouse1] [mouse2] [mouse3]");
		Con_Echo(" [mouse4] [mouse5] [mwheelup] [mwheeldown]");
		return;
	}

	lowercase(key);
	if(myBind.find(key))
	{
		string& expand = myBindExpand[myBind.num];
		if(*value)
		{
			expand = value; 
		} else {
			Con_Echo( "&w%s&a is bound to &w\"%s\"",key,expand.c_str() );
		}
	} else {
		
		bool found = false;
		for(int i=0;i<256;i++)if(keyNames[i]==key) {found=true;break;}
		if(    !strcmp(key,"mouse1")   || !strcmp(key,"mouse2") || !strcmp(key,"mouse3") 
			|| !strcmp(key,"mouse4")   || !strcmp(key,"mouse5") 
			|| !strcmp(key,"mwheelup") || !strcmp(key,"mwheeldown") )
		{
			found = true;
		}

		if(found)
		{
			if(*value)
			{
				int index = myBindExpand.size();
				myBindExpand.push_back(value);
				myBind.add(key,index);
			} else {
				Con_Echo("&w%s&a is not bound",key);
			}
		} else {
			Con_Echo( "&w%s&a is not a valid key.\n",key);
		}
	}
}

//========================================================================================
void KeyBindManager::removeBind(char* key)
{
	myBind.erase(key);
}

//========================================================================================
void KeyBindManager::init()
{
	int i;
	for(i=0;i<256;i++)keyRemapTable[i]=i;

	keyNames[2]  = "1";keyNames[3]  = "2";keyNames[4]  = "3";keyNames[5]  = "4";keyNames[6]  = "5";
	keyNames[7]  = "6";keyNames[8]  = "7";keyNames[9]  = "8";keyNames[10] = "9";keyNames[11] = "0";
	keyNames[12] = "-";keyNames[13] = "=";keyNames[16] = "q";keyNames[17] = "w";keyNames[18] = "e";
	keyNames[19] = "r";keyNames[20] = "t";keyNames[21] = "y";keyNames[22] = "u";keyNames[23] = "i";
	keyNames[24] = "o";keyNames[25] = "p";keyNames[26] = "[";keyNames[27] = "]";keyNames[30] = "a";
	keyNames[31] = "s";keyNames[32] = "d";keyNames[33] = "f";keyNames[34] = "g";keyNames[35] = "h";
	keyNames[36] = "j";keyNames[37] = "k";keyNames[38] = "l";keyNames[39] = ";";keyNames[40] = "'";
	keyNames[43] = "\\";keyNames[44]= "z";keyNames[45] = "x";keyNames[46] = "c";keyNames[47] = "v";
	keyNames[48] = "b";keyNames[49] = "n";keyNames[50] = "m";keyNames[51] = ",";keyNames[52] = ".";
	keyNames[53] = "/";keyNames[55] = "*";
	keyNames[59] = "f1";keyNames[60] = "f2";keyNames[61] = "f3";keyNames[62] = "f4";keyNames[63] = "f5";
	keyNames[64] = "f6";keyNames[65] = "f7";keyNames[66] = "f8";keyNames[67] = "f9";keyNames[68] = "f10";
	keyNames[14] = "backspace";   keyNames[15] = "tab";          keyNames[28] = "enter";
	keyNames[29] = "ctrl";        keyNames[42] = "shift";        keyNames[54] = "rshift";
	keyNames[56] = "alt";         keyNames[57] = "space";        keyNames[58] = "capslock";
	keyNames[69] = "pause";       keyNames[71] = "kp_home";      keyNames[72] = "kp_uparrow";
	keyNames[73] = "kp_pgup";     keyNames[74] = "kp_minus";     keyNames[75] = "kp_leftarrow";
	keyNames[76] = "kp_5";        keyNames[77] = "kp_rightarrow";keyNames[78] = "kp_plus";
	keyNames[79] = "kp_end";      keyNames[80] = "kp_downarrow"; keyNames[81] = "kp_pgdn";
	keyNames[82] = "kp_ins";      keyNames[83] = "kp_del";       keyNames[87] = "f11";
	keyNames[88] = "f12";         keyNames[153] = "kp_slash";    keyNames[171] = "home";
	keyNames[172] = "uparrow";    keyNames[173] = "pgup";        keyNames[174] = "minus";
	keyNames[175] = "leftarrow";  keyNames[176] = "kp2_5";       keyNames[177] = "rightarrow";
	keyNames[178] = "plus";       keyNames[179] = "end";         keyNames[180] = "downarrow";
	keyNames[181] = "pgdn";       keyNames[182] = "ins";         keyNames[183] = "del";

	for(i=0;i<=255;i++)  shiftRemap[i] = toupper((char)i);
	shiftRemap['1'] = '!';shiftRemap['2'] = '@';shiftRemap['3'] = '#';shiftRemap['4'] = '$';
	shiftRemap['5'] = '%';shiftRemap['6'] = '^';shiftRemap['7'] = '&';shiftRemap['8'] = '*';
	shiftRemap['9'] = '(';shiftRemap['0'] = ')';shiftRemap['/'] = '?';shiftRemap['-'] = '_';
	shiftRemap['='] = '+';shiftRemap[';'] = ':';shiftRemap['\''] = '\"';
}


//========================================================================================
void  remapScancodes(LPMSG lpMsg)
{
	int scancode = (lpMsg->lParam>>16)&0xFF;
	scancode = keyBindManager.remapScanCode(scancode);
	lpMsg->lParam &=  0xFF00FFFF;
	lpMsg->lParam +=  (scancode<<16);
}


//========================================================================================
int getScanCode_FixMessage(LPMSG lpMsg)
{
	int scancode = (lpMsg->lParam>>16)&0xFF;
	scancode = keyBindManager.remapScanCode(scancode);
	lpMsg->lParam &=  0xFF00FFFF;
	lpMsg->lParam +=  (scancode<<16);

	if(lpMsg->lParam&(1<<24)) scancode += 100;

	return scancode;
}



//========================================================================================
typedef BOOL    (WINAPI *GetMessageFunc )(LPMSG,HWND,UINT,UINT);
BOOL WINAPI newGetMessage(
  LPMSG lpMsg,         // address of structure with message
  HWND hWnd,           // handle of window
  UINT wMsgFilterMin,  // first message
  UINT wMsgFilterMax   // last message
  )
{
	extern GetMessageFunc origGetMessage;

	BOOL ret =   origGetMessage(lpMsg,hWnd,wMsgFilterMin,wMsgFilterMax);

	int msg = lpMsg->message;
	if(msg>=WM_KEYFIRST && msg<=WM_KEYLAST)
	{

		if( msg==WM_KEYDOWN || msg==WM_SYSKEYDOWN) 
		{
			int scancode = getScanCode_FixMessage(lpMsg);

			if(keyBindManager.keyBlocked(scancode,true))  lpMsg->message=WM_CUT; // return a useless message

			if( !(lpMsg->lParam&0x40000000) )
			{
				keyBindManager.notifyKeyEvent(scancode,true,false);
			} else {
				keyBindManager.notifyKeyEvent(scancode,true,true);
			}
			
			if(scancode==28){ keyBindManager.messageMode=false; }
		}
		else if(msg==WM_KEYUP || msg==WM_SYSKEYUP) 
		{
			int scancode = getScanCode_FixMessage(lpMsg);

			if(keyBindManager.keyBlocked(scancode,false))  lpMsg->message=WM_CUT; // return a useless message

			keyBindManager.notifyKeyEvent(scancode,false);
		}
	}
	else if(msg>=WM_MOUSEFIRST && msg<=WM_MOUSELAST)
	{
		char* name="";
		bool  down=true;
		short zDelta = 0;
		short butPress = 0;

		switch(msg)
		{
		case WM_LBUTTONDBLCLK:
		case WM_LBUTTONDOWN: name = "mouse1"; down=true ;break;
		case WM_RBUTTONDBLCLK:
		case WM_RBUTTONDOWN: name = "mouse2"; down=true ;break;
		case WM_MBUTTONDBLCLK:
		case WM_MBUTTONDOWN: name = "mouse3"; down=true ;break;
		case WM_LBUTTONUP  : name = "mouse1"; down=false;break;
		case WM_RBUTTONUP  : name = "mouse2"; down=false;break;
		case WM_MBUTTONUP  : name = "mouse3"; down=false;break;
		
		// mouse4/mouse5 support from joolz-ogc 1.42
		// don't know if it works. I only have a 3-button mouse...
		case WM_XBUTTONDBLCLK:
		case WM_XBUTTONDOWN:
			butPress = GET_XBUTTON_WPARAM(lpMsg->wParam);
			if (butPress == XBUTTON1) name = "mouse4";
			else                      name = "mouse5";
			down = true;
			break;

		case WM_XBUTTONUP:
			butPress = GET_XBUTTON_WPARAM(lpMsg->wParam);
			if (butPress == XBUTTON1) name = "mouse4";
			else                      name = "mouse5";
			down = false;
			break;

		case WM_MOUSEWHEEL :
			zDelta = GET_WHEEL_DELTA_WPARAM(lpMsg->wParam);
			down   = true;
			if(zDelta>0) name = "mwheelup";
			else         name = "mwheeldown";
			if(keyBindManager.keyBlocked(name))lpMsg->message=WM_CUT; 
			break;		

		}
		if( *name )
		{
			keyBindManager.notifyMouseEvent(name,down);
		}

		// note: this is needed, as the HL engine evaluates the bit changes
		//    in wParam for WM_MOUSEMOVE messages rather than WM_BUTTONUP.
		//    blocking bound keys is necessary so no hl binds get executed
		//    wbwg anticheat binds unbound keys to e.g. "useunbound mouse3"
		//    to notify the admin of unbound key usage. thus the need to block them.
		if(keyBindManager.keyBlocked("mouse1")) { lpMsg->wParam &= (~MK_LBUTTON);  }
		if(keyBindManager.keyBlocked("mouse2")) { lpMsg->wParam &= (~MK_RBUTTON);  }
		if(keyBindManager.keyBlocked("mouse3")) { lpMsg->wParam &= (~MK_MBUTTON);  }
		if(keyBindManager.keyBlocked("mouse4")) { lpMsg->wParam &= (~MK_XBUTTON1); }
		if(keyBindManager.keyBlocked("mouse5")) { lpMsg->wParam &= (~MK_XBUTTON2); }
	}
	return ret;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久岛一牛影视| 欧美做爰猛烈大尺度电影无法无天| 丰满白嫩尤物一区二区| 欧美一区二区免费| 亚洲国产精品视频| 欧美欧美欧美欧美| 亚洲一区在线视频| 欧美自拍丝袜亚洲| 亚洲一区二区成人在线观看| 精品中文字幕一区二区| 欧美日韩精品是欧美日韩精品| 亚洲一级电影视频| 欧美日韩国产综合草草| 亚洲国产欧美日韩另类综合| 欧美日韩一区三区| 亚洲成a人在线观看| 91精品国产综合久久久久久漫画| 日日夜夜免费精品| 色欧美88888久久久久久影院| 国产女同互慰高潮91漫画| 成人午夜精品一区二区三区| 亚洲欧洲精品一区二区精品久久久 | 欧美日本精品一区二区三区| 国产精品久久夜| 色婷婷精品久久二区二区蜜臂av | 成人av电影在线播放| 欧美精品第1页| 久久国内精品视频| 2023国产精品视频| 91一区二区在线| 亚洲电影在线播放| 欧美色欧美亚洲另类二区| 蜜桃av一区二区三区电影| 久久亚洲一区二区三区四区| 成人激情免费电影网址| 亚洲乱码精品一二三四区日韩在线| 在线免费观看一区| 日韩在线观看一区二区| 欧美日韩免费在线视频| 亚洲h在线观看| 久久无码av三级| 色一情一伦一子一伦一区| 日韩黄色在线观看| 久久精品人人做人人爽人人| 色婷婷香蕉在线一区二区| 免费人成黄页网站在线一区二区| 中文字幕乱码日本亚洲一区二区| 91久久精品午夜一区二区| 另类综合日韩欧美亚洲| 日韩理论片中文av| 日韩欧美国产系列| 色综合 综合色| 麻豆成人在线观看| 亚洲欧洲综合另类| 日韩精品中午字幕| 从欧美一区二区三区| 日韩高清不卡在线| 中文字幕一区二区三区在线播放 | 亚洲大片精品永久免费| 欧美精品日韩综合在线| 成人精品国产免费网站| 亚洲高清免费视频| 中文字幕免费不卡在线| 欧美一区二区三区性视频| 99国产欧美另类久久久精品| 日韩电影在线免费看| 亚洲伦理在线免费看| 久久久久国产精品厨房| 欧美丰满一区二区免费视频 | 精品国产免费视频| 岛国精品在线播放| 久久久久久久精| 欧美日韩精品福利| 床上的激情91.| 国产一区二区三区av电影 | 亚洲一二三区视频在线观看| 久久久99久久| 精品国产自在久精品国产| 欧美午夜精品久久久久久孕妇 | 国产麻豆午夜三级精品| 亚洲午夜一二三区视频| 日韩一区日韩二区| 中文天堂在线一区| 久久久久国产精品厨房| 精品久久久久久久久久久久久久久久久| 色欧美片视频在线观看| www.66久久| 国产成+人+日韩+欧美+亚洲| 天堂va蜜桃一区二区三区| 一二三区精品福利视频| 一区二区三区在线视频观看| 亚洲欧美视频在线观看| 亚洲色图制服丝袜| 中文字幕在线观看不卡| 亚洲国产高清aⅴ视频| 国产精品五月天| 中文乱码免费一区二区| 欧美va亚洲va香蕉在线| 久久综合999| 久久久国产午夜精品 | 亚洲sss视频在线视频| 国产精品情趣视频| 成人免费一区二区三区在线观看| 国产精品国产三级国产普通话99| 国产精品视频九色porn| 国产精品三级久久久久三级| 中文字幕一区日韩精品欧美| 亚洲免费观看在线观看| 国产精品久久久久久久久快鸭| 中文字幕一区二区三区在线观看| 亚洲欧洲综合另类| 午夜精品在线看| 久久爱www久久做| 国产成人av影院| 懂色av噜噜一区二区三区av| a亚洲天堂av| 欧美日韩一区 二区 三区 久久精品| 欧美日韩精品高清| 精品久久久久久久久久久久久久久| 3d成人h动漫网站入口| 日韩欧美的一区| 亚洲日本青草视频在线怡红院| 日本欧美肥老太交大片| 99天天综合性| 欧美电影免费提供在线观看| 国产精品进线69影院| 蜜臀91精品一区二区三区| 91丝袜国产在线播放| 久久亚洲二区三区| 亚洲成av人片在线观看无码| caoporm超碰国产精品| 精品国产一区二区在线观看| 亚洲国产aⅴ天堂久久| 国产一区二区三区不卡在线观看| 欧美日韩亚洲另类| 国产精品久久久久久久久动漫 | 日韩欧美一级精品久久| 一区二区三区在线免费视频| 国产成人av电影在线| 欧美一区二区三区免费在线看| 亚洲卡通欧美制服中文| 国产成人三级在线观看| 日韩精品中文字幕在线一区| 亚洲午夜日本在线观看| 色狠狠av一区二区三区| 国产精品久久久久久久久动漫| 国产麻豆日韩欧美久久| 欧美xxxx在线观看| 日韩专区中文字幕一区二区| 欧美性受xxxx黑人xyx性爽| 中文字幕在线播放不卡一区| 国产成人无遮挡在线视频| 久久午夜国产精品| 激情另类小说区图片区视频区| 欧美一区二区三区成人| 视频在线在亚洲| 欧美高清你懂得| 日韩av网站免费在线| 91超碰这里只有精品国产| 亚洲r级在线视频| 欧美日韩1234| 午夜视频久久久久久| 欧美日韩另类一区| 日韩高清电影一区| 欧美一区二区视频在线观看| 免费人成黄页网站在线一区二区| 91精品国产综合久久精品| 视频一区二区三区入口| 欧美一区二区三区婷婷月色| 日本视频一区二区三区| 日韩欧美综合一区| 狠狠色丁香婷婷综合久久片| 久久久久久99久久久精品网站| 高清不卡在线观看| 综合色中文字幕| 在线观看视频一区| 亚洲va欧美va国产va天堂影院| 久久久99免费| 国产在线视频一区二区三区| 久久久综合网站| 成人永久免费视频| 亚洲精选视频在线| 欧美绝品在线观看成人午夜影视| 日本中文字幕不卡| 久久亚洲影视婷婷| 91社区在线播放| 午夜久久久久久| 久久久久久久久伊人| av在线免费不卡| 午夜精品爽啪视频| 久久蜜桃av一区二区天堂| 成人激情av网| 亚洲自拍另类综合| 欧美成人一区二区三区| 福利电影一区二区| 亚洲h精品动漫在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 波多野结衣91| 香港成人在线视频| 日本一区二区在线不卡|