Можно поступить так, как сделаны 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