微件

配队模拟器:修订间差异

来自卡厄思梦境WIKI

律Rhyme留言 | 贡献
无编辑摘要
律Rhyme留言 | 贡献
无编辑摘要
第5行: 第5行:
         // 保存当前选择的战斗员名称
         // 保存当前选择的战斗员名称
         var currentCharacterName = null;
         var currentCharacterName = null;
        var selectedCards = {}; // 记录每个位置的卡牌状态
          
          
         // 点击角色槽位显示选择窗口
         // 点击角色槽位显示选择窗口
第40行: 第41行:
             var apiUrl = mw.util.wikiScript('api');
             var apiUrl = mw.util.wikiScript('api');
             var params = {
             var params = {
                 action: 'expandtemplates',
                 action: 'parse',
                 format: 'json',
                 format: 'json',
                 text: '{{#invoke:配队/卡牌|deck|' + characterName + '}}',
                 text: '{{#invoke:配队/卡牌|deck|' + characterName + '}}',
                 prop: 'wikitext'
                 contentmodel: 'wikitext',
                disablelimitreport: true,
                wrapoutputclass: ''
             };
             };
              
              
第49行: 第52行:
                 .then(response => response.json())
                 .then(response => response.json())
                 .then(data => {
                 .then(data => {
                     if (data.expandtemplates && data.expandtemplates.wikitext) {
                     if (data.parse && data.parse.text) {
                         deckArea.innerHTML = data.expandtemplates.wikitext;
                         deckArea.innerHTML = data.parse.text['*'];
                         deckArea.style.border = 'none';
                         deckArea.style.border = 'none';
                         deckArea.style.padding = '10px';
                         deckArea.style.padding = '10px';
                          
                          
                         // 为每张卡牌添加删除按钮
                         // 重置selectedCards
                        selectedCards = {};
                       
                        // 为每张卡牌添加功能
                         setTimeout(function() {
                         setTimeout(function() {
                             addDeleteButtons();
                             initializeCardFeatures();
                            addCardClickEvents();
                         }, 100);
                         }, 100);
                     } else {
                     } else {
第69行: 第74行:
         }
         }
          
          
         // 为卡牌添加删除按钮
         // 初始化卡牌功能
         function addDeleteButtons() {
         function initializeCardFeatures() {
             var cards = document.querySelectorAll('#deck-area .card-small-wrapper');
             var wrappers = document.querySelectorAll('#deck-area .deck-card-wrapper');
            console.log('找到卡牌数量:', cards.length);
              
              
             cards.forEach(function(card) {
             wrappers.forEach(function(wrapper, index) {
                 // 检查是否已有删除按钮
                var card = wrapper.querySelector('.card-small-wrapper');
                if (!card) return;
               
                // 记录原始状态
                selectedCards[index] = {
                    module: wrapper.getAttribute('data-module') || currentCharacterName,
                    cardName: wrapper.getAttribute('data-card'),
                    variantType: null,
                    variantParam: null,
                    variantIndex: null
                };
               
                 // 添加删除按钮
                 if (!card.querySelector('.card-delete-btn')) {
                 if (!card.querySelector('.card-delete-btn')) {
                     var deleteBtn = document.createElement('div');
                     var deleteBtn = document.createElement('div');
第84行: 第100行:
                     deleteBtn.addEventListener('click', function(e) {
                     deleteBtn.addEventListener('click', function(e) {
                         e.stopPropagation();
                         e.stopPropagation();
                         // 删除整个卡牌包装器
                         wrapper.remove();
                        var wrapper = card.closest('.deck-card-wrapper');
                         delete selectedCards[index];
                        if (wrapper) {
                            wrapper.remove();
                         } else {
                            card.remove();
                        }
                     });
                     });
                      
                      
第96行: 第107行:
                     card.appendChild(deleteBtn);
                     card.appendChild(deleteBtn);
                 }
                 }
               
                // 监听卡牌上的按钮点击
                setupCardModalListeners(card, index);
             });
             });
         }
         }
          
          
         // 为卡牌添加点击事件(替换为灵光/神光一闪)
         // 设置卡牌模态框的监听器
         function addCardClickEvents() {
         function setupCardModalListeners(cardElement, cardIndex) {
             var cards = document.querySelectorAll('#deck-area .card-small-wrapper');
             // 当点击卡牌时,会自动打开模态框,我们需要监听模态框内的按钮
            var observer = new MutationObserver(function(mutations) {
                mutations.forEach(function(mutation) {
                    if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
                        var modal = document.querySelector('.card-modal[style*="display: block"]');
                        if (modal && !modal.hasAttribute('data-enhanced')) {
                            modal.setAttribute('data-enhanced', 'true');
                            enhanceCardModal(modal, cardIndex);
                        }
                    }
                });
            });
              
              
             cards.forEach(function(card) {
             // 观察所有模态框的显示状态变化
                 card.style.cursor = 'pointer';
            document.querySelectorAll('.card-modal').forEach(function(modal) {
               
                 observer.observe(modal, { attributes: true, attributeFilter: ['style'] });
                 card.addEventListener('click', function(e) {
            });
                     // 如果点击的是删除按钮,不触发替换
        }
                     if (e.target.classList.contains('card-delete-btn')) {
       
                         return;
        // 增强卡牌模态框
        function enhanceCardModal(modal, cardIndex) {
            // 找到灵光一闪视图中的变体卡牌
            var inspirationView = modal.querySelector('.inspiration-view');
            if (inspirationView) {
                 var variantCards = inspirationView.querySelectorAll('.inspiration-variant-card');
                variantCards.forEach(function(variantCard, variantIndex) {
                     // 为每个变体卡牌添加"选择"按钮
                     if (!variantCard.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() {
                            replaceCard(cardIndex, '灵光一闪', variantIndex + 1);
                            // 关闭模态框
                            modal.style.display = 'none';
                         });
                       
                        variantCard.parentElement.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) {
                    var wrapper = this.closest('.deck-card-wrapper');
                        if (!variantCard.parentElement.querySelector('.select-variant-btn')) {
                    if (wrapper) {
                            var selectBtn = document.createElement('div');
                        var module = wrapper.getAttribute('data-module');
                            selectBtn.className = 'select-variant-btn';
                        var cardName = wrapper.getAttribute('data-card');
                            selectBtn.innerHTML = '选择';
                        if (module && cardName) {
                            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;';
                            showVariantSelection(wrapper, module, cardName);
                           
                            selectBtn.addEventListener('click', function() {
                                replaceCard(cardIndex, '神光一闪', groupName, variantIndex + 1);
                                // 关闭模态框
                                modal.style.display = 'none';
                            });
                           
                            variantCard.parentElement.appendChild(selectBtn);
                         }
                         }
                     }
                     });
                 });
                 });
             });
             }
         }
         }
          
          
         // 显示变体选择弹窗
         // 替换卡牌
         function showVariantSelection(cardWrapper, module, cardName) {
         function replaceCard(cardIndex, variantType, param1, param2) {
            // 创建选择弹窗
             var cardData = selectedCards[cardIndex];
             var modal = document.createElement('div');
             if (!cardData) return;
            modal.className = 'variant-modal';
             modal.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.8);z-index:10000;display:flex;align-items:center;justify-content:center;';
              
              
             var modalContent = document.createElement('div');
             var wrapper = document.querySelectorAll('#deck-area .deck-card-wrapper')[cardIndex];
             modalContent.style.cssText = 'background:white;padding:20px;border-radius:10px;max-width:500px;';
             if (!wrapper) return;
              
              
             modalContent.innerHTML = `
             console.log('替换卡牌:', cardData.cardName, variantType, param1, param2);
                <h3 style="margin-top:0;">选择卡牌变体</h3>
                <p>卡牌: ${cardName}</p>
                <div style="display:flex;flex-direction:column;gap:10px;margin-top:20px;">
                    <button class="variant-btn" data-type="original" style="padding:10px 20px;background:#007bff;color:white;border:none;border-radius:5px;cursor:pointer;">保持原始卡牌</button>
                    <button class="variant-btn" data-type="inspiration" style="padding:10px 20px;background:#28a745;color:white;border:none;border-radius:5px;cursor:pointer;">替换为灵光一闪</button>
                    <button class="variant-btn" data-type="god" style="padding:10px 20px;background:#ffc107;color:black;border:none;border-radius:5px;cursor:pointer;">替换为神光一闪</button>
                </div>
                <button class="close-modal" style="margin-top:20px;padding:10px 20px;background:#dc3545;color:white;border:none;border-radius:5px;cursor:pointer;width:100%;">关闭</button>
            `;
              
              
            modal.appendChild(modalContent);
             // 更新记录
            document.body.appendChild(modal);
             if (variantType) {
           
                 cardData.variantType = variantType;
             // 绑定事件
                 cardData.variantParam = param1;
             modalContent.querySelector('.close-modal').onclick = function() {
                cardData.variantIndex = param2;
                 modal.remove();
            } else {
            };
                cardData.variantType = null;
           
                 cardData.variantParam = null;
            modalContent.querySelectorAll('.variant-btn').forEach(function(btn) {
                 cardData.variantIndex = null;
                 btn.onclick = function() {
             }
                    var type = this.getAttribute('data-type');
                    if (type === 'original') {
                        modal.remove();
                    } else if (type === 'inspiration') {
                        // 简化版:直接替换为第一个灵光一闪变体
                        replaceCardWithVariant(cardWrapper, module, cardName, '灵光一闪', '1');
                        modal.remove();
                    } else if (type === 'god') {
                        // 简化版:替换为默认的神光一闪变体
                        replaceCardWithVariant(cardWrapper, module, cardName, '神光一闪', 'circen', '1');
                        modal.remove();
                    }
                 };
            });
           
            // 点击背景关闭
            modal.onclick = function(e) {
                 if (e.target === modal) {
                    modal.remove();
                }
             };
        }
       
        // 替换卡牌为变体
        function replaceCardWithVariant(cardWrapper, module, cardName, variantType, param1, param2) {
            console.log('替换卡牌:', module, cardName, variantType, param1, param2);
              
              
             // 显示加载中
             // 显示加载中
             cardWrapper.innerHTML = '<div style="color:#999;">加载中...</div>';
             wrapper.innerHTML = '<div style="color:#999;">加载中...</div>';
              
              
             // 构建invoke调用
             // 构建invoke调用
             var invokeText = '{{#invoke:卡牌|main|' + module + '|' + cardName;
             var invokeText = '{{#invoke:卡牌|main|' + cardData.module + '|' + cardData.cardName;
             if (variantType === '灵光一闪') {
             if (variantType === '灵光一闪') {
                 invokeText += '|灵光一闪|' + param1;
                 invokeText += '|灵光一闪|' + param1;
第198行: 第223行:
             var apiUrl = mw.util.wikiScript('api');
             var apiUrl = mw.util.wikiScript('api');
             var params = {
             var params = {
                 action: 'expandtemplates',
                 action: 'parse',
                 format: 'json',
                 format: 'json',
                 text: invokeText,
                 text: invokeText,
                 prop: 'wikitext'
                 contentmodel: 'wikitext',
                disablelimitreport: true
             };
             };
              
              
第207行: 第233行:
                 .then(response => response.json())
                 .then(response => response.json())
                 .then(data => {
                 .then(data => {
                     if (data.expandtemplates && data.expandtemplates.wikitext) {
                     if (data.parse && data.parse.text) {
                         cardWrapper.innerHTML = data.expandtemplates.wikitext;
                         wrapper.innerHTML = data.parse.text['*'];
                         // 重新添加删除按钮和点击事件
                       
                         // 重新添加删除按钮和事件
                         setTimeout(function() {
                         setTimeout(function() {
                             var newCard = cardWrapper.querySelector('.card-small-wrapper');
                             var newCard = wrapper.querySelector('.card-small-wrapper');
                             if (newCard) {
                             if (newCard) {
                                 // 添加删除按钮
                                 // 添加删除按钮
第221行: 第248行:
                                 deleteBtn.addEventListener('click', function(e) {
                                 deleteBtn.addEventListener('click', function(e) {
                                     e.stopPropagation();
                                     e.stopPropagation();
                                     cardWrapper.remove();
                                     wrapper.remove();
                                    delete selectedCards[cardIndex];
                                 });
                                 });
                                  
                                  
                                 newCard.style.position = 'relative';
                                 newCard.style.position = 'relative';
                                newCard.style.cursor = 'pointer';
                                 newCard.appendChild(deleteBtn);
                                 newCard.appendChild(deleteBtn);
                                  
                                  
                                 // 添加点击事件
                                 // 重新设置监听器
                                 newCard.addEventListener('click', function(e) {
                                 setupCardModalListeners(newCard, cardIndex);
                                    if (!e.target.classList.contains('card-delete-btn')) {
                                        showVariantSelection(cardWrapper, module, cardName);
                                    }
                                });
                             }
                             }
                         }, 100);
                         }, 100);
第240行: 第263行:
                 .catch(error => {
                 .catch(error => {
                     console.error('替换卡牌失败:', error);
                     console.error('替换卡牌失败:', error);
                     cardWrapper.innerHTML = '<div style="color:red;">替换失败</div>';
                     wrapper.innerHTML = '<div style="color:red;">替换失败</div>';
                 });
                 });
         }
         }
第252行: 第275行:
                  
                  
                 // 方式1: 从data属性获取
                 // 方式1: 从data属性获取
                 characterName = characterOption.getAttribute('data-character-name');
                 characterName = characterOption.getAttribute('data-character-name') ||
               
                              characterOption.getAttribute('data-name') ||
                // 方式2: 从data-name属性获取
                              characterOption.getAttribute('title');
                if (!characterName) {
                    characterName = characterOption.getAttribute('data-name');
                }
                  
                  
                 // 方式3: 从子元素的文本获取
                 // 方式2: 从子元素获取
                 if (!characterName) {
                 if (!characterName) {
                     var nameElement = characterOption.querySelector('.character-name, [class*="name"], span, div');
                     var nameElement = characterOption.querySelector('.character-name, [class*="name"], span, div');
                     if (nameElement && nameElement.textContent) {
                     if (nameElement && nameElement.textContent) {
                         characterName = nameElement.textContent.trim();
                         characterName = nameElement.textContent.trim();
                    }
                }
               
                // 方式4: 从title属性获取
                if (!characterName) {
                    characterName = characterOption.getAttribute('title');
                }
               
                // 方式5: 从整个元素的文本内容获取(最后的办法)
                if (!characterName) {
                    characterName = characterOption.textContent.trim();
                    // 如果文本太长或包含其他内容,可能需要进一步处理
                    if (characterName.length > 20) {
                        characterName = null;
                     }
                     }
                 }
                 }
第285行: 第291行:
                 // 克隆整个角色卡片
                 // 克隆整个角色卡片
                 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';
                clonedCard.style.transition = 'none';
                clonedCard.style.margin = '0';
                  
                  
                 // 清空槽位并添加克隆的卡片
                 // 更新槽位
                 var characterSlot = document.getElementById('character-slot');
                 var characterSlot = document.getElementById('character-slot');
                 characterSlot.innerHTML = '';
                 characterSlot.innerHTML = '';
第298行: 第300行:
                 characterSlot.style.border = 'none';
                 characterSlot.style.border = 'none';
                 characterSlot.style.padding = '0';
                 characterSlot.style.padding = '0';
                characterSlot.style.display = 'block';
                  
                  
                 // 关闭选择窗口
                 // 关闭选择窗口
第306行: 第307行:
                 if (characterName) {
                 if (characterName) {
                     loadCharacterCards(characterName);
                     loadCharacterCards(characterName);
                } else {
                    console.error('无法获取战斗员名称');
                    var deckArea = document.getElementById('deck-area');
                    deckArea.innerHTML = '<div style="color:red;">无法识别战斗员,请检查模板配置</div>';
                 }
                 }
             }
             }
         });
         });
          
          
         // 点击伙伴槽位显示选择窗口
         // 伙伴选择相关代码保持不变...
        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) {
                // 获取伙伴ID(从data属性或其他方式)
                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';
                partnerSlot.style.padding = '0';
               
                // 关闭选择窗口
                document.getElementById('partner-modal').style.display = 'none';
            }
        });
     }
     }
      
      
第373行: 第329行:
}
}


.partner-option {
.card-delete-btn:hover {
     cursor: pointer;
     background: rgba(255,0,0,1) !important;
     transition: transform 0.2s;
     transform: scale(1.1);
}
}


.partner-option:hover {
.select-variant-btn:hover {
     transform: scale(1.05);
    opacity: 0.9;
     box-shadow: 0 4px 8px rgba(0,0,0,0.2);
     transform: translateY(-2px);
     box-shadow: 0 6px 12px rgba(0,0,0,0.3);
}
}



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

<script> (function() {

   // 等待DOM加载完成
   function initTeamSimulator() {
       // 保存当前选择的战斗员名称
       var currentCharacterName = null;
       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
                       selectedCards = {};
                       
                       // 为每张卡牌添加功能
                       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, index) {
               var card = wrapper.querySelector('.card-small-wrapper');
               if (!card) return;
               
               // 记录原始状态
               selectedCards[index] = {
                   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[index];
                   });
                   
                   card.style.position = 'relative';
                   card.appendChild(deleteBtn);
               }
               
               // 监听卡牌上的按钮点击
               setupCardModalListeners(card, index);
           });
       }
       
       // 设置卡牌模态框的监听器
       function setupCardModalListeners(cardElement, cardIndex) {
           // 当点击卡牌时,会自动打开模态框,我们需要监听模态框内的按钮
           var observer = new MutationObserver(function(mutations) {
               mutations.forEach(function(mutation) {
                   if (mutation.type === 'attributes' && mutation.attributeName === 'style') {
                       var modal = document.querySelector('.card-modal[style*="display: block"]');
                       if (modal && !modal.hasAttribute('data-enhanced')) {
                           modal.setAttribute('data-enhanced', 'true');
                           enhanceCardModal(modal, cardIndex);
                       }
                   }
               });
           });
           
           // 观察所有模态框的显示状态变化
           document.querySelectorAll('.card-modal').forEach(function(modal) {
               observer.observe(modal, { attributes: true, attributeFilter: ['style'] });
           });
       }
       
       // 增强卡牌模态框
       function enhanceCardModal(modal, cardIndex) {
           // 找到灵光一闪视图中的变体卡牌
           var inspirationView = modal.querySelector('.inspiration-view');
           if (inspirationView) {
               var variantCards = inspirationView.querySelectorAll('.inspiration-variant-card');
               variantCards.forEach(function(variantCard, variantIndex) {
                   // 为每个变体卡牌添加"选择"按钮
                   if (!variantCard.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() {
                           replaceCard(cardIndex, '灵光一闪', variantIndex + 1);
                           // 关闭模态框
                           modal.style.display = 'none';
                       });
                       
                       variantCard.parentElement.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) {
           var cardData = selectedCards[cardIndex];
           if (!cardData) return;
           
           var wrapper = document.querySelectorAll('#deck-area .deck-card-wrapper')[cardIndex];
           if (!wrapper) return;
           
           console.log('替换卡牌:', cardData.cardName, variantType, param1, param2);
           
           // 更新记录
           if (variantType) {
               cardData.variantType = variantType;
               cardData.variantParam = param1;
               cardData.variantIndex = param2;
           } else {
               cardData.variantType = null;
               cardData.variantParam = null;
               cardData.variantIndex = null;
           }
           
           // 显示加载中

wrapper.innerHTML = '

加载中...

';

           // 构建invoke调用
           var invokeText = '错误: 找不到模块 "Module:卡牌/' + cardData.module + '"';
           
           // 通过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[cardIndex];
                               });
                               
                               newCard.style.position = 'relative';
                               newCard.appendChild(deleteBtn);
                               
                               // 重新设置监听器
                               setupCardModalListeners(newCard, cardIndex);
                           }
                       }, 100);
                   }
               })
               .catch(error => {
                   console.error('替换卡牌失败:', error);

wrapper.innerHTML = '

替换失败

';

               });
       }
       
       // 选择角色 - 使用事件委托
       document.getElementById('character-list').addEventListener('click', function(e) {
           var characterOption = e.target.closest('.character-option');
           if (characterOption) {
               // 获取战斗员名称 - 尝试多种方式
               var characterName = null;
               
               // 方式1: 从data属性获取
               characterName = characterOption.getAttribute('data-character-name') || 
                              characterOption.getAttribute('data-name') ||
                              characterOption.getAttribute('title');
               
               // 方式2: 从子元素获取
               if (!characterName) {
                   var nameElement = characterOption.querySelector('.character-name, [class*="name"], span, div');
                   if (nameElement && nameElement.textContent) {
                       characterName = nameElement.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';
               characterSlot.style.padding = '0';
               
               // 关闭选择窗口
               document.getElementById('character-modal').style.display = 'none';
               
               // 加载该战斗员的卡牌
               if (characterName) {
                   loadCharacterCards(characterName);
               }
           }
       });
       
       // 伙伴选择相关代码保持不变...
   }
   
   // 确保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);

}

.card-delete-btn:hover {

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

}

.select-variant-btn:hover {

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

}

  1. 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>