1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-14 10:12:59 +02:00
vcmi/scripts/lib/erm/IF.lua

86 lines
1.8 KiB
Lua
Raw Normal View History

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