Jump to content
Sign in to follow this  
RedMAN

Релог сервера без вреда респауну боссов

Recommended Posts

Добрейший вечерочек. Всвязи с частыми обновлениями сервера, он требует частых перезагрузок. Респаун боссов сбивается, и это создаёт неудобство игрокам.
Вопрос в следующем - есть ли скрипт, который делает респавн независимым от перезагрузок, а записывает время смерти и спавнит именно спустя время заданное по задумке?

Share this post


Link to post
Share on other sites
1 час назад, RedMAN сказал:

Добрейший вечерочек. Всвязи с частыми обновлениями сервера, он требует частых перезагрузок. Респаун боссов сбивается, и это создаёт неудобство игрокам.
Вопрос в следующем - есть ли скрипт, который делает респавн независимым от перезагрузок, а записывает время смерти и спавнит именно спустя время заданное по задумке?

Есть, но он кривой. Сам попробуй напиши.
Есть предложение - записывать каждую секунду к файл время респа и каждый раз его открывать и сравнивать время респа, если разница вовремени то призываешь босса в определенную локацию. Но это лишняя нагрузка на функцию cha_timer, постарайся делать меньше релогов)

  • Like 1

Делай добро и бросай его в воду

Share this post


Link to post
Share on other sites
Только что, MrSharp сказал:

А почему не респавнить боссов в определенное время?

А как можно это осуществить не подскажешь? В принципе это тоже подойдёт.

Share this post


Link to post
Share on other sites
2 часа назад, MrSharp сказал:

А почему не респавнить боссов в определенное время?

Это ведь не интересно, все будут знать респ боссов.


Делай добро и бросай его в воду

Share this post


Link to post
Share on other sites
1 час назад, NMS3RR сказал:

Это ведь не интересно, все будут знать респ боссов.

А при чем здесь это? Если мы устанавливаем респавн моба через определенное время (скажем через 2 часа, начиная с часу), то мы все равно будем знать время респавна нашего моба (13, 15, 17 и т.д.).

 

3 часа назад, RedMAN сказал:

А как можно это осуществить не подскажешь? В принципе это тоже подойдёт.

Посмотри способ реализации спавна боссов в Снежной войне. Я к сожалению не дома и написать скрипт не могу. 

Share this post


Link to post
Share on other sites
1 час назад, NMS3RR сказал:

Это ведь не интересно, все будут знать респ боссов.

+ мы можем добавить +- рандомное время от минуты до пяти к спавну босса. Так что все решается очень легко.

Share this post


Link to post
Share on other sites
Только что, MrSharp сказал:

А при чем здесь это? Если мы устанавливаем респавн моба через определенное время (скажем через 2 часа, начиная с часу), то мы все равно будем знать время респавна нашего моба (13, 15, 17 и т.д.).

 

Посмотри способ реализации спавна боссов в Снежной войне. Я к сожалению не дома и написать скрипт не могу. 

В этом то и дело, если мы устанавливаем когда он должен реснуться то это не интересно.
Самый сок это когда он ресается в зависимости от того когда его убили.


Делай добро и бросай его в воду

Share this post


Link to post
Share on other sites
5 минут назад, NMS3RR сказал:

Самый сок это когда он ресается в зависимости от того когда его убили.

Особо разницы не вижу. Если хотите, предложите реализацию того способа, который вы предложили.

Сразу говорю, реализация от Monsiure не работает. Проверял давно и вроде бы весь косяк кроется в CreateChaEx. Но эта информация не 100%. Еще раз повторюсь, проверял тот скрипт очень давно.

Edited by MrSharp

Share this post


Link to post
Share on other sites
19 минут назад, MrSharp сказал:

Особо разницы не вижу. Если хотите, предложите реализацию того способа, который вы предложили.

Сразу говорю, реализация от Monsiure не работает. Проверял давно и вроде бы весь косяк кроется в CreateChaEx. Но эта информация не 100%. Еще раз повторюсь, проверял тот скрипт очень давно.

У меня к сожалению нет времени заниматься реализацией данной идеи, я не запариваюсь, я буду оптимизировать рестарты сервера, чтоб не было 100 перезапусков в день.
То что тот скрипт не работает я знаю.
 


Делай добро и бросай его в воду

Share this post


Link to post
Share on other sites
В 18.07.2016 в 01:12, NMS3RR сказал:

Есть, но он кривой. Сам попробуй напиши.
Есть предложение - записывать каждую секунду к файл время респа и каждый раз его открывать и сравнивать время респа, если разница вовремени то призываешь босса в определенную локацию. Но это лишняя нагрузка на функцию cha_timer, постарайся делать меньше релогов)

Работа с файлами довольно тяжелая операция, сервер может начать лагать, кроме того это может негативно сказаться на ресурсе диска, особенно если он SSD. Также функция cha_timer() вызывается для КАЖДОГО живого существа, будь то персонаж игрока или монстр.

 

Тут лучше как сделать:

1) При убийстве босса записывать в файл время его смерти. Причем тут может возникнуть проблема, если у нас несколько боссов с одним и тем же ID

2) При создании босса очищать (удалять) этот файл

3) При запуске сервера (карты) искать файлы с записями о боссах, читать их и вычислять время. Например, сервер запустился, читаем  файл и запоминаем в массиве время смерти боссов. Потом на каждой карте (ctrl.lua) у нас крутится код, который каждую секунду читает этот массив и если пришло время спавнит боссов.

 

 

Еще один способ как сказали выше, сделать фиксированный респ боссов. Но тут тоже есть проблемы. Например, босс реснулся, прошло 2 часа а его не убили. Значит нового босса респавнить не надо. А если босса убьют за 5 минут до следующего респавна?

 

 

@RedMAN самое простое решение - не делать частые обновления сервера. Вместо того, чтобы вводить какие-то мелкие обновления, ты собирай их в кучу и обновляй сервер например раз в неделю, когда минимальный онлайн и заранее предупредив игроков.

  • Like 1

Share this post


Link to post
Share on other sites
2 часа назад, V3ct0r сказал:

Работа с файлами довольно тяжелая операция, сервер может начать лагать, кроме того это может негативно сказаться на ресурсе диска, особенно если он SSD. Также функция cha_timer() вызывается для КАЖДОГО живого существа, будь то персонаж игрока или монстр.

 

Тут лучше как сделать:

1) При убийстве босса записывать в файл время его смерти. Причем тут может возникнуть проблема, если у нас несколько боссов с одним и тем же ID

2) При создании босса очищать (удалять) этот файл

3) При запуске сервера (карты) искать файлы с записями о боссах, читать их и вычислять время. Например, сервер запустился, читаем  файл и запоминаем в массиве время смерти боссов. Потом на каждой карте (ctrl.lua) у нас крутится код, который каждую секунду читает этот массив и если пришло время спавнит боссов.

 

 

Еще один способ как сказали выше, сделать фиксированный респ боссов. Но тут тоже есть проблемы. Например, босс реснулся, прошло 2 часа а его не убили. Значит нового босса респавнить не надо. А если босса убьют за 5 минут до следующего респавна?

 

 

@RedMAN самое простое решение - не делать частые обновления сервера. Вместо того, чтобы вводить какие-то мелкие обновления, ты собирай их в кучу и обновляй сервер например раз в неделю, когда минимальный онлайн и заранее предупредив игроков.


Я знаю что это не очень хорошо нагружать cha_timer и вообще работать с файлами через нее, я выдвинул совет и предупредил что это нежелательно.(Но это лишняя нагрузка на функцию cha_timer, постарайся делать меньше релогов)

@RedMAN если у тебя не получается делать так как говорит V3ctor(не делать частые обновы), то попробуй запустить еще один ГС в который засунь тестовую локацию и работай только с ним, его можешь и релогать и тестить там, на основных ГСах это не будет отображаться.
 

Edited by NMS3RR

Делай добро и бросай его в воду

Share this post


Link to post
Share on other sites
31 минуту назад, NMS3RR сказал:

Я знаю что это не очень хорошо нагружать cha_timer и вообще работать с файлами через нее, я выдвинул совет и предупредил что это нежелательно.(Но это лишняя нагрузка на функцию cha_timer, постарайся делать меньше релогов)

cha_timer здесь вообще не нужно трогать. Эта функция вызывается для всех живых объектов: персонаж игрока, монстр, NPC. Даже при всех проверках на персонажа игрока, у тебя этот код вызовется N раз в секунду (в идеале), где N - количество игроков. Тут надо использовать функции типа map_run_garner(), которые вызываются раз в секунду и работают отдельно для каждой карты.


Share this post


Link to post
Share on other sites
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 координатах.


Делай добро и бросай его в воду

Share this post


Link to post
Share on other sites

@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.

 

А вообще без кода трудно понять что ты хочешь сделать.

 

 


Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...