| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- local InfoWindow = require("netpacks.InfoWindow")
- local ReceiverBase = require("core:erm.ReceiverBase")
- local IF = ReceiverBase:new()
- function IF:new(ERM)
- return ReceiverBase.new(self,{ERM = ERM})
- end
- --[[
- according to the ERM help:
- "%%" -> "%"
- "%F#" -> current value of # flag.
- "%Vf"..."%Vt" -> current value of corresponding variable.
- "%W1"..."%W100" -> current value of corresponding hero variable.
- "%X1"..."%X16" -> current value of corresponding function parameter.
- "%Y1"..."%Y100" -> current value of corresponding local variable.
- "%Z1"..."%Z500" -> current value of corresponding string variable.
- "%$macro$" -> macro name of corresponding variable
- "%Dd" -> current day of week
- "%Dw" -> current week
- "%Dm" -> current month
- "%Da" -> current day from beginning of the game
- "%Gc" -> the color of current gamer in text
- ]]
- function IF:M(x, message)
- local pack = InfoWindow.new()
- pack:setPlayer(GAME:getCurrentPlayer())
- local _self = self
- local onMatch1 = function (key1, key2)
- if key1 == 'X' then
- return x[key2]
- end
- if key1 == 'V' then
- return _self.ERM.v[key2]
- end
- if key1 == 'Z' then
- return _self.ERM.z[key2]
- end
- if key1 == 'F' then
- return _self.ERM.F[key2]
- end
- return nil
- end
- local onMatch2 = function (key1, key2)
- if key1 == 'V' then
- return _self.ERM.Q[key2]
- end
- return nil
- end
- message = string.gsub(message, "%%([FVWXYZ])([%d]+)", onMatch1)
- message = string.gsub(message, "%%(V)(%w)", onMatch2)
- message = string.gsub(message, "(%%)(%%)", "%1")
- pack:addText(message)
- SERVER:commitPackage(pack)
- end
- function IF:W(x, heroIndex)
- if heroIndex == nil then
- return tonumber(DATA.ERM.wKey or -2)
- else
- if heroIndex == -1 then
- error("IF:W-1 not implemented")
- end
- DATA.ERM.wKey = tostring(heroIndex)
- end
- end
- return IF
|