卡厄思
梦
境
菜单
首页
回到首页
WIKI工具
全站样式
全站JS
修改导航栏
测试
沙盒
可视化管理器
战斗员管理器
卡牌管理器
伙伴管理器
装备管理器
词典管理器
图鉴
战斗员
伙伴
装备
怪物卡牌
中立卡牌
词典
小工具
配队模拟器
节奏榜生成器
搜索
链入页面
相关更改
特殊页面
页面信息
最近更改
登录
MediaWiki
查看“︁Event.js”︁的源代码
←
MediaWiki:Event.js
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
此页面为本wiki上的软件提供界面文本,并受到保护以防止滥用。 如欲修改所有wiki的翻译,请访问
translatewiki.net
上的MediaWiki本地化项目。
您无权编辑此JavaScript页面,因为编辑此页面可能会影响所有访问者。
您可以查看和复制此页面的源代码。
(function() { 'use strict'; // 加载CSS mw.loader.load('/index.php?title=MediaWiki:Event.css&action=raw&ctype=text/css', 'text/css'); // 等待页面加载完成 if (mw.config.get('wgPageName') !== 'MediaWiki:Event') { return; } var eventData = {}; var selectedEvent = null; // 地区和稀有度选项 var areaOptions = ['蓝壶', '双星之影', '雾之都市']; var rarityOptions = ['一般', '稀有', '传说']; // 创建主界面 function createInterface() { var container = document.getElementById('mw-content-text'); if (!container) return; container.innerHTML = ''; var html = '<div class="event-manager">' + '<h2>事件管理器</h2>' + '<div class="event-toolbar">' + '<button id="btn-add-event">新增事件</button>' + '<button id="btn-export">导出Lua代码</button>' + '<button id="btn-import">导入数据</button>' + '</div>' + '<div class="event-list" id="event-list"></div>' + '<div class="output-container" id="output-container" style="display:none;">' + '<h3>导出的Lua代码</h3>' + '<pre id="lua-output"></pre>' + '<button class="copy-btn" id="btn-copy">复制代码</button>' + '</div>' + '</div>' + '<div class="event-overlay" id="event-overlay"></div>' + '<div class="event-form" id="event-form"></div>'; container.innerHTML = html; // 绑定事件 document.getElementById('btn-add-event').addEventListener('click', function() { showEventForm(); }); document.getElementById('btn-export').addEventListener('click', exportToLua); document.getElementById('btn-import').addEventListener('click', importData); document.getElementById('btn-copy').addEventListener('click', copyLuaCode); document.getElementById('event-overlay').addEventListener('click', hideEventForm); // 加载示例数据 loadSampleData(); renderEventList(); } // 加载示例数据 function loadSampleData() { eventData["小偷们 1"] = { id: "uk_300_s02_01a", area: "蓝壶", tag: "战斗,获得信用点数", rarity: "一般", option: { 1: "购买匕首", 2: "偷走他们的箱子", 3: "赞扬这项技术" }, effect: { 1: "待补充", 2: "遭遇战斗,获得{{文本|橙|120}}信用点数", 3: "待补充" } }; } // 渲染事件列表 function renderEventList() { var listContainer = document.getElementById('event-list'); listContainer.innerHTML = ''; for (var eventName in eventData) { var event = eventData[eventName]; var itemDiv = document.createElement('div'); itemDiv.className = 'event-item'; itemDiv.dataset.eventName = eventName; itemDiv.innerHTML = '<div class="event-item-header">' + '<div class="event-item-title">' + eventName + '</div>' + '<div>ID: ' + event.id + '</div>' + '</div>' + '<div class="event-item-meta">' + '<span>地区: ' + event.area + '</span>' + '<span>稀有度: ' + event.rarity + '</span>' + '<span>标签: ' + event.tag + '</span>' + '</div>'; itemDiv.addEventListener('click', function() { var name = this.dataset.eventName; showEventForm(name); }); listContainer.appendChild(itemDiv); } } // 显示事件表单 function showEventForm(eventName) { var overlay = document.getElementById('event-overlay'); var form = document.getElementById('event-form'); overlay.className = 'event-overlay active'; form.className = 'event-form active'; var isEdit = !!eventName; var event = isEdit ? eventData[eventName] : { id: '', area: '', tag: '', rarity: '一般', option: {1: '', 2: '', 3: ''}, effect: {1: '', 2: '', 3: ''} }; var formHtml = '<h3>' + (isEdit ? '编辑事件' : '新增事件') + '</h3>' + '<div class="form-group">' + '<label>事件名称</label>' + '<input type="text" id="event-name" value="' + (eventName || '') + '">' + '</div>' + '<div class="form-group">' + '<label>ID</label>' + '<input type="text" id="event-id" value="' + event.id + '">' + '</div>' + '<div class="form-group">' + '<label>地区(可多选)</label>' + '<div class="checkbox-group">'; // 地区复选框 var selectedAreas = event.area ? event.area.split(',').map(function(s) { return s.trim(); }) : []; areaOptions.forEach(function(area) { var checked = selectedAreas.indexOf(area) !== -1 ? 'checked' : ''; formHtml += '<label><input type="checkbox" name="area" value="' + area + '" ' + checked + '> ' + area + '</label>'; }); formHtml += '</div></div>' + '<div class="form-group">' + '<label>标签(用逗号分隔)</label>' + '<input type="text" id="event-tag" value="' + event.tag + '" placeholder="例如: 战斗,获得信用点数">' + '</div>' + '<div class="form-group">' + '<label>稀有度</label>' + '<select id="event-rarity">'; rarityOptions.forEach(function(rarity) { var selected = event.rarity === rarity ? 'selected' : ''; formHtml += '<option value="' + rarity + '" ' + selected + '>' + rarity + '</option>'; }); formHtml += '</select></div>' + '<div class="form-group">' + '<label>选项</label>' + '<div class="options-container">'; for (var i = 1; i <= 3; i++) { formHtml += '<div class="option-item">' + '<span class="option-number">' + i + '.</span>' + '<input type="text" id="option-' + i + '" value="' + (event.option[i] || '') + '" placeholder="选项 ' + i + '">' + '</div>'; } formHtml += '</div></div>' + '<div class="form-group">' + '<label>效果</label>' + '<div class="effects-container">'; for (var j = 1; j <= 3; j++) { formHtml += '<div class="effect-item">' + '<span class="option-number">' + j + '.</span>' + '<div style="flex: 1;">' + '<div class="effect-controls">' + '<button class="text-format-btn" data-effect-id="' + j + '">橙色文本</button>' + '</div>' + '<textarea id="effect-' + j + '" placeholder="效果 ' + j + '">' + (event.effect[j] || '') + '</textarea>' + '</div>' + '</div>'; } formHtml += '</div></div>' + '<div class="form-buttons">'; if (isEdit) { formHtml += '<button class="btn-delete" id="btn-delete">删除</button>'; } formHtml += '<button class="btn-cancel" id="btn-cancel">取消</button>' + '<button class="btn-save" id="btn-save">保存</button>' + '</div>'; form.innerHTML = formHtml; // 绑定表单事件 document.getElementById('btn-save').addEventListener('click', function() { saveEvent(eventName); }); document.getElementById('btn-cancel').addEventListener('click', hideEventForm); if (isEdit) { document.getElementById('btn-delete').addEventListener('click', function() { if (confirm('确定要删除事件 "' + eventName + '" 吗?')) { delete eventData[eventName]; renderEventList(); hideEventForm(); } }); } // 绑定橙色文本按钮 var formatBtns = document.querySelectorAll('.text-format-btn'); formatBtns.forEach(function(btn) { btn.addEventListener('click', function(e) { e.preventDefault(); var effectId = this.dataset.effectId; insertOrangeText(effectId); }); }); } // 插入橙色文本模板 function insertOrangeText(effectId) { var textarea = document.getElementById('effect-' + effectId); var start = textarea.selectionStart; var end = textarea.selectionEnd; var selectedText = textarea.value.substring(start, end); var insertText = selectedText ? '{{文本|橙|' + selectedText + '}}' : '{{文本|橙|}}'; var newValue = textarea.value.substring(0, start) + insertText + textarea.value.substring(end); textarea.value = newValue; // 设置光标位置 if (!selectedText) { var cursorPos = start + 7; // {{文本|橙| 的长度 textarea.setSelectionRange(cursorPos, cursorPos); } textarea.focus(); } // 隐藏表单 function hideEventForm() { document.getElementById('event-overlay').className = 'event-overlay'; document.getElementById('event-form').className = 'event-form'; } // 保存事件 function saveEvent(originalName) { var eventName = document.getElementById('event-name').value.trim(); if (!eventName) { alert('请输入事件名称'); return; } // 获取选中的地区 var areaCheckboxes = document.querySelectorAll('input[name="area"]:checked'); var areas = []; areaCheckboxes.forEach(function(cb) { areas.push(cb.value); }); var newEvent = { id: document.getElementById('event-id').value.trim(), area: areas.join(','), tag: document.getElementById('event-tag').value.trim(), rarity: document.getElementById('event-rarity').value, option: {}, effect: {} }; for (var i = 1; i <= 3; i++) { var optionValue = document.getElementById('option-' + i).value.trim(); var effectValue = document.getElementById('effect-' + i).value.trim(); if (optionValue) { newEvent.option[i] = optionValue; newEvent.effect[i] = effectValue || '待补充'; } } // 如果是编辑且名称改变了,删除原来的 if (originalName && originalName !== eventName) { delete eventData[originalName]; } eventData[eventName] = newEvent; renderEventList(); hideEventForm(); } // 导出为Lua代码 function exportToLua() { var lua = 'local event = {}\n\n'; for (var eventName in eventData) { var event = eventData[eventName]; lua += 'event["' + eventName + '"] = {\n'; lua += ' id = "' + event.id + '",\n'; lua += ' area = "' + event.area + '",\n'; lua += ' tag = "' + event.tag + '",\n'; lua += ' rarity = "' + event.rarity + '",\n'; lua += ' option = {\n'; for (var opt in event.option) { lua += ' [' + opt + '] = "' + event.option[opt] + '",\n'; } lua += ' },\n'; lua += ' effect = {\n'; for (var eff in event.effect) { lua += ' [' + eff + '] = "' + event.effect[eff] + '",\n'; } lua += ' }\n'; lua += '}\n\n'; } lua += 'return event'; document.getElementById('lua-output').textContent = lua; document.getElementById('output-container').style.display = 'block'; } // 复制Lua代码 function copyLuaCode() { var luaOutput = document.getElementById('lua-output').textContent; var textarea = document.createElement('textarea'); textarea.value = luaOutput; document.body.appendChild(textarea); textarea.select(); document.execCommand('copy'); document.body.removeChild(textarea); alert('代码已复制到剪贴板'); } // 导入数据 function importData() { var input = prompt('请粘贴Lua代码:'); if (!input) return; try { // 简单的Lua解析(实际使用中可能需要更复杂的解析器) var regex = /event\["([^"]+)"\]\s*=\s*\{([^}]+\}[^}]+)\}/g; var match; var newData = {}; while ((match = regex.exec(input)) !== null) { var name = match[1]; var content = match[2]; // 这里需要更复杂的解析逻辑 // 简化处理,仅作示例 alert('导入功能需要更复杂的Lua解析器实现'); return; } eventData = newData; renderEventList(); } catch (e) { alert('导入失败: ' + e.message); } } })();
该页面使用的模板:
模板:文本
(
查看源代码
)
模块:文本
(
查看源代码
)
返回
MediaWiki:Event.js
。