游戏地址
8P?p www.fgcq996.com +dG3/vV 那年传奇百区1.76 +^<s'
,*kh{lJ 找到 lua_State 然后调用下面的函数就能实现功能
Y&uwi:_g 一个跑单狗注意qq1946913194
P @Jo[J< 游戏账号密码。fanren9527 qq2293307009 \Ota~A
;x|7"lE 搞完演示完,删除好友跑单 H/2dVUU
O0^?VW$y_ --自动寻路Ex
5i@WBa function API_AutoMoveEx(mapX, mapY)
B"Ma<"HU ssr.AutoMoveBegin(mapX, mapY, ssr.GetCurMapData().mapID)
nl-y0xD9c local inputProxy = global.Facade:retrieveProxy(global.ProxyTable.PlayerInputProxy)
V/&JArW local pathPoints = inputProxy:GetPathFindPoints()
|1pDn7 if pathPoints == nil then
BROn2aSx% return 0
\1He9~6 end
f6,?Yex8B return #pathPoints
4{QD: D(D end
9u;/l#?@T
gs"w
0[$ --自动寻路
( 5 BZZ function API_AutoMove(mapX, mapY)
$5wf{iZY.Q ssr.AutoMoveBegin(mapX, mapY, ssr.GetCurMapData().mapID)
OQ&'3hv{ local inputProxy = global.Facade:retrieveProxy(global.ProxyTable.PlayerInputProxy)
j.ZXLe~ local pathPoints = inputProxy:GetPathFindPoints()
/ q| o if pathPoints == nil then
e?7Oom return 0
Pihpo end
|SfCuV#g/< return #pathPoints
60R]Q end
. 3'U(U 4 KX\'K --停止寻路
_Rb>py function API_AutoMoveEnd()
i7b^b>B|e global.Facade:sendNotification(global.NoticeTable.AutoMoveEnd)
gX|We}H end
2EH0d6nt 9vckQCLM --自动打怪
$(]E$ek function API_AutoFight(isAFK)
5S*aZ1t18 if isAFK then
~f:"Q(f+ if not IsAFKState() then
MW2{w<-]7 global.networkCtl:SendMsg(global.MsgType.MSG_CS_AUTOPLAYGAME_REQUEST, 1)
"x0/i?pqa global.Facade:sendNotification(global.NoticeTable.AFKBegin)
hLr\;Swyp end
onU\[VvM else
nN2huNTf: if IsAFKState() then
FEO/RMh global.networkCtl:SendMsg(global.MsgType.MSG_CS_AUTOPLAYGAME_REQUEST, 2)
ES\=MO5a7 global.Facade:sendNotification(global.NoticeTable.AFKEnd)
MwC} end
?J@P0(M# end
G ?Hx"3:? end
FN/siw(?3 hCb2<_3CR function IsAFKState()
E*x ct-m# local AutoProxy = global.Facade:retrieveProxy(global.ProxyTable.Auto)
J(:y-U return AutoProxy:IsAFKState()
LP'wL6# end
Mi} . Bm5\*Xd1( --打开自动穿戴
? _7iL? function API_AutoDress()
[(2XL"4D --不抢别人归属
u]OYu
global.MMO.SETTING_IDX_NO_ATTACK_HAVE_BELONG =1
5]*!N global.MMO.SETTING_IDX_AUTO_PUT_IN_EQUIP = 1
T0 {X, local ServerOptionsProxy = global.Facade:retrieveProxy(global.ProxyTable.ServerOptionsProxy)
B|"-Ed ServerOptionsProxy._data["autoDress"] = 1
h0?w V5H global.ConstantConfig.autousetimes = 0
Vb)NWXmyu end
(]` rri*^ {TZV^gT4 --强制打开自动挂机拾取
a%2K,.J function API_AutoPick()
6HZVBZhM local ItemConfigProxy = global.Facade:retrieveProxy(global.ProxyTable.ItemConfigProxy)
nT
%ko7~- local config = ItemConfigProxy.config
Pj1 k?7 for k, v in pairs(config) do
UyAy?i8K --local res = string.gsub(v.pickset, "0", "1")
"r~/E|Da< v.pickset = v.pickset .. 1
@1A.$: end
"&/lF[q end
@R Jr
~y0 :Y|[?; --获取人物坐标
uD?Rs`
function API_GetMapXY()
NX5$x/uz return ssr.GetMainPlayerMapPos()
B- D&1gO end
_SnD)k+TgJ 2;K2|G7 --获取人物状态
=6
3tp 9 function API_GetAction()
J|w%n5Y local player = global.gamePlayerController:GetMainPlayer()
0DFVB%JdI local list = global.playerManager.mPlayersInCurrViewField
q8!]x-5$6j return player:GetAction()
`pjB^--w end
},@ex [1mEdtqf* --设置宠物状态
{rwT4]4 function API_PetSleep(isSleep)
"d`u#YmR local SummonsProxy = global.Facade:retrieveProxy(global.ProxyTable.SummonsProxy)
ME66BWg{ if not SummonsProxy:IsAlived() then
&xpvHKJl return false
n1x"B>3 end
XE]"RD<z if isSleep then
4y.qtiIP>$ SummonsProxy:RequestModeChange(2)
>Q=Q%~ else
RT(ejkLZm SummonsProxy:RequestModeChange(4)
uu.}<VM.1 end
Iw^Q>MrT end
sDY+J(Z V%B~ q`4 --获取人物数据
$Ai zKiV function API_GetGamePlayer()
eM@xs<BR local player = global.gamePlayerController:GetMainPlayer()
[FZq'E"87 local list = global.playerManager.mPlayersInCurrViewField
z8XWp[K local person = {}
/I((A/ks person["等级"] = player:GetLevel()
^H
-a@QM person["职业"] = player:GetJobID()
D"2bgw person["名字"] = player:GetName()
+`iJ+ person["金币"] = ssr.GetMoneyCountById(1)
oQA,57B person["元宝"] = ssr.GetMoneyCountById(2)
mGa :~x person["绑金"] = ssr.GetMoneyCountById(3)
*I[tIO\ return person
6Jq3l_ end
ia (&$a8X 3~{0X- function API_GetGamePlayerLevel()
r@}8TE*|P local player = global.gamePlayerController:GetMainPlayer()
!L@<?0xLW return player:GetLevel()
e<qfM&* end
~(#
iGc]7 !b=W>5h --获取周围怪物
l"
7#(a function API_GetMonster()
;XQ27,K& local list = global.monsterManager.mMonstersInCurrViewField
w:/3%- local actors = {}
yzMGZi`ut for k, v in pairs(list) do
{9@u:(<X9 local actor = {}
U^eos;:s8 actor["mID"] = v:GetID()
&KY!a0s actor["mName"] = v:GetName()
a;v4R[lQ actor["mRace"] = v:GetRace()
s7 sTY actor["mType"] = v:GetType()
1:r#m- \ actor["mSubType"] = v:GetSubType()
#h P>IU actor["mX"] = v:GetMapX()
~ToU._ actor["mY"] = v:GetMapY()
gm%cAme actor["mAction"] = v:GetAction()
0":k[y actor["mTypeIndex"] = v:GetTypeIndex()
LJom+PxF$x actor["mAnimationID"] = v:GetAnimationID()
S{3c}>n actor["mLv"] = (v.GetLevel and { v:GetLevel() } or { 0 })[1]
e0#t actor["mSex"] = (v.GetSexID and { v:GetSexID() } or { 0 })[1]
(L1F],Au actor["mJobID"] = (v.GetJobID and { v:GetJobID() } or { 0 })[1]
wFMw&=j actor["mHP"] = (v.GetHP and { v:GetHP() } or { 0 })[1]
hzU(XW actor["mHPMax"] = (v.GetMaxHP and { v:GetMaxHP() } or { 0 })[1]
-w>ss& actor["mMP"] = (v.GetMP and { v:GetMP() } or { 0 })[1]
5fMlOP_ actor["mMPMax"] = (v.GetMaxMP and { v:GetMaxMP() } or { 0 })[1]
B[q"oI` actor["mOwnerID"] = (v.GetOwnerID and { v:GetOwnerID() } or { "" })[1]
Sfa=AV7K actor["mOwnerName"] = (v.GetOwnerName and { v:GetOwnerName() } or { "" })[1]
gX7R-&[UD actor["mGuildName"] = (v.mGuildName and { v.mGuildName } or { "" })[1]
2[;~@n1P
actor["mColor"] = "0xFFFFFF"
|fW_9={1kQ if v:GetType() == global.MMO.ACTOR_PLAYER then
[[pt~=0 local batch_label = global.MMO.HUD_TYPE_BATCH_LABEL
I~6 o<HO local label_name = global.MMO.HUD_LABEL_NAME
!.-u'6e
local hudName = global.HUDManager:GetHUD(v:GetID(), batch_label, label_name)
n @,. if hudName then
r6R@"1/ actor["mColor"] = GetColorHexFromRBG(hudName:getColor())
m;A[2 6X end
3Fxr= end
7>f"4r_r6< table.insert(actors, actor);
GwfC l{l end
+KD7Di91<K ?;H}5>^8P return actors
rL&Mq}7QK end
1/~=61msc ?D6|~k
i --遍历周围玩家
^}{x).
function API_GetPlayer()
}-J0cV local list = global.playerManager.mPlayersInCurrViewField
1;DRcVyS+ local actors = {}
qGX#(,E9; for k, v in pairs(list) do
5KDCmw local actor = {}
)0]U"Nf ho actor["mID"] = v:GetID()
2gZ nrU actor["mName"] = v:GetName()
H Tv#2WX actor["mRace"] = v:GetRace()
N'-[>w7vK2 actor["mType"] = v:GetType()
,tcUJ}l actor["mSubType"] = v:GetSubType()
(Q @'fb9z actor["mX"] = v:GetMapX()
/%s:aO actor["mY"] = v:GetMapY()
9zS actor["mAction"] = v:GetAction()
! nvg:$.& actor["mTypeIndex"] = v:GetTypeIndex()
e(xuy'4r actor["mAnimationID"] = v:GetAnimationID()
(Zd(?">i actor["mLv"] = (v.GetLevel and { v:GetLevel() } or { 0 })[1]
PEm2w#X%L actor["mSex"] = (v.GetSexID and { v:GetSexID() } or { 0 })[1]
5&h">_j actor["mJobID"] = (v.GetJobID and { v:GetJobID() } or { 0 })[1]
"*.N'J\ actor["mHP"] = (v.GetHP and { v:GetHP() } or { 0 })[1]
G maNi actor["mHPMax"] = (v.GetMaxHP and { v:GetMaxHP() } or { 0 })[1]
fm`V 2'Rm actor["mMP"] = (v.GetMP and { v:GetMP() } or { 0 })[1]
+iF
t) actor["mMPMax"] = (v.GetMaxMP and { v:GetMaxMP() } or { 0 })[1]
G~v:@ actor["mOwnerID"] = (v.GetOwnerID and { v:GetOwnerID() } or { "" })[1]
4 ob W>
actor["mOwnerName"] = (v.GetOwnerName and { v:GetOwnerName() } or { "" })[1]
&oq0XV.M^ actor["mGuildName"] = (v.mGuildName and { v.mGuildName } or { "" })[1]
N_S~&(I| actor["mColor"] = "0xFFFFFF"
E1tCY.N{ if v:GetType() == global.MMO.ACTOR_PLAYER then
T1*.3_wtP local batch_label = global.MMO.HUD_TYPE_BATCH_LABEL
IVkB)9IW local label_name = global.MMO.HUD_LABEL_NAME
z#ki# o local hudName = global.HUDManager:GetHUD(v:GetID(), batch_label, label_name)
]@ke_'
" if hudName then
1DhC,)+D}q actor["mColor"] = GetColorHexFromRBG(hudName:getColor())
2%L`b"9}V end
Kvo&_: end
>Q!}tbg~9 table.insert(actors, actor);
SOOJq C end
Je6wio-4 return actors
eU@Mv5&6 end
tpC^68*F |/^S%t6* --遍历周围玩家EX
;>f\fhi' function API_GetPlayerExe()
O,|NOz local s1 = API_GetPlayer()
(3lA0e`Y local result = ""
11YJW-V for k, v in pairs(s1) do
oI[rxr local s2 = string.format(
CoNaGb "mID=%s,mName=%s,mRace=%s,Dura=%s,mType=%s,mSubType=%s,mX=%s,mY=%s,mAction=%s,mTypeIndex=%s,mAnimationID=%s,"
C}pm>(F~ , v["mID"]
ZJQFn , v["mName"]
]K*R[ , v["mRace"]
LiV&47e*> , v["Dura"]
,z>-_HOnw , v["mType"]
86N,04 , v["mSubType"]
N
0-J=2 , v["mX"]
DKu$u ]Z , v["mY"]
z fv@<' , v["mAction"]
TH'8^w f , v["mTypeIndex"]
BWy-R6br , v["mAnimationID"])
FRZ]E)9Z]b local s3 = ""
Q}OloA(+ 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"
Z\EA!Cs3 , v["mLv"]
H$C*&p , v["mJobID"]
BZHoRd{EH , v["mHP"]
5cinI^x)f , v["mHPMax"]
:;yrYAyT3 , v["mMP"]
@$n
$f , v["mMPMax"]
3
dJ362 , v["mOwnerID"]
)LIn1o_, , v["mOwnerName"]
kj[boxN , v["mGuildName"]
Ec}%!p_$ , v["mColor"])
u*;H$& result = result .. s2 .. s3 .. "\r\n"
iiMS3ueF end
A
o$k[#px return result
_<FUS'" end
{yWL|:#K L;u 5 --遍历周围指定NPC
zMu9A| function API_GetNpcIdByName(npcName)
$b1>,d'oz local npcVec = global.npcManager:FindNpcInCurrViewField()
!ess.U&m' local npc = {}
Vjv6d&Q for k, v in pairs(npcVec) do
gqy>;A:kO local npcs = {}
RuIBOo\XL7 npc[v["mID"]] = v["mName"]
c/A?-9 end
cI@qt>& for key, value in pairs(npc) do
VGD~) z57 local sPos, ePos = string.find(value, npcName)
2=n
`z)R
if sPos then
1xd6p return key
2O
Ur">_ end
t#|R"Q# end
U364'O8_ return nil
\
*[Ht!y end
rFpYlMct su%-b\8K --NPC名称打开NPC
(,#m
+ function API_NpcTalk(npcName)
=<3HOOC local npcid = API_GetNpcIdByName(npcName)
h7q{i|5 local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
!zF07.(E NPCProxy:RequestTalk(npcid)
v$Fz^<Na end
Wn+s:ov zpT^:Ag --NPCID打开NPC
n19A>,m function API_NpcTalkEx(npcid)
8Iw)]}T' local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
P>iZgv NPCProxy:RequestTalk(npcid)
=3QhGFd end
8`urkEI^r ]zaTX?F: function API_GetNpcTalkData()
t-KicLr local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
$j\>T@ local talkData = NPCProxy:GetCurrentNPCTalkData()
I V#8W return talkData
\WFcb\.. end
}bca-|N )5~T%_ function API_GetAllLink()
UWC4PWL,>C local talkData = API_GetNpcTalkData()
>_ZEQC /X.zt
` local acts = {}
$M,<=.oT local kv = {}
[;Lgbgt3f c, .@Cc2 for line in talkData.content:gmatch("(text=.->)") do
03v+eT if string.find(line, "@") then
6[k<&; local key = line:match("text=(.-)|")
~S
Bb2*ID {{Ox%Zm local value = line:match("(@.-)>")
FsJk"$} kv[key] = value
ZAn @NA= end
g^+p7G end
e[u}Vf TG$#aX\' for result in talkData.content:gmatch("(@.-)>") do
SR?mSpq5 table.insert(acts, result)
7`J2/( end
By8SRWs local sendData = {
EA>.SSs! UserID = talkData.npcID,
BYEZ[cM index = talkData.index,
E#:!&{O --Act = "@blbumj",
b.RU%Y#>\ --commonInput = jsonData.commonInput,
&lSNI5l --inputID= jsonData.inputID,
5uQ+'*xN% }
VtI`Qcjc return acts, kv, sendData
?8H{AuLB end
9)W3\I>U- 4jebx
jZ --按索引号点击按
1gkpK`u(B function API_ClickLinkByIndex(index)
M9R'ONYAa acts, kv, sendData = API_GetAllLink()
xRacgny:I sendData["Act"] = acts[index + 2]
7:?\1a local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
81:%Z&?vRl NPCProxy:ExecuteWithJsonData(sendData)
">.k 6Q end
R)JH D7
1 Dh2Cj-|
~ --按索购买引号点击按
0l[52eZ/ function API_ClickBuyLinkByIndex(index)
er7(Wph acts, kv, sendData = API_GetAllLink()
(Q=o9o:b sendData["Act"] = acts[index]
; >H1A local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
AJEbiP NPCProxy:ExecuteWithJsonData(sendData)
iZy>V$Aq end
m8{8r>6* d=^QK{8 --按名称点击按
Jk>vn+q8P^ function API_ClickLinkByName(linkName)
TS|Bz2( acts, kv, sendData = API_GetAllLink()
hxMRmH[f: sendData["Act"] = kv[linkName]
_-y1>{]H local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
we`BqZV NPCProxy:ExecuteWithJsonData(sendData)
tW|0_m>{ end
Q&r.wV| lb'tVO --出售物品
Rkg8 function API_Sell(npcName,itemsName)
D
tZ?sG local npcId=API_GetNpcIdByName(npcName)
Gh=I2GSo local bagData=ssr.getBagData()
f^1J_}cL for k,v in pairs(bagData) do
GxD`M2 if string.find(itemsName,v.Name) then
\f^xlX3&` --if #v["Values"]<2 then
{guOAT-w local Name = v.Name
@,.D]43 local MakeIndex = v.MakeIndex
E8r6P:5d` local networkCtl = global.networkCtl
V9$T=[ networkCtl:SendMsg(global.MsgType.MSG_CS_NPC_STORE_SELL_ITEM, npcId, MakeIndex , 0, 0, Name , string.len(Name) )
AE~a=e\x --end
z8t;jw end
_LwF:19Il end
s
tajTN*J end
^@* `vz^_ --全部卖
zO"De~[9 function API_SellAll(npcName)
S:j{R^$k local npcId=API_GetNpcIdByName(npcName)
8b'@_s!_ local bagData=ssr.getBagData()
Dch\k<Te for k,v in pairs(bagData) do
g@!U^mr*3 --if #v["Values"]<2 then
2_HIn local Name = v.Name
Qf^c}!I local MakeIndex = v.MakeIndex
5e,u*J] local networkCtl = global.networkCtl
%p networkCtl:SendMsg(global.MsgType.MSG_CS_NPC_STORE_SELL_ITEM, npcId, MakeIndex , 0, 0, Name , string.len(Name) )
]?1_.Wjtt --end
(J5}1Q<K end
85G-`T end
<<?32r~ \h=*pAf vq(#Ih2 --NPC购买
bVU4H$k function API_Buy(npcName,itemName,count)
q-;Y }q --进入子菜单
/_m)D;!y local sendData =
b_nE4> {
41Q5%2
UserID = API_GetNpcIdByName(npcName),
*
rlVE Name = itemName,
1qNO$M }
YdO*5Gb6 SendTableToServer(1015, sendData)
<!>\
n\A
local function ToBuy()
q( ~rk local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
z7IJSj1gQI local list = NPCProxy.facade.view.mediatorMap.NPCStoreMediator._layer.itemList
Rmmu#-{Y for i=1,count do
?lD)J?j if i>#list then
i \NV<I
break
]Pe>T& end
[yN+(^i sendData.MakeIndex= list[#list-i].MakeIndex
/Z?o%/bw: SendTableToServer(1014, sendData)
#&kj> end
MwRLv,&" API_CloseNpcTalk()
vc"!3x-G* end
I9G^T' W local scheduleID = ssr.PerformWithDelayGlobal(ToBuy, 1)
k/{WlLN end
*t| !xO
1!(lpp Y}R$RDRL function 打开子项(item)
qA)YYg/G local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
Sk+XBX(} if item.SubMenu == 1 then
[5L?#Y NPCProxy:RequestNpcStoreItemList(item)
,V!"4T,Z end
~;CNWJtcf( end
lj}3TbM K0(
S%v|,} function 子项购买(count)
iS+"Jsz local list = NPCProxy.facade.view.mediatorMap.NPCStoreMediator._layer.itemList
\78^ O for i = 1, count do
_x(hlHFk if i > #list then break end
j36YIz$a NPCProxy:RequestNpcStoreBuy(list
) cX
C [O end .%n_{ab1 end A{q%sp:3~ %:`v.AG --登录角色 Hj
r'C?[ 1Zc=QJw@ function API_LoginRole(index) rwXpB<@l@ local LoginProxy = global.Facade:retrieveProxy(global.ProxyTable.Login) ,L-/7}"VHA LoginProxy:SetSelectedRoleByIndex(index) l,h`YIy LoginProxy:RequestEnterGame() #d,)Qe[ global.Facade:sendNotification(global.NoticeTable.Audio_Stop_BGM) oH6zlmqG" end ZH\t0YhrVe r craf4% --登录 KJQ8Yhq function API_Login(name, password) %dPk,Ylz local AuthProxy = global.Facade:retrieveProxy(global.ProxyTable.AuthProxy) J.h` 0$! local data = {} 9#U]?^DJ@ data.type = 1 rZdOU?U data.username = name Lp:VU-S data.password = password `.pEI q^ AuthProxy:RequestLogin(data) !1I# L!9 end 7d>w]R,Z wJ2cAX;" --开门 G?$o+Y'F function API_EnterRoom(x, y) {Ia1H local qq = ssr.GetCurMapData() K'
`qR global.networkCtl:SendMsg(global.MsgType.MSG_CS_OPEN_DOOR_REQUEST, 0, x, y) nm#23@uZ4K local function callback() 8%B_nVc ssr.AutoMoveBegin(x, y, qq.mapID) *
:TwO=) end
:'F,l: SL:ScheduleOnce(callback, 0.5) 'qT;Eht5 end M}[Q2v\ Rs"=o>Qu --多开 &2u
|7U. function API_PcOpen() \u`P(fI!K% LuaBridgeCtl:Inst():CheckClientCount(2) ,e'm@d$Q* end <J+Oh\8tad D%o(HS\E --盒子显示 Vv+nq_ function API_hezi() V WZpEi global.L_GameEnvManager._envData["isBoxLogin"] = 1 VI4mEq,V end `{{6vb^g [ K/l;Zd --遍历背包物品 C <:g"F:k function API_GetCurBagData() %HpPTjAW local s1 = ssr.getCurBagData()
:'Gn?dv| local result = "" THQ #zQ- for k, v in pairs(s1) do :Y /aT[ local s1 = string.format( H( .9tu
A "OverLap=%s,DuraMax=%s,Where=%s,Dura=%s,Name=%s,Shape=%s,MakeIndex=%s,Weight=%s,StdMode=%s,Index=%s" *Lrrl , v["OverLap"] m
uO. , v["DuraMax"] K!CVS7 , v["Where"] =JE<oVP8 , v["Dura"] z{OL+-OY , v["Name"] n+sv2Wv: , v["Shape"] TM6wjHFm , v["MakeIndex"] /~'C!so[v , v["Weight"] B)@Xz<Q , v["StdMode"] KdozB!\ , v["Index"]) qc,E azmU local ss = "" ?9{^gW4| if #v["Values"] > 1 then gBV4IQ for x, y in pairs(v["Values"]) do l[[`-f8j if y["Value"] > 0 then H][TH2H1 local Values = string.format("m_Value=%s,m_ValueID=%s" Q +l{> sL , y["Value"] W[J2>`k9 , y["Id"]) Vn5%%?]J ss = ss .. Values ^}$t(t end Xk|a%%O*H end _-RqkRI end 9U<WR*H result = result .. s1 .. "," .. ss .. "\r\n" ]_B<K5 end ?@@$)2_*u return result F>{bVPh
VA end i5le0lM JmCHwyUK? --获取背包是否满 Te}gmt+#% function API_GetBagFull() k0j4P^d
return ssr.IsBagToFull(isTips) bTeuOpp end (ww4( =:g\I6'a --获取背包百分比 PH%t#a!j3/ function API_GetBagEx() vT{(7m!Ra HW = ssr.GetMetaValueByKey("BW") [x7Rq_^ MAXHW = ssr.GetMetaValueByKey("MAXBW") )2y [#Blo ELL = HW / MAXHW * 100 r&R~a9+)
return math.ceil(ELL) cu}(
\a end ^jL)<y4` ]g$ky.; --获取背包是否满 _$T
!><)y function API_GetBagFull() ~\-=q^/! return ssr.IsBagToFull(isTips) {91Y;p
C end ?&:N|cltD ^NU_Tp:2^ --读取地图ID l,Q`;v5| function API_GetMapID() dl=)\mSFjF local tt = ssr.GetCurMapData() &J/!D# return tt.mapID .a2R2~35 end (^B1Kt!< "Fmq$.$% --读取地图名称 8t
=H function API_GetMapName() R-pON4D"* local tt = ssr.GetCurMapData() XO?WxL9k] return tt.mapName Nt\07*`qCr end KF
*F /[Fk>Vhp --获取背包最大数 HkRvcX
5 function API_GetMaxBag() RvA "ug.* return ssr.GetMaxBag() phb
;D end bl!pKOY qh>An;:u --使用物品 r:o9:w: function API_UseItem(itemName) hO> q|+mC local items = ssr.getQuickUseData() o
Vk!C a local item = ssr.getCurBagData() [MA
P
a for k, v in pairs(items) do |+8rYIms` if v.Name == itemName then c[M
4l ssr.UseItemByIndex(v.Index) ).,twf58 end Nz{qu}dt end n,2 p)#? .sit5BX for k, v in pairs(item) do FP{=b/ if v.Name == itemName then uYs45 G ssr.UseItemByIndex(v.Index) 4S>#>(n7= end oD2! [& end ,~$sJ2
g7 end h-(NWxK+ $ H@
--获取金币数量 >j]Gz-wC function API_GetMoney(Index) vRaxB return ssr.GetMoneyCountById(Index) hH>a{7V end kygj" @EX FiReb3zR function API_MergeTables(t1, t2) ]{i0?c local merged = {} L=#B>Eu for key, value in pairs(t1) do =4x6v< merged[key] = value uh9b!8 end ;LC|1_ ' for key, value in pairs(t2) do m-C#~Cp36 merged[key] = value *cFGDQ!
end )ty>{t return merged lu>G=uCJ end &/' O?HWl jm&[8
ApW dh{py --获取物品数量 x^[0UA]S9 function API_GetItemCount(itemName,isBind) ok ,O/|E}? local items=ssr.getQuickUseData() 0*P-/)o x local bagData=ssr.getBagData() FDiDHOR items=API_MergeTables(items,bagData) nY;Sk#9 local bind=isBind or false JK{2hr_a local count=0 ,e OZv=: for k,v in pairs(items) do 3k6Dbz if bind then L6qK3xa} --绑定 lgt&kdc%o if v.Name==itemName and v.Bind~=nil then =?Co<972Z count=count+ v.OverLap +{6:] end e"EGqn&! else Qj
[p/H$ --不绑定 :k_)Bh?+ if v.Name==itemName and v.Bind==nil then -k>k<bDAI count=count+ v.OverLap yp]v
Dm end qe1>UfY end , =*^XlO=c end \A!Iln return count p `oB._
R end nRq[il0 `i --读取人物坐标 l8Yr]oNkz yhK9rcJq6} XOS^&; -1d$
w` function API_GetMapXY() o^uh3,. local aa = ssr.GetMainPlayerMapPos() RigS1A\2l local aa = string.format("x=%s,y=%s" 9nO&d(r g , aa.x -{?xl*D , aa.y) B2BG*xa return aa !f!YMpN end " E5=AWd 'Q7
t5v@FF -- 获取角色是否活着 ~tNk\Kkv function API_IsRoleAlive() g~|x^d^;| return ssr.IsRoleAlive() ):+^893) end p8s%bPjK 8PeVHpZ --读取聊天信息 [=-,i#4 function API_ChatMsg() C_[
d local function listcb(msg) # NK{]H$fd --table D ][I#vh ChatTable = msg Q.8^F end v7+|G'8M` ssr.RegisterLUAEvent("OnAddChatItem", "增加聊天消息", listcb) _Co
v >6_i if ChatTable.mt == 1 and ChatTable.ChannelId == 3 or ChatTable.ChannelId == 6 then {9@E[bWp# local ChatT = string.format( .;vd "SendName=%s,SendId=%s,ChannelId=%s,mt=%s,SendTime=%s,Msg=%s" 2,|@a\H , ChatTable.SendName zuJ` 704
, ChatTable.SendId b5|l8<\ , ChatTable.ChannelId 3uvl'1(%J , ChatTable.mt uuUjIZCtz , ChatTable.SendTime ex|)3|J , ChatTable.Msg) _{B2z[G} return ChatT Uq%|v end 3!?QQT,!) end )zP"Uuu Z>NA 9: function API_ChatMaa() oe9S$C;$' return ssr.GetMaxBag() URh5ajoR% end E[CvxVCx KJ-Q$
M --修理装备 ?q'r9Ehe function API_CopyTable(original) x1CMW`F local copy = {} M-!#-l for key, value in pairs(original) do BNJG-b|g^ if type(value) == "table" then H0Sm4 copy[key] = API_CopyTable(value) 3WfZ zb+ else HW6Cz>WxOW copy[key] = value =/xXB end f|!@H>< end z%6egi> return copy OWN|W, end FFN.9[Ly 修衣服 = "0,4" --衣服,头盔 k[1[Y{n. 修武器 = "1" O1]XoUH< 修项链 = "3" zcEpywNP 修手镯 = "5,6" -x/g+T- 修戒指 = "7,8" --左戒指 右戒指 at3YL[,[Z function API_Repair(npcName, itemPos) e
[F33% local npcId = API_GetNpcIdByName(npcName) q<fj1t1w local tempData = ssr.getEquipData() dt>!=<|k local tobeRepair = {} 7vH4}S\
q for k, v in pairs(tempData) do ybB<AkYc if string.find(itemPos, tostring(v["Where"])) and v["Dura"] ~= v["DuraMax"] then h*
/ local tmp = { `lO/I+8 Name = v.Name, 127@
TN" MakeIndex = v.MakeIndex, {#{nU NW Where = v.Where Oo\~'I } 4
>D5t)254 table.insert(tobeRepair, tmp) h!hv{c ssr.TakeOffEquipRequest(v) `UkjrMO end 3bugVJ93 end yg4ILL --脱完 开始修理 P_@ty~u for k, v in pairs(tobeRepair) do /#xYy^` local Name = v.Name ,6U=F#z local MakeIndex = v.MakeIndex "yXqf%CGE local networkCtl = global.networkCtl 8HSGOs =8 networkCtl:SendMsg(1023, npcId, MakeIndex, 0, 0, Name, string.len(Name)) Ujly\ix` end WN#dR~> --开始穿
Z
\$!: local function ToDress() `\-MpNw for k, v in pairs(tobeRepair) do twTRw:.!f ssr.TakeOnEquipRequest(v, v["Where"]) {
lZ<'p end RQn3y-N] end 7nPm{=BG local scheduleID = ssr.PerformWithDelayGlobal(ToDress, 1) %cMayCaI!@ API_CloseNpcTalk() PzLV}
end %bnjK#o"Q tkix@Q!;\ 69C
ss' %__.-;)
o 药店={0} <DdzDbgax 首饰店={19,20,21,22,23,24,26} Od]wh 衣服店={10,11,15,16,27,28,62,64} st CFLYox 武器店={5,6} Q[Tbdc%1EG 杂货店={3,25,2,30,31} A5dH*< } 铁匠铺={43} o\yqf:V8 书店={4} *\wf(o>Q --检测背包是否有指定类型物品 Qc
:Sf46O function API_IsNeedToStore(StdModes) U09@pne8 local function IsNeed(StdMode) :Z5kiEwYM local bagData=ssr.getBagData() 23UXOY0BW for k,v in pairs(bagData) do w?p8)Q6m
if v.StdMode==StdMode then R2[
}
return true ~/R}K g( end v\COl* end SYK?5_804 local EquipProxy = global.Facade:retrieveProxy(global.ProxyTable.Equip) -(.\> F local equip = EquipProxy:GetEquipData() z;i4F.p for k,v in pairs(equip) do -IS?8\Q< if v.StdMode==StdMode then ]h&?^L<. if tonumber(v.Dura)/v.DuraMax < 0.9 then M$LzV}k return true 7m9T'
end O`(it%Ho! end Jbz>j\ end Jc9^Hyqu& return false V P4ToYc end >5]w\^QN9_ wsCT9&p for k,v in pairs(StdModes) do n!XSB7d~X if IsNeed(v) then +Sdki:: return true ^TY8,qDA end !yTj
O
end a<V*
) return false <Xj
,>2m; end M7IQJFra `_+m3vHG O Bp/:] --范围内怪物个数 bool型返回distance : ]JsUb{YK function API_范围内怪物个数(distance, count) qfEB VS( local proxyUtils = requireProxy("proxyUtils") t!vlZNc local mainPlayerID = global.gamePlayerController:GetMainPlayerID() 9!6yo return proxyUtils.checkIsEnoughEnemy(mainPlayerID, count, distance) $L$GI~w/ end |=}v^o ZC --关闭NPC框 b(gcnSzM2 function API_CloseNpcTalk() z0&I>PG^ global.Facade:sendNotification(global.NoticeTable.Layer_NPC_Talk_Close) jLf8 7 global.Facade:sendNotification(global.NoticeTable.GuideEventEnded, {name = "GUIDE_END_NPC_TALK_LAYER_CLOSED"}) GUK3`}!% end 7wc{.~+ --无怪随机 ]z / function API_无怪随机() ?{6[6T local list = global.monsterManager.mMonstersInCurrViewField Z$a4@W9o local actors = {} FUTDR-q O for k, v in pairs(list) do 'r?OzFtxh local actor = {} [ w1" actor["mID"] = v:GetID() d
"vd_}P~ table.insert(actors, actor); rO{"jJ
end x?Oc<CQ-2 if #actors < 1 then ,TxZ:f`" API_UseItem("随机传送石") 6MRS0{ local aa = API_GetItemCount(1078) ./;*LD if aa < 1 then *C?x\.\C ssr.BuyStoreItemsById(2, 1) > 'KQL?!F end #8jH_bi end 3# T_( return #actors V5ihplAk end ,o j\=2 0<S(zva7([ --API_周围怪物数量 p
V))g
e\ function API_周围怪物数量() ) N"gW* local list = global.monsterManager.mMonstersInCurrViewField y7s.6i}7 local actors = {} QCWk[Gx for k, v in pairs(list) do cB[.ET$ local actor = {} IN9o$CZ: actor["mID"] = v:GetID() *Cgd?*\7 table.insert(actors, actor); EMejvPnZO
end {VE$i2nC8 return #actors DV~1gr,\ end 4==LtEp &9'JHF!l --API_周围人物数量 参数是 白名单 Uyyw'Ni function API_视野内敌人(Name, lv) Kq0hT4w local list = global.playerManager.mPlayersInCurrViewField 6.'+y1yS) local myName = global.gamePlayerController:GetMainPlayer():GetName() Iq[,)$
local actors = {} { n%U2LVL local names = myName .. "," .. Name p^``hP:J for k, v in pairs(list) do .el_pg local actor = {} ,/>~J]:\; actor["mID"] = v:GetID() i(c'94M actor["mName"] = v:GetName() ^5~[G%G4 actor["mLv"] = (v.GetLevel and { v:GetLevel() } or { 0 })[1] cBA
2;5E --local myName=global.gamePlayerController:GetMainPlayer():GetName() ,P d2ZfZ if not string.find(names, actor["mName"]) and tonumber(actor["mLv"]) > lv then T{lJ[M table.insert(actors, actor); 1P\_3.V{ end 5OUe|mS end MPd#C*c return #actors {#y HL end M O/-?@w ;nJCd1H ARu^hz= --自动捡 Fk,3th API_NoBodyPickEnable=true w,.Hdd6 T't^pO-` --捡取物品白名单 t hDE
1h API_MyPlayerNames = "我不是药神," 2WOd
TM{u '17u
Wq --全图捡 b\\?aR
| API_MapPickEnable = true p8^^Pva/ --自动存 _n{6/ API_InStoreEnable=false y!^RL,HIL API_InStoreItems="" 0\U28zbMJw --自动扔 qwaw\vOA API_ItemDropEnable=false {ersXQ: --自动用 %GS)9{T& API_ItemKeepCountEnable=true j{
P,(- --自动领取 WiviH#hF API_GetMailItemEnable=false Ck.GN<#-^P --自动买回城石 o#wF/ I API_BuyStoneEnable=false ?I 1@:?Qi API_RecoveryItemMaxMoney=1000000 1|cmmUM-'v --地图 <STjB,_s API_PreMapName="盟重省" ]yVB66l --开关 ^j=_=Km] API_TimerEnable=true }wkBa] N]yk<55 API_TimerEnable1s=true "=f*Lk@[ API_TimerEnable10s=true <ZrZSt+< --1S定时器 1ck2Gxn function API_AutoSchedule1s() t@v>eb if GET_GAME_STATE() == "world" and API_TimerEnable1s then "5jZS6A] --自己设置的自动捡 R4JO)<'K& --API_PickItems() qW<: `y --系统自动捡 % NS]z ;G if API_NoBodyPickEnable then +uwjZN'9a if API_IsInCurrViewField(API_MyPlayerNames) then "rjJ"u1 API_OpenGroupPick(false) 28BiuxVW --release_print("来人,关自动捡") ($W9
? --API_RunAway() --逃跑 1=(i{D~ --API_UseItem3Second("回城石") Qw5M
\
else p-;]O~^ API_OpenGroupPick(true) 65J'uN API_PickItems() 6U+#ADo --release_print("无人,开自动捡") xG}eiUbM` end vPwDV_z k end ypd
end FJL9x,%6 end Cm;N5i --10s定时器 f(n{7 function API_AutoSchedule10s() $~~=SOd0 if GET_GAME_STATE()=="world" and API_TimerEnable then >v<}$v6D~ --自动扔 #t(?8!F if API_ItemDropEnable then H_8@J
API_DropItemKeep("回城卷",2) "msg./iC end BkqIfV%O ln=zGX.e --自动组队 vP~F+z
@g if ssr.GetCurMapData().mapName == "石墓二层" or ssr.GetCurMapData().mapName == "石墓三层" or ssr.GetCurMapData().mapName == "地牢一层西" then Mc6Cte]3| API_InviteJoinTeam() $uLzC] API_TeamApplyUpdate() --允许所有邀请 tc,7yo\".
end 0`ib_&yI 329xo03-[ --自动用消耗品 *j*jA/ if API_ItemKeepCountEnable then !6 $>| if API_GetItemCount("强效金创药") > 1 then O:BP35z_F API_UseItem("强效金创药") H*\ }W end &&<^wtznO if API_GetItemCount("强效魔法药") > 1 then mifYk>J^9 API_UseItem("强效魔法药") Vd1K
{rH# end .D>lv_kp if API_GetItemCount("太阳水") > 1 then z!L0j+ API_UseItem("太阳水") |XH3$;=*h end >Ia(g0 if API_GetItemCount("魔法药(中量)") > 7 then }>
1h+O API_UseItem("魔法药(中量)") ev guw*u end 7R2)Klt if API_GetItemCount("魔法药(中量)") < 1 then F9+d7 Y$ API_UseItem("魔法药(中)包") Iw<c 9w8 end 2\5@_U^)h if API_GetItemCount("金创药(中量)") > 1 then
_fyw API_UseItem("金创药(中量)") !eTS PM end ~!nd'{{9 if API_GetItemCount("护身符(大)") < 1 then u('OHPqq API_UseItem("回城卷") ntkinbbD end /Bwea];^Q if API_GetItemCount("魔法药(中量)") < 1 and SL:GetMetaValue("MAP_NAME") ~= "盟重省" and API_GetItemCount("魔法药(中)包") < 1 then 8\V-aow API_UseItem("回城卷") ^LcI6h
end Vut.oB$
~ if SL:GetMetaValue("HP") < 30 and not SL:GetMetaValue("IN_SAFE_AREA") then BA>0
+ API_UseItem("回城卷") yED^/=\)} end RU>vnDaC end S2s-TpjB< <|`@K|N if API_GetMailItemEnable then EqmJXDm global.networkCtl:SendMsg(global.MsgType.MSG_CS_EMAIL_GET_REQUEST, 2) 2b"5/$|6 global.Facade:sendNotification(global.NoticeTable.Layer_Enter_Current) 4*,q1yK end 8|tm`r`*Az end JX/d;N7a end p.\KmEx +8Px` v1L --定时器 'OihA^e function API_TimerStart() )UdS(Bj --1S定时开关 qlxW@| if API_AutoScheduleID1s == nil then zg
j35 API_AutoScheduleID1s = ssr.Schedule(API_AutoSchedule1s, 1) Yptsq@s else D8 #q.OR] ssr.UnSchedule(API_AutoScheduleID1s) h9-Ky@X` API_AutoScheduleID1s = ssr.Schedule(API_AutoSchedule1s, 1) 7cy~qg end =dw1Q --10S定时开关 <&Uk!1Jd if API_AutoScheduleID10s == nil then
=*Yc
/ API_AutoScheduleID10s = ssr.Schedule(API_AutoSchedule10s, 10) eJA{]^Zf else s*X\%!l9 ssr.UnSchedule(API_AutoScheduleID10s) Iw:("A&~ API_AutoScheduleID10s = ssr.Schedule(API_AutoSchedule10s, 10) %i
" end 2Ee1mbZVw8 end %N function API_IsInCurrViewField(names, level) "PHv~_:^R local lv = level or 0 ).S<{zm7 local nameList = names or "" U`Ag|
R local list = global.playerManager.mPlayersInCurrViewField a?MtY
EK2 local actors = {} UKBMGzu2: for k, v in pairs(list) do 2r0!h98 local actor = {} )/AvWDKvO actor["mID"] = v:GetID() lG+ltCc$9 actor["mName"] = v:GetName() &sgwY actor["mLv"] = (v.GetLevel and { v:GetLevel() } or { 0 })[1] ykeUS
zz2 if not string.find(names, actor["mName"]) and tonumber(actor["mLv"]) > lv then ? 7EVmF table.insert(actors, actor); 4|L@oTzx end @~XlI1g$i end iHn]yv3
#
if #actors > 0 then _Kj. return true W9Lg}[>:) else T??aVe]c return false
M^f1D&A