diff --git a/gift.js b/gift.js
index 7c1d178..c26671b 100644
--- a/gift.js
+++ b/gift.js
@@ -43,9 +43,9 @@ const GIFT_CATEGORIES = {
{ id: 'breastChain', name: '微电流乳链', emoji: '⚡', desc: '微电流乳链', hasControl: true, hasShock: true },
{ id: 'analPlug', name: '肛塞', emoji: '🔌', desc: '震动肛塞', hasControl: true, hasShock: false },
{ id: 'cockRing', name: '锁精环', emoji: '💍', desc: '震动锁精环', hasControl: true, hasShock: false },
- { id: 'handcuffs', name: '手铐', emoji: '⛓️', desc: '情趣手铐', hasControl: false },
- { id: 'blindfold', name: '眼罩', emoji: '🎭', desc: '丝绸眼罩', hasControl: false },
- { id: 'whip', name: '皮鞭', emoji: '🏇', desc: '轻柔的皮鞭', hasControl: false },
+ { id: 'breastPump', name: '吸奶器', emoji: '🍼', desc: '电动吸奶器', hasControl: true, hasShock: false },
+ { id: 'clitSucker', name: '阴蒂吮吸器', emoji: '💋', desc: '吮吸震动二合一', hasControl: true, hasShock: false },
+ { id: 'butterfly', name: '穿戴式小蝴蝶', emoji: '🦋', desc: '隐蔽穿戴震动', hasControl: true, hasShock: false },
{ id: 'collar', name: '项圈', emoji: '⭕', desc: '精致的项圈', hasControl: false },
{ id: 'candle', name: '低温蜡烛', emoji: '🕯️', desc: '安全的低温蜡烛', hasControl: false },
{ id: 'lingerie', name: '情趣内衣', emoji: '👙', desc: '性感的情趣内衣', hasControl: false }
diff --git a/toy-control.js b/toy-control.js
index da9f4e1..7f7f0be 100644
--- a/toy-control.js
+++ b/toy-control.js
@@ -24,10 +24,22 @@ const TOY_ICONS = {
cameraOn: ``,
cameraOff: ``,
// 像素爱心图标(用于多玩具切换)
- pixelHeart: ``
+ pixelHeart: ``,
+ // 吮吸类玩具图标
+ gentle: ``,
+ strong: ``,
+ pulse: ``
};
-// 控制模式定义
+// 吮吸类玩具ID列表
+const SUCTION_TOY_IDS = ['breastPump', 'clitSucker'];
+
+// 判断是否是吮吸类玩具
+function isSuctionToy(giftId) {
+ return SUCTION_TOY_IDS.includes(giftId);
+}
+
+// 震动类控制模式定义
const TOY_CONTROL_MODES = {
classic: {
id: 'classic',
@@ -61,6 +73,40 @@ const TOY_CONTROL_MODES = {
}
};
+// 吮吸类控制模式定义
+const SUCTION_CONTROL_MODES = {
+ gentle: {
+ id: 'gentle',
+ name: '轻柔吮吸',
+ icon: TOY_ICONS.gentle,
+ desc: '温柔的吮吸节奏'
+ },
+ start: {
+ id: 'start',
+ name: '开始吮吸',
+ icon: TOY_ICONS.start,
+ desc: '开始/继续吮吸'
+ },
+ strong: {
+ id: 'strong',
+ name: '强力吮吸',
+ icon: TOY_ICONS.strong,
+ desc: '高强度吮吸'
+ },
+ pulse: {
+ id: 'pulse',
+ name: '脉冲模式',
+ icon: TOY_ICONS.pulse,
+ desc: '有节奏的吸放'
+ },
+ pause: {
+ id: 'pause',
+ name: '暂停',
+ icon: TOY_ICONS.pause,
+ desc: '暂停吮吸'
+ }
+};
+
// 电击按钮(仅微电流乳链)
const SHOCK_BUTTON = {
id: 'shock',
@@ -178,40 +224,82 @@ function renderToyControlPage() {
titleEl.textContent = `${toyControlState.gift.giftName} · ${targetText}`;
}
+ // 判断当前玩具类型
+ const isSuction = isSuctionToy(toyControlState.gift.giftId);
+ const modes = isSuction ? SUCTION_CONTROL_MODES : TOY_CONTROL_MODES;
+
// 渲染按钮
if (buttonsEl) {
- let buttonsHtml = `
-
-
-
-
-
-
-
-
-
-
-
- `;
+ let buttonsHtml;
+ if (isSuction) {
+ // 吮吸类玩具按钮布局
+ buttonsHtml = `
+
+
+
+
+
+
+
+
+
+
+
+ `;
+ } else {
+ // 震动类玩具按钮布局(原有)
+ buttonsHtml = `
+
+
+
+
+
+
+
+
+
+
+
+ `;
+ }
buttonsEl.innerHTML = buttonsHtml;
}
@@ -469,14 +557,26 @@ ${newToy.giftName}的特点:${newToy.giftDesc}
hideToyTypingIndicator();
if (response) {
- let reply = response.trim();
- reply = reply.replace(/<\s*meme\s*>[\s\S]*?<\s*\/\s*meme\s*>/gi, '').trim();
- reply = reply.replace(/\[.*?\]/g, '').trim();
- reply = reply.replace(/([^)]*)/g, '').trim();
- reply = reply.replace(/\([^)]*\)/g, '').trim();
+ // 使用 splitAIMessages 分割多条消息
+ const parts = splitAIMessages(response);
- if (reply) {
- addToyMessage('ai', reply);
+ for (let i = 0; i < parts.length; i++) {
+ let reply = parts[i].trim();
+ reply = reply.replace(/<\s*meme\s*>[\s\S]*?<\s*\/\s*meme\s*>/gi, '').trim();
+ reply = reply.replace(/\[.*?\]/g, '').trim();
+ reply = reply.replace(/([^)]*)/g, '').trim();
+ reply = reply.replace(/\([^)]*\)/g, '').trim();
+
+ // 如果不是第一条消息,显示typing并延迟
+ if (i > 0 && reply) {
+ showToyTypingIndicator();
+ await sleep(1500 + Math.random() * 1000);
+ hideToyTypingIndicator();
+ }
+
+ if (reply) {
+ addToyMessage('ai', reply);
+ }
}
}
} catch (err) {
@@ -682,8 +782,19 @@ function updateButtonState(buttonId) {
function buildButtonPressPrompt(buttonId, buttonName, pressedBy) {
const isCharacterUsing = toyControlState.target === 'character';
const isAIPress = pressedBy === 'ai';
+ const isSuction = isSuctionToy(toyControlState.gift.giftId);
- const modeEffects = {
+ // 根据玩具类型选择效果描述
+ const modeEffects = isSuction ? {
+ // 吮吸类玩具效果
+ gentle: '轻柔的吮吸开始了,温柔地包裹着敏感部位',
+ start: '吮吸开始/继续了',
+ strong: '吮吸力度突然加大,强烈的吸力让人难以抗拒',
+ pulse: '有节奏的吸放开始了,一收一放的刺激',
+ pause: '吮吸停止了,可以喘息一下',
+ shock: '一阵微电流刺激瞬间传来,让人猛地一颤'
+ } : {
+ // 震动类玩具效果
classic: '稳定持续的震动开始了',
start: '震动开始/继续了',
rampage: '震动突然变到最大强度,非常强烈的刺激袭来',