游戏地址
o{QV'dgu www.fgcq996.com H!Dj.]T 那年传奇百区1.76 Onou:kmf1
_dW#[TCF 找到 lua_State 然后调用下面的函数就能实现功能
%oWG"u 一个跑单狗注意qq1946913194
\DWKG~r-% 游戏账号密码。fanren9527 qq2293307009 ]7oo`KcQ|
%9J:TH9E) 搞完演示完,删除好友跑单 }EP}D?Mmu DtJ3`Jd --自动寻路Ex
VJl0UM3{J function API_AutoMoveEx(mapX, mapY)
f(5;Rf( ssr.AutoMoveBegin(mapX, mapY, ssr.GetCurMapData().mapID)
}E[vW local inputProxy = global.Facade:retrieveProxy(global.ProxyTable.PlayerInputProxy)
'Yh`B8 local pathPoints = inputProxy:GetPathFindPoints()
RLzqpE<rJ if pathPoints == nil then
Zg0nsNA
return 0
Qw
ve-[ end
m)?0;9bt return #pathPoints
9U4[o<G]= end
uy~$
:0o A (p^Q --自动寻路
OW@"j;6
3` function API_AutoMove(mapX, mapY)
~
wOMT ssr.AutoMoveBegin(mapX, mapY, ssr.GetCurMapData().mapID)
atw*t1)g local inputProxy = global.Facade:retrieveProxy(global.ProxyTable.PlayerInputProxy)
E9Dy)f]#W local pathPoints = inputProxy:GetPathFindPoints()
gm=C0Sp? if pathPoints == nil then
ecO$L<9> return 0
:RwURv+kT end
O(v>\MV return #pathPoints
q&_\A0 end
!ZvVj\{ j>l --停止寻路
~b0l?P*Ff
function API_AutoMoveEnd()
7I@df.rf6J global.Facade:sendNotification(global.NoticeTable.AutoMoveEnd)
{v|ib112; end
)X:Sfk a
dRIg:2 --自动打怪
y7+n*|H function API_AutoFight(isAFK)
hl] y): if isAFK then
SuNc&e#( if not IsAFKState() then
_MuzD&^qE global.networkCtl:SendMsg(global.MsgType.MSG_CS_AUTOPLAYGAME_REQUEST, 1)
y?A*$6 global.Facade:sendNotification(global.NoticeTable.AFKBegin)
b\zq,0% end
-B!
a
O65^ else
;uv$>Fauk if IsAFKState() then
}Kp$/CYd global.networkCtl:SendMsg(global.MsgType.MSG_CS_AUTOPLAYGAME_REQUEST, 2)
9_.pLLx global.Facade:sendNotification(global.NoticeTable.AFKEnd)
%M/L/_d end
g0 ;;+z end
dw!Xt@,[g{ end
' o*\N% mAY/J0_ function IsAFKState()
5e1oxSU local AutoProxy = global.Facade:retrieveProxy(global.ProxyTable.Auto)
bv7xh*
/ return AutoProxy:IsAFKState()
dmcY]m end
"%S-(ue: 9j5|o([J --打开自动穿戴
5w{U/v$Z function API_AutoDress()
#<U@SM
v --不抢别人归属
qFLt/
> global.MMO.SETTING_IDX_NO_ATTACK_HAVE_BELONG =1
A$n.'*gK global.MMO.SETTING_IDX_AUTO_PUT_IN_EQUIP = 1
ZX.,<vumSy local ServerOptionsProxy = global.Facade:retrieveProxy(global.ProxyTable.ServerOptionsProxy)
-N5h` Ii7 ServerOptionsProxy._data["autoDress"] = 1
<eP,/H global.ConstantConfig.autousetimes = 0
!0UfX{. end
;l<Hen* .F2
"tt?' --强制打开自动挂机拾取
qJ
O6m-
function API_AutoPick()
.j"heYF) local ItemConfigProxy = global.Facade:retrieveProxy(global.ProxyTable.ItemConfigProxy)
^eefR5^_w local config = ItemConfigProxy.config
( ]0F3@k#s for k, v in pairs(config) do
vb]uO ' l --local res = string.gsub(v.pickset, "0", "1")
Ag*?>I v.pickset = v.pickset .. 1
L; A#N9 end
cxvO,8NiB end
2PUB@B'
+ wZbT*rU --获取人物坐标
u$aN~6HG function API_GetMapXY()
Pth4_]US return ssr.GetMainPlayerMapPos()
bY*_6SPK4 end
=|dm#w_L" vRD(* S9^ --获取人物状态
(n_.bSI function API_GetAction()
|nr;OM local player = global.gamePlayerController:GetMainPlayer()
heB![N0: local list = global.playerManager.mPlayersInCurrViewField
2']0c
z return player:GetAction()
Xc^(e?L4 end
;`kOFg#`)c 3RxR'M1 --设置宠物状态
)"|wWu function API_PetSleep(isSleep)
KL9JA;" local SummonsProxy = global.Facade:retrieveProxy(global.ProxyTable.SummonsProxy)
yB=R7E7 if not SummonsProxy:IsAlived() then
gp~-n7'~O return false
_ouZd. end
<{hB&4oL if isSleep then
j0O1?? SummonsProxy:RequestModeChange(2)
5p:2gsk else
RdL5VAD
SummonsProxy:RequestModeChange(4)
!vc5NKv#n end
DYC2bs> end
{{[@ X pU,\ &3N --获取人物数据
n<HF] function API_GetGamePlayer()
kK
5~hpv local player = global.gamePlayerController:GetMainPlayer()
\IzZJGi local list = global.playerManager.mPlayersInCurrViewField
Z=%u:K}[ local person = {}
D&@ js!|5 person["等级"] = player:GetLevel()
CDW|cr{ person["职业"] = player:GetJobID()
AXi4{Q, person["名字"] = player:GetName()
0"+QWh person["金币"] = ssr.GetMoneyCountById(1)
>yqEXx5{ person["元宝"] = ssr.GetMoneyCountById(2)
d(9Sk Xr person["绑金"] = ssr.GetMoneyCountById(3)
(Ia:>ocE0 return person
QfM^J5j.M? end
R`@7f$;wG i=M[$ function API_GetGamePlayerLevel()
f(K1,L:&7 local player = global.gamePlayerController:GetMainPlayer()
7Wiwnv_" return player:GetLevel()
glKPjL * end
k<f0mo
xs' F8{T/YhZ --获取周围怪物
@Eh(GZN function API_GetMonster()
XRyeEwA;pp local list = global.monsterManager.mMonstersInCurrViewField
kI5LG6 local actors = {}
3W.D^^)eCV for k, v in pairs(list) do
d~QJ}a local actor = {}
*tkf)
[( actor["mID"] = v:GetID()
-GQ.B{%G actor["mName"] = v:GetName()
2(e;pM2Dq actor["mRace"] = v:GetRace()
=&qfmq actor["mType"] = v:GetType()
9c1q:>| actor["mSubType"] = v:GetSubType()
{4p7r7n' actor["mX"] = v:GetMapX()
v]KPA.W actor["mY"] = v:GetMapY()
L ]BTX] actor["mAction"] = v:GetAction()
>SYOtzg% actor["mTypeIndex"] = v:GetTypeIndex()
P>x88M actor["mAnimationID"] = v:GetAnimationID()
@wP.Rd actor["mLv"] = (v.GetLevel and { v:GetLevel() } or { 0 })[1]
;;U&mhz` actor["mSex"] = (v.GetSexID and { v:GetSexID() } or { 0 })[1]
ZX{eggXl actor["mJobID"] = (v.GetJobID and { v:GetJobID() } or { 0 })[1]
akHQ&+[j actor["mHP"] = (v.GetHP and { v:GetHP() } or { 0 })[1]
]#q$i[Y actor["mHPMax"] = (v.GetMaxHP and { v:GetMaxHP() } or { 0 })[1]
Aqg$q* Y actor["mMP"] = (v.GetMP and { v:GetMP() } or { 0 })[1]
CPP9=CoR37 actor["mMPMax"] = (v.GetMaxMP and { v:GetMaxMP() } or { 0 })[1]
SL^%Zh/~ actor["mOwnerID"] = (v.GetOwnerID and { v:GetOwnerID() } or { "" })[1]
c]z^(:_> actor["mOwnerName"] = (v.GetOwnerName and { v:GetOwnerName() } or { "" })[1]
0&r}'f? actor["mGuildName"] = (v.mGuildName and { v.mGuildName } or { "" })[1]
OT)`)PZ" actor["mColor"] = "0xFFFFFF"
HBk5p>& if v:GetType() == global.MMO.ACTOR_PLAYER then
Z vyF"4QN local batch_label = global.MMO.HUD_TYPE_BATCH_LABEL
ZC^?ng local label_name = global.MMO.HUD_LABEL_NAME
*S4&V<W> local hudName = global.HUDManager:GetHUD(v:GetID(), batch_label, label_name)
_nw\ac#* if hudName then
+l7Bu} _? actor["mColor"] = GetColorHexFromRBG(hudName:getColor())
(.{. " end
J
KCV>k end
Vt9o8naz table.insert(actors, actor);
)coA30YR end
TFhYu I4c%>R return actors
W>P :EI1 end
3z8zZ1uzU +yHzp
--遍历周围玩家
e+@.n function API_GetPlayer()
WFqOVI*l local list = global.playerManager.mPlayersInCurrViewField
O&">%aU1I local actors = {}
aIWpgUd` for k, v in pairs(list) do
_qQo}|/q local actor = {}
:n
x;~f actor["mID"] = v:GetID()
u/\Ipk/ actor["mName"] = v:GetName()
15DlD`QV actor["mRace"] = v:GetRace()
{>brue*) actor["mType"] = v:GetType()
y>RqA*J actor["mSubType"] = v:GetSubType()
X<1ymb3 actor["mX"] = v:GetMapX()
\D[~54 actor["mY"] = v:GetMapY()
L;KLmxy# actor["mAction"] = v:GetAction()
g|!=@9[dv actor["mTypeIndex"] = v:GetTypeIndex()
Ww{-(Ktx actor["mAnimationID"] = v:GetAnimationID()
#e9XU:9@g actor["mLv"] = (v.GetLevel and { v:GetLevel() } or { 0 })[1]
]7
h;MR actor["mSex"] = (v.GetSexID and { v:GetSexID() } or { 0 })[1]
!W=2ZlzS actor["mJobID"] = (v.GetJobID and { v:GetJobID() } or { 0 })[1]
vha@YP
C= actor["mHP"] = (v.GetHP and { v:GetHP() } or { 0 })[1]
0upZ4eN actor["mHPMax"] = (v.GetMaxHP and { v:GetMaxHP() } or { 0 })[1]
!A_KCM:Ym actor["mMP"] = (v.GetMP and { v:GetMP() } or { 0 })[1]
\nQEvcH actor["mMPMax"] = (v.GetMaxMP and { v:GetMaxMP() } or { 0 })[1]
i{J[;rV9 actor["mOwnerID"] = (v.GetOwnerID and { v:GetOwnerID() } or { "" })[1]
$,T3
vX]< actor["mOwnerName"] = (v.GetOwnerName and { v:GetOwnerName() } or { "" })[1]
Io
_7 actor["mGuildName"] = (v.mGuildName and { v.mGuildName } or { "" })[1]
Z \- actor["mColor"] = "0xFFFFFF"
%g4)f9> if v:GetType() == global.MMO.ACTOR_PLAYER then
(Pt*|@i2c local batch_label = global.MMO.HUD_TYPE_BATCH_LABEL
_)#~D*3 local label_name = global.MMO.HUD_LABEL_NAME
D,uT#P local hudName = global.HUDManager:GetHUD(v:GetID(), batch_label, label_name)
wp-3U}P2( if hudName then
]d&;QZ#w actor["mColor"] = GetColorHexFromRBG(hudName:getColor())
3v<9 Z9O end
8[8U49V9( end
jqoU;u` table.insert(actors, actor);
9AQ2FD end
6M8(KN^ return actors
c;R.rV< end
^}GR!990
jg3['hTJT --遍历周围玩家EX
a\I`:RO=<Z function API_GetPlayerExe()
q0\$wI local s1 = API_GetPlayer()
Q@UY4gA' local result = ""
xtp55"g for k, v in pairs(s1) do
7|?Ht] local s2 = string.format(
jH4Wu`r;m "mID=%s,mName=%s,mRace=%s,Dura=%s,mType=%s,mSubType=%s,mX=%s,mY=%s,mAction=%s,mTypeIndex=%s,mAnimationID=%s,"
,k/<Nv; , v["mID"]
i{>YQ , v["mName"]
Y[fbm
n^ , v["mRace"]
]JI
A\|b6 , v["Dura"]
.GPuKP| , v["mType"]
@(rLn , v["mSubType"]
}HZ'i;~r|9 , v["mX"]
nSU7,K`PM , v["mY"]
JhB$s , v["mAction"]
h6(L22Hn , v["mTypeIndex"]
v8A{q , v["mAnimationID"])
DAd$u1 local s3 = ""
G@S'_ 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"
(8j@+J , v["mLv"]
8L(KdDY , v["mJobID"]
\G1(r=fU , v["mHP"]
2?owXcbx , v["mHPMax"]
&44?k: , v["mMP"]
!myF_cv}' , v["mMPMax"]
f P1fm , v["mOwnerID"]
`3F/7$q_ , v["mOwnerName"]
;V1e>?3 , v["mGuildName"]
)i>T\B , v["mColor"])
H*>5ne=x result = result .. s2 .. s3 .. "\r\n"
#.\X%! end
9'JkLgz;d+ return result
o/\z4Ri)$ end
Ga^k1TQq <4Cy U
j --遍历周围指定NPC
O<w7PS function API_GetNpcIdByName(npcName)
,[Z;"wE local npcVec = global.npcManager:FindNpcInCurrViewField()
knZ<V%/e local npc = {}
cNqw(\rr for k, v in pairs(npcVec) do
{eo?vA8SE local npcs = {}
G{oM2`c'#8 npc[v["mID"]] = v["mName"]
ZbcpE~<a end
BRMR>
~k( for key, value in pairs(npc) do
*r]#jY4qx local sPos, ePos = string.find(value, npcName)
q0
8 if sPos then
$d7{ q3K&1 return key
YyR~pT#ffT end
w2`j&]D6
end
j-etEWOTr return nil
WR"p2= end
x68s$H [p_C?hHO --NPC名称打开NPC
=p';y& function API_NpcTalk(npcName)
5($
'@u local npcid = API_GetNpcIdByName(npcName)
pG:)u
cj local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
K3t^y`z NPCProxy:RequestTalk(npcid)
uM~j end
#/`V.jXt> P(Hh%9'( --NPCID打开NPC
@;z}Hk0A function API_NpcTalkEx(npcid)
cb~m==G local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
n7Ia8?8-l NPCProxy:RequestTalk(npcid)
uw@|Y{(K r end
hC= ="4 - qT L@N9 function API_GetNpcTalkData()
!b+Kasss9 local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
1{S"
axSL local talkData = NPCProxy:GetCurrentNPCTalkData()
-vC?bumR% return talkData
l=JK+uZ end
Bhrp"l
+| U9B|u`72 function API_GetAllLink()
_/!IjB:(70 local talkData = API_GetNpcTalkData()
3^zOG2
!xK`:[B local acts = {}
e: :H1V local kv = {}
)Hy|K1 z '%Vy for line in talkData.content:gmatch("(text=.->)") do
];go?.*C if string.find(line, "@") then
!P0Oq)q local key = line:match("text=(.-)|")
|bz,cvlP
W "GofQ5,| local value = line:match("(@.-)>")
-gV'z5 kv[key] = value
w~g)Dz2G end
r
yO\$m end
4m6E~_:F zKk2
>. for result in talkData.content:gmatch("(@.-)>") do
ABp/uJI) table.insert(acts, result)
_#+~#U%5n end
j7 D\O local sendData = {
oa|nQ`[ UserID = talkData.npcID,
YvK8;<k@-? index = talkData.index,
H;$O CDRC --Act = "@blbumj",
jM90
gPX>, --commonInput = jsonData.commonInput,
y(8AxsROp --inputID= jsonData.inputID,
,tL<?6_ }
Hd)4_
uBt return acts, kv, sendData
9YpD\H` end
PGHl:4`Es! !}^{W)h[ --按索引号点击按
?J~(qa a; function API_ClickLinkByIndex(index)
OE/O:F:1j acts, kv, sendData = API_GetAllLink()
Ij }RlYQz sendData["Act"] = acts[index + 2]
~$i36" local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
Vj"B#
NPCProxy:ExecuteWithJsonData(sendData)
T!)v9L end
S:Ne g!` ;,]T|>M --按索购买引号点击按
.~6p/fHX function API_ClickBuyLinkByIndex(index)
D[)g-_3f6< acts, kv, sendData = API_GetAllLink()
#^v|u3^DD sendData["Act"] = acts[index]
eVDI7W:(Sn local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
@DrMaTr NPCProxy:ExecuteWithJsonData(sendData)
Khxl'qj end
&la;Vu"dp ?t+Kp9@aZ --按名称点击按
>_]j{}~\k function API_ClickLinkByName(linkName)
|}\et
ecB acts, kv, sendData = API_GetAllLink()
,P<n\(DQ sendData["Act"] = kv[linkName]
a<M<) {$u local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
g Xvuv^ NPCProxy:ExecuteWithJsonData(sendData)
/AP@Bhm end
F"3PP ~ F%x
8y --出售物品
</|IgN$w` function API_Sell(npcName,itemsName)
+)FB[/pXk local npcId=API_GetNpcIdByName(npcName)
0p_/eWww- local bagData=ssr.getBagData()
g~Zel}h# for k,v in pairs(bagData) do
%@5f+5{i!z if string.find(itemsName,v.Name) then
w7]@QTC --if #v["Values"]<2 then
BXVmt!S5F local Name = v.Name
Sf)VQ5U!Y local MakeIndex = v.MakeIndex
;z>)&F local networkCtl = global.networkCtl
0zaE?dA] networkCtl:SendMsg(global.MsgType.MSG_CS_NPC_STORE_SELL_ITEM, npcId, MakeIndex , 0, 0, Name , string.len(Name) )
Qsc%qt-l --end
FMuM:%&J] end
YZdp/X6x end
^
e>`ob end
'tp1|n/1 --全部卖
fNc3&=]] function API_SellAll(npcName)
k9.2*+vvg local npcId=API_GetNpcIdByName(npcName)
}}v;V
*_V local bagData=ssr.getBagData()
_rK}~y=0 for k,v in pairs(bagData) do
0I4RZ.2*Y --if #v["Values"]<2 then
RJ1Q.o local Name = v.Name
-1~bWRYq local MakeIndex = v.MakeIndex
Qj?FUxw local networkCtl = global.networkCtl
d:6?miMH]t networkCtl:SendMsg(global.MsgType.MSG_CS_NPC_STORE_SELL_ITEM, npcId, MakeIndex , 0, 0, Name , string.len(Name) )
xGJ{_M --end
I
m1e/F] end
mh!;W=|/" end
aO?(ZL |Gb"%5YD <DCrYt!1}c --NPC购买
37Z:WJ?
function API_Buy(npcName,itemName,count)
DQd~!21\| --进入子菜单
jx&pRjP
local sendData =
]C-hl}iq {
*?K3jy{ UserID = API_GetNpcIdByName(npcName),
b:Dr_| Name = itemName,
'Qj
X2ytgX }
7^h?<X\ SendTableToServer(1015, sendData)
VC\43A,9 local function ToBuy()
e7ixi^Q local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
rE-Xv.
| local list = NPCProxy.facade.view.mediatorMap.NPCStoreMediator._layer.itemList
yK<%AV@v for i=1,count do
utC]GiR if i>#list then
JB a:))lw break
Aq}]{gfQ1 end
C XZm/^ sendData.MakeIndex= list[#list-i].MakeIndex
!j6]k^ra SendTableToServer(1014, sendData)
67Z|=B!7 end
veg\A+:' API_CloseNpcTalk()
Q_xE:#!; end
EUU9JnQhBJ local scheduleID = ssr.PerformWithDelayGlobal(ToBuy, 1)
n3-u.Fb end
Hm4:m$=p
4 HiEXw}Hkz |0ahvsrtW function 打开子项(item)
l
njaHol0 local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
tB4- of3+ if item.SubMenu == 1 then
Iu^#+n NPCProxy:RequestNpcStoreItemList(item)
6|t4\' end
R}a,.C end
l)fF)\ |;= ^_r8R__S: function 子项购买(count)
r@0HqZx` local list = NPCProxy.facade.view.mediatorMap.NPCStoreMediator._layer.itemList
agN`)
F! for i = 1, count do
l=[<gPE if i > #list then break end
_=XzQZT!L NPCProxy:RequestNpcStoreBuy(list
) z@^l1)m end aH
e/MucK end ,2/qQD n/
i=@.u=: --登录角色 oori t &Jv j@,>$d function API_LoginRole(index) |f&)@fUI local LoginProxy = global.Facade:retrieveProxy(global.ProxyTable.Login) 1Dg\\aUk LoginProxy:SetSelectedRoleByIndex(index) mF[w-<:.d LoginProxy:RequestEnterGame() xxgS!J global.Facade:sendNotification(global.NoticeTable.Audio_Stop_BGM) ` ZXX[&C end "?hEGJ;m" bWo-(
qxq --登录 a;D{P`%n function API_Login(name, password) Zh]d&Xeq local AuthProxy = global.Facade:retrieveProxy(global.ProxyTable.AuthProxy) yv
^j~ local data = {} @dV'v{:, data.type = 1 IL?3>$, data.username = name gYfN?A*`_ data.password = password =xWZJ:UnU AuthProxy:RequestLogin(data) UMuqdLaT9 end eyy{z;D8r E$; =*0w --开门 E8u:Fg
s function API_EnterRoom(x, y) I4ZL+a local qq = ssr.GetCurMapData() Mb=vIk{Bf global.networkCtl:SendMsg(global.MsgType.MSG_CS_OPEN_DOOR_REQUEST, 0, x, y) !
R?r)G5E local function callback() (EGsw o ssr.AutoMoveBegin(x, y, qq.mapID) o-Pa3L= end }x`W+r SL:ScheduleOnce(callback, 0.5) L"A
,7@:Vd end a33}CVG-e3 <Vm+Lt9 --多开 sH(4.36+ function API_PcOpen() 8i=J(5= LuaBridgeCtl:Inst():CheckClientCount(2) ,5HQHo@ end *+re2O)Eh' wGD".CS0 --盒子显示 E!&A[TlX\ function API_hezi() T>e!DOW; global.L_GameEnvManager._envData["isBoxLogin"] = 1 uOc:^ end )uiYu3 I o {Sc --遍历背包物品 j{SRE1tqh function API_GetCurBagData() t/LQ|/xo local s1 = ssr.getCurBagData() ,J"6(nk local result = "" ;ajCnSmR for k, v in pairs(s1) do N_lQz(nG/2 local s1 = string.format( W#E`h "OverLap=%s,DuraMax=%s,Where=%s,Dura=%s,Name=%s,Shape=%s,MakeIndex=%s,Weight=%s,StdMode=%s,Index=%s" 3t5`,R1@t , v["OverLap"] E8zga ) , v["DuraMax"] j|TcmZGO , v["Where"] I4:4)V? , v["Dura"] "qjkwf)\ , v["Name"] at]=SA , v["Shape"] W'u6F-$2 , v["MakeIndex"] E1usxF) , v["Weight"] n]?Yv E , v["StdMode"] Vrzx;V% , v["Index"]) Nl,M
9 local ss = "" |}
;&xI if #v["Values"] > 1 then :#1{c^i%3 for x, y in pairs(v["Values"]) do 0m7ANqE[Z if y["Value"] > 0 then wv>*g:El' local Values = string.format("m_Value=%s,m_ValueID=%s" hJ\IE?+ , y["Value"] 1r;]== , y["Id"]) VliX'.- ss = ss .. Values Gf(hN|X. end z %{Z end u+UtvzUC end 5drc8_fZ result = result .. s1 .. "," .. ss .. "\r\n" htX;"R& end ?pn<lW8d return result O*xC}$OOn end qPGpN0M` >UvLeS2h:y --获取背包是否满 t+7h(?8L function API_GetBagFull() v=e`e68U~ return ssr.IsBagToFull(isTips) mIgc)" end iz!E1(z( ~=9
1K
xf --获取背包百分比 5[}3j1 function API_GetBagEx() PnkJWl<S HW = ssr.GetMetaValueByKey("BW") <0T5W#H`D MAXHW = ssr.GetMetaValueByKey("MAXBW") /~[+' ELL = HW / MAXHW * 100 L)W1bW} return math.ceil(ELL) ivDmPHj{ end g
cDo o2RE (T:OZmEO. --获取背包是否满 XG FjqZr` function API_GetBagFull() |b"
h+ return ssr.IsBagToFull(isTips) P,U$
X+ end ([SrIG> X |C}n]{*| --读取地图ID &HBqweI function API_GetMapID() 5SPhdpIg@[ local tt = ssr.GetCurMapData() 5Z"IM8? return tt.mapID uvR9BL2= end FeOo;|a
uyBmGS2 --读取地图名称 )a"rj5~- function API_GetMapName() "~- H]9 local tt = ssr.GetCurMapData() &AM<H}> return tt.mapName "zFv?ay end ]Hr:|2|. ^*JpdmVhu --获取背包最大数 C_xOk'091 function API_GetMaxBag() pa4,W!t return ssr.GetMaxBag() zY_xJ"/9 end W <.h@Rz+ )c|S)iJ7=z --使用物品 !-%fC
g(B function API_UseItem(itemName) !kCMw%[ local items = ssr.getQuickUseData() o zg%- local item = ssr.getCurBagData() z\64Qpfm for k, v in pairs(items) do r*?rwtFtg if v.Name == itemName then 5@l[!Jl0k ssr.UseItemByIndex(v.Index) ,Vb;2 end =P'33)
\ ) end |m{Q_zAB 8 Z|c!QIU for k, v in pairs(item) do qYpuo
D if v.Name == itemName then [MLJs-* ssr.UseItemByIndex(v.Index) 74f3a|vx/ end 0-Z
sV3I& end Pf,S`Uw; end VGFWF3s 4H
XqRFUD --获取金币数量
/tIR}qK function API_GetMoney(Index) hLF+_{\C| return ssr.GetMoneyCountById(Index) OS|uZ<"Rq3 end &XG k >!u@> function API_MergeTables(t1, t2) BCnf'0q local merged = {} T'YHV}b}vX for key, value in pairs(t1) do WZ}je!82 merged[key] = value Arvxl(R\4 end i>=d7'oR for key, value in pairs(t2) do dLA'cQId merged[key] = value hv "
'DP end 2K >tI9); return merged X( Q*(_ end zx)^!dEMM Qdepzo>E /P_1vQq --获取物品数量 p#-ov-znp function API_GetItemCount(itemName,isBind) lIR0jgP@z local items=ssr.getQuickUseData() J6m`XC local bagData=ssr.getBagData() -anLp8G* items=API_MergeTables(items,bagData) r(UEPGu|~l local bind=isBind or false <(|No3jx local count=0 }m '= _
u for k,v in pairs(items) do 6@0
wKV!D if bind then dFdll3bC --绑定 !r=^aa(\ if v.Name==itemName and v.Bind~=nil then /WIO@c count=count+ v.OverLap \Xy]z
end z^(6>U
? else 2kv%k3Q{ --不绑定 D+$ k if v.Name==itemName and v.Bind==nil then TTNgnP count=count+ v.OverLap a2:Tu end [y^)&L$= end t<`h(RczHI end O_}ZSB8" return count e[`E-br^ end @\~qXz{6J --读取人物坐标 44s
K2
Y>OL2g 6yIl)5/= R<r"jOd] function API_GetMapXY() 2m`4B_g A
local aa = ssr.GetMainPlayerMapPos() F[aow$",+} local aa = string.format("x=%s,y=%s" b0\'JZ , aa.x sy^k:y? , aa.y) 8mjP
2 return aa `i{k^Q end ~&E|;\G ,H{
/@|RW -- 获取角色是否活着 eiLtZQ function API_IsRoleAlive() Bjg 21b
w^ return ssr.IsRoleAlive() 'WqSHb7 end [\9WqHs xP@VK!sc --读取聊天信息 jgiP2k[Xom function API_ChatMsg() !
;Mh5*- local function listcb(msg) ?nm:e.S+? --table )p.+39]{2 ChatTable = msg x,9fO
A end Y`FGD25` ssr.RegisterLUAEvent("OnAddChatItem", "增加聊天消息", listcb) ,v"/3Ff{, if ChatTable.mt == 1 and ChatTable.ChannelId == 3 or ChatTable.ChannelId == 6 then o]NL_SM_ local ChatT = string.format( )g4oUZDF "SendName=%s,SendId=%s,ChannelId=%s,mt=%s,SendTime=%s,Msg=%s" 3t(8uG<rL , ChatTable.SendName 47Y|1
, ChatTable.SendId *
*?mZtF , ChatTable.ChannelId /Vpd*obMB , ChatTable.mt cz_4cMgxu , ChatTable.SendTime -Q@jL{Ue , ChatTable.Msg) ?FRR"; return ChatT Y^dVNC3vd end T7;)HFGeW end M
mg#Vy~ D\Y)E#%, function API_ChatMaa() B3I\= return ssr.GetMaxBag() 0F'75 end 9Ao0$|@b l<<G".? --修理装备 C9-9cdW
H function API_CopyTable(original) UI
~ENG local copy = {} }9C5U>? for key, value in pairs(original) do c%.f|/.k
if type(value) == "table" then -_jV.`t copy[key] = API_CopyTable(value) ;F&wGe else ^H+j;K{5, copy[key] = value @LY 5]og end $,k SR} end Q^Ln`zMe
return copy QN(f8t( end dRZor gar 修衣服 = "0,4" --衣服,头盔 < %Qw
dEO 修武器 = "1" FV/xp}nz 修项链 = "3" T0_9:I`& 修手镯 = "5,6" .}fc*2.' 修戒指 = "7,8" --左戒指 右戒指 ;{|a~e?Y
function API_Repair(npcName, itemPos) (.,E6H|zI local npcId = API_GetNpcIdByName(npcName) }nE#0n local tempData = ssr.getEquipData() $"{V],:T
| local tobeRepair = {} ;>=hQC{f> for k, v in pairs(tempData) do Q:+Y-&||" if string.find(itemPos, tostring(v["Where"])) and v["Dura"] ~= v["DuraMax"] then </y V local tmp = { aMTY{ Name = v.Name, )!dELS\ix MakeIndex = v.MakeIndex, FH8?W|
G Where = v.Where }\u~He% } Ja-D}|; table.insert(tobeRepair, tmp) @];#4O ssr.TakeOffEquipRequest(v) MW9B
-x end 81a&99
k# end 4~a0
--脱完 开始修理 o,) p *glO for k, v in pairs(tobeRepair) do cFLu+4.jsG local Name = v.Name F *;
+-e local MakeIndex = v.MakeIndex '$)Wp_ local networkCtl = global.networkCtl |xzqYu?o networkCtl:SendMsg(1023, npcId, MakeIndex, 0, 0, Name, string.len(Name)) Coq0Kzhsab end 2W
pe(
\( --开始穿 9\)NFZ3Mz local function ToDress() %9mCgHQ9 for k, v in pairs(tobeRepair) do OxF\Hm)( ssr.TakeOnEquipRequest(v, v["Where"]) pb%#`2" end #)R;6"
end i/xPO local scheduleID = ssr.PerformWithDelayGlobal(ToDress, 1) &3{:h API_CloseNpcTalk() nVG\*#*]| end z>j%-3_1 KHr8\qLH _|8"&*T^ +bm2vIh$ 药店={0} f.jAJ; N> 首饰店={19,20,21,22,23,24,26} JXj` 衣服店={10,11,15,16,27,28,62,64} VhSKtD1 武器店={5,6} zi>f436- 杂货店={3,25,2,30,31} 62EJ# q[ 铁匠铺={43} 9r1pdG_C@ 书店={4} ?vRz}hiy --检测背包是否有指定类型物品 tBBN62^X function API_IsNeedToStore(StdModes)
(I.uQP~H local function IsNeed(StdMode) qe(X5?#; local bagData=ssr.getBagData() D .Cm& for k,v in pairs(bagData) do lO,
2 if v.StdMode==StdMode then z,rWj][P return true #`"' end N5/TV%u end 8Z3+S)6 local EquipProxy = global.Facade:retrieveProxy(global.ProxyTable.Equip) y8+?:=N. local equip = EquipProxy:GetEquipData() ?5mVC]W?] for k,v in pairs(equip) do =X&h5;x' if v.StdMode==StdMode then `?JrC3 if tonumber(v.Dura)/v.DuraMax < 0.9 then C,PCU <q return true Rl5}W\& end M/V
>25` end SO p%{b end <Mc:Cg8> return false 1rPeh{SZ end n^Z?u9VR bT{P1nUu for k,v in pairs(StdModes) do \(
(>i7C if IsNeed(v) then =As'vt
0 return true 5!nZvv end YSrFHVq end M~662]Ekk return false %aw/Y5 end q=?"0i&V '&<-,1^L &I(|aZx?J --范围内怪物个数 bool型返回distance Kg](kP function API_范围内怪物个数(distance, count) R:.7c(s local proxyUtils = requireProxy("proxyUtils") s?Q`#qD local mainPlayerID = global.gamePlayerController:GetMainPlayerID() ]}v`#-Px( return proxyUtils.checkIsEnoughEnemy(mainPlayerID, count, distance) rW\~s TH end WZO#(eO` --关闭NPC框 r LfS9H function API_CloseNpcTalk() bkOm/8k|4 global.Facade:sendNotification(global.NoticeTable.Layer_NPC_Talk_Close) 5 #kvb$97 global.Facade:sendNotification(global.NoticeTable.GuideEventEnded, {name = "GUIDE_END_NPC_TALK_LAYER_CLOSED"}) }4
$EN end ?tA-`\E --无怪随机 Y" l!3^ function API_无怪随机() _)Qt,$ local list = global.monsterManager.mMonstersInCurrViewField ;?:,L local actors = {} D[tGbk for k, v in pairs(list) do d'3'{C|kk local actor = {} )i!
)Tv actor["mID"] = v:GetID() 9q8
rf\& table.insert(actors, actor); ]lO$oO end vY;Lc if #actors < 1 then {Zseu$c
API_UseItem("随机传送石") _^'k_a local aa = API_GetItemCount(1078) -x_iqrB if aa < 1 then ))KsQJ"V ssr.BuyStoreItemsById(2, 1) +$
-#V end ^cAJCbp7 end Og*1pvN< return #actors #&8Opo( end _SFD}w3b$ e1/|PgT(KM --API_周围怪物数量 L0_=R;.< function API_周围怪物数量() 3p4bOT5 local list = global.monsterManager.mMonstersInCurrViewField &0C!P=-p local actors = {} 8v6rS-iHP for k, v in pairs(list) do gRqz8UI local actor = {} ZR QPOy actor["mID"] = v:GetID() W@S9}+wl* table.insert(actors, actor); [&`>&u@MK end ah<f&2f return #actors blPC"3}3Vd end x4( fW\ $OhL
95}7 --API_周围人物数量 参数是 白名单 eD(a
+El} function API_视野内敌人(Name, lv) "Q
J-IRt& local list = global.playerManager.mPlayersInCurrViewField
/6.b>|zF local myName = global.gamePlayerController:GetMainPlayer():GetName() O~Fk0}- local actors = {} -"nYCF local names = myName .. "," .. Name L"-&B$B: for k, v in pairs(list) do C4cg,>P7 local actor = {} z`2d(KE? actor["mID"] = v:GetID() a|5
3E<5X actor["mName"] = v:GetName() Z"^@B2v actor["mLv"] = (v.GetLevel and { v:GetLevel() } or { 0 })[1] yTvK)4& --local myName=global.gamePlayerController:GetMainPlayer():GetName() !'MD8 if not string.find(names, actor["mName"]) and tonumber(actor["mLv"]) > lv then zF$wz1
% table.insert(actors, actor); 1e+?O7/ end [*<&]^ end gjWH
}(K return #actors W P&zF$ end {2Ibd i atAA[~ +~v(*s C --自动捡
l85"C API_NoBodyPickEnable=true w#$k$T)
!58JK f --捡取物品白名单 sg2C_]i,H API_MyPlayerNames = "我不是药神," NEH$&%OV? j%h
Y0
--全图捡 sP
|i' API_MapPickEnable = true OE"Bb --自动存 ?!66yn API_InStoreEnable=false ou-
;k
} API_InStoreItems="" Qw-qcG --自动扔 Dw[Q,SE API_ItemDropEnable=false qTGy\i --自动用 K\ ]r API_ItemKeepCountEnable=true Uwk|M?94 --自动领取 c2f$:XiM API_GetMailItemEnable=false F{+`F<r --自动买回城石 OY#_0p)i API_BuyStoneEnable=false F&~v
D API_RecoveryItemMaxMoney=1000000 Ye6O!,R --地图 A~>=l= API_PreMapName="盟重省" u5ygbCm --开关 ~k(Ez pn# API_TimerEnable=true mx4*zj 5b'S~Qj#r$ API_TimerEnable1s=true 463dLEd API_TimerEnable10s=true k}.
nH"AQ --1S定时器 d!:SoZ function API_AutoSchedule1s() *)1z-rH` if GET_GAME_STATE() == "world" and API_TimerEnable1s then IA4(^-9 --自己设置的自动捡 4#9-Z6kOk --API_PickItems() #*/h*GNMs --系统自动捡 B" z5j
if API_NoBodyPickEnable then Uy:.m if API_IsInCurrViewField(API_MyPlayerNames) then
}+J@;: API_OpenGroupPick(false) k#&SWp= --release_print("来人,关自动捡") AF}"
--API_RunAway() --逃跑 *ZGN!0/ --API_UseItem3Second("回城石") 0}V'\=F454 else do,X{\ API_OpenGroupPick(true) ;p ('cwU% API_PickItems() +bnw,B>
< --release_print("无人,开自动捡") aB)DX end '
^^K#f8 end zJ`(L
nV end 4Ccb!? end 5XHkRcESZ --10s定时器 1%`:8 function API_AutoSchedule10s() Y ckbc6F if GET_GAME_STATE()=="world" and API_TimerEnable then L /> GYx --自动扔 m~eWQ_a]C@ if API_ItemDropEnable then bl<7[J. API_DropItemKeep("回城卷",2) xn8B|axB end oUSG`g^P(M gEsR-A!m --自动组队 /f<(K-o] if ssr.GetCurMapData().mapName == "石墓二层" or ssr.GetCurMapData().mapName == "石墓三层" or ssr.GetCurMapData().mapName == "地牢一层西" then i#=X#_
+El API_InviteJoinTeam() zY+Et.lg]^ API_TeamApplyUpdate() --允许所有邀请 ]Dg0@Y end E}=NZqOB! -pu\p-Z --自动用消耗品 CK</2 w+ if API_ItemKeepCountEnable then >JOvg*a?" if API_GetItemCount("强效金创药") > 1 then Z(M)2 API_UseItem("强效金创药") !X 8R end UGt7iT<`8 if API_GetItemCount("强效魔法药") > 1 then BaAb4{ API_UseItem("强效魔法药") f4_G[?9, end
AUde_1hi if API_GetItemCount("太阳水") > 1 then G |^X:+
API_UseItem("太阳水") +GU16+w~E end UD`Z;F if API_GetItemCount("魔法药(中量)") > 7 then Kj
8
W API_UseItem("魔法药(中量)") 5#\p>}[HG end *,*qv^ if API_GetItemCount("魔法药(中量)") < 1 then E5{)d~q API_UseItem("魔法药(中)包") z]AS@}wWqg end /
nFw if API_GetItemCount("金创药(中量)") > 1 then
%
cdP* API_UseItem("金创药(中量)") jt--w"|-r end #>B1$(@ if API_GetItemCount("护身符(大)") < 1 then
[i1D~rCcn API_UseItem("回城卷") e&4u^'+K end nn:pf1 if API_GetItemCount("魔法药(中量)") < 1 and SL:GetMetaValue("MAP_NAME") ~= "盟重省" and API_GetItemCount("魔法药(中)包") < 1 then ~[q:y|3b API_UseItem("回城卷") Yj\yO(o/ end qL.Y_,[[ if SL:GetMetaValue("HP") < 30 and not SL:GetMetaValue("IN_SAFE_AREA") then ^)l@7XxD API_UseItem("回城卷") {fv8S;|u end
(Nb1R"J` end >L`mF_WG K<JP9t6Qd if API_GetMailItemEnable then b'5pQ2Mq global.networkCtl:SendMsg(global.MsgType.MSG_CS_EMAIL_GET_REQUEST, 2) 'LLx$y.Ei[ global.Facade:sendNotification(global.NoticeTable.Layer_Enter_Current) _PXo'*j end guXpHF= end {OrE1WHB end ]?$
y} Aq'E:/ --定时器 5yi q# function API_TimerStart() )#~fS28j --1S定时开关 N|2 if API_AutoScheduleID1s == nil then %esZ}U API_AutoScheduleID1s = ssr.Schedule(API_AutoSchedule1s, 1) }zxh:"#K else jdf)bO(9# ssr.UnSchedule(API_AutoScheduleID1s) <9tG_ API_AutoScheduleID1s = ssr.Schedule(API_AutoSchedule1s, 1) mm<iT59 end Q]UYG( --10S定时开关 (kyo?3 if API_AutoScheduleID10s == nil then RyWOiQk; API_AutoScheduleID10s = ssr.Schedule(API_AutoSchedule10s, 10) Yj/nzTVJ[ else g*r;( H>e ssr.UnSchedule(API_AutoScheduleID10s) d|+jCTKS API_AutoScheduleID10s = ssr.Schedule(API_AutoSchedule10s, 10) !BuJC$ end ?Hxgx end z2V8NUn function API_IsInCurrViewField(names, level) HCkqh4 local lv = level or 0 igj@{FN local nameList = names or "" 6_K#,_oZ local list = global.playerManager.mPlayersInCurrViewField PVc|y. local actors = {} ]mo<qWRc>p for k, v in pairs(list) do 59BHGvaF local actor = {} ps
y(]Pf actor["mID"] = v:GetID() SJ7=<y}[d actor["mName"] = v:GetName() <?Izfl6 actor["mLv"] = (v.GetLevel and { v:GetLevel() } or { 0 })[1] ={@ @`yP^$ if not string.find(names, actor["mName"]) and tonumber(actor["mLv"]) > lv then @<yc .
> table.insert(actors, actor); x0$:"68PW end dS_)ll.6z end k:)u7A+ if #actors > 0 then ^-*Tn return true QN&^LaB<T else U]EuDNkO{ return false O[p^lr(B7 end gJ8 c]2c end -U;LiO;N &|"I0|tJ --打开组捡 cBR8HkP~ function API_OpenGroupPick(isOpen) wK`ieHmp local GameSettingProxy = global.Facade:retrieveProxy(global.ProxyTable.GameSettingProxy) `Mp7}) local count = 0 Bp{`%86SE for key, value in pairs(GameSettingProxy._pickConfig) do B%:9P count = count + 1 YGV#. end 3=|2Gs?ut local function SetGroup(pickgroup) y&=19A# for i = 1, count do %<#3_}"T| GameSettingProxy:SetPickGroupValue(i, pickgroup) o]jP3
$t; end IetGg{h. end %R*vSRG/U if isOpen then jP.b oj_u* local pickgroup = { 1, 1, 1 } @&xaaqQ- SetGroup(pickgroup) Il`k]X M else "mK i$FV local pickgroup = { 1, 1, 0 } p't:bR SetGroup(pickgroup) N?{1'=Om end \ j X N*A end |-Esc|J( =*:_swd