YTDB

Вернуться   YTDB > Баг-репорты (Патчи) / Bug reports (Patches) 4.3.4 > Заселение / NPCs

Заселение / NPCs Ошибки заселения.
Переставить моба или объект, проверить его снарягу, статистику и т.п. - в этом разделе.

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.05.2014, 23:45   #1
Chaosua
Helper TC_YTDB
 
Аватар для Chaosua
 
Регистрация: 09.11.2009
Адрес: интернет
Сообщений: 352
Сказал(а) спасибо: 69
Поблагодарили 348 раз(а) в 158 сообщениях
Chaosua Реально хороший человекChaosua Реально хороший человекChaosua Реально хороший человекChaosua Реально хороший человек
Отправить сообщение для Chaosua с помощью ICQ Отправить сообщение для Chaosua с помощью Skype™
По умолчанию Trinity Заселение ЦЛК (чиcтка 335+434)

Уже давно хотел про это написать, да все забывал, пока игроки опять не затянули в цлк

в коде тринити есть такая штука в instance_icecrown_citadel.cpp
Код:
                    case NPC_KOR_KRON_GENERAL:
                        if (TeamInInstance == ALLIANCE)
                            creature->UpdateEntry(NPC_ALLIANCE_COMMANDER);
                        break;
                    case NPC_KOR_KRON_LIEUTENANT:
                        if (TeamInInstance == ALLIANCE)
                            creature->UpdateEntry(NPC_SKYBREAKER_LIEUTENANT);
                        break;
                    case NPC_TORTUNOK:
                        if (TeamInInstance == ALLIANCE)
                            creature->UpdateEntry(NPC_ALANA_MOONSTRIKE);
                        break;
                    case NPC_GERARDO_THE_SUAVE:
                        if (TeamInInstance == ALLIANCE)
                            creature->UpdateEntry(NPC_TALAN_MOONSTRIKE);
                        break;
                    case NPC_UVLUS_BANEFIRE:
                        if (TeamInInstance == ALLIANCE)
                            creature->UpdateEntry(NPC_MALFUS_GRIMFROST);
                        break;
                    case NPC_IKFIRUS_THE_VILE:
                        if (TeamInInstance == ALLIANCE)
                            creature->UpdateEntry(NPC_YILI);
                        break;
                    case NPC_VOL_GUK:
                        if (TeamInInstance == ALLIANCE)
                            creature->UpdateEntry(NPC_JEDEBIA);
                        break;
                    case NPC_HARAGG_THE_UNSEEN:
                        if (TeamInInstance == ALLIANCE)
                            creature->UpdateEntry(NPC_NIBY_THE_ALMIGHTY);
                        break;
                    case NPC_GARROSH_HELLSCREAM:
                        if (TeamInInstance == ALLIANCE)
                            creature->UpdateEntry(NPC_KING_VARIAN_WRYNN);
                        break;
                    case NPC_DEATHBRINGER_SAURFANG:
                        DeathbringerSaurfangGUID = creature->GetGUID();
                        break;
                    case NPC_ALLIANCE_GUNSHIP_CANNON:
                    case NPC_HORDE_GUNSHIP_CANNON:
                        creature->SetControlled(true, UNIT_STATE_ROOT);
                        break;
                    case NPC_SE_HIGH_OVERLORD_SAURFANG:
                        if (TeamInInstance == ALLIANCE)
                            creature->UpdateEntry(NPC_SE_MURADIN_BRONZEBEARD, creature->GetCreatureData());
                        // no break;
                    case NPC_SE_MURADIN_BRONZEBEARD:
                        DeathbringerSaurfangEventGUID = creature->GetGUID();
                        creature->LastUsedScriptID = creature->GetScriptId();
                        break;
                    case NPC_SE_KOR_KRON_REAVER:
                        if (TeamInInstance == ALLIANCE)
                            creature->UpdateEntry(NPC_SE_SKYBREAKER_MARINE);
                        break;
все эти апдейты темплейта рабтают на ТДБ на ура.
Весь принцип в следующем:
1. В цлк есть мобы которые видны лиш одной фракции. В результате образовались пары мобов которые не пересекаются.
2. Скрипт проверяет фракцию и на соответствующем условии меняет темплейт моба на противоположный в паре
Скрипт сделан так что нужно заселение "пары" только для одной стороны (в нашем случае - орда), противоположная сторона получит противоположного моба из пары автоматически. (прямо как на оло)
Следовательно уменьшается количество записей в базе, меньше нагрузка на память ну и все вытекающие.
К чему я все это пишу? на YTDB заспавнены эти "парные мобы" для обеих сторон в фазах 64 и 128 изза чего скрипт работает очень странно иногда, то ивент не активируется то мобов слишком много.
Что надо сделать чтобы этого не было. - удалить все заселение парных комплектов для альянса, а ордынской половине прописать первую фазу, чтобы скрипт мог адекватно работать по инструкции. В том куске кода наглядно видно какие мобы образуют парность.

Код:
DELETE FROM `creature` WHERE `map`=631 AND `id` IN (37190, 38492, 37999, 37998, 38283, 37997, 38840, 38182, 39371);
UPDATE `creature` SET `phaseMask`=1 WHERE `map`=631 AND `id` IN (37189, 38491, 37992, 37993, 38284, 37991, 38841, 38181, 39372);
PS: эти черти склетоны http://ru.wowhead.com/npc=37007 должны стоять пока ловушку не активируют, на 4,3,4 они бродят
http://www.ytdb.ru/showthread.php?t=...ighlight=37007 тут уже писали
Плюс надо поправить координаты спавна под стойки для них, так как они все почти по центру коридора фактически заспавнены, если мне не изменяет память на 335 они правильно стояли.
Код:
UPDATE `creature` SET `MovementType` = 0 WHERE `id` = 37007;
#колонка emote=417 отменяет ауру - зануляем
Код:
DELETE FROM `creature_template_addon` WHERE (`entry`=37007);
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES 
(37007, 0, 0, 0, 0, 0, 70733);
DELETE FROM `creature_template_addon` WHERE (`entry`=38031);
INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `auras`) VALUES 
(38031, 0, 0, 0, 0, 0, 70733);
__________________
и взгляда малого хватает, дабы увидеть тьму твою

Последний раз редактировалось Chaosua; 21.05.2014 в 00:22.
Chaosua вне форума   Ответить с цитированием
Старый 21.05.2014, 05:47   #2
YuruY
YTDB dev
 
Аватар для YuruY
 
Регистрация: 05.11.2009
Адрес: Thunder Bluff
Сообщений: 3,625
Сказал(а) спасибо: 7,839
Поблагодарили 3,255 раз(а) в 498 сообщениях
YuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспоримаYuruY Репутация неоспорима
По умолчанию

Цитата:
эти черти склетоны http://ru.wowhead.com/npc=37007 должны стоять пока ловушку не активируют, на 4,3,4 они бродят
Поинты до кучи надо удалять у них тогда, ато смысла от твоей правки нет, финал_ап вернет на место двойку при наличии поинтов у моба.
__________________
Правила написания баг-репортов.
Общие правила поведения - рекомендуемые исключительно всем для прочтения.
YuruY вне форума   Ответить с цитированием
Старый 21.05.2014, 14:39   #3
Ulduar
Ученый
 
Регистрация: 23.11.2012
Сообщений: 196
Сказал(а) спасибо: 69
Поблагодарили 16 раз(а) в 16 сообщениях
Ulduar На верном пути
По умолчанию

Цитата:
Поинты до кучи надо удалять у них тогда, а то смысла от твоей правки нет, финал_ап вернет на место двойку при наличии поинтов у моба.
Поинты у них должны быть, просто они должны активироваться ловушкой, а иначе должны стоять на месте. На Мангосе я делал обработку через db_script_on_event, правда по гуидам стражей, по другому никак.
Chaosua скажите разрабам, чтобы поправили скрипт, а то у вас на Трине после активации ловушки Стражи не то что по вайпоинтам не ходят, а тупо вступают в бой, что является ошибкой.
Код:
class spell_icc_sprit_alarm : public SpellScriptLoader
{
    public:
        spell_icc_sprit_alarm() : SpellScriptLoader("spell_icc_sprit_alarm") { }

        class spell_icc_sprit_alarm_SpellScript : public SpellScript
        {
            PrepareSpellScript(spell_icc_sprit_alarm_SpellScript);

            void HandleEvent(SpellEffIndex effIndex)
            {
                PreventHitDefaultEffect(effIndex);
                uint32 trapId = 0;
                switch (GetSpellInfo()->Effects[effIndex].MiscValue)
                {
                    case EVENT_AWAKEN_WARD_1:
                        trapId = GO_SPIRIT_ALARM_1;
                        break;
                    case EVENT_AWAKEN_WARD_2:
                        trapId = GO_SPIRIT_ALARM_2;
                        break;
                    case EVENT_AWAKEN_WARD_3:
                        trapId = GO_SPIRIT_ALARM_3;
                        break;
                    case EVENT_AWAKEN_WARD_4:
                        trapId = GO_SPIRIT_ALARM_4;
                        break;
                    default:
                        return;
                }

                if (GameObject* trap = GetCaster()->FindNearestGameObject(trapId, 5.0f))
                    trap->SetRespawnTime(trap->GetGOInfo()->GetAutoCloseTime());

                std::list<Creature*> wards;
                GetCaster()->GetCreatureListWithEntryInGrid(wards, NPC_DEATHBOUND_WARD, 150.0f);
                wards.sort(Trinity::ObjectDistanceOrderPred(GetCaster()));
                for (std::list<Creature*>::iterator itr = wards.begin(); itr != wards.end(); ++itr)
                {
                    if ((*itr)->IsAlive() && (*itr)->HasAura(SPELL_STONEFORM))
                    {
                        (*itr)->AI()->Talk(SAY_TRAP_ACTIVATE);
                        (*itr)->RemoveAurasDueToSpell(SPELL_STONEFORM);
                        if (Unit* target = (*itr)->SelectNearestTarget(150.0f))
                            (*itr)->AI()->AttackStart(target);
                        break;
                    }
                }
            }
Emote вы правильно занулили, в spell_script есть обработка.
Код:
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                if (Creature* target = GetTarget()->ToCreature())
                {
                    target->SetReactState(REACT_PASSIVE);
                    target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
                    target->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_CUSTOM_SPELL_02);
                }
            }

            void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                if (Creature* target = GetTarget()->ToCreature())
                {
                    target->SetReactState(REACT_AGGRESSIVE);
                    target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
                    target->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
                }
            }
__________________
Ты кто? Зёбра! Ктооооооо?!
Ulduar вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
4.3.4 trinity VENOM Корзина / Trash can 5 07.03.2013 22:16
YTDB Trinity 4.3.4 Mentyr Корзина / Trash can 2 30.11.2012 13:40
Заселение Borodatych Корзина / Trash can 8 11.03.2012 12:45


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


YTDB - MaNGOS DataBase

Русский форум Мангос - официальный форум RMDC

Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума YTDB будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot
Punk's On-Air - Punk, Folk, Blues, Ska Bascinet - реконструкция denw IL-2 Training Книготорговая Компания «А-5» - художественная, учебная литература, скидки, опт и мелкий опт, доставка, дешево, низкие цены издательства