Можно поступить так, как сделаны NPC на о. Весны. Т.е., если у нас пройден квест Языковой барьер, то NPC "говорят" с нами. В противном случае они пишут белиберду. Как бы они не понимают нас, а мы их.
Здесь все точно так же. Мы пишем скрипт в котором указываем желаемый интервал времени. Допустим с 14:00 по 18:00 часов.
Если мы поговорим, например, в 16:31, то скрипт вернет LUA_TRUE, а если в 13:15, то скрипт вернет LUA_FALSE.
В самом начале скрипта NPC ставим проверку:
InitTrigger() TriggerCondition(1, CheckTime) --Функция, которая проверяет время. TriggerAction(1, JumpPage, 1) --Если мы говорим в указанный интервал, то NPC "говорит" с нами. TriggerFailure(1, JumpPage, 2 ) --В противном случае мы попадаем на страницу, где нам говорят, что в данное время нельзя "поговорить" с NPC. Start(GetMultiTrigger(), 1)
Затем пишем простой код:
function CheckTime(character) local i1 = 14 local i2 = 18 local hour = tonumber(os.date("%H")) if hour >= i1 and hour <= i2 then return LUA_TRUE end return LUA_FALSE end
Если нужно учитывать еще и минуты, то
function CheckTime(character) local i1 = 1435 -- с 14:35 local i2 = 1837 -- по 18:37 local hour = tonumber(os.date("%H")) * 100 local minute = tonumber(os.date("%M")) local check = hour + minute if check >= i1 and check <= i2 then return LUA_TRUE end return LUA_FALSE end
Также можно передавать интервал через параметры, если у вас будет несколько таких NPC
function CheckTime(character, i1, i2) local hour = tonumber(os.date("%H")) * 100 local minute = tonumber(os.date("%M")) local check = hour + minute if check >= i1 and check <= i2 then return LUA_TRUE end return LUA_FALSE end
Затем функцию следует добавить в список conditions в файле MissionSdk.lua
elseif conditions[i].func == CheckTime then PRINT( "ConditionsTest: CheckTime") local ret = CheckTime(character) if ret ~= LUA_TRUE then PRINT( "ConditionsTest: CheckTime = false" ) return LUA_FALSE end
С параметрами, соответственно
elseif conditions[i].func == CheckTime then PRINT( "ConditionsTest: CheckTime") local ret = CheckTime(character, conditions[i].p1, conditions[i].p2) if ret ~= LUA_TRUE then PRINT( "ConditionsTest: CheckTime = false" ) return LUA_FALSE end
Код NPC:
function pn_FuncName() InitTrigger() TriggerCondition(1, CheckTime) TriggerAction(1, JumpPage, 1) TriggerFailure(1, JumpPage, 2 ) Start(GetMultiTrigger(), 1) Talk( 1, "Я буду с тобой говорить! " ) Talk( 2, "Я НЕ буду с тобой говорить! " ) end
С параметрами:
function pn_FuncName() InitTrigger() TriggerCondition(1, CheckTime, 1400, 1800) TriggerAction(1, JumpPage, 1) TriggerFailure(1, JumpPage, 2 ) Start(GetMultiTrigger(), 1) Talk( 1, "Я буду с тобой говорить!" ) Talk( 2, "Я НЕ буду с тобой говорить!" ) end