过去两年的时间里冒冒的时间占了一大半
和朋友们从国际服玩到日服再到东南亚服再到私服
肝起来可以说是一天48小时都完全不够用,可谓是精神鸦片。
好在现在弃坑了回归正常人的生活,将自己以前写的冒冒脚本的一些渣代码拿出来分享分享,以供纪念。
0x01 按键精灵阶段
在国际服禁按键精灵之前,一直使用方便快捷的按键精灵(事实证明越方便用的人越多,直接引起官方注意了)。
慢慢就形成了一套脚本,图方便直接利用的大漠图色模块,充了100余额现在才花了几毛钱hhh。
整体逻辑很简单,但是细节逻辑多,最后代码写下来接近3000行也就几个图
整体下来感觉按键精灵还是有比较明显的缺点
- 多线程不稳定,容易崩溃。
- 架构简单,容易被检测。
- 语法低级,很多goto,写起来不太舒服。
- 面向过程,不分对象,写起来最后比较乱,管理起来很麻烦。
- IDE都不能识别Q语言,支持太差。全程写代码sublime用的C语法的高亮,很憋屈。
I.前期准备
Global hwnd
//拿句柄
Call GetHandle()
//注册大漠
Call RegDM()
//绑定窗口
Call BindMS()
//测试函数 运行脚本函数即可 这里以获取角色位置为例
Call GetLocationDBG()
主要就是获取窗口句柄
Sub GetHandle()
hwnd = Plugin.Window.Find("MapleStoryClass", "MapleStory")
If hwnd = 0 Then
MessageBox "Nothing"
EndScript
Else
TracePrint "Hwnd:" & hwnd
End If
End Sub
然后注册插件
Sub RegDM()
need_ver = "7.2111"
PutAttachment "c:\test_game","*.*"
PutAttachment ".\Plugin" ,"RegDll.dll"
Call Plugin.RegDll.Reg("c:\test_game\dm.dll")
// 这里判断是否注册成功
set dm = createobject("dm.dmsoft")
ver = dm.Ver()
//TracePrint "dm_ver:"&ver
if ver <> need_ver then
// 先释放先前创建的dm
set dm = nothing
// 再尝试用regsvr32 来注册. 这里必须使用绝对路径。以免有别人把dm.dll释放在系统目录.造成版本错误.
set ws=createobject("Wscript.Shell")
ws.run "regsvr32 c:\test_game\dm.dll /s"
set ws=nothing
Delay 1500
// 再判断插件是否注册成功
set dm = createobject("dm.dmsoft")
ver = dm.Ver()
if ver <> need_ver then
// 这时,已经确认插件注册失败了。 弹出一些调试信息,以供分析.
messagebox "插件版本错误,当前使用的版本是:"&ver&",插件所在目录是:"&dm.GetBasePath()
messagebox "请关闭程序,重新打开本程序再尝试"
endscript
end if
End If
// 收费注册开始,简单游作者也必须要加这一段. 不会重复扣费.
// ok,这里已经确认插件注册成功,并且创建了对象,下面开始注册收费服务.
// 当然这里也可以使用高级的RegEx函数.
dm_ret = dm.Reg("abcdefg","0001") // abcdefg是你的注册码. 在大漠插件网站后台可以直接获取.
if dm_ret <> 1 then
messagebox "注册失败,返回值是:"&dm_ret
endscript
end if
// 收费注册结束<<<<<<<<<<<<<<<<
dm.SetPath "c:\test_game"
End Sub
找到合适的绑定窗口的方法,重点在于测试一种能够后台模拟的模式,
Sub BindMS()
Delay 200
//dm.SetWindowState hwnd, 12
//dm_ret = dm.SetSimMode(1)
//TracePrint "SetSimMode:"&dm_ret
//鸡肋前台
dm_ret = dm.BindWindowEx(hwnd,"normal","normal","normal",0,0)
//键鼠后台举例 具体模式参数需要自己摸索
dm_ret = dm.BindWindowEx(hwnd,"gdi","normal","dx.keypad.input.lock.api|dx.keypad.state.api|dx.keypad.api","dx.public.active.api|dx.public.active.message|dx.public.hide.dll|dx.public.anti.api|dx.public.km.protect",0)
dm.SetWindowState hwnd,1
//dm_ret = dm.BindWindowEx(hwnd,"gdi","normal","dx.keypad.input.lock.api|dx.keypad.state.api|dx.keypad.api","dx.public.active.api|dx.public.active.message|dx.public.hide.dll|dx.public.anti.api|dx.public.km.protect",0)
//dm_ret = dm.BindWindowEx(hwnd," dx.graphic.3d","dx.mouse.position.lock.api|dx.mouse.clip.lock.api|dx.mouse.input.lock.api|dx.mouse.state.api|dx.mouse.api|dx.mouse.cursor","dx.keypad.input.lock.api|dx.keypad.state.api|dx.keypad.api","dx.public.active.api|dx.public.active.message|dx.keypad.input.lock.api|dx.keypad.state.api|dx.keypad.api|dx.keypad.raw.input|dx.public.down.cpu",0)
//dm_ret = dm.BindWindowEx(hwnd,"gdi2","normal","dx.keypad.state.api","dx.public.active.api|dx.public.active.message",0)
//dm_ret = dm.BindWindowEx(hwnd,"dx.graphic.3d","normal","dx.keypad.state.api","dx.public.active.api|dx.public.active.message|dx.public.hide.dll|dx.public.active.api2|dx.public.graphic.protect|dx.public.km.protect|dx.public.prevent.block|dx.public.ori.proc|dx.public.focus.message|dx.public.inject.super|dx.public.memory",0)
TracePrint "dm_bindWindow:"&dm_ret
If dm_ret = 0 Then
EndScript
End If
dm.EnableRealKeypad 1
//dm.EnableRealMouse 1, 20, 30
//dm.EnableKeypadMsg 1
End Sub
II.执行功能脚本
冒冒多为刷图脚本,需要先自己玩好图色,截好关键的图片或者关键点位颜色用于标识页面或者情况,再用代码来判断进行逻辑执行。以获取位置为例,HuangDian.bmp
就是我的角色图标,通过找黄点的坐标来判断位置。
Sub GetLocationDBG()
dm_ret = dm.FindPicEx(0,0,500,300,"HuangDian.bmp","020202",0.9,0)
If len(dm_ret) > 0 Then
ss = split(dm_ret,"|")
index = 0
sss = split(ss(index),",")
id = int(sss(0))
x = int(sss(1))
y = int(sss(2))
TracePrint Time & " X:"& x & " Y:" & y
Else
TracePrint "Can't Find My Location"
End If
End Sub
刷图期间追求模式多变、随机化,扰乱模式识别规避行为检测,我还没开始加嘻嘻,随便用一段来举例吧。
Sub BB2_LOOP()
hTread_Main = GetThreadID()
TracePrint "hTread_Main:"&hTread_Main
hThread_MHHCheck = BeginThread(MHHCheck)
TracePrint "hThread_MHHCheck:"&hThread_MHHCheck
Do
Call GetLocation()
Call CheckBUFF_kn()
Call kn_V4IsReady()
if bool = 1 then
Call kn_V4()
Endif
Call CheckLocationXKannaAtt(134)
Call kn_Lucid()
Call CheckLocationXKanna(142)
//上台
//防经验球
Call zhuagou()
dm.KeyDownChar "right"
delay 20
Do
Call GetLocation()
dm.KeyPressChar "s"
delay 10
if y = 82 Then
dm.KeyUpChar "right"
delay 50
Goto ShangtaiEnd
Endif
if counter = 50 then
dm.KeyUpChar "right"
Call CheckLocationXKanna(142)
Call zhuagou()
dm.KeyDownChar "right"
delay 20
Endif
//Call KannaNormalAttack(1)
counter = counter+1
delay 50
Loop
Rem ShangtaiEnd
//鬼神钱
CheckLocationXKanna(165)
delay 1000
Call CheckLocationXKanna(149)
Call kn_Kishin()
Call CheckLocationXKanna(94)
Call KannaTele(92)
delay 300
Call CheckLocationXKannaAtt(68)
Call TurnLeft()
Call kn_Aniki()
//大哥捡钱
Call KannaTele(74)
Call KannaNormalAttackNoCool(1)
Call CheckLocationXKanna(26)
delay 800
Call CheckLocationXKanna(68)
//到中层
//Call KannaTele(92)
Call KannaTele(104)
Call KannaNormalAttack(1)
Call CheckLocationXKanna(48)
Call CheckLocationXKannaAtt(123)
delay 800
Call CheckFuwen()
//建完money首次检查lcd 鬼神
Call kn_LucidIsReady()
if bool = 1 then
Call CheckLocationXKanna(134)
Call CheckLocationYKannaTele(124)
Call kn_Lucid()
Call CheckLocationXKanna(142)
Call zhuagou()
dm.KeyDownChar "right"
delay 20
Do
Call GetLocation()
dm.KeyPressChar "s"
delay 10
if y = 82 Then
dm.KeyUpChar "right"
delay 50
Goto ShangtaiEnd2
Endif
if counter = 30 then
dm.KeyUpChar "right"
Call CheckLocationXKanna(142)
Call zhuagou()
delay 200
dm.KeyDownChar "right"
delay 20
Endif
//Call KannaNormalAttack(1)
counter = counter+1
delay 50
Loop
Rem ShangtaiEnd2
Call CheckLocationXKanna(149)
Call kn_Kishin()
Endif
TracePrint "Before:"&Time
//开始大循环
For 4
TracePrint "1:"&Time
//检查中间位置
Call CheckLocationXKanna(81)
Call KannaTele(104)
//检查大哥
Call kn_AnikiIsOff()
if bool = 1 Then
//开大哥
Call TurnLeft()
Call KannaNormalAttack(1)
Call TurnRight()
Call KannaNormalAttack(1)
Call kn_Duwu()
Call KannaTele(92)
Call CheckLocationXKannaAtt(68)
Call TurnLeft()
Call kn_Aniki()
Call KannaTele(104)
Call CheckLocationXKannaAtt(81)
bool = 0
Endif
//检查MP
Call kn_huimpIsReady()
if bool = 1 then
Call kn_huimp()
Endif
Call TurnLeft()
Call KannaNormalAttack(1)
Call TurnRight()
Call KannaNormalAttack(1)
Call kn_Duwu()
Call KannaTele(124)
Call kn_Tiangou()
Call KannaNormalAttack(1)
Call CheckLocationXKanna(81)
Call KannaTele(104)
//检查
Call kn_huimpIsReady()
if bool = 1 then
Call kn_huimp()
Endif
Call TurnLeft()
Call KannaNormalAttack(1)
Call TurnRight()
Call KannaNormalAttack(1)
Call kn_Duwu()
Call KannaTele(124)
Call kn_Tiangou2()
Call KannaNormalAttack(1)
//检查lcd 鬼神
Call kn_LucidIsReady()
if bool = 1 then
Call CheckLocationXKannaAtt(134)
Call kn_Lucid()
Call CheckLocationXKanna(142)
Call zhuagou()
dm.KeyDownChar "right"
delay 20
Do
Call GetLocation()
dm.KeyPressChar "s"
delay 10
if y = 82 Then
dm.KeyUpChar "right"
delay 50
Goto ShangtaiEnd3
Endif
if counter = 50 then
dm.KeyUpChar "right"
Call CheckLocationXKanna(142)
Call zhuagou()
dm.KeyDownChar "right"
delay 20
Endif
//Call KannaNormalAttack(1)
counter = counter+1
delay 50
Loop
Rem ShangtaiEnd3
Call CheckLocationXKanna(149)
Call kn_Kishin()
Call CheckLocationXKanna(106)
delay 200
Call KannaNormalAttack(1)
Call LeftTeleport(1)
Endif
TracePrint "2:"&Time
Next
//准备捡钱
TracePrint "After:"&Time
Call kn_dabai()
Call KannaTele(124)
Call CheckLocationXKannaAtt(43)
//灵石
Call kn_Zhanguo()
Call kn_xuenv()
Call kn_huimp()
Call kn_LingshiIsReady()
if bool = 1 then
Call kn_Lingshi()
//辟邪
delay 800
dm.KeyDownChar "shift"
delay 100
dm.KeyDownChar "right"
Do
Call GetLocation()
if x>=134 then
dm.KeyUpChar "right"
delay 20
Goto BixieEnd
Endif
delay 20
Loop
Rem BixieEnd
dm.KeyUpChar "shift"
delay 200
Else
Call zhizhu()
Endif
Loop
End Sub
0x02 易语言阶段
随着按键精灵的落幕,大漠插件很快也受到注意。于是我考虑过用python写,但图形界面麻烦。想到以后做游戏安全,以后可能会写写挂啥的,于是转向了写挂神器易语言,顺便将其学起来。这次用的是易语言加乐玩插件,也是来来回回用了几个服。还弄了个傻吊页面方便增删功能。
易语言里说是面对对象,可这对象真没做好,和C++相比还是差多了。
但总体来说比按键精灵体验好多了。
印象比较深的坑是图色一定要每个线程单独起一个对象,不然跨线程访问使用很容易崩溃。
I.前期准备
同上
.版本 2
.支持库 spec
.子程序 GetLocation
.参数 index, 整数型
.参数 x, 整数型, 参考
.参数 y, 整数型, 参考
.局部变量 ts_ret, 逻辑型
ts_ret = ts [index].图色_找图 (0, 0, 500, 300, “HuangDian.bmp”, “020202”, 0.9, 0, x, y, , , , , , , )
.如果真 (ts_ret = 假)
调试输出 (“Can't Find My Location”)
播放音乐 (“C:\CCC\over.wav”, 假)
.如果真结束
.子程序 GetLocationDBG, , 公开
.参数 index, 整数型
.局部变量 ts_ret, 逻辑型
.局部变量 x_test, 整数型
.局部变量 y_test, 整数型
ts_ret = ts [index].图色_找图 (0, 0, 500, 300, “HuangDian.bmp”, “020202”, 0.9, 0, x_test, y_test, , , , , , , )
.如果 (ts_ret = 假)
调试输出 (“Can't Find My Location”)
.否则
调试输出 (“x:” + 到文本 (x_test) + “y” + 到文本 (y_test))
.版本 2
.支持库 spec
.子程序 bindMS, 逻辑型, 公开
.参数 index, 整数型
.局部变量 ret, 逻辑型
ts [index].基本_置全局路径 (“C:\CCC”)
延迟 (200)
ret = ts [index].后台_绑定 (hwnd_MS, 1, 2, 2, 1 + 2 + 8 + 512, 1)
' ret = ts [index].后台_绑定 (-1, , , , , )
.如果 (ret = 假)
调试输出 (“绑定失败”)
返回 (假)
.否则
调试输出 (“绑定成功”)
返回 (真)
II.执行功能脚本
同上
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 _Start_被单击
.局部变量 用户选择, 整数型
用户选择 = ScriptControl.现行选中项
LOG.加入文本 (“用户选择脚本:” + ScriptControl.取项目文本 (用户选择) + #换行符)
.判断开始 (用户选择 = 0) ' 独立
启动脚本 (&脚本_独立, , hThread_nowSC)
.判断 (用户选择 = 1) ' 挂花
启动脚本 (&脚本_挂花, , hThread_nowSC)
.判断 (用户选择 = 2) ' 爆破CER2
启动脚本 (&脚本_爆破CER2, , hThread_nowSC)
.判断 (用户选择 = 3) ' 按键位置
启动脚本 (&脚本_按住键位, 到整数 (脚本参数.内容), hThread_nowSC)
.判断 (用户选择 = 4) ' 跳过剧情
启动脚本 (&脚本_按住键位, 18, hThread_nowSC)
.判断 (用户选择 = 5) ' kn_ur6
启动脚本 (&脚本_knUR6, , hThread_nowSC)
.判断 (用户选择 = 6) ' 爆破5x
启动脚本 (&脚本_爆破5x, , hThread_nowSC)
.判断 (用户选择 = 7) ' 爆破世界尽头1-5
启动脚本 (&脚本_爆破世界尽头15, , hThread_nowSC)
.判断 (用户选择 = 8) ' 爆破海2
启动脚本 (&脚本_爆破海2, , hThread_nowSC)
.判断 (用户选择 = 9) ' 魔方
启动脚本 (&脚本_Cube, , hThread_nowSC)
.判断 (用户选择 = 10) ' 死神4岛
启动脚本 (&脚本_死神四岛, , hThread_nowSC)
.默认
.判断结束
Start.禁止 = 真
Stop.禁止 = 假
Pause.禁止 = 假
Continue.禁止 = 假
.版本 2
.支持库 spec
.子程序 启动脚本
.参数 对应脚本, 子程序指针
.参数 函数参数, 整数型, 可空
.参数 赋值句柄, , 参考
GetHandleMS ()
调试输出 (“启动脚本:” + 到文本 (函数参数))
线程_创建 (对应脚本, 函数参数, 赋值句柄, , , , , , , )
SetProcessAffinityMask (-1, 1)
线程_置CPU亲和性 (赋值句柄, 1)
调试输出 (“线程运行开始 hThread:” + 到文本 (赋值句柄))
LOG.加入文本 (“线程运行开始 hThread:” + 到文本 (赋值句柄) + #换行符)
.如果真 (选择框_MHH.选中 = 真)
线程_创建 (&线程_CheckMHH, , hThread_MHHCheck, , , , , , , )
.如果真结束
.如果真 (选择框_HP.选中 = 真)
线程_创建 (&线程_CheckHP, , hThread_HPCheck, , , , , , , )
.如果真结束
.如果真 (选择框_MP.选中 = 真)
线程_创建 (&线程_CheckMP, , hThread_MPCheck, , , , , , , )
.如果真结束
.如果真 (选择框_Detection.选中 = 真)
线程_创建 (&线程_CheckDetection, , hThread_CheckDetection, , , , , , , )
.如果真结束
.如果真 (选择框_People.选中 = 真)
线程_创建 (&线程_CheckPeople, , hThread_CheckPeople, , , , , , , )
以日服挂独立为例
.版本 2
.支持库 spec
.子程序 脚本_独立
.局部变量 x, 整数型
.局部变量 y, 整数型
.局部变量 counter1, 整数型
.局部变量 counter2, 整数型
bindMS (#主线)
' 线程_创建 (&Check_MHH, , hThread_MHHCheck, , , , , , , )
' 调试输出 (“MHH线程:” + 到文本 (hThread_MHHCheck))
kn_CheckBUFF (#主线)
kn_Kishin (#主线)
counter1 = 0
counter2 = 0
GetLocation (#主线, x, y)
.判断循环首 (真)
kn_x轴移动 (#主线, x)
' kn_F1 (#主线)
.如果真 (counter1 = 2)
' TurnLeft (#主线)
' kn_NormalAttack (#主线, 1)
' TurnRight (#主线)
' kn_NormalAttack (#主线, 1)
counter1 = 0
.如果真结束
.如果真 (counter2 = 60)
kn_CheckBUFF (#主线)
kn_Kishin (#主线)
FeedPet (#主线)
counter2 = 0
.如果真结束
延迟 (1000)
counter1 = counter1 + 1
counter2 = counter2 + 1
.判断循环尾 ()
III.多线程
1.线程功能
都是自己写的一些额外的功能,按需自己扩充,以测谎为例,别的就不展示了。
检测是否在测谎
.版本 2 .支持库 spec .子程序 线程_CheckDetection .局部变量 ts_ret, 逻辑型 bindMS (#测谎) ts [4].文字_置字库 (0, “C:\CCC\mytest.txt”, ) 线程_置CPU亲和性 (线程_取当前句柄 (), ) .判断循环首 (真) ' 普通测谎 ts_ret = ts [4].图色_找图 (6, 20, 1270, 688, “LieTestNormal.bmp”, “000000”, 0.8, 0, , , , , , , , , ) .如果 (ts_ret = 真) 调试输出 (“LieTestNormal shitcoming!!!!!!!”) 播放音乐 (“C:\CCC\over.wav”, 假) .否则 ' 调试输出 (“shitnotcoming!!!!!!!”) .如果结束 ts_ret = ts [4].文字_找字 (6, 20, 1270, 688, “Type in what you see”, “BEAD21-202020|869E76-202020|AEAC54-202020|B6AC43-202020”, 0.5, , , , , , , , , ) .如果 (ts_ret = 真) 调试输出 (“Type shitcoming!!!!!!!”) ' ts [4].图色_截图到文件 (t_x, t_y, t_x + 100, t_y + 100, “SCREEN.BMP”, ) 播放音乐 (“C:\CCC\over.wav”, 假) .否则 ' 调试输出 (“shitnotcoming!!!!!!!”) .如果结束 ts_ret = ts [4].文字_找字 (6, 20, 1270, 688, “ToEnter”, “EABC27-757575”, 0.5, , , , , , , , , ) .如果 (ts_ret = 真) 调试输出 (“ToEnter shitcoming!!!!!!!”) 播放音乐 (“C:\CCC\over.wav”, 假) .否则 ' 调试输出 (“shitnotcoming!!!!!!!”) .如果结束 ts_ret = ts [4].文字_找字 (6, 20, 1270, 688, “FirstBold”, “DBB76C-757575”, 0.6, , , , , , , , , ) .如果 (ts_ret = 真) 调试输出 (“FirstBold shitcoming!!!!!!!”) 播放音乐 (“C:\CCC\over.wav”, 假) .否则 ' 调试输出 (“shitnotcoming!!!!!!!”) .如果结束 ' 蘑菇 ts_ret = ts [4].图色_找图 (6, 20, 1270, 688, “MushroomBlue.bmp|MushroomGrey.bmp”, “000000”, 0.6, 0, , , , , , , , , ) .如果 (ts_ret = 真) 调试输出 (“Mushroom shitcoming!!!!!!!”) 播放音乐 (“C:\CCC\over.wav”, 假) .否则 ' 调试输出 (“shitnotcoming!!!!!!!”) .如果结束 ts_ret = ts [4].图色_找图 (6, 20, 1281, 721, “MushroomPrincess.bmp”, “000000”, 0.4, 0, , , , , , , , , ) .如果 (ts_ret = 真) 调试输出 (“MushroomPrincess shitcoming!!!!!!!”) 播放音乐 (“C:\CCC\over.wav”, 假) .否则 ' 调试输出 (“shitnotcoming!!!!!!!”) .如果结束 延迟 (2500) .判断循环尾 ()
检测是否有人来图里
检测某个BUFF是否没了/可以开了
检测HP/MP是否健康
…
2.线程管理
定义全局变量记录对象或句柄
在解绑时进行释放
.版本 2
.支持库 spec
.子程序 UnbindMS, , 公开
.局部变量 ret, 逻辑型
处理MS线程 ()
ts [1].后台_强制解绑 (hwnd_MS)
ts [2].后台_强制解绑 (hwnd_MS)
ts [3].后台_强制解绑 (hwnd_MS)
ts [4].后台_强制解绑 (hwnd_MS)
ts [5].后台_强制解绑 (hwnd_MS)
ts [6].后台_强制解绑 (hwnd_MS)
' 逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑逻辑
.子程序 处理MS线程
.局部变量 ret, 逻辑型
.如果真 (hThread_MHHCheck ≠ 0)
ret = 线程_挂起 (hThread_MHHCheck)
调试输出 (“hThread_MHHCheck:” + 到文本 (hThread_MHHCheck) + “ 挂起结果” + 到文本 (ret))
ret = 线程_强制结束 (hThread_MHHCheck)
调试输出 (“hThread_MHHCheck:” + 到文本 (hThread_MHHCheck) + “ 结束结果” + 到文本 (ret))
.如果真结束
.如果真 (hThread_nowSC ≠ 0)
ret = 线程_挂起 (hThread_nowSC)
调试输出 (“hThread_nowSC:” + 到文本 (hThread_nowSC) + “ 挂起结果” + 到文本 (ret))
ret = 线程_强制结束 (hThread_nowSC)
调试输出 (“hThread_nowSC:” + 到文本 (hThread_nowSC) + “ 销毁结果” + 到文本 (ret))
.如果真结束
.如果真 (hThread_HPCheck ≠ 0)
ret = 线程_挂起 (hThread_HPCheck)
调试输出 (“hThread_HPCheck:” + 到文本 (hThread_HPCheck) + “ 挂起结果” + 到文本 (ret))
ret = 线程_强制结束 (hThread_HPCheck)
调试输出 (“hThread_HPCheck:” + 到文本 (hThread_HPCheck) + “ 销毁结果” + 到文本 (ret))
.如果真结束
.如果真 (hThread_CheckDetection ≠ 0)
ret = 线程_挂起 (hThread_CheckDetection)
调试输出 (“hThread_CheckDetection:” + 到文本 (hThread_CheckDetection) + “ 挂起结果” + 到文本 (ret))
ret = 线程_强制结束 (hThread_CheckDetection)
调试输出 (“hThread_CheckDetection:” + 到文本 (hThread_CheckDetection) + “ 销毁结果” + 到文本 (ret))
.如果真结束
.如果真 (hThread_CheckDetection ≠ 0)
ret = 线程_挂起 (hThread_CheckDetection)
调试输出 (“hThread_CheckDetection:” + 到文本 (hThread_CheckDetection) + “ 挂起结果” + 到文本 (ret))
ret = 线程_强制结束 (hThread_CheckDetection)
调试输出 (“hThread_CheckDetection:” + 到文本 (hThread_CheckDetection) + “ 销毁结果” + 到文本 (ret))
.如果真结束
.如果真 (hThread_CheckPeople ≠ 0)
ret = 线程_挂起 (hThread_CheckPeople)
调试输出 (“hThread_CheckPeople:” + 到文本 (hThread_CheckPeople) + “ 挂起结果” + 到文本 (ret))
ret = 线程_强制结束 (hThread_CheckPeople)
调试输出 (“hThread_CheckPeople:” + 到文本 (hThread_CheckPeople) + “ 销毁结果” + 到文本 (ret))
.如果真结束
hThread_MHHCheck = 0
hThread_nowSC = 0
hThread_CheckDetection = 0
hThread_HPCheck = 0
hThread_MPCheck = 0
hThread_CheckPeople = 0
0x03 退岛环游世界
冒冒西巴真的好游戏,历史超过20年依旧能在韩国火爆,就是西巴太肝了。
待我学成归来,再回冒冒潇洒!
最可笑的是冒险岛有国服,然而却劝退了一大堆一大堆的真爱玩家,能跨越语言障碍的人冒着代理、加速器问题被封的风险都还是跑去其他服玩,没有玩外服意愿的人也都纷纷去了私服玩。
大家就跟难民一样,想要出去。
- 棒子最排斥外国身份,身份验证和限制最严格。之前一大批老韩服玩家只能眼睁睁看着自己被删号。
- 日本也严格限制IP,加速器连坐严重,人也少hhh。
- 国际服分欧服和美服,美服收留了最多的难民,国人也最多,可以说是难民天堂了。只是国人越多像我这种懒比也越多,很多脚本玩家,不过按键精灵禁了以后整顿了很多脚本,环境已经好很多了,等以后工作稳定了,能玩的时间固定了,大概还会回去玩的吧。还认识了许多小伙伴能在一起面面基吹吹水一起玩玩别的游戏啥的,挺好的。
- 私服分怀旧服和随官服更新的服,人都多。但因为国内的原因,,一点也不适合玩乐。和巴啦啦玩了一阵子猫服,分了两个服,一块人少但是那服带监控屏幕的就很嚣张(人少是有原因的),另一块据说没有监控但人就多了鱼龙混杂,群里戾气贼重,RMT也存在(在这公益服里面都来这种,真的很让人难受)。总之研究生也要开学了,就还是没能继续下去。刚好收心好好学习正统知识hhhh。