{"id":"466bca1a-33d1-4cd2-977d-d88cd1af1f57","authorId":"iIHKngXowoFtPezDXReRaXGNwOnkrmNd","title":"色色游戏世界生存","description":"酷爱色色游戏世界的你，想办法在这款瑟瑟大陆生活下去吧.","background":null,"backgroundWidth":null,"backgroundHeight":null,"cover":null,"coverWidth":null,"coverHeight":null,"introPage":"ppkacuq3nakhc5kif9fdqx9v.html","changelog":null,"createdAt":"2026-05-26T02:29:55.532Z","updatedAt":"2026-07-20T00:22:55.923Z","initPublicAt":"2026-05-26T06:44:35.461Z","renderTemplate":null,"assistantRegexReplace":[],"enableMemorySchema":false,"memorySchema":null,"injectStyles":"HTML\n&lt;!DOCTYPE html&gt;\n\n\n\n    <div class=\"container\">\n        <div class=\"header\">\n            <span class=\"glow-icon\">🦋</span>\n            <h1>· 魔物娘幻想 ·</h1>\n            <div class=\"sub\">角色引导配置</div>\n        </div>\n        <div class=\"intro-card\">\n            <div class=\"icon-badge\">🌙</div>\n            <p>欢迎来到 <strong>魔物娘世界</strong> · 在这片被古老魔法与神秘血脉笼罩的大陆上，你将化身为独一无二的魔物娘。编织你的身世与天赋，开启宿命交织的冒险。</p>\n        </div>\n        <div class=\"section-title\"><span>✧</span> 角色档案</div>\n        <div class=\"config-panel\">\n            <div class=\"form-grid\">\n                <div class=\"form-group\">\n                    <label>姓名</label>\n                    <input type=\"text\" id=\"char-name\" placeholder=\"如：露娜·焰尾\" value=\"\">\n                </div>\n                <div class=\"form-group\">\n                    <label>性别</label>\n                    <div class=\"radio-group\">\n                        <label><input type=\"radio\" name=\"gender\" value=\"女\" checked> 女</label>\n                        <label><input type=\"radio\" name=\"gender\" value=\"男\"> 男</label>\n                        <label><input type=\"radio\" name=\"gender\" value=\"其他\"> 其他</label>\n                    </div>\n                </div>\n                <div class=\"form-group\">\n                    <label>年龄</label>\n                    <input type=\"text\" id=\"char-age\" placeholder=\"如：19 岁 (相当于人类)\" value=\"\">\n                </div>\n                <div class=\"form-group\">\n                    <label>种族 / 身份</label>\n                    <input type=\"text\" id=\"char-identity\" placeholder=\"如：猫妖、龙裔、花灵\" value=\"\">\n                </div>\n                <div class=\"form-group full\">\n                    <label>外观描述</label>\n                    <textarea id=\"char-appearance\" placeholder=\"如：琥珀色竖瞳，蓬松的银灰色尾巴，发间生有淡紫色花朵，耳尖有绒毛……\"></textarea>\n                </div>\n                <div class=\"form-group full\">\n                    <label>身世背景</label>\n                    <textarea id=\"char-background\" placeholder=\"如：诞生于月下楼兰的花海，体内流淌着古老的魅魔之血，曾独自穿越幽暗森林，只为寻回失落的记忆碎片……\"></textarea>\n                </div>\n            </div>\n            <div class=\"talent-section\">\n                <div class=\"talent-header\">\n                    <div class=\"label\"><span>✦</span> 天赋词条 · 抽取你的宿命之力</div>\n                    <button class=\"roll-btn\" id=\"roll-talent-btn\">\n                        <svg viewBox=\"0 0 24 24\"><path d=\"M12 3v12M9 12l3 3 3-3\"/><path d=\"M5 12h14\"/><circle cx=\"12\" cy=\"18\" r=\"2\"/></svg>\n                        抽取天赋\n                    </button>\n                </div>\n                <div class=\"talent-grid\" id=\"talent-grid\">\n                    <span class=\"talent-empty\">点击「抽取天赋」获得随机词条，点击词条可选中保留</span>\n                </div>\n            </div>\n            <div style=\"margin-top:1.4rem;\">\n                <div style=\"display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:0.6rem;margin-bottom:0.3rem;\">\n                    <span style=\"font-size:0.8rem;color:#b090c8;letter-spacing:0.5px;opacity:0.6;\">⋮ 实时预览 · 含已选天赋</span>\n                </div>\n                <div class=\"preview-box\" id=\"preview-box\"><span class=\"placeholder\">填写上方信息并抽取天赋，角色卡将在此处生成...</span></div>\n                <div class=\"copy-section\">\n                    <button class=\"copy-btn\" id=\"copy-button\">\n                        <svg viewBox=\"0 0 24 24\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/></svg>\n                        复制角色卡\n                    </button>\n                </div>\n            </div>\n        </div>\n    </div>\n    <footer><a href=\"https://aitrader.wiki/zh/explore/installed/813e225e-2a1a-45bd-b441-f4741dff5418\" target=\"_blank\">本页面采用AI风月-创作大师生成</a></footer>\n    <div class=\"toast\" id=\"toast\">\n        <span class=\"toast-icon\">✓</span>\n        <div>信息已成功复制！</div>\n        <button class=\"toast-close\" id=\"toast-close\">确定</button>\n    </div>\n    <script>\n        (function() {\n            const nameInput = document.getElementById('char-name');\n            const genderRadios = document.querySelectorAll('input[name=\"gender\"]');\n            const ageInput = document.getElementById('char-age');\n            const identityInput = document.getElementById('char-identity');\n            const appearanceInput = document.getElementById('char-appearance');\n            const backgroundInput = document.getElementById('char-background');\n            const previewBox = document.getElementById('preview-box');\n            const copyBtn = document.getElementById('copy-button');\n            const toast = document.getElementById('toast');\n            const toastClose = document.getElementById('toast-close');\n            const talentGrid = document.getElementById('talent-grid');\n            const rollBtn = document.getElementById('roll-talent-btn');\n\n            let selectedTalents = [];\n\n            const talentPool = [\n                { text: '魅惑之瞳', quality: 'legendary' },\n                { text: '龙鳞之躯', quality: 'legendary' },\n                { text: '月影潜行', quality: 'legendary' },\n                { text: '元素亲和', quality: 'epic' },\n                { text: '治愈之触', quality: 'epic' },\n                { text: '风之翼', quality: 'epic' },\n                { text: '先祖低语', quality: 'epic' },\n                { text: '火焰之尾', quality: 'rare' },\n                { text: '冰晶之肤', quality: 'rare' },\n                { text: '暗夜视觉', quality: 'rare' },\n                { text: '毒棘之吻', quality: 'rare' },\n                { text: '兽灵感应', quality: 'rare' },\n                { text: '荆棘缠绕', quality: 'common' },\n                { text: '水之呼吸', quality: 'common' },\n                { text: '碎石之力', quality: 'common' },\n                { text: '花香诱惑', quality: 'common' },\n                { text: '绒毛软尾', quality: 'common' },\n                { text: '轻灵跃动', quality: 'common' },\n                { text: '回声定位', quality: 'common' },\n                { text: '虹彩鳞片', quality: 'epic' },\n                { text: '梦魇侵扰', quality: 'legendary' },\n                { text: '妖精祝福', quality: 'epic' },\n                { text: '石化之眼', quality: 'legendary' },\n                { text: '绝缘之毛', quality: 'rare' },\n            ];\n\n            function getQualityLabel(q) {\n                const map = { common: '普通', rare: '稀有', epic: '史诗', legendary: '传说' };\n                return map[q] || '普通';\n            }\n\n            function shuffleArray(arr) {\n                for (let i = arr.length - 1; i &gt; 0; i--) {\n                    const j = Math.floor(Math.random() * (i + 1));\n                    [arr[i], arr[j]] = [arr[j], arr[i]];\n                }\n                return arr;\n            }\n\n            function rollTalents() {\n                const shuffled = shuffleArray([...talentPool]);\n                const count = Math.min(5, shuffled.length);\n                const picked = shuffled.slice(0, count);\n                renderTalents(picked);\n            }\n\n            function renderTalents(talents) {\n                talentGrid.innerHTML = '';\n                if (!talents || talents.length === 0) {\n                    talentGrid.innerHTML = '<span class=\"talent-empty\">点击「抽取天赋」获得随机词条，点击词条可选中保留</span>';\n                    return;\n                }\n                talents.forEach(t =&gt; {\n                    const tag = document.createElement('span');\n                    tag.className = `talent-tag ${t.quality}`;\n                    if (selectedTalents.includes(t.text)) {\n                        tag.classList.add('selected');\n                    }\n                    const dot = document.createElement('span');\n                    dot.className = 'quality-dot';\n                    tag.appendChild(dot);\n                    const label = document.createTextNode(` ${t.text} [${getQualityLabel(t.quality)}]`);\n                    tag.appendChild(label);\n                    tag.dataset.text = t.text;\n                    tag.dataset.quality = t.quality;\n                    tag.addEventListener('click', function(e) {\n                        const text = this.dataset.text;\n                        const idx = selectedTalents.indexOf(text);\n                        if (idx &gt; -1) {\n                            selectedTalents.splice(idx, 1);\n                            this.classList.remove('selected');\n                        } else {\n                            selectedTalents.push(text);\n                            this.classList.add('selected');\n                        }\n                        updatePreview();\n                    });\n                    talentGrid.appendChild(tag);\n                });\n            }\n\n            function getGender() {\n                for (let r of genderRadios) {\n                    if (r.checked) return r.value;\n                }\n                return '未设置';\n            }\n\n            function updatePreview() {\n                const name = nameInput.value.trim() || '未命名';\n                const gender = getGender();\n                const age = ageInput.value.trim() || '未知';\n                const identity = identityInput.value.trim() || '未定义';\n                const appearance = appearanceInput.value.trim() || '未描述';\n                const background = backgroundInput.value.trim() || '未撰写';\n                let talentLine = '无';\n                if (selectedTalents.length &gt; 0) {\n                    talentLine = selectedTalents.join(' · ');\n                }\n                const lines = [\n                    '【角色档案】',\n                    '姓名：' + name,\n                    '性别：' + gender,\n                    '年龄：' + age,\n                    '种族·身份：' + identity,\n                    '外观：' + appearance,\n                    '背景：' + background,\n                    '─ 天赋 ─',\n                    '『 ' + talentLine + ' 』'\n                ];\n                previewBox.textContent = lines.join('\\n');\n                if (!nameInput.value.trim() && !ageInput.value.trim() && !identityInput.value.trim() && !appearanceInput.value.trim() && !backgroundInput.value.trim() && selectedTalents.length === 0) {\n                    previewBox.innerHTML = '<span class=\"placeholder\">填写上方信息并抽取天赋，角色卡将在此处生成...</span>';\n                }\n            }\n\n            function showToast() {\n                toast.classList.add('show');\n            }\n\n            function hideToast() {\n                toast.classList.remove('show');\n            }\n\n            function copyPreview() {\n                let text = previewBox.textContent;\n                if (previewBox.querySelector('.placeholder')) {\n                    text = '请先填写角色信息并抽取天赋。';\n                }\n                try {\n                    var textarea = document.createElement('textarea');\n                    textarea.value = text;\n                    textarea.style.position = 'fixed';\n                    textarea.style.left = '-9999px';\n                    textarea.style.top = '-9999px';\n                    textarea.style.opacity = '0';\n                    document.body.appendChild(textarea);\n                    textarea.focus();\n                    textarea.select();\n                    var success = document.execCommand('copy');\n                    document.body.removeChild(textarea);\n                    if (success) {\n                        showToast();\n                    } else {\n                        alert('复制失败，请手动复制。');\n                    }\n                } catch (e) {\n                    alert('复制失败，请手动复制。');\n                }\n            }\n\n            nameInput.addEventListener('input', updatePreview);\n            ageInput.addEventListener('input', updatePreview);\n            identityInput.addEventListener('input', updatePreview);\n            appearanceInput.addEventListener('input', updatePreview);\n            backgroundInput.addEventListener('input', updatePreview);\n            for (let r of genderRadios) {\n                r.addEventListener('change', updatePreview);\n            }\n            copyBtn.addEventListener('click', copyPreview);\n            toastClose.addEventListener('click', hideToast);\n            toast.addEventListener('click', function(e) {\n                if (e.target === toast) hideToast();\n            });\n\n            rollBtn.addEventListener('click', function() {\n                rollTalents();\n                updatePreview();\n            });\n\n            updatePreview();\n            rollTalents();\n        })();\n    </script>","options":null,"language":"zh","containsNSFW":false,"publicAccess":true,"deletedAt":null,"isAnonymous":true,"enableSafeguard":true,"defaultModelSettings":{"contextWindow":4,"modelSettings":{"temperature":1,"presencePenalty":-0.1}},"totalConversations":5,"totalMessages":6,"totalCreditsUsed":3734,"totalTokensUsed":58661,"totalPlayedUsers":4,"deeplyPlayed":0,"fixedPromptLength":4725,"lorebookLength":97,"author":{"id":"iIHKngXowoFtPezDXReRaXGNwOnkrmNd","name":"米娅","displayUsername":"miya","username":"miya"},"cardsTags":[{"tag":{"name":"兽交","cardsCount":4}},{"tag":{"name":"自定义角色","cardsCount":265}},{"tag":{"name":"模拟经营","cardsCount":61}},{"tag":{"name":"男性向","cardsCount":904}},{"tag":{"name":"魔物娘","cardsCount":6}}],"cardsVoices":[],"prompt":null,"promptSizeBytes":null}