hba 发表于 2010-7-23 11:55:36

【Mush】转载一个防止发呆的插件

防止发呆的插件

在zmud中,为了防止游戏人物因为处于发呆状态(AFK,away from keyboard)而被踢出服务器,通常的做法是设置一个定时器,定时的发送一些命令。但是这样做有一点不完美的地方就是当你正在操作人物时,定时器仍然会定时发送这些命令。虽然不影响正常的使用,但仍然感觉有点不爽。当然,你也可以把这个定时器关闭,不过感觉还是有点麻烦。
以上的一切在mc中将不复存在。把以下代码另存为一个扩展名为 xml 的文件,让后放到mc的插件目录下面(mushclient\worlds\plugins),然后在游戏中安装这个插件即可以使用。为了正常使用本插件,请确保插件目录下存在 state 目录,这个目录是用来保存插件状态的。此插件适用于任何 MUD。
此插件的原理也是利用一个定时器定时发送你指定的命令来防止人物处于发呆状态。但是有点不同的是当你输入命令的时候,这个定时器会自动重新计时。
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE muclient>
<muclient>
<plugin
   name="AFK"
   author="Blizzard"
   id="4d167d47cac26fb36e161e48"
   language="Lua"
   save_state="y"
   purpose="处于发呆状态时自动发送指定的命令"
   date_written="2006-05-31 10:32:50"
   requires="3.73"
   version="1.0"
   >
<description trim="y">
<![CDATA[
处于发呆状态(AFK)时自动发送指定的命令给 MUD 服务器。
使用 afk:help 命令显示更详细的信息
]]>
</description>
</plugin>
<!--定时器-->
<timers>
<timer
   name="afk_timer"
   second="0"
   minute="5"
   send_to="12"
   enabled="y"
>
<send>
    local minutes = tonumber(GetTimerOption("afk_timer", "minute"))
    local seconds = GetTimerOption("afk_timer", "second")
    local commands = utils.split(GetVariable("command"), ",")
    local command = commands
    ColourNote("salmon", "", "AFK 命令(" .. (minutes > 0 and minutes .. " 分 " or "") .. seconds .. " 秒" .. ")")
    Send(command)
</send>
</timer>
</timers>
<!--别名 -->
<aliases>
<!--AFK 插件的帮助命令 -->
<alias
   match="afk:help"
   enabled="y"
   send_to="12"
   sequence="100"
>
<send>
    ColourNote("salmon", "", "afk:set_command cmd- 设置 AFK 命令,cmd 为任何你想发送的 MUD 命令")
    ColourNote("salmon", "", "                     若有多个命令,需用逗号分开,插件会随机选择一个")
    ColourNote("salmon", "", "afk:set_time seconds - 设置 AFK 的时间,seconds 为大于 0 小于 3600 的数字(秒)")
    ColourNote("salmon", "", "afk:enable         - 启用 AFK 插件")
    ColourNote("salmon", "", "afk:disable          - 禁用 AFK 插件")
    ColourNote("salmon", "", "afk:show_state       - 显示 AFK 当前的状态")
</send>
</alias>
<!--设置 AFK 命令, 格式: afk:set_command 逗号分开的多个命令 -->
<alias
   match="^afk:set_command +(.+)$"
   enabled="y"
   regexp="y"
   send_to="12"
   sequence="100"
>
<send>
    local cmd = "%1"
    SetVariable("command", cmd)
    ColourNote("salmon", "", "当前 AFK 命令已经设置为 " .. cmd)
    SaveState()
</send>
</alias>
<!--设置 AFK 时间, 格式: afk:set_time 秒数 -->
<alias
   script="set_time"
   match="^afk:set_time +(.+)$"
   enabled="y"
   regexp="y"
   sequence="100"
>
</alias>
<!--启用 AFK 插件, 格式: afk:enable -->
<alias
   match="afk:enable"
   enabled="y"
   send_to="12"
   sequence="100"
>
<send>
    EnableTimer("afk_timer", true)
    SetVariable("enable", 1)
    ResetTimer("afk_timer")
    ColourNote("salmon", "", "AFK 功能已经启用")
    SaveState()
</send>
</alias>
<!--禁用 AFK 插件, 格式: afk:disable -->
<alias
   match="afk:disable"
   enabled="y"
   send_to="12"
   sequence="100"
>
<send>
    EnableTimer("afk_timer", false)
    SetVariable("enable", 0)
    ColourNote("salmon", "", "AFK 功能已经禁用")
    SaveState()
</send>
</alias>
<!--显示 AFK 当前的状态, 格式: afk:show_state -->
<alias
   match="afk:show_state"
   enabled="y"
   send_to="12"
   sequence="100"
>
<send>
    local minutes = tonumber(GetVariable("minutes"))
    local seconds = GetVariable("seconds")
    ColourNote("salmon", "", "AFK 的时间为 " .. (minutes > 0 and minutes .. " 分 " or "") .. seconds .. " 秒")
    ColourNote("salmon", "", "AFK 的命令为 " .. GetVariable("command"))
    ColourNote("salmon", "", "AFK 功能已经 " .. (GetVariable("enable") == "1" and "启用" or "禁用"))
</send>
</alias>
</aliases>

<!--脚本-->
<script>
<!
-- 安装时显示插件说明
function OnPluginInstall()
    Init()
    Note("--------------------- AFK 插件 ---------------------")
    Note(GetPluginInfo(GetPluginID(), 3))
end
-- 输入命令时,重置 AFK 定时器
function OnPluginSend(sText)-- OnPluginCommand 只对键盘输入的命令有效?
    ResetTimer("afk_timer")
    return true-- 处理这个命令
end

-- 连接到 MUD 时根据状态文件中的变量值重新设置 AFK 插件的状态
function OnPluginConnect()
    Init()
end

-- 初始化 AFK 插件
function Init()
    local minutes = GetVariable("minutes")
    local seconds = GetVariable("seconds")
    if minutes == nil or seconds == nil then
      minutes = 5
      seconds = 0
      SetVariable("minutes", minutes)
      SetVariable("seconds", seconds)
      SaveState()
    end
    SetTimerOption("afk_timer", "minute", minutes)
    SetTimerOption("afk_timer", "second", seconds)
    local cmd = GetVariable("command")
    if cmd == nil then
      SetVariable("command", "look")
      SaveState()
    end
    local enable = GetVariable("enable") == "1" and true or false
    EnableTimer("afk_timer", enable)
end

-- 将秒数转换为时分秒
function convert_seconds(seconds)
    local hours = math.floor(seconds / 3600)
    seconds = seconds - (hours * 3600)
    local minutes = math.floor(seconds / 60)
    seconds = seconds - (minutes * 60)
    return hours, minutes, seconds
end
-- 别名调用的函数
-- 设置时间
function set_time(name, line, wildcards)
    local afk_time = tonumber(wildcards)
    if afk_time == nil or afk_time <= 0 or afk_time >= 3600 then
      ColourNote("salmon", "", "指定的参数不是一个有效的时间(0 - 3600 秒之间)")
    else
      local _, minutes, seconds = convert_seconds(afk_time)
      seconds = math.floor(seconds)
      SetVariable("minutes", minutes)
      SetVariable("seconds", seconds)
      SetTimerOption("afk_timer", "minute", minutes)
      SetTimerOption("afk_timer", "second", seconds)
      ResetTimer("afk_timer")
      ColourNote("salmon", "", "当前 AFK 时间已经设置为 " .. (minutes > 0 and minutes .. " 分 " or "") .. seconds .. " 秒")
      SaveState()
    end
end
]]>
</script>
</muclient>

hba 发表于 2010-7-23 11:57:59

--------------------- AFK 插件 ---------------------
处于发呆状态(AFK)时自动发送指定的命令给 MUD 服务器。
使用 afk:help 命令显示更详细的信息

afk:set_command cmd- 设置 AFK 命令,cmd 为任何你想发送的 MUD 命令
                     若有多个命令,需用逗号分开,插件会随机选择一个
afk:set_time seconds - 设置 AFK 的时间,seconds 为大于 0 小于 3600 的数字(秒)
afk:enable         - 启用 AFK 插件
afk:disable          - 禁用 AFK 插件
afk:show_state       - 显示 AFK 当前的状态

当前 AFK 命令已经设置为 time

当前 AFK 时间已经设置为 5 分 0 秒

lzkd 发表于 2010-7-23 12:13:21

有点意思,回家就试试

hba 发表于 2010-7-23 12:34:01

效果出来了:
AFK 命令(5 分 0 秒)
time
现在现实中的时间是北京时间 Fri Jul 23 12:31:07 2010(庚寅年七月二十三日午时三刻)。
北大侠客行现在大约是正午时分。
本周为杀戮之周,胡一刀任务奖励增加10%!

请注意,输入afk:show_state看一看,默认居然是AFK 功能已经禁用的。

chans 发表于 2010-7-23 16:14:33

我在用。很好用。
页: [1]
查看完整版本: 【Mush】转载一个防止发呆的插件