一:巡航系统
理想情况:
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 文件传不上来,不过游戏内部数据早变了,也用不了,发来大家吐槽下。