RedMAN 22 Report post Posted July 17, 2016 Добрейший вечерочек. Всвязи с частыми обновлениями сервера, он требует частых перезагрузок. Респаун боссов сбивается, и это создаёт неудобство игрокам. Вопрос в следующем - есть ли скрипт, который делает респавн независимым от перезагрузок, а записывает время смерти и спавнит именно спустя время заданное по задумке? Quote Share this post Link to post Share on other sites
WVWMK 121 Report post Posted July 17, 2016 1 час назад, RedMAN сказал: Добрейший вечерочек. Всвязи с частыми обновлениями сервера, он требует частых перезагрузок. Респаун боссов сбивается, и это создаёт неудобство игрокам. Вопрос в следующем - есть ли скрипт, который делает респавн независимым от перезагрузок, а записывает время смерти и спавнит именно спустя время заданное по задумке? Есть, но он кривой. Сам попробуй напиши. Есть предложение - записывать каждую секунду к файл время респа и каждый раз его открывать и сравнивать время респа, если разница вовремени то призываешь босса в определенную локацию. Но это лишняя нагрузка на функцию cha_timer, постарайся делать меньше релогов) 1 Quote Делай добро и бросай его в воду Share this post Link to post Share on other sites
BETEP/macs509 87 Report post Posted July 18, 2016 http://forum.maindev.ru/threads/skript-voskreshenie-monstrov.19650/#post-161109 1 Quote Share this post Link to post Share on other sites
MrSharp 47 Report post Posted July 18, 2016 А почему не респавнить боссов в определенное время? Quote Share this post Link to post Share on other sites
RedMAN 22 Report post Posted July 18, 2016 Только что, MrSharp сказал: А почему не респавнить боссов в определенное время? А как можно это осуществить не подскажешь? В принципе это тоже подойдёт. Quote Share this post Link to post Share on other sites
WVWMK 121 Report post Posted July 18, 2016 2 часа назад, MrSharp сказал: А почему не респавнить боссов в определенное время? Это ведь не интересно, все будут знать респ боссов. Quote Делай добро и бросай его в воду Share this post Link to post Share on other sites
MrSharp 47 Report post Posted July 18, 2016 1 час назад, NMS3RR сказал: Это ведь не интересно, все будут знать респ боссов. А при чем здесь это? Если мы устанавливаем респавн моба через определенное время (скажем через 2 часа, начиная с часу), то мы все равно будем знать время респавна нашего моба (13, 15, 17 и т.д.). 3 часа назад, RedMAN сказал: А как можно это осуществить не подскажешь? В принципе это тоже подойдёт. Посмотри способ реализации спавна боссов в Снежной войне. Я к сожалению не дома и написать скрипт не могу. Quote Share this post Link to post Share on other sites
MrSharp 47 Report post Posted July 18, 2016 1 час назад, NMS3RR сказал: Это ведь не интересно, все будут знать респ боссов. + мы можем добавить +- рандомное время от минуты до пяти к спавну босса. Так что все решается очень легко. Quote Share this post Link to post Share on other sites
WVWMK 121 Report post Posted July 18, 2016 Только что, MrSharp сказал: А при чем здесь это? Если мы устанавливаем респавн моба через определенное время (скажем через 2 часа, начиная с часу), то мы все равно будем знать время респавна нашего моба (13, 15, 17 и т.д.). Посмотри способ реализации спавна боссов в Снежной войне. Я к сожалению не дома и написать скрипт не могу. В этом то и дело, если мы устанавливаем когда он должен реснуться то это не интересно. Самый сок это когда он ресается в зависимости от того когда его убили. Quote Делай добро и бросай его в воду Share this post Link to post Share on other sites
MrSharp 47 Report post Posted July 18, 2016 (edited) 5 минут назад, NMS3RR сказал: Самый сок это когда он ресается в зависимости от того когда его убили. Особо разницы не вижу. Если хотите, предложите реализацию того способа, который вы предложили. Сразу говорю, реализация от Monsiure не работает. Проверял давно и вроде бы весь косяк кроется в CreateChaEx. Но эта информация не 100%. Еще раз повторюсь, проверял тот скрипт очень давно. Edited July 18, 2016 by MrSharp Quote Share this post Link to post Share on other sites
WVWMK 121 Report post Posted July 18, 2016 19 минут назад, MrSharp сказал: Особо разницы не вижу. Если хотите, предложите реализацию того способа, который вы предложили. Сразу говорю, реализация от Monsiure не работает. Проверял давно и вроде бы весь косяк кроется в CreateChaEx. Но эта информация не 100%. Еще раз повторюсь, проверял тот скрипт очень давно. У меня к сожалению нет времени заниматься реализацией данной идеи, я не запариваюсь, я буду оптимизировать рестарты сервера, чтоб не было 100 перезапусков в день. То что тот скрипт не работает я знаю. Quote Делай добро и бросай его в воду Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted July 19, 2016 В 18.07.2016 в 01:12, NMS3RR сказал: Есть, но он кривой. Сам попробуй напиши. Есть предложение - записывать каждую секунду к файл время респа и каждый раз его открывать и сравнивать время респа, если разница вовремени то призываешь босса в определенную локацию. Но это лишняя нагрузка на функцию cha_timer, постарайся делать меньше релогов) Работа с файлами довольно тяжелая операция, сервер может начать лагать, кроме того это может негативно сказаться на ресурсе диска, особенно если он SSD. Также функция cha_timer() вызывается для КАЖДОГО живого существа, будь то персонаж игрока или монстр. Тут лучше как сделать: 1) При убийстве босса записывать в файл время его смерти. Причем тут может возникнуть проблема, если у нас несколько боссов с одним и тем же ID 2) При создании босса очищать (удалять) этот файл 3) При запуске сервера (карты) искать файлы с записями о боссах, читать их и вычислять время. Например, сервер запустился, читаем файл и запоминаем в массиве время смерти боссов. Потом на каждой карте (ctrl.lua) у нас крутится код, который каждую секунду читает этот массив и если пришло время спавнит боссов. Еще один способ как сказали выше, сделать фиксированный респ боссов. Но тут тоже есть проблемы. Например, босс реснулся, прошло 2 часа а его не убили. Значит нового босса респавнить не надо. А если босса убьют за 5 минут до следующего респавна? @RedMAN самое простое решение - не делать частые обновления сервера. Вместо того, чтобы вводить какие-то мелкие обновления, ты собирай их в кучу и обновляй сервер например раз в неделю, когда минимальный онлайн и заранее предупредив игроков. 1 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
WVWMK 121 Report post Posted July 19, 2016 (edited) 2 часа назад, V3ct0r сказал: Работа с файлами довольно тяжелая операция, сервер может начать лагать, кроме того это может негативно сказаться на ресурсе диска, особенно если он SSD. Также функция cha_timer() вызывается для КАЖДОГО живого существа, будь то персонаж игрока или монстр. Тут лучше как сделать: 1) При убийстве босса записывать в файл время его смерти. Причем тут может возникнуть проблема, если у нас несколько боссов с одним и тем же ID 2) При создании босса очищать (удалять) этот файл 3) При запуске сервера (карты) искать файлы с записями о боссах, читать их и вычислять время. Например, сервер запустился, читаем файл и запоминаем в массиве время смерти боссов. Потом на каждой карте (ctrl.lua) у нас крутится код, который каждую секунду читает этот массив и если пришло время спавнит боссов. Еще один способ как сказали выше, сделать фиксированный респ боссов. Но тут тоже есть проблемы. Например, босс реснулся, прошло 2 часа а его не убили. Значит нового босса респавнить не надо. А если босса убьют за 5 минут до следующего респавна? @RedMAN самое простое решение - не делать частые обновления сервера. Вместо того, чтобы вводить какие-то мелкие обновления, ты собирай их в кучу и обновляй сервер например раз в неделю, когда минимальный онлайн и заранее предупредив игроков. Я знаю что это не очень хорошо нагружать cha_timer и вообще работать с файлами через нее, я выдвинул совет и предупредил что это нежелательно.(Но это лишняя нагрузка на функцию cha_timer, постарайся делать меньше релогов)@RedMAN если у тебя не получается делать так как говорит V3ctor(не делать частые обновы), то попробуй запустить еще один ГС в который засунь тестовую локацию и работай только с ним, его можешь и релогать и тестить там, на основных ГСах это не будет отображаться. Edited July 19, 2016 by NMS3RR Quote Делай добро и бросай его в воду Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted July 19, 2016 31 минуту назад, NMS3RR сказал: Я знаю что это не очень хорошо нагружать cha_timer и вообще работать с файлами через нее, я выдвинул совет и предупредил что это нежелательно.(Но это лишняя нагрузка на функцию cha_timer, постарайся делать меньше релогов) cha_timer здесь вообще не нужно трогать. Эта функция вызывается для всех живых объектов: персонаж игрока, монстр, NPC. Даже при всех проверках на персонажа игрока, у тебя этот код вызовется N раз в секунду (в идеале), где N - количество игроков. Тут надо использовать функции типа map_run_garner(), которые вызываются раз в секунду и работают отдельно для каждой карты. 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
WVWMK 121 Report post Posted July 19, 2016 2 минуты назад, V3ct0r сказал: cha_timer здесь вообще не нужно трогать. Эта функция вызывается для всех живых объектов: персонаж игрока, монстр, NPC. Даже при всех проверках на персонажа игрока, у тебя этот код вызовется N раз в секунду (в идеале), где N - количество игроков. Тут надо использовать функции типа map_run_garner(), которые вызываются раз в секунду и работают отдельно для каждой карты. Хорошо, спасибо, буду знать. Я тут с другой подобной проблемой столкнулся. Мне надо вызывать существо в зависимости от карты, причем если это существо вызвано, то невозможно призвать второе такое же на этой карте. Если я держу переменную(счетчик) в variable.lua то у всех слетают статы, а если держу в itemeffectt.lua то счетчик не действует и существ можно вызвать много. И по какой то причине не правильно действует local new = CreateChaX( 1473 , x , y , 145 , Refresh, role ), он вызывает существо рядом с персонажем, а не на прописанных под x и y координатах. Quote Делай добро и бросай его в воду Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted July 19, 2016 @NMS3RR Попробуй использовать функцию local cha = CreateCha(ID, x, y, angle, life) где cha - дескриптор нового монстра ID - ID монстра из characterinfo.txt x - координата x y - координата y angle - угол поворота монстра при создании life - время респавна монстра в секундах координаты должны быть домножены на 100. Например, если ты хочешь создать персонажа в точке 56, 821, то нужно указать x = 5600, y = 82100. А вообще без кода трудно понять что ты хочешь сделать. 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
WVWMK 121 Report post Posted July 19, 2016 (edited) @V3ct0r Решено Edited July 19, 2016 by NMS3RR Quote Делай добро и бросай его в воду Share this post Link to post Share on other sites