Показать сообщение отдельно
Старый 17.12.2010, 11:05   #4
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Со старого форума базы YTDB:
Цитата:
Сообщение от virusav Посмотреть сообщение
Восстанавливаю тему со старого форума.

Перенумерация гуидов в таблицах `creature` и `gameobject`, а также во всех связанных таблицах.

Для `creature`:
Код:
DROP TRIGGER IF EXISTS `creature_after_update`;
CREATE TRIGGER `creature_after_update` AFTER UPDATE ON `creature`
FOR EACH ROW BEGIN
UPDATE `creature_addon` SET `guid`=NEW.guid WHERE `guid`=OLD.guid;
UPDATE `creature_movement` SET `id`=NEW.guid WHERE `id`=OLD.guid;
UPDATE `game_event_creature` SET `guid`=NEW.guid WHERE `guid`=OLD.guid;
UPDATE `game_event_creature_quest` SET `id`=NEW.guid WHERE `id`=OLD.guid;
UPDATE `npc_gossip` SET `npc_guid`=NEW.guid WHERE `npc_guid`=OLD.guid;
UPDATE `pool_creature` SET `guid`=NEW.guid WHERE `guid`=OLD.guid;
UPDATE `creature_battleground` SET `guid`=NEW.guid WHERE `guid`=OLD.guid;
END;
SELECT 0 INTO @temp_var;
UPDATE `creature` SET `guid`=1000000 WHERE `guid`=0;
UPDATE `creature` SET `guid`=@temp_var:=@temp_var+1 ORDER BY `guid` ASC;
DROP TRIGGER IF EXISTS `creature_after_update`;
Для `gameobject`:
Код:
DROP TRIGGER IF EXISTS `gameobject_after_update`;
CREATE TRIGGER `gameobject_after_update` AFTER UPDATE ON `gameobject`
FOR EACH ROW BEGIN
UPDATE `event_scripts` SET `datalong`=NEW.guid WHERE `datalong`=OLD.guid AND `command` IN (9,11,12,13);
UPDATE `game_event_gameobject` SET `guid`=NEW.guid WHERE `guid`=OLD.guid;
UPDATE `gameobject_scripts` SET `id`=NEW.guid WHERE `id`=OLD.guid;
UPDATE `gameobject_scripts` SET `datalong`=NEW.guid WHERE `datalong`=OLD.guid AND `command` IN (9,11,12,13);
UPDATE `pool_gameobject` SET `guid`=NEW.guid WHERE `guid`=OLD.guid;
UPDATE `quest_start_scripts` SET `datalong`=NEW.guid WHERE `datalong`=OLD.guid AND `command` IN (9,11,12,13);
UPDATE `quest_end_scripts` SET `datalong`=NEW.guid WHERE `datalong`=OLD.guid AND `command` IN (9,11,12,13);
UPDATE `spell_scripts` SET `datalong`=NEW.guid WHERE `datalong`=OLD.guid AND `command` IN (9,11,12,13);
UPDATE `gameobject_battleground` SET `guid`=NEW.guid WHERE `guid`=OLD.guid;
END;
SELECT 0 INTO @temp_var;
UPDATE `gameobject` SET `guid`=1000000 WHERE `guid`=0;
UPDATE `gameobject` SET `guid`=@temp_var:=@temp_var+1 ORDER BY `guid` ASC;
DROP TRIGGER IF EXISTS `gameobject_after_update`;
Если надо сделать автоинкременты в этих таблицах и сбросить их, то после перенумерации:
Код:
ALTER TABLE `creature` CHANGE COLUMN `guid` `guid` int(11) NOT NULL AUTO_INCREMENT;
ALTER TABLE `creature` AUTO_INCREMENT=1;
ALTER TABLE `gameobject` CHANGE COLUMN `guid` `guid` int(11) NOT NULL AUTO_INCREMENT;
ALTER TABLE `gameobject` AUTO_INCREMENT=1;
Список таблиц можно пополнить в любой момент.
virusav вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Softer (17.12.2010)