• Страница 1 из 1
  • 1
Модератор форума: Dimitro  
Проблема в квесте Intercepting The Mana Cells (ядро Oregon)
Stormtrooper
Командир
Всем привет
Требуется помощь
Выяснилась проблема с квестом Intercepting The Mana Cells (ядро Oregon)
GO Smuggled Mana Cells (187039) видны постоянно всем игрокам а должны быть видны только тому игроку который имеет на себе ауру Bash'ir Phasing Device 44856
Подозреваю что проблема в GameObject.cpp - раньше там был bool isVisibleForInState а сейчас его нет
как теперь исправлять данную проблему не представляю
Помогите плиз
Если помог, ставь плюсик в репу :)

Сообщение # 1 написано 02.08.2016 в 16:56
Shkrest
Сержант
Читай hube что изменили история комитов же есть.
Сообщение # 2 написано 04.08.2016 в 18:54
Stormtrooper
Командир
Чё правда всего-то почитать историю коммитов?
Во-первых коммитов гигантское количество и поиском я уже искал когда могли удалить данный кусок кода - ноль результатов
Во-вторых ну увижу я что этот кусок стёрли - дальше что? Я и так знаю что его стёрли
В-третьих hube у тебя в зеркале
Если помог, ставь плюсик в репу :)

Сообщение # 3 написано 04.08.2016 в 19:18
Shkrest
Сержант
Реву ядра скажи.

Добавлено (04.08.2016, 23:03)
---------------------------------------------
А я вот как то нашел коммит в котором убирают это. На репу конечно мне плевать. Но единственный человек который отозвался на твой вопрос и это был я. А ты сразу не за что дал минус 3. Ты как будто не понял про что я сказал hube. GitHub. Я так понял ты не шаришь как искать в коммитах. Мог бы нормально спросить, я бы тебе подсказал как искать. Считаешь себя умнее всех? Нарцисс?

Сообщение # 4 написано 04.08.2016 в 23:03
Stormtrooper
Командир
Повторяю для тех кто реально считает себя самым умным - Я ИСКАЛ В КОММИТАХ
Найти тот в котором удалили этот кусок не удалось и даже если бы нашёл это бы ничего не дало
 p.s слово ХАБ по англ пишется без Е на конце - отсюда и непонимание
Если помог, ставь плюсик в репу :)

Сообщение # 5 отредактировано Stormtrooper - Четверг, 04.08.2016, 23:48
Shkrest
Сержант
Да я был не прав. Смотри на https://bitbucket.org/oregon/oregoncore/commits/b7aa9a0d8d9d059d053a30995f183c0c7210a5d9
Там легко искать что и когда изменилось. Ну так же можно в Git GUI Если пользуешься.
Сообщение # 6 отредактировано Shkrest - Пятница, 05.08.2016, 00:49
Stormtrooper
Командир
Я конечно понимаю - ты хочешь помочь - но честное слово ты читаешь мои ответы?
Я 4 года копаюсь с серверами WOW BC и 2 года из них с Орегоном
Я знаю как отслеживать коммиты но в данной ситуации нахождение коммита в котором удалили этот кусок кода ничего не даст
Мне нужно не пытаться вернуть то что было - мне нужно понять что делать в ТЕКУЩЕМ состоянии ядра чтобы исправить проблему
Откатывать коммиты не вариант так как явно удалён этот кусок был давно и явно вместе с ним улетело в помойку ещё много чего - возвращать всё это слишком трудозатратно а выигрыш будет копеечным
Если помог, ставь плюсик в репу :)

Сообщение # 7 написано 05.08.2016 в 09:09
Ranege
Чемпион
Попытался посмотреть как это работает, насколько понял - объект удаляется для игрока и он его не видит(если он не должен его видеть), если же должен, то объект добавляется куда-то. 

Это нужно разбираться, тестить, писать кучу кода и долго тестить, по крайней мере для меня так)

https://github.com/mangosR2/mangos/blob/98ce5099a7b28cffed1f08423db36a9fa6972143/src/game/Player.cpp#L21157

Ну а вообще думаю нужно смотреть как оно работало ранее и делать что-то такое же. Ещё как вариант попробовать фазы, только не сильно понимаю как они работают и как написать так, чтобы смена фазы для игрока не помешала ему в остальном игровом мире..
Сообщение # 8 написано 05.08.2016 в 10:34
Stormtrooper
Командир
К сожалению в 2.4.3 не было фазирования как такового
Изначально всё было прописано в bool isVisibleForInState
Там была строка что если игрок обладает особым инвиз статусом (который давался квестовым предметом) то он может видеть объекты прописанные в этом bool
Сейчас так не выйдет :(

В коде ниже обратите внимание на строки под // Smuggled Mana Cell required 10 invisibility type detection/state

Код
bool GameObject::isVisibleForInState(Player const* u, bool inVisibleList) const
{
    // Not in world
    if (!IsInWorld() || !u->IsInWorld())
        return false;

    // Transport always visible at this step implementation
    if (IsTransport() && IsInMap(u))
        return true;

    // quick check visibility false cases for non-GM-mode
    if (!u->isGameMaster())
    {
        // despawned and then not visible for non-GM in GM-mode
        if (!isSpawned())
            return false;

        // special invisibility cases
        if (GetGOInfo()->type == GAMEOBJECT_TYPE_TRAP && GetGOInfo()->trap.stealthed)
        {
            Unit *owner = GetOwner();
            if (owner && u->IsHostileTo(owner) && !canDetectTrap(u, GetDistance(u)))
                return false;
        }

        // Smuggled Mana Cell required 10 invisibility type detection/state
        if (GetEntry() == 187039 && ((u->m_detectInvisibilityMask | u->m_invisibilityMask) & (1<<10)) == 0)
            return false;
    }
Если помог, ставь плюсик в репу :)

Сообщение # 9 отредактировано Stormtrooper - Пятница, 05.08.2016, 11:12
Ranege
Чемпион
Ну тут два поля класса соединяются оператором или в одно значение, а проверяется существование в новом значении только одного 11 бита (если считать с единицы), не совсем понимаю зачем объединять, но думаю в них хранятся такие значения, в которых этот бит важен, если бы знал еще какие значения принимают эти поля)

Ну а по сути не важно что выполняет этот метод.. я так думаю. Важнее то, что показал я, а именно то, что будет если он вернет истину или ложь.

Нужно пробовать ревлизовывать этот метод и действия, которые после него выполняются.. это геморой вникать в это, тем более ради чего-то одного, может стоить подумать о каких-то костылях, хаках.. но они могут быть также не очень подходящими и приносить какие-то проблемы игрокам в игровом мире (
Сообщение # 10 написано 05.08.2016 в 23:40
Stormtrooper
Командир
И тем не менее хочется как-то исправить - хоть костылём
Если помог, ставь плюсик в репу :)

Сообщение # 11 написано 08.08.2016 в 14:28
Ranege
Чемпион
Можно поступить следующим образом - объекты же для чего-то нужны? Нажать на объект, подойти к объекту, любые действия и игрок что-то получает, засчитывает кв, получает предмет, что угодно, не суть. Так вот давать ему это только в том случае если у игрока есть необходимая аура. К примеру добавить 2 меню:1) аура есть - выводить получить что-то, 2) нет ауры - на тебе нет ауры. Если же объект ищет рядом игроков - тоже выводить раз в какое-то время сообщение или же выводить один раз его, если же есть аура давать что-то, ну в общем мысль думаю понятно. Да, объект не пропадает и не появляется, это сделать не просто, а добавлять и убирать те же меню в госсипе проблем не составляет.. вот такой вот костыль, зато кв работать будет
Сообщение # 12 написано 10.08.2016 в 12:24
Stormtrooper
Командир
Квест и так работает - дело не в квесте как таковом
Дело в том чтобы заставить объект быть невидимым для всех кроме игрока имеющего соответствующую ауру

в ядре есть такой вот bool делающий объекты невидимыми, однако я не знаю как прикрутить указатель на игрока с аурой:

Код
bool GameObject::IsNeverVisible() const
{
    if (WorldObject::IsNeverVisible())
        return true;

    if (GetGoType() == GAMEOBJECT_TYPE_SPELL_FOCUS && GetGOInfo()->spellFocus.serverOnly == 1)
        return true;   

    return false;
}


if (GetEntry() == 187039)
return true; - делает нужны объект невидимым но как прикрутить сюда проверку игрока с аурой?
Если помог, ставь плюсик в репу :)

Сообщение # 13 отредактировано Stormtrooper - Среда, 10.08.2016, 12:58
Ranege
Чемпион
Объект в самом игровом мире он один для всех игроков, если ты его и сделаешь невидимым, то его все не увидят. А делать для некоторых - это тоже самое, что и делать фазы или восстанавливать то, что было в ядре ранее(что ты говорил убралось). 

Если же ты поставишь объект в подземелье, то при каждой инициализации подземелья будет создаваться новый объект и видеть его будут в каждом подземелье по-разному. К примеру, сделать максимальное кол-во в каком-либо подземелье - 1 человек. Написать скрипт
Код
Map* map = go->GetMap();
            Map::PlayerList const &PlayerList = map->GetPlayers();
            if (!PlayerList.isEmpty())
            {
                   for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
                   {
                          if (((i->getSource()))->IsInRange((go),0,200))
                          {
            if(i->getSource()->HaseAura(ID))
                go->IsNeverVisible();
            else
                видим;
        }
    }
}

или же

    
Код
Player *targ = go>FindNearestPlayer(80.0f, true);
     if(i->getSource()->HaseAura(ID))
                go->IsNeverVisible();
            else
                видим;

В одном подземелье объект может быть виден игроку, а во втором нет. У каждого игрока свой объект и своя видимость, что не скажешь о глобальном мире(не подземелье), там один объект для всех. Функции, конечно, сам будешь свои подбирать, это с 3.3.5, но не суть, не факт, что поможет, но как вариант.. или же делать то(isVisibleForInState)+действия при возвращении true и false, или фазы..
Сообщение # 14 написано 10.08.2016 в 14:19
Stormtrooper
Командир
Это ни разу не поможет по 2 причинам
1) в TBC не было ещё скриптов для GO связанных с чем-то кроме GossipHELLO
2) Объект как раз в мире а не в подземелье и его не должен видеть никто кроме игроков с аурой по квесту - отсюда и вопрос как в приведёттый выше bool добавить ссылку на игрока

Добавлено (10.08.2016, 17:55)
---------------------------------------------
спасибо за попытку помочь - сам разобрался
как выяснилось фикс вообще не там где я искал

Если помог, ставь плюсик в репу :)

Сообщение # 15 написано 10.08.2016 в 17:55
Shkrest
Сержант
Проблема не в конкретном кв. А в принципе их действия. Ждать пока разработчики поправят этот недочет. Так как ты мог заметить там 5 мест откуда убрано это булево. Это не так мало. Не доделали принцип. Остается только ждать Падре.
Сообщение # 16 написано 13.08.2016 в 17:26
  • Страница 1 из 1
  • 1
Поиск: