|
Баг-репорты Описываем проблемы и ошибки работы ядра |
|
Опции темы | Поиск в этой теме | Опции просмотра |
04.05.2011, 07:06 | #1 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Карта 0 (вост. королевства) не получает script_id
Сабж собственно. Причем скрипт грузится, но в структуре WorldTemplate для карты 0 script_id всегда = 0. Убедиться можно при помощи патча (это не фикс! просто иллюстрация), скрипт естественно должен быть присвоен:
Код:
diff --git a/src/game/Map.cpp b/src/game/Map.cpp index ed9a7e7..5528a13 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -1155,8 +1155,22 @@ void Map::CreateInstanceData(bool load) { if (WorldTemplate const* mInstance = ObjectMgr::GetWorldTemplate(GetId())) i_script_id = mInstance->script_id; + DEBUG_LOG("Loading instance data for WorldMap: %u script: %u ", GetId(), i_script_id); + if (!i_script_id) + { + QueryResult* result = WorldDatabase.PQuery("SELECT ScriptName FROM world_template WHERE map = '%u'", GetId()); + if (result) + { + Field* fields = result->Fetch(); + const char* scriptname = fields[0].GetString(); + i_script_id = sScriptMgr.GetScriptId(scriptname); + delete result; + } + } + DEBUG_LOG("Loading instance data for WorldMap: %u script: %u ", GetId(), i_script_id); } + if (!i_script_id) return; |
04.05.2011, 13:40 | #4 |
Пользователь
Регистрация: 11.03.2010
Адрес: Спб
Сообщений: 35
Сказал(а) спасибо: 5
Поблагодарили 10 раз(а) в 8 сообщениях
|
сделать по умолчанию -1, а не 0
Код:
diff --git a/src/game/Map.cpp b/src/game/Map.cpp index fed3ab2..0dc52ae 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -74,7 +74,7 @@ Map::Map(uint32 id, time_t expiry, uint32 InstanceId, uint8 SpawnMode) m_VisibleDistance(DEFAULT_VISIBILITY_DISTANCE), m_persistentState(NULL), m_activeNonPlayersIter(m_activeNonPlayers.end()), i_gridExpiry(expiry), m_TerrainData(sTerrainMgr.LoadTerrain(id)), - i_data(NULL), i_script_id(0) + i_data(NULL), i_script_id(-1) { m_CreatureGuids.Set(sObjectMgr.GetFirstTemporaryCreatureLowGuid()); m_GameObjectGuids.Set(sObjectMgr.GetFirstTemporaryGameObjectLowGuid()); diff --git a/src/game/ScriptMgr.cpp b/src/game/ScriptMgr.cpp index 08a92b7..30a792f 100644 --- a/src/game/ScriptMgr.cpp +++ b/src/game/ScriptMgr.cpp @@ -942,13 +942,13 @@ uint32 ScriptMgr::GetScriptId(const char *name) const // use binary search to find the script name in the sorted vector // assume "" is the first element if (!name) - return 0; + return 1; ScriptNameMap::const_iterator itr = std::lower_bound(m_scriptNames.begin(), m_scriptNames.end(), name); if (itr == m_scriptNames.end() || *itr != name) - return 0; + return -1; return uint32(itr - m_scriptNames.begin()); } |
04.05.2011, 13:55 | #5 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
я не зря привел пример для просмотра. реальный номер скрипта у меня 1792 а вовсе не 0. он не прописывается в структуру WorldTemlate, а 0 значение работает правильно.
|
04.05.2011, 18:56 | #6 |
MaNGOS Dev
Регистрация: 14.03.2010
Сообщений: 38
Сказал(а) спасибо: 23
Поблагодарили 49 раз(а) в 16 сообщениях
|
все загружается правильно
но SQLStorage LookupEntry возвращает null при нулевом entry.. споткнулись Последний раз редактировалось SilverIce; 04.05.2011 в 19:01. |
Пользователь сказал cпасибо: | rsa (04.05.2011) |
13.05.2011, 07:28 | #8 |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Поскольку решение проблемы судя по всему никому не интересно, предлагаю собственное -
https://github.com/mangosR2/mangos/c...f66b38b4a5c61d пока судя по всему ничего не испортилось. Глядя по коду тоже возможных проблем не нашел. Кто-то вообще может сказать на кой черт это исключение было изначально? |
Пользователь сказал cпасибо: | KiriX (13.05.2011) |
13.05.2011, 08:46 | #9 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
Потому что 0 используется в коде как пустой guid/entry.
Код:
// хотим получить nullptr при m_castItem = 0 if(ItemPrototype const* itemInfo = sItemStorage.LookupEntry(m_castItem)) ... |
13.05.2011, 09:19 | #10 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
по поводу привязки скриптов к зонам - у меня уже сделано, зональные скрипты вызываются из скрипта карты при необходимости. |
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
POMM - Карта игроков | karobas | WWW | 12 | 13.05.2012 11:16 |
[map] Flash-карта онлайна - Stalker Edition | Кот ДаWINчи | WWW | 13 | 04.04.2012 14:25 |
Получение данных Карта->Зона | Hantet | WWW | 9 | 11.09.2010 22:21 |