暗黑3 外挂开发资料

一:巡航系统

理想情况:
1.自动清理人物所在地图的所有区域
2.根据脚本设定的指令自动进入/不进入地图内的地下城(洞子)
3.自动跳过过场动画

二:战斗系统

1.人物技能使用
(每一个技能都可以用下面任意一种方式进行设定,如能多条方式能共同存在就更好)
1)根据判定角色身上有无此状态来使用    (如某buff 技能,当无此buff时使用)
2)根据血量百分比使用技能              (血量低于多少百分比使用某技能)
3)根据CD使用技能                      (当某技能不在冷确时间时使用)
4)根据时间设置使用技能                (每过多少秒使用某技能)
5)根据怪物数量或者精英怪使用技能      (怪物达到多少或者是精英怪时才使用某技能)

2.怪物技能躲避
对怪物施放的技能进行自动跑位躲避,比如 冰 火  秘 毒 等元素技能。

三:目标使用及易碎物摧毁等
比如:开宝箱,开圣坛,翻尸体,摧毁路障,摧毁其他障碍物等
注:
1.这些最好能放在脚本里面,根据使用者喜好和必要性添加或删除是否使用。因为有些地方需要通过摧毁路障才能通过,有些地方则是浪费时间。
2.如果目标和角色不在同一水平线上,则不执行,否则可能出现发呆,隔空打物等情况。

四:存仓修装拾取等规则

1.金币拾取  首先有开启/关闭拾取金币功能 其次可设置根据金币数量多少以上才拾取
2.装备拾取  根据装备物品等级拾取
3.装备存仓  首先根据背包状态判定是否回城存装。其次根据脚本指令是否鉴定装备。最后,如已鉴定装
            备,根据属性决定是存进仓库还是卖给NPC(此项较复杂,需讨论)。
4.回城修理  根据人物身上装备的耐久度来决定是否回城修装。
5.优先拾取物品/优先打怪 功能。(理想状态下,玩家可根据自己喜好设定,是优先拾取物品还是优先打怪,如果优先拾取物品,就是地上有符合拾取的东西先捡再打怪,但是如果装备不好,特别是如果距离较远就容易死掉。如果优先打怪,就有可能因为追怪而远离了之前掉落的物品,而错失掉落的物品)

五:任务
自动接受黄色或蓝色感叹号的任务,自动点击游戏下方出现的与NPC的对话。(可选择开启或关闭)

六:随机时间设定  (可有可无,也许有助于防封)
完成某一项具体动作后随机等待多少时间再执行下一动作。
比如随机时间是1-10秒,在完成修装,存仓,回城后都可以用上此随机时间。
具体例子:
背包满后需要回城则执行以下一系列动作:
回城-----随机等待4秒------移动到仓库-----鉴定物品------存仓------随机等待8秒------移动到-----修装NPC处------卖物品修装备-----随机等待7秒------返回到传送门

七:登录系统
1.自动登录
2.掉线自动重连 (最好可以自行设置次数,比如设置重连3次,如不成功则放弃,避免游戏维护时无限登录游戏)
3.根据设置自动切换客户端美 欧 亚 三服

八:其他功能
秒退 超时秒退等功能。

 

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <vector>
#include   <afxwin.h>
#include <set>
#include "math.h"
#include <algorithm>
typedef unsigned char byte;
using namespace std;
struct roleInfo
{
 int acdBase;//人物对象地址
 int actBase;//
 int acdId;//人物ID惟一组队用的是此ID
 //int roleObjID;//对象ID.别人看到的周围对象ID
 //WCHAR roleNameame[40];//人物名
 string roleName;
 wchar_t cName[80];//中文名
 string mapName;
 char typeName[40];
 int typeId;//对象类别 例如道具 建筑物 玩家 NPC等
 int typeIndex;//对象存在的位置 例如地面 背包 仓库 商店 等
 int roleHP;//人物当前血量
 int roleMaxHP;//最大血量
 int roleMP;//当前念力
 int roleMaxMP;//最大念力
 int roleExp;//当前经验
 int roleMaxExp;//最大经验
 int roleLevel;//等级
 char roleSex;//0为男1为女
 char isOnline;//1为在线 0为离线
 float x;//坐标
 float y;
 float z;
 int jl;//距离
 int mapId1;//地图ID
 int mapId2;

 char roleMapName[80];//角色所在地图
 int cashMoney;//点券
 int goldMoney;//金币
 int addNum;
 //int xMoney;//星币
 int roleGridCount;//角色背包格子总数
 int petGridCount;//已有宠物格子总数
 int actId;
 int fagId;
 int isExists;
 int color;//装备颜色
 /*
 装备颜色
 0 灰
 1-2 白装
 3-5 蓝 魔法装备
 6-8 黄色 稀有装备
 9 橙色 传奇装备
 */
 string colorDesc;//颜色描述
 int index1;//第几行
 int index2;//第几列
 int goodsNum;//数量
 int last;//持久
 int maxLast;//持久上限
 roleInfo()
 {
  isExists=1;
  acdBase=-1;
  acdId=-1;
  //roleNameame[0]='\0';
  roleHP=0;
  roleMaxHP=0;
  jl=999;
 }
};
struct kv
{
 int k;
 int aid;
 int v;
};
struct tz
{
 char PY[10];
 int DATA[3];
 bool isJmp;//是否类似跳转
 bool isZZ;//是否只要地址
 char dName[40];
 tz()
 {
  isZZ=false;
  isJmp=false;
 }
};


struct goodsInfo
{
 int goodsId;//物品ID
 int goodsIndex;//物品下标
 int goodsType;//物品类别
 int goodsNum;//物品数量
 int goodsBase;//物品基址
 int goodsLevel;//物品等级
 int minLevel;//至少多少级才能使用
 int maxLevel;//最多多少级能使用
 int isBind;//是否绑定
 int isFightingUse;//是否战斗可用
 int last;//当前持久
 int maxLast;//最大持久
 char isTimeOver;//是否过期
 char equipIndex;//可装备位置
 char sexType;//要求性别
 char zzType;//要求的种族
 string goodsDesc;//物品描述
 string goodsName;//物品名字
};
struct petInfo
{
 int petBase;//宠物对象地址
 int petID;//宠物ID
 string petName;//自己修改的宠物名字
 int petHP;//宠物血
 int petMaxHP;//宠物最大血量
 int petMP;//蓝
 int petMaxMP;//最大蓝量
 int petExp;//经验
 int petMaxExp;//升级所需经验
 int zc;//忠诚度
 int sm;//寿命
 int level;//等级
 int rLevel;//可携带等级
 int addNum;//潜力
 int isFight;//是否出战状态
 int petIndex;
 petInfo()
 {
  petBase=0;
 }
};
struct taskInfo
{
 int taskBase;//任务基址
 int taskId1;//任务ID1
 int taskId2;//任务ID2
 int taskDifficulty;//难度
 int index1;//第几章
 int index2;//第index1章第index2个任务
 int index3;//第index1章第index2个任务index3个子任务
 int tpara1;
 int tpara2;
 int tpara3;
 int tpara4;
 //int taskPara;
 //string taskName;
 //string taskType;//任务类别
 //string taskDesc;
 //string acceptNpcName;//接任务NPC名字
 ///int npcId;//接或交任务NPCID
 //int cityId;//城市ID
 //string acceptCity;//接任务城市
 //POINT cpoint;//接任务坐标
 //int taskState;//2任务正在进行.3任务完成. 5表示任务失败
};
struct teamInfo
{
 int actId;
 int fagId;
 int acdBase;
 string roleName;
};
struct talkInfo
{
 string talkTemp;
 int talkIndex;
 int talkId;
};
struct keyData
{
 int hwnd;
 int mtype;
 int keycode;
 int keystate;
};
struct skillInfo
{
 int skillBase;
 int skillId;
//  string skillName;
//  int rMoney;//升级所需金钱
//  int rExp;//升级所需经验
//  int isCanUse;//是否可用。这里只检测心法是否达到技能需要的指定等级。其它所需血量蓝量要求没有检测。你自己检测。
//  int skillLevel;
//  int isZd;//是否主动技能
 //int rhp;
 //int rmp;
 //string skillXG;//技能效果


};
struct buffInfo
{
 string buffName;
 int buffIndex;
 int buffTime;//剩余时间
};
struct activityInfo
{
 string activityName;//活动名
/// string npcName;//活动发布人
// string huoYueDu;//活跃度说明
// string aTime;//时间段
 int completeNum;//完成次数
 int maxNum;//最大次数
// int minLevel;//活动所需最小等级
// int maxLevel;//活动所需最大等级
 int activityId;
 int huoYueDu;
 activityInfo()
 {
  completeNum=0;
  maxNum=0;
 }
};
struct liBaoInfo
{
 string liBaoName;//礼包名字
 int isCanGet;//是否可以领取
 int liBaoId;//ID
};
struct winInfo
{
 int winBase;
 int isV;//是否可见
 int isE;//是否可用
 string winName;
 string winText;
};
// float mvFloat;
// int mvInt;


struct searchPara1
{
 int s1;
 int s2;
 float x;
 float y;
 float z;
 int z1;
 int z2;
 float z3;
 int actBase;
};
struct callPara
{
 int acdBase;
 int acdType;
 int acdId;
 float x;
 float y;
 float z;
 int mapId1;
 int useSkill;
};
struct taskTP
{
 int diff;//难度
 int taskId1;
 int taskId2;
};

struct store
{
 int selfAcdBase;
 int goodsAcdBase;
 int storeOrFetch;
};
struct buySp
{
 int acdBase;
 int buyOrSell;
 int acdId;
};

 

//
//
//主要信息 ---------------

 

void initData(HANDLE hd=(HANDLE)-1,BOOL show=false);//初始化数据,这个函数必须在注入DLL后马上调用.
//获取周围对象信息包括商店物品周围玩家NPC怪物背包物品仓库物品等等
//各种对象是什么参数roleInfo的typeName
//背包物品的typeIndex==0 typeId==5
//地面物品的typeIndex==-1 typeId==5
//仓库物品的typeIndex==0xf typeId==5
//商店物品的typeIndex==0x11 typeId==5
//已经装备物品的(0x1<=typeIndex<=0xD)并且typeId==5
vector<roleInfo> getAroundList(HANDLE hd=(HANDLE)-1,int self=0);
//获取窗体的子窗体 parentBase为winInfo结构的winBase如果获取最顶层窗体的子窗体则parentBase为0
vector<winInfo> getWinList(int parentBase=0);
//参数为控件名字,返回值为0表示不可见大于0表示可见,返回值为winInfo的winBase
int IsWindowV(CString winName);
//获取鼠标当前悬停指向的窗体名字。这个函数非常重要。。你可以启动一个线程不停的调用 此函数来观察鼠标指向的窗口名字
//获取到窗口名字后你可以记下窗口名把他当作参数传入 点击控件示例clickKJ(IsWindowV(控件名字))
CString funcShowHover();
//获取传送平台的可选传送点 需要先打开传送平台
vector<winInfo> getCanSelectCuanSong();
//打开对象
//int csPara[60];
//打开传送门,传送平台,储物箱,各种箱子,拾取物品,上述这些动作的callType为0x7545 打开NPC为0x7546,上述动作只需考虑前两个参数
//如果是使用技能 则useSkill传1  callType为技能ID,如果对敌人使用则acdId传敌人actId,如果对自己使用则传-1
//如果是指向性技能则acdId传-1和你想攻击的坐标的x,y,z和地图id,非指向性技能(可以选择目标攻击的技能)则不需要传x,y,z和mapId1,只需要传敌人的acdID
void __stdcall callCSPT(int acdId,int callType=0x7545,int useSkill=0,float x=0,float y=0,float z=0,int mapId1=0x772e0000);
//点击控件 回城也可以使用此函数 kjBase可以用IsWindowV获得。窗体名字一般不会变的。
void __stdcall clickKJ(int kjBase);
//寻路 mapId1为当前角色信息的mapId1
void __stdcall searchXY(int actBase,float searchX,float searchY,float searchZ,int mapId1);//寻路
vector<taskInfo> getCanSelectTaskList(int diff);//在角色选择画面获取可选任务信息 需要先打开可选任务框再调用此函数 diff为难度 0,1,2,3 0代表普通
taskInfo getCurTaskInfo();//获取当前任务信息
//参数1为难度 选择任务
void selectTask(int diff,int taskId1,int taskId2);
vector<skillInfo> getSkillInfo();//获取技能信息为1,2,3,4,鼠标左,鼠标右,上的技能信息
//存取物品 storeOrFetch=0表示存 1表示取
void __stdcall storeFetch(int selfAcdBase,int goodsBase,int storeOrFetch=0);
//买卖物品 0表示买,1表示卖
void __stdcall buySell(int goodsAcdBase,int buyOrSell=0);
//修理所有装备
void __stdcall repairAll(int selfAcdId);
roleInfo getRoleInfo(); //获取角色信息
//设置登陆的账号密码 在登陆界面调用
void __stdcall setUserPwd(char *userName,char *password);

 

csdn 无法传文件,lib,dll 文件传不上来,不过游戏内部数据早变了,也用不了,发来大家吐槽下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值