游戏中,先按一下Ctrl键后,就能进入自动攻击模式,再按住鼠标右键不放,就能进行自动攻击,如果松开右键,停止自动攻击,再按一下Ctrl,退出自动工具模式。
现在想实现如下外挂功能,按一下某个键,如:A,就能进入自动攻击模式,并且进行自动攻击,再按一下A,退出停止自动攻击,并退出自动攻击模式。 给看看该如何实现,先谢了!
现在想实现如下外挂功能,按一下某个键,如:A,就能进入自动攻击模式,并且进行自动攻击,再按一下A,退出停止自动攻击,并退出自动攻击模式。 给看看该如何实现,先谢了!
我有一个想法,先做一个全局的HOOK,用SetWindowsHookEx拦截到键盘操作如:A的按键,然后用keybd_event模拟两个按键(Ctrl、和鼠标右键的按下状态),不知道这种方法行吗,望api高手给个指点,如果行,该怎么实现啊。
你的想法如果做出来就有点象加速的效果.但现在的外挂不是这样做的,是直接对进程传递信息,而不管windows是否有消息,就如所谓的挂机.
vc的论坛中应该有一些资料,但也不多,被删的.
string b_npc_city = "比奇县";
int b_npc_x = 463, b_npc_y = 427;array fs_books = ({ "大火球", "雷电术", "击风", "冰月震天",
"地狱火", "疾光电影", "风震天", "冰沙掌" ,"火墙","诱惑之光","抗拒火环"});array ds_books = ({ "隐身术", "召唤骷髅", "月魂灵波", "治愈术",
"幽灵盾", "困魔咒", "集体隐身术", });// 鉴定者的名字,对话坐标
string i_npc_name = "华龙断珠";
string i_npc_name2 = "比奇道长";
int i_npc_city = "比奇县";
int i_npc_x = 463, i_npc_y = 427; // 对话华龙断珠位置
int i_npc_x2 = 457, i_npc_y2 = 431; // 同时对话华龙断珠、比奇道长位置(如果想销售道士书籍有必要用这个坐标)void start()
{
mapping mc;
string book_name;
string book_name2;
int total;
int total2;
//int count;
int i; // 首先设定所有的秘籍可卖,不优先,以免鉴定后无法出售
for (i = 0; i < sizeof(fs_books); i++)
{
all_item_list[fs_books[i] + "(秘籍)"]["storage"] = 0;
all_item_list[fs_books[i] + "(秘籍)"]["manage"] = 1;
}
for (i = 0; i < sizeof(ds_books); i++)
{
all_item_list[ds_books[i] + "(秘籍)"]["storage"] = 0;
all_item_list[ds_books[i] + "(秘籍)"]["manage"] = 1;
} printf("开始自动鉴定书籍。\n");
for (;;)
{
book_name = fs_books[0];
book_name2 = ds_books[0];
total = 0;
total2 = 0; mc = me()["carry"];
for (i = sizeof(mc) - 1; i >= 0; i--)
if (mc[i]["name"] == book_name)
total++; if (mc[i]["name"] == book_name2)
total2++; if (total > 0)
// 现在有还没有鉴定的书籍,直接前往鉴定
goto start_identify; // 跑到书商处
printf("前往销售、购买书籍。\n");
goto_city_ex(b_npc_city, b_npc_x, b_npc_y, 10);
// 快速销售现有书籍
sell_item(({ ITEM_BOOK }), b_npc_name, 0, 1);start_identify:;
// 购买完毕,前往鉴定
printf("前往鉴定书籍。\n");
goto_city_ex(i_npc_city, i_npc_x, i_npc_y, 10); while (total-- > 0)
{
talk_to(i_npc_name);
talk_to(i_npc_name, "查看");
talk_to(i_npc_name, book_name);
talk_to(i_npc_name, "学武功");
}
// 鉴定完毕,继续销售、购买 if (total2 > 0)
// 现在有还没有鉴定的书籍,直接前往鉴定
goto start_identify2;
start_identify2:;
// 购买完毕,前往鉴定
printf("前往鉴定书籍。\n");
goto_city_ex(i_npc_city, i_npc_x2, i_npc_y2, 10);
} while (total2-- > 0)
{
talk_to(i_npc_name2);
talk_to(i_npc_name2, "查看");
talk_to(i_npc_name2, book_name);
talk_to(i_npc_name2, "学武功");
}
}// 启动时自动开始买书鉴定
if((me()["carry"])==680) //680是自身负重,玩家可以按照自身能力调改
{
create_thread(QUEST_THREAD, "start");
}
// 卸载时停止
private void destruct()
{
printf("停止。\n");
delete_thread(QUEST_THREAD);
}
1.需要传输的数据(主要的和最重要的部分就是这个,外挂修改的也是这部分)
2.序列号(每个封包必须有自己的序列号,以便到了接收端后可以按照序列号重新组装)
3.IP地址,一般都有这一部分,通过网络解析才知道封包从那里来,到那里去!
当然封包的内容不止这些,但是,我们了解这些就够了。
注意:在传输中,所有数据都是16位或者32位的,所以截获的封包看起来总是怪怪的!
面给一个封包的基本格式,给大家看看(下面是基本封包格式,如果您可以背下来他们的格式,这对您修改游戏是非常有用的!强烈建议您看一些关于封包格式的文章,您就可以很容易地把封包看清楚,很快知道哪个才是真正的数据):
Source Port (16) | Destination Port (16)
Sequence Number (32)
Acknowledgment Number (32)
Data Offset(4) | Reserved (6)|UGR|ACK|PSH|RST|SYN|FIN|Window(16)
Checksum (16) | Urgent Pointer (16)
Options (0 or more 32 bit words + padding)
DATA
... 稍微注意以下,您可以看到,每行的长度都是32字节!
大家看到了吗?data就是数据,那是最关键的部分,我们使用WPE修改的就是那一部分!