微件

配队模拟器:修订间差异

来自卡厄思梦境WIKI

律Rhyme留言 | 贡献
无编辑摘要
律Rhyme留言 | 贡献
无编辑摘要
第5行: 第5行:
         // 保存当前选择的战斗员名称
         // 保存当前选择的战斗员名称
         var currentCharacterName = null;
         var currentCharacterName = null;
         var selectedCards = {}; // 记录每个位置的卡牌状态
        var cardIdCounter = 0; // 用于生成唯一ID
         var selectedCards = {}; // 记录每个卡牌的状态
          
          
         // 点击角色槽位显示选择窗口
         // 点击角色槽位显示选择窗口
第57行: 第58行:
                         deckArea.style.padding = '10px';
                         deckArea.style.padding = '10px';
                          
                          
                         // 重置selectedCards
                         // 重置
                         selectedCards = {};
                         selectedCards = {};
                        cardIdCounter = 0;
                          
                          
                         // 为每张卡牌添加功能
                         // 为每张卡牌添加功能
第78行: 第80行:
             var wrappers = document.querySelectorAll('#deck-area .deck-card-wrapper');
             var wrappers = document.querySelectorAll('#deck-area .deck-card-wrapper');
              
              
             wrappers.forEach(function(wrapper, index) {
             wrappers.forEach(function(wrapper) {
                 var card = wrapper.querySelector('.card-small-wrapper');
                 var card = wrapper.querySelector('.card-small-wrapper');
                 if (!card) return;
                 if (!card) return;
               
                // 给每个wrapper分配唯一ID
                var uniqueId = 'deck-card-' + (++cardIdCounter);
                wrapper.setAttribute('data-unique-id', uniqueId);
                  
                  
                 // 记录原始状态
                 // 记录原始状态
                 selectedCards[index] = {
                 selectedCards[uniqueId] = {
                     module: wrapper.getAttribute('data-module') || currentCharacterName,
                     module: wrapper.getAttribute('data-module') || currentCharacterName,
                     cardName: wrapper.getAttribute('data-card'),
                     cardName: wrapper.getAttribute('data-card'),
第101行: 第107行:
                         e.stopPropagation();
                         e.stopPropagation();
                         wrapper.remove();
                         wrapper.remove();
                         delete selectedCards[index];
                         delete selectedCards[uniqueId];
                     });
                     });
                      
                      
第107行: 第113行:
                     card.appendChild(deleteBtn);
                     card.appendChild(deleteBtn);
                 }
                 }
               
                // 监听卡牌上的按钮点击
                setupCardModalListeners(card, index);
             });
             });
           
            // 全局监听卡牌模态框的显示
            setupGlobalModalListener();
         }
         }
          
          
         // 设置卡牌模态框的监听器
         // 设置全局模态框监听器
         function setupCardModalListeners(cardElement, cardIndex) {
         function setupGlobalModalListener() {
             // 当点击卡牌时,会自动打开模态框,我们需要监听模态框内的按钮
             // 移除之前的全局监听器
             var observer = new MutationObserver(function(mutations) {
             if (window.deckModalObserver) {
                window.deckModalObserver.disconnect();
            }
           
            // 创建新的观察器
            window.deckModalObserver = new MutationObserver(function(mutations) {
                 mutations.forEach(function(mutation) {
                 mutations.forEach(function(mutation) {
                     if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
                     if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
                         var modal = document.querySelector('.card-modal[style*="display: block"]');
                         var modal = mutation.target;
                        if (modal && !modal.hasAttribute('data-enhanced')) {
                        if (modal.classList.contains('card-modal') && modal.style.display !== 'none') {
                            modal.setAttribute('data-enhanced', 'true');
                            // 延迟处理,确保模态框内容已经渲染
                             enhanceCardModal(modal, cardIndex);
                            setTimeout(function() {
                                enhanceActiveModal(modal);
                             }, 100);
                         }
                         }
                     }
                     }
第128行: 第141行:
             });
             });
              
              
             // 观察所有模态框的显示状态变化
             // 观察所有模态框
             document.querySelectorAll('.card-modal').forEach(function(modal) {
             document.querySelectorAll('.card-modal').forEach(function(modal) {
                 observer.observe(modal, { attributes: true, attributeFilter: ['style'] });
                 window.deckModalObserver.observe(modal, {  
                    attributes: true,  
                    attributeFilter: ['style']  
                });
             });
             });
         }
         }
          
          
         // 增强卡牌模态框
         // 增强当前活动的模态框
         function enhanceCardModal(modal, cardIndex) {
         function enhanceActiveModal(modal) {
             // 找到灵光一闪视图中的变体卡牌
            // 查找是哪张卡牌打开的模态框
            var cardId = modal.id ? modal.id.replace('-modal', '') : null;
            if (!cardId) return;
           
            // 查找对应的deck卡牌
            var deckCard = null;
            var uniqueId = null;
           
            // 遍历所有deck中的卡牌,找到匹配的那个
            document.querySelectorAll('#deck-area .deck-card-wrapper').forEach(function(wrapper) {
                var wrapperCard = wrapper.querySelector('.card-small-wrapper');
                if (wrapperCard && wrapperCard.getAttribute('data-card-id') === cardId) {
                    deckCard = wrapper;
                    uniqueId = wrapper.getAttribute('data-unique-id');
                }
            });
           
            if (!deckCard || !uniqueId) {
                console.log('未找到对应的deck卡牌');
                return;
            }
           
            var cardData = selectedCards[uniqueId];
            if (!cardData) {
                console.log('未找到卡牌数据:', uniqueId);
                return;
            }
           
            console.log('增强模态框,卡牌:', cardData.cardName);
           
            // 标记已处理
            if (modal.hasAttribute('data-deck-enhanced')) {
                return;
            }
            modal.setAttribute('data-deck-enhanced', 'true');
           
            // 处理灵光一闪
            var inspirationButton = modal.querySelector('.inspiration-button');
            if (inspirationButton) {
                inspirationButton.addEventListener('click', function() {
                    setTimeout(function() {
                        enhanceInspirationView(modal, uniqueId);
                    }, 100);
                });
            }
              
            // 处理神光一闪
            var godButton = modal.querySelector('.god-inspiration-button');
            if (godButton) {
                godButton.addEventListener('click', function() {
                    setTimeout(function() {
                        enhanceGodView(modal, uniqueId);
                    }, 100);
                });
            }
        }
       
        // 增强灵光一闪视图
        function enhanceInspirationView(modal, uniqueId) {
             var inspirationView = modal.querySelector('.inspiration-view');
             var inspirationView = modal.querySelector('.inspiration-view');
             if (inspirationView) {
             if (!inspirationView) return;
                var variantCards = inspirationView.querySelectorAll('.inspiration-variant-card');
           
                variantCards.forEach(function(variantCard, variantIndex) {
            var cardData = selectedCards[uniqueId];
                     // 为每个变体卡牌添加"选择"按钮
            if (!cardData) return;
                     if (!variantCard.querySelector('.select-variant-btn')) {
           
            console.log('增强灵光一闪视图,卡牌:', cardData.cardName);
           
            var variants = inspirationView.querySelectorAll('.inspiration-variant');
            variants.forEach(function(variant, index) {
                if (!variant.querySelector('.select-variant-btn')) {
                    var selectBtn = document.createElement('div');
                    selectBtn.className = 'select-variant-btn';
                    selectBtn.innerHTML = '选择此变体';
                    selectBtn.style.cssText = 'margin-top:10px;padding:8px 15px;background:linear-gradient(135deg,#28a745 0%,#218838 100%);color:white;font-size:14px;font-weight:bold;border-radius:6px;cursor:pointer;text-align:center;';
                   
                    selectBtn.addEventListener('click', function() {
                        console.log('选择灵光一闪变体', index + 1, '对于卡牌:', cardData.cardName);
                        replaceCard(uniqueId, '灵光一闪', index + 1);
                        modal.style.display = 'none';
                     });
                   
                    variant.appendChild(selectBtn);
                }
            });
        }
       
        // 增强神光一闪视图
        function enhanceGodView(modal, uniqueId) {
            var godView = modal.querySelector('.god-inspiration-view');
            if (!godView) return;
           
            var cardData = selectedCards[uniqueId];
            if (!cardData) return;
           
            console.log('增强神光一闪视图,卡牌:', cardData.cardName);
           
            var godGroups = godView.querySelectorAll('.god-group');
            godGroups.forEach(function(group) {
                var groupNameEl = group.querySelector('div[style*="color:#ffd36a"]');
                if (!groupNameEl) return;
               
                var groupName = groupNameEl.textContent.trim();
                var variants = group.querySelectorAll('.god-variant-card');
               
                variants.forEach(function(variant, index) {
                     if (!variant.querySelector('.select-variant-btn')) {
                         var selectBtn = document.createElement('div');
                         var selectBtn = document.createElement('div');
                         selectBtn.className = 'select-variant-btn';
                         selectBtn.className = 'select-variant-btn';
                         selectBtn.innerHTML = '选择此卡牌';
                         selectBtn.innerHTML = '选择';
                         selectBtn.style.cssText = 'margin-top:10px;padding:8px 15px;background:linear-gradient(135deg,#28a745 0%,#218838 100%);color:white;font-size:14px;font-weight:bold;border-radius:6px;cursor:pointer;text-align:center;';
                         selectBtn.style.cssText = 'margin-top:5px;padding:6px 12px;background:linear-gradient(135deg,#28a745 0%,#218838 100%);color:white;font-size:12px;font-weight:bold;border-radius:4px;cursor:pointer;text-align:center;';
                          
                          
                         selectBtn.addEventListener('click', function() {
                         selectBtn.addEventListener('click', function() {
                             replaceCard(cardIndex, '灵光一闪', variantIndex + 1);
                            console.log('选择神光一闪变体', groupName, index + 1, '对于卡牌:', cardData.cardName);
                            // 关闭模态框
                             replaceCard(uniqueId, '神光一闪', groupName, index + 1);
                             modal.style.display = 'none';
                             modal.style.display = 'none';
                         });
                         });
                          
                          
                         variantCard.parentElement.appendChild(selectBtn);
                         variant.appendChild(selectBtn);
                     }
                     }
                 });
                 });
             }
             });
           
            // 找到神光一闪视图中的变体卡牌
            var godView = modal.querySelector('.god-inspiration-view');
            if (godView) {
                var godGroups = godView.querySelectorAll('.god-group');
                godGroups.forEach(function(group) {
                    var groupName = group.querySelector('div[style*="color:#ffd36a"]').textContent.trim();
                    var godVariants = group.querySelectorAll('.god-variant-card-inner');
                   
                    godVariants.forEach(function(variantCard, variantIndex) {
                        if (!variantCard.parentElement.querySelector('.select-variant-btn')) {
                            var selectBtn = document.createElement('div');
                            selectBtn.className = 'select-variant-btn';
                            selectBtn.innerHTML = '选择';
                            selectBtn.style.cssText = 'margin-top:5px;padding:6px 12px;background:linear-gradient(135deg,#28a745 0%,#218838 100%);color:white;font-size:12px;font-weight:bold;border-radius:4px;cursor:pointer;text-align:center;';
                           
                            selectBtn.addEventListener('click', function() {
                                replaceCard(cardIndex, '神光一闪', groupName, variantIndex + 1);
                                // 关闭模态框
                                modal.style.display = 'none';
                            });
                           
                            variantCard.parentElement.appendChild(selectBtn);
                        }
                    });
                });
            }
         }
         }
          
          
         // 替换卡牌
         // 替换卡牌
         function replaceCard(cardIndex, variantType, param1, param2) {
         function replaceCard(uniqueId, variantType, param1, param2) {
             var cardData = selectedCards[cardIndex];
             var cardData = selectedCards[uniqueId];
             if (!cardData) return;
             if (!cardData) {
                console.error('找不到卡牌数据:', uniqueId);
                return;
            }
              
              
             var wrapper = document.querySelectorAll('#deck-area .deck-card-wrapper')[cardIndex];
             var wrapper = document.querySelector('[data-unique-id="' + uniqueId + '"]');
             if (!wrapper) return;
             if (!wrapper) {
                console.error('找不到卡牌容器:', uniqueId);
                return;
            }
              
              
             console.log('替换卡牌:', cardData.cardName, variantType, param1, param2);
             console.log('替换卡牌:', cardData.cardName, '变体类型:', variantType, '参数:', param1, param2);
              
              
             // 更新记录
             // 更新记录
             if (variantType) {
             cardData.variantType = variantType;
                cardData.variantType = variantType;
            cardData.variantParam = param1;
                cardData.variantParam = param1;
            cardData.variantIndex = param2;
                cardData.variantIndex = param2;
            } else {
                cardData.variantType = null;
                cardData.variantParam = null;
                cardData.variantIndex = null;
            }
              
              
             // 显示加载中
             // 显示加载中
             wrapper.innerHTML = '<div style="color:#999;">加载中...</div>';
            var oldContent = wrapper.innerHTML;
             wrapper.innerHTML = '<div style="color:#999;padding:20px;">加载中...</div>';
              
              
             // 构建invoke调用
             // 构建invoke调用
第219行: 第308行:
             }
             }
             invokeText += '}}';
             invokeText += '}}';
           
            console.log('调用文本:', invokeText);
              
              
             // 通过API获取新卡牌HTML
             // 通过API获取新卡牌HTML
第236行: 第327行:
                         wrapper.innerHTML = data.parse.text['*'];
                         wrapper.innerHTML = data.parse.text['*'];
                          
                          
                         // 重新添加删除按钮和事件
                         // 重新添加删除按钮
                         setTimeout(function() {
                         setTimeout(function() {
                             var newCard = wrapper.querySelector('.card-small-wrapper');
                             var newCard = wrapper.querySelector('.card-small-wrapper');
第249行: 第340行:
                                     e.stopPropagation();
                                     e.stopPropagation();
                                     wrapper.remove();
                                     wrapper.remove();
                                     delete selectedCards[cardIndex];
                                     delete selectedCards[uniqueId];
                                 });
                                 });
                                  
                                  
                                 newCard.style.position = 'relative';
                                 newCard.style.position = 'relative';
                                 newCard.appendChild(deleteBtn);
                                 newCard.appendChild(deleteBtn);
                               
                                // 重新设置监听器
                                setupCardModalListeners(newCard, cardIndex);
                             }
                             }
                           
                            // 重新设置全局监听
                            setupGlobalModalListener();
                         }, 100);
                         }, 100);
                    } else {
                        console.error('API返回数据无效');
                        wrapper.innerHTML = oldContent;
                     }
                     }
                 })
                 })
                 .catch(error => {
                 .catch(error => {
                     console.error('替换卡牌失败:', error);
                     console.error('替换卡牌失败:', error);
                     wrapper.innerHTML = '<div style="color:red;">替换失败</div>';
                     wrapper.innerHTML = oldContent;
                 });
                 });
         }
         }
第271行: 第365行:
             var characterOption = e.target.closest('.character-option');
             var characterOption = e.target.closest('.character-option');
             if (characterOption) {
             if (characterOption) {
                 // 获取战斗员名称 - 尝试多种方式
                 // 获取战斗员名称
                 var characterName = null;
                 var characterName = characterOption.getAttribute('data-character-name') ||
                                  characterOption.getAttribute('data-name') ||
                                  characterOption.getAttribute('title');
                  
                  
                // 方式1: 从data属性获取
                characterName = characterOption.getAttribute('data-character-name') ||
                              characterOption.getAttribute('data-name') ||
                              characterOption.getAttribute('title');
               
                // 方式2: 从子元素获取
                 if (!characterName) {
                 if (!characterName) {
                     var nameElement = characterOption.querySelector('.character-name, [class*="name"], span, div');
                     var nameEl = characterOption.querySelector('.character-name, [class*="name"]');
                     if (nameElement && nameElement.textContent) {
                     if (nameEl) characterName = nameEl.textContent.trim();
                        characterName = nameElement.textContent.trim();
                    }
                 }
                 }
                  
                  
                 console.log('选中的战斗员:', characterName);
                 console.log('选中的战斗员:', characterName);
                  
                  
                 // 克隆整个角色卡片
                 // 克隆卡片显示
                 var clonedCard = characterOption.cloneNode(true);
                 var clonedCard = characterOption.cloneNode(true);
                 clonedCard.classList.remove('character-option');
                 clonedCard.classList.remove('character-option');
                 clonedCard.style.cursor = 'default';
                 clonedCard.style.cursor = 'default';
                  
                  
                // 更新槽位
                 var characterSlot = document.getElementById('character-slot');
                 var characterSlot = document.getElementById('character-slot');
                 characterSlot.innerHTML = '';
                 characterSlot.innerHTML = '';
                 characterSlot.appendChild(clonedCard);
                 characterSlot.appendChild(clonedCard);
                 characterSlot.style.border = 'none';
                 characterSlot.style.border = 'none';
                characterSlot.style.padding = '0';
                  
                  
                // 关闭选择窗口
                 document.getElementById('character-modal').style.display = 'none';
                 document.getElementById('character-modal').style.display = 'none';
                  
                  
                // 加载该战斗员的卡牌
                 if (characterName) {
                 if (characterName) {
                     loadCharacterCards(characterName);
                     loadCharacterCards(characterName);
第311行: 第395行:
         });
         });
          
          
         // 伙伴选择相关代码保持不变...
         // 伙伴相关代码保持不变...
        document.getElementById('partner-slot').addEventListener('click', function() {
            document.getElementById('partner-modal').style.display = 'block';
        });
       
        document.getElementById('close-partner-modal').addEventListener('click', function() {
            document.getElementById('partner-modal').style.display = 'none';
        });
       
        document.getElementById('partner-modal').addEventListener('click', function(e) {
            if (e.target === this) {
                this.style.display = 'none';
            }
        });
       
        document.getElementById('partner-list').addEventListener('click', function(e) {
            var partnerOption = e.target.closest('.partner-option');
            if (partnerOption) {
                var partnerId = partnerOption.dataset.partnerId || partnerOption.getAttribute('data-partner-id');
               
                var partnerImg = document.createElement('img');
                partnerImg.src = '/index.php?title=Special:Redirect/file/Portrait_character_wide_' + partnerId + '.png';
                partnerImg.style.width = '150px';
                partnerImg.style.height = '77px';
                partnerImg.style.objectFit = 'cover';
               
                var partnerSlot = document.getElementById('partner-slot');
                partnerSlot.innerHTML = '';
                partnerSlot.appendChild(partnerImg);
                partnerSlot.style.border = 'none';
               
                document.getElementById('partner-modal').style.display = 'none';
            }
        });
     }
     }
      
      
第325行: 第442行:
<style>
<style>
.character-option:hover {
.character-option:hover {
    transform: scale(1.05);
    box-shadow: 0 4px 8px rgba(0,0,0,0.2);
}
.partner-option {
    cursor: pointer;
    transition: transform 0.2s;
}
.partner-option:hover {
     transform: scale(1.05);
     transform: scale(1.05);
     box-shadow: 0 4px 8px rgba(0,0,0,0.2);
     box-shadow: 0 4px 8px rgba(0,0,0,0.2);
第332行: 第459行:
     background: rgba(255,0,0,1) !important;
     background: rgba(255,0,0,1) !important;
     transform: scale(1.1);
     transform: scale(1.1);
}
.select-variant-btn {
    transition: all 0.3s;
}
}


第338行: 第469行:
     transform: translateY(-2px);
     transform: translateY(-2px);
     box-shadow: 0 6px 12px rgba(0,0,0,0.3);
     box-shadow: 0 6px 12px rgba(0,0,0,0.3);
}
#character-slot .character-option:hover {
    transform: none !important;
    box-shadow: none !important;
}
.card-delete-btn:hover {
    background: rgba(255,0,0,1) !important;
    transform: scale(1.1);
}
.deck-card-wrapper {
    position: relative;
    display: inline-block;
}
}
</style>
</style>

2025年10月18日 (六) 23:34的版本

<script> (function() {

   // 等待DOM加载完成
   function initTeamSimulator() {
       // 保存当前选择的战斗员名称
       var currentCharacterName = null;
       var cardIdCounter = 0; // 用于生成唯一ID
       var selectedCards = {}; // 记录每个卡牌的状态
       
       // 点击角色槽位显示选择窗口
       document.getElementById('character-slot').addEventListener('click', function() {
           document.getElementById('character-modal').style.display = 'block';
       });
       
       // 关闭角色选择窗口
       document.getElementById('close-character-modal').addEventListener('click', function() {
           document.getElementById('character-modal').style.display = 'none';
       });
       
       // 点击遮罩层关闭窗口
       document.getElementById('character-modal').addEventListener('click', function(e) {
           if (e.target === this) {
               this.style.display = 'none';
           }
       });
       
       // 加载战斗员卡牌
       function loadCharacterCards(characterName) {
           if (!characterName) {
               console.error('战斗员名称为空');
               return;
           }
           
           currentCharacterName = characterName;
           console.log('加载战斗员卡牌:', characterName);
           
           // 清空卡组区域并显示加载中
           var deckArea = document.getElementById('deck-area');

deckArea.innerHTML = '

加载中...

';

           // 通过API调用模块获取卡牌HTML
           var apiUrl = mw.util.wikiScript('api');
           var params = {
               action: 'parse',
               format: 'json',
               text: '错误: 找不到模块 "Module:卡牌/' + characterName + '"',
               contentmodel: 'wikitext',
               disablelimitreport: true,
               wrapoutputclass: 
           };
           
           fetch(apiUrl + '?' + new URLSearchParams(params))
               .then(response => response.json())
               .then(data => {
                   if (data.parse && data.parse.text) {
                       deckArea.innerHTML = data.parse.text['*'];
                       deckArea.style.border = 'none';
                       deckArea.style.padding = '10px';
                       
                       // 重置
                       selectedCards = {};
                       cardIdCounter = 0;
                       
                       // 为每张卡牌添加功能
                       setTimeout(function() {
                           initializeCardFeatures();
                       }, 100);
                   } else {

deckArea.innerHTML = '

加载卡牌失败

';

                   }
               })
               .catch(error => {
                   console.error('加载卡牌失败:', error);

deckArea.innerHTML = '

加载卡牌出错:' + error.message + '

';

               });
       }
       
       // 初始化卡牌功能
       function initializeCardFeatures() {
           var wrappers = document.querySelectorAll('#deck-area .deck-card-wrapper');
           
           wrappers.forEach(function(wrapper) {
               var card = wrapper.querySelector('.card-small-wrapper');
               if (!card) return;
               
               // 给每个wrapper分配唯一ID
               var uniqueId = 'deck-card-' + (++cardIdCounter);
               wrapper.setAttribute('data-unique-id', uniqueId);
               
               // 记录原始状态
               selectedCards[uniqueId] = {
                   module: wrapper.getAttribute('data-module') || currentCharacterName,
                   cardName: wrapper.getAttribute('data-card'),
                   variantType: null,
                   variantParam: null,
                   variantIndex: null
               };
               
               // 添加删除按钮
               if (!card.querySelector('.card-delete-btn')) {
                   var deleteBtn = document.createElement('div');
                   deleteBtn.className = 'card-delete-btn';
                   deleteBtn.innerHTML = '×';
                   deleteBtn.style.cssText = 'position:absolute;top:5px;right:5px;width:20px;height:20px;background:rgba(255,0,0,0.7);color:white;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:100;font-size:16px;line-height:1;font-weight:bold;';
                   
                   deleteBtn.addEventListener('click', function(e) {
                       e.stopPropagation();
                       wrapper.remove();
                       delete selectedCards[uniqueId];
                   });
                   
                   card.style.position = 'relative';
                   card.appendChild(deleteBtn);
               }
           });
           
           // 全局监听卡牌模态框的显示
           setupGlobalModalListener();
       }
       
       // 设置全局模态框监听器
       function setupGlobalModalListener() {
           // 移除之前的全局监听器
           if (window.deckModalObserver) {
               window.deckModalObserver.disconnect();
           }
           
           // 创建新的观察器
           window.deckModalObserver = new MutationObserver(function(mutations) {
               mutations.forEach(function(mutation) {
                   if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
                       var modal = mutation.target;
                       if (modal.classList.contains('card-modal') && modal.style.display !== 'none') {
                           // 延迟处理,确保模态框内容已经渲染
                           setTimeout(function() {
                               enhanceActiveModal(modal);
                           }, 100);
                       }
                   }
               });
           });
           
           // 观察所有模态框
           document.querySelectorAll('.card-modal').forEach(function(modal) {
               window.deckModalObserver.observe(modal, { 
                   attributes: true, 
                   attributeFilter: ['style'] 
               });
           });
       }
       
       // 增强当前活动的模态框
       function enhanceActiveModal(modal) {
           // 查找是哪张卡牌打开的模态框
           var cardId = modal.id ? modal.id.replace('-modal', ) : null;
           if (!cardId) return;
           
           // 查找对应的deck卡牌
           var deckCard = null;
           var uniqueId = null;
           
           // 遍历所有deck中的卡牌,找到匹配的那个
           document.querySelectorAll('#deck-area .deck-card-wrapper').forEach(function(wrapper) {
               var wrapperCard = wrapper.querySelector('.card-small-wrapper');
               if (wrapperCard && wrapperCard.getAttribute('data-card-id') === cardId) {
                   deckCard = wrapper;
                   uniqueId = wrapper.getAttribute('data-unique-id');
               }
           });
           
           if (!deckCard || !uniqueId) {
               console.log('未找到对应的deck卡牌');
               return;
           }
           
           var cardData = selectedCards[uniqueId];
           if (!cardData) {
               console.log('未找到卡牌数据:', uniqueId);
               return;
           }
           
           console.log('增强模态框,卡牌:', cardData.cardName);
           
           // 标记已处理
           if (modal.hasAttribute('data-deck-enhanced')) {
               return;
           }
           modal.setAttribute('data-deck-enhanced', 'true');
           
           // 处理灵光一闪
           var inspirationButton = modal.querySelector('.inspiration-button');
           if (inspirationButton) {
               inspirationButton.addEventListener('click', function() {
                   setTimeout(function() {
                       enhanceInspirationView(modal, uniqueId);
                   }, 100);
               });
           }
           
           // 处理神光一闪
           var godButton = modal.querySelector('.god-inspiration-button');
           if (godButton) {
               godButton.addEventListener('click', function() {
                   setTimeout(function() {
                       enhanceGodView(modal, uniqueId);
                   }, 100);
               });
           }
       }
       
       // 增强灵光一闪视图
       function enhanceInspirationView(modal, uniqueId) {
           var inspirationView = modal.querySelector('.inspiration-view');
           if (!inspirationView) return;
           
           var cardData = selectedCards[uniqueId];
           if (!cardData) return;
           
           console.log('增强灵光一闪视图,卡牌:', cardData.cardName);
           
           var variants = inspirationView.querySelectorAll('.inspiration-variant');
           variants.forEach(function(variant, index) {
               if (!variant.querySelector('.select-variant-btn')) {
                   var selectBtn = document.createElement('div');
                   selectBtn.className = 'select-variant-btn';
                   selectBtn.innerHTML = '选择此变体';
                   selectBtn.style.cssText = 'margin-top:10px;padding:8px 15px;background:linear-gradient(135deg,#28a745 0%,#218838 100%);color:white;font-size:14px;font-weight:bold;border-radius:6px;cursor:pointer;text-align:center;';
                   
                   selectBtn.addEventListener('click', function() {
                       console.log('选择灵光一闪变体', index + 1, '对于卡牌:', cardData.cardName);
                       replaceCard(uniqueId, '灵光一闪', index + 1);
                       modal.style.display = 'none';
                   });
                   
                   variant.appendChild(selectBtn);
               }
           });
       }
       
       // 增强神光一闪视图
       function enhanceGodView(modal, uniqueId) {
           var godView = modal.querySelector('.god-inspiration-view');
           if (!godView) return;
           
           var cardData = selectedCards[uniqueId];
           if (!cardData) return;
           
           console.log('增强神光一闪视图,卡牌:', cardData.cardName);
           
           var godGroups = godView.querySelectorAll('.god-group');
           godGroups.forEach(function(group) {
               var groupNameEl = group.querySelector('div[style*="color:#ffd36a"]');
               if (!groupNameEl) return;
               
               var groupName = groupNameEl.textContent.trim();
               var variants = group.querySelectorAll('.god-variant-card');
               
               variants.forEach(function(variant, index) {
                   if (!variant.querySelector('.select-variant-btn')) {
                       var selectBtn = document.createElement('div');
                       selectBtn.className = 'select-variant-btn';
                       selectBtn.innerHTML = '选择';
                       selectBtn.style.cssText = 'margin-top:5px;padding:6px 12px;background:linear-gradient(135deg,#28a745 0%,#218838 100%);color:white;font-size:12px;font-weight:bold;border-radius:4px;cursor:pointer;text-align:center;';
                       
                       selectBtn.addEventListener('click', function() {
                           console.log('选择神光一闪变体', groupName, index + 1, '对于卡牌:', cardData.cardName);
                           replaceCard(uniqueId, '神光一闪', groupName, index + 1);
                           modal.style.display = 'none';
                       });
                       
                       variant.appendChild(selectBtn);
                   }
               });
           });
       }
       
       // 替换卡牌
       function replaceCard(uniqueId, variantType, param1, param2) {
           var cardData = selectedCards[uniqueId];
           if (!cardData) {
               console.error('找不到卡牌数据:', uniqueId);
               return;
           }
           
           var wrapper = document.querySelector('[data-unique-id="' + uniqueId + '"]');
           if (!wrapper) {
               console.error('找不到卡牌容器:', uniqueId);
               return;
           }
           
           console.log('替换卡牌:', cardData.cardName, '变体类型:', variantType, '参数:', param1, param2);
           
           // 更新记录
           cardData.variantType = variantType;
           cardData.variantParam = param1;
           cardData.variantIndex = param2;
           
           // 显示加载中
           var oldContent = wrapper.innerHTML;

wrapper.innerHTML = '

加载中...

';

           // 构建invoke调用
           var invokeText = '错误: 找不到模块 "Module:卡牌/' + cardData.module + '"';
           
           console.log('调用文本:', invokeText);
           
           // 通过API获取新卡牌HTML
           var apiUrl = mw.util.wikiScript('api');
           var params = {
               action: 'parse',
               format: 'json',
               text: invokeText,
               contentmodel: 'wikitext',
               disablelimitreport: true
           };
           
           fetch(apiUrl + '?' + new URLSearchParams(params))
               .then(response => response.json())
               .then(data => {
                   if (data.parse && data.parse.text) {
                       wrapper.innerHTML = data.parse.text['*'];
                       
                       // 重新添加删除按钮
                       setTimeout(function() {
                           var newCard = wrapper.querySelector('.card-small-wrapper');
                           if (newCard) {
                               // 添加删除按钮
                               var deleteBtn = document.createElement('div');
                               deleteBtn.className = 'card-delete-btn';
                               deleteBtn.innerHTML = '×';
                               deleteBtn.style.cssText = 'position:absolute;top:5px;right:5px;width:20px;height:20px;background:rgba(255,0,0,0.7);color:white;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:100;font-size:16px;line-height:1;font-weight:bold;';
                               
                               deleteBtn.addEventListener('click', function(e) {
                                   e.stopPropagation();
                                   wrapper.remove();
                                   delete selectedCards[uniqueId];
                               });
                               
                               newCard.style.position = 'relative';
                               newCard.appendChild(deleteBtn);
                           }
                           
                           // 重新设置全局监听
                           setupGlobalModalListener();
                       }, 100);
                   } else {
                       console.error('API返回数据无效');
                       wrapper.innerHTML = oldContent;
                   }
               })
               .catch(error => {
                   console.error('替换卡牌失败:', error);
                   wrapper.innerHTML = oldContent;
               });
       }
       
       // 选择角色 - 使用事件委托
       document.getElementById('character-list').addEventListener('click', function(e) {
           var characterOption = e.target.closest('.character-option');
           if (characterOption) {
               // 获取战斗员名称
               var characterName = characterOption.getAttribute('data-character-name') || 
                                 characterOption.getAttribute('data-name') ||
                                 characterOption.getAttribute('title');
               
               if (!characterName) {
                   var nameEl = characterOption.querySelector('.character-name, [class*="name"]');
                   if (nameEl) characterName = nameEl.textContent.trim();
               }
               
               console.log('选中的战斗员:', characterName);
               
               // 克隆卡片显示
               var clonedCard = characterOption.cloneNode(true);
               clonedCard.classList.remove('character-option');
               clonedCard.style.cursor = 'default';
               
               var characterSlot = document.getElementById('character-slot');
               characterSlot.innerHTML = ;
               characterSlot.appendChild(clonedCard);
               characterSlot.style.border = 'none';
               
               document.getElementById('character-modal').style.display = 'none';
               
               if (characterName) {
                   loadCharacterCards(characterName);
               }
           }
       });
       
       // 伙伴相关代码保持不变...
       document.getElementById('partner-slot').addEventListener('click', function() {
           document.getElementById('partner-modal').style.display = 'block';
       });
       
       document.getElementById('close-partner-modal').addEventListener('click', function() {
           document.getElementById('partner-modal').style.display = 'none';
       });
       
       document.getElementById('partner-modal').addEventListener('click', function(e) {
           if (e.target === this) {
               this.style.display = 'none';
           }
       });
       
       document.getElementById('partner-list').addEventListener('click', function(e) {
           var partnerOption = e.target.closest('.partner-option');
           if (partnerOption) {
               var partnerId = partnerOption.dataset.partnerId || partnerOption.getAttribute('data-partner-id');
               
               var partnerImg = document.createElement('img');
               partnerImg.src = '/index.php?title=Special:Redirect/file/Portrait_character_wide_' + partnerId + '.png';
               partnerImg.style.width = '150px';
               partnerImg.style.height = '77px';
               partnerImg.style.objectFit = 'cover';
               
               var partnerSlot = document.getElementById('partner-slot');
               partnerSlot.innerHTML = ;
               partnerSlot.appendChild(partnerImg);
               partnerSlot.style.border = 'none';
               
               document.getElementById('partner-modal').style.display = 'none';
           }
       });
   }
   
   // 确保DOM加载完成后执行
   if (document.readyState === 'loading') {
       document.addEventListener('DOMContentLoaded', initTeamSimulator);
   } else {
       initTeamSimulator();
   }

})(); </script>

<style> .character-option:hover {

   transform: scale(1.05);
   box-shadow: 0 4px 8px rgba(0,0,0,0.2);

}

.partner-option {

   cursor: pointer;
   transition: transform 0.2s;

}

.partner-option:hover {

   transform: scale(1.05);
   box-shadow: 0 4px 8px rgba(0,0,0,0.2);

}

.card-delete-btn:hover {

   background: rgba(255,0,0,1) !important;
   transform: scale(1.1);

}

.select-variant-btn {

   transition: all 0.3s;

}

.select-variant-btn:hover {

   opacity: 0.9;
   transform: translateY(-2px);
   box-shadow: 0 6px 12px rgba(0,0,0,0.3);

} </style>