|
|
@ -824,6 +824,29 @@ function OnPluginDisable()
|
|
|
|
end -- OnPluginDisable
|
|
|
|
end -- OnPluginDisable
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- We use the telnet subnegotiation protocol to monitor GMCP config status. Yes, this duplicates
|
|
|
|
|
|
|
|
-- some functionality of the gmcphelper plugin, but it provides backwards compatibility (mush r1825
|
|
|
|
|
|
|
|
-- doesn't support GMCP config) and it also eliminates synchronization issues with the gmcphelper plugin.
|
|
|
|
|
|
|
|
local drlTelnetTypeGMCP = 201
|
|
|
|
|
|
|
|
function OnPluginTelnetSubnegotiation (msgType, data)
|
|
|
|
|
|
|
|
if msgType ~= drlTelnetTypeGMCP then
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
end -- if
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (data ~= nil) then
|
|
|
|
|
|
|
|
local mode, params = string.match (data, "([%a.]+)%s+(.*)")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (mode == "config") then
|
|
|
|
|
|
|
|
local configKey, configValue = string.match(params, "{ \"(%a+)\" : \"(%a+)\" }")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dbot.debug("GMCP config: key=\"" .. configKey .. "\", value=\"" .. configValue .. "\"")
|
|
|
|
|
|
|
|
dbot.gmcp.currentState[configKey] = configValue
|
|
|
|
|
|
|
|
end -- if
|
|
|
|
|
|
|
|
end -- if
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end -- OnPluginTelnetSubnegotiation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function OnPluginTelnetOption(msg)
|
|
|
|
function OnPluginTelnetOption(msg)
|
|
|
|
if (msg == string.char(100, 1)) then
|
|
|
|
if (msg == string.char(100, 1)) then
|
|
|
|
dbot.debug("Player is at login screen")
|
|
|
|
dbot.debug("Player is at login screen")
|
|
|
@ -19378,6 +19401,7 @@ end -- dbot.gmcp.stateIsActive()
|
|
|
|
Tickinfo,
|
|
|
|
Tickinfo,
|
|
|
|
Xterm
|
|
|
|
Xterm
|
|
|
|
--]]
|
|
|
|
--]]
|
|
|
|
|
|
|
|
dbot.gmcp.currentState = {}
|
|
|
|
-- Returns boolean representing "YES" or "NO" values from the mud for the specified mode
|
|
|
|
-- Returns boolean representing "YES" or "NO" values from the mud for the specified mode
|
|
|
|
function dbot.gmcp.getConfig(configMode)
|
|
|
|
function dbot.gmcp.getConfig(configMode)
|
|
|
|
local retval = DRL_RET_SUCCESS
|
|
|
|
local retval = DRL_RET_SUCCESS
|
|
|
@ -19388,22 +19412,17 @@ function dbot.gmcp.getConfig(configMode)
|
|
|
|
return configVal, DRL_RET_INVALID_PARAM
|
|
|
|
return configVal, DRL_RET_INVALID_PARAM
|
|
|
|
end -- if
|
|
|
|
end -- if
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- Clear out the current state and wait for a new value to arrive
|
|
|
|
|
|
|
|
dbot.gmcp.currentState.configMode = nil
|
|
|
|
check (Execute("sendgmcp config " .. configMode))
|
|
|
|
check (Execute("sendgmcp config " .. configMode))
|
|
|
|
|
|
|
|
|
|
|
|
-- TODO
|
|
|
|
|
|
|
|
-- Ok, this is really awkward. It takes some (unknown?) amount of time for gmcp to update once
|
|
|
|
|
|
|
|
-- we send the config request. If we immediately read gmcp we always get the previous value for
|
|
|
|
|
|
|
|
-- the specified config mode. So...how long do we need to wait?!? Maybe gmcp notifies us through
|
|
|
|
|
|
|
|
-- a gmcp broadcast? For now we use this incredibly ugly kludge and just stall for half of a second
|
|
|
|
|
|
|
|
-- and assume gmcp is ready after that.
|
|
|
|
|
|
|
|
wait.time(.5)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- Spin until gmcp gives us the value
|
|
|
|
-- Spin until gmcp gives us the value
|
|
|
|
local totTime = 0
|
|
|
|
local totTime = 0
|
|
|
|
local timeout = 5
|
|
|
|
local timeout = 5
|
|
|
|
retval = DRL_RET_TIMEOUT
|
|
|
|
retval = DRL_RET_TIMEOUT
|
|
|
|
while (totTime <= timeout) do
|
|
|
|
while (totTime <= timeout) do
|
|
|
|
local gmcpValue = gmcp("config " .. configMode)
|
|
|
|
|
|
|
|
|
|
|
|
local gmcpValue = dbot.gmcp.currentState[configMode]
|
|
|
|
if (gmcpValue == "YES") then
|
|
|
|
if (gmcpValue == "YES") then
|
|
|
|
configVal = true
|
|
|
|
configVal = true
|
|
|
|
retval = DRL_RET_SUCCESS
|
|
|
|
retval = DRL_RET_SUCCESS
|
|
|
|