|
Корзина Глупые, устаревшие, неактуальные темы будут тут. Сюда сливается весь треш форума. Если ваш пост оказался здесь, подумайте - стоит ли еще раз писать? |
|
Опции темы | Поиск в этой теме | Опции просмотра |
24.09.2010, 15:36 | #1 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
spell1..spell4
В настоящий момент (10526) они используются для (1) generic_creature AI и для (2) экшн-баров контролируемых существ.
Для (2) случая 4-х слотов не достаточно. Пример (possesed): Случай без команды "Атаковать": Пример (vehicle): Уникальный случай с командой "Атаковать": Вижу 2 выхода: 1. Отказаться от устаревшего generic_creature в пользу ACID, удалить spell1..spell4 из creature_template, завести новую таблицу для хранения экшн баров. 2. Добавить столбцы spell5..spellN, где в 99% случаев будут нули. Если 1 вариант устраивает, могу подготовить патч. Update: spell1 еще для тотемов используется, куда бы его пристроить... Последний раз редактировалось zergtmn; 24.09.2010 в 23:51. |
24.09.2010, 15:56 | #2 |
Пользователь
Регистрация: 07.03.2010
Сообщений: 46
Сказал(а) спасибо: 11
Поблагодарили 17 раз(а) в 11 сообщениях
|
С точки зрения теории нормализации БД второй вариант не подходит
|
24.09.2010, 16:01 | #3 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Я уже пробовал вариант с загрузкой спеллов из отдельной таблицы базы. В принципе работает, но сервер грузится в разы медленнее.
|
24.09.2010, 16:02 | #4 |
YTDB Dev
Регистрация: 01.02.2010
Сообщений: 288
Сказал(а) спасибо: 125
Поблагодарили 97 раз(а) в 53 сообщениях
|
Зато не плодит таблиц (ну и ответ выше).
|
24.09.2010, 16:09 | #5 |
Администратор
|
Отдельная таблица, если она действительно необходима, придаст гибкости, т.к. не будет жесткого ограничения в 4 значения.
У некоторых нпц вообще не будет записей. Если на скорости работы это не сказывается, то скоростью загрузки можно пренебречь. |
24.09.2010, 16:15 | #6 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
|
24.09.2010, 16:25 | #7 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Если точнее то раз в 8 при использовании конката таблиц, и процентов на 20 при использовании отдельной карты std::vector-ов спеллов, но во втором случае надо сильно перекраивать существующие объекты и работу с ними.
PS у меня консоли нету совсем... на /dev/null назначена. |
24.09.2010, 16:32 | #8 |
Администратор
|
Я как-то поднимал вопрос о том, чтобы в отдельную таблицу вынести цели квестов, касты, вознаграждения и т.д., на что Владимир ответил, что данные приходят по кешу в такой структуре, поэтому так и останется.
Если кеш по нпц спеллы приходят в 4 полях, то скорее всего их никто никуда не денет. Что касается загрузки в 8 раз дольше, то, возможно, запросы составлены неверно или дальнейшая обработка. |
24.09.2010, 16:49 | #11 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Цитата:
Код:
class CreatureTemplate { public int Entry; public string Name; public string SubName; public string IconName; public uint TypeFlag; public uint Type; public int Family; public uint Rank; public uint[] KillCredit = new uint[2]; public uint[] ModelId = new uint[4]; public float HealthModifier; public float PowerModifier; public sbyte RacialLeader; public uint[] QuestItem = new uint[6]; public uint MovementId; } |
|
24.09.2010, 19:50 | #12 | |
Администратор
|
Цитата:
Я бы на парсере сделал так: 1. Выбираем одним запросом всех нпц и все спеллы по ним. В итоге получаем на каждого нпц одну строку, в которой в отдельном поле были бы коды спеллов через запятую. 2. Из поля с кодами спеллов брал бы значение и получал бы все спеллы нпц. Насчет сишника не могу сказать, как лучше будет сделать. |
|
04.06.2011, 14:21 | #13 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Судя по всему ждать решения проблемы от тима не приходится, предлагаю свое -
https://github.com/mangosR2/mangos/c...c4e12378cfa6c6 работает нормально. поля из creature_template пока не удалял, потом прибью. |
04.06.2011, 14:39 | #14 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
|
04.06.2011, 15:00 | #16 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
У меня была мысль сделать таблицу:
Код:
entry actionbar_index spell1 spell2 spell3 spell4 spell5 spell6 Последний раз редактировалось zergtmn; 04.06.2011 в 15:08. |
04.06.2011, 15:23 | #17 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
в этой реализации оно может быть сделано гораздо проще - поле activeState оставлено именно для подобных замен. по умолчанию оно 0 и все идет из основного набора. можно дать наборам 1, 2, 3 соотв. state и подменять их прямо на лету... фантазия не ограничена.
|
04.06.2011, 16:18 | #18 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
Не то. В вашей реализации activeState меняется для всех кричеров с одним entry.
|
04.06.2011, 16:45 | #19 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
однако у темплейта могут быть сколько угодно наборов спеллов с разными activeState. а спелл ищется уже в экземпляре Creature, в котором мы можем динамически подставлять нужный шаблон activeState для поиска. у меня эта часть пока просто не вылита в бранч, текущая часть работает только для activeState = 0. более того, я сначала сделал даже спец. хранилище spellOverride для ручного переназначения конкретной криче, но по моему через activeState красивее. |
|