YTDB

YTDB (http://ytdb.ru/index.php)
-   Патчи (http://ytdb.ru/forumdisplay.php?f=26)
-   -   Испытание Великого Крестоносца (http://ytdb.ru/showthread.php?t=1940)

griffonheart 01.01.2010 20:43

Испытание Великого Крестоносца
 
Есть желающие заняться скриптами боссов в этом инсте?
А то у меня есть некоторые наработки на этот счёт. Я частично реализовал ивент с призывом боссов по очереди, основываясь на снифах, разумеется :)
Вот некоторые данные - http://paste2.org/p/589135

timmit 02.01.2010 17:04

http://www.wowhead.com/?spell=67924
цепи у джараксуса при вайпе рейда
Цитата:

When you wipe, this is cast on Jaraxxus so that you have time to position before the pull. Also, it's probably there so that a Man'ari Eredar doesn't go bat-*!@# crazy and kill more gnomes.

griffonheart 04.01.2010 07:16

Выход боссов полностью близлайк (ну процентов на 99% точно)
1) Запускаем ивент у Барретт Ремси
2) Тирион базарит нужные фразы
3) Открываются ворота
4) Выходит босс
5) Закрываются ворота
В финале выходит Король Лич и замогильным голосом объявляет, что нирубианци построили целую империю под льдами Нордскола, после чего рушит пол.
Все игроки проваливаются вместе с летящими осколками пола вниз, где их приветствует Ануб'Арак

Konctantin 04.01.2010 11:48

не подскажите структуру пакета SMSG_MESSAGECHAT, у меня чего-то никак не получается ее подобрать, пробовал с мангоса и с клиента - никак не могу понять что ему надо:
PHP код:

"MSGTYPE: {0}"gr.ReadByte();
"LENGUAGE: {0}"gr.ReadUInt32();
"GetGUID: {0}"gr.ReadPackedGuid();
"HZ: {0}"gr.ReadUInt32();
"NAME_LENGHT: {0}"gr.ReadUInt32();
"NAME: {0}"gr.ReadCString();
var 
gr.ReadUInt64();
"TARGET_GUID: {0}"g;
// а дальше я незнаю, просто не пойму что да как, 
var targetnamelenght = (0) ? gr.ReadUInt32() : 0;
var 
tname = (>0) ? gr.ReadByte() : (byte)0;

"TEXT_LENGHT: {0}"gr.ReadUInt64();
"TEXT: {0}"gr.ReadCString();
"CHAT_TAG: {0}"gr.ReadByte(); 


griffonheart 06.01.2010 09:39

Да, с ней большая беда.
Вот с трупожорки:
Код:

def parse_SMSG_MESSAGECHAT(_stream):
    _msg_type = _stream.getB()
    f01_msg_type = CHAT(_msg_type)
    _lang = _stream.getI()
    f02_lang = LANG(_lang)
   
    if _msg_type in (CHAT_MSG_SAY , CHAT_MSG_PARTY, CHAT_MSG_YELL):
        f03_1_guid1 = hexQ( _stream.getQ() )
        f03_2_lang = LANG(_stream.getI()) #2.1.0
        f04_guid2 = hexQ( _stream.getQ() )
        f05_text_sz = _stream.getI()
        f06_text = _stream.getS(f05_text_sz)
       
    elif _msg_type == CHAT_MSG_CHANNEL:
        f03_guid = hexQ( _stream.getQ() ) #2.1.0
        f04_shit = _stream.getI()        #2.1.0
        f05_chanel = _stream.getSZ()
        f06_guid = hexQ( _stream.getQ() )
        f07_text_sz = _stream.getI()
        f08_text = _stream.getS(f07_text_sz)

    elif _msg_type in (CHAT_MSG_WHISPER, CHAT_MSG_REPLY, CHAT_MSG_GUILD, CHAT_MSG_BG_SYSTEM_HORDE,CHAT_MSG_BG_SYSTEM_ALLIANCE,CHAT_MSG_BG_SYSTEM_NEUTRAL,CHAT_MSG_BATTLEGROUND):
        f03_guid1 = hexQ( _stream.getQ() )
        f05_text_sz = _stream.getI()
        f06_text = _stream.getS(f05_text_sz)
       
    elif _msg_type in (CHAT_MSG_MONSTER_SAY, CHAT_MSG_MONSTER_PARTY, CHAT_MSG_MONSTER_YELL, CHAT_MSG_MONSTER_WHISPER, CHAT_MSG_MONSTER_EMOTE, CHAT_MSG_RAID_BOSS_WHISPER, CHAT_MSG_RAID_BOSS_EMOTE):
        f03_0_guid = _stream.getQ()
        f03_0_guid_hex = hexQ(f03_0_guid)
        f03_1_unk = _stream.getI()            #2.1.0
        f04_name_sz = _stream.getI()
        f05_name = _stream.getS(f04_name_sz)
        f06_TargetGuid = _stream.getQ()
        f06_TargetGuid_hex = hexQ(f06_TargetGuid)
### 2_4_1
        if f06_TargetGuid and (not IS_PLAYER_GUID(f06_TargetGuid_hex)):
            f07_string_unk_sz  = _stream.getI()
            f08_Target_Name = _stream.getS(f07_string_unk_sz)
#####
        f09_text_sz = _stream.getI()
        f10_text = _stream.getS(f09_text_sz)
       
        _entry = ENTRY(f03_0_guid)
        _toMob=0
        _toPlayer=0
        if f06_TargetGuid:
            if IS_PLAYER_GUID(f06_TargetGuid_hex):
                _toPlayer=1
            else:
                _toPlayer=0
                _toMob=ENTRY(f06_TargetGuid)
        _creature_chat_sql = CreatureChatSQL(_entry)
        _creature_chat_sql.AddChat(_msg_type,_lang,_toPlayer,_toMob,f05_name.replace("'", "\\'").replace(chr(0),""),f10_text.replace("'", "\\'").replace(chr(0),""))
        _creature_chat_sql.close()
       
    f20_tag = _stream.getB()
    return dict(sys._getframe().f_locals)

Вот с этим блоком проблема:
Код:

### 2_4_1
        if f06_TargetGuid and (not IS_PLAYER_GUID(f06_TargetGuid_hex)):
            f07_string_unk_sz  = _stream.getI()
            f08_Target_Name = _stream.getS(f07_string_unk_sz)
#####

Часть пакетов парсится нормально только если он есть, другая только если его нет.
Чтобы вытащить все тексты с ИВК, пришлось пасить всё два раза (с блоком и без него)

Konctantin 06.01.2010 09:57

А на чем она написана, на питоне?, уж больно синтаксис похож, скопы определяются отступами.

Мдя, с этим то проблема, проверить значение IS_PLAYER_GUID невозможно, а есть другой вариант, сначала работаем без блока, потом проверяем пропарсили ли мы ввесь пакет и если нет, то тогда парсим его с блоком и только тогда возвращаем значение.
Приду сегодня домой попробую.

YuruY 09.01.2010 20:41

Выхлопал бестолковый флуд (еще замечу попрошаек в теме - "учитаетесь"). =)

Chesterfield 09.01.2010 22:48

Цитата:

Есть желающие заняться скриптами боссов в этом инсте?
Пытался заниматся, возникла трала с инстом, моя тема в соседнем разделе. Если что, с радостью присоединюсь к вам :)

Chesterfield 19.01.2010 23:34

griffonheart а вы можете сказать как вы делали разрушение пола? Я пытался сделать так:
Код:

m_uiFloorGO->SetLootState(GO_READY);
m_uiFloorGO->UseDoorOrButton(10000);

как делал для открытия ворот. Но почему-то пол никак не хочет реагировать на это

Burned 19.01.2010 23:59

Цитата:

Сообщение от Chesterfield (Сообщение 8921)
griffonheart а вы можете сказать как вы делали разрушение пола? Я пытался сделать так:
Код:

m_uiFloorGO->SetLootState(GO_READY);
m_uiFloorGO->UseDoorOrButton(10000);

как делал для открытия ворот. Но почему-то пол никак не хочет реагировать на это

Так у него же тип 33, разрушаемые сооружения. На мангосе оно не работает, как обычно;)

Вот недавно выложили патчик:
http://getmangos.com/community/showt...-%28type-33%29

Chesterfield 20.01.2010 00:07

Сюда патчик кинуть можешь? А то меня туда пускать не хотят :D

Burned 20.01.2010 01:27

Цитата:

Сообщение от Chesterfield (Сообщение 8927)
Сюда патчик кинуть можешь? А то меня туда пускать не хотят :D

http://filebeam.com/80f09fdec047fb0a6397ba61b58e3ff6

griffonheart 21.01.2010 07:21

Цитата:

Сообщение от Chesterfield (Сообщение 8921)
griffonheart а вы можете сказать как вы делали разрушение пола? Я пытался сделать так:
Код:

m_uiFloorGO->SetLootState(GO_READY);
m_uiFloorGO->UseDoorOrButton(10000);

как делал для открытия ворот. Но почему-то пол никак не хочет реагировать на это

Код:

            if (GameObject* pGoFloor = m_pInstance->instance->GetGameObject(m_pInstance->GetData64(GO_ARGENT_COLISEUM_FLOOR)))
            {
                pGoFloor->SetUInt32Value(GAMEOBJECT_DISPLAYID,9060);
                //pGoFloor->SetUInt32Value(GAMEOBJECT_FLAGS,544);
                pGoFloor->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_UNK_10 | GO_FLAG_NODESPAWN)
                pGoFloor->SetUInt32Value(GAMEOBJECT_BYTES_1,8449);
            }


Chesterfield 21.01.2010 11:13

Я проще сделал:)
Код:

                        case PHASE_7:
                                if (Data == IN_PROGRESS)
                                {
                                        m_uiFloorGO->TakenDamage(10000);
                                }

                                m_auiEncounter[6] = Data;
                        break;

И меня ещё пару вопросов интересует:
1. На офе фазы начинаются если говорить с нпц, или при каких-то других условиях?
2. А для ордынских рейдов у вас снифов нету? А то охото кричалки и для урков реализовать :)

`win 21.01.2010 12:30

там сделано, если не ошибаюсь, первые 3 босса НОН_СТОП, а потом после каждого босса эвент активируется разговором с НПС. Или в рейде там так? Я их путаю постоянно :)

Chesterfield 21.01.2010 12:38

Цитата:

там сделано, если не ошибаюсь, первые 3 босса НОН_СТОП
Да, я это реализовал. Интересует начало первого энкаунтера (разговор с нпц или ещё что-то). И если у кого-нибудь есть возможность, снемите подробный ролик, а то все что на ютубе нашел - фигня. Нафиг мне нада смотреть на то, как они героически боссов бьют? :) Самые интерестные места они не снимают(

Shadez 21.01.2010 13:34

1. Говорим анонсеру, что готовы -> старт 1го босса (нордскольские чудовища)
2. Говорим анонсеру, что готовы -> появляется варлок-гнум, призывает Джараксусса
3. Говорим анонсеру, что готовы -> Фордринг объявляет о схватке с чемпионами Серебряного Авангарда. Потом в зависимости от фракции начинает возмущаться Гаррош/Вариан Ринн, противоположная сторона предлагает выпустить своих чемпионов, начинается бой.
После этого боя, емнип, анонсеру ничего не говорим, сразу появляются валькирии.
После смерти валькирий спавнится лич кинг, болтает свою речь и ломает пол колизея.
Цитата:

2. А для ордынских рейдов у вас снифов нету? А то охото кричалки и для урков реализовать
Я, лично, транскрипции звуковых файлов делаю :) Ну нет у меня возможности снифать данные) Да и не умею я это делать.

timmit 21.01.2010 13:49

С каких это пор на Валькириях не надо говорить? НАДО. После Валькирий снова болтаем - он говорит что типо все ок, и тут появляется Лич неожиданно

griffonheart 21.01.2010 16:57

Цитата:

Сообщение от Chesterfield (Сообщение 9063)
1. На офе фазы начинаются если говорить с нпц, или при каких-то других условиях?

Всего базарить с NPC нужно 5 ряз. Эти пять этапов у меня названы как фазы ивента. Подробнее тут - http://paste2.org/p/623916

Цитата:

Сообщение от Chesterfield (Сообщение 9063)
2. А для ордынских рейдов у вас снифов нету?

снифов нету, так подобрал - http://paste2.org/p/623916
Пример:
Цитата:

Они хотели запятнать честь Альянса, они пытались нас оклеветать! Я требую справедливости! Тириорн, позволь моим чемпионам сражаться вместо твоих рыцарей. Мы бросаем вызов Орде!

Shadez 21.01.2010 17:24

Цитата:

Сообщение от timmit (Сообщение 9083)
С каких это пор на Валькириях не надо говорить? НАДО. После Валькирий снова болтаем - он говорит что типо все ок, и тут появляется Лич неожиданно

Значит, кто-то успевал тыкнуть моба раньше)

Chesterfield 22.01.2010 00:05

Ну и для полного близзлайка: какой текст у него в госсип менюхе?)

rodionov12 22.01.2010 12:31

Цитата:

Сообщение от Chesterfield (Сообщение 9126)
Ну и для полного близзлайка: какой текст у него в госсип менюхе?)

помоему: мы готовы сражаться дальше

timmit 22.01.2010 13:02

Там кстати от неудавшегося трая меняется госсип, другие фразы

griffonheart 22.01.2010 18:32

Нашёл 6 ГО Champion's Cache:
195709
195710
195631
195632
195633
195635
И целых 8 ГО Argent Crusade Tribute Chest
195665
195666
195667
195668
195669
195670
195671
195672
Какой из них для какого режима инстанции? :eek:

YuruY 22.01.2010 18:42

Не путать:
Цитата:

195709
195710
Из http://www.wowhead.com/?object=195709
Цитата:

195631
195632
195633
195635
Из http://www.wowhead.com/?object=195631
На названия глянь (сундуков и месторасположения). =)

ЗЫ: Ты еще 8 штук позже найдешь .... :rofl:
ЗЗЫ: Пока писал - уже нашел .... лут в них будет в [531].

Первые по уровню шмота видно.
Krek - помогай, последние и я не разберу с набега (можно также по шмоту: http://www.wowhead.com/?object=195665 - я правильно понимаю?).

Krek 22.01.2010 18:58

Цитата:

Сообщение от griffonheart (Сообщение 9205)
Нашёл 6 ГО Champion's Cache:
195709
195710
195631
195632
195633
195635
И целых 8 ГО Argent Crusade Tribute Chest
195665
195666
195667
195668
195669
195670
195671
195672
Какой из них для какого режима инстанции? :eek:

Champion's Cache
195709 - Trial of the Champion Normal
195710 - Trial of the Champion Heroic

Champions' Cache
195631 - Trial of the Crusader Normal 10
195632 - Trial of the Crusader Normal 25
195633 - Trial of the Crusader Heroic 10
195635 - Trial of the Crusader Heroic 25

Argent Crusade Tribute Chest
195665 - Trial of the Crusader Heroic 10 Попытки 1-24
195666 - Trial of the Crusader Heroic 10 Попытки 25-44
195667 - Trial of the Crusader Heroic 10 Попытки 45-49
195668 - Trial of the Crusader Heroic 10 Попытки 50
195669 - Trial of the Crusader Heroic 25 Попытки 1-24
195670 - Trial of the Crusader Heroic 25 Попытки 25-44
195671 - Trial of the Crusader Heroic 25 Попытки 45-49
195672 - Trial of the Crusader Heroic 25 Попытки 50

griffonheart 22.01.2010 19:08

Цитата:

Сообщение от Krek (Сообщение 9208)
Argent Crusade Tribute Chest
195665 - Trial of the Crusader Heroic 10 Попытки 1-24
195666 - Trial of the Crusader Heroic 10 Попытки 25-44
195667 - Trial of the Crusader Heroic 10 Попытки 45-49
195668 - Trial of the Crusader Heroic 10 Попытки 50
195669 - Trial of the Crusader Heroic 25 Попытки 1-24
195670 - Trial of the Crusader Heroic 25 Попытки 25-44
195671 - Trial of the Crusader Heroic 25 Попытки 45-49
195672 - Trial of the Crusader Heroic 25 Попытки 50

Имеется ввиду, сколько попыток осталось? или сколько попыток истрачено?

Chesterfield 22.01.2010 19:16

Цитата:

Сообщение от griffonheart (Сообщение 9212)
Имеется ввиду, сколько попыток осталось? или сколько попыток истрачено?

И как эти попытки считаются? По входу в инст?

timmit 22.01.2010 19:31

По вайпам за сейв

Krek 22.01.2010 21:16

Вот тут чтото про попытки:
http://www.wowwiki.com/Trial_of_the_...#Tribute_Chest

"Trial of the Crusader Heroic 25 Попытки 50" содержит самый лучший шмот, значит это оставшиеся попытки.

griffonheart 23.01.2010 06:21

Цитата:

Сообщение от Chesterfield (Сообщение 9214)
И как эти попытки считаются? По входу в инст?

По умолчанию 50 попыток. Вайп и одной попыткой меньше
Код:

    UPDATE_STATE_UI_SHOW            = 4390,
    UPDATE_STATE_UI_COUNT          = 4389,
    void OnPlayerEnter(Player *m_player)
    {
        if (instance->GetDifficulty() == RAID_DIFFICULTY_10MAN_HEROIC || instance->GetDifficulty() == RAID_DIFFICULTY_25MAN_HEROIC)
        {
            m_player->SendUpdateWorldState(UPDATE_STATE_UI_SHOW,1);
            m_player->SendUpdateWorldState(UPDATE_STATE_UI_COUNT,GetData(ENCOUNTER_SPECIAL1));
        }
    }


Chesterfield 23.01.2010 06:57

griffonheart, а вы ещё не придумали как считать вайпы?)

add: судя по названия сундуков, как я понял на гере 2 сундука спавнятся. Это так?

Chesterfield 23.01.2010 23:20

Кстати, в ИК ворота не той стороной стоят) Они открываются внутрь, а должны наоборот :)

griffonheart 25.01.2010 06:31

Цитата:

Сообщение от Chesterfield (Сообщение 9263)
griffonheart, а вы ещё не придумали как считать вайпы?)

По EnterEvade босса. Насколько это правильно - покажет практика, но пока что так.

Цитата:

Сообщение от Chesterfield (Сообщение 9263)
add: судя по названия сундуков, как я понял на гере 2 сундука спавнятся. Это так?

Попытки считаются только в героиках. Первый сундук идёт после убийства pvp-боссов (как и на нормале), второй - после ануб-арака (только на героике)

Chesterfield 25.01.2010 10:50

Цитата:

По EnterEvade босса. Насколько это правильно - покажет практика, но пока что так.
Идея неплохая, но получается при начале битвы с каждым боссом, счетчик будет уменьшатся на 1, а я как понял этого не должно быть.

add: у меня тут появилась идея, а если в KilledUnit() обрабатывать полностью группу, и проверять, все ли члены пати мертвые?

add: Вобщем вот что набросал :)
Код:

        bool OnRaidWipe()
        {
                Map::PlayerList const &players = instance->GetPlayers();

                for (Map::PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
                {
                        if(Player* pPlayer = i->getSource())
                        {
                                if(pPlayer->isAlive())
                                        return false;
                        }
                }

                return true;
        }

И вопросег)
Те колонки, которые вы приводили для INIT_WORLD_STATE они соответствуют тем, которые у UPDATE_WORLD_STATE?

Fedia22 25.01.2010 11:17

Цитата:

Сообщение от Chesterfield (Сообщение 9537)
add: у меня тут появилась идея, а если в KilledUnit() обрабатывать полностью группу, и проверять, все ли члены пати мертвые?

уход в йас блок (1 раз было такое), невидимость у мага, сливание с тенью и т.д абилки приводящие к скидыванию агро так же делают количество попыток -1

Chesterfield 25.01.2010 11:22

Цитата:

уход в йас блок (1 раз было такое), невидимость у мага, сливание с тенью и т.д абилки приводящие к скидыванию агро так же делают количество попыток -1
на офе?

Fedia22 25.01.2010 11:23

ну я только там играю :)
айс блок у меня был на первом боссе кентавре, я ради любопытства забегал в ИВК чтоб сравнить количество хп у босов)) бос подбежал ко мне, ударил 1 раз, и убежал. итог: -1 попытка. ну и остальные абилки были заюзаны по мере прохождения, доходил до 3 боса :)

timmit 25.01.2010 11:36

А не лучше считать по кол-ву Evade боса?

Shadez 28.01.2010 12:08

Кто-нибудь знает как эссенции (мобов) заставить работать?


Текущее время: 11:44. Часовой пояс GMT +4.

YTDB - MaNGOS DataBase