Convertion MaNGOS vers Trinity
Voici un patch qui converti la base de donnée realmd et characters de mangos en trinity.

Crée par moi ou plutôt mis à jour par moi car ils se ressemblent à peu près tous Heureux

Compatible avec la dernière rev de trinity.

Realmd database
[code=sql]USE auth;

-- REALM TRANSFER QUERIES
INSERT INTO account (id,username,sha_pass_hash,email,joindate,last_ip,failed_log​ins,locked,last_login,expansion,mutetime,locale) SELECT id,username,sha_pass_hash,email,joindate,last_ip,failed_logi​ns,locked,last_login,expansion,mutetime,locale FROM realmd.account;
INSERT INTO realmcharacters SELECT * FROM realmd.realmcharacters;
INSERT INTO account_access (id, gmlevel, RealmID) SELECT id,gmlevel, active_realm_id FROM realmd.account;
UPDATE account_access SET RealmID = -1;
INSERT INTO account_banned SELECT * FROM realmd.account_banned;
DELETE FROM realmlist;
INSERT INTO realmlist (id, name, address, port, icon, timezone, allowedSecurityLevel, population, gamebuild) SELECT id, name, address, port, icon, timezone, allowedSecurityLevel, population, realmbuilds FROM realmd.realmlist;
INSERT INTO ip_banned SELECT * FROM realmd.ip_banned;
INSERT INTO uptime (realmid, starttime, startstring, uptime, maxplayers) SELECT realmid, starttime, startstring, uptime, maxplayers FROM realmd.uptime;[/code]

Characters database
[code=sql]USE characters;

-- CHARACTERS TRANSFER QUERIES
INSERT INTO account_data SELECT * FROM characters_mangos.account_data;
-- addons -- TC specific table, will be filled by TC
INSERT INTO arena_team SELECT * FROM characters_mangos.arena_team;
INSERT INTO arena_team_member (arenateamid, guid, played_week, wons_week, played_season, wons_season) SELECT arenateamid, guid, played_week, wons_week, played_season, wons_season FROM characters_mangos.arena_team_member;
INSERT INTO arena_team_stats SELECT * FROM characters_mangos.arena_team_stats;
INSERT INTO character_account_data SELECT * FROM characters_mangos.character_account_data;
INSERT INTO character_achievement SELECT * FROM characters_mangos.character_achievement;
INSERT INTO character_achievement_progress SELECT * FROM characters_mangos.character_achievement_progress;
INSERT INTO character_action SELECT * FROM characters_mangos.character_action;
-- character_aura -- this table is filled with buffs and similar spells, it can be dropped
INSERT INTO character_battleground_data SELECT * FROM characters_mangos.character_battleground_data;
INSERT INTO character_declinedname SELECT * FROM characters_mangos.character_declinedname;
INSERT INTO character_equipmentsets SELECT * FROM characters_mangos.character_equipmentsets;
INSERT INTO character_gifts SELECT * FROM characters_mangos.character_gifts;
INSERT INTO character_glyphs (guid, spec) SELECT DISTINCT guid, spec FROM characters_mangos.character_glyphs;
UPDATE character_glyphs a SET glyph1 = (SELECT glyph FROM characters_mangos.character_glyphs WHERE guid = a.guid AND spec = a.spec AND slot = 0);
UPDATE character_glyphs a SET glyph2 = (SELECT glyph FROM characters_mangos.character_glyphs WHERE guid = a.guid AND spec = a.spec AND slot = 1);
UPDATE character_glyphs a SET glyph3 = (SELECT glyph FROM characters_mangos.character_glyphs WHERE guid = a.guid AND spec = a.spec AND slot = 2);
UPDATE character_glyphs a SET glyph4 = (SELECT glyph FROM characters_mangos.character_glyphs WHERE guid = a.guid AND spec = a.spec AND slot = 3);
UPDATE character_glyphs a SET glyph5 = (SELECT glyph FROM characters_mangos.character_glyphs WHERE guid = a.guid AND spec = a.spec AND slot = 4);
UPDATE character_glyphs a SET glyph6 = (SELECT glyph FROM characters_mangos.character_glyphs WHERE guid = a.guid AND spec = a.spec AND slot = 5);
INSERT INTO character_homebind SELECT * FROM characters_mangos.character_homebind;
INSERT INTO character_instance SELECT * FROM characters_mangos.character_instance;
INSERT INTO character_inventory SELECT * FROM characters_mangos.character_inventory;
INSERT INTO character_pet SELECT * FROM characters_mangos.character_pet;
INSERT INTO character_pet_declinedname SELECT * FROM characters_mangos.character_pet_declinedname;
INSERT INTO character_queststatus SELECT * FROM characters_mangos.character_queststatus;
INSERT INTO character_queststatus_daily (guid,quest) SELECT * FROM characters_mangos.character_queststatus_daily; -- ?
INSERT INTO character_queststatus_weekly SELECT * FROM characters_mangos.character_queststatus_weekly;
INSERT INTO character_reputation SELECT * FROM characters_mangos.character_reputation;
INSERT INTO character_skills SELECT * FROM characters_mangos.character_skills;
INSERT INTO character_social SELECT * FROM characters_mangos.character_social;
INSERT INTO character_spell SELECT * FROM characters_mangos.character_spell;
INSERT INTO character_spell_cooldown SELECT * FROM characters_mangos.character_spell_cooldown;
INSERT INTO character_stats SELECT * FROM characters_mangos.character_stats;
-- character_talent -- talents will be reseted, sry
-- character_ticket -- tickets will differ alot, new table is now gm_ticket
INSERT INTO character_tutorial SELECT * FROM characters_mangos.character_tutorial;

-- corpse -- skip
-- group_instance -- skip
-- group_member -- skip
-- group -- skip
INSERT INTO guild SELECT * FROM characters_mangos.guild;
INSERT INTO guild_bank_eventlog SELECT * FROM characters_mangos.guild_bank_eventlog;
INSERT INTO guild_bank_item SELECT * FROM characters_mangos.guild_bank_item;
INSERT INTO guild_bank_right SELECT * FROM characters_mangos.guild_bank_right;
INSERT INTO guild_bank_tab SELECT * FROM characters_mangos.guild_bank_tab;
INSERT INTO guild_eventlog SELECT * FROM characters_mangos.guild_eventlog;
INSERT INTO guild_member SELECT * FROM characters_mangos.guild_member;
INSERT INTO guild_rank SELECT * FROM characters_mangos.guild_rank;
INSERT INTO instance SELECT * FROM characters_mangos.instance;
INSERT INTO instance_reset SELECT * FROM characters_mangos.instance_reset;

ALTER TABLE `item_instance`
ADD `data` longtext;

INSERT INTO item_instance (guid, owner_guid, charges, enchantments) SELECT DISTINCT guid, owner_guid, data, data FROM characters_mangos.item_instance;
UPDATE item_instance a SET `data` = (SELECT data FROM characters_mangos.item_instance WHERE guid = a.guid and owner_guid = a.owner_guid);
-- Temporarily change delimiter to prevent SQL syntax errors
DELIMITER ||

-- Function to convert ints from unsigned to signed
DROP FUNCTION IF EXISTS `uint32toint32`||
CREATE FUNCTION `uint32toint32`(input INT(10) UNSIGNED) RETURNS INT(11) SIGNED DETERMINISTIC
BEGIN
RETURN input;
END||

-- Restore original delimiter
DELIMITER ;

-- Move data to new fields
UPDATE `item_instance` SET
`creatorGuid` = SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',10))+2,
length(SUBSTRING_INDEX(`data`,' ',10+1))-length(SUBSTRING_INDEX(data,' ',10))-1),

`giftCreatorGuid` = SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',12))+2,
length(SUBSTRING_INDEX(`data`,' ',12+1))-length(SUBSTRING_INDEX(data,' ',12))-1),

`count` = SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',14))+2,
length(SUBSTRING_INDEX(`data`,' ',14+1))-length(SUBSTRING_INDEX(data,' ',14))-1),

`duration` = SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',15))+2,
length(SUBSTRING_INDEX(`data`,' ',15+1))-length(SUBSTRING_INDEX(data,' ',15))-1),

`charges` = CONCAT_WS(' ',
uint32toint32(SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',16))+2,
length(SUBSTRING_INDEX(`data`,' ',16+1))-length(SUBSTRING_INDEX(data,' ',16))-1)),
uint32toint32(SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',17))+2,
length(SUBSTRING_INDEX(`data`,' ',17+1))-length(SUBSTRING_INDEX(data,' ',17))-1)),
uint32toint32(SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',18))+2,
length(SUBSTRING_INDEX(`data`,' ',18+1))-length(SUBSTRING_INDEX(data,' ',18))-1)),
uint32toint32(SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',19))+2,
length(SUBSTRING_INDEX(`data`,' ',19+1))-length(SUBSTRING_INDEX(data,' ',19))-1)),
uint32toint32(SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',20))+2,
length(SUBSTRING_INDEX(`data`,' ',20+1))-length(SUBSTRING_INDEX(data,' ',20))-1))),

`flags` = SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',21))+2,
length(SUBSTRING_INDEX(`data`,' ',21+1))-length(SUBSTRING_INDEX(data,' ',21))-1),


`enchantments` = SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',22))+2,
length(SUBSTRING_INDEX(`data`,' ',57+1))-length(SUBSTRING_INDEX(data,' ',22))-1),

`randomPropertyId` = uint32toint32(SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',59))+2,
length(SUBSTRING_INDEX(`data`,' ',59+1))-length(SUBSTRING_INDEX(data,' ',59))-1)),

`durability` = SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',60))+2,
length(SUBSTRING_INDEX(`data`,' ',60+1))-length(SUBSTRING_INDEX(data,' ',60))-1),

`playedTime` = SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',62))+2,
length(SUBSTRING_INDEX(`data`,' ',62+1))-length(SUBSTRING_INDEX(data,' ',62))-1);

-- Drop function
DROP FUNCTION IF EXISTS `uint32toint32`;

-- Fix heroic item flag
UPDATE `item_instance` SET `flags`=`flags`&~0x8 WHERE
SUBSTRING(`data`,
length(SUBSTRING_INDEX(`data`,' ',3))+2,
length(SUBSTRING_INDEX(`data`,' ',3+1))-length(SUBSTRING_INDEX(data,' ',3))-1)
NOT IN (5043,5044,17302,17305,17308,21831);

SET @allowedFlags := 0x00000001 | 0x00000008 | 0x00000200 | 0x00001000 | 0x00008000 | 0x00010000;

UPDATE `item_instance` SET `flags` = (`flags` & @allowedFlags);

-- Drop old field
ALTER TABLE `item_instance` DROP `data`;

INSERT INTO mail SELECT * FROM characters_mangos.mail;
INSERT INTO mail_items SELECT * FROM characters_mangos.mail_items;
-- pet_aura -- skip
INSERT INTO pet_spell SELECT * FROM characters_mangos.pet_spell;
INSERT INTO pet_spell_cooldown SELECT * FROM characters_mangos.pet_spell_cooldown;
INSERT INTO petition SELECT * FROM characters_mangos.petition;
INSERT INTO petition_sign SELECT * FROM characters_mangos.petition_sign;
INSERT INTO characters (guid, account, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, position_x, position_y, position_z, map, orientation, taximask, online, cinematic, totaltime, leveltime, logout_time, is_logout_resting, rest_bonus, resettalents_cost, resettalents_time, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, death_expire_time, taxi_path, arenaPoints, totalHonorPoints, todayHonorPoints, yesterdayHonorPoints, totalKills, todayKills, yesterdayKills, chosenTitle, knownCurrencies, watchedFaction, drunk, health, power1, power2, power3, power4, power5, power6, power7, specCount, activeSpec, exploredZones, equipmentCache, ammoId, knownTitles, actionBars) SELECT guid, account, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, position_x, position_y, position_z, map, orientation, taximask, online, cinematic, totaltime, leveltime, logout_time, is_logout_resting, rest_bonus, resettalents_cost, resettalents_time, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, death_expire_time, taxi_path, arenaPoints, totalHonorPoints, todayHonorPoints, yesterdayHonorPoints, totalKills, todayKills, yesterdayKills, chosenTitle, knownCurrencies, watchedFaction, drunk, health, power1, power2, power3, power4, power5, power6, power7, specCount, activeSpec, exploredZones, equipmentCache, ammoId, knownTitles, actionBars FROM characters_mangos.characters;[/code]

Pour tester le patch j'ai crée un personnage vite fait avec des objets portés et dans l'inventaire, une guilde et des coffres de guildes et ça marche parfaitement mais je conseil de faire quelques tests avant car on ne sait jamais Heureux

Il y a quelques tables que je n'est pas récupérer, elles sont décrites dans le patch.
Ah le seul problème c'est que les base de données mangos et trinity ne sont pas "complètes"
Et puis il faudras le mettre à jour souvent, sachant que des dépôts privée n'ont pas les même structures.
Pour l'instant le patch marche très bien, j'essaierais de le mettre à jour le plus souvent possible
D'accord , merci
Merci super patch
ce serrai aussi envisageable pareil pour la db mangos/world ?
(11-11-2010 22:37)sarrek a écrit :  ce serrai aussi envisageable pareil pour la db mangos/world ?
Envisageable, oui, pourquoi pas?
Mais ça pourrait être assez long, depuis que trinity ne suis plus mangos niveau db.


(01-10-2010 10:09)mathman a écrit :  Compatible avec la dernière rev de trinity.

N'oubliez pas, à chaque fois que vous dites ça, le dev principal de TrinityCore tue un chaton. Pensez aux chatons!
[code=SQL]DELETE FROM `account_access` WHERE `gmlevel` = 0;[/code]
Merci pour ce code, cela peut servir Smile

Retourner en haut Accueil