Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Моды (http://mangos.ytdb.ru/forumdisplay.php?f=8)
-   -   [mod] Server info, duel reset (http://mangos.ytdb.ru/showthread.php?t=101)

Feel the Power 07.03.2010 19:41

[mod] Server info, duel reset
 
Вложений: 3
Server info patch:
Добавляет возможность включать или выключать в конфиге показ в игре командой .server info информации о версии ядра, базы и скриптов.
Код:

ServerInfo = 1
Duel reset patch:
При предложении дуэли другому игроку теперь восстанавливаются жизни и мана у обоих членов дуэли, а также сбрасываются кулдауны, как на арене (меньше 15 минут). Можно включать/выключать в конфиге.
Код:

DuelReset = 0
По поводу второго патча: есть идея на реализацию сохранения значений кулдаунов всех спелов при предложении дуэли в отдельную таблицу и возвращении после окончания дуэли этих значений. Искал функцию, которую можно использовать для получения значений кулдауна, но так и не нашёл. Подскажите пожалуйста как это можно реализовать, или всё же я плохо искал?

Destros 07.03.2010 21:18

Цитата:

Сообщение от Feel the Power (Сообщение 406)
Искал функцию, которую можно использовать для получения значений кулдауна, но так и не нашёл.

Функция
Код:

GetSpellCooldownDelay(SpellId);
вам может помочь. Находится в /src/game/Player.h

KiriX 07.03.2010 21:38

Со вторым всё ясно, а вот первый - почему не отключить команду просто в базе?

Feel the Power 07.03.2010 21:54

Хм... Имеем

Код:

bool HasSpellCooldown(uint32 spell_id) const
        {
            SpellCooldowns::const_iterator itr = m_spellCooldowns.find(spell_id);
            return itr != m_spellCooldowns.end() && itr->second.end > time(NULL);
        }
        time_t GetSpellCooldownDelay(uint32 spell_id) const
        {
            SpellCooldowns::const_iterator itr = m_spellCooldowns.find(spell_id);
            time_t t = time(NULL);
            return itr != m_spellCooldowns.end() && itr->second.end > t ? itr->second.end - t : 0;
        }

но не совсем понятно, что она возвращает...

Может быть проще обычными запросом
Код:

select * from `character_spell_cooldown` where guid = '%u'
собирать все значения в отдельную таблицу и потом просто добавить в обработчик завершения дуэли возвращение этих значений обычным добавлением в character_spell_cooldown или, если этого будет недостаточно, воспользоваться функцией добавления кулдауна (вроде бы я её видел)?


Цитата:

Сообщение от KiriX (Сообщение 438)
Со вторым всё ясно, а вот первый - почему не отключить команду просто в базе?

В моё варианте остаётся показ текущего аптайма и онлайна.

add: Блин, в спешке переделывал патч под текущую ревизию и не заметил, что не туда поставил скобку.
Перезалил.

Destros 07.03.2010 22:03

Скажем так, частое обращение к базе не очень хорошо.

Feel the Power 07.03.2010 22:08

Цитата:

Сообщение от Destros (Сообщение 451)
Скажем так, частое обращение к базе не очень хорошо.

Предлагаете хранить всё в памяти? А если сервер упадёт?=)

Destros 07.03.2010 22:25

Сервер падает редко всё-таки. И если упал, то не думаю, что будет очень плохо игрокам из-за того, что кулдауны остались такими же, как в дуэли. Всё-таки бывает это не так часто.

LordJZ 08.03.2010 19:06

Что бы не использовались кулдауны в дуэли, можно добавить проверку в Player::HasSpellCooldown, но надо отправлять Player::SendClearCooldown.

Feel the Power 08.03.2010 21:41

Не всё ещё понимаю, так что пойду почитаю учебники.


Текущее время: 21:51. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS