suwuji 发表于 2016-3-29 18:38:47

MushClient4.94去连线提示版

本帖最后由 suwuji 于 2016-7-30 11:55 AM 编辑

挂机的时候如果网络不稳定,可能造成断线。此时可以勾选程序的断线自动重连选项(不过不太好用),最好还是程序主动检测是否在线,若不在线直接重连。
而MushClient的最新版4.94(有人还有更高版本不知道是怎么来的,官方最新就是4.94而且不更新了),奇了怪的设计断线重连会弹个对话框提示阻塞了挂机进程。
没找到设置去掉这个提示,只有改程序暴力去掉了MessageBoxA的弹出,(不影响utils.msgbox和lua错误调试等对话框)。

备份原mushclient.exe后替换


最新修正版,以前的版本把触发器删除的提示也一并屏蔽了,导致无法正常删除废弃的触发等数据,现修正做了判断处理。
感谢 rubbie 提醒,我还以为没人用,自己偷懒只把禁用当删除用了事。



北大侠客行MUD,中国最好的MUD

creat 发表于 2016-3-29 23:04:08

回复 1# suwuji http://www.gammon.com.au/forum/index.php?bbtopic_id=1

suwuji 发表于 2016-3-30 14:09:32

回复 2# creat


    谢谢!不知道新版是否能够,在网络断开一会儿又重新连接后(无线不稳定情况下),有没有地方设置不出现提示?

creat 发表于 2016-3-30 20:11:23

499及以前版本没有,之后版本估计也没有
这种情况应该都是mushclient试图发送命令给服务器才会出现的

ptouch 发表于 2016-5-7 08:05:12

我拿mushclient 源代码 4.92 用vc2008 来进行编译 ,源代码都没有改动。其他都正常就是发送命令屏幕。服务器没有任何响应。mud server 也连上了,这是为什么

seagate 发表于 2016-5-7 10:16:33

论坛里面有最新版本,5.*

ptouch 发表于 2016-5-9 13:36:11

这个【重连提示】是 mushclient 的老问题了。 断线情况下有任何输入都会导致出现提示对话框。挂机网络不稳定会经常出现这个对话框,点确定, mushcllient 就会崩溃退出。

我研究了下 mushclient 源代码
bool CMUSHclientDoc::CheckConnected (void)
{
// let them know if they are foolishly trying to send to a closed connection

// no reconnecting while we are trying to disconnect
if (m_iConnectPhase == eConnectDisconnecting)
    return true;

// if no socket, ask if they want one
if (m_iConnectPhase != eConnectConnectedToMud || !m_pSocket)
    {
    // forget it for this address
    if (m_server == "0.0.0.0")
      return true;

    CString str;

    if (m_iConnectPhase != eConnectNotConnected)
      {
      str = TFormat ("The connection to %s is currently being established.",
                (LPCTSTR) m_mush_name);
      UMessageBox (str, MB_ICONINFORMATION);
      }
    else
      {
      str = TFormat ("The connection to %s is not open. Attempt to reconnect?",
                (LPCTSTR) m_mush_name);

      if (UMessageBox (str, MB_YESNO | MB_ICONQUESTION) == IDYES)
      {
      ConnectSocket ();
      Frame.FixUpTitleBar ();
      UpdateAllViews (NULL);// make sure title bar is updated
      }
      }
    return true;
    }

return false;
} // end ofCMUSHclientDoc::CheckConnected


红色字就是避免出现这个提示框关键。
你只要把的服务器 ip 地址设置为 0.0.0.0 就直接return 不执行后面代码

你需要在你的机器人写上这个2个函数
function clean_WorldAddress()
local address=world.WorldAddress()--原始地址
world.SetVariable("world_address",address) --保存入变量
world.SetAlphaOption("site","0.0.0.0") --清除掉
end

function set_WorldAddress()
local address=world.GetVariable("world_address") or world.WorldAddress()
world.SetAlphaOption("site",address)
end
set_WorldAddress()--启动脚本时候将变量值自动赋值

重连插件中 连接事件 也要写上

function OnPluginConnect()
   auto_connect=true
    --恢复所有暂停的计时器
   world.Execute("/Timer_Resume()")
   world.Execute("/clean_WorldAddress()")
   button()
   ColourNote("white", "red", "连上书剑世界!!")
   world.EnableTimer("reconnect_timer",false)
   world.DeleteTimer("reconnect_timer")
   Enable_AFK()
end

function sj_Connect()
   connect_count=connect_count+1
   if connect_count>9999 then
       ColourNote("white", "red", "离开书剑世界!!")
       world.EnableTimer("reconnect_timer",false)
           world.EnableTimer("heart_timer",false)
      return
   end
   local reset_sec=5*connect_count
   local reset_min=0

   world.ColourNote("white", "red", "断线,启动自动连接"..reset_sec.."秒开启连接")
world.Execute("/set_WorldAddress()")
   local hour=math.floor(reset_sec/3600)
   reset_sec=reset_sec-hour*3600
   local mins=math.floor(reset_sec/60)
   reset_sec=reset_sec-mins*60
   world.SetTimerOption("reconnect_timer","hour",hour)
   world.SetTimerOption("reconnect_timer","minute",mins)
   world.SetTimerOption("reconnect_timer","second",reset_sec)
   for k, v in pairs (GetWorldIdList ()) do
      if v==world.GetWorldID() then
            --print("激活:world"..k)
            world.DoCommand("world"..k)
            world.DoCommand("Connect")

         break
      end
   end


   --world.Connect()
end

suwuji 发表于 2016-7-30 19:58:27

内容更新了,自己顶一下,内容见1楼。

runapp 发表于 2016-12-9 19:36:39

新版本详见github

tianheng 发表于 2017-6-26 17:26:33

mark下
页: [1] 2
查看完整版本: MushClient4.94去连线提示版