游戏地址
gU~)(|Nu. www.fgcq996.com /,>.${,;u 那年传奇百区1.76 ~Afs J6%op{7/ 找到 lua_State 然后调用下面的函数就能实现功能
2"MI8EK
一个跑单狗注意qq1946913194
~>C >LH>
8 游戏账号密码。fanren9527 qq2293307009 *Qf}4
a0
M[{Cy[ta 搞完演示完,删除好友跑单 <R(2 9QN [T%blaSX --自动寻路Ex
@TprSd function API_AutoMoveEx(mapX, mapY)
< 5PeI ssr.AutoMoveBegin(mapX, mapY, ssr.GetCurMapData().mapID)
5`uS<[vA local inputProxy = global.Facade:retrieveProxy(global.ProxyTable.PlayerInputProxy)
JdRs=#X local pathPoints = inputProxy:GetPathFindPoints()
"_K 6= if pathPoints == nil then
C49
G& return 0
1CM1u+<iZ
end
Sy'>JHx return #pathPoints
ye%F <:O7 end
KC(Ug4 ^~aSrREo --自动寻路
S|J8:- function API_AutoMove(mapX, mapY)
wtUG2 ( ssr.AutoMoveBegin(mapX, mapY, ssr.GetCurMapData().mapID)
5QSmim local inputProxy = global.Facade:retrieveProxy(global.ProxyTable.PlayerInputProxy)
@j
(jOe local pathPoints = inputProxy:GetPathFindPoints()
:A'!u r=\ if pathPoints == nil then
kwL)&@ return 0
:acQK=fe end
)2$_:Ek return #pathPoints
)q^vitkjup end
10J*S[n1 xY S%dLE" --停止寻路
9y4rw]4zI function API_AutoMoveEnd()
d!t@A global.Facade:sendNotification(global.NoticeTable.AutoMoveEnd)
xS}H483h6W end
x-pMT3m\D# %_[-[t3 --自动打怪
9y5\4&v function API_AutoFight(isAFK)
[5VUcXGt*\ if isAFK then
@ 7?_Yw if not IsAFKState() then
3XnXQ/({ global.networkCtl:SendMsg(global.MsgType.MSG_CS_AUTOPLAYGAME_REQUEST, 1)
UIl_&| global.Facade:sendNotification(global.NoticeTable.AFKBegin)
PWMaB end
#{M
-3 else
}$)<k if IsAFKState() then
?R(3O1,v^ global.networkCtl:SendMsg(global.MsgType.MSG_CS_AUTOPLAYGAME_REQUEST, 2)
IebS~N
E global.Facade:sendNotification(global.NoticeTable.AFKEnd)
l0&8vhw8k end
LasH[:QQQ end
[86'/:L\2 end
a
98 (<l2 ^H function IsAFKState()
#$w#"Nr9k local AutoProxy = global.Facade:retrieveProxy(global.ProxyTable.Auto)
]#$kA9 return AutoProxy:IsAFKState()
LU{Z end
wB)+og-^1f (M+<^3c --打开自动穿戴
FJLJ;]`7+
function API_AutoDress()
FZ9<Q --不抢别人归属
$dP)8_Z2 global.MMO.SETTING_IDX_NO_ATTACK_HAVE_BELONG =1
xu=B global.MMO.SETTING_IDX_AUTO_PUT_IN_EQUIP = 1
JY2
F-0t) local ServerOptionsProxy = global.Facade:retrieveProxy(global.ProxyTable.ServerOptionsProxy)
o
x^lI ServerOptionsProxy._data["autoDress"] = 1
L0kNt
&di global.ConstantConfig.autousetimes = 0
$5b|@ end
'y?|shV{]
@__;RVQ --强制打开自动挂机拾取
i6d$/yP" function API_AutoPick()
UTQKlwPa local ItemConfigProxy = global.Facade:retrieveProxy(global.ProxyTable.ItemConfigProxy)
9+QrTO local config = ItemConfigProxy.config
.A\ \v6@ for k, v in pairs(config) do
tFaE cP --local res = string.gsub(v.pickset, "0", "1")
.( h$@|Y v.pickset = v.pickset .. 1
#Qr4Ke$g[l end
7LwS =yP end
sAoM=n}! DANSexW --获取人物坐标
`#rfp
9w function API_GetMapXY()
n@;x!c< + return ssr.GetMainPlayerMapPos()
&HK s > end
;J(,F:N O ->eg --获取人物状态
-;\+uV function API_GetAction()
rk/
c local player = global.gamePlayerController:GetMainPlayer()
X u):.0I local list = global.playerManager.mPlayersInCurrViewField
+Rgw+o return player:GetAction()
IxZ.2 67 end
@;fE%N xLI{=sL --设置宠物状态
38rZ`O*D function API_PetSleep(isSleep)
}4]<P local SummonsProxy = global.Facade:retrieveProxy(global.ProxyTable.SummonsProxy)
F2$bUY if not SummonsProxy:IsAlived() then
nb_^3K]r return false
;_/q>DR>,3 end
Sx)Il~ x if isSleep then
m@.{zW7bO SummonsProxy:RequestModeChange(2)
;q; C^l else
c@-
K SummonsProxy:RequestModeChange(4)
;p
5v3<PC end
WrNgV@P end
!><
%\K o#P3lz --获取人物数据
<aaDW function API_GetGamePlayer()
'd^gRH<z local player = global.gamePlayerController:GetMainPlayer()
7f%Qc
%B local list = global.playerManager.mPlayersInCurrViewField
y8vH?^:%< local person = {}
7J;~&x person["等级"] = player:GetLevel()
Tud1xq person["职业"] = player:GetJobID()
Ue#yDTjc person["名字"] = player:GetName()
_IV@^v person["金币"] = ssr.GetMoneyCountById(1)
6KCmswvE person["元宝"] = ssr.GetMoneyCountById(2)
,/6:bc:W person["绑金"] = ssr.GetMoneyCountById(3)
+
MZO%4 return person
qW~R-g] end
1MI7l)D? 5^K#Tj ;2 function API_GetGamePlayerLevel()
2 dD<] local player = global.gamePlayerController:GetMainPlayer()
m"(d%N7 return player:GetLevel()
;3|Lw<D5; end
` G=L07 KWJgW{{v --获取周围怪物
C9U{
^ function API_GetMonster()
=)- Q?1q local list = global.monsterManager.mMonstersInCurrViewField
qH
Ga local actors = {}
rm=~^eB for k, v in pairs(list) do
/ =m9s local actor = {}
'e>sHL actor["mID"] = v:GetID()
bo;pj$eR3R actor["mName"] = v:GetName()
n
[Xzo} actor["mRace"] = v:GetRace()
Ik5jwfz actor["mType"] = v:GetType()
e( o/we{ actor["mSubType"] = v:GetSubType()
a\69,%!: actor["mX"] = v:GetMapX()
kbYg4t]FH actor["mY"] = v:GetMapY()
O;0<^M/0G actor["mAction"] = v:GetAction()
O)xEF~DaD actor["mTypeIndex"] = v:GetTypeIndex()
|SP.S 0.y actor["mAnimationID"] = v:GetAnimationID()
/QXs-T}d
actor["mLv"] = (v.GetLevel and { v:GetLevel() } or { 0 })[1]
pR6A#DgB actor["mSex"] = (v.GetSexID and { v:GetSexID() } or { 0 })[1]
'}+X,Usm actor["mJobID"] = (v.GetJobID and { v:GetJobID() } or { 0 })[1]
^wF@6e7/& actor["mHP"] = (v.GetHP and { v:GetHP() } or { 0 })[1]
4@]xn actor["mHPMax"] = (v.GetMaxHP and { v:GetMaxHP() } or { 0 })[1]
#* gU[9U~ actor["mMP"] = (v.GetMP and { v:GetMP() } or { 0 })[1]
{vT55i<mk actor["mMPMax"] = (v.GetMaxMP and { v:GetMaxMP() } or { 0 })[1]
X;6
r$
actor["mOwnerID"] = (v.GetOwnerID and { v:GetOwnerID() } or { "" })[1]
nqxq@.L2 actor["mOwnerName"] = (v.GetOwnerName and { v:GetOwnerName() } or { "" })[1]
VuMDV6^Z actor["mGuildName"] = (v.mGuildName and { v.mGuildName } or { "" })[1]
N9=r#
![>, actor["mColor"] = "0xFFFFFF"
2v9s@k/k)6 if v:GetType() == global.MMO.ACTOR_PLAYER then
PyT}}UKj: local batch_label = global.MMO.HUD_TYPE_BATCH_LABEL
Uaj` local label_name = global.MMO.HUD_LABEL_NAME
Ac!&j=ZE local hudName = global.HUDManager:GetHUD(v:GetID(), batch_label, label_name)
Kt90mA if hudName then
K-EI?6`xM actor["mColor"] = GetColorHexFromRBG(hudName:getColor())
12d}#G<q- end
%wjB)Mae end
:uwRuPI table.insert(actors, actor);
ju^"vw end
`H2F0{\og Q)6wkY+! return actors
d0A\#H_& end
Ef`5fgp?
S ]EM)_ :tRf --遍历周围玩家
UiK+c30FU function API_GetPlayer()
K"k"ml<4E local list = global.playerManager.mPlayersInCurrViewField
"dK|]w8 local actors = {}
y/}VtD for k, v in pairs(list) do
OHP3T(Q5 local actor = {}
HcBH!0 actor["mID"] = v:GetID()
B!r48<p actor["mName"] = v:GetName()
kh?#={]Z actor["mRace"] = v:GetRace()
ui56<gI- actor["mType"] = v:GetType()
T]nR=uK6LL actor["mSubType"] = v:GetSubType()
CS;W)F actor["mX"] = v:GetMapX()
4ljvoJ}xjr actor["mY"] = v:GetMapY()
N^Hn9n actor["mAction"] = v:GetAction()
B)*#g actor["mTypeIndex"] = v:GetTypeIndex()
/SCZ& actor["mAnimationID"] = v:GetAnimationID()
tT* W5 actor["mLv"] = (v.GetLevel and { v:GetLevel() } or { 0 })[1]
g2aT`=&Z actor["mSex"] = (v.GetSexID and { v:GetSexID() } or { 0 })[1]
w{r(F` actor["mJobID"] = (v.GetJobID and { v:GetJobID() } or { 0 })[1]
gl9pgY1ni actor["mHP"] = (v.GetHP and { v:GetHP() } or { 0 })[1]
{FJX actor["mHPMax"] = (v.GetMaxHP and { v:GetMaxHP() } or { 0 })[1]
7zg)h actor["mMP"] = (v.GetMP and { v:GetMP() } or { 0 })[1]
2-6.r_ actor["mMPMax"] = (v.GetMaxMP and { v:GetMaxMP() } or { 0 })[1]
[^U; actor["mOwnerID"] = (v.GetOwnerID and { v:GetOwnerID() } or { "" })[1]
xV,4U/T actor["mOwnerName"] = (v.GetOwnerName and { v:GetOwnerName() } or { "" })[1]
/h7>Z9T actor["mGuildName"] = (v.mGuildName and { v.mGuildName } or { "" })[1]
6t_ 3%{ actor["mColor"] = "0xFFFFFF"
b>bgUDq if v:GetType() == global.MMO.ACTOR_PLAYER then
uq|vNLW26 local batch_label = global.MMO.HUD_TYPE_BATCH_LABEL
W.J:.|kt local label_name = global.MMO.HUD_LABEL_NAME
?79SP p)oo local hudName = global.HUDManager:GetHUD(v:GetID(), batch_label, label_name)
urT/+deR if hudName then
(pE\nuA\ actor["mColor"] = GetColorHexFromRBG(hudName:getColor())
T+K` ^xv_L end
V/(`Ek- end
TRk
?8 table.insert(actors, actor);
{(M&-~Yh end
qP;{3FSkAF return actors
d(X\B{ end
F8uRT&m B0
wsf Hd<Z_ --遍历周围玩家EX
C`2*2Y%xkG function API_GetPlayerExe()
'z +$3\5L local s1 = API_GetPlayer()
d^Zo35X local result = ""
u+mjguIv for k, v in pairs(s1) do
k+WO &g*| local s2 = string.format(
FtFv<UV "mID=%s,mName=%s,mRace=%s,Dura=%s,mType=%s,mSubType=%s,mX=%s,mY=%s,mAction=%s,mTypeIndex=%s,mAnimationID=%s,"
+H
[}T ] , v["mID"]
_Sly7_ , v["mName"]
c
YM CfP , v["mRace"]
'<?v:pb9 , v["Dura"]
|t&G&)~: , v["mType"]
b:F Ep'ZS , v["mSubType"]
yfM>8"h@ , v["mX"]
V6@*\+:3) , v["mY"]
L9{mYA]q , v["mAction"]
;L
G
%s , v["mTypeIndex"]
jU]]:S4xD/ , v["mAnimationID"])
YW?7*go'Z local s3 = ""
24H^hN9 local s3 = string.format("mLv=%s,mSx=%s,mJD=%s,mHP=%s,mHPx=%s,mMP=%s,mMPx=%s,mOID=%s,OwN=%s,mGld=%s,mCor=%s"
B_SZ?o , v["mLv"]
vs\'1^*D , v["mJobID"]
KFTf~!|
, v["mHP"]
R<n8M"B , v["mHPMax"]
=E
[ 4H , v["mMP"]
:(bdI] , v["mMPMax"]
1P[I}GW# , v["mOwnerID"]
VM-qVd- , v["mOwnerName"]
.N5
hV3 , v["mGuildName"]
i"%JFj_G , v["mColor"])
A~6%,q@^jh result = result .. s2 .. s3 .. "\r\n"
6[+\CS7Lt end
zB#_:(1qK return result
U{T[*s end
BKE\SWu Bmx(qE --遍历周围指定NPC
<=;H[}
e function API_GetNpcIdByName(npcName)
935-{h@k local npcVec = global.npcManager:FindNpcInCurrViewField()
?(5o@Xq local npc = {}
U8-Q'1IT& for k, v in pairs(npcVec) do
+={ local npcs = {}
aUypt(dv npc[v["mID"]] = v["mName"]
qhV,
u;\. end
:`+|'*b(A for key, value in pairs(npc) do
E
fP>O local sPos, ePos = string.find(value, npcName)
z>cIiprX if sPos then
l5FuMk- return key
Y%78>-2L end
DC?21[60 end
V*6l6-y~Ih return nil
v2/yw, end
tt+>8rxF:; Z"6 2#VM --NPC名称打开NPC
z$9@j2
function API_NpcTalk(npcName)
1YJ_1VJ local npcid = API_GetNpcIdByName(npcName)
DNm(:%)0 local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
Mam8\ NPCProxy:RequestTalk(npcid)
e1^fUOS end
8g<Q5( SX1X<9 --NPCID打开NPC
;\<""Yj@l function API_NpcTalkEx(npcid)
FX%t local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
4=u+ozCG NPCProxy:RequestTalk(npcid)
'8s>rH5[V end
0zg 2g!lh y]yine function API_GetNpcTalkData()
{
V}t'x`4c local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
wVx,JL5Jr local talkData = NPCProxy:GetCurrentNPCTalkData()
NFB*1_m return talkData
6N9 c<JC end
]YCPyc: TRF]i/Bs function API_GetAllLink()
fA"<MslKLK local talkData = API_GetNpcTalkData()
\bU
` yJDeX1+, local acts = {}
dv"as4~% local kv = {}
yOX&cZ[ 8<YX7e for line in talkData.content:gmatch("(text=.->)") do
#$LH2?) if string.find(line, "@") then
L/H v4={ local key = line:match("text=(.-)|")
_
,DO~L gzVtxDh local value = line:match("(@.-)>")
6D/uo$1Y kv[key] = value
*,"jF!C&[ end
By2s ']bw end
F(d
:t! x|.v{tQa for result in talkData.content:gmatch("(@.-)>") do
fx<FIj7 table.insert(acts, result)
9 0X?1 end
t";{1. local sendData = {
'#O;mBPNi UserID = talkData.npcID,
3Bejp+xX index = talkData.index,
rVUUH! --Act = "@blbumj",
hdo&\Q2D8 --commonInput = jsonData.commonInput,
^`tk/#h\9F --inputID= jsonData.inputID,
7e1
dEgn }
@'*eC}\E return acts, kv, sendData
`-4'/~G end
EbCIIMbe" #"::
'?, --按索引号点击按
-7k[Vg? function API_ClickLinkByIndex(index)
E [S?
b=^ acts, kv, sendData = API_GetAllLink()
Iha[Gu sendData["Act"] = acts[index + 2]
N5m'To] local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
@zo7.'7P NPCProxy:ExecuteWithJsonData(sendData)
5gSylts8 end
{1jpLdCbV^ q^5yk=2fq --按索购买引号点击按
X` ATH^S function API_ClickBuyLinkByIndex(index)
>L^xlm%7o acts, kv, sendData = API_GetAllLink()
Yg/}ghF\ sendData["Act"] = acts[index]
BU!#z(vU local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
2R~6<W+&:> NPCProxy:ExecuteWithJsonData(sendData)
$K})Q3FNi end
E(_KN[}S ,"B?_d6 --按名称点击按
jk )Vb function API_ClickLinkByName(linkName)
q %>7L<r acts, kv, sendData = API_GetAllLink()
G%S6$@: sendData["Act"] = kv[linkName]
tmp6hB local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
.hKhrcQp NPCProxy:ExecuteWithJsonData(sendData)
'qjX$]H end
W]_g4,T> )Nbc/nB$ --出售物品
!K[/L<
Kv function API_Sell(npcName,itemsName)
Dv@PAnk3C local npcId=API_GetNpcIdByName(npcName)
R\*)@[y9l
local bagData=ssr.getBagData()
YJd8l>mz for k,v in pairs(bagData) do
qYK4
)JP if string.find(itemsName,v.Name) then
hd5$ yU5JQ --if #v["Values"]<2 then
"qawq0P8Z local Name = v.Name
(%bE~Q2P*< local MakeIndex = v.MakeIndex
w#&z]O9r local networkCtl = global.networkCtl
Axlm<3<wf" networkCtl:SendMsg(global.MsgType.MSG_CS_NPC_STORE_SELL_ITEM, npcId, MakeIndex , 0, 0, Name , string.len(Name) )
R"Kz!NTB --end
'@bJlJB9> end
'99@=3AB:` end
A;,Dg=FL/ end
J_PH7Z*=, --全部卖
UgC)7
K1 function API_SellAll(npcName)
.Rvf/-e local npcId=API_GetNpcIdByName(npcName)
8.yCA local bagData=ssr.getBagData()
za T_d/?J for k,v in pairs(bagData) do
sm --if #v["Values"]<2 then
P[FV2R~ local Name = v.Name
T^]7R4Fg local MakeIndex = v.MakeIndex
l x e`u}[ local networkCtl = global.networkCtl
TiyUr [ networkCtl:SendMsg(global.MsgType.MSG_CS_NPC_STORE_SELL_ITEM, npcId, MakeIndex , 0, 0, Name , string.len(Name) )
=p q:m --end
r!kLV )_ end
B!}BM}r end
_8^0!,j
(0OM"`j ]boE{R!I --NPC购买
+"8}R~`! function API_Buy(npcName,itemName,count)
}Gr&w-v --进入子菜单
n?:2.S.8 local sendData =
MU1E_"Z) {
F;P5D< UserID = API_GetNpcIdByName(npcName),
hU"F;4p Name = itemName,
Jt]&;0zn2 }
Iyyo3awc SendTableToServer(1015, sendData)
cvfUyp;P local function ToBuy()
h=6xZuA\ local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
26.)U r<F local list = NPCProxy.facade.view.mediatorMap.NPCStoreMediator._layer.itemList
e[{mVhg4E for i=1,count do
89Z#|#uM5 if i>#list then
hbI;Hd break
=We2^W-{ end
& fu z2xv sendData.MakeIndex= list[#list-i].MakeIndex
9Kbw
GmSU SendTableToServer(1014, sendData)
Lc]1$ end
U;U08/y API_CloseNpcTalk()
rP'AJDuq end
2n)gpLIJ local scheduleID = ssr.PerformWithDelayGlobal(ToBuy, 1)
{q,?<zBzu end
b9 uBdo@o _R^y\1Qu \GL*0NJ function 打开子项(item)
OxQYNi2 local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
'Jydu if item.SubMenu == 1 then
rslvsS: NPCProxy:RequestNpcStoreItemList(item)
Jf_%<\ O end
<bUXC@3W end
d
>|;f !n<o)DsZR function 子项购买(count)
JoJukoy}F local list = NPCProxy.facade.view.mediatorMap.NPCStoreMediator._layer.itemList
DnF
jEP^ for i = 1, count do
mI"D(bx\ if i > #list then break end
^m%52Tm
h NPCProxy:RequestNpcStoreBuy(list
) G;s"h%Xw98 end O~PChUU*Y end . I
==-| ,h&a9:+i --登录角色 ?:igumeYX Fp%Ln(/m function API_LoginRole(index) V_"f|[1 local LoginProxy = global.Facade:retrieveProxy(global.ProxyTable.Login) AnMV < LoginProxy:SetSelectedRoleByIndex(index) I^_NC&m LoginProxy:RequestEnterGame() ()\j
CNLT global.Facade:sendNotification(global.NoticeTable.Audio_Stop_BGM) ~.oj.[} end qTM%G-
',)7GY/n~ --登录 g^l RG3a function API_Login(name, password) %;|0 local AuthProxy = global.Facade:retrieveProxy(global.ProxyTable.AuthProxy)
!^WHZv4 local data = {} UpfZi9v?W data.type = 1 g_aCHEFBv data.username = name x[X`a data.password = password $a(`ve| AuthProxy:RequestLogin(data) bd==+ end 3^wC<ZXcD BzN@gQo --开门 {C")#m-0 function API_EnterRoom(x, y) y=Q!-~5|fF local qq = ssr.GetCurMapData() O/b+CSS1 global.networkCtl:SendMsg(global.MsgType.MSG_CS_OPEN_DOOR_REQUEST, 0, x, y) sgAzL local function callback() U>F{?PReA? ssr.AutoMoveBegin(x, y, qq.mapID) 9
v?l end K_ke2{4Jm SL:ScheduleOnce(callback, 0.5) Sh&PNJ-* end ho.(v;
~L{l+jK$p --多开 <)U4Xz
? function API_PcOpen() .H~YI LuaBridgeCtl:Inst():CheckClientCount(2) V.=lGhi end vFQ,5n;fF vt1lR5 --盒子显示 ;ME)O
g function API_hezi() y1pu R7 global.L_GameEnvManager._envData["isBoxLogin"] = 1 qP1FJ89H end wK!~tYxP )D/ 6%]O --遍历背包物品 FTf<c0 function API_GetCurBagData() 2@khSWV local s1 = ssr.getCurBagData() mLyBm local result = "" :iPym}CE for k, v in pairs(s1) do A.En+-[\ local s1 = string.format( _#C()Ro*P "OverLap=%s,DuraMax=%s,Where=%s,Dura=%s,Name=%s,Shape=%s,MakeIndex=%s,Weight=%s,StdMode=%s,Index=%s" %j+xgX/& , v["OverLap"] :P+\p= , v["DuraMax"] %J~WC$=Qv , v["Where"] .`p&ATgv , v["Dura"] {5j66QFoo , v["Name"] WZn.; , v["Shape"] _}gtcyx , v["MakeIndex"] nwmW.(R4 , v["Weight"] 1m@^E:w , v["StdMode"] {whvTN1#dh , v["Index"]) 1^G{tlA- local ss = "" ynwG\V if #v["Values"] > 1 then /*rhtrS) for x, y in pairs(v["Values"]) do rwf^,r"r if y["Value"] > 0 then 6.c^u5; local Values = string.format("m_Value=%s,m_ValueID=%s" (gXN%rsY , y["Value"] >:1P/U , y["Id"]) szmmu*F,U: ss = ss .. Values GJA`l8`SQ end ae+*
=, end {38bv.3' end e0HfP v_ result = result .. s1 .. "," .. ss .. "\r\n"
QLKK.] end !L24+ $ return result Jxl6a: end r ?m6$ A1i!F?X --获取背包是否满 DAO]uh{6 function API_GetBagFull() ]!
*[Q\ return ssr.IsBagToFull(isTips) ~nY]o"8D end oBQm05x" L.'}e{ldW --获取背包百分比 h2Bz F function API_GetBagEx() 6iA( o*'Yn HW = ssr.GetMetaValueByKey("BW") =O$M_1lp MAXHW = ssr.GetMetaValueByKey("MAXBW") BS1A
p ELL = HW / MAXHW * 100 B.dT)@Lx0 return math.ceil(ELL) 1;F`c`0< end W!L+(!&H g(4b
Ba9y --获取背包是否满 tJ0NPI56yP function API_GetBagFull() cr;`Tl~}s return ssr.IsBagToFull(isTips) ,5Vt]#F5@ end WyhhCR=; f 2YLk --读取地图ID ;2xO`[# function API_GetMapID() 9jir*UI local tt = ssr.GetCurMapData() SPkn3D6 return tt.mapID [g|Y7.j8 end &qM[g9 98XVa\|tl --读取地图名称 +0l`
5."d function API_GetMapName() 9 ;i\g= local tt = ssr.GetCurMapData() 2f~($}+* return tt.mapName rNDrp@A> end *m+BuGt| }T_Te?<& --获取背包最大数 mN_Z7n;^eh function API_GetMaxBag() /RnTQ4 return ssr.GetMaxBag() X6e/g{S) end e^1uVN r(A.<`\ --使用物品 ~FU@wV^ function API_UseItem(itemName) eD?3"!c! local items = ssr.getQuickUseData() @OpNHQat9 local item = ssr.getCurBagData() dt\j
GD for k, v in pairs(items) do rf&M!d}! if v.Name == itemName then Cfu=u *u ssr.UseItemByIndex(v.Index) 0%`4px4J end RO(TvZ0pE end RW'nUL?_\ f .
}c7 for k, v in pairs(item) do 0E`1HP"b if v.Name == itemName then V9NTs8LKc ssr.UseItemByIndex(v.Index) @~td`Z?1y end ,E )|y4 end #KlCZ~s end (qMj-l _HOIT --获取金币数量 oXsL
9, function API_GetMoney(Index) Dh4
6o|P return ssr.GetMoneyCountById(Index) sBX-X$*N end I0'WOV70 yY).mxRN function API_MergeTables(t1, t2) 4'1m4Ugg local merged = {} /b#l^x:j for key, value in pairs(t1) do q!~ -(&S merged[key] = value =@x`?oe v end ,MPB/j^o5! for key, value in pairs(t2) do V N{NA+I merged[key] = value 26?W
nu60 end DL^o_61 return merged 0pb'\lA end 6?tlU>A2s &<TzG
B* 9p* gU[ --获取物品数量 &C<yfRDu function API_GetItemCount(itemName,isBind) {y= W6uP local items=ssr.getQuickUseData() J5Z%ImiT^O local bagData=ssr.getBagData() T=f|,sK +7 items=API_MergeTables(items,bagData) . 5y"38e local bind=isBind or false "ICC
B1N| local count=0 PXoz*
)tk for k,v in pairs(items) do 2NGeC0= if bind then #FOqP!p.E
--绑定 ]va>ex$d if v.Name==itemName and v.Bind~=nil then B_`y|sn count=count+ v.OverLap wBj-m end "^j>tii else 6DIZ@ oi --不绑定 xiF7}]d+ if v.Name==itemName and v.Bind==nil then T VmH count=count+ v.OverLap INs!Ame2 end ^g1f X1 end C;+(Zp end hY5WJ; return count $3T_. end 620%Z* --读取人物坐标 <:>SGSE9 b3-eR5U/
OI1ud/>h Gl %3XdU function API_GetMapXY() %_-zWVJ local aa = ssr.GetMainPlayerMapPos()
wm{3&m local aa = string.format("x=%s,y=%s" mbRqJT>@ , aa.x !rDdd%Z , aa.y) w.\w1:d return aa -{XRA
6 end $0oO
&)* -$VZtex -- 获取角色是否活着 n6d9\ function API_IsRoleAlive() WW2
Ob* return ssr.IsRoleAlive() ?<&O0'Q end G0 J4O!3 ]r!>{ --读取聊天信息 j:T/ iH!YF function API_ChatMsg() AUVgPXOwd local function listcb(msg) b !@Sn/ --table Pz#7h*;cw. ChatTable = msg 9Ya<My end c
}*2$1 ssr.RegisterLUAEvent("OnAddChatItem", "增加聊天消息", listcb) eivtH P if ChatTable.mt == 1 and ChatTable.ChannelId == 3 or ChatTable.ChannelId == 6 then /v|"0 local ChatT = string.format( 1(Y7mM8\ "SendName=%s,SendId=%s,ChannelId=%s,mt=%s,SendTime=%s,Msg=%s" 93qwH% , ChatTable.SendName `!:q;i]} , ChatTable.SendId NgCuFL(Ic , ChatTable.ChannelId XY.5Rno4 , ChatTable.mt $mmup|;( , ChatTable.SendTime >SN|?|2U/ , ChatTable.Msg) -4w=s|#.\ return ChatT n~V4nj&_T end B_U{ s\VY end /yz=Cj oz L9Z;:``p function API_ChatMaa() _Y=2/*y^ return ssr.GetMaxBag() GuZ( &G6* end 5ercD 5J)=} e --修理装备 q+KzIde|% function API_CopyTable(original) 1aV
a0q< local copy = {} ;@,Q&B2eM for key, value in pairs(original) do $&s=68
if type(value) == "table" then [3l*F copy[key] = API_CopyTable(value) n%R;-?*v else )k&a}u5y copy[key] = value 4nH*Ui!T end - K%,^6 end ^_
t%kmL` return copy x^|V af end -7/s]9o' 修衣服 = "0,4" --衣服,头盔 )#a[-.OI 修武器 = "1" ML-)I&
>tT 修项链 = "3" 8zLY6@ 修手镯 = "5,6" &
gJV{V5Ay 修戒指 = "7,8" --左戒指 右戒指 )b<k#(i@# function API_Repair(npcName, itemPos) =1I#f local npcId = API_GetNpcIdByName(npcName) (>6*#9#p local tempData = ssr.getEquipData() Iz6y{E local tobeRepair = {} L%v^s4@ for k, v in pairs(tempData) do *#%
9Rp2| if string.find(itemPos, tostring(v["Where"])) and v["Dura"] ~= v["DuraMax"] then +X`V|E,no local tmp = { ri`R<l8 Name = v.Name, 9Suu-A MakeIndex = v.MakeIndex, B/5=]R Where = v.Where ihh4pD27g } /(.6bv table.insert(tobeRepair, tmp)
rhpPCt ssr.TakeOffEquipRequest(v) pME{jD
end {mWui9 %M end [S.ZJUns --脱完 开始修理 RsU3Gi_Zdz for k, v in pairs(tobeRepair) do <PPNhf8 local Name = v.Name +$xeoxU>; local MakeIndex = v.MakeIndex mS#zraJn5 local networkCtl = global.networkCtl J$4wL
F3 networkCtl:SendMsg(1023, npcId, MakeIndex, 0, 0, Name, string.len(Name)) R1F5-#?'E end *`j-i --开始穿 O3N0YGhJ local function ToDress() [s9O0i"
Y for k, v in pairs(tobeRepair) do fP3_d ssr.TakeOnEquipRequest(v, v["Where"]) 9_\'LJ end -/_L*oYli end 8ul&x~2;X local scheduleID = ssr.PerformWithDelayGlobal(ToDress, 1) ;!o]wHmA API_CloseNpcTalk() y@j,a end 0JgL2ayIVI `28};B> VIP7OHJh S[tE&[$(p 药店={0} mr
m^e9*Z 首饰店={19,20,21,22,23,24,26} =X?\MVWB 衣服店={10,11,15,16,27,28,62,64} mcz+P | 武器店={5,6} 1Z[/KJ 杂货店={3,25,2,30,31} +(xeT+J 铁匠铺={43} -p-B2?)A 书店={4} ^qCkt1C-M --检测背包是否有指定类型物品 UA[,2MBp function API_IsNeedToStore(StdModes) r1ws1 rr= local function IsNeed(StdMode) 7iHK_\t n local bagData=ssr.getBagData() j1SMeDDM
~ for k,v in pairs(bagData) do Q0Nyqhvi if v.StdMode==StdMode then ZcuA6#3B return true J
7C4V'_ end yCJ Fo end st"{M\.p local EquipProxy = global.Facade:retrieveProxy(global.ProxyTable.Equip) mzQ`N}]T: local equip = EquipProxy:GetEquipData() ^:9$@+a for k,v in pairs(equip) do 0Io'bF if v.StdMode==StdMode then $?,a[79 if tonumber(v.Dura)/v.DuraMax < 0.9 then T!wo2EzE return true Te2
zK7:
end x^"ES%* end Ladsw end aNyvNEV3C return false c}3W:}lW end t}v2$<!I i"|$(2 for k,v in pairs(StdModes) do fzjU<?} if IsNeed(v) then |
ohL]7b< return true Ku&!?m@C end Q]rD}Ckv- end >5R<;#8 return false
;> m"x end [2ax>Yk$ ]"c+sMW USN8
N ( --范围内怪物个数 bool型返回distance 3nY1[, function API_范围内怪物个数(distance, count) Y(\T-
bI local proxyUtils = requireProxy("proxyUtils") )
BfT7{WN local mainPlayerID = global.gamePlayerController:GetMainPlayerID() qQ!1t>j+H return proxyUtils.checkIsEnoughEnemy(mainPlayerID, count, distance) j)t+jcMUI end &z"krM]G --关闭NPC框 b':|uu*/ function API_CloseNpcTalk() DzQ1%! global.Facade:sendNotification(global.NoticeTable.Layer_NPC_Talk_Close) 6#j$GH * global.Facade:sendNotification(global.NoticeTable.GuideEventEnded, {name = "GUIDE_END_NPC_TALK_LAYER_CLOSED"}) R3k1RE2c&g end Ro2d,' --无怪随机 `%3/ function API_无怪随机() q1E:l!2al local list = global.monsterManager.mMonstersInCurrViewField 3] 1-M local actors = {} nhG
J for k, v in pairs(list) do FWH}j0Gj| local actor = {} <p;k)S2J actor["mID"] = v:GetID() mDh1>>K'~ table.insert(actors, actor); sH[
-W- end [m+iQVk' if #actors < 1 then B\g]({E API_UseItem("随机传送石") ++L?+^h local aa = API_GetItemCount(1078) RE.r4uOJg if aa < 1 then uxg9yp@| ssr.BuyStoreItemsById(2, 1) RzhWD^b B end @"T"7c?Cv end $+}+zZX5 return #actors h7s;m end |[9?ma
CF|]e: --API_周围怪物数量 *&Z7m^`FQ function API_周围怪物数量() fC}R4f7C local list = global.monsterManager.mMonstersInCurrViewField m]*Bx%-1c local actors = {} B3Jgd,
[ for k, v in pairs(list) do u * local actor = {} 8A{_GH{: actor["mID"] = v:GetID() ,@m@S^ table.insert(actors, actor); vIvVq:6_3 end l"n{.aL return #actors p;?*}xa end d--y %+ZJhHT --API_周围人物数量 参数是 白名单 KJE[+R H+z function API_视野内敌人(Name, lv) 4@.|_
zY local list = global.playerManager.mPlayersInCurrViewField +.y
.Mp local myName = global.gamePlayerController:GetMainPlayer():GetName() \D>$aLO*? local actors = {} Pmi#TW3X local names = myName .. "," .. Name = 07Gy, =i for k, v in pairs(list) do "U.^lkN local actor = {} 4Ij-Ilg)% actor["mID"] = v:GetID() {;2i.m1 actor["mName"] = v:GetName() $-+/$!
actor["mLv"] = (v.GetLevel and { v:GetLevel() } or { 0 })[1] \b}~2oX --local myName=global.gamePlayerController:GetMainPlayer():GetName() P)dL?vkK if not string.find(names, actor["mName"]) and tonumber(actor["mLv"]) > lv then Ba\6?K table.insert(actors, actor); 3p?KU- end =O|c-k,f@ end 2A4FaBq" return #actors 8\<jyJ end \qsw"B*tv` L]a`"CH:a$ 9>/wUQs!] --自动捡 HG/p$L* API_NoBodyPickEnable=true # N~,F@t sqx`">R --捡取物品白名单 \Mv":Lm1 API_MyPlayerNames = "我不是药神," >#+IaKL7 _<ut)
G^9 --全图捡 ?_\$ API_MapPickEnable = true 4^6.~6a --自动存 zr76_~B1u API_InStoreEnable=false >k']T/% API_InStoreItems="" F2(q>#<_ --自动扔 ^s\3/z>b4! API_ItemDropEnable=false 3#wcKv%>&_ --自动用 r%Rs0)$yj API_ItemKeepCountEnable=true {|9}+
@5Q1 --自动领取 ujW1+Oj=~ API_GetMailItemEnable=false 4([.xT --自动买回城石 0;sRJ API_BuyStoneEnable=false Ct$82
J API_RecoveryItemMaxMoney=1000000 Do?P<x o --地图 Vbh6HqAHxJ API_PreMapName="盟重省" cIXwiC8t --开关 5p?!ni9 API_TimerEnable=true Dj-s5pAW m9M
FwfZ API_TimerEnable1s=true ^SEdA=! API_TimerEnable10s=true ~
aZedQc --1S定时器 mzL[/B#>M function API_AutoSchedule1s() x}fn'iUnm if GET_GAME_STATE() == "world" and API_TimerEnable1s then vUQFQ --自己设置的自动捡 Bz8 &R|~>" --API_PickItems() B1N)9% --系统自动捡 >5~7u\#9 if API_NoBodyPickEnable then b
hjZ7= if API_IsInCurrViewField(API_MyPlayerNames) then 8YY|;\F)J~ API_OpenGroupPick(false) nbofYI$rd& --release_print("来人,关自动捡") v4?iOD --API_RunAway() --逃跑 ^CzYDq --API_UseItem3Second("回城石") ]kktoP|D else "
oy\_1| API_OpenGroupPick(true) jm>3bd API_PickItems() Bp AB5=M0 --release_print("无人,开自动捡") @-.? B end QhGXBM end ,S[K{y< end x_@i(oQ:_ end gLj?Ys --10s定时器 .M|>u_<
Qd function API_AutoSchedule10s() f<[jwhCWV if GET_GAME_STATE()=="world" and API_TimerEnable then #*q2d --自动扔 q5&
Ci` if API_ItemDropEnable then PW}OU9is API_DropItemKeep("回城卷",2) fF?6j end >AD=31lq ~M
?|Vn --自动组队 O^{1RV3:,T if ssr.GetCurMapData().mapName == "石墓二层" or ssr.GetCurMapData().mapName == "石墓三层" or ssr.GetCurMapData().mapName == "地牢一层西" then !7lj>B A
> API_InviteJoinTeam() 4
h
5_M8I API_TeamApplyUpdate() --允许所有邀请 $]d*0^J 6 end U+]Jw\\l
lXrD!1F --自动用消耗品 g: %9jf if API_ItemKeepCountEnable then lHBI if API_GetItemCount("强效金创药") > 1 then bk#xiuwT API_UseItem("强效金创药") 5$l9@0D.\ end #,f{Ok+ if API_GetItemCount("强效魔法药") > 1 then XL<
)v_ API_UseItem("强效魔法药") vg%QXaM end lhn8^hOJ/ if API_GetItemCount("太阳水") > 1 then {'3D1#SK API_UseItem("太阳水") 34C``i end W|Ldu;# if API_GetItemCount("魔法药(中量)") > 7 then =7[)' API_UseItem("魔法药(中量)") jThbeY[ end \,W.0#D8v4 if API_GetItemCount("魔法药(中量)") < 1 then C;1PsSE+A API_UseItem("魔法药(中)包") u,i
]a#K end tR`S#rk if API_GetItemCount("金创药(中量)") > 1 then = (U/CI API_UseItem("金创药(中量)") 0TE@xqW end 1/j$I~B if API_GetItemCount("护身符(大)") < 1 then G^h_YjR`* API_UseItem("回城卷") QrjDF> end Rmh*TQu if API_GetItemCount("魔法药(中量)") < 1 and SL:GetMetaValue("MAP_NAME") ~= "盟重省" and API_GetItemCount("魔法药(中)包") < 1 then F+=urc>w API_UseItem("回城卷") eO5ktEoJ end go|>o5!g if SL:GetMetaValue("HP") < 30 and not SL:GetMetaValue("IN_SAFE_AREA") then cFfTYP9 API_UseItem("回城卷") p]LnE`v end 7s>a2 end :uCdq`SaQl P@ypk^v if API_GetMailItemEnable then B#N7qoi
global.networkCtl:SendMsg(global.MsgType.MSG_CS_EMAIL_GET_REQUEST, 2) 2YQ#-M global.Facade:sendNotification(global.NoticeTable.Layer_Enter_Current) vb
=CFV# end 6OUvrfC(H end U ^#?&u end k'13f,o} _\AUQ{ --定时器 >S&U. function API_TimerStart() wz#[:2 --1S定时开关 ?9?4p@ if API_AutoScheduleID1s == nil then b;vNq API_AutoScheduleID1s = ssr.Schedule(API_AutoSchedule1s, 1) /5a;_ else cK}Pf+r> ssr.UnSchedule(API_AutoScheduleID1s) {Bs+G/?o/ API_AutoScheduleID1s = ssr.Schedule(API_AutoSchedule1s, 1) q(9%^cV6 end VyZV(k --10S定时开关 tP'GNsq+m if API_AutoScheduleID10s == nil then F?*k}]Gi API_AutoScheduleID10s = ssr.Schedule(API_AutoSchedule10s, 10) ?vbDB 4 else [!+D<Y ssr.UnSchedule(API_AutoScheduleID10s) g{ (@uzqG API_AutoScheduleID10s = ssr.Schedule(API_AutoSchedule10s, 10) Bhuw(KeB end $adq7 end Y}1P~ function API_IsInCurrViewField(names, level) XL"=vbD local lv = level or 0 c>MY$-PD local nameList = names or "" 3z,2utH local list = global.playerManager.mPlayersInCurrViewField ZJXqCo7O local actors = {} 'C]jwxy for k, v in pairs(list) do H`|0-`q local actor = {} rc~Y=m actor["mID"] = v:GetID() ,?=KgG1i actor["mName"] = v:GetName() z-Hkz actor["mLv"] = (v.GetLevel and { v:GetLevel() } or { 0 })[1] >}]H;&
l if not string.find(names, actor["mName"]) and tonumber(actor["mLv"]) > lv then >ZCo 8aK table.insert(actors, actor); c
IZc:
end `!Ln|_,d end oI$V|D3 9 if #actors > 0 then 0/A-#'> return true p$OD*f_b else 9eSRCLhgD return false wixD\t59X end mTd<2Hy end NG-`ag`s ]7<m1Lg
--打开组捡 N{pa)
/ function API_OpenGroupPick(isOpen) HTNA])G local GameSettingProxy = global.Facade:retrieveProxy(global.ProxyTable.GameSettingProxy) F ?mA1T>x local count = 0 Yk7"XP[Y for key, value in pairs(GameSettingProxy._pickConfig) do Vu|dV\N0* count = count + 1 Qx.jCy@ end m.146 local function SetGroup(pickgroup) m^0A?jBrR for i = 1, count do F?2FITi_V GameSettingProxy:SetPickGroupValue(i, pickgroup) +FBi5h end aJQ
XJ,>Lv end =
o+7xom if isOpen then ( -2R{!A local pickgroup = { 1, 1, 1 } !u0U5>ccw SetGroup(pickgroup) [f(uqLdeM else ,?w!5N;iRO local pickgroup = { 1, 1, 0 } 1Zq SetGroup(pickgroup) =tq7z =k end E3tj/4:L end .HOY q sN@j5p^jc