• Страница 1 из 1
  • 1
Архив - только для чтения
Модератор форума: andycrowz  
Форум » Корзина форума » Корзина » Проблема в скрипте Иллидана (Oregon Core) (С++)
Проблема в скрипте Иллидана (Oregon Core)
Stormtrooper
Командир
Приветствую форумчане
Есть проблемка
Копаюсь со скриптом в boss_illidan.cpp
Как думаю многие знают - площадку перед Иллиданом в БТ от лестниц отгораживают 2 ворот (горизонтальные прутья с зелёным свечением между ними)
Так вот я заметил что при начале разговора Акамы и Иллидана закрываются только 1 ворота "Doodad_BT_Illidan_Door_Right01 (186261)" а вторые "Doodad_BT_Illidan_Door_Left01 (186262)" остаются распахнутыми
Что я только ни делал (даже пытался насильно прописывать их обнаружение и активацию) - ничего не помогает - отрабатывают только правые ворота - левые неподвижны
Более того в коде указано что обе воротины должны быть закрыты до начала скрипта - но когда я проверил оказалось что закрыты опять только правые
Вот кусок кода отвечающий за это:

Код

В хедере:

DATA_GAMEOBJECT_ILLIDAN_DOOR_R  = 23,
DATA_GAMEOBJECT_ILLIDAN_DOOR_L  = 24,

В СРР:

uint64 DoorGUID[2];

      void Reset()
      {
          WalkCount = 0;
          if (pInstance)
          {
              pInstance->SetData(DATA_ILLIDANSTORMRAGEEVENT, NOT_STARTED);

              IllidanGUID = pInstance->GetData64(DATA_ILLIDANSTORMRAGE);
              GateGUID = pInstance->GetData64(DATA_GAMEOBJECT_ILLIDAN_GATE);
              DoorGUID[0] = pInstance->GetData64(DATA_GAMEOBJECT_ILLIDAN_DOOR_R);
              DoorGUID[1] = pInstance->GetData64(DATA_GAMEOBJECT_ILLIDAN_DOOR_L);

              if (JustCreated)  //close all doors at create
              {
                  pInstance->HandleGameObject(GateGUID, false);

                  for (uint8 i = 0; i < 2; ++i)
                      pInstance->HandleGameObject(DoorGUID[i], false);
              } else
              {   //open all doors, raid wiped


Подскажите плиз в чём может быть проблема?

Так же есть проблема - Иллидан в фазе полёта не всегда летает
Тоесть взлететь он взлетает но при любой остановке он не висит в воздухе и падает обратно на землю - и получается что он не летит а скачет как козёл
смена флагов не помогла - ставил все какие только можно а SetLevitate(true) вообще рушит скрипт (он тупо не запускается - Акама отказывается ломать ворота к Иллидану - стоит и нифига не делает)
Если помог, ставь плюсик в репу :)

Сообщение # 1 отредактировано Stormtrooper - Понедельник, 21.07.2014, 20:34
_dm666
<3 Death Metal
Обычно такое обрабатывается не в скрипте босса, а в скрипте инста, ты смотрел скрипт бт?
Сообщение # 2 написано 22.07.2014 в 01:13
_dm666
<3 Death Metal
Сообщение # 3 написано 22.07.2014 в 01:16
Stormtrooper
Командир
как и в твоём примере так и в моём ядре - в этом файле нет обработки дверей - лишь их объявление
case GO_ILLIDAN_DOOR_R:
IllidanDoorGUIDs[0] = go->GetGUID();
break;
case GO_ILLIDAN_DOOR_L:
IllidanDoorGUIDs[1] = go->GetGUID();
break;

case DATA_GO_ILLIDAN_DOOR_R:
return IllidanDoorGUIDs[0];
case DATA_GO_ILLIDAN_DOOR_L:
return IllidanDoorGUIDs[1];
Если помог, ставь плюсик в репу :)

Сообщение # 4 отредактировано Stormtrooper - Вторник, 22.07.2014, 09:11
_dm666
<3 Death Metal
Цитата Stormtrooper ()
в этом файле нет обработки дверей - лишь их объявление

В instance_black_temple.cpp есть обработка, получаем GUID при создании.
Код
void OnGameObjectCreate(GameObject* go)
         {
             switch (go->GetEntry())
             {
           // ......................................
             case 186261:
                 IllidanDoor[0] = go->GetGUID(); // Right door at Temple Summit
                 break;

             case 186262:
                 IllidanDoor[1] = go->GetGUID(); // Left door at Temple Summit
                 break;
             }
         }
Сообщение # 5 написано 22.07.2014 в 11:39
Stormtrooper
Командир
А толку-то?
ну получили мы GUID а дальше?

Вот мои:
case 186261: IllidanDoor[0] = pGo->GetGUID(); break; // Right door at Temple Summit
case 186262: IllidanDoor[1] = pGo->GetGUID(); break; // Left door at Temple Summit
Если помог, ставь плюсик в репу :)

Сообщение # 6 написано 22.07.2014 в 11:53
_dm666
<3 Death Metal
Цитата Stormtrooper ()
А толку-то?

Далее получаем GUID через ф-ию instance->GetData64.
Код
uint64 GetData64(uint32 identifier) const
         {
             switch (identifier)
             {
             case DATA_HIGHWARLORDNAJENTUS:         return Najentus;
             case DATA_AKAMA:                       return Akama;
             case DATA_AKAMA_SHADE:                 return Akama_Shade;
             case DATA_SHADEOFAKAMA:                return ShadeOfAkama;
             case DATA_SUPREMUS:                    return Supremus;
             case DATA_ILLIDANSTORMRAGE:            return IllidanStormrage;
             case DATA_GATHIOSTHESHATTERER:         return GathiosTheShatterer;
             case DATA_HIGHNETHERMANCERZEREVOR:     return HighNethermancerZerevor;
             case DATA_LADYMALANDE:                 return LadyMalande;
             case DATA_VERASDARKSHADOW:             return VerasDarkshadow;
             case DATA_ILLIDARICOUNCIL:             return IllidariCouncil;
             case DATA_GAMEOBJECT_NAJENTUS_GATE:    return NajentusGate;
             case DATA_GAMEOBJECT_ILLIDAN_GATE:     return IllidanGate;
             case DATA_GAMEOBJECT_ILLIDAN_DOOR_R:   return IllidanDoor[0];
             case DATA_GAMEOBJECT_ILLIDAN_DOOR_L:   return IllidanDoor[1];
             case DATA_GAMEOBJECT_SUPREMUS_DOORS:   return MainTempleDoors;
             case DATA_BLOOD_ELF_COUNCIL_VOICE:     return BloodElfCouncilVoice;
             }

             return 0;
         }

И привязываешь к своей переменной значение нужной тебе даты.
Сообщение # 7 написано 22.07.2014 в 11:58
Stormtrooper
Командир
и это у меня тоже на месте
я уже проверял всё что связано с этими воротами - думал GUID где-то не проскакивает но нет - всё на месте
Если помог, ставь плюсик в репу :)

Сообщение # 8 написано 22.07.2014 в 12:18
_dm666
<3 Death Metal
Кстати, открытие дверей происходит не в Reset(), как ты скинул, а в HandleWalkSequence().
И попробуй отправить в консоль GUID'ы дверей при GossipHello у Акамы. (Может, там нет вообще значения).
Сообщение # 9 написано 22.07.2014 в 12:50
Stormtrooper
Командир
В ресете их закрытие
Цитата Stormtrooper ()
Более того в коде указано что обе воротины должны быть закрыты до начала скрипта - но когда я проверил оказалось что закрыты опять только правые


И оно так же не отрабатывает для левой двери

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

Сообщение # 10 отредактировано Stormtrooper - Вторник, 22.07.2014, 12:54
_dm666
<3 Death Metal
Цитата Stormtrooper ()
что там написать?

самый просто способ
Код
printf("%u", DoorGuid[1]);

Цитата Stormtrooper ()
В ресете их закрытие

Упс. Извиняюсь.
Сообщение # 11 написано 22.07.2014 в 13:32
Stormtrooper
Командир
There is no such command
Если помог, ставь плюсик в репу :)

Сообщение # 12 написано 22.07.2014 в 13:50
Dark_Silence
Рыцарь
Ты что прописал в консоль ?)
Разбираюсь в компиляции, и установке серверов с ядрами СMaNGoS и Trinity.
Учусь модкрафтить (DBC-Edit, Локации в Noggit, Конвертирование/редактирование моделей в 3D-Max + Blender).
Интересуюсь технологиями, информатикой, физикой, и многим другим.
Warlocks 'Evil Empire'
Сообщение # 13 написано 22.07.2014 в 14:02
_dm666
<3 Death Metal
Stormtrooper, это не в консоль писать надо)
Цитата _dm666 ()
И попробуй отправить в консоль GUID'ы дверей при GossipHello у Акамы

В GossipHello в самом начале пишешь printf("%u", DoorGuid[1]); В консоль выдаст значение)
Сообщение # 14 написано 22.07.2014 в 14:08
Stormtrooper
Командир
Хых накололи smile
А я тупанул

Однако DoorGUID[1] не определён если его в GossipHello пихать
ядро не скомпилится
Если помог, ставь плюсик в репу :)

Сообщение # 15 отредактировано Stormtrooper - Вторник, 22.07.2014, 14:20
_dm666
<3 Death Metal
Код
CAST_AI(npc_akama_illidan::npc_akama_illidanAI, creature->AI())->EnterPhase(PHASE_CHANNEL);
Получи тогда его так, думаю, что не будет краша. Только перепиши немного, так как тебе не нужен запуск фазы)
Сообщение # 16 написано 22.07.2014 в 14:26
Stormtrooper
Командир
Я пока попробую вставить вывод GUID в консоль в момент начала разговора Акамы и Иллидана - как раз перед скриптом закрытия дверей
Если помог, ставь плюсик в репу :)

Сообщение # 17 написано 22.07.2014 в 14:28
_dm666
<3 Death Metal
Stormtrooper, попробуй так.
Сообщение # 18 написано 22.07.2014 в 14:35
Stormtrooper
Командир
ОФИГЕТЬ!!!!
GUID[1] = 0
НОЛЬ МЛЯЯЯЯЯ!!!!!!!!!!!
Да как же так а?

он не получает гуида от левой двери
ща посмотрю что в том же месте выдаёт правая

Добавлено (22.07.2014, 14:45)
---------------------------------------------
Выдаёт какую-то адскую муть но хотябы не ноль

я в тупике товарищи sad
вроде всё правильно а левая дверь не определяет гуид а у правой какая-то цифровая муть но она работает........

Добавлено (22.07.2014, 15:22)
---------------------------------------------
Такс с дверьми проблему я решил - осталась проблема с полётом Иллидана
Вот тут уж даже хз за что взяться.......
Я заметил что визуальный баг с падением на землю не происходит если Иллидан постоянно находится в движении (специально делал его копию для тестирования)
Однако не очень понятно как заставить его двигаться постоянно и при этом выполнять требования скрипта (кастовать спеллы в определённых местах)
Если помог, ставь плюсик в репу :)

Сообщение # 19 отредактировано Stormtrooper - Вторник, 22.07.2014, 15:24
Dark_Silence
Рыцарь
Как решил?)
Интересно жы)
Разбираюсь в компиляции, и установке серверов с ядрами СMaNGoS и Trinity.
Учусь модкрафтить (DBC-Edit, Локации в Noggit, Конвертирование/редактирование моделей в 3D-Max + Blender).
Интересуюсь технологиями, информатикой, физикой, и многим другим.
Warlocks 'Evil Empire'
Сообщение # 20 написано 22.07.2014 в 15:23
Stormtrooper
Командир
Вопрос с фазой полёта у Иллидана остаётся открытым
я даже в офф репо Орегона тикет написал по этому поводу
Если помог, ставь плюсик в репу :)

Сообщение # 21 написано 23.07.2014 в 15:27
Форум » Корзина форума » Корзина » Проблема в скрипте Иллидана (Oregon Core) (С++)
  • Страница 1 из 1
  • 1
Поиск: