From 54e6209e7952aa63d5474174ea3a5bd056984486 Mon Sep 17 00:00:00 2001 From: chen wei bo <1025839511@qq.com> Date: Wed, 10 Sep 2025 17:37:24 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E8=B0=83=E8=AF=95?= =?UTF-8?q?=EF=BC=9A=E8=81=8A=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/Scripts/chat18x/core/ChatAIService.ts | 40 +++++++++++++++++ .../chat18x/network/services/ChatService.ts | 2 +- .../chat18x/ui/panels/PayToTalkSubpanel.ts | 44 ++++++++++++++++++- .../Scripts/chat18x/ui/panels/ThemePanel.ts | 20 +++++++++ proto_cs | 2 +- 5 files changed, 104 insertions(+), 4 deletions(-) diff --git a/assets/Scripts/chat18x/core/ChatAIService.ts b/assets/Scripts/chat18x/core/ChatAIService.ts index e8dbaa49..b6be0e1f 100644 --- a/assets/Scripts/chat18x/core/ChatAIService.ts +++ b/assets/Scripts/chat18x/core/ChatAIService.ts @@ -6,6 +6,10 @@ import { ChatHistoryManager } from "../manager/ChatHistoryManager"; import { ApiConfig } from "./ApiConfigLoader"; import { ErrorHandler, ErrorType } from "../utils/ErrorHandler"; import { EmotionAIService } from "./EmotionAIService"; +import { ChatService } from "db://assets/Scripts/chat18x/network/services/ChatService"; +import { DataManager, DataId } from "../data/DataManager"; +import { GirlData } from "../data/GirlData"; +import proto from 'db://assets/Scripts/proto/proto.pb.js'; /** * AI聊天服务类 @@ -202,6 +206,20 @@ export class ChatAIService { parts: [{ text: response.text }], }); + // 上报聊天数据到服务器 + let msgList: proto.cs.IChatMsg[] = []; + let userData = { + isAi: false, + msg: message, + }; + msgList.push(userData); + let aiData = { + isAi: true, + msg: response.text, + }; + msgList.push(aiData); + this.reqChatMsg(roleId, msgList); + // 异步更新情绪状态(非阻塞) EmotionAIService.Instance.updateEmotionFromChat( roleId, @@ -288,6 +306,28 @@ export class ChatAIService { const message = data.messages[0]?.content || ""; return this.sendMessage(roleId, message); } + + /** + * 上报聊天数据到服务器 + */ + async reqChatMsg(girlId: number, msgList: proto.cs.IChatMsg[]) { + // 请求购买商品 + const reqData = { + girlId, + ChatMsg: msgList, + }; + console.log("请求上报聊天数据的请求数据:", reqData); + let res = await ChatService.I.reqChatMsg(reqData); + console.log("请求上报聊天数据的响应数据:", res); + if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { + const resData = res.data; + // 保存数据 + const girlData = DataManager.I.getDataById(DataId.Girl); + const category = girlData.getGrilCategoryById(girlId); + girlData.setChatTotalCount(category.toString(), girlId, resData.chatTotalCount); + girlData.setChatRemainCount(category.toString(), girlId, resData.chatRemainCount); + } + } } // 请求数据类型定义 diff --git a/assets/Scripts/chat18x/network/services/ChatService.ts b/assets/Scripts/chat18x/network/services/ChatService.ts index f718e231..97034627 100644 --- a/assets/Scripts/chat18x/network/services/ChatService.ts +++ b/assets/Scripts/chat18x/network/services/ChatService.ts @@ -6,7 +6,7 @@ import { HttpChatService } from "./HttpChatService"; import { MockChatService } from "./MockChatService"; // 模拟开关 -const USE_MOCK = true; +const USE_MOCK = false; export class ChatService implements IChatService { private static _I: ChatService | null = null; diff --git a/assets/Scripts/chat18x/ui/panels/PayToTalkSubpanel.ts b/assets/Scripts/chat18x/ui/panels/PayToTalkSubpanel.ts index 6d9c6cb8..32c96ad1 100644 --- a/assets/Scripts/chat18x/ui/panels/PayToTalkSubpanel.ts +++ b/assets/Scripts/chat18x/ui/panels/PayToTalkSubpanel.ts @@ -8,6 +8,12 @@ import { UIOpacity, } from "cc"; import { ChatController } from "../../core/ChatController"; +import { ShopService } from "db://assets/Scripts/chat18x/network/services/ShopService"; +import { DataManager, DataId } from "../../data/DataManager"; +import { WalletData } from "../../data/WalletData"; +import { ShopData } from "../../data/ShopData"; +import { GirlData } from "../../data/GirlData"; +import proto from 'db://assets/Scripts/proto/proto.pb.js'; const { ccclass, property } = _decorator; @ccclass("PayToTalkSubpanel") @@ -24,6 +30,8 @@ export class PayToTalkSubpanel extends Component { vipBtnLabel: Label = null; base: UIOpacity; + categoryId: number; + girlId: number; protected onLoad(): void { this.base = this.getComponent(UIOpacity); @@ -32,6 +40,8 @@ export class PayToTalkSubpanel extends Component { show(categoryId: string, girlId: number) { this.node.active = true; this.base.opacity = 0; + this.categoryId = Number(categoryId); + this.girlId = girlId; tween(this.base).to(0.3, { opacity: 255 }).start(); } @@ -54,11 +64,41 @@ export class PayToTalkSubpanel extends Component { onClick_BuyTime() { //购买次数 //ChatController.Instance.resetChatCount(); - this.hide(); + const shopData = DataManager.I.getDataById(DataId.Shop); + const chatIds = shopData.getChatIds(); + console.log("聊天商品Id: ", chatIds); + if (chatIds.length > 0) { + this.reqBuyGood(chatIds[0], this.girlId); + } } onClick_BuyVip() { //购买VIP - console.log("购买vip,未实现功能"); + console.log("购买vip"); + const shopData = DataManager.I.getDataById(DataId.Shop); + const memberId = shopData.get7DayMemberId(); + this.reqBuyGood(memberId, this.girlId); } + + // 使用余额购买商品 + async reqBuyGood(goodId: number, girlId: number) { + // 请求购买商品 + const reqData = { + goodId: goodId, + girlId: girlId, + }; + let res = await ShopService.I.reqBuyGood(reqData); + console.log("请求使用余额购买商品的响应数据:", res); + if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { + const resData = res.data; + // 保存数据 + const girlData = DataManager.I.getDataById(DataId.Girl); + girlData.setChatRemainCount(this.categoryId.toString(), girlId, resData.chatRemainCount); + const walletData = DataManager.I.getDataById(DataId.Wallet); + walletData.balance = Number(resData.balance); + walletData.vipExpire = Number(resData.vipExpire); + // 刷新界面 + this.hide(); + } + } } diff --git a/assets/Scripts/chat18x/ui/panels/ThemePanel.ts b/assets/Scripts/chat18x/ui/panels/ThemePanel.ts index 3ea129e9..f86de832 100644 --- a/assets/Scripts/chat18x/ui/panels/ThemePanel.ts +++ b/assets/Scripts/chat18x/ui/panels/ThemePanel.ts @@ -19,11 +19,13 @@ import { ViewManager } from "../../../Main/Manager/ViewManager"; import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode"; import { ThemeService } from "db://assets/Scripts/chat18x/network/services/ThemeService"; import { GirlService } from "db://assets/Scripts/chat18x/network/services/GirlService"; +import { ShopService } from "db://assets/Scripts/chat18x/network/services/ShopService"; import { DataManager, DataId } from "../../data/DataManager"; import { ThemeData } from "../../data/ThemeData"; import { GirlData } from "../../data/GirlData"; import { WalletData } from "../../data/WalletData"; import { AccountData } from "../../data/AccountData"; +import { ShopData } from "../../data/ShopData"; import proto from 'db://assets/Scripts/proto/proto.pb.js'; const { ccclass, property } = _decorator; @@ -121,6 +123,9 @@ export class ThemePanel extends li_BaseView { } ); } + + // 获取商品列表,提前把数据拿下来 + this.reqShopList(); } private registerListener() { @@ -175,6 +180,21 @@ export class ThemePanel extends li_BaseView { ).replace("${leftTime}", leftTime); } + // 获取商品列表 + async reqShopList() { + // 请求购买商品 + const reqData = { + + }; + let res = await ShopService.I.reqShopList(reqData); + if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { + const resData = res.data; + // 保存数据 + const shopData = DataManager.I.getDataById(DataId.Shop); + shopData.goods = res.data; + } + } + onDestroy(): void { Utils.removeInnerEL(InnerMsgCode.LanguageChange, this, () => { this.recName.string = LanguageUtils.getText(this.rectNameKey); diff --git a/proto_cs b/proto_cs index f055100c..9ec1d4f0 160000 --- a/proto_cs +++ b/proto_cs @@ -1 +1 @@ -Subproject commit f055100cf0f378ddd96d8e153655b5166c65e6e8 +Subproject commit 9ec1d4f07754a1c91f80bf1e3c583d42e42049b2 From ddaa79d0ee6847abb4e51b2fabd234facef0b642 Mon Sep 17 00:00:00 2001 From: chen wei bo <1025839511@qq.com> Date: Wed, 10 Sep 2025 17:59:47 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E8=B0=83=E8=AF=95?= =?UTF-8?q?=EF=BC=9A=E8=81=8A=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/Scripts/chat18x/data/GirlChatData.ts | 2 +- assets/Scripts/chat18x/data/GirlData.ts | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/assets/Scripts/chat18x/data/GirlChatData.ts b/assets/Scripts/chat18x/data/GirlChatData.ts index 1eac96f1..cf4c110b 100644 --- a/assets/Scripts/chat18x/data/GirlChatData.ts +++ b/assets/Scripts/chat18x/data/GirlChatData.ts @@ -75,5 +75,5 @@ export class GirlChatData extends BaseData { if (this.chatRemainCount > 0) { this.setChatRemainCount(Math.max(0, this.chatRemainCount - times)); } - } + } } diff --git a/assets/Scripts/chat18x/data/GirlData.ts b/assets/Scripts/chat18x/data/GirlData.ts index 51d906c0..668119c9 100644 --- a/assets/Scripts/chat18x/data/GirlData.ts +++ b/assets/Scripts/chat18x/data/GirlData.ts @@ -796,6 +796,21 @@ export class GirlData extends BaseData { return oneData.useChat(times); } + /** 是否可聊天 */ + public isCanChat(categoryId: string, girlId: number): boolean { + // 剩余聊天次数 + let remainCount = this.getChatRemainCount(categoryId, girlId); + if (remainCount < 0) { + // 会员 + return true; + } else if (remainCount === 0) { + return false; + } else { + return true; + } + return false; + } + /** --------------------------------------------------------- 技师的好感度数据 --------------------------------------------------------- */ // 解析技师好感度数据,一个