暗黑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 文件傳不上來,不過游戲內部數據早變了,也用不了,發來大家吐槽下。
總結
以上是生活随笔為你收集整理的暗黑3 外挂开发资料的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 抓包分析命令
- 下一篇: C++ Merge sort(归并排序)