|
15.03.2010, 19:23 | #1 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 64
Сказал(а) спасибо: 23
Поблагодарили 10 раз(а) в 5 сообщениях
|
Instance enter
Доброго времени суток всему RMDC. Требуется помощь. Есть ли возможность запретить игрокам входить в инст во время боя с босом.
Допустим ситуация - в И(В)К рейд бьет боса, умирает человек, перемещается к СпиритХиллеру, в течении 30сек долетает до инста, заходит в него и продолжает бой. На оффициальном сервере нельзя войти в данж пока идет битва с босом(либо его убьют, либо вайп). Немного поразмыслив, пришел к выводу, что запрет можно привязать к: Код:
case TYPE_BEASTS: mEncounter[0] = data; if(data==IN_PROGRESS) { OpenDoor(mGatesGUID); CloseDoor(mEntryDoorGUID); CloseGateTimer = 30000; SummonGormok(); mBeastsEnrageTimer = 900000; } else if(data==NOT_STARTED) { OpenDoor(mEntryDoorGUID); DespawnBeasts(); } else if(data == DONE) OpenDoor(mEntryDoorGUID); break; При: Код:
if(data==IN_PROGRESS) При: Код:
else if(data==NOT_STARTED) Код:
else if(data == DONE) OpenDoor(mEntryDoorGUID); Насколько известно на триньке данное реализовано. Хотелось бы и у нас. Любые идеи/предложения/наработки приветствуются. Понимаю, что СД2 мало относиться к ядру, но функция запрета то должна быть в нем родимом. |
15.03.2010, 20:55 | #3 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 64
Сказал(а) спасибо: 23
Поблагодарили 10 раз(а) в 5 сообщениях
|
Код:
// TODO: move this to a map dependent location /*if(i_data && i_data->IsEncounterInProgress()) { sLog.outDebug("MAP: Player '%s' can't enter instance '%s' while an encounter is in progress.", player->GetName(), GetMapName()); player->SendTransferAborted(GetId(), TRANSFER_ABORT_ZONE_IN_COMBAT); return(false); }*/ Код:
// cannot enter while players in the instance are in combat Group *pGroup = player->GetGroup(); if(pGroup && pGroup->InCombatToInstance(GetInstanceId()) && player->isAlive() && player->GetMapId() != GetId()) { player->SendTransferAborted(GetId(), TRANSFER_ABORT_ZONE_IN_COMBAT); return false; } Все что требуется "заставить" заработать первую часть кода. Насколько я понял нужно ввести условия "если карта = данж и данж = рейдовый -> IsEncounterInProgress() " |
15.03.2010, 21:08 | #4 |
Ученый
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
|
Просто раскомментировать плюс в инстанс-скрипте должно быть определено IsEncounterInProgress. Что-то типа
Код:
bool IsEncounterInProgress() const { for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) if (m_auiEncounter[i] == IN_PROGRESS) return true; return false; } |
15.03.2010, 21:25 | #5 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 64
Сказал(а) спасибо: 23
Поблагодарили 10 раз(а) в 5 сообщениях
|
Сначало нужно сам запрос ввести наверно. Ведь задачу то мы поставим, а ссылаться IsEncounterInProgress куда будет? в ядре то не реализовано. К томуже:
Код:
bool IsEncounterInProgress() const { for (uint8 i = 0; i < ENCOUNTERS; ++i) if (mEncounter[i] == IN_PROGRESS) return true; return false; } |
16.03.2010, 19:56 | #6 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
Как-то так:
http://github.com/zergtmn/mangos/com...6b630a869bed71 Есть один неприятный баг: если во время боя игрока выкинет из игры, при входе его портнет ко входу в инст. |
Пользователь сказал cпасибо: | selector (16.03.2010) |
16.03.2010, 22:19 | #7 | |
Пользователь
Регистрация: 12.03.2010
Сообщений: 64
Сказал(а) спасибо: 23
Поблагодарили 10 раз(а) в 5 сообщениях
|
Цитата:
В Ульде, Огненых недрах, Каражане после фулл вайпа игроки не могут войти - пишет что бой все еще идет. СД2 проверил там боссы останавливаются как и должны. Остальные инсты проверяю и ищу закономерность. |
|
16.03.2010, 22:22 | #8 | |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
Цитата:
Надо проверить, чтобы после вайпа правильно устанавливалось состояние энкаунтера (FAIL, либо NOT_STARTED) В огненных недрах вообще: Код:
bool IsEncounterInProgress() const { return false; } Последний раз редактировалось zergtmn; 16.03.2010 в 22:28. |
|
16.03.2010, 23:07 | #9 |
Пользователь
Регистрация: 12.03.2010
Сообщений: 64
Сказал(а) спасибо: 23
Поблагодарили 10 раз(а) в 5 сообщениях
|
Да точно, скрипты кривые. Хех, пойду доправлять.
|
18.03.2010, 18:42 | #10 |
RMDC Donator
Регистрация: 07.03.2010
Адрес: Россия
Сообщений: 29
Сказал(а) спасибо: 16
Поблагодарили 18 раз(а) в 3 сообщениях
|
Как успехи? Много ли подобных "корявых" скриптов в нынешнем SD2?
|
18.03.2010, 19:08 | #11 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
Вообще проверку надо делать до телепортации в инст. Сейчас игрока сначала портует в инст, потом если идет бой, его выкидывает обратно (видно по полосе загрузки).
Дорабатывать патч мне пока некогда. |
20.04.2010, 01:38 | #12 |
Новичок
Регистрация: 13.03.2010
Адрес: Самара
Сообщений: 20
Сказал(а) спасибо: 13
Поблагодарили 2 раз(а) в 1 сообщении
Записей в дневнике: 1
|
Не знаю как именно это реализованно на офе со стороны сервера, но добавлю, что при попытке войти духом в инст во время боя игрок воскрешается и остается с полХП у входа в инст (полоса загрузки кстати тоже появляется), при этом выскакивает соответствующее собщение.
И еще, к слову, в цлк есть еженедельне квесты, по одному из квестов необходимо убить дополнительного босса. Так вот этот босс боссом по сути не является, и во время боя с ним умершие игроки запросто заходят в данж. Это же относится к любым мобам. Не пускает исключительно в случае боя с одним из постоянных боссов. Это так, на всякий случай инфа. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[10123] Fixed recent problem with enter to dungeons in group. | newsbot | CMaNGOS Commits | 0 | 29.06.2010 23:50 |
[10113] Some cleanups in Instance loading code. | newsbot | CMaNGOS Commits | 0 | 27.06.2010 19:32 |
Send SMSG_CORPSE_NOT_IN_INSTANCE if player in ghost form tries to enter an instance without player's | newsbot | CMaNGOS Commits | 0 | 27.05.2010 22:00 |
instance.data | Imprtat | Новичкам | 3 | 12.05.2010 15:31 |