diff --git a/data/sql/db-world/trasm_world_texts.sql b/data/sql/db-world/trasm_world_texts.sql index 5348b6af..118531ed 100644 --- a/data/sql/db-world/trasm_world_texts.sql +++ b/data/sql/db-world/trasm_world_texts.sql @@ -24,7 +24,7 @@ INSERT INTO `npc_text_locale` (`ID`, `Locale`, `Text0_0`) VALUES (@TEXT_ID+1, 'ruRU', 'Вы можете сохранять свои собственные наборы для трансмогрификации.\r\n\r\nЧтобы сохранить, сначала вы должны трансмогрифицировать свои экипированные предметы.\r\nЗатем, когда вы перейдете в меню управления наборами и перейдете в меню сохранения набора,\r\nвсе предметы которые вы преобразовали, отображаются так, что вы видите, что вы сохраняете.\r\nЕсли вы считаете, что набор в порядке, вы можете нажать, чтобы сохранить набор и назвать его по своему желанию.\r\n\r\nЧтобы использовать набор, можно щелкнуть сохраненный набор в меню управления набором, а затем выбрать использовать набор.\r\nЕсли в наборе есть трансмогрификация предмета, который уже трансмогрифицирован, старая трансмогрификация теряется.\r\nОбратите внимание, что те же ограничения на трансмогрификацию применяются, когда пытается использовать набор, как при обычной трансмогрификации.\r\n\r\nЧтобы удалить набор, вы можете перейти в меню набора и выбрать удалить набор.'); SET @STRING_ENTRY := 11100; -DELETE FROM `acore_string` WHERE `entry` IN (@STRING_ENTRY+0,@STRING_ENTRY+1,@STRING_ENTRY+2,@STRING_ENTRY+3,@STRING_ENTRY+4,@STRING_ENTRY+5,@STRING_ENTRY+6,@STRING_ENTRY+7,@STRING_ENTRY+8,@STRING_ENTRY+9,@STRING_ENTRY+10, @STRING_ENTRY+11, @STRING_ENTRY+12, @STRING_ENTRY+13, @STRING_ENTRY+14, @STRING_ENTRY+15, @STRING_ENTRY+16); +DELETE FROM `acore_string` WHERE `entry` BETWEEN @STRING_ENTRY AND @STRING_ENTRY+18; INSERT INTO `acore_string` (`entry`, `content_default`, `locale_koKR`, `locale_frFR`, `locale_deDE`, `locale_zhCN`, `locale_zhTW`, `locale_esES`, `locale_esMX`, `locale_ruRU`) VALUES (11100, 'Item successfully transmogrified.', '성공적으로 형상변환된 아이템', 'Objet transmogrifié avec succès', 'Gegenstand erfolgreich transmogrifiziert', '物品变形成功', '物品變身成功。', 'Objeto transfigurado con éxito', 'Objeto transfigurado con éxito', 'Предмет успешно трансмогрифицирован'), @@ -43,12 +43,15 @@ VALUES (11113, 'The selected item is not suitable for transmogrification.', '선택한 항목은 변형에 적합하지 않습니다.', 'L''objet sélectionné ne convient pas à la métamorphose.', 'Der ausgewählte Gegenstand ist nicht für die Verwandlung geeignet.', '所选项目不适合变形。', '所選物品不適合進行變身。', 'El elemento seleccionado no es adecuado para la transfiguración.', 'El elemento seleccionado no es adecuado para la transfiguración.', 'Выбранный предмет не подходит для преображения.'), (11114, 'The selected item cannot be used for transmogrification of the target player.', '선택한 아이템은 대상 플레이어의 형상변환에 사용할 수 없습니다.', 'L''objet sélectionné ne peut pas être utilisé pour la transmogrification du joueur ciblé', 'Der ausgewählte Gegenstand kann nicht für die Transmogrifizierung des Zielspielers verwendet werden', '所选物品不能用于目标玩家的变身', '所選物品不能用於目標玩家的變身效果。', 'El elemento seleccionado no se puede usar para la transfiguración del jugador objetivo', 'El elemento seleccionado no se puede usar para la transfiguración del jugador objetivo', 'Выбранный предмет нельзя использовать для трансмогрификации целевого игрока.'), (11115, 'Performing transmog appearance sync...', '형상변환 모양 동기화 수행 중...', 'Exécution de la synchronisation de l''apparence de transmogrification...', 'Synchronisierung des Transmog-Erscheinungsbilds wird durchgeführt ...', '正在执行 Transmog 外观同步...', '正在執行外觀同步變身操作...', 'Realizando sincronización de apariencia de transfiguración...', 'Realizando sincronización de apariencia de transfiguración...', 'Выполнение синхронизации внешнего вида Transmog...'), -(11116, 'Appearance sync complete.', '전체 모양 동기화', 'Synchronisation complète de l''apparence', 'Vollständige Synchronisierung des Erscheinungsbilds', '完全外观同步', '外觀同步變身操作完成。', 'Sincronización de apariencia completa', 'Sincronización de apariencia completa', 'Полная синхронизация внешнего вида'); +(11116, 'Appearance sync complete.', '전체 모양 동기화', 'Synchronisation complète de l''apparence', 'Vollständige Synchronisierung des Erscheinungsbilds', '完全外观同步', '外觀同步變身操作完成。', 'Sincronización de apariencia completa', 'Sincronización de apariencia completa', 'Полная синхронизация внешнего вида'), +(11117, 'The transmog NPC will now display available appearances as a vendor interface, allowing preview. \nDISCLAIMER: If you have too many appearances, some will not be displayed due to a client limitation. In that case, disable this option.', '', '', '', '', '', '', '', ''), +(11118, 'The transmog NPC will now display available apperances as gossip list.', '', '', '', '', '', '', '', ''); -DELETE FROM `command` WHERE `name` IN ('transmog', 'transmog add', 'transmog sync', 'transmog add set', 'transmog portable'); +DELETE FROM `command` WHERE `name` IN ('transmog', 'transmog add', 'transmog sync', 'transmog add set', 'transmog portable', 'transmog interface'); INSERT INTO `command` (`name`, `security`, `help`) VALUES ('transmog', 0, 'Syntax: .transmog \nAllows seeing transmogrified items and the transmogrifier NPC.'), ('transmog add', 1, 'Syntax: .transmog add $player $item\nAdds an item to a player\'s appearance collection.'), ('transmog sync', 0, 'Syntax: .transmog sync\nSyncs transmog addon appearances with the server.'), ('transmog add set', 1, 'Syntax: .transmog add set $player $itemSet\nAdds items of an item set to a player\'s appearance collection.'), -('transmog portable', 1, 'Syntax: .transmog portable \nSummons the Ethereal Warpweaver, a portable version of the transmogrification NPC.'); +('transmog portable', 1, 'Syntax: .transmog portable \nSummons the Ethereal Warpweaver, a portable version of the transmogrification NPC.'), +('transmog interface', 1, 'Syntax: .transmog interface \nEnables transmogrifier "vendor" interface, allowing appearance previews.\nDISCLAIMER: If you have too many appearances, some will not be displayed due to a client limitation. In that case, disable this option.'); diff --git a/src/Transmogrification.h b/src/Transmogrification.h index ab1743d4..409e357e 100644 --- a/src/Transmogrification.h +++ b/src/Transmogrification.h @@ -29,6 +29,7 @@ enum TransmogSettings { SETTING_HIDE_TRANSMOG = 0, SETTING_RETROACTIVE_CHECK = 1, + SETTING_VENDOR_INTERFACE = 2, // Subscriptions SETTING_TRANSMOG_MEMBERSHIP_LEVEL = 0 @@ -64,6 +65,8 @@ enum TransmogAcoreStrings // Language.h might have same entries, appears when ex LANG_CMD_TRANSMOG_ADD_FORBIDDEN = 11114, LANG_CMD_TRANSMOG_BEGIN_SYNC = 11115, LANG_CMD_TRANSMOG_COMPLETE_SYNC = 11116, + LANG_CMD_TRANSMOG_VENDOR_INTERFACE_ENABLE = 11117, + LANG_CMD_TRANSMOG_VENDOR_INTERFACE_DISABLE = 11118 }; enum ArmorClassSpellIDs diff --git a/src/cs_transmog.cpp b/src/cs_transmog.cpp index d72c1772..9074ff15 100644 --- a/src/cs_transmog.cpp +++ b/src/cs_transmog.cpp @@ -40,10 +40,11 @@ class transmog_commandscript : public CommandScript static ChatCommandTable transmogTable = { - { "add", addCollectionTable }, - { "", HandleDisableTransMogVisual, SEC_PLAYER, Console::No }, - { "sync", HandleSyncTransMogCommand, SEC_PLAYER, Console::No }, - { "portable", HandleTransmogPortableCommand, SEC_PLAYER, Console::No }, + { "add", addCollectionTable }, + { "", HandleDisableTransMogVisual, SEC_PLAYER, Console::No }, + { "sync", HandleSyncTransMogCommand, SEC_PLAYER, Console::No }, + { "portable", HandleTransmogPortableCommand, SEC_PLAYER, Console::No }, + { "interface", HandleInterfaceOption, SEC_PLAYER, Console::No } }; static ChatCommandTable commandTable = @@ -99,27 +100,19 @@ class transmog_commandscript : public CommandScript } if (!player) - { player = PlayerIdentifier::FromTargetOrSelf(handler); - } if (!player) - { return false; - } Player* target = player->GetConnectedPlayer(); bool isNotConsole = handler->GetSession(); bool suitableForTransmog; if (target) - { suitableForTransmog = sTransmogrification->SuitableForTransmogrification(target, itemTemplate); - } else - { suitableForTransmog = sTransmogrification->SuitableForTransmogrification(player->GetGUID(), itemTemplate); - } if (!sTransmogrification->GetTrackUnusableItems() && !suitableForTransmog) { @@ -192,14 +185,10 @@ class transmog_commandscript : public CommandScript } if (!player) - { player = PlayerIdentifier::FromTargetOrSelf(handler); - } if (!player) - { return false; - } Player* target = player->GetConnectedPlayer(); ItemSetEntry const* set = sItemSetStore.LookupEntry(uint32(itemSetId)); @@ -277,16 +266,12 @@ class transmog_commandscript : public CommandScript // Successful command execution if (target != handler->GetPlayer()) - { handler->PSendSysMessage("ItemSet |cffffffff|Hitemset:{}|h[{} {}]|h|r has been added to the appearance collection of Player {}.", uint32(itemSetId), setName.c_str(), localeNames[locale], nameLink); - } } // Notify target of new item in appearance collection if (target && !(target->GetPlayerSetting("mod-transmog", SETTING_HIDE_TRANSMOG).value)) - { ChatHandler(target->GetSession()).PSendSysMessage("ItemSet |cffffffff|Hitemset:%d|h[{} {}]|h|r has been added to your appearance collection.", uint32(itemSetId), setName.c_str(), localeNames[locale]); - } return true; } @@ -318,6 +303,13 @@ class transmog_commandscript : public CommandScript return true; }; + + static bool HandleInterfaceOption(ChatHandler* handler, bool enable) + { + handler->GetPlayer()->UpdatePlayerSetting("mod-transmog", SETTING_VENDOR_INTERFACE, enable); + handler->SendSysMessage(enable ? LANG_CMD_TRANSMOG_VENDOR_INTERFACE_ENABLE : LANG_CMD_TRANSMOG_VENDOR_INTERFACE_DISABLE); + return true; + } }; void AddSC_transmog_commandscript() diff --git a/src/transmog_scripts.cpp b/src/transmog_scripts.cpp index 33c616e3..ff5f6ce7 100644 --- a/src/transmog_scripts.cpp +++ b/src/transmog_scripts.cpp @@ -485,7 +485,7 @@ class npc_transmogrifier : public CreatureScript } } - return sTransmogrification->IsEnabled() && (target && !target->GetPlayerSetting("mod-transmog", SETTING_HIDE_TRANSMOG).value); + return sTransmogrification->IsEnabled() && (target && !target->GetPlayerSetting("mod-transmog", SETTING_HIDE_TRANSMOG).IsEnabled()); } }; @@ -540,7 +540,7 @@ class npc_transmogrifier : public CreatureScript case EQUIPMENT_SLOT_END: // Show items you can use sT->selectionCache[player->GetGUID()] = action; - if (sT->GetUseVendorInterface()) + if (sT->GetUseVendorInterface() || player->GetPlayerSetting("mod-transmog", SETTING_VENDOR_INTERFACE).IsEnabled()) ShowTransmogItemsInFakeVendor(player, creature, action); else ShowTransmogItemsInGossipMenu(player, creature, action, sender);