Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Баг-репорты (http://mangos.ytdb.ru/forumdisplay.php?f=27)
-   -   Локальные guid (http://mangos.ytdb.ru/showthread.php?t=4022)

Vinolentus 31.03.2011 00:27

Локальные guid
 
На карту а со командой ставится Creature/Vehicle/Gameobject. На карту б командой ставится тот же тип. Если счетчик guidLow для этого типа совпадает у карты а и карты б - выходит большая задница, от перезаписи GameObject/Creature data до (если на какой-то из карт объект с таким гуид удаляют) оставшегося вообще без нее объекта на другой карте.
Странно, что никто не заметил до сих пор. О_о

Ambal 31.03.2011 00:50

Вы в этом уверены? Вроде как гуиды локальны для каждой карты и в глобальных контейнерах мы подобные объекты не держим. Поэтому удаление объекта 1 с карты А ни коим образом не влияет на объект В с таким же гуидом на карте 2. Так по крайней мере задумывалась сея феерическая система :)

Vinolentus 31.03.2011 02:27

Цитата:

удаление объекта 1 с карты А ни коим образом не влияет на объект В с таким же гуидом на карте 2.
Если они временные. Посмотрите на mGameObjectDataMap и mCreatureDataMap. Они глобальны в той степени, в которой могут быть глобальны переменные одиночки-ObjectMgr'a. Ключ - guid %)
Или, например, сюда:

SeT 31.03.2011 04:25

Я вроде такое замечал - ставил моба на карту 0, затем такого же моба на карту 1. При этом моб с карты 0 таинственно исчезал из базы 0о

YuruY 31.03.2011 05:28

Цитата:

Сообщение от SeT (Сообщение 20516)
Я вроде такое замечал - ставил моба на карту 0, затем такого же моба на карту 1. При этом моб с карты 0 таинственно исчезал из базы 0о

А если потом резетнуть серв то они "таинственно" оба появятся.

Vinolentus 31.03.2011 05:40

Цитата:

А если потом резетнуть серв то они "таинственно" оба появятся.
Вы не читали третий пост?

Ambal 31.03.2011 08:20

Цитата:

Сообщение от Vinolentus (Сообщение 20518)
Вы не читали третий пост?

Мде, однако... Я бы подождал комментариев от Владимира по сему щепетильному вопросу перед тем как начать бегать и кричать "все пропало!". Т.к. как говорится, поспешные выводы - кратчайший путь к разочарованию (с).

Предварительно выглядит так, что переделали почти все, кроме запросов к БД и некоторых кусков кода, которые до сих пор расчитывают на уникальные GUIDы для объектов :bad: Душераздирающее зрелище (с)

Sid 31.03.2011 08:55

Получается должно быть PRIMARY KEY (`guid`,`map`) ?

Ambal 31.03.2011 10:11

Цитата:

Сообщение от Sid (Сообщение 20520)
Получается должно быть PRIMARY KEY (`guid`,`map`) ?

Нужно учитывать тогда и instanceID. Если это, конечно, еще не учтено...

LordJZ 31.03.2011 14:22

Цитата:

Сообщение от Sid (Сообщение 20520)
Получается должно быть PRIMARY KEY (`guid`,`map`) ?

Ага, и переделывать все *_script, npc_gossip и др. для поддержки.

rsa 01.04.2011 07:38

Цитата:

Сообщение от LordJZ (Сообщение 20523)
Ага, и переделывать все *_script, npc_gossip и др. для поддержки.

зачем? эта вся возня периферию кода никак затронуть не должна.

Sid 01.04.2011 12:14

Лорд имел ввиду что нужно будет для этих таблиц добавлять поле `map` так как гуиды будут одинаковые для разных карт, а в этих таблицах они как уникальные.

rsa 01.04.2011 12:31

в гуиде полно места. можно пару байт на карту потратить, а в таблицах хранить не каунтер а фуллгуид.

virusav 01.04.2011 12:39

Фуллгуид присваивается сервером?
Какую имеет длину поля?

Vladimir 03.04.2011 17:28

Статические GUIDы (загружаемые из базы) глобальны - соответственно новый статический спавн _должен_ резервироваться для всех существующих карт (копий карт).
И должен нигде не быть занят в данный момент. Вообще-то спавн мобов из игры при локальности временых гуидов (которые используются на конкретной копии карты) и использовании следующего свободного гуида был всегда маразмом. Так как для нормальной базы гуиды статического заселения не должны идти с дырами в нумерации.

И так
1) все в структуре базы и коде работы с загружаемым статически заселение правильно
2) не работают нормально GM команды спавна
3) как возможное решение резервировать при загрузке специальный интервал свободных гуидов сразу же после статического заселения для спавна из игры. Гуиды призываемых мобов и т.д. выделяются в таком случае после резервированого интревала. И при его окончании выдавать ошибку. В таком случае можно требовать презагрузки сервера для перевыделения интервала - можно в конфиге сделать указания размера резерва. Для рабочего сервера он не нужен (минимален), для тестового - может быть необходим более большой.

[added]Я работаю над патчем.

[added2]Реализовано в [11310]


Текущее время: 09:56. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS