V3ct0r 2,116 Report post Posted March 14, 2018 Диалог с NPC в определенное время Привет! В данном гайде я расскажу как можно сделать диалог с NPC доступным только в определенное время. Например, с 18:00 до 19:45. Для начала напишем скелет скрипта NPC, который для примера назовем pn_FuncName: function pn_FuncName() InitTrigger() TriggerCondition(1, CheckTime, 1800, 1945) TriggerAction(1, JumpPage, 1) TriggerFailure(1, JumpPage, 2) Start(GetMultiTrigger(), 1) Talk( 1, "Я буду с тобой говорить!" ) Talk( 2, "Я НЕ буду с тобой говорить! Приходи в другое время!" ) end В самом начале скрипта мы определяем условие времени TriggerCondition(1, CheckTime, 1800, 1945) Для этого служит функция CheckTime(t1, t2), которую мы опишем позже. Она принимает два параметра:t1 - начальное время; t2 - конечное время. В данном примере, t1 и t2 соответствуют значения 1800 и 1945, что означает интервал времени от 18:00 до 19:45 включительно. Как Вы могли догадаться, время кодируется следующим образом: t = часы * 100 + минуты Итак, мы определили условие времени. Если оно выполняется, то игрок попадает на страницу 1 и видит сообщение "Я буду с тобой говорить!", в противном случае, игрок попадает на страницу 2 и видит сообщение "Я НЕ буду с тобой говорить! Приходи в другое время!". Все просто! Далее нам необходимо написать функцию CheckTime(t1, t2). Для этого открываем файл functions.lua (GameServer\resource\script\calculate) и помещаем в него следующий код: -- Функция для проверки времени -- Если текущее время попадает в интервал [t1, t2] -- , то функция возвращает true, в противном случае -- функция возвращает false function CheckTime(character, t1, t2) -- Получим текущее время local hour = tonumber(os.date("%H")) * 100 local minute = tonumber(os.date("%M")) -- Закодируем его по формуле -- t = часы * 100 + минуты local check = hour + minute -- Определяем, находится ли текущее время -- в интервале [t1, t2] if (check >= t1 and check <= t2) then -- Время находится в интервале return LUA_TRUE end -- Время не находится в интервале return LUA_FALSE end Чтобы функцию можно было использовать в диалогах NPC, а именно в функции TriggerCondition(...), которая определяет различные условия, её необходимо зарегистрировать в файле MissionSdk.lua (GameServer\resource\script\MisSdk). Найдите в этом файле функцию ConditionsTest(...), а в ней следующий код: if conditions[i].func == NoMission then PRINT( "ConditionsTest:NoMission, p1 = ", conditions[i].p1 ) local Ret = NoMission( character, conditions[i].p1 ) if Ret ~= LUA_TRUE then PRINT( "ConditionsTest: NoMission = false" ) return LUA_FALSE end После данного блока кода вставьте код для функции CheckTime(t1, t2): 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 На этом все, теперь Вы можете создать NPC c функцией pn_FuncName (название взято для примера) и протестировать его. P.S. За идею были взяты NPC с о. Весны, которые говорят с игроком, только когда он прошел квест "Языковой барьер"; P.S.S. В функцию CheckTime(t1, t2) можно так же добавить проверку на день недели. См. Справочное руководство по языку Lua 5.1 - 5.8 – Функции операционной системы; P.S.S.S. По такому же принципу можно делать любые проверки, например, на расу и профессию персонажа игрока. 3 Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
Graf 209 Report post Posted October 28, 2019 (edited) @V3ct0r А вот, к примеру, проверка на уровень ГМ. НПС: Function.lua Ну и MissionSDK.lua Ошибка Можете привести пример или натолкнуть на правильный код?)) Edited October 28, 2019 by Graf Quote Share this post Link to post Share on other sites
Graf 209 Report post Posted October 28, 2019 Проблема решена. Quote Share this post Link to post Share on other sites