多玩诛仙专区《诛仙2时光之书》五月大版系列活动_诛仙2
生命中有几个五周年是值得留念的,而我们的诛仙,从一个孩童起在我们在眼中成长,每一个阶段,在我们的呵护下发展变化。转眼,我们共同捧起了五年时光之书。
01五年时光有我更精彩大型玩家自爆截图活动
活动时间:5月15日-5月29日(15天)
五年,让我们记住你不变的脸。
玩家自爆照片,必须手持含“诛仙2五周年生日快乐!/诛仙2时光之书邀你加入”字样的纸条,上传专区PK台进行投票PK,赢取DELL笔记本+新版YY特权卡。
02我的五年时光之书老玩家旧图展示活动
活动时间:5月15日-5月19日(5天)
翻阅厚重的诛仙文件夹,就像是在品读一本五年的回忆相册。
老玩家贴出五年游戏截图并需配文字解说,踩楼选出的幸运作品将获得新版YY熊特权卡或IPAD2一部。优秀作品将在专区首页进行《我们的五周年》专题展示。
03五周年大版我来拼诛仙拼图活动
活动时间:5月21日-5月25日(5天)
新副本新法宝?大版神秘爆料图!由你拼出!
紧张的15关限时闯关拼图,闯关成功者进入抽奖阶段。每天抽出6名幸运玩家将获得30元完美一卡通一张。活动结束后选出通关时间最短的玩家,赢取十级铁玉一枚!
04时光之书知多少《老诛仙》答题活动
活动时间:5月21日-5月30日(10天)
你够骨灰吗?你自称老玩家吗?来试试手吧!
100道诛仙专业题,涵盖五年内容,15关闯关,闯关成功者进入抽奖阶段。每天抽出3名幸运玩家获得30元完美一卡通一张。活动结束后,通关次数前50名的玩家将进入最后抽奖,赢取DELL笔记本!
找到一条旧新闻:800万《诛仙》书迷、上千万任贤齐粉丝和4180万网络游戏玩家翘首以盼的《诛仙》于日下午两点整正式公测。顿时眼眶就湿润了。
也许你没有经历过内测,也许你没有经历过90年代,甚至没有经历过150年代。也许每个人眼中的诛仙都是不同的样子,拥有着不同的开始,不同的变化,不同的未来。但在每个人的不同中,我们的轨迹相交了。于是诛仙,成了我们共同的回忆。
如果现在你的电脑里还存着三界天书的旧照片,那么你是个幸运儿。因为更多的人由于各种不同的原因没有保存下来。但是脑海中那段似曾相识的友情,鬼王拉怪青云群家族的日子,那些激情燃烧的岁月,凌霄城下自爆和无量交织的场景,那年热血沸腾的我们,合欢激励缠绵的脆响,却清晰的像是昨日梦境。
老诛仙们,我们来个拥抱。
三届天书、君临天下、六道轮回。资料片记录了我们从90年代到150年代的风云变幻。幻月洞府的出现,天奕战场的争夺,凌霄城的喧嚣,这是一个平民们大显身手的舞台,造就了许多传奇。
第一次引入禁食概念和蛊毒概念,并随后风骚了两年之久,登上神坛一年有余的鬼道职业,在六道轮回资料片时闪亮登场,开始他令人又爱又恨的精彩演出。
不得不提及的是开飞升前的第一届跨服战,有很多玩家至今还认为是最经典的一次跨服,新鲜的血液,全新的跨服区,首次亮相的混沌,热血厮杀酣畅淋漓。因为我们没有经验,所以我们生猛如虎。因为我们当初的单纯,所以当时的荣誉如此值得珍惜。
150年代,他们说龙恨最耀眼,梵天最迷人,真武最夺目,血魂最爷们。
日,诛仙开启了涅?飞升。里程碑的开启了诛仙的另一个PK时代。不得不说,飞升三阵营带来了千变万化的修行方式,将原有的PK局势极大的复杂化,让不同阵营不同职业的玩家在决斗、野战和团战中体找到了各自的位置。
说到飞升初期,谁都不得不提起仙合欢。经历过江南二第一击极大概率出爆的日子,经历过一个合欢可以抢走一群人围殴的昆仑奴的日子,经历过仙合欢王者的时代,相信你一定会留恋这个弯弓背腰的战士型刺客,和他引领我们迈开的“王者归来”的步伐。
日,九黎烈山随着《诛仙2》走进了我们的视野,从此人神两族并存,开始了玩家们永无止境的斗争。很多玩家,尤其是老玩家认为神族强于人族,我想多半是由于神族的技能设定晚于人族,所以加入了许多全新的灵活的操作概念,动植物召唤,包括之后的技能反弹、领域、影子、隐身,都是PK模式新领域的开辟。
鬼厉为爱成神,于是诛仙2的我们进入封神。封神直接导致了昔日王者鬼道的天选面临命中问题,而做了三年之久控场之王的天音也乖乖让位于天华。81级元神的逐级缓慢开放,让玩家们仰望未来要走的漫漫长路,更多的坚持给予了付出过汗水和泪水的这条道路,给予了比肩作战互相鼓励的亲友们。
天界的开启拉近了服务器间的距离,BOSS争夺出现了久违的热闹场面并在多个大区延续至今。国际跨服赛的举行加强了大区间强队的沟通,全新打法6V6加剧了新老区的碰撞。
怀光的成型引领了封神之后的PK局势,在黄金收割队耀眼的光环下人族玩家们开始了挣扎与反抗,人神职业矛盾急剧激化;而无论白装、坤8还是乾9的各阶层玩家,依旧发现平民怀光也是个缠人难对付的敌人。随着诛仙前传带来了人族最后的职业焚香和有机关***之称的太昊,怀光的时代还会坚持多久?我们拭目以待。
五年前,我们在***,为了各自的梦想,做着不同的事,过着不同的生活。
而五年之后的我们,共同坐在电脑前,看着《诛仙2时光之书》和她的故事,看着一路走来的五年。诛仙,像是一杯茶余饭后的清酒,不醉自醉,甘苦自回味。
五年了,萧鼎出了《诛仙2》,小凡回来了,雪琪嫁人了,碧瑶还睡着。他们的故事正在进行着,而我们的呢?
生命中有几个五周年是值得留念的,而我们的诛仙,从一个孩童起在我们在眼中成长,每一个阶段,在我们的呵护下发展变化。转眼,我们共同捧起了五年时光之书。
生命中有几个五周年是值得期待的,当时光之书的画卷在诛仙的世界里展开,我们看到了昔日的战以和家族的亲人,看到了再次并肩作战的那天。
DELL笔记本电脑
永久绝版南疆装
十级精金铁玉
完美一卡通
永久绝版粉红色麒麟装
新版多玩YY熊特权卡
参与新浪微博留言 赢取笔记本IPAD2大奖
告诉你身边的每一个人
活动时间:5月15日-5月29日(15天)
五年幽幽岁月流逝,不管你是从什么时候开始加入的,是否曾经离开过,从现在开始,我们都会一起相伴着经历并一直走下去。这就是《诛仙2o时光之书》的真谛。
登陆新浪微博,@多玩_诛仙,并同时@任意5名好友,输入含有“祝《诛仙2》时光之书五周年生日快乐/诛仙2时光之书新版本欢迎你加入”的祝福话语,有机会参与活动抽奖,每2天将抽出1名幸运玩家,获得新版YY熊特权卡一张。活动结束将抽取一名幸运大奖,获得IPAD2一部。诛仙 时光之书 MP3链接qq空间背景音乐歌曲链接外链地址
正在播放诛仙 时光之书
顺序循环播放
把本舞曲分享到
请记住本站
方便下次听
把本站分享给你的朋友,就是对本站最大的支持,不管是男是女都可以^_^!
音乐外链:(可用于音乐下载,QQ空间背景音乐等等)
注意设置qq空间背景音乐时,地址保存后,需要关闭浏览器重新打开就可正常播放音乐了,不要管连率,本站的连通率99.99%
/up/mp3/A4FCADFCE339EF249D2713D.mp3
1.诛仙 时光之书外链到QQ空间背景音乐歌曲链接
2.诛仙 时光之书歌曲链接mp3下载和在线试听顺畅播放
3.诛仙 时光之书这首歌曲链接由网友上传提供分享
4.诛仙 时光之书推荐给你朋友,有你们的支持我们会更加强大
上传者IP:58.218.185.105 上传时间: 18:36:13
音乐名称:
音乐大小:9.00mb
外链次数:1
外链地址:/up/mp3/A4FCADFCE339EF249D2713D.mp3
《》在线视听
诛仙 时光之书.mp3是里的一首。如果觉得歌曲好听,就将要听舞曲网告诉你的朋友,尽在要听dj网()要听舞曲网因你们而精彩。《诛仙2?时光之书》官方网站
诛小仙,是完美世界旗舰产品《诛仙2》的虚拟代言人,诙谐可爱的形象和百变的造型是它的最大特色。《诛仙2》作为一款拥有八千万玩家的网游巨制,注重每一个玩家的个性,希望释放每一个人内心的那个诛小仙。它也许是你个性的彰显,也许是你梦想的达成,也许是你表达思想的载体。创造属于自己的代言人吧!诛小仙,让生活充满奇思妙想,意料之外的简单乐趣。查看: 8027|回复: 14
阅读权限50最后登录精华0灵石0 颗UID104168积分567帖子注册时间
MC-正式会员, 积分 567, 距离下一级还需 1433 积分
232体力值51 点UID104168灵石0 颗金币1097 粒帖子积分567威望9 点在线时间117 小时注册时间
求一个诛仙2的降级补丁制作方法
相信很多小白与我一样受到这个问题的困扰,总是不断的找补丁,而补丁永远没有GF更新的快!!!
总是不能用GF的最新或最新的上一个端进游戏。。。。。。。
求制作方法,万分感谢!!!跪求!!!
求。。。。。。。各种求。。。。。。。。
阅读权限50最后登录精华0灵石205 颗UID50930积分1934帖子注册时间
MC-正式会员, 积分 1934, 距离下一级还需 66 积分
体力值0 点UID50930灵石205 颗金币1923 粒帖子积分1934威望22 点在线时间290 小时注册时间
dfdafdafdsfasdf
阅读权限50最后登录精华0灵石0 颗UID104168积分567帖子注册时间
MC-正式会员, 积分 567, 距离下一级还需 1433 积分
体力值51 点UID104168灵石0 颗金币1097 粒帖子积分567威望9 点在线时间117 小时注册时间
{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}
阅读权限50最后登录精华0灵石0 颗UID79772积分726帖子注册时间
MC-正式会员, 积分 726, 距离下一级还需 1274 积分
体力值3 点UID79772灵石0 颗金币24 粒帖子积分726威望7 点在线时间162 小时注册时间
解包服务端对应版本的PCK的包&&解包官方的PCK 对比就行了!去网上搜搜文件对比软件(工具)把不一样的提取出来 这就是补丁
阅读权限50最后登录精华0灵石0 颗UID104168积分567帖子注册时间
MC-正式会员, 积分 567, 距离下一级还需 1433 积分
体力值51 点UID104168灵石0 颗金币1097 粒帖子积分567威望9 点在线时间117 小时注册时间
阅读权限50最后登录精华0灵石0 颗UID79772积分726帖子注册时间
MC-正式会员, 积分 726, 距离下一级还需 1274 积分
体力值3 点UID79772灵石0 颗金币24 粒帖子积分726威望7 点在线时间162 小时注册时间
额 我随便一说就懂了 您真乃神人啊。我研究了好久才把补丁研究通了!
阅读权限50最后登录精华0灵石0 颗UID104168积分567帖子注册时间
MC-正式会员, 积分 567, 距离下一级还需 1433 积分
体力值51 点UID104168灵石0 颗金币1097 粒帖子积分567威望9 点在线时间117 小时注册时间
没完全懂,您说的不是很具体。但至少有了一个方向,还是要感谢!!!
阅读权限50最后登录精华0灵石0 颗UID79772积分726帖子注册时间
MC-正式会员, 积分 726, 距离下一级还需 1274 积分
体力值3 点UID79772灵石0 颗金币24 粒帖子积分726威望7 点在线时间162 小时注册时间
我稍微详细一点说说吧
就是你想做1105的补丁你首先要有1105的官方客户端 和一个官方最新的客户端!
你最好把 1105-官方最新 的ZUP官方补丁下载齐全!然后解包出来看看都更新了什么!
你要个个击破 不能一口吃个胖子 要反复的测试!你就把每个PCK都解包 然后用对比软件(工具)来把
1105的和最新的做个对比 把不相同的1105的文件按照目录复制剪切出来!然后打包成7z格式用单机登陆器更新到最新的客户端上!
阅读权限50最后登录精华0灵石0 颗UID79772积分726帖子注册时间
MC-正式会员, 积分 726, 距离下一级还需 1274 积分
体力值3 点UID79772灵石0 颗金币24 粒帖子积分726威望7 点在线时间162 小时注册时间
我可能表达的还不够完整!你慢慢理解吧
阅读权限50最后登录精华0灵石0 颗UID104168积分567帖子注册时间
MC-正式会员, 积分 567, 距离下一级还需 1433 积分
体力值51 点UID104168灵石0 颗金币1097 粒帖子积分567威望9 点在线时间117 小时注册时间
Rain - Baby
颁发给支持Mc的孩纸们
末日之殇,唯爱Mc.(玛雅预言世界末日,希望大家平安度过,相聚2013)
2012限量版
2012年限量版勋章,你值得拥有!
新人进步奖
初入Mc,就有机会获得!
Powered by这段时间真够累的,不想沦落为程序员,纪念下。
通过hook键盘,将dll注入到游戏主程序。游戏中,F12呼出辅助工具界面。
主要功能:通过加载、读取任务脚本,实现:指定NPC对话、跑路到指定坐标、自动杀指定数量的指定名称怪、自动拾取打怪掉落的指定物品、自动加血加蓝。
文件分类:配置文件加载函数、对话框程序主程序、基础功能函数、主要功能函数、任务脚本解析函数、线程处理调用类函数
#include &IniFile.h&
//加载配置文件,各类基础数据的获取
call_attack,call_choose,call_findway,call_usegoods,call_pickup,call_selectmonster,call_
BaseAddr,BaseO
ps_base,ps_x,ps_y,ps_z,ps_level,ps_life,ps_magic,ps_max_life,ps_max_magic,ps_
mt_base1,mt_base2,mt_base3,mt_base4,mt_max,mt_id,mt_distance,mt_name1,mt_name2,mt_status,mt_
//Backpack
bp_base1,bp_base2,bp_base3,bp_max_size,bp_type,bp_id,bp_num,bp_name1,bp_name2;
gd_base1,gd_base2,gd_base3,gd_max,gd_object,gd_sysid,gd_id,gd_distance,gd_name1,gd_name2;
Map_Target,map_
st_lifepoint,st_magicpoint,st_pickup_distance,st_select_
st_lifegoods[1024]={0},st_magicgoods[1024]={0},st_pickup[1024]={0};
BOOL LoadConfig()
INIFILE config("D:\\game\\诛仙2&时光之书\\element\\Config.ini");
BaseAddr=config.GetInteger("BASE","BaseAddr");
BaseOffset=config.GetInteger("BASE","BaseOffset");
ps_base=config.GetInteger("PERSON","base");
ps_x=config.GetInteger("PERSON","x");
ps_y=config.GetInteger("PERSON","y");
ps_z=config.GetInteger("PERSON","z");
ps_level=config.GetInteger("PERSON","level");
ps_life=config.GetInteger("PERSON","life");
ps_magic=config.GetInteger("PERSON","magic");
ps_max_life=config.GetInteger("PERSON","max_life");
ps_max_magic=config.GetInteger("PERSON","max_magic");
ps_npc=config.GetInteger("PERSON","npc");
mt_base1=config.GetInteger("MONSTER","base1");
mt_base2=config.GetInteger("MONSTER","base2");
mt_base3=config.GetInteger("MONSTER","base3");
mt_base4=config.GetInteger("MONSTER","base4");
mt_max=config.GetInteger("MONSTER","max");
mt_id=config.GetInteger("MONSTER","id");
mt_distance=config.GetInteger("MONSTER","distance");
mt_name1=config.GetInteger("MONSTER","name1");
mt_name2=config.GetInteger("MONSTER","name2");
mt_status=config.GetInteger("MONSTER","status");
mt_select=config.GetInteger("MONSTER","select");
//Backpack
bp_base1=config.GetInteger("BACKPACK","base1");
bp_base2=config.GetInteger("BACKPACK","base2");
bp_base3=config.GetInteger("BACKPACK","base3");
bp_max_size=config.GetInteger("BACKPACK","max_size");
bp_type=config.GetInteger("BACKPACK","type");
bp_id=config.GetInteger("BACKPACK","id");
bp_num=config.GetInteger("BACKPACK","num");
bp_name1=config.GetInteger("BACKPACK","name1");
bp_name2=config.GetInteger("BACKPACK","name2");
gd_base1=config.GetInteger("GROUND","base1");
gd_base2=config.GetInteger("GROUND","base2");
gd_base3=config.GetInteger("GROUND","base3");
gd_max=config.GetInteger("GROUND","max");
gd_object=config.GetInteger("GROUND","object");
gd_sysid=config.GetInteger("GROUND","sysid");
gd_id=config.GetInteger("GROUND","id");
gd_distance=config.GetInteger("GROUND","distance");
gd_name1=config.GetInteger("GROUND","name1");
gd_name2=config.GetInteger("GROUND","name2");
Map_Target=config.GetInteger("MAP","Target");
map_offset=config.GetInteger("MAP","offset");
call_attack=config.GetInteger("CALL","attack");
call_choose=config.GetInteger("CALL","choose");
call_findway=config.GetInteger("CALL","findway");
call_usegoods=config.GetInteger("CALL","usegoods");
call_pickup=config.GetInteger("CALL","pickup");
call_selectmonster=config.GetInteger("CALL","selectmonster");
call_talknpc=config.GetInteger("CALL","talknpc");
config.GetString("SETTING","GameName",GameName,260);
st_lifepoint=config.GetFloat("SETTING","lifepoint");
st_magicpoint=config.GetFloat("SETTING","magicpoint");
st_pickup_distance=config.GetFloat("SETTING","pickup_distance");
st_select_distance=config.GetFloat("SETTING","select_distance");
config.GetString("SETTING","lifegoods",st_lifegoods,1024);
config.GetString("SETTING","magicgoods",st_magicgoods,1024);
config.GetString("SETTING","pickup",st_pickup,1024);
st_Time_Interval=config.GetInteger("SETTING","interval");
if (BaseAddr==0||BaseOffset==0)
return FALSE;
return TRUE;
//基本函数char
GameName[260],ScriptPath[260]={0};;
thMain,thLifeMagic,thK
*pMonsterStatus,*pIfS
ListLife,ListMagic,ListPickUp;
BTEXEC,BTSELECT;
struct KillMonster
MonsterName[255];
DWORD *GetAddress(DWORD *BaseAddr,DWORD offset1=-1,DWORD offset2=-1,DWORD offset3=-1,DWORD offset4=-1,DWORD offset5=-1,DWORD offset6=-1,DWORD offset7=-1)
DWORD *ret=BaseA
if (offset1!=-1)
if (*ret!=NULL)
ret=(DWORD *)(*ret+offset1);
return NULL;
if (offset2!=-1)
if (*ret!=NULL)
ret=(DWORD *)(*ret+offset2);
return NULL;
if (offset3!=-1)
if (*ret!=NULL)
ret=(DWORD *)(*ret+offset3);
return NULL;
if (offset4!=-1)
if (*ret!=NULL)
ret=(DWORD *)(*ret+offset4);
return NULL;
if (offset5!=-1)
if (*ret!=NULL)
ret=(DWORD *)(*ret+offset5);
return NULL;
if (offset6!=-1)
if (*ret!=NULL)
ret=(DWORD *)(*ret+offset6);
return NULL;
if (offset7!=-1)
if (*ret!=NULL)
ret=(DWORD *)(*ret+offset7);
return NULL;
catch (...)
//各主函数文件//基本数据
*PersonBase,*BackPakcBase,*GroundBase,*MonsterB
//获取基本地址
GetBaseAddr()
PersonBase=GetAddress((DWORD*)BaseAddr,BaseOffset,ps_base);
BackPakcBase=GetAddress((DWORD*)BaseAddr,BaseOffset,bp_base1,bp_base2);
GroundBase=GetAddress((DWORD*)BaseAddr,BaseOffset,gd_base1,gd_base2);
MonsterBase=GetAddress((DWORD*)BaseAddr,BaseOffset,mt_base1,mt_base2);
pIfSelected=GetAddress((DWORD*)BaseAddr,BaseOffset,ps_base,0x12E0);
//普通攻击()
DWORD *PersonInfo=GetAddress(PersonBase,0);
ecx,PersonInfo
call_attack
//使用物品(物品名)
BOOL UseGoods(char *GoodsName)
DWORD *pBase,*pName,*pMaxSize,*pGoodsType,GoodsID;
WCHAR Name[255]={0};
MultiByteToWideChar(CP_ACP,0,GoodsName,strlen(GoodsName),Name,255);
pMaxSize=GetAddress(BackPakcBase,bp_max_size);
pBase=GetAddress(BackPakcBase,bp_base3);
for (UINT i=0;i&*pMaxSi++)
pGoodsType=GetAddress(pBase,i*4,4);
if (pGoodsType!=NULL && *pGoodsType==2)
pName=GetAddress(pBase,i*4,bp_name1,bp_name2);
if (wcscmp((WCHAR*)pName,Name)==0)
GoodsID=*GetAddress(pBase,i*4,bp_id);
push GoodsID
mov eax,0x
add esp,0x10
return TRUE;
return FALSE;
//拾取物品(物品名)
BOOL PickUp(char *GoodsName)
DWORD *pMaxGoods,*pGoodsBase,GoodsSysID,GoodsID;
WCHAR *pGoodsN
WCHAR Name[255]={0};
MultiByteToWideChar(CP_ACP,0,GoodsName,strlen(GoodsName),Name,255);
pMaxGoods=GetAddress(GroundBase,gd_max);
pGoodsBase=GetAddress(GroundBase,gd_base3);
for (UINT i=0;i&*pMaxGi++)
pGoodsName=(WCHAR *)GetAddress(pGoodsBase,i*4,gd_object,gd_name1,gd_name2);
if (pGoodsName!=NULL && *pGoodsName!=NULL)
if (wcscmp(pGoodsName,Name)==0)
pDistance=(float *)GetAddress(pGoodsBase,i*4,gd_object,gd_distance);
if (*pDistance&=st_pickup_distance)
GoodsID=*GetAddress(pGoodsBase,i*4,gd_object,gd_id);
GoodsSysID=*GetAddress(pGoodsBase,i*4,gd_object,gd_sysid);
GoodsSysID
call_pickup
Sleep(500);
return TRUE;
return FALSE;
//去指定坐标(地图ID,X,Y)
void GoTo(UINT mapid,float x,float y)
DWORD *pCurPos,*pDesP
pCurPos=GetAddress((DWORD*)BaseAddr,BaseOffset,ps_base,ps_x);
pDesPos=(DWORD *)Map_T
eax,Map_Target
add eax,map_offset
mov ebx,mapid
mov [eax],ebx
add eax,0x4
mov [eax],ebx
add eax,0x4
mov [eax],0
add eax,0x4
mov [eax],ebx
push pCurPos
mov ecx,pDesPos
call call_findway
//根据怪ID选中怪(怪ID)
SelectById(DWORD ID)
DWORD *pSelectA
pSelectAddr=GetAddress(PersonBase,mt_select);
eax,pSelectAddr
call_selectmonster
//选中指定范围内选中指定名称怪(怪名称)
SelectMonster(char *MonsterName)
*pMaxSize,*pMonBase,*pMonsterId;
*pMonDistance,MinDistance=st_select_
Name[255]={0},*pMonsterN
MultiByteToWideChar(CP_ACP,0,MonsterName,strlen(MonsterName),Name,255);
pMaxSize=GetAddress(MonsterBase,mt_max);
for (UINT i=0;i&*pMaxSi++)
pMonBase=GetAddress(MonsterBase,mt_base3,i*4,mt_base4);
if (pMonBase!=NULL && *pMonBase!=NULL)
pMonDistance=(FLOAT*)GetAddress(pMonBase,mt_distance);
if (*pMonDistance&st_select_distance)
pMonsterName=(WCHAR*)GetAddress(pMonBase,mt_name1,mt_name2);
if (wcscmp(Name,pMonsterName)==0)
pMonsterStatus=GetAddress((DWORD*)BaseAddr,BaseOffset,mt_base1,mt_base2,mt_base3,i*4,mt_base4,mt_status);
if (*pMonsterStatus!=4)
if (*pMonDistance&MinDistance)
MinDistance=*pMonD
pMonsterId=GetAddress(pMonBase,mt_id);
if (MinDistance==st_select_distance){
return FALSE;
SelectById(*pMonsterId);
return TRUE;
//打开指定npc对话框
TalkWithNPC(char *NPCName)
*pMaxSize,*pNpcBase,NpcId;
Name[255]={0},*pNpcN
MultiByteToWideChar(CP_ACP,0,NPCName,strlen(NPCName),Name,255);
pMaxSize=GetAddress(MonsterBase,mt_max);
for (UINT i=0;i&*pMaxSi++)
pNpcBase=GetAddress(MonsterBase,mt_base3,i*4,mt_base4);
if (pNpcBase!=NULL && *pNpcBase!=NULL)
pNpcName=(WCHAR*)GetAddress(pNpcBase,mt_name1,mt_name2);
if (wcscmp(Name,pNpcName)==0)
pNpcDistance=(FLOAT*)GetAddress(pNpcBase,mt_distance);
if (*pNpcDistance&6)
NpcId=*GetAddress(pNpcBase,mt_id);
push NpcId
mov ecx,BaseAddr
mov ecx,[ecx]
mov ecx,dword ptr [ecx+0x20]
add ecx,0x0d4
call call_talknpc
return TRUE;
return FALSE;
//主线程函数#include &FSTREAM.h&
//函数定义
GaveOver();
KillThread();
Goto(UINT mapid,FLOAT x,FLOAT y);
LifeMagicThread();
Talk(char *TalkStr);
//变量定义
KillMonster
MonsterTask[255];
szRichEdit[255];
MonsterLen=0;
void DispathCmd(char *pCmd)
pCmd[4]=0x00;
if (strcmp(pCmd,"KILL")==0)
char Tmp[255];
while(strtok(pCmd,";"))
strcpy(Tmp,pCmd);
strtok(Tmp,",");
strcpy(MonsterTask[MonsterLen].MonsterName,Tmp);
MonsterTask[MonsterLen].Num=0;
MonsterTask[MonsterLen].MaxNum=atoi((char *)&Tmp[strlen(Tmp)+1]);
sprintf(szRichEdit,"\t杀怪:%s(%d)\r\n",MonsterTask[MonsterLen].MonsterName,MonsterTask[MonsterLen].MaxNum);
RichLog.AppendColorString(szRichEdit,RGB(0,0,0xff));
MonsterLen++;
pCmd+=strlen(pCmd)+1;
else if (strcmp(pCmd,"GOTO")==0)
strtok(pCmd,",");
UINT mapid=atoi(pCmd);
pCmd+=strlen(pCmd)+1;
strtok(pCmd,",");
FLOAT x=(FLOAT)atof(pCmd);
pCmd+=strlen(pCmd)+1;
FLOAT y=(FLOAT)atof(pCmd);
sprintf(szRichEdit,"\t开始跑路:%d,&%0.2f,%0.2f&\r\n",mapid,x,y);
RichLog.AppendColorString(szRichEdit,RGB(0,0,0xff));
Goto(mapid,x,y);
else if (strcmp(pCmd,"TALK")==0)
sprintf(szRichEdit,"\t开始对话:%s\r\n",pCmd);
RichLog.AppendColorString(szRichEdit,RGB(0,0,0xff));
strtok(pCmd,";");
TalkWithNPC(pCmd);
pCmd+=strlen(pCmd)+1;
Sleep(1000);
Talk(pCmd);
else if (strcmp(pCmd,"NAME")==0)
sprintf(szRichEdit,"新任务:%s\r\n",pCmd);
RichLog.AppendColorString(szRichEdit,RGB(0xff,0,0),TRUE,TRUE);
sprintf(szRichEdit,"当前任务:%s",pCmd);
SendMessage(hMainSbr,SB_SETTEXT,1,(LPARAM)szRichEdit);
void MainThread()
fstream taskfile(ScriptPath,ios::in);
char szLine[4096]={0},szTmp[255]={0};
memset(MonsterTask,0x00,sizeof(KillMonster)*255);
thLifeMagic.Create(LifeMagicThread);
while (!taskfile.eof())
taskfile.getline(szLine,4096);
char *pLine=szL
while (strtok(pLine,"|"))
strcpy(szTmp,pLine);
DispathCmd(szTmp);
pLine+=strlen(pLine)+1;
SendMessage(hMainSbr,SB_SETTEXT,0,(LPARAM)"脚本执行完毕!");
SendMessage(hMainSbr,SB_SETTEXT,1,(LPARAM)"等待新任务!");
BTEXEC.SetEnable(TRUE);
BTSELECT.SetEnable(TRUE);
taskfile.close();
void Goto(UINT mapid,FLOAT x,FLOAT y)
FLOAT *pCurX,*pCurY;
GoTo(mapid,x,y);
pCurX=(FLOAT*)GetAddress((DWORD*)BaseAddr,BaseOffset,ps_base,ps_x);
pCurY=(FLOAT*)GetAddress((DWORD*)BaseAddr,BaseOffset,ps_base,ps_y);
if ((*pCurX&=x-2 && *pCurX&=x+2) && (*pCurY&=y-2 && *pCurY&=y+2)){
sprintf(szRichEdit,"\t已达到目的地:%d,&%0.2f,%0.2f&\r\n",mapid,x,y);
RichLog.AppendColorString(szRichEdit,RGB(0,0,0xff));
Sleep(1000);
void LifeMagicThread()
FLOAT *pCurLife,*pCurMagic,*pMaxLife,*pMaxM
char szTmp[255];
UINT count1=ListLife.GetItemCount();
UINT count2=ListMagic.GetItemCount();
pMaxLife=(FLOAT*)GetAddress((DWORD*)BaseAddr,BaseOffset,ps_base,ps_max_life);
pMaxMagic=(FLOAT*)GetAddress((DWORD*)BaseAddr,BaseOffset,ps_base,ps_max_magic);
pCurLife=(FLOAT*)GetAddress((DWORD*)BaseAddr,BaseOffset,ps_base,ps_life);
pCurMagic=(FLOAT*)GetAddress((DWORD*)BaseAddr,BaseOffset,ps_base,ps_magic);
if ((*pCurLife / *pMaxLife)&st_lifepoint)
for (UINT i=0;i&count1;i++)
ListLife.GetItemText(i,0,szTmp,255);
if (UseGoods(szTmp))
sprintf(szRichEdit,"\t使用红药:%s\r\n",szTmp);
RichLog.AppendColorString(szRichEdit,RGB(0xff,0,0));
memset(szTmp,0x00,255);
if ((*pCurMagic / *pMaxMagic)&st_magicpoint)
for (UINT i=0;i&count2;i++)
ListMagic.GetItemText(i,0,szTmp,255);
if (UseGoods(szTmp))
sprintf(szRichEdit,"\t使用蓝药:%s\r\n",szTmp);
RichLog.AppendColorString(szRichEdit,RGB(0,0,0xff));
memset(szTmp,0x00,255);
Sleep(st_Time_Interval);
void Pickup()
char szTmp[255]={0};
UINT count=ListPickUp.GetItemCount();
for (UINT i=0;i&i++)
ListPickUp.GetItemText(i,0,szTmp,255);
if (PickUp(szTmp))
sprintf(szRichEdit,"\t拾取物品:%s\r\n",szTmp);
RichLog.AppendColorString(szRichEdit,RGB(0,0,0xff));
void KillThread()
for (UINT i=0;i&MonsterLi++)
while (MonsterTask[i].Num&MonsterTask[i].MaxNum)
if (SelectMonster(MonsterTask[i].MonsterName))
if (*pIfSelected==0)
MonsterTask[i].Num++;
sprintf(szRichEdit,"\t已杀怪:%s (%d/%d)\r\n",MonsterTask[i].MonsterName,MonsterTask[i].Num,MonsterTask[i].MaxNum);
RichLog.AppendString(szRichEdit);
Sleep(1000);
void Kill()
thKill.Create(KillThread);
thKill.WaitForEnd();
memset(&MonsterTask,0x00,sizeof(KillMonster)*255);
MonsterLen=0;
void Talk(char *TalkStr)
DWORD *pCanMove=GetAddress((DWORD*)BaseAddr,BaseOffset,ps_base,0x12fd);
mov eax,pCanMove
mov [eax],0
while (strtok(TalkStr,","))
win.SendLBClick(30,180+12.5*(atoi(TalkStr)-1));
TalkStr+=strlen(TalkStr)+1;
sprintf(szRichEdit,"\t对话完毕!\r\n");
RichLog.AppendColorString(szRichEdit,RGB(0,0,0xff));
void GameOver()
thLifeMagic.Terminate();
thKill.Terminate();
thMain.Terminate();
//对话框函数#include "header.h"
ID_MAINSBR
//初始化状态栏
void InitStatusBar()
int aWidths[2]={100,-1};
SendMessage(hMainSbr,SB_SETPARTS,2,(LPARAM)aWidths);
SendMessage(hMainSbr,SB_SETTEXT,0,(LPARAM)"等待加载脚本!");
SendMessage(hMainSbr,SB_SETTEXT,1,(LPARAM)"当前任务:无");
//加载设置
void LoadSetting(HWND hDlg)
char *pLifeGoods=st_lifegoods,*pMagicGoods=st_magicgoods,*pPickUp=st_pickup,tmp[255]={0};
while (*pLifeGoods)
strtok(pLifeGoods,"|");
ListLife.InsertItemText(i,pLifeGoods);
pLifeGoods+=strlen(pLifeGoods)+1;
while (*pMagicGoods)
strtok(pMagicGoods,"|");
ListMagic.InsertItemText(i,pMagicGoods);
pMagicGoods+=strlen(pMagicGoods)+1;
while (*pPickUp)
strtok(pPickUp,"|");
ListPickUp.InsertItemText(i,pPickUp);
pPickUp+=strlen(pPickUp)+1;
sprintf(tmp,"%.0f",st_lifepoint*100);
SetWindowText(GetDlgItem(hDlg,IDC_EDITLIFE),tmp);
sprintf(tmp,"%.0f",st_magicpoint*100);
SetWindowText(GetDlgItem(hDlg,IDC_EDITMAGIC),tmp);
sprintf(tmp,"%d",st_Time_Interval);
SetWindowText(GetDlgItem(hDlg,IDC_EDITTIME),tmp);
int CALLBACK DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
switch(uMsg)
case WM_INITDIALOG:
if (LoadConfig()==FALSE)
MessageBox(hDlg,"加载配置文件失败!","错误",MB_OK|MB_ICONERROR);
EndDialog(hDlg,0);
GetBaseAddr();
win.FindWindow(GameName);
hMainSbr=CreateStatusWindow(WS_CHILD|WS_VISIBLE|SBARS_SIZEGRIP,NULL,hDlg,ID_MAINSBR);
InitStatusBar();
RichLog.Associate(hDlg,IDC_RICHLOG);
ListLife.Associate(hDlg,IDC_LISTLIFE);
ListMagic.Associate(hDlg,IDC_LISTMAGIC);
ListPickUp.Associate(hDlg,IDC_LISTPICKUP);
BTEXEC.Associate(hDlg,IDB_EXEC);
BTSELECT.Associate(hDlg,IDB_GETSCRIPT);
LoadSetting(hDlg);
case WM_CLOSE:
GameOver();
EndDialog(hDlg,0);
case WM_COMMAND:
switch (LOWORD(wParam))
case IDB_EXEC:
thMain.Create(MainThread);
BTEXEC.SetEnable(FALSE);
BTSELECT.SetEnable(FALSE);
case IDB_GETSCRIPT:
OPENFILENAME
memset(&ofn,0x00,sizeof(ofn));
ofn.lStructSize=sizeof(ofn);
ofn.hwndOwner=hD
ofn.lpstrFile=ScriptP
ofn.nMaxFile=260;
ofn.lpstrFilter="Text File(*.txt)\0*.txt\0任意文件(*.*)\0*.*\0\0";
if (GetOpenFileName(&ofn)){
BTEXEC.SetEnable(TRUE);
SetWindowText(GetDlgItem(hDlg,IDC_PATH),ScriptPath);
SendMessage(hMainSbr,SB_SETTEXT,0,(LPARAM)"加载脚本成功!");
SendMessage(hMainSbr,SB_SETTEXT,0,(LPARAM)"加载脚本失败!");
LRESULT CALLBACK KeyboardProc(
// hook code
WPARAM wParam,
// virtual-key code
LPARAM lParam
// keystroke-message information
if (code&0)
return CallNextHookEx(hkGame,code,wParam,lParam);
if (wParam==VK_F12 && lParam&0x)
DialogBox(GetModuleHandle("GameDll.dll"),MAKEI***ESOURCE(IDD_DIALOG1),NULL,DlgProc); //第一个参数也可以写作:(HMODULE)LoadLibrar("GameDll.dll")
extern "C" __declspec(dllexport) void StartHook(char *gamename)
strcpy(GameName,gamename);
DWORD TID=GetWindowThreadProcessId(FindWindow(NULL,GameName),NULL);
if (!TID){
MessageBox(0,"请先打开游戏!","提示",MB_OK|MB_ICONINFORMATION);
hkGame=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("GameDll.dll"),TID);
if (!hkGame){
MessageBox(0,"尝试注入到游戏进程失败!","错误",MB_OK|MB_ICONERROR);
阅读(...) 评论()