北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 14379|回复: 10

MushClient4.94去连线提示版

[复制链接]
发表于 2016-3-29 18:38:47 | 显示全部楼层 |阅读模式
本帖最后由 suwuji 于 2016-7-30 11:55 AM 编辑

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

备份原mushclient.exe后替换


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



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2016-3-29 23:04:08 | 显示全部楼层
回复 1# suwuji
  1. http://www.gammon.com.au/forum/index.php?bbtopic_id=1
复制代码
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2016-3-30 14:09:32 | 显示全部楼层
回复 2# creat


    谢谢!不知道新版是否能够,在网络断开一会儿又重新连接后(无线不稳定情况下),有没有地方设置不出现提示?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2016-3-30 20:11:23 | 显示全部楼层
499及以前版本没有,之后版本估计也没有
这种情况应该都是mushclient试图发送命令给服务器才会出现的
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2016-5-7 08:05:12 | 显示全部楼层
我拿mushclient 源代码 4.92 用vc2008 来进行编译 ,源代码都没有改动。其他都正常就是发送命令屏幕。服务器没有任何响应。mud server 也连上了,这是为什么
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2016-5-7 10:16:33 | 显示全部楼层
论坛里面有最新版本,5.*
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 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 of  CMUSHclientDoc::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
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2016-7-30 19:58:27 | 显示全部楼层
内容更新了,自己顶一下,内容见1楼。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2016-12-9 19:36:39 | 显示全部楼层
新版本详见github
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-6-26 17:26:33 | 显示全部楼层
mark下
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-28 10:08 AM , Processed in 0.013304 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表