Graf 210 Report post Posted August 23, 2016 Что делает скрипт? Цитата Если описывать все это кратко, то скрипт позволяет избежать воскрешение боссов раньше времени после рестарта сервера. Призыв должен осуществляться добавлением новых ID и время воскрешения в переменные. Что нужно сделать? Цитата Создать в папке "script" папку "test", а в ней создать еще одну папку "monster". Как добавить новых монстров? idMonster[последовательное число] = айди монстра xMonster[idMonster[последовательное число]] = координата по x yMonster[idMonster[последовательное число]] = координата по y mapMonster[idMonster[последовательное число]] = "название серверной карты" timeMonster[idMonster[последовательное число]] = время через которое появится (в секундах) Начинаем добавлять В variable.lua: MonsterLogDir = "resource/script/test/monster/" idMonster = {} xMonster = {} yMonster = {} mapMonster = {} timeMonster = {} idMonster[1] = 1111 xMonster[idMonster[1]] = 100 yMonster[idMonster[1]] = 100 mapMonster[idMonster[1]] = "darkblue" timeMonster[idMonster[1]] = 1800 idMonster[2] = 1112 xMonster[idMonster[2]] = 928 yMonster[idMonster[2]] = 239 mapMonster[idMonster[2]] = "garner2" timeMonster[idMonster[2]] = 36000 В functions.lua: function checkMonster() -- Проверяет файлы монстров и производит вычисление времени for i, k in ipairs(idMonster) do local getFile = io.open(MonsterLogDir..idMonster[i]..".txt", "r") if getFile == nil then -- Записывает нового монстра, если его не существует local writeFile = io.open(MonsterLogDir..idMonster[i]..".txt", "w") writeFile:write("0") writeFile:close() else local timeCheck = getFile:read() local NumbTimeCheck = tonumber(timeCheck) if NumbTimeCheck > 0 then -- Вычисление времени каждую секунду arim = NumbTimeCheck - 1 end if timeCheck ~= "0" then -- Запись нового времени в файл монстра local writeFile = io.open(MonsterLogDir..idMonster[i]..".txt", "w") writeFile:write(arim) writeFile:close() else -- Призыв монстра монстра через переменную idMonster[i] CreateChaEx(idMonster[i], xMonster[i], yMonster[i], 145, 60, mapMonster[i]) end getFile:close() end end end function deadMonster( dead ) -- Вызывается при убийстве монстра и обновляет счетчик в файле local MonsterCha = TurnToCha ( dead ) local MonsterID = GetChaTypeID( MonsterCha ) local getFile = io.open(MonsterLogDir..MonsterID..".txt", "r") if getFile ~= nil then local timeCheck = getFile:read() if timeCheck == "0" then writeFile = io.open(MonsterLogDir..MonsterID..".txt", "w") writeFile:write(timeMonster[MonsterID]) writeFile:close() end getFile:close() end end В конец функции cha_timer() из functions.lua: checkMonster() В конец функции GetExp_PKM() из exp_and_level.lua: deadMonster( dead ) Scripted by Monsiure. Ссылка Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted August 23, 2016 1) Работа с файлами тяжелая операция, она может понизить производительность сервера (FPS, в идеальном случае FPS = 20). 2) Сомнительное решение: Цитата В конец функции cha_timer() из functions.lua: checkMonster() Функция cha_timer() представляет собой таймер, который тикает раз в секунду. Вызывается эта функция для каждого игрока, активного монстра, NPC и прочих объектов (они передаются в нее первым параметром - role). Как видно из скриншота выше, эта функция будет вызываться для 10436 объектов. То есть столько раз будет открываться файл на чтение и что-то там будет происходить. И все это в цикле. Не очень рационально. Да и сама ситуация сомнительная. Нормальный сервер перезагружается редко. Если и перезагружается, то желательно при минимальном онлайне, например, в среду ночью, когда все спят. И ради того, чтобы игроки не убили босса во второй раз (а если они и не собираются его убивать?), давать дополнительную нагрузку на сервер? Кстати, насколько я помню, данная тема здесь уже обсуждалась 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 210 Report post Posted August 23, 2016 Значит можно её удалить. Share this post Link to post Share on other sites