dotadota1哪个平台人多提程序简单谁玩过啊?

简易Dota改键外挂程序制作
转载 & & 作者:
利用全局钩子制作一个个性化的dota游戏改键功能,大家可以参考使用
代码如下:// FileName: add.cpp
#include &Windows.h&
/* 定义全局变量 */HWND g_hwnd = NULL;HHOOK g_hKeyboard = NULL;
// 设置数据段#pragma data_seg("MySec")static WORD g_keyNum[6]={0};&&&&&&& // 只有初始化过的才能用static int g_signed = 0;#pragma data_seg()& #pragma comment( linker,"/section:MySec,RWS" )
LRESULT CALLBACK KeyboardProc(&&& int code,&&&&&& // hook code&&& WPARAM wParam,& // virtual-key code&&& LPARAM lParam&& // keystroke-message information&&& ){&&& for(int j=0; j&6; j++)&&& {&&&&&&& if(wParam==g_keyNum[j] && !(lParam&&31) )&&&&&&& {&&&&&&&&&&& switch(j)&&&&&&&&&&& {&&&&&&&&&&& case 0: keybd_event(VK_NUMPAD1,0,KEYEVENTF_EXTENDEDKEY,0); keybd_event(VK_NUMPAD1,0,KEYEVENTF_KEYUP,0); return 1;&&&&&&&&&&& case 1: keybd_event(VK_NUMPAD2,0,KEYEVENTF_EXTENDEDKEY,0); keybd_event(VK_NUMPAD2,0,KEYEVENTF_KEYUP,0); return 1;&&&&&&&&&&& case 2: keybd_event(VK_NUMPAD4,0,KEYEVENTF_EXTENDEDKEY,0); keybd_event(VK_NUMPAD4,0,KEYEVENTF_KEYUP,0); return 1;&&&&&&&&&&& case 3: keybd_event(VK_NUMPAD5,0,KEYEVENTF_EXTENDEDKEY,0); keybd_event(VK_NUMPAD5,0,KEYEVENTF_KEYUP,0); return 1;&&&&&&&&&&& case 4: keybd_event(VK_NUMPAD7,0,KEYEVENTF_EXTENDEDKEY,0); keybd_event(VK_NUMPAD7,0,KEYEVENTF_KEYUP,0); return 1;&&&&&&&&&&& case 5: keybd_event(VK_NUMPAD8,0,KEYEVENTF_EXTENDEDKEY,0); keybd_event(VK_NUMPAD8,0,KEYEVENTF_KEYUP,0); return 1;&&&&&&&&&&& }&&&&&&& }&&& }&&& return CallNextHookEx(g_hKeyboard,code,wParam,lParam);}_declspec(dllexport) void SetHook (WORD KeyNum[]){&&& for(int i=0; i&6; i++)&&& {&&&&&&& g_keyNum[i] = KeyNum[i];&&& }&&& g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle(L"DLL.dll"),0);}
_declspec(dllexport) void DelHook (){&&& UnhookWindowsHookEx(g_hKeyboard);&&& g_hKeyboard = NULL;}
主程序部分:
代码如下:// DotaDlg.cpp : 实现文件//
#include "stdafx.h"#include "Dota.h"#include "DotaDlg.h"#include "afxdialogex.h"
#pragma comment(lib, "DLL.lib")
#ifdef _DEBUG#define new DEBUG_NEW#endif
/* 全局变量 */CDotaDlg * g_pt = NULL;
/* 记录输入框是否有焦点 */bool g_signNum[6] = {false};/* 记录按下键的编码 */WORD g_nkey[6] = {0};/* 按键表 */CString g_szkeyboard[200];
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialogEx{public:&&& CAboutDlg();
// 对话框数据&&& enum { IDD = IDD_ABOUTBOX };
&&& protected:&&& virtual void DoDataExchange(CDataExchange* pDX);&&& // DDX/DDV 支持
// 实现protected:&&& DECLARE_MESSAGE_MAP()};
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD){}
void CAboutDlg::DoDataExchange(CDataExchange* pDX){&&& CDialogEx::DoDataExchange(pDX);}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()
// CDotaDlg 对话框
CDotaDlg::CDotaDlg(CWnd* pParent /*=NULL*/)&&& : CDialogEx(CDotaDlg::IDD, pParent)&&& , m_num7(_T(""))&&& , m_num8(_T(""))&&& , m_num4(_T(""))&&& , m_num1(_T(""))&&& , m_num2(_T(""))&&& , m_num5(_T("")){&&& m_hIcon = AfxGetApp()-&LoadIcon(IDR_MAINFRAME);}
void CDotaDlg::DoDataExchange(CDataExchange* pDX){&&& CDialogEx::DoDataExchange(pDX);&&& DDX_Text(pDX, IDC_EDIT_NUM7, m_num7);&&& DDV_MaxChars(pDX, m_num7, 1);&&& DDX_Text(pDX, IDC_EDIT_NUM8, m_num8);&&& DDV_MaxChars(pDX, m_num8, 1);&&& DDX_Text(pDX, IDC_EDIT_NUM4, m_num4);&&& DDV_MaxChars(pDX, m_num4, 1);&&& DDX_Text(pDX, IDC_EDIT_NUM1, m_num1);&&& DDV_MaxChars(pDX, m_num1, 1);&&& DDX_Text(pDX, IDC_EDIT_NUM2, m_num2);&&& DDV_MaxChars(pDX, m_num2, 1);&&& DDX_Text(pDX, IDC_EDIT_NUM5, m_num5);&&& DDV_MaxChars(pDX, m_num5, 1);}
BEGIN_MESSAGE_MAP(CDotaDlg, CDialogEx)&&& ON_WM_SYSCOMMAND()&&& ON_WM_PAINT()&&& ON_WM_QUERYDRAGICON()&&& ON_BN_CLICKED(IDC_BUTTON_EXIT, &CDotaDlg::OnBnClickedButtonExit)&&& ON_EN_SETFOCUS(IDC_EDIT_NUM7, &CDotaDlg::OnEnSetfocusEditNum7)&&& ON_WM_DESTROY()&&& ON_EN_KILLFOCUS(IDC_EDIT_NUM7, &CDotaDlg::OnEnKillfocusEditNum7)&&& ON_EN_SETFOCUS(IDC_EDIT_NUM8, &CDotaDlg::OnEnSetfocusEditNum8)&&& ON_EN_KILLFOCUS(IDC_EDIT_NUM8, &CDotaDlg::OnEnKillfocusEditNum8)&&& ON_EN_SETFOCUS(IDC_EDIT_NUM4, &CDotaDlg::OnEnSetfocusEditNum4)&&& ON_EN_KILLFOCUS(IDC_EDIT_NUM4, &CDotaDlg::OnEnKillfocusEditNum4)&&& ON_EN_SETFOCUS(IDC_EDIT_NUM5, &CDotaDlg::OnEnSetfocusEditNum5)&&& ON_EN_KILLFOCUS(IDC_EDIT_NUM5, &CDotaDlg::OnEnKillfocusEditNum5)&&& ON_EN_SETFOCUS(IDC_EDIT_NUM1, &CDotaDlg::OnEnSetfocusEditNum1)&&& ON_EN_KILLFOCUS(IDC_EDIT_NUM1, &CDotaDlg::OnEnKillfocusEditNum1)&&& ON_EN_SETFOCUS(IDC_EDIT_NUM2, &CDotaDlg::OnEnSetfocusEditNum2)&&& ON_EN_KILLFOCUS(IDC_EDIT_NUM2, &CDotaDlg::OnEnKillfocusEditNum2)&&& ON_WM_TIMER()&&& ON_BN_CLICKED(IDC_BUTTON_HIDE, &CDotaDlg::OnBnClickedButtonHide)&&& ON_MESSAGE(WM_SHOWTASK,OnShowTask)END_MESSAGE_MAP()
/* 局部钩子处理程序 */LRESULT CALLBACK KeyboardProc(&&& int code,&&&&&& // hook code&&& WPARAM wParam,& // virtual-key code&&& LPARAM lParam&& // keystroke-message information&&& ){&&& /* 按一个键时 */&&& if(wParam && !(lParam&&31))&&& {&&&&&&& //CS&&&&&&& //str.Format(L"%d", wParam);&&&&&&& //AfxMessageBox(str);&&&&&&& POINT&&&&&&& GetCaretPos(&point);
&&&&&&& for(int i=0; i&6; i++)&&&&&&& {&&&&&&&&&&& if(g_signNum[i])&&&&&&& // 且某个输入框有输入焦点&&&&&&&&&&& {&&&&&&&&&&&&&&& if(wParam != VK_BACK)&&& //且按下的 不是 退格键&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& switch(i)&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&& case 0: g_pt-&m_num1 = g_szkeyboard[wParam]; g_nkey[0]=wP g_pt-&UpdateData(FALSE);&&&&&&&&&&&&&&&&&&&&&&& case 1: g_pt-&m_num2 = g_szkeyboard[wParam]; g_nkey[1]=wP g_pt-&UpdateData(FALSE);&&&&&&&&&&&&&&&&&&&&&&& case 2: g_pt-&m_num4 = g_szkeyboard[wParam]; g_nkey[2]=wP g_pt-&UpdateData(FALSE);&&&&&&&&&&&&&&&&&&&&&&& case 3: g_pt-&m_num5 = g_szkeyboard[wParam]; g_nkey[3]=wP g_pt-&UpdateData(FALSE);&&&&&&&&&&&&&&&&&&&&&&& case 4: g_pt-&m_num7 = g_szkeyboard[wParam]; g_nkey[4]=wP g_pt-&UpdateData(FALSE);&&&&&&&&&&&&&&&&&&&&&&& case 5: g_pt-&m_num8 = g_szkeyboard[wParam]; g_nkey[5]=wP g_pt-&UpdateData(FALSE);&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& else&&&&&&& // 按下退格键删除以前的改键&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& switch(i)&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&& case 0: g_pt-&m_num1 = ""; g_nkey[0]=0; g_pt-&UpdateData(FALSE);&&&&&&&&&&&&&&&&&&&&&&& case 1: g_pt-&m_num2 = ""; g_nkey[1]=0; g_pt-&UpdateData(FALSE);&&&&&&&&&&&&&&&&&&&&&&& case 2: g_pt-&m_num4 = ""; g_nkey[2]=0; g_pt-&UpdateData(FALSE);&&&&&&&&&&&&&&&&&&&&&&& case 3: g_pt-&m_num5 = ""; g_nkey[3]=0; g_pt-&UpdateData(FALSE);&&&&&&&&&&&&&&&&&&&&&&& case 4: g_pt-&m_num7 = ""; g_nkey[4]=0; g_pt-&UpdateData(FALSE);&&&&&&&&&&&&&&&&&&&&&&& case 5: g_pt-&m_num8 = ""; g_nkey[5]=0; g_pt-&UpdateData(FALSE);&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&& }&&& }&&& //return CallNextHookEx(g_hook, code, wParam, lParam);&&& return 1;}
// CDotaDlg 消息处理程序
BOOL CDotaDlg::OnInitDialog(){&&& CDialogEx::OnInitDialog();
&&& // 将“关于...”菜单项添加到系统菜单中。
&&& // IDM_ABOUTBOX 必须在系统命令范围内。&&& ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);&&& ASSERT(IDM_ABOUTBOX & 0xF000);
&&& CMenu* pSysMenu = GetSystemMenu(FALSE);&&& if (pSysMenu != NULL)&&& {&&&&&&& BOOL bNameV&&&&&&& CString strAboutM&&&&&&& bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);&&&&&&& ASSERT(bNameValid);&&&&&&& if (!strAboutMenu.IsEmpty())&&&&&&& {&&&&&&&&&&& pSysMenu-&AppendMenu(MF_SEPARATOR);&&&&&&&&&&& pSysMenu-&AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);&&&&&&& }&&& }
&&& // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动&&& //& 执行此操作&&& SetIcon(m_hIcon, TRUE);&&&&&&&&&&& // 设置大图标&&& SetIcon(m_hIcon, FALSE);&&&&&&& // 设置小图标
&&& // TODO: 在此添加额外的初始化代码&&& SetTimer(1, 1000, NULL);&&&&&&& // 设置一个定时器&&& g_pt =&&& g_szkeyboard['0']="0";g_szkeyboard['1']="1";g_szkeyboard['2']="2";g_szkeyboard['3']="3";g_szkeyboard['4']="4";&&& g_szkeyboard['5']="5";g_szkeyboard['6']="6";g_szkeyboard['7']="7";g_szkeyboard['8']="8";g_szkeyboard['9']="9";&&& g_szkeyboard['A']="A";g_szkeyboard['B']="B";g_szkeyboard['C']="C";g_szkeyboard['D']="D";g_szkeyboard['E']="E";&&& g_szkeyboard['F']="F";g_szkeyboard['G']="G";g_szkeyboard['H']="H";g_szkeyboard['I']="I";g_szkeyboard['J']="J";&&& g_szkeyboard['K']="K";g_szkeyboard['L']="L";g_szkeyboard['M']="M";g_szkeyboard['N']="N";g_szkeyboard['O']="O";&&& g_szkeyboard['P']="P";g_szkeyboard['Q']="Q";g_szkeyboard['R']="R";g_szkeyboard['S']="S";g_szkeyboard['T']="T";&&& g_szkeyboard['U']="U";g_szkeyboard['V']="V";g_szkeyboard['W']="W";g_szkeyboard['X']="X";g_szkeyboard['Y']="Y";&&& g_szkeyboard['Z']="Z";&&& g_szkeyboard[144]="NUM LOCK";&&& g_szkeyboard[96]="NUM 0";g_szkeyboard[97]="NUM 1";g_szkeyboard[98]="NUM 2";g_szkeyboard[99]="NUM 3";g_szkeyboard[100]="NUM 4";&&& g_szkeyboard[101]="NUM 5";g_szkeyboard[102]="NUM 6";g_szkeyboard[103]="NUM 7";g_szkeyboard[104]="NUM 8";g_szkeyboard[105]="NUM 9";&&& g_szkeyboard[106]="NUM *";g_szkeyboard[107]="NUM +";g_szkeyboard[109]="NUM -";g_szkeyboard[110]="NUM DEL";g_szkeyboard[111]="NUM /";&&& g_szkeyboard[VK_F1]="F1";g_szkeyboard[VK_F2]="F2";g_szkeyboard[VK_F3]="F3";g_szkeyboard[VK_F4]="F4";g_szkeyboard[VK_F5]="F5";&&& g_szkeyboard[VK_F6]="F6";g_szkeyboard[VK_F7]="F7";g_szkeyboard[VK_F8]="F8";g_szkeyboard[VK_F9]="F9";g_szkeyboard[VK_F10]="F10";&&& g_szkeyboard[VK_F11]="F11";g_szkeyboard[VK_F12]="F12";&&& g_szkeyboard[VK_ESCAPE]="ESC";g_szkeyboard[VK_TAB]="TAB";g_szkeyboard[VK_CAPITAL]="Caps Lock";g_szkeyboard[192]="`";&&& g_szkeyboard[VK_SPACE]="Space";
&&& /* 安装局部钩子 */&&& g_hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, NULL, GetCurrentThreadId());
&&& ReadKeyNum();
&&& return TRUE;& // 除非将焦点设置到控件,否则返回 TRUE}
void CDotaDlg::OnSysCommand(UINT nID, LPARAM lParam){&&& if ((nID & 0xFFF0) == IDM_ABOUTBOX)&&& {&&&&&&& CAboutDlg dlgA&&&&&&& dlgAbout.DoModal();&&& }&&& else&&& {&&&&&&& CDialogEx::OnSysCommand(nID, lParam);&&& }}
// 如果向对话框添加最小化按钮,则需要下面的代码//& 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,//& 这将由框架自动完成。
void CDotaDlg::OnPaint(){&&& if (IsIconic())&&& {&&&&&&& CPaintDC dc(this); // 用于绘制的设备上下文
&&&&&&& SendMessage(WM_ICONERASEBKGND, reinterpret_cast&WPARAM&(dc.GetSafeHdc()), 0);
&&&&&&& // 使图标在工作区矩形中居中&&&&&&& int cxIcon = GetSystemMetrics(SM_CXICON);&&&&&&& int cyIcon = GetSystemMetrics(SM_CYICON);&&&&&&& CR&&&&&&& GetClientRect(&rect);&&&&&&& int x = (rect.Width() - cxIcon + 1) / 2;&&&&&&& int y = (rect.Height() - cyIcon + 1) / 2;
&&&&&&& // 绘制图标&&&&&&& dc.DrawIcon(x, y, m_hIcon);&&& }&&& else&&& {&&&&&&& CDialogEx::OnPaint();&&& }}
//当用户拖动最小化窗口时系统调用此函数取得光标//显示。HCURSOR CDotaDlg::OnQueryDragIcon(){&&& return static_cast&HCURSOR&(m_hIcon);}
BOOL CDotaDlg::PreTranslateMessage (MSG * pMsg){&&& switch(pMsg-&wParam)&&& {&&&&&&& case VK_ESCAPE:&&&&&&&&&&& // 屏蔽ESC键&&&&&&&&&&& return TRUE;&&& }&&& return CDialog::PreTranslateMessage(pMsg);}
void CDotaDlg::OnBnClickedButtonExit(){&&& //OnNotifyMsg();&&& SendMessage(WM_CLOSE);}
void CDotaDlg::OnDestroy(){&&& CDialogEx::OnDestroy();
&&& g_pt = NULL;&&& KillTimer(1);&&& /* 卸载钩子 */&&& UnhookWindowsHookEx(g_hook);}
void CDotaDlg::OnEnSetfocusEditNum7(){&&& g_signNum[4] =}
void CDotaDlg::OnEnKillfocusEditNum7(){&&& g_signNum[4] =}
void CDotaDlg::OnEnSetfocusEditNum8(){&&& g_signNum[5] =}
void CDotaDlg::OnEnKillfocusEditNum8(){&&& g_signNum[5] =}
void CDotaDlg::OnEnSetfocusEditNum4(){&&& g_signNum[2] =}
void CDotaDlg::OnEnKillfocusEditNum4(){&&& g_signNum[2] =}
void CDotaDlg::OnEnSetfocusEditNum5(){&&& g_signNum[3] =}
void CDotaDlg::OnEnKillfocusEditNum5(){&&& g_signNum[3] =}
void CDotaDlg::OnEnSetfocusEditNum1(){&&& g_signNum[0] =}
void CDotaDlg::OnEnKillfocusEditNum1(){&&& g_signNum[0] =}
void CDotaDlg::OnEnSetfocusEditNum2(){&&& g_signNum[1] =}
void CDotaDlg::OnEnKillfocusEditNum2(){&&& g_signNum[1] =}
_declspec(dllimport) void SetHook (WORD KeyNum[]);_declspec(dllimport) void DelHook ();
void CDotaDlg::OnTimer(UINT_PTR nIDEvent){&&& static int sign = 1;&&& HWND hwnd =&&& NULL;&&& hwnd = ::FindWindow(L"Warcraft III",0);&&&&&&&&&&& // 获得顶层窗口句柄&&& if(hwnd == ::GetForegroundWindow())&&&&&&&&&&&&&&& // 得到前台窗口句柄 &&& {&&&&&&& if(sign)&&&&&&& {&&&&&&& //MessageBox(L"找到目标进程了");&&&&&&& //DelHook();& &&&&&&&&&&& SetHook(g_nkey);&&& // 安装钩子。&&&&&&&&&&& sign = 0;&&&&&&& }&&& }&&& else&&& {&&&&&&& DelHook();&&&&&&& sign = 1;&&& }
&&& CDialogEx::OnTimer(nIDEvent);}
_declspec(dllimport) void SetHook (WORD KeyNum[]);void CDotaDlg::OnBnClickedButtonHide(){&&& //SetHook(g_nkey);&&& CStdioF&&& CS&&& CFileException mE&&& file.Open(L"Key.ini", CFile::modeCreate|CFile::modeReadWrite, &mExcept);&&& file.SeekToEnd();&&& str.Format(L"@%d--&1@\n@%d--&2@\n@%d--&4@\n@%d--&5@\n@%d--&7@\n@%d--&8@\n",&&&&&&& g_nkey[0], g_nkey[1], g_nkey[2], g_nkey[3], g_nkey[4], g_nkey[5]);&&& file.WriteString(str);&&& file.Close();
&&& NOTIFYICONDATA&&&
&&& nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);&&
&&& nid.hWnd=this-&m_hW&&&
&&& nid.uID=IDR_MAINFRAME;&&&
&&& nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;&&&
&&& nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称&&&
&&& nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
&&& wcscpy(nid.szTip, L"冬雪简易改键");&&& //信息提示条&&
&&& Shell_NotifyIcon(NIM_ADD,&nid);&&& //在托盘区添加图标&&&
&&& ShowWindow(SW_HIDE);&&& //隐藏主窗口}
void CDotaDlg::ReadKeyNum(void){&&& CStdioF&&& if(file.Open(L"Key.ini", CFile::modeRead))&&& {&&&&&&& CS&&&&&&& char buf[4];&&&&&&&&&&&&&& int j = 0;&&&&&&& memset(buf,0,4);&&&&&&& while(file.ReadString(buffer))&&&&&&& {&&&&&&&&&&& i = 0;&&&&&&&&&&& for(i=0; i&4; i++)&&&&&&&&&&& {&&&&&&&&&&&&&&& buf[i]=char(buffer.GetAt(1+i));&&&&&&&&&&&&&&& if(buf[i] == '-')&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&& buf[i] = '\0';&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&&&&&& g_nkey[j] = (WORD)atol(buf);&&&&&&&&&&& if(g_nkey[j])&&&&&&&&&&& {&&&&&&&&&&&&&&& switch(j)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&& case 0 : m_num1=g_szkeyboard[g_nkey[0]];&&&&&&&&&&&&&&& case 1 : m_num2=g_szkeyboard[g_nkey[1]];&&&&&&&&&&&&&&& case 2 : m_num4=g_szkeyboard[g_nkey[2]];&&&&&&&&&&&&&&& case 3 : m_num5=g_szkeyboard[g_nkey[3]];&&&&&&&&&&&&&&& case 4 : m_num7=g_szkeyboard[g_nkey[4]];&&&&&&&&&&&&&&& case 5 : m_num8=g_szkeyboard[g_nkey[5]];&&&&&&&&&&&&&&& }&&&&&&&&&&& }&&&&&&&&&&& j++;&&&&&&& }&&&&&&& UpdateData(FALSE);&&&&&&& file.Close();&&& }}
void CDotaDlg::ToTray(){&&
&&& NOTIFYICONDATA&&&
&&& nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);&&
&&& nid.hWnd=this-&m_hW&&&
&&& nid.uID=IDR_MAINFRAME;&&&
&&& nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;&&&
&&& nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称&&&
&&& nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));&&
&&& wcscpy(nid.szTip,L"冬雪简易改键");&&& //信息提示条&&
&&& Shell_NotifyIcon(NIM_ADD,&nid);&&& //在托盘区添加图标&&&
&&& ShowWindow(SW_HIDE);&&& //隐藏主窗口
LRESULT CDotaDlg::OnShowTask(WPARAM wParam,LPARAM lParam)&& {&&&& &&& if(wParam!=IDR_MAINFRAME)&&&&&&& &&&&&&& return 1;&&&&& &&& switch(lParam)&&&& &&& {&&&&&&&&&&& &&& case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”&&&&&& &&&&&&& {&&&&&&&& &&&&&&&&&&& LPPOINT lpoint= new tagPOINT;&&&&&&&& &&&&&&&&&&& ::GetCursorPos(lpoint);//得到鼠标位置&&&&&&&&& &&&&&&&&&&& CM&&&&&&&&&&&& &&&&&&&&&&& menu.CreatePopupMenu();//声明一个弹出式菜单&&&&&&&&& &&&&&&&&&&& //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已&&&&&&&&&&&& &&&&&&&&&&& //隐藏),将程序结束。&&&&&&&&&&& &&&&&&&&&&& menu.AppendMenu(MF_STRING,WM_DESTROY,L"关闭");& &&&&&&&&&&& //&&&&&&&&& menu.AppendMenu(MF_STRING,WM_DESTROY,"设置...");& &&&&&&&&&&& //确定弹出式菜单的位置&&&&&&&&&& &&&&&&&&&&& menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint-&x,lpoint-&y,this);&&&&&&& &&&&&&&&&&& //资源回收&&&&&&&&&&& &&&&&&&&&&& HMENU hmenu=menu.Detach();&&&&&&&&&&&&& &&&&&&&&&&& menu.DestroyMenu();&&&&&&&&&&&& &&&&&&&&&&&&&&&&&& &&&&&&& }&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&& case WM_LBUTTONDBLCLK://双击左键的处理&&&&&&& &&&&&&& {&&&&&&&&&&
&&&&&&&&&&& ShowWindow(SW_SHOWNORMAL);//简单的显示主窗口完事儿&& SW_SHOW则错误&
&&&&&&&&&&& //& this-&SetForegroundWindow(); // 置顶显示&&&&&&&&& &&&&&&&&&&& //~DeleteTray();&&&&&&& &&&&&&& }&&&&&&&&&&&& &&&&&&&&&&&&&&&& &&& default:&&&&&&&&&&&& &&&&&&&&&&&& &&& }&&&&& &&& return 0;& }还可参考
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具www7919威尼斯人_咸阳论坛
院领导集体
中国科学院大学
上海科技大学
《中国科学院院刊》(中文版)是中国科学院主办的以战略与决策研究为主的科技综...
《科学通报》是自然科学综合性学术刊物,力求及时报道自然科学各领域具有创新性...
覆盖数学、物理、化学、生命科学、地球科学、信息科学、技术科学与天文学等学科...
马尼亚总理登奇勒拒绝总统对其辞职要求
恐袭筹资?法国确认416人向“伊斯兰国”捐款
建首度将台胞纳入劳模评选表彰
度2018Q1财报:决胜AI时代 DuerOS燎原之势已现
www7919威尼斯人:小草:海南建设自由贸易港,供应链金融前景看好
我要分享 &
文章来源:中国科学报&&&&发布时间:日 21:11&&【字号:&&&&&&】
 &nbsp&nbsp&nbsp&nbsp破坏、乱停乱放问题严重。因乱停乱放导致的城市管理执法、车锁技术造成的管理问题等,成为困扰共享单车发展的障碍。共享单车引发的互联网创新与城市管理规范、公民素质的激烈交锋,显然需要寻找到一个最大公约数的解决方案。此番,共享单车与电信运营商、设备商跨界合作,可谓一场各取所需的联姻。-智能锁技术,被视为破解乱象的杀手锏之一。据了解,绝大多数共享单车都采用2网络,存在着开锁率低、稳定性差、用户体验不佳等问题。
 &nbsp&nbsp&nbsp&nbsp下降12.64%;实现净利润2.70亿元,同比增长163.52%;基本每股收益0.4839元。报告期内,公司持续推进食盐品种结构调整,盐产品毛利上升;存量带息负债同比大幅减少,利息支出大幅下降,财务费用同比降低;公司置出亏损的氯碱业务,同比氯碱产品亏损大幅降低,影响毛利同比上升。国务院新闻办公室于日下午3时举行新闻发布会,交通运输部部长李小鹏介绍交通运输推进供给侧结构性改革有关情。
 &nbsp&nbsp&nbsp&nbsp,还会对系统性金融安全造成威胁。经历了前年股市异常波动,以及去年以来市场逐步回归稳健态势,对于股市应“以稳为重、稳中求进”,各方已形成共识。2017年的股市场“稳”的有利条件知多少?需要关注哪些风险点?怎样建立市场长期稳定运行机制?宏观环境——“利好”“利空”谁更多?近期,前几年有些被冷落的蓝筹股在股市中逐渐升温。尤其是春节以来,在银行等板块不断走强的带动下,上证综指不断刷新年内高点。市场风格的悄。
 &nbsp&nbsp&nbsp&nbsp乎并没有获得大众较高的接受度。然而,这好像也并没有太影响到的发展。市场研究公司刚刚发布的一份消费者报告显示,全球硬件营收预计在2017年将达到36亿美元,同比增长142%。但的数据还揭示,在去年一整年内,设备的出货量仅仅为630万台,实现18亿美元的营收。虽然这个数字并不小,这样的成绩也没有让受到沉重的打击,但是不得不承认的是,这确实是远远低于各方期待的目标。发布消费者报告表明,2017年全球硬件。
 &nbsp&nbsp&nbsp&nbsp:养老金实际入市将缓步进行远水难解近渴国务院新闻办公室3月1日(星期三)上午10时在国务院新闻办新闻发布厅举行新闻发布会,请人力资源和社会保障部部长尹蔚民、副部长游钧介绍就业和社会保障有关情况,并答记者问。人社部表示,2016年底,我们正式启动了养老保险基金的投资运营实施工作。首批与社保基金理事会签约的有七个省,资金规模达到了3600亿,资金划拨也在陆续到位中。养老基金的投资实施是个逐步过程,是由。
 &nbsp&nbsp&nbsp&nbsp&nbsp下两个交易日。回顾整个2月赛季,无论是预赛还是决赛,参赛选手的成绩都十分亮眼。截至收盘,2月预赛,瓜分1亿排行榜上,有三位选手成功拿到百万决赛操盘金。其中“依旧要做有钱人”作为新晋黑马,周三一举登上排行榜榜首。不过看上去,三位选手的操盘风格各有不同。暂居第一名的“依旧要做有钱人”选手重仓持有摘帽概念股亚星化学,自从成功摘帽,从“*亚星”更名为亚星化学后,亚星化学已经连续三个交易日涨停。第二名“42。
(责任编辑:{xingming})已有天涯账号?
这里是所提的问题,您需要登录才能参与回答。
"天涯问答"是天涯社区旗下的问题分享平台。在这里您可以提问,回答感兴趣的问题,分享知识和经历,无论您在何时何地上线都可以访问,此平台完全免费,而且注册非常简单。
DOTA是谁做的?
DOTA是谁做的?
09-06-22 & 发布
Defense of the Ancients: Allstars (或者简称&DotA Allstars&) 是魔兽争霸 III: 冰峰王座 的一个自定义地图系列。这个地图的目标是使用你的英雄和同盟的英雄和小兵(creep,电脑AI操纵的战士)一起:摧毁对方的世界之树,如果你参加的是亡灵天灾一方;摧毁对方的冰峰王座,如果你参加的是近卫军团 历史一些信息部分来自DotA官方网站的的介绍(作者: 28awg) Defense of the Ancients:源自星际的RPG对战地图:Aeon of Strife(漫长的战争) ,也是第一引入自定义技能的RPG对战地图。 在 魔兽争霸 III:混乱之治 中第一个 AoS 风格的地图由地图制作者 Eul 制作。但是,在魔兽争霸 III:冰封王座发布之后,Eul 没有将地图导入到新的资料片中。这时,一些DotA的派生地图开始在 Battle(官方的 魔兽争霸 III 服务器)上流行起来。 Allstars汇集了当时在DotA派生地图以及原始地图中很&酷&的英雄,并且很快成为BN上最流行的自定义地图之一。 但是,那个将DotA 全明星放到一起的制作者在发布了一个Human(人族) vs Orc(兽族)的衍生版本之后停止了版本的更新。很快,Guinsoo出现,并且成为了DotA: Allstars 多人对战版本主要的程序员。 注: Eul 实际上制作了一个 DotA 的冰封王座版本,就是DotA 2;标题是 Defense of the Ancients: Thirst for Gamma. 发展在现在大多数Allstars的版本中,有着比DotA原始版本更多的英雄和物品,并且还在经常更新,这或许可以解释它的长盛不衰。但是,它的长盛不衰也引发了关于谁应该被赞许的长期争论。例如,一些老玩家对Guinsoo&窃取&了他们的游戏怀恨在心,特别是Guinsoo的大多数触发事件,英雄和物品都是从其他人那里&窃取&的。Guinsoo站在他自己的立场上坚持认为地图是从搜索素材中创造出来的,并且只有在&灵魂&上以Eul的工作为蓝本(Guinsoo只承认借鉴了地形和一些英雄的创意,他申明:其他任何的创意都是他自己的)。撇开这些,Allstars仍然很受欢迎,并且被一直认为是最受欢迎的魔兽争霸 3 自定义地图之一。 5.84+ 系列 在Allstars 5系列中的Bug促使许多人向Guinsoo提供解决的办法,但是代码的开发仍然十分艰难,发布日程的制定也十分的谨慎。地图在此之后分两个方向发展,5.84c版和Guisoo发布的6系列。 Guinsoo在发布了 DotA Allstars 5.84之后结束了 5系列,新发布的版本包括新的英雄和一些Bug的修正。但是在5.84版本中还是有一些错误和不平衡的地方,例如龙骑士的技能Dragon Blood(龙族血统)可能造成100以上的生命回复速度,迫使Guinsoo立刻发布了一个修正版本,5.84b。一个来自俄国的更新者True.Rus开发了一个非官方的版本 5.84c。在5.84c之前的每个版本都将注意力放在新的功能或者英雄上。但是True.Rus开发的版本并没有任何新的特性。相反: 它重新编写了地图,使得其具有更快的装载速度。(最近BN的玩家表示缩减了大约1-2分钟的装载时间) 它也修正了一些游戏的Bug,这些Bug由魔兽争霸 3的1.18升级补丁造成,影响到了8个英雄,例如:混沌骑士,幻影刺客,育母蜘蛛,剑圣和复仇之魂。 但是,这个分支也导致了一些小的争论: 英雄育母蜘蛛的技能织网,通常在游戏中给予她额外的速度和隐形效果,现在只提供了一些速度加成,而不再具有隐形效果。 英雄熊战士的技能怒意狂击,原来每次连续攻击积累一个伤害加成,现在不再能正常工作。 6+ 系列 在日,一个新的Allstars的时代开始了。新发布的6.0版包括:新的英雄,新的物品和新的雪地地形,这是自5.84b以来的一个巨大进步。不过由于改变过于明显,所以许多玩家仍然坚持使用5.84版。 主要的变动包括: 更多的英雄,物品和物品配方。 对一些已存在的物品和配方的变动;这包括对配方等级的变动由3个等级变动到4个等级。 改变了一些已存在英雄的技能,这需要新的游戏策略(例如,隐形刺客/沉默术士的技能被重写,因此需要新的游戏方式)。这是一个造成一些玩家仍然留在5.84版本的主要因素。 雪地地形和地图线路的重新制作(例如中央炮塔位置的变化和天灾方面的小路路径的变化) 新的装载画面和地图画面。 在6.01版发布不久,Guinsoo消失了(未被证实的消息表明他将所有的时间花在了魔兽世界上)。在Guinsoo不在的时候,IceFrog同Neichus站了出来。IceFrog现在是主要的地图程序员,负责包括游戏的执行和平衡的测试在内的任何工作。随着6系列版本不断被发布,bug的修正,新的英雄和新增加的法术不断被引入DotA。 The 6.20+ 系列 在10月31日,另一个Allstars的纪元开始了。在暴雪娱乐公司的认可和 Cyberathlete Amateur Leagu(网络竞技爱好者联盟)的贡献下,新的版本又有了另外一个明显的进步,其中包括许多变动。 一些显著的变动包括: 平衡的变动/调整,意味着某些英雄的策略的变化,使得游戏更加平衡。 装载画面和地图画面被重新设计。 Deathmatch (-dm) 模式被重新加入。 一个新的对于5 v 5 游戏的联赛模式,这个模式下近卫军团和亡灵天灾玩家轮流选择他们的英雄以保证选择英雄时的公平性。 一个新的草地地形代替了版本 6 到 6.19 一直使用的雪地地形。 3个新的亡灵天灾英雄,地狱领主(使用魔兽争霸 3 中的英雄模型:阿尔萨斯),复仇天魂和巫医。 新增加的2个英雄酒馆: 近卫军团的黎明酒馆(在6.29版中仍然是空的)。 亡灵天灾的黄昏酒馆(有2个英雄)。 最近的更新目录可以在官方的更新目录看到: ChangeLog. 在这些变动中,既有增强也有削弱,但是仍然需要在之后的长时间内观察这些变动的影响。 最新的版本是6.29,由IceFrog更新发布。 流行趋势现在,玩家对6.xx系列的版本显示出了更大的兴趣,更多的bug被修正并且比5.84+ 版本更加稳定和平衡。6.29b,最新的官方版本,是在BN和局域网上最流行的地图。不过5.84+ 版本仍然有他们自己的追随者。 现在,从在BN服务器和PvPGN网络的私人服务器上观察的结果来看,DotA Allstars正在全世界的游戏玩家中流行。DotA Allstars 的玩家,特别是在亚洲战网上的玩家,通常会去网吧进行友谊赛或者有奖金的锦标赛。 DotA Allstars 也被加入了Singapore World Cyber Games 年新加坡国际网络游戏节),6.27b版被选为下次联赛和锦标赛的官方版本。 暴雪已经正式确定 DotA Allstars 成为首批进入BN名人堂的优秀地图。它也是在暴雪的2005年Blizzcon正式会议中的一个独立的锦标赛项目。 在Battle上Azeroth国度(美东)的Clan TDA (Team DotA Allstars)是一个组织DotA Allstars比赛的官方战队。最近,Clan TDA向Lorderon国度(美西)和Northrend国度(欧洲)伸出了橄榄枝。 术语DotA Allstars(通常简称DotA)的玩家发展出来了一系列用于游戏中的聊天和玩家之间交流的俚语和术语。 DotA的命令和游戏模式 以下是 Dota Allstars 命令一览 (摘自dotaportal). 普通游戏模式简介 这些命令通常由主机在游戏开始的15秒之内输入,并且通常会标在房间的标题上。这些游戏模式会影响到玩家的游戏方式。 -aa - &All Agility&的简称; 强迫所有玩家只能选择敏捷型英雄。 -ai - &All Intelligence&的简称;强迫所有玩家只能选择智力型英雄。 -ap - &All Pick&的简称;玩家可以从敌对双方所有的酒馆中选择英雄。 -as - &All Strength&的简称;强迫所有玩家只能选择力量型英雄。 -ar - &All Random&的简称;所有玩家使用随机从所有酒馆中选出的英雄开始游戏。在这个模式下重新选择需要的花费从200涨到400。 -ctf - &Capture the Flag(夺旗模式)&的简称;在这个模式下玩家不再需要摧毁古代遗迹,而是要到对方基地夺取旗子并拿回己方基地,每个带回己方基地的旗子算1分。任何带有旗子的英雄对所有对方英雄都是可见的并且英雄的魔法值被始终设定为0;最先得到5分的队伍将会获胜(现在这个模式不可以使用) 。 -dm - &Death Match&的简称;如果一个玩家的英雄死亡,那么那个英雄将被移出游戏同时玩家从还剩下的英雄中选择一个新英雄继续游戏。当一个队伍的英雄死亡达到36次时,这个队伍就输掉了比赛。当英雄死亡时,你将失去普通游戏模式中失去的金钱和一个英雄等级。(在新版本中-你将不在失去一个等级)等级丢失并不是一个bug:以前的版本英雄死亡会丢失所有的级别和物品。这是一个进步,因为dev战队不希望太多的改变dm模式。6.20版开始,死亡竞赛模式被重新激活。 -du - &Duplicate Mode&的简称;不同的玩家可以选择相同的英雄。现在只能同-allrandom模式一起使用。 -id - &Item Drop&的简称;在这个模式下随机的物品掉落取代金钱丢失成为对英雄死亡的惩罚。注:游戏会随机的选择一个物品栏掉落,所以买许多便宜的物品并不是一个好主意。有传言说物品的掉落并不是完全随机的,75%的几率掉落最好的物品,25%几率从其他物品栏中掉落。 -lm - &League Mode&的简称;这是在6.20版本中引入的只能用于5 v 5游戏的新模式。在&联赛模式&中,每个玩家轮流选择英雄,近卫军团的玩家A选择一个英雄,然后亡灵天灾的玩家B和玩家C选择英雄,接着近卫军团的玩家D和玩家E选择英雄,如此往复直到所有的玩家都选择了英雄。如果一个玩家没有选择英雄,那么他会得到一个随机的英雄并损失所有的初始金钱。译者注:现在版本中玩家有20秒时间来选择英雄。 -mm - &Mirror Mode&的简称;玩家可以像通常那样选择英雄,但是在一个给定的初始时间之后,队伍的英雄组成将依据双方英雄选择而被随机选择并且相关玩家将被给予相同英雄。最终2边将得到完全相同的英雄组成,就像模式的名字一样(5v5游戏 = 5对从10个可能英雄中挑出的同样的英雄)。(现在这个模式是不可用的) -mr - &Mode Random&的简称;从 ar/ap/tr/regular 中随机挑出一个游戏模式。 -re - &Reverse&的简称;己方英雄由对方玩家选择,反之反是。(现在这个模式是不可用的) -sc - &Super Creeps&的简称;随机的超强野怪会在每波小兵中产生。这个模式是完全随机的,会有攻城傀儡,恐怖怪鱼,远古九头蛇随机加入双方阵营以增加游戏的成就感。这并不是完全的公平,因为随机选取和多变的超级士兵的产生(例如,近卫军团可能会在游戏的晚期才获得超强士兵,而相对而言亡灵天灾可能更早更频繁的获得超强士兵)。新的版本(例如6.27b)尝试用同时生成的超强士兵来解决这个问题。另外,杀死超级士兵能得到同摧毁一个塔差不多的金钱,鼓励玩家跟在他们后面。即使让两边的超级士兵同时生成,一边仍然可能处于劣势,比如得到了一个较弱的超级士兵而对方得到了一个较强的超级士兵。在这种情况下,非常有可能出现一方在游戏早期就得到了一个远古九头蛇(最强的超级士兵)并且摧毁了对方几个塔从而很有可能导致游戏的快速结束,因为就当时的等级而言对方对这个超强的士兵没有什么办法。 -sm - &Short Mode&的简称;建筑和塔的生命值被减低,更多的经验获得和金钱积累。这个模式是公共游戏房间上最常用的游戏模式,通常会同-ap一起使用。一些更有经验的老玩家认为这个模式通过使后期英雄更容易变强而改变了游戏的平衡性(比如幻影刺客和小狗),这些后期英雄可以在短时间内更容易的达到他们的顶峰并且中期英雄(主要是智力型英雄)的优势时间被大大缩短了。 -np - &no powerups&的简称,神符不再随机的在河道中间生成。 -tr - &Team Random&的简称;玩家获得一个随机的笨方英雄(近卫军团,或者亡灵天灾),他可以在游戏的第一分钟使用-repick命令花费500金钱来重新选择英雄。 玩家命令 英雄选择过程中的命令: -random - 在己方选择一个随机英雄。你可以输入 -repick命令花费200金钱重新随机选择一个英雄(注:在-allrandom模式和你自己输入-random时重新选择英雄的费用是不同的)。你只能在游戏开始的时候重新选择;在一定时间之后,-random便失效了。 -repick - 给你一个新的,随机的英雄,如果你在一个-ar的游戏中或者你自己希望更换你的英雄(花费400/200金钱)。重新选择英雄有一个45秒的时间限制(最大的重新选择次数是一次)。如果你选择了某个特定的英雄,输入-repick命令是有效的,玩家将失去现在的英雄和更多金钱,并得到一个新的随机英雄。这个情况只有在一个玩家无意按下了一个快捷键(当某个酒馆被选择时)召唤了一个英雄时才有实际意义。 用来在屏幕上显示信息的信息指令: -beamcounter - 用来显示月之骑士所施放的月光数目。(从6.18版本开始,这个命令被移除,根据冰蛙的说法,再也不会被加入) -creepstats (-cs) - &Creep Stats&的简称;玩家可以追踪他们杀死的敌方/己方小兵数量 -csboardon - 总是显示玩家杀死的小兵数量。 -csboardoff& -停止显示玩家杀死的小兵数量。 -matchup (-ma) - 显示对方玩家的名字,颜色,和他们正在控制的英雄。 -movespeed (-ms) - 显示现在的移动速度(供调试和获得信息)。包括物品和技能对速度的加成效果。 游戏时的指令,通常用来解决英雄的一些小问题: -disablehelp - 禁止己方圣骑的忠诚考验被加在玩家控制的英雄身上。 -enablehelp - 解除禁止己方圣骑的忠诚考验被加在玩家控制的英雄身上。 -recreate - 对于一些拥有和世界地图编辑器中没有的变身技能的英雄,比如:龙骑士,狼人,食尸鬼和灵魂守卫,有可能发生一些失去对英雄控制的问题。这可以通过把英雄带回生命之泉并且输入这个命令来解决。 -refresh - 作用于幻影刺客(PA),这个命令用来刷新她的部分隐形技能&模糊&(解决在她死后隐形状态会被解除的问题)。从6.10版发布以来,霜星不再会使PA的隐形失效。值得注意的是即使不输入-refresh命令,&模糊&仍然会给予PA被动的闪避效果,她只是不&隐形&而已。技术上来说,玩家受到不停的输入-refresh命令的折磨比PA更容易被发现更痛苦。6.20版以后,这个指令被废除,因为PA会自动的刷新她自己的状态。 -unstuck - 将你的英雄在60秒后传送到生命之泉;当你的英雄被卡在了一个没办法移动的位置(比如被困在树林中)的时候可以使用这个指令。在传送的过程中英雄不能移动,并且命令生效的延迟时间可以阻止玩家滥用这个命令。 DotA英雄分类 注:这里的英雄分类名就不翻译了,以便读者熟悉这些E文概念。 在DotA中英雄被给予了一个特定的分类,这个分类将影响到英雄的游戏方式。例如:stunners(可以眩晕敌人的英雄)通常要同 assassins 和 nukers 一起配合,以便更有效率的杀人。 这是一个以字母为顺序的分类表和他们的特征。注意一些英雄可以被划分到多于一个的分类中去。(例如:恶魔巫师是一个stunner-nuker-disabler) AOE Heroes - AOE是&Area Of Effect&的缩写。 AOE heroes指的是那些可以造成范围伤害的英雄。 精确的说,AOE法术是一些特定英雄施放的,能造成高额伤害或者能在短时间内造成长时间范围眩晕的法术。 拥有AOE法术的英雄经常在高水平游戏和团战中出现,因为他们可以在短时间内迅速的重创对方的队伍甚至杀死对方的英雄。 AOE英雄的例子:沙王(在6系列中他拥有地震和腐蚀毒),受折磨的灵魂(4个AOE技能:闪电风暴/撕裂大地/恶魔赦令/脉冲新星)和水晶室女(霜冻新星和极寒领域) Assassins - 专精于快速杀死对方英雄的英雄。 这类英雄通常使用物理攻击。痛苦女王和地穴刺客是主要使用法术攻击的例子。这类英雄通常具有某种隐形的技能或者偷袭技能。大多数的assassins是敏捷型英雄。 任何具有疾风步,隐形技能或者部分隐形技能(模糊),或者闪耀(瞬移)的英雄都可以被归入此类,当然也要参考英雄的配点和游戏方式。 Assassins的例子:地穴刺客,隐形刺客(SA),幻影刺客,赏金猎人,骷髅射手,等等。 Disablers - 拥有能够限制其他角色技能的英雄,这些英雄能够让对方在试图进攻或者逃跑时处于不利的境地。 Disabling skills(限制技能): 包括所有通过以下方式使对方英雄受到影响的技能 强行使对方移动,例如:巨力重击(裂魂人), 狂战士的怒吼(斧王),移形换位(复仇之魂)。 不能移动/减速,例如:风暴之锤(流浪剑客,骷髅王),魔法箭(复仇之魂),暗影突袭(剧毒术士,痛苦女王),冰封禁制(水晶室女),霜之哀伤(地狱领主),退化光环(全能骑士),黄泉颤抖(死灵飞龙),赎罪(圣骑士)。 阻止/减少物理攻击,例如:竭心光环(死灵法师,已被替换),衰老(遗忘法师),恐怖(复仇之魂)。 阻止法术的施放,例如:全领域静默(沉默术士),沉默(黑暗游侠,死亡先知),伤残恐惧(暗夜魔王)。 增加受到的伤害,例如:衰老,恐怖,赎罪。 大多数限制技能的特点是&眩晕&,同时可能包含上面列出中的中间3个条目(参看下面的&Stunners&)。许多其他技能,包括一些上面列出的技能,可以被归入几个分类。只有很少几个是只属于一个分类的;这并不是完整的列表。 虽然许多技能被归入了以上分类,但是限制技能的通常定义是:一个可以在战斗中逾越对方英雄意愿而限制其发挥作用的技能,这显然只包含所列出的前2个效果。也可以通过购买飓风权杖(可以升级到变羊刀)来增加英雄的限制技能。 Disablers的例子:暗影萨满,恶魔巫师和痛苦之源,都拥有2个主要的限制技能(恶魔巫师拥有穿刺和妖术,暗影撒满有枷锁和妖术[他还可以通过适当的施放群蛇守卫来困住目标],痛苦之源有噩梦和魔鬼的掌握)。 Nukers - 拥有能够在短时间内施放主动技能而造成高额伤害能力的英雄。 几乎所有的nukers都是智力型英雄,因为很少有其他类型的英雄拥有足够的魔法值,来同时施放一系列能对目标造成显著伤害的技能。 Nukers的例子:巫妖(霜星和连环霜冻),水晶室女(霜星和冰封禁制与极寒领域的组合),恶魔巫师(穿刺和死亡一指)。 Spammers - 能够重复施放进攻性魔法来杀死对方或者使对方不能正常的游戏的英雄。 这些英雄通常能使对方英雄回到他们的生命之泉治疗,因此造成时间的浪费和经验的损失。一个&spammer&通常就是一个特定种类的nuker,他们能够有效率的重复施放某种魔法。 Spammer 的例子:众神之王- 宙斯(连续不断的弧形闪电),地精修补匠(热导飞弹和再装填)和死亡先知(被巫术精研增强的连续不断的食腐蜂群) 。 Pushers - 能够快速的摧毁敌方炮台和兵营的英雄,这些英雄可以召唤额外的单位或者对一片敌方小兵造成伤害。 这些英雄通常装备梅肯斯姆和圣殿指环这样的装备来增强他们召唤生物的威力。 Pushers的例子:先知(自然之力),死亡先知(食腐群蜂和恶灵驱使)和光之守卫(冲击波)。 Stunners - 拥有能够眩晕其他角色能力的英雄。 某些英雄拥有能够造成眩晕的主动技能。 其他一些英雄拥有有机会在攻击时造成眩晕的被动技能。当这些英雄能够使敌方英雄持续眩晕时,我们称之为:无限晕。 这些拥有被动晕技的英雄通常会装备增加攻击速度的物品和碎骨锤来增加他们眩晕敌方英雄的机会。 一个stunner通常包括在&disabler& 的分类中,但是由于他们很常见,所以他们有一个单独的分类。 Stunners的例子:半人马酋长(马蹄践踏),骷髅王和流浪剑客(风暴之锤),撼地神牛(沟壑和余震)。 Support - 拥有能够直接治疗其他队友技能的英雄。 拥有治疗和状态技能的英雄属于此类。&Pushers&也可以归入此类,虽然他们也可以不同队友配合而单独行动。 梅肯斯姆,甚至是圣殿指环通常被用来治疗和增加队友的护甲(梅肯斯姆在5.84版中的对应物品是玄冥盾牌)。 Support英雄的例子:全能骑士(洗礼,驱逐和守护天使)和树精卫士(活体护甲,森林之眼和大自然的掩护)。 Tankers - 可以吸收巨额伤害的英雄,这些英雄通常兼具高额生命值和护甲值。 此类英雄通常用来吸引炮台火力和引诱对方英雄在他们身上浪费魔法或者吸引对方进入陷阱。 为了增强肉盾的能力,这些英雄通常装备能够增加护甲值,生命值和自身回血速度的物品(恐鳌之心)或者是能够偷取/消费小兵生命值的物品(撒旦的邪力)。 例子:树精守卫(活体护甲和游戏中最高的基础力量),半人马酋长(很高的基础力量和刚毅不屈),斧王(狂战士的召唤),屠夫(堆积腐肉)和变体精灵(变形)。 名词和各种术语 backdoor - 这个术语被用来描述一个英雄绕过对方小兵而直接潜入对方基地对炮台和兵营造成伤害的行为。如果你一路杀小兵直到到达对方基地,则不是backdoor。Backdoor通常被大多数玩家所反感。根据官方的规则唯一一种违反规则的backdoor是直接传送到没有小兵的对方基地拆炮台和兵营的行为(比如先知)。其他绕过小兵攻击兵营和建筑的行为并不犯规,但是很容易引起其他玩家的反感。有一些战队和公共游戏玩家或许对backdoor是否合理有着不同的看法,所以他们可能因为你这么做了而禁止你同他们一起游戏,在这里特别提醒大家注意。 BL/Banlist - 一个免费的第三方程序,能够记录中途退出的玩家和试图阻止其他玩家享受游戏的玩家。这个程序在魔兽3外部运行并且拦截游戏的封包。在游戏中,程序使用者能够标记中途退出玩家并将他们记录进数据库,检测其他玩家的延迟程度(排除&laggers&),侦测数据库中标记的玩家,识别同一个IP上的多个玩家(这意味着他们在一个局域网内),等等。这些程序并不像游戏的名字那样被广泛使用(译者注:BN上的游戏名字一般都包含&no leaver&这样的字样)。所以在DotA的世界中,中途退出者仍然得不到限制。这些程序并不普及,因为动态IP和玩家很容易在battle注册新的帐号。 bs - 指以下三个概念中的一个: &backstab&(背刺), 同&to ambush&意义相同,参见下面条目中的&backstab/bs&项。 &bullshit&, 用来表达对某些
请登录后再发表评论!

我要回帖

更多关于 dota1哪个平台人多 的文章

 

随机推荐