Merge branch 'main' of 47.107.44.202:xionglijia/18xchat
# Conflicts: # assets/Scripts/chat18x/core/ChatAIService.ts # assets/Scripts/chat18x/utils/ErrorHandler.ts # xchat_cfg
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
import { DataId, DataManager } from "../data/DataManager";
|
||||
import { GlobalData } from "../data/GlobalData";
|
||||
import { ConfigManager } from "../manager/ConfigManager";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export interface AIConfig {
|
||||
/** API密钥 */
|
||||
@@ -62,7 +63,7 @@ export class ApiConfig {
|
||||
).getTimeout(), // 30秒
|
||||
};
|
||||
|
||||
//console.warn(this.config.apiKey);
|
||||
//logger.warn(this.config.apiKey);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -99,7 +100,7 @@ export class ApiConfig {
|
||||
if (temperature >= 0 && temperature <= 2) {
|
||||
this.config.temperature = temperature;
|
||||
} else {
|
||||
console.warn("Temperature should be between 0 and 2");
|
||||
logger.warn("Temperature should be between 0 and 2");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,11 +116,11 @@ export class ApiConfig {
|
||||
*/
|
||||
public validateConfig(): boolean {
|
||||
if (!this.config.apiKey || this.config.apiKey.trim() === "") {
|
||||
console.error("API key is missing");
|
||||
logger.error("API key is missing");
|
||||
return false;
|
||||
}
|
||||
if (!this.config.model || this.config.model.trim() === "") {
|
||||
console.error("Model name is missing");
|
||||
logger.error("Model name is missing");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -17,6 +17,7 @@ import { GirlData } from "../data/GirlData";
|
||||
import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { TipsPanel } from "../ui/panels/TipsPanel";
|
||||
import LanguageUtils from "../../Main/Common/LanguageUtils";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
/**
|
||||
* AI聊天服务类
|
||||
@@ -143,8 +144,10 @@ export class ChatAIService {
|
||||
},
|
||||
history: savedHistory,
|
||||
});
|
||||
console.log(chat);
|
||||
console.log(
|
||||
|
||||
logger.log(chat);
|
||||
|
||||
logger.log(
|
||||
`Loaded ${savedHistory.length} history messages for role ${roleId}`
|
||||
);
|
||||
} else {
|
||||
@@ -178,9 +181,9 @@ export class ChatAIService {
|
||||
],
|
||||
},
|
||||
});
|
||||
console.log(chat);
|
||||
logger.log(chat);
|
||||
|
||||
console.log(`Created new chat instance for role ${roleId}`);
|
||||
logger.log(`Created new chat instance for role ${roleId}`);
|
||||
}
|
||||
|
||||
this.chatInstances.set(roleId, chat);
|
||||
@@ -217,7 +220,7 @@ export class ChatAIService {
|
||||
* @example
|
||||
* ```typescript
|
||||
* const response = await chatService.sendMessage(10001, "你好");
|
||||
* console.log(response); // AI的回复
|
||||
* logger.log(response); // AI的回复
|
||||
* ```
|
||||
*/
|
||||
public async sendMessage(roleId: number, message: string): Promise<string> {
|
||||
@@ -248,7 +251,7 @@ export class ChatAIService {
|
||||
});
|
||||
|
||||
if (response && response.text) {
|
||||
console.log(`Response from role ${roleId}:`, response.text);
|
||||
logger.log(`Response from role ${roleId}:`, response.text);
|
||||
|
||||
try {
|
||||
// 保存用户消息
|
||||
@@ -285,7 +288,7 @@ export class ChatAIService {
|
||||
message,
|
||||
response.text
|
||||
).catch((emotionError) => {
|
||||
console.warn(
|
||||
logger.warn(
|
||||
`Failed to update emotion for role ${roleId}:`,
|
||||
emotionError
|
||||
);
|
||||
@@ -335,7 +338,7 @@ export class ChatAIService {
|
||||
EmotionAIService.Instance.clearEmotionHistory(roleId);
|
||||
// 清除本地存储的历史
|
||||
ChatHistoryManager.Instance.clearHistory(roleId);
|
||||
console.log(`Cleared chat history for role ${roleId}`);
|
||||
logger.log(`Cleared chat history for role ${roleId}`);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -347,7 +350,7 @@ export class ChatAIService {
|
||||
EmotionAIService.Instance.clearAllEmotionHistory();
|
||||
// 清除本地存储的所有历史
|
||||
ChatHistoryManager.Instance.clearAllHistory();
|
||||
console.log("Cleared all chat histories");
|
||||
logger.log("Cleared all chat histories");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -362,7 +365,7 @@ export class ChatAIService {
|
||||
* @deprecated 请使用sendMessage方法,此方法将在下个版本中移除
|
||||
*/
|
||||
public async Post(data: GPTRequest): Promise<string> {
|
||||
console.warn("Post方法已废弃,请使用sendMessage方法");
|
||||
logger.warn("Post方法已废弃,请使用sendMessage方法");
|
||||
const roleId = this.currentRoleId || 10001; // 默认使用第一个角色
|
||||
const message = data.messages[0]?.content || "";
|
||||
return this.sendMessage(roleId, message);
|
||||
@@ -377,9 +380,9 @@ export class ChatAIService {
|
||||
girlId,
|
||||
msgs: msgList,
|
||||
};
|
||||
console.log("请求上报聊天数据的请求数据:", reqData);
|
||||
logger.log("请求上报聊天数据的请求数据:", reqData);
|
||||
let res = await ChatService.I.reqChatMsg(reqData);
|
||||
console.log("请求上报聊天数据的响应数据:", res);
|
||||
logger.log("请求上报聊天数据的响应数据:", res);
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
const resData = res.data;
|
||||
// 保存数据
|
||||
@@ -408,9 +411,9 @@ export class ChatAIService {
|
||||
page,
|
||||
limit,
|
||||
};
|
||||
console.log("获取聊天数据的请求数据:", reqData);
|
||||
logger.log("获取聊天数据的请求数据:", reqData);
|
||||
let res = await ChatService.I.reqGetChatMsg(reqData);
|
||||
console.log("获取聊天数据的响应数据:", res);
|
||||
logger.log("获取聊天数据的响应数据:", res);
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
const resData = res.data;
|
||||
// 保存数据
|
||||
|
||||
@@ -9,6 +9,7 @@ import Utils from "../../Main/Common/Utils";
|
||||
import { InnerMsgCode } from "../../Main/Config/InnerMsgCode";
|
||||
import { TipsPanel } from "../ui/panels/TipsPanel";
|
||||
import LanguageUtils from "../../Main/Common/LanguageUtils";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
/**
|
||||
* 聊天控制器接口 - 定义Panel和Controller之间的通信协议
|
||||
@@ -102,7 +103,7 @@ export class ChatController {
|
||||
*/
|
||||
public bindView(callback: IChatPanelCallback): void {
|
||||
this.callback = callback;
|
||||
console.log("ChatController: View bound successfully");
|
||||
logger.log("ChatController: View bound successfully");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -110,7 +111,7 @@ export class ChatController {
|
||||
*/
|
||||
public unbindView(): void {
|
||||
this.callback = null;
|
||||
console.log("ChatController: View unbound");
|
||||
logger.log("ChatController: View unbound");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -139,7 +140,7 @@ export class ChatController {
|
||||
// 同步到DialogManager
|
||||
//this.syncDialogData();
|
||||
|
||||
console.log(`ChatController initialized with role ${roleId}`);
|
||||
logger.log(`ChatController initialized with role ${roleId}`);
|
||||
} else {
|
||||
const error = new Error(`Invalid roleId: ${roleId}`);
|
||||
this.handleError(error);
|
||||
@@ -153,7 +154,7 @@ export class ChatController {
|
||||
*/
|
||||
public switchRole(categoryId: string, roleId: number): boolean {
|
||||
if (!this.chatModel.switchToRole(categoryId, roleId)) {
|
||||
console.error(`Failed to switch to role ${roleId}`);
|
||||
logger.error(`Failed to switch to role ${roleId}`);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -166,7 +167,7 @@ export class ChatController {
|
||||
// 同步对话数据到DialogManager
|
||||
//this.syncDialogData();
|
||||
|
||||
console.log(`ChatController switched to role ${roleId}`);
|
||||
logger.log(`ChatController switched to role ${roleId}`);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -182,7 +183,7 @@ export class ChatController {
|
||||
|
||||
// 检查聊天次数限制
|
||||
if (!this.canSendMessage()) {
|
||||
console.warn("ChatController: Cannot send message - chat limit reached");
|
||||
logger.warn("ChatController: Cannot send message - chat limit reached");
|
||||
this.callback?.onChatLimitReached();
|
||||
return false;
|
||||
}
|
||||
@@ -190,7 +191,7 @@ export class ChatController {
|
||||
try {
|
||||
const roleId = this.chatModel.getCurrentRoleId();
|
||||
if (!roleId) {
|
||||
console.error("Role ID is not available in ChatModel");
|
||||
logger.error("Role ID is not available in ChatModel");
|
||||
TipsPanel.show(LanguageUtils.getText("chat_error_code_1004"));
|
||||
}
|
||||
|
||||
@@ -200,7 +201,7 @@ export class ChatController {
|
||||
// 显示加载中的对话
|
||||
//this.dialogManager?.addLoadingDialog();
|
||||
|
||||
console.log(`Sending message to role ${roleId}: ${message}`);
|
||||
logger.log(`Sending message to role ${roleId}: ${message}`);
|
||||
// 发送消息给AI服务
|
||||
const response = await ChatAIService.Instance.sendMessage(
|
||||
roleId,
|
||||
@@ -225,7 +226,7 @@ export class ChatController {
|
||||
|
||||
// 注意:情绪状态将通过异步事件更新,不在这里同步获取
|
||||
|
||||
console.log(`Response received from role ${roleId}: ${response}`);
|
||||
logger.log(`Response received from role ${roleId}: ${response}`);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@@ -259,7 +260,7 @@ export class ChatController {
|
||||
public clearChatHistory(): void {
|
||||
const roleId = this.chatModel.getCurrentRoleId();
|
||||
if (!roleId) {
|
||||
console.warn("Cannot clear history: roleId is null");
|
||||
logger.warn("Cannot clear history: roleId is null");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -270,9 +271,9 @@ export class ChatController {
|
||||
// 清除模型中的对话记录
|
||||
this.chatModel.clearDialogs();
|
||||
|
||||
console.log(`Chat history cleared for role ${roleId}`);
|
||||
logger.log(`Chat history cleared for role ${roleId}`);
|
||||
} catch (error) {
|
||||
console.error("Failed to clear chat history:", error);
|
||||
logger.error("Failed to clear chat history:", error);
|
||||
this.handleError(error as Error);
|
||||
}
|
||||
}
|
||||
@@ -289,9 +290,9 @@ export class ChatController {
|
||||
// 清除模型中的对话记录
|
||||
this.chatModel.clearDialogs(roleId);
|
||||
|
||||
console.log(`Chat history cleared for role ${roleId}`);
|
||||
logger.log(`Chat history cleared for role ${roleId}`);
|
||||
} catch (error) {
|
||||
console.error(`Failed to clear chat history for role ${roleId}:`, error);
|
||||
logger.error(`Failed to clear chat history for role ${roleId}:`, error);
|
||||
this.handleError(error as Error);
|
||||
}
|
||||
}
|
||||
@@ -311,7 +312,7 @@ export class ChatController {
|
||||
this.chatModel.reset();
|
||||
this.callback = null;
|
||||
this.dialogManager = null;
|
||||
console.log("ChatController destroyed");
|
||||
logger.log("ChatController destroyed");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -356,7 +357,7 @@ export class ChatController {
|
||||
public loadDialogsFromHistory(roleId?: number): void {
|
||||
const targetRoleId = roleId || this.chatModel.getCurrentRoleId();
|
||||
if (!targetRoleId) {
|
||||
console.warn("Cannot load dialogs: no active role");
|
||||
logger.warn("Cannot load dialogs: no active role");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -373,7 +374,7 @@ export class ChatController {
|
||||
this.chatModel.addDialog(isPlayer, content, targetRoleId);
|
||||
});
|
||||
|
||||
console.log(
|
||||
logger.log(
|
||||
`Loaded ${chatHistory.length} messages from ChatHistoryManager for role ${targetRoleId}`
|
||||
);
|
||||
}
|
||||
@@ -384,7 +385,7 @@ export class ChatController {
|
||||
*/
|
||||
public syncDialogData(): void {
|
||||
if (!this.dialogManager || !this.chatModel.validate()) {
|
||||
console.warn(
|
||||
logger.warn(
|
||||
"Cannot sync dialog data: missing DialogManager or invalid ChatModel"
|
||||
);
|
||||
return;
|
||||
@@ -392,7 +393,7 @@ export class ChatController {
|
||||
|
||||
const dialogs = this.chatModel.getDialogs();
|
||||
this.dialogManager.syncFromChatModel(dialogs);
|
||||
console.log(
|
||||
logger.log(
|
||||
`Synced ${dialogs.length} dialogs from ChatModel to DialogManager`
|
||||
);
|
||||
}
|
||||
@@ -445,9 +446,9 @@ export class ChatController {
|
||||
// 清除模型中的角色数据
|
||||
this.chatModel.clearRoleData(roleId);
|
||||
|
||||
console.log(`All data cleared for role ${roleId}`);
|
||||
logger.log(`All data cleared for role ${roleId}`);
|
||||
} catch (error) {
|
||||
console.error(`Failed to clear all data for role ${roleId}:`, error);
|
||||
logger.error(`Failed to clear all data for role ${roleId}:`, error);
|
||||
this.handleError(error as Error);
|
||||
}
|
||||
}
|
||||
@@ -482,7 +483,7 @@ export class ChatController {
|
||||
*/
|
||||
private onEmotionUpdated(data: any): void {
|
||||
if (!data || !data.roleId || data.emotion === undefined) {
|
||||
console.warn("Invalid emotion update data:", data);
|
||||
logger.warn("Invalid emotion update data:", data);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -490,7 +491,7 @@ export class ChatController {
|
||||
|
||||
// 只处理当前角色的情绪更新
|
||||
if (roleId === this.chatModel.getCurrentRoleId()) {
|
||||
console.log(
|
||||
logger.log(
|
||||
`ChatController: Emotion updated for role ${roleId}: ${VideoEmotion[emotion]}`
|
||||
);
|
||||
|
||||
@@ -507,7 +508,7 @@ export class ChatController {
|
||||
* @param error 错误对象
|
||||
*/
|
||||
private handleError(error: Error): void {
|
||||
console.error("ChatController error:", error);
|
||||
logger.error("ChatController error:", error);
|
||||
this.callback?.onError(error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import { ConfigManager } from "../manager/ConfigManager";
|
||||
import LanguageUtils, { LanguageType } from "../../Main/Common/LanguageUtils";
|
||||
import Utils from "../../Main/Common/Utils";
|
||||
import { InnerMsgCode } from "../../Main/Config/InnerMsgCode";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
/**
|
||||
* AI情绪分析服务类
|
||||
@@ -24,7 +25,7 @@ import { InnerMsgCode } from "../../Main/Config/InnerMsgCode";
|
||||
* ```typescript
|
||||
* const emotionService = EmotionAIService.Instance;
|
||||
* const emotion = await emotionService.analyzeEmotionalState(10001);
|
||||
* console.log(VideoEmotion[emotion]); // "calm_down"
|
||||
* logger.log(VideoEmotion[emotion]); // "calm_down"
|
||||
* ```
|
||||
*
|
||||
* @author AI Chat System
|
||||
@@ -86,7 +87,7 @@ export class EmotionAIService {
|
||||
});
|
||||
|
||||
this.emotionChatInstances.set(roleId, chat);
|
||||
console.log(`Created new emotion chat instance for role ${roleId}`);
|
||||
logger.log(`Created new emotion chat instance for role ${roleId}`);
|
||||
|
||||
// 异步分析历史情绪状态
|
||||
this.initializeEmotionAnalysis(roleId);
|
||||
@@ -106,7 +107,7 @@ export class EmotionAIService {
|
||||
let emotionalState: VideoEmotion;
|
||||
|
||||
if (messageCount > 0) {
|
||||
console.log(
|
||||
logger.log(
|
||||
`Analyzing emotional state for role ${roleId} based on ${messageCount} messages`
|
||||
);
|
||||
|
||||
@@ -115,11 +116,11 @@ export class EmotionAIService {
|
||||
if (emotionalState == null) {
|
||||
emotionalState = VideoEmotion.calm_down;
|
||||
}
|
||||
console.log(
|
||||
logger.log(
|
||||
`Initial emotional state for role ${roleId}: ${VideoEmotion[emotionalState]}`
|
||||
);
|
||||
} else {
|
||||
console.log(
|
||||
logger.log(
|
||||
`No history found for role ${roleId}, using default emotion: calm_down`
|
||||
);
|
||||
emotionalState = VideoEmotion.calm_down;
|
||||
@@ -131,11 +132,11 @@ export class EmotionAIService {
|
||||
emotion: emotionalState,
|
||||
});
|
||||
|
||||
console.log(
|
||||
logger.log(
|
||||
`Emotion initialization completed for role ${roleId}: ${VideoEmotion[emotionalState]}`
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(
|
||||
logger.error(
|
||||
`Failed to initialize emotion analysis for role ${roleId}:`,
|
||||
error
|
||||
);
|
||||
@@ -209,7 +210,7 @@ export class EmotionAIService {
|
||||
});
|
||||
|
||||
if (response && response.text) {
|
||||
console.log(`Emotion analysis from role ${roleId}:`, response.text);
|
||||
logger.log(`Emotion analysis from role ${roleId}:`, response.text);
|
||||
return this.parseEmotionResponse(response.text);
|
||||
} else {
|
||||
const warningMsg = `情绪AI返回了空响应 (角色ID: ${roleId})`;
|
||||
@@ -297,7 +298,7 @@ export class EmotionAIService {
|
||||
if (this.emotionChatInstances.has(roleId)) {
|
||||
this.emotionChatInstances.delete(roleId);
|
||||
}
|
||||
console.log(`Cleared emotion chat history for role ${roleId}`);
|
||||
logger.log(`Cleared emotion chat history for role ${roleId}`);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -305,7 +306,7 @@ export class EmotionAIService {
|
||||
*/
|
||||
public clearAllEmotionHistory(): void {
|
||||
this.emotionChatInstances.clear();
|
||||
console.log("Cleared all emotion chat histories");
|
||||
logger.log("Cleared all emotion chat histories");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -331,7 +332,7 @@ export class EmotionAIService {
|
||||
*/
|
||||
private setCurrentEmotion(roleId: number, emotion: VideoEmotion): void {
|
||||
this.currentEmotions.set(roleId, emotion);
|
||||
console.log(`Updated emotion for role ${roleId}: ${VideoEmotion[emotion]}`);
|
||||
logger.log(`Updated emotion for role ${roleId}: ${VideoEmotion[emotion]}`);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -353,7 +354,7 @@ export class EmotionAIService {
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn(`Failed to get role name for ${roleId}:`, error);
|
||||
logger.warn(`Failed to get role name for ${roleId}:`, error);
|
||||
}
|
||||
return "AI";
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import { DataManager, DataId } from "../data/DataManager";
|
||||
import { ThemeData } from "../data/ThemeData";
|
||||
import { GirlData } from "../data/GirlData";
|
||||
import { ShopData } from "../data/ShopData";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
@@ -30,7 +32,7 @@ export class MainController {
|
||||
* 初始化并预加载数据
|
||||
*/
|
||||
async init(): Promise<void> {
|
||||
console.log("[MainController] 开始初始化并预加载数据");
|
||||
logger.log("[MainController] 开始初始化并预加载数据");
|
||||
|
||||
// 并行预加载所有数据
|
||||
await Promise.all([
|
||||
@@ -39,7 +41,7 @@ export class MainController {
|
||||
this.preloadShopList()
|
||||
]);
|
||||
|
||||
console.log("[MainController] 数据预加载完成");
|
||||
logger.log("[MainController] 数据预加载完成");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -47,12 +49,12 @@ export class MainController {
|
||||
*/
|
||||
async preloadThemeData(): Promise<boolean> {
|
||||
if (this.isThemeDataPreloaded) {
|
||||
console.log("[MainController] 主题数据已预加载");
|
||||
logger.log("[MainController] 主题数据已预加载");
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
console.log("[MainController] 开始预加载主题数据");
|
||||
logger.log("[MainController] 开始预加载主题数据");
|
||||
const reqData = {};
|
||||
const res = await ThemeService.I.reqHallTheme(reqData);
|
||||
|
||||
@@ -61,14 +63,14 @@ export class MainController {
|
||||
const themeData = DataManager.I.getDataById<ThemeData>(DataId.Theme);
|
||||
themeData.themes = res.data;
|
||||
this.isThemeDataPreloaded = true;
|
||||
console.log("[MainController] 主题数据预加载成功");
|
||||
logger.log("[MainController] 主题数据预加载成功");
|
||||
return true;
|
||||
} else {
|
||||
console.warn("[MainController] 主题数据预加载失败:", res);
|
||||
logger.warn("[MainController] 主题数据预加载失败:", res);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("[MainController] 主题数据预加载异常:", error);
|
||||
logger.error("[MainController] 主题数据预加载异常:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -78,12 +80,12 @@ export class MainController {
|
||||
*/
|
||||
async preloadDailyRecommend(): Promise<boolean> {
|
||||
if (this.isDailyRecommendPreloaded) {
|
||||
console.log("[MainController] 每日推荐数据已预加载");
|
||||
logger.log("[MainController] 每日推荐数据已预加载");
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
console.log("[MainController] 开始预加载每日推荐数据");
|
||||
logger.log("[MainController] 开始预加载每日推荐数据");
|
||||
const reqData = {};
|
||||
const res = await GirlService.I.reqDailyRecommend(reqData);
|
||||
|
||||
@@ -92,14 +94,14 @@ export class MainController {
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
girlData.setDailyRecommend(res.data);
|
||||
this.isDailyRecommendPreloaded = true;
|
||||
console.log("[MainController] 每日推荐数据预加载成功");
|
||||
logger.log("[MainController] 每日推荐数据预加载成功");
|
||||
return true;
|
||||
} else {
|
||||
console.warn("[MainController] 每日推荐数据预加载失败:", res);
|
||||
logger.warn("[MainController] 每日推荐数据预加载失败:", res);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("[MainController] 每日推荐数据预加载异常:", error);
|
||||
logger.error("[MainController] 每日推荐数据预加载异常:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -109,12 +111,12 @@ export class MainController {
|
||||
*/
|
||||
async preloadShopList(): Promise<boolean> {
|
||||
if (this.isShopListPreloaded) {
|
||||
console.log("[MainController] 商品列表数据已预加载");
|
||||
logger.log("[MainController] 商品列表数据已预加载");
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
console.log("[MainController] 开始预加载商品列表数据");
|
||||
logger.log("[MainController] 开始预加载商品列表数据");
|
||||
const reqData = {};
|
||||
const res = await ShopService.I.reqShopList(reqData);
|
||||
|
||||
@@ -123,14 +125,14 @@ export class MainController {
|
||||
const shopData = DataManager.I.getDataById<ShopData>(DataId.Shop);
|
||||
shopData.goods = res.data;
|
||||
this.isShopListPreloaded = true;
|
||||
console.log("[MainController] 商品列表数据预加载成功");
|
||||
logger.log("[MainController] 商品列表数据预加载成功");
|
||||
return true;
|
||||
} else {
|
||||
console.warn("[MainController] 商品列表数据预加载失败:", res);
|
||||
logger.warn("[MainController] 商品列表数据预加载失败:", res);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("[MainController] 商品列表数据预加载异常:", error);
|
||||
logger.error("[MainController] 商品列表数据预加载异常:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -161,14 +163,14 @@ export class MainController {
|
||||
this.isThemeDataPreloaded = false;
|
||||
this.isDailyRecommendPreloaded = false;
|
||||
this.isShopListPreloaded = false;
|
||||
console.log("[MainController] 预加载状态已重置");
|
||||
logger.log("[MainController] 预加载状态已重置");
|
||||
}
|
||||
|
||||
/**
|
||||
* 强制刷新主题数据
|
||||
*/
|
||||
async refreshThemeData(): Promise<boolean> {
|
||||
console.log("[MainController] 开始强制刷新主题数据");
|
||||
logger.log("[MainController] 开始强制刷新主题数据");
|
||||
try {
|
||||
const reqData = {};
|
||||
const res = await ThemeService.I.reqHallTheme(reqData);
|
||||
@@ -178,14 +180,14 @@ export class MainController {
|
||||
const themeData = DataManager.I.getDataById<ThemeData>(DataId.Theme);
|
||||
themeData.themes = res.data;
|
||||
this.isThemeDataPreloaded = true;
|
||||
console.log("[MainController] 主题数据刷新成功");
|
||||
logger.log("[MainController] 主题数据刷新成功");
|
||||
return true;
|
||||
} else {
|
||||
console.warn("[MainController] 主题数据刷新失败:", res);
|
||||
logger.warn("[MainController] 主题数据刷新失败:", res);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("[MainController] 主题数据刷新异常:", error);
|
||||
logger.error("[MainController] 主题数据刷新异常:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -194,7 +196,7 @@ export class MainController {
|
||||
* 强制刷新每日推荐数据
|
||||
*/
|
||||
async refreshDailyRecommend(): Promise<boolean> {
|
||||
console.log("[MainController] 开始强制刷新每日推荐数据");
|
||||
logger.log("[MainController] 开始强制刷新每日推荐数据");
|
||||
try {
|
||||
const reqData = {};
|
||||
const res = await GirlService.I.reqDailyRecommend(reqData);
|
||||
@@ -204,14 +206,14 @@ export class MainController {
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
girlData.setDailyRecommend(res.data);
|
||||
this.isDailyRecommendPreloaded = true;
|
||||
console.log("[MainController] 每日推荐数据刷新成功");
|
||||
logger.log("[MainController] 每日推荐数据刷新成功");
|
||||
return true;
|
||||
} else {
|
||||
console.warn("[MainController] 每日推荐数据刷新失败:", res);
|
||||
logger.warn("[MainController] 每日推荐数据刷新失败:", res);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("[MainController] 每日推荐数据刷新异常:", error);
|
||||
logger.error("[MainController] 每日推荐数据刷新异常:", error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import { AiCharacterConfig } from "../config/AiCharacterConfig";
|
||||
import { DataId, DataManager } from "../data/DataManager";
|
||||
import { GlobalData } from "../data/GlobalData";
|
||||
import { ConfigId, ConfigManager } from "../manager/ConfigManager";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
/**
|
||||
* 角色配置映射
|
||||
@@ -25,8 +26,8 @@ export class RoleConfigLoader {
|
||||
const globalPrompt = globalConfig.getGirlBasePrompt();
|
||||
const prompt = globalPrompt + "\n" + basePrompt + "\n" + additionPrompt;
|
||||
|
||||
console.log(basePrompt);
|
||||
console.log(additionPrompt);
|
||||
logger.log(basePrompt);
|
||||
logger.log(additionPrompt);
|
||||
return prompt;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
*/
|
||||
import { BaseData } from "./BaseData";
|
||||
import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
// 数据结构
|
||||
export interface AiCharacters {
|
||||
@@ -65,10 +66,24 @@ export class AiCharacterData extends BaseData {
|
||||
|
||||
/** 设置Ai角色配置*/
|
||||
public set aiCharacter(data: proto.cs.ICSGetResConfigRes) {
|
||||
const parsed = JSON.parse(data.data);
|
||||
console.log("请求Ai角色配置的解析数据:", parsed);
|
||||
|
||||
|
||||
let parsed: any;
|
||||
try {
|
||||
parsed = JSON.parse(data.data);
|
||||
} catch (e) {
|
||||
logger.warn("AiCharacterData JSON 解析失败", e);
|
||||
return;
|
||||
}
|
||||
// 解析数据
|
||||
let allData = this.parseAllAiCharacters(parsed);
|
||||
// 保存数据
|
||||
for (const oneData of allData) {
|
||||
if (!oneData) continue;
|
||||
// 覆盖或新增
|
||||
if (!this._dataMap.has(oneData.id)) {
|
||||
this._ids.push(oneData.id);
|
||||
}
|
||||
this._dataMap.set(oneData.id, oneData);
|
||||
}
|
||||
}
|
||||
|
||||
/** 获取所有 id */
|
||||
|
||||
@@ -3,6 +3,7 @@ import { Dialog } from "./DialogData";
|
||||
import { ConfigManager } from "../manager/ConfigManager";
|
||||
import { DataId, DataManager } from "./DataManager";
|
||||
import { GirlData } from "./GirlData";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
/**
|
||||
* 单个角色的聊天数据结构
|
||||
@@ -44,7 +45,7 @@ export class ChatModel {
|
||||
*/
|
||||
public initializeRole(categoryId: string, girlId: number): boolean {
|
||||
if (girlId <= 0) {
|
||||
console.error("ChatModel: Invalid roleId provided");
|
||||
logger.error("ChatModel: Invalid roleId provided");
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -52,7 +53,7 @@ export class ChatModel {
|
||||
if (this.rolesData.has(girlId)) {
|
||||
this.currentGirlId = girlId;
|
||||
this.updateLastActiveTime(girlId);
|
||||
console.log(`ChatModel: Switched to existing role ${girlId}`);
|
||||
logger.log(`ChatModel: Switched to existing role ${girlId}`);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -64,7 +65,7 @@ export class ChatModel {
|
||||
|
||||
this.rolesData.set(girlId, newRoleData);
|
||||
this.currentGirlId = girlId;
|
||||
console.log(`ChatModel: Initialized new role ${girlId}`);
|
||||
logger.log(`ChatModel: Initialized new role ${girlId}`);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -107,7 +108,7 @@ export class ChatModel {
|
||||
//const roleDetail = ConfigManager.tables.TbGirlsDetail.get(roleId);
|
||||
|
||||
if (!girlData) {
|
||||
console.error(`ChatModel: Role data not found for roleId ${girlId}`);
|
||||
logger.error(`ChatModel: Role data not found for roleId ${girlId}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -123,7 +124,7 @@ export class ChatModel {
|
||||
|
||||
return newRoleData;
|
||||
} catch (error) {
|
||||
console.error(
|
||||
logger.error(
|
||||
`ChatModel: Failed to create role data for ${girlId}:`,
|
||||
error
|
||||
);
|
||||
@@ -152,7 +153,7 @@ export class ChatModel {
|
||||
|
||||
if (oldestRoleId !== null) {
|
||||
this.rolesData.delete(oldestRoleId);
|
||||
console.log(`ChatModel: Cleaned up unused role ${oldestRoleId} data`);
|
||||
logger.log(`ChatModel: Cleaned up unused role ${oldestRoleId} data`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,18 +208,18 @@ export class ChatModel {
|
||||
public addDialog(isPlayer: boolean, content: string, roleId?: number): void {
|
||||
const targetRoleId = roleId || this.currentGirlId;
|
||||
if (!targetRoleId) {
|
||||
console.warn("ChatModel: Cannot add dialog - no active role");
|
||||
logger.warn("ChatModel: Cannot add dialog - no active role");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!content || content.trim() === "") {
|
||||
console.warn("ChatModel: Cannot add empty dialog content");
|
||||
logger.warn("ChatModel: Cannot add empty dialog content");
|
||||
return;
|
||||
}
|
||||
|
||||
const roleData = this.rolesData.get(targetRoleId);
|
||||
if (!roleData) {
|
||||
console.warn(`ChatModel: Role data not found for roleId ${targetRoleId}`);
|
||||
logger.warn(`ChatModel: Role data not found for roleId ${targetRoleId}`);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -238,7 +239,7 @@ export class ChatModel {
|
||||
public clearDialogs(roleId?: number): void {
|
||||
const targetRoleId = roleId || this.currentGirlId;
|
||||
if (!targetRoleId) {
|
||||
console.warn("ChatModel: Cannot clear dialogs - no active role");
|
||||
logger.warn("ChatModel: Cannot clear dialogs - no active role");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -246,7 +247,7 @@ export class ChatModel {
|
||||
if (roleData) {
|
||||
roleData.dialogs = [];
|
||||
this.updateLastActiveTime(targetRoleId);
|
||||
console.log(`ChatModel: Dialogs cleared for role ${targetRoleId}`);
|
||||
logger.log(`ChatModel: Dialogs cleared for role ${targetRoleId}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,13 +273,13 @@ export class ChatModel {
|
||||
public setCurrentEmotion(emotion: VideoEmotion, roleId?: number): void {
|
||||
const targetRoleId = roleId || this.currentGirlId;
|
||||
if (!targetRoleId) {
|
||||
console.warn("ChatModel: Cannot set emotion - no active role");
|
||||
logger.warn("ChatModel: Cannot set emotion - no active role");
|
||||
return;
|
||||
}
|
||||
|
||||
const roleData = this.rolesData.get(targetRoleId);
|
||||
if (!roleData) {
|
||||
console.warn(`ChatModel: Role data not found for roleId ${targetRoleId}`);
|
||||
logger.warn(`ChatModel: Role data not found for roleId ${targetRoleId}`);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -286,7 +287,7 @@ export class ChatModel {
|
||||
const oldEmotion = roleData.currentEmotion;
|
||||
roleData.currentEmotion = emotion;
|
||||
this.updateLastActiveTime(targetRoleId);
|
||||
console.log(
|
||||
logger.log(
|
||||
`ChatModel: Role ${targetRoleId} emotion changed from ${VideoEmotion[oldEmotion]} to ${VideoEmotion[emotion]}`
|
||||
);
|
||||
}
|
||||
@@ -423,7 +424,7 @@ export class ChatModel {
|
||||
public reset(): void {
|
||||
this.rolesData.clear();
|
||||
this.currentGirlId = null;
|
||||
console.log(
|
||||
logger.log(
|
||||
"ChatModel: All role data cleared and model reset to initial state"
|
||||
);
|
||||
}
|
||||
@@ -441,7 +442,7 @@ export class ChatModel {
|
||||
this.currentGirlId = null;
|
||||
}
|
||||
|
||||
console.log(`ChatModel: Role ${roleId} data cleared`);
|
||||
logger.log(`ChatModel: Role ${roleId} data cleared`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -452,13 +453,13 @@ export class ChatModel {
|
||||
public validate(roleId?: number): boolean {
|
||||
const targetRoleId = roleId || this.currentGirlId;
|
||||
if (!targetRoleId) {
|
||||
console.error("ChatModel: No active role");
|
||||
logger.error("ChatModel: No active role");
|
||||
return false;
|
||||
}
|
||||
|
||||
const roleData = this.rolesData.get(targetRoleId);
|
||||
if (!roleData) {
|
||||
console.error(`ChatModel: Role data not found for ${targetRoleId}`);
|
||||
logger.error(`ChatModel: Role data not found for ${targetRoleId}`);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -500,7 +501,7 @@ export class ChatModel {
|
||||
public setMaxCachedRoles(maxCount: number): void {
|
||||
if (maxCount > 0) {
|
||||
this.maxCachedRoles = maxCount;
|
||||
console.log(`ChatModel: Max cached roles set to ${maxCount}`);
|
||||
logger.log(`ChatModel: Max cached roles set to ${maxCount}`);
|
||||
|
||||
// 如果当前缓存超过新限制,清理多余的
|
||||
this.manageMemory();
|
||||
|
||||
@@ -16,6 +16,7 @@ import { GirlData } from "./GirlData";
|
||||
import { EnvData } from "./EnvData";
|
||||
import { GlobalData } from "./GlobalData";
|
||||
import { AiCharacterData } from "./AiCharacterData";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
/**
|
||||
* 集中定义数据ID,避免写错字符串
|
||||
@@ -63,7 +64,7 @@ export class DataManager {
|
||||
* 初始化:注册 数据ID → 构造器
|
||||
*/
|
||||
public init(): void {
|
||||
console.log("[DataManager] 数据管理器初始化");
|
||||
logger.log("[DataManager] 数据管理器初始化");
|
||||
this.registerAll();
|
||||
}
|
||||
|
||||
@@ -91,7 +92,7 @@ export class DataManager {
|
||||
*/
|
||||
private register<T extends BaseData>(dataId: string, ctor: DataCtor<T>): void {
|
||||
if (this._config.has(dataId)) {
|
||||
console.warn(`[DataManager] 重复注册数据ID: ${dataId},将覆盖旧构造器`);
|
||||
logger.warn(`[DataManager] 重复注册数据ID: ${dataId},将覆盖旧构造器`);
|
||||
}
|
||||
this._config.set(dataId, ctor);
|
||||
}
|
||||
@@ -107,7 +108,7 @@ export class DataManager {
|
||||
// 缓存没有→ 查找构造器
|
||||
const Ctor = this._config.get(dataId) as DataCtor<T> | undefined;
|
||||
if (!Ctor) {
|
||||
console.warn(`[DataManager] 未找到 dataId 的构造器配置: ${dataId}`);
|
||||
logger.warn(`[DataManager] 未找到 dataId 的构造器配置: ${dataId}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import { BaseData } from "./BaseData";
|
||||
import proto from 'db://assets/Scripts/proto/proto.pb.js';
|
||||
import Utils from "../../Main/Common/Utils";
|
||||
import { InnerMsgCode } from "../../Main/Config/InnerMsgCode";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export class GirlChatData extends BaseData {
|
||||
// id
|
||||
@@ -75,7 +76,7 @@ export class GirlChatData extends BaseData {
|
||||
chatTotalCount: this.chatTotalCount,
|
||||
};
|
||||
Utils.sendInnerMsg(InnerMsgCode.ChatTotalCountChange, msgData);
|
||||
console.log("当前技师 ", this.id, " ,总聊天次数:", this.chatTotalCount);
|
||||
logger.log("当前技师 ", this.id, " ,总聊天次数:", this.chatTotalCount);
|
||||
}
|
||||
|
||||
/** 获取剩余聊天次数 */
|
||||
@@ -86,7 +87,7 @@ export class GirlChatData extends BaseData {
|
||||
/** 保存剩余聊天次数 */
|
||||
public setChatRemainCount(value: number): void {
|
||||
this.chatRemainCount = value;
|
||||
console.log("当前技师 ", this.id, " ,剩余聊天次数:", this.chatRemainCount);
|
||||
logger.log("当前技师 ", this.id, " ,剩余聊天次数:", this.chatRemainCount);
|
||||
}
|
||||
|
||||
/** 更新剩余聊天次数 */
|
||||
@@ -143,7 +144,7 @@ export class GirlChatData extends BaseData {
|
||||
// 排序:根据 msgId 从大到小排序
|
||||
this.chatRecordIds.sort((a, b) => b - a);
|
||||
|
||||
console.log("当前技师 ", this.id, " ,聊天记录:", this.chatRecord);
|
||||
logger.log("当前技师 ", this.id, " ,聊天记录:", this.chatRecord);
|
||||
}
|
||||
|
||||
/** 获取聊天记录的所有 id */
|
||||
|
||||
@@ -10,6 +10,7 @@ import { GirlFavorabilityData } from "./GirlFavorabilityData";
|
||||
import { DataId } from "./DataManager";
|
||||
import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { PriceType } from "../../schema/schema";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
// 分类的数据结构
|
||||
interface CategoryBucket {
|
||||
@@ -90,7 +91,7 @@ export class GirlData extends BaseData {
|
||||
this.setGirlFavorability(categoryId, data.girls);
|
||||
|
||||
const bucket = this.ensureBucket(categoryId);
|
||||
console.log("保存类别 ", categoryId, " 的技师列表: ", bucket);
|
||||
logger.log("保存类别 ", categoryId, " 的技师列表: ", bucket);
|
||||
}
|
||||
|
||||
/** 保存技师详细数据 */
|
||||
@@ -108,7 +109,7 @@ export class GirlData extends BaseData {
|
||||
this.setGirlFavorability(categoryId, details);
|
||||
|
||||
const bucket = this.ensureBucket(categoryId);
|
||||
console.log("保存类别 ", categoryId, " 的详细数据: ", bucket);
|
||||
logger.log("保存类别 ", categoryId, " 的详细数据: ", bucket);
|
||||
}
|
||||
|
||||
/** --------------------------------------------------------- 技师的简要数据 --------------------------------------------------------- */
|
||||
@@ -967,7 +968,7 @@ export class GirlData extends BaseData {
|
||||
if (!data) return;
|
||||
this.mergeOneBrief(DAILY_BUCKET, data.girl);
|
||||
const bucket = this.ensureBucket(DAILY_BUCKET);
|
||||
console.log("保存每日推荐: ", bucket);
|
||||
logger.log("保存每日推荐: ", bucket);
|
||||
}
|
||||
|
||||
/** 判断每日推荐是否存在 */
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
*/
|
||||
import { BaseData } from "./BaseData";
|
||||
import proto from 'db://assets/Scripts/proto/proto.pb.js';
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export class GirlUnlockData extends BaseData {
|
||||
// id
|
||||
@@ -81,7 +82,7 @@ export class GirlUnlockData extends BaseData {
|
||||
if (!exists) {
|
||||
this.unlockedImageIds.push(id);
|
||||
}
|
||||
console.log("技师 ", this.id, " 当前解锁图片的所有id:",this.unlockedImageIds);
|
||||
logger.log("技师 ", this.id, " 当前解锁图片的所有id:",this.unlockedImageIds);
|
||||
}
|
||||
|
||||
/** 获取所有解锁图片的 id */
|
||||
@@ -113,7 +114,7 @@ export class GirlUnlockData extends BaseData {
|
||||
if (!exists) {
|
||||
this.unlockedVideoIds.push(id);
|
||||
}
|
||||
console.log("技师 ", this.id, " 当前解锁视频的所有id:",this.unlockedVideoIds);
|
||||
logger.log("技师 ", this.id, " 当前解锁视频的所有id:",this.unlockedVideoIds);
|
||||
}
|
||||
|
||||
/** 获取所有解锁视频的 id */
|
||||
|
||||
@@ -93,7 +93,6 @@ export class GlobalData extends BaseData {
|
||||
this._gameName = obj.GameName;
|
||||
this._emotionBasePrompt = obj.EmotionBasePrompt;
|
||||
this._girlBasePrompt = obj.girlBasePrompt;
|
||||
console.log("设置全局数据: ", this._gameName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import proto from 'db://assets/Scripts/proto/proto.pb.js';
|
||||
import type { OrderVO, OrderStatus } from 'db://assets/Scripts/chat18x/payment/types';
|
||||
import { mapQueryOrderStatus, shouldPoll } from 'db://assets/Scripts/chat18x/payment/PaymentUtil';
|
||||
import { sys } from "cc";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const ORDER_STORAGE_KEY = "order_data_v1";
|
||||
|
||||
@@ -44,7 +45,7 @@ export class OrderData extends BaseData {
|
||||
createdAt: Date.now(), // 订单创建时间,毫秒
|
||||
};
|
||||
this._orders.set(orderId, vo);
|
||||
console.log("保存订单数据:", this._orders);
|
||||
logger.log("保存订单数据:", this._orders);
|
||||
}
|
||||
|
||||
/** 根据订单 id 获取订单数据 */
|
||||
@@ -68,7 +69,7 @@ export class OrderData extends BaseData {
|
||||
vo.status = mapQueryOrderStatus(res.status);
|
||||
vo.retCode = res.retCode ?? 0;
|
||||
this._orders.set(orderId, vo);
|
||||
console.log("更新订单数据:", vo);
|
||||
logger.log("更新订单数据:", vo);
|
||||
}
|
||||
|
||||
/** 获取所有需要继续轮询查询的订单 id */
|
||||
@@ -172,9 +173,9 @@ export class OrderData extends BaseData {
|
||||
map.set(vo.orderId, vo);
|
||||
}
|
||||
}
|
||||
console.log("加载本地订单数据:", map);
|
||||
logger.log("加载本地订单数据:", map);
|
||||
} catch (e) {
|
||||
console.warn("[OrderData] loadStorage parse error:", e);
|
||||
logger.warn("[OrderData] loadStorage parse error:", e);
|
||||
this.ensureMap().clear();
|
||||
}
|
||||
}
|
||||
@@ -190,9 +191,9 @@ export class OrderData extends BaseData {
|
||||
orders,
|
||||
};
|
||||
sys.localStorage.setItem(ORDER_STORAGE_KEY, JSON.stringify(payload));
|
||||
console.log("保存本地订单数据:", payload);
|
||||
logger.log("保存本地订单数据:", payload);
|
||||
} catch (e) {
|
||||
console.warn("[OrderData] saveStorage error:", e);
|
||||
logger.warn("[OrderData] saveStorage error:", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
*/
|
||||
import { BaseData } from "./BaseData";
|
||||
import proto from 'db://assets/Scripts/proto/proto.pb.js';
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export class ShopData extends BaseData {
|
||||
// 商品数据
|
||||
@@ -41,7 +42,7 @@ export class ShopData extends BaseData {
|
||||
this._goods.set(vo.id, vo);
|
||||
this._goodIds.push(vo.id);
|
||||
}
|
||||
console.log("设置商品数据:", this._goods);
|
||||
logger.log("设置商品数据:", this._goods);
|
||||
}
|
||||
|
||||
/** 获取所有商品数据 */
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
*/
|
||||
import { BaseData } from "./BaseData";
|
||||
import proto from 'db://assets/Scripts/proto/proto.pb.js';
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export class ThemeData extends BaseData {
|
||||
// 主题数据
|
||||
@@ -43,7 +44,7 @@ export class ThemeData extends BaseData {
|
||||
this._themes.set(vo.id, vo);
|
||||
this._themeIds.push(vo.id);
|
||||
}
|
||||
console.log("设置主题数据:", this._themes);
|
||||
logger.log("设置主题数据:", this._themes);
|
||||
}
|
||||
|
||||
/** 获取所有主题数据 */
|
||||
|
||||
@@ -3,6 +3,7 @@ import { DataManager, DataId } from "../data/DataManager";
|
||||
import { GirlData } from "../data/GirlData";
|
||||
import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { ChatService } from "../network/services/ChatService";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export interface ChatMessage {
|
||||
role: "user" | "model";
|
||||
@@ -49,7 +50,7 @@ export class ChatHistoryManager {
|
||||
const existingHistory: ChatHistory = JSON.parse(existingData);
|
||||
createdAt = existingHistory.createdAt;
|
||||
} catch (parseError) {
|
||||
console.warn(`Failed to parse existing history for role ${roleId}, using current time as createdAt`);
|
||||
logger.warn(`Failed to parse existing history for role ${roleId}, using current time as createdAt`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,11 +62,11 @@ export class ChatHistoryManager {
|
||||
};
|
||||
|
||||
sys.localStorage.setItem(key, JSON.stringify(history));
|
||||
console.log(
|
||||
logger.log(
|
||||
`Saved chat history for role ${roleId}, ${messages.length} messages`
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(`Failed to save chat history for role ${roleId}:`, error);
|
||||
logger.error(`Failed to save chat history for role ${roleId}:`, error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,13 +81,13 @@ export class ChatHistoryManager {
|
||||
const data = sys.localStorage.getItem(key);
|
||||
if (data) {
|
||||
const history: ChatHistory = JSON.parse(data);
|
||||
console.log(
|
||||
logger.log(
|
||||
`Loaded chat history for role ${roleId}: ${history.messages.length} messages`
|
||||
);
|
||||
return history.messages;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Failed to load chat history for role ${roleId}:`, error);
|
||||
logger.error(`Failed to load chat history for role ${roleId}:`, error);
|
||||
// 如果数据损坏,清除错误的数据
|
||||
this.clearHistory(roleId);
|
||||
}
|
||||
@@ -100,7 +101,7 @@ export class ChatHistoryManager {
|
||||
public clearHistory(roleId: number): void {
|
||||
const key = `chat_history_${roleId}`;
|
||||
sys.localStorage.removeItem(key);
|
||||
console.log(`Cleared chat history for role ${roleId}`);
|
||||
logger.log(`Cleared chat history for role ${roleId}`);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -118,7 +119,7 @@ export class ChatHistoryManager {
|
||||
// 限制历史长度,保留最近100条消息
|
||||
if (history.length > 100) {
|
||||
history.splice(0, history.length - 100);
|
||||
console.log(`Trimmed chat history for role ${roleId} to 100 messages`);
|
||||
logger.log(`Trimmed chat history for role ${roleId} to 100 messages`);
|
||||
}
|
||||
|
||||
this.saveHistory(roleId, history);
|
||||
@@ -163,7 +164,7 @@ export class ChatHistoryManager {
|
||||
sys.localStorage.removeItem(key);
|
||||
});
|
||||
|
||||
console.log(
|
||||
logger.log(
|
||||
`Cleared all chat histories, ${keysToRemove.length} records removed`
|
||||
);
|
||||
}
|
||||
@@ -193,7 +194,7 @@ export class ChatHistoryManager {
|
||||
public async syncToRemote(roleId: number): Promise<void> {
|
||||
const history = this.loadHistory(roleId);
|
||||
if (history.length === 0) {
|
||||
console.log(`No history to sync for role ${roleId}`);
|
||||
logger.log(`No history to sync for role ${roleId}`);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -204,11 +205,11 @@ export class ChatHistoryManager {
|
||||
// messages: history
|
||||
// }, "POST");
|
||||
|
||||
console.log(
|
||||
logger.log(
|
||||
`Ready to sync ${history.length} messages for role ${roleId} to remote server`
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(`Failed to sync history for role ${roleId}:`, error);
|
||||
logger.error(`Failed to sync history for role ${roleId}:`, error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -232,7 +233,7 @@ export class ChatHistoryManager {
|
||||
return history.createdAt;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Failed to get last chat time for role ${roleId}:`, error);
|
||||
logger.error(`Failed to get last chat time for role ${roleId}:`, error);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -250,14 +251,14 @@ export class ChatHistoryManager {
|
||||
|
||||
// if (response && response.messages) {
|
||||
// this.saveHistory(roleId, response.messages);
|
||||
// console.log(`Synced ${response.messages.length} messages from remote for role ${roleId}`);
|
||||
// logger.log(`Synced ${response.messages.length} messages from remote for role ${roleId}`);
|
||||
// }
|
||||
|
||||
console.log(
|
||||
logger.log(
|
||||
`Ready to sync history from remote server for role ${roleId}`
|
||||
);
|
||||
} catch (error) {
|
||||
console.error(`Failed to sync from remote for role ${roleId}:`, error);
|
||||
logger.error(`Failed to sync from remote for role ${roleId}:`, error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -288,7 +289,7 @@ export class ChatHistoryManager {
|
||||
// 按时间戳排序,确保消息顺序正确
|
||||
messages.sort((a, b) => (a.timestamp || 0) - (b.timestamp || 0));
|
||||
|
||||
console.log(
|
||||
logger.log(
|
||||
`Converted ${serverMessages.length} server messages to ${messages.length} local messages`
|
||||
);
|
||||
return messages;
|
||||
@@ -313,7 +314,7 @@ export class ChatHistoryManager {
|
||||
limit,
|
||||
};
|
||||
|
||||
console.log("获取服务端聊天记录:", reqData);
|
||||
logger.log("获取服务端聊天记录:", reqData);
|
||||
const res = await ChatService.I.reqGetChatMsg(reqData);
|
||||
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
@@ -333,20 +334,20 @@ export class ChatHistoryManager {
|
||||
resData.chatRemainCount
|
||||
);
|
||||
|
||||
console.log(
|
||||
logger.log(
|
||||
`成功从服务端获取聊天记录,roleId: ${roleId}, 消息数: ${
|
||||
resData.msgs?.length || 0
|
||||
}`
|
||||
);
|
||||
return true;
|
||||
} else {
|
||||
console.warn(
|
||||
logger.warn(
|
||||
`从服务端获取聊天记录失败,roleId: ${roleId}, code: ${res?.code}`
|
||||
);
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`获取服务端聊天记录异常,roleId: ${roleId}:`, error);
|
||||
logger.error(`获取服务端聊天记录异常,roleId: ${roleId}:`, error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -390,7 +391,7 @@ export class ChatHistoryManager {
|
||||
const mergedMessages = Array.from(messageMap.values());
|
||||
mergedMessages.sort((a, b) => (a.timestamp || 0) - (b.timestamp || 0));
|
||||
|
||||
console.log(
|
||||
logger.log(
|
||||
`合并聊天记录: 本地 ${localMessages.length} 条, 服务端 ${serverMessages.length} 条, 合并后 ${mergedMessages.length} 条`
|
||||
);
|
||||
return mergedMessages;
|
||||
@@ -407,18 +408,18 @@ export class ChatHistoryManager {
|
||||
|
||||
// 2. 如果本地有数据,直接返回
|
||||
if (localHistory && localHistory.length > 0) {
|
||||
console.log(
|
||||
logger.log(
|
||||
`使用本地聊天记录,roleId: ${roleId}, 消息数: ${localHistory.length}`
|
||||
);
|
||||
return localHistory;
|
||||
}
|
||||
|
||||
// 3. 本地没有数据,尝试从服务端获取
|
||||
console.log(`本地无聊天记录,尝试从服务端获取,roleId: ${roleId}`);
|
||||
logger.log(`本地无聊天记录,尝试从服务端获取,roleId: ${roleId}`);
|
||||
const serverSuccess = await this.fetchServerChatHistory(roleId);
|
||||
|
||||
if (!serverSuccess) {
|
||||
console.log(`服务端获取失败,返回空记录,roleId: ${roleId}`);
|
||||
logger.log(`服务端获取失败,返回空记录,roleId: ${roleId}`);
|
||||
return [];
|
||||
}
|
||||
|
||||
@@ -447,7 +448,7 @@ export class ChatHistoryManager {
|
||||
// 6. 保存到本地存储
|
||||
if (convertedMessages.length > 0) {
|
||||
this.saveHistory(roleId, convertedMessages);
|
||||
console.log(
|
||||
logger.log(
|
||||
`从服务端获取并保存聊天记录,roleId: ${roleId}, 消息数: ${convertedMessages.length}`
|
||||
);
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import { GlobalConfig } from "../config/GlobalConfig";
|
||||
import { GirlConfig } from "../config/GirlConfig";
|
||||
import { GirlDetailConfig } from "../config/GirlDetailConfig";
|
||||
import { AiCharacterConfig } from "../config/AiCharacterConfig";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
/**
|
||||
* 集中定义数据ID,避免写错字符串
|
||||
@@ -68,7 +69,7 @@ export class ConfigManager {
|
||||
"DataTable",
|
||||
(err: Error, _bundle: AssetManager.Bundle) => {
|
||||
if (err) {
|
||||
console.log(err);
|
||||
logger.log(err);
|
||||
reject && reject(err);
|
||||
return;
|
||||
} else {
|
||||
@@ -87,13 +88,13 @@ export class ConfigManager {
|
||||
new Uint8Array(data.buffer().slice(0, data.buffer().byteLength))
|
||||
);
|
||||
} else {
|
||||
console.error("静态配置加载失败" + curFileName);
|
||||
logger.error("静态配置加载失败" + curFileName);
|
||||
}
|
||||
});
|
||||
promises.push(promise);
|
||||
}
|
||||
Promise.all(promises).then((values) => {
|
||||
console.log("静态配置加载完成");
|
||||
logger.log("静态配置加载完成");
|
||||
ConfigManager.tables = new cfg.Tables(ConfigManager.I.getFileData);
|
||||
});
|
||||
}
|
||||
@@ -126,7 +127,7 @@ export class ConfigManager {
|
||||
ctor: DataCtor<T>
|
||||
): void {
|
||||
if (this._config.has(configId)) {
|
||||
console.warn(
|
||||
logger.warn(
|
||||
`[ConfigManager] 重复注册数据ID: ${configId},将覆盖旧构造器`
|
||||
);
|
||||
}
|
||||
@@ -146,7 +147,7 @@ export class ConfigManager {
|
||||
// 缓存没有→ 查找构造器
|
||||
const Ctor = this._config.get(configId) as DataCtor<T> | undefined;
|
||||
if (!Ctor) {
|
||||
console.warn(`[ConfigManager] 未找到 configId 的构造器配置: ${configId}`);
|
||||
logger.warn(`[ConfigManager] 未找到 configId 的构造器配置: ${configId}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ import { ChatContentsLayout } from "../ui/components/ChatContentsLayout";
|
||||
import { DiaLogData, Dialog } from "../data/DialogData";
|
||||
import Utils from "db://assets/Scripts/Main/Common/Utils";
|
||||
import { InnerMsgCode } from "db://assets/Scripts/Main/Config/InnerMsgCode";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
/**
|
||||
* 对话管理器
|
||||
@@ -75,7 +76,7 @@ export class DialogManager {
|
||||
// 如果是玩家消息,直接添加单个气泡
|
||||
if (isPlayer) {
|
||||
this.dialogData.pushDialog(isPlayer, str);
|
||||
console.log("Dialog updated:", {
|
||||
logger.log("Dialog updated:", {
|
||||
isPlayer,
|
||||
content: str.substring(0, 50) + "...",
|
||||
});
|
||||
@@ -134,7 +135,7 @@ export class DialogManager {
|
||||
*/
|
||||
public addLoadingDialog(): void {
|
||||
this.dialogData.pushDialog(false, "...", true);
|
||||
console.log("Loading dialog added");
|
||||
logger.log("Loading dialog added");
|
||||
Utils.sendInnerMsg(InnerMsgCode.Chat_DialogRefresh);
|
||||
}
|
||||
|
||||
@@ -153,7 +154,7 @@ export class DialogManager {
|
||||
*/
|
||||
public clearDialogs(): void {
|
||||
this.dialogData.cleanDialog();
|
||||
console.log("All dialogs cleared");
|
||||
logger.log("All dialogs cleared");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -168,7 +169,7 @@ export class DialogManager {
|
||||
dialog.content,
|
||||
);
|
||||
});
|
||||
console.log(`DialogManager: Set ${dialogs.length} dialogs`);
|
||||
logger.log(`DialogManager: Set ${dialogs.length} dialogs`);
|
||||
Utils.sendInnerMsg(InnerMsgCode.Chat_DialogRefresh);
|
||||
}
|
||||
|
||||
@@ -178,7 +179,7 @@ export class DialogManager {
|
||||
*/
|
||||
public syncFromChatModel(dialogs: Dialog[]): void {
|
||||
this.setDialogs(dialogs);
|
||||
console.log("DialogManager: Synced dialogs from ChatModel");
|
||||
logger.log("DialogManager: Synced dialogs from ChatModel");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import { InnerMsgCode } from "../../Main/Config/InnerMsgCode";
|
||||
import { ThemePanel } from "../ui/panels/ThemePanel";
|
||||
import { GirlListPanel } from "../ui/panels/GirlListPanel";
|
||||
import li_BaseView from "../../Main/Common/li_BaseView";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
/**
|
||||
* 页面过渡动画类型枚举
|
||||
@@ -120,7 +121,7 @@ export class NavigationManager {
|
||||
*/
|
||||
public registerNavigationPanel(panel: any): void {
|
||||
this.navigationPanel = panel;
|
||||
console.log("[NavigationManager] NavigationPanel registered");
|
||||
logger.log("[NavigationManager] NavigationPanel registered");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -133,19 +134,19 @@ export class NavigationManager {
|
||||
callback: Function = null
|
||||
): Node {
|
||||
if (!panelType) {
|
||||
console.error("[NavigationManager] switchToPanel: panelType is invalid");
|
||||
logger.error("[NavigationManager] switchToPanel: panelType is invalid");
|
||||
return null;
|
||||
}
|
||||
|
||||
if (this.currentActivePanelType === panelType && !force) {
|
||||
console.log(
|
||||
logger.log(
|
||||
`[NavigationManager] Already on ${panelType}, skipping switch`
|
||||
);
|
||||
return this.currentActivePanel;
|
||||
}
|
||||
|
||||
if (!this.navigationPanel) {
|
||||
console.warn(
|
||||
logger.warn(
|
||||
"[NavigationManager] NavigationPanel not registered, fallback to direct ViewManager call"
|
||||
);
|
||||
//this.fallbackSwitchPanel(panelType);
|
||||
@@ -315,12 +316,12 @@ export class NavigationManager {
|
||||
animationConfig?: SubPanelAnimationConfig
|
||||
) {
|
||||
if (!panelName) {
|
||||
console.error("[NavigationManager] openSubPanel: panelName is empty");
|
||||
logger.error("[NavigationManager] openSubPanel: panelName is empty");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!basePanel || !basePanel.isValid) {
|
||||
console.error("[NavigationManager] openSubPanel: basePanel is invalid");
|
||||
logger.error("[NavigationManager] openSubPanel: basePanel is invalid");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -334,7 +335,7 @@ export class NavigationManager {
|
||||
|
||||
const callback = (n: Node) => {
|
||||
if (!n || !n.isValid) {
|
||||
console.error(
|
||||
logger.error(
|
||||
"[NavigationManager] openSubPanel: created panel is invalid"
|
||||
);
|
||||
return;
|
||||
@@ -351,7 +352,7 @@ export class NavigationManager {
|
||||
if (basePanelType) {
|
||||
this.subPanelMapping.set(n, basePanelType);
|
||||
} else {
|
||||
console.warn(
|
||||
logger.warn(
|
||||
`[NavigationManager] 无法确定basePanel类型: ${basePanel.name}`
|
||||
);
|
||||
}
|
||||
@@ -377,21 +378,21 @@ export class NavigationManager {
|
||||
force: boolean = false
|
||||
): Node {
|
||||
if (!panelType) {
|
||||
console.error(
|
||||
logger.error(
|
||||
"[NavigationManager] switchToPanelWithTransition: panelType is invalid"
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (this.currentActivePanelType === panelType && !force) {
|
||||
console.log(
|
||||
logger.log(
|
||||
`[NavigationManager] Already on ${panelType}, skipping switch`
|
||||
);
|
||||
return this.currentActivePanel;
|
||||
}
|
||||
|
||||
if (!this.navigationPanel) {
|
||||
console.warn(
|
||||
logger.warn(
|
||||
"[NavigationManager] NavigationPanel not registered, fallback to direct ViewManager call"
|
||||
);
|
||||
return null;
|
||||
@@ -545,13 +546,13 @@ export class NavigationManager {
|
||||
callback?: Function
|
||||
): void {
|
||||
if (!panelName) {
|
||||
console.error("[NavigationManager] openPopupPanel: panelName is empty");
|
||||
logger.error("[NavigationManager] openPopupPanel: panelName is empty");
|
||||
return;
|
||||
}
|
||||
|
||||
const popupCallback = (panel: Node) => {
|
||||
if (!panel || !panel.isValid) {
|
||||
console.error(
|
||||
logger.error(
|
||||
"[NavigationManager] openPopupPanel: created panel is invalid"
|
||||
);
|
||||
return;
|
||||
@@ -559,7 +560,7 @@ export class NavigationManager {
|
||||
|
||||
// 将弹窗添加到管理集合中
|
||||
this.popupPanels.add(panel);
|
||||
console.log(
|
||||
logger.log(
|
||||
`[NavigationManager] Popup panel opened: ${panelName}, total popups: ${this.popupPanels.size}`
|
||||
);
|
||||
|
||||
@@ -577,14 +578,14 @@ export class NavigationManager {
|
||||
*/
|
||||
public closePopupPanel(panel: Node): void {
|
||||
if (!panel || !panel.isValid) {
|
||||
console.warn("[NavigationManager] closePopupPanel: panel is invalid");
|
||||
logger.warn("[NavigationManager] closePopupPanel: panel is invalid");
|
||||
return;
|
||||
}
|
||||
|
||||
// 从弹窗管理集合中移除
|
||||
if (this.popupPanels.has(panel)) {
|
||||
this.popupPanels.delete(panel);
|
||||
console.log(
|
||||
logger.log(
|
||||
`[NavigationManager] Popup panel closed: ${panel.name}, total popups: ${this.popupPanels.size}`
|
||||
);
|
||||
}
|
||||
@@ -598,7 +599,7 @@ export class NavigationManager {
|
||||
panel.destroy();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("[NavigationManager] closePopupPanel error:", error);
|
||||
logger.error("[NavigationManager] closePopupPanel error:", error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -610,7 +611,7 @@ export class NavigationManager {
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(
|
||||
logger.log(
|
||||
`[NavigationManager] Closing all popups, count: ${this.popupPanels.size}`
|
||||
);
|
||||
|
||||
@@ -631,7 +632,7 @@ export class NavigationManager {
|
||||
animationConfig?: SubPanelAnimationConfig
|
||||
) {
|
||||
if (!panel) {
|
||||
console.warn(
|
||||
logger.warn(
|
||||
"[NavigationManager] closeSubPanel: panel is null or undefined"
|
||||
);
|
||||
return;
|
||||
@@ -645,7 +646,7 @@ export class NavigationManager {
|
||||
}
|
||||
|
||||
if (!panelNode || !panelNode.isValid) {
|
||||
console.warn("[NavigationManager] closeSubPanel: panelNode is invalid");
|
||||
logger.warn("[NavigationManager] closeSubPanel: panelNode is invalid");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -675,7 +676,7 @@ export class NavigationManager {
|
||||
panel.close();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("[NavigationManager] closeSubPanel error:", error);
|
||||
logger.error("[NavigationManager] closeSubPanel error:", error);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -699,7 +700,7 @@ export class NavigationManager {
|
||||
this.subPanelDic.delete(baseNode);
|
||||
}
|
||||
} else {
|
||||
console.warn(
|
||||
logger.warn(
|
||||
`[NavigationManager] ${panelNode.name} 不在子页面列表中`
|
||||
);
|
||||
}
|
||||
@@ -733,7 +734,7 @@ export class NavigationManager {
|
||||
}
|
||||
private getPanelType(node: Node): PanelType {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("[NavigationManager] getPanelType: node is invalid");
|
||||
logger.warn("[NavigationManager] getPanelType: node is invalid");
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -747,7 +748,7 @@ export class NavigationManager {
|
||||
case "PersonalPanel":
|
||||
return PanelType.PERSONAL;
|
||||
default:
|
||||
console.warn(
|
||||
logger.warn(
|
||||
`[NavigationManager] Unknown panel type for node: ${node.name}`
|
||||
);
|
||||
return null;
|
||||
@@ -794,7 +795,7 @@ export class NavigationManager {
|
||||
// 不在这里调用Show(),因为ThemePanel已经有加载状态保护
|
||||
// 只在必要时调用onHide()确保子页面状态正确
|
||||
if (typeof themePanel.onHide === "function") {
|
||||
console.log("[NavigationManager] 确保主题面板子页面状态正确");
|
||||
logger.log("[NavigationManager] 确保主题面板子页面状态正确");
|
||||
themePanel.onHide();
|
||||
}
|
||||
}
|
||||
@@ -918,7 +919,7 @@ export class NavigationManager {
|
||||
public setSelectedGirlId(girlId: number): void {
|
||||
this.selectedGirlId = girlId;
|
||||
sys.localStorage.setItem(NavigationManager.LastSelectGirlID, girlId);
|
||||
console.log("[NavigationManager] Selected girl ID set to:", girlId);
|
||||
logger.log("[NavigationManager] Selected girl ID set to:", girlId);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -935,7 +936,7 @@ export class NavigationManager {
|
||||
*/
|
||||
public setSelectedCategoryId(themeId: number): void {
|
||||
this.selectedCategoryId = themeId;
|
||||
console.log("[NavigationManager] Selected theme ID set to:", themeId);
|
||||
logger.log("[NavigationManager] Selected theme ID set to:", themeId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -9,6 +9,7 @@ import type proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { type OpenStrategy } from "./PaymentOpener";
|
||||
import { DataManager, DataId } from "db://assets/Scripts/chat18x/data/DataManager";
|
||||
import { OrderData } from "db://assets/Scripts/chat18x/data/OrderData";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export class CashInrFlow implements PaymentFlow {
|
||||
constructor(private waitAppResume: (open: OpenStrategy) => Promise<void>) {}
|
||||
@@ -41,6 +42,6 @@ export class CashInrFlow implements PaymentFlow {
|
||||
startIntervalMs: 2000,
|
||||
maxIntervalMs: 10000,
|
||||
jitter: true,
|
||||
}, (d) => console.log());
|
||||
}, (d) => logger.log());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
*/
|
||||
import { PaymentApi } from "./PaymentApi";
|
||||
import proto from 'db://assets/Scripts/proto/proto.pb.js';
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export interface PollOptions {
|
||||
maxDurationMs: number; // 最大轮询时长(超过就自动退出)(例如 2分钟)
|
||||
@@ -41,9 +42,9 @@ export class PaymentPoller {
|
||||
this.currentPollCount++;
|
||||
// 查询
|
||||
let reqData = {orderId: orderId};
|
||||
console.log("订单:", orderId, " ,第 ", this.currentPollCount, " 次轮询订单的请求数据:", reqData);
|
||||
logger.log("订单:", orderId, " ,第 ", this.currentPollCount, " 次轮询订单的请求数据:", reqData);
|
||||
const r = await PaymentApi.I.queryOrder(reqData);
|
||||
console.log("订单:", orderId, " ,第 ", this.currentPollCount, " 次轮询订单的响应数据:", r);
|
||||
logger.log("订单:", orderId, " ,第 ", this.currentPollCount, " 次轮询订单的响应数据:", r);
|
||||
if (r.code === proto.cs.EnmRetCode.SUCCESS && r.data) {
|
||||
// 回调
|
||||
onTick?.(r.data);
|
||||
|
||||
@@ -14,6 +14,7 @@ import { DataManager, DataId } from "db://assets/Scripts/chat18x/data/DataManage
|
||||
import { OrderData } from "db://assets/Scripts/chat18x/data/OrderData";
|
||||
import Utils from "../../Main/Common/Utils";
|
||||
import { InnerMsgCode } from "../../Main/Config/InnerMsgCode";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export class PaymentService {
|
||||
private static _I: PaymentService | null = null;
|
||||
@@ -32,9 +33,9 @@ export class PaymentService {
|
||||
/** 发起支付:创建订单→打开URL→回到App后开始轮询 */
|
||||
async startPayment(req: proto.cs.ICSCreateOrderReq, open: OpenStrategy = "system"): Promise<proto.cs.ICSQueryOrderRes> {
|
||||
// 下单
|
||||
console.log("创建订单的请求数据:", req);
|
||||
logger.log("创建订单的请求数据:", req);
|
||||
const create = await PaymentApi.I.createOrder(req);
|
||||
console.log("创建订单的响应数据:", create);
|
||||
logger.log("创建订单的响应数据:", create);
|
||||
if (create.code !== proto.cs.EnmRetCode.SUCCESS || !create.data) {
|
||||
return { status: -1, retCode: -1, balance: 0, vipExpire: 0};
|
||||
}
|
||||
@@ -88,7 +89,7 @@ export class PaymentService {
|
||||
return new Promise<void>((resolve) => {
|
||||
let finished = false;
|
||||
const finish = () => {
|
||||
console.log("应用回到 finish");
|
||||
logger.log("应用回到 finish");
|
||||
if (finished) return;
|
||||
finished = true;
|
||||
// 安全移除监听
|
||||
@@ -98,7 +99,7 @@ export class PaymentService {
|
||||
|
||||
const onShow = () => {
|
||||
// 应用回到前台
|
||||
console.log("应用回到了前台");
|
||||
logger.log("应用回到了前台");
|
||||
finish();
|
||||
};
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import type proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { type OpenStrategy } from "./PaymentOpener";
|
||||
import { DataManager, DataId } from "db://assets/Scripts/chat18x/data/DataManager";
|
||||
import { OrderData } from "db://assets/Scripts/chat18x/data/OrderData";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export class WebUsdFlow implements PaymentFlow {
|
||||
constructor(private delayMs: number = 5000) {}
|
||||
@@ -36,7 +37,7 @@ export class WebUsdFlow implements PaymentFlow {
|
||||
startIntervalMs: 5000,
|
||||
maxIntervalMs: 10000,
|
||||
jitter: true,
|
||||
}, (d) => console.log());
|
||||
}, (d) => logger.log());
|
||||
}
|
||||
|
||||
private delay(ms: number) {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { ChatAIService } from '../core/ChatAIService';
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
/**
|
||||
* ChatAI 批量测试运行器 - 纯脚本版本
|
||||
@@ -14,7 +15,7 @@ export class ChatAIBatchTestRunner {
|
||||
private isRunning: boolean = false;
|
||||
|
||||
constructor() {
|
||||
console.log("[ChatAIBatchTestRunner] 测试运行器已初始化");
|
||||
logger.log("[ChatAIBatchTestRunner] 测试运行器已初始化");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -32,13 +33,13 @@ export class ChatAIBatchTestRunner {
|
||||
*/
|
||||
public async runBatchTest(): Promise<void> {
|
||||
if (this.isRunning) {
|
||||
console.log("[ChatAIBatchTestRunner] 测试已在运行中,请等待完成...");
|
||||
logger.log("[ChatAIBatchTestRunner] 测试已在运行中,请等待完成...");
|
||||
return;
|
||||
}
|
||||
|
||||
this.isRunning = true;
|
||||
console.log("[ChatAIBatchTestRunner] 开始批量测试角色ID 10001-10030");
|
||||
console.log("[ChatAIBatchTestRunner] 每次测试间隔10秒");
|
||||
logger.log("[ChatAIBatchTestRunner] 开始批量测试角色ID 10001-10030");
|
||||
logger.log("[ChatAIBatchTestRunner] 每次测试间隔10秒");
|
||||
|
||||
const startTime = Date.now();
|
||||
const successIds: number[] = [];
|
||||
@@ -47,7 +48,7 @@ export class ChatAIBatchTestRunner {
|
||||
|
||||
// 测试角色ID 10001-10030
|
||||
for (let roleId = 10001; roleId <= 10030; roleId++) {
|
||||
console.log(`[ChatAIBatchTestRunner] 正在测试角色ID: ${roleId}`);
|
||||
logger.log(`[ChatAIBatchTestRunner] 正在测试角色ID: ${roleId}`);
|
||||
|
||||
const testStartTime = Date.now();
|
||||
|
||||
@@ -57,12 +58,12 @@ export class ChatAIBatchTestRunner {
|
||||
|
||||
if (response && response.trim() !== "") {
|
||||
successIds.push(roleId);
|
||||
console.log(`[ChatAIBatchTestRunner] ✅ 角色 ${roleId} 测试成功 (${testDuration}ms)`);
|
||||
console.log(`[ChatAIBatchTestRunner] 响应预览: ${response.substring(0, 50)}...`);
|
||||
logger.log(`[ChatAIBatchTestRunner] ✅ 角色 ${roleId} 测试成功 (${testDuration}ms)`);
|
||||
logger.log(`[ChatAIBatchTestRunner] 响应预览: ${response.substring(0, 50)}...`);
|
||||
} else {
|
||||
failureIds.push(roleId);
|
||||
errorDetails[roleId] = "返回空响应";
|
||||
console.log(`[ChatAIBatchTestRunner] ❌ 角色 ${roleId} 返回空响应 (${testDuration}ms)`);
|
||||
logger.log(`[ChatAIBatchTestRunner] ❌ 角色 ${roleId} 返回空响应 (${testDuration}ms)`);
|
||||
}
|
||||
} catch (error) {
|
||||
const testDuration = Date.now() - testStartTime;
|
||||
@@ -70,12 +71,12 @@ export class ChatAIBatchTestRunner {
|
||||
|
||||
failureIds.push(roleId);
|
||||
errorDetails[roleId] = errorMessage;
|
||||
console.log(`[ChatAIBatchTestRunner] ❌ 角色 ${roleId} 测试失败 (${testDuration}ms): ${errorMessage}`);
|
||||
logger.log(`[ChatAIBatchTestRunner] ❌ 角色 ${roleId} 测试失败 (${testDuration}ms): ${errorMessage}`);
|
||||
}
|
||||
|
||||
// 等待10秒(最后一个不需要等待)
|
||||
if (roleId < 10030) {
|
||||
console.log(`[ChatAIBatchTestRunner] 等待10秒后继续下一个测试...`);
|
||||
logger.log(`[ChatAIBatchTestRunner] 等待10秒后继续下一个测试...`);
|
||||
await this.delay(10);
|
||||
}
|
||||
}
|
||||
@@ -86,7 +87,7 @@ export class ChatAIBatchTestRunner {
|
||||
this.printFinalReport(successIds, failureIds, errorDetails, totalDuration);
|
||||
|
||||
this.isRunning = false;
|
||||
console.log("[ChatAIBatchTestRunner] 批量测试完成!");
|
||||
logger.log("[ChatAIBatchTestRunner] 批量测试完成!");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -103,44 +104,44 @@ export class ChatAIBatchTestRunner {
|
||||
const failureCount = failureIds.length;
|
||||
const successRate = ((successCount / totalTests) * 100).toFixed(2);
|
||||
|
||||
console.log("\n" + "=".repeat(60));
|
||||
console.log(" ChatAI 批量测试报告");
|
||||
console.log("=".repeat(60));
|
||||
console.log(`测试时间: ${new Date().toLocaleString()}`);
|
||||
console.log(`总测试数: ${totalTests}`);
|
||||
console.log(`成功数量: ${successCount}`);
|
||||
console.log(`失败数量: ${failureCount}`);
|
||||
console.log(`成功率: ${successRate}%`);
|
||||
console.log(`总耗时: ${(totalDuration / 1000).toFixed(2)}秒`);
|
||||
console.log(`平均耗时: ${(totalDuration / totalTests / 1000).toFixed(2)}秒/测试`);
|
||||
logger.log("\n" + "=".repeat(60));
|
||||
logger.log(" ChatAI 批量测试报告");
|
||||
logger.log("=".repeat(60));
|
||||
logger.log(`测试时间: ${new Date().toLocaleString()}`);
|
||||
logger.log(`总测试数: ${totalTests}`);
|
||||
logger.log(`成功数量: ${successCount}`);
|
||||
logger.log(`失败数量: ${failureCount}`);
|
||||
logger.log(`成功率: ${successRate}%`);
|
||||
logger.log(`总耗时: ${(totalDuration / 1000).toFixed(2)}秒`);
|
||||
logger.log(`平均耗时: ${(totalDuration / totalTests / 1000).toFixed(2)}秒/测试`);
|
||||
|
||||
console.log("\n" + "-".repeat(30) + " 成功的角色ID " + "-".repeat(30));
|
||||
logger.log("\n" + "-".repeat(30) + " 成功的角色ID " + "-".repeat(30));
|
||||
if (successIds.length > 0) {
|
||||
const successList = this.formatIdList(successIds);
|
||||
console.log(successList);
|
||||
logger.log(successList);
|
||||
} else {
|
||||
console.log("无成功案例");
|
||||
logger.log("无成功案例");
|
||||
}
|
||||
|
||||
console.log("\n" + "-".repeat(30) + " 失败的角色ID " + "-".repeat(30));
|
||||
logger.log("\n" + "-".repeat(30) + " 失败的角色ID " + "-".repeat(30));
|
||||
if (failureIds.length > 0) {
|
||||
const failureList = this.formatIdList(failureIds);
|
||||
console.log(failureList);
|
||||
logger.log(failureList);
|
||||
|
||||
console.log("\n" + "-".repeat(25) + " 失败详情 " + "-".repeat(25));
|
||||
logger.log("\n" + "-".repeat(25) + " 失败详情 " + "-".repeat(25));
|
||||
failureIds.forEach(roleId => {
|
||||
console.log(`角色 ${roleId}: ${errorDetails[roleId]}`);
|
||||
logger.log(`角色 ${roleId}: ${errorDetails[roleId]}`);
|
||||
});
|
||||
} else {
|
||||
console.log("无失败案例");
|
||||
logger.log("无失败案例");
|
||||
}
|
||||
|
||||
console.log("\n" + "=".repeat(60));
|
||||
logger.log("\n" + "=".repeat(60));
|
||||
|
||||
// 输出简洁版结果供复制使用
|
||||
console.log("\n简洁结果:");
|
||||
console.log(`成功(${successCount}): ${successIds.join(',')}`);
|
||||
console.log(`失败(${failureCount}): ${failureIds.join(',')}`);
|
||||
logger.log("\n简洁结果:");
|
||||
logger.log(`成功(${successCount}): ${successIds.join(',')}`);
|
||||
logger.log(`失败(${failureCount}): ${failureIds.join(',')}`);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -34,6 +34,8 @@ import { NavigationManager, PanelType } from "../../manager/NavigationManager";
|
||||
import { GirlService } from "../../network/services/GirlService";
|
||||
import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { TipsPanel } from "./TipsPanel";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("ChatPanel")
|
||||
@@ -110,9 +112,9 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
|
||||
// 检查 SceneBgVideoLayer 是否可用
|
||||
if (!this.videoLayer) {
|
||||
console.error("ChatPanel: SceneBgVideoLayer.handle 未初始化");
|
||||
logger.error("ChatPanel: SceneBgVideoLayer.handle 未初始化");
|
||||
} else {
|
||||
console.log("ChatPanel: 成功获取 SceneBgVideoLayer 实例");
|
||||
logger.log("ChatPanel: 成功获取 SceneBgVideoLayer 实例");
|
||||
}
|
||||
this.popUpImage.node.active = false;
|
||||
}
|
||||
@@ -199,7 +201,7 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
this.chatController.hasRoleData(this.categoryId, this.id)
|
||||
) {
|
||||
// 如果是角色切换且有缓存数据,使用switchRole
|
||||
console.log(
|
||||
logger.log(
|
||||
`ChatPanel: Switching from role ${this.chatController.getCurrentRoleId()} to role ${
|
||||
this.id
|
||||
}`
|
||||
@@ -207,7 +209,7 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
this.chatController.switchRole(this.categoryId, this.id);
|
||||
} else {
|
||||
// 首次初始化或没有缓存数据,使用initialize
|
||||
console.log(`ChatPanel: Initializing role ${this.id}`);
|
||||
logger.log(`ChatPanel: Initializing role ${this.id}`);
|
||||
this.chatController.initialize(this.categoryId, this.id);
|
||||
}
|
||||
}
|
||||
@@ -234,7 +236,7 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
if (this.videoLayer) {
|
||||
// Get current emotion from ChatController
|
||||
const currentEmotion = this.chatController.getCurrentEmotion();
|
||||
console.log(
|
||||
logger.log(
|
||||
`Current emotion for role ${this.id}: ${VideoEmotion[currentEmotion]}`
|
||||
);
|
||||
|
||||
@@ -244,7 +246,7 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
chatModel.getDefaultVideo();
|
||||
|
||||
if (initialVideo) {
|
||||
console.log(
|
||||
logger.log(
|
||||
`Loading initial video: ${initialVideo} (emotion: ${VideoEmotion[initialVideo]})`
|
||||
);
|
||||
|
||||
@@ -263,7 +265,7 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
}
|
||||
} else {
|
||||
this.currentEmotion = null; // Reset current emotion when no videos available
|
||||
console.log("No SceneBgVideoLayer available for role", this.id);
|
||||
logger.log("No SceneBgVideoLayer available for role", this.id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,41 +274,41 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
* 保留此方法仅为了兼容性,但不再主动调用
|
||||
*/
|
||||
adjustVideoScale() {
|
||||
console.log(
|
||||
logger.log(
|
||||
"ChatPanel: adjustVideoScale() 方法已废弃,缩放和位置由 playVideo() 自动处理"
|
||||
);
|
||||
// 如果确实需要手动调整,可以重新调用 playVideo
|
||||
// this.videoLayer.playVideo(currentVideo, { size, position });
|
||||
}
|
||||
onChatCountChange() {
|
||||
console.log("Trigger On ChatCount Change");
|
||||
logger.log("Trigger On ChatCount Change");
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
let triggerId = girlData.getTriggerGrilPhotoId(this.categoryId, this.id);
|
||||
|
||||
if (triggerId == 0) return;
|
||||
console.log("Trigger pop up Image id:" + this.id + "--" + triggerId);
|
||||
logger.log("Trigger pop up Image id:" + this.id + "--" + triggerId);
|
||||
|
||||
this.popUpImage.refresh(this.categoryId, this.id, triggerId);
|
||||
}
|
||||
|
||||
setVideoEnable(enable: boolean) {
|
||||
if (!this.videoLayer) {
|
||||
console.error("ChatPanel: SceneBgVideoLayer 不可用");
|
||||
logger.error("ChatPanel: SceneBgVideoLayer 不可用");
|
||||
return;
|
||||
}
|
||||
|
||||
if (enable) {
|
||||
this.videoLayer.resume();
|
||||
console.log("ChatPanel: 恢复视频播放");
|
||||
logger.log("ChatPanel: 恢复视频播放");
|
||||
} else {
|
||||
this.videoLayer.pause();
|
||||
console.log("ChatPanel: 暂停视频播放");
|
||||
logger.log("ChatPanel: 暂停视频播放");
|
||||
}
|
||||
}
|
||||
|
||||
private switchVideoByEmotion(emotion: VideoEmotion): void {
|
||||
if (!this.videoLayer) {
|
||||
console.warn("Cannot switch video: missing video player");
|
||||
logger.warn("Cannot switch video: missing video player");
|
||||
return;
|
||||
}
|
||||
// Get video data from ChatModel through ChatController
|
||||
@@ -314,7 +316,7 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
|
||||
// Check if emotion has changed
|
||||
if (this.currentEmotion === emotion) {
|
||||
console.log(
|
||||
logger.log(
|
||||
`Emotion ${VideoEmotion[emotion]} unchanged, skipping video switch`
|
||||
);
|
||||
return;
|
||||
@@ -324,7 +326,7 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
const matchingVideo = chatModel.getVideoByEmotion(emotion);
|
||||
|
||||
if (matchingVideo) {
|
||||
console.log(
|
||||
logger.log(
|
||||
`Switching to video for emotion ${
|
||||
VideoEmotion[emotion]
|
||||
}: ${matchingVideo} (from ${
|
||||
@@ -346,14 +348,14 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
// 注意:移除了 adjustVideoScale() 调用,因为 playVideo 现在会自动处理缩放和位置
|
||||
this.setVideoEnable(true);
|
||||
} else {
|
||||
console.warn(
|
||||
logger.warn(
|
||||
`No video found for emotion ${VideoEmotion[emotion]}, falling back to default video`
|
||||
);
|
||||
|
||||
// Fallback to default video from ChatModel
|
||||
const fallbackVideo = chatModel.getDefaultVideo();
|
||||
if (fallbackVideo) {
|
||||
console.log(
|
||||
logger.log(
|
||||
`Loading fallback video: ${fallbackVideo} (emotion: ${VideoEmotion[fallbackVideo]})`
|
||||
);
|
||||
|
||||
@@ -378,7 +380,7 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
}): void {
|
||||
// 检查是否是当前角色
|
||||
if (data.roleId === this.id) {
|
||||
console.log(
|
||||
logger.log(
|
||||
`Emotion initialized for current role ${this.id}: ${
|
||||
VideoEmotion[data.emotion]
|
||||
}`
|
||||
@@ -387,7 +389,7 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
// 切换到对应的视频
|
||||
this.switchVideoByEmotion(data.emotion);
|
||||
} else {
|
||||
console.log(
|
||||
logger.log(
|
||||
`Emotion initialized for role ${data.roleId} (not current role ${this.id}), ignoring`
|
||||
);
|
||||
}
|
||||
@@ -444,7 +446,7 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
* @param message 用户发送的消息
|
||||
*/
|
||||
public onMessageSent(message: string): void {
|
||||
console.log("Message sent:", message);
|
||||
logger.log("Message sent:", message);
|
||||
// 消息发送后开始显示加载动画,由DialogManager处理
|
||||
}
|
||||
|
||||
@@ -453,7 +455,7 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
* @param response AI的回复内容
|
||||
*/
|
||||
public onMessageReceived(response: string): void {
|
||||
//console.log("Message received:", response);
|
||||
//logger.log("Message received:", response);
|
||||
// AI回复收到后加载动画会被自动移除,可以在这里添加其他UI效果
|
||||
}
|
||||
|
||||
@@ -470,7 +472,7 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
* @param error 错误信息
|
||||
*/
|
||||
public onError(error: Error): void {
|
||||
console.error("Chat error:", error);
|
||||
logger.error("Chat error:", error);
|
||||
// 出错时加载动画会被自动移除,可以在这里显示错误提示给用户
|
||||
}
|
||||
|
||||
@@ -483,7 +485,7 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
* @param emotion 当前情绪状态
|
||||
*/
|
||||
public onEmotionUpdated(emotion: VideoEmotion): void {
|
||||
console.log(
|
||||
logger.log(
|
||||
`ChatPanel: Emotion updated to ${VideoEmotion[emotion]} (${emotion})`
|
||||
);
|
||||
|
||||
@@ -495,23 +497,23 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
switch (emotion) {
|
||||
case VideoEmotion.calm_down:
|
||||
// 平静状态的UI更新
|
||||
console.log("UI state: Calm");
|
||||
logger.log("UI state: Calm");
|
||||
break;
|
||||
case VideoEmotion.arousal:
|
||||
// 兴奋状态的UI更新
|
||||
console.log("UI state: Arousal");
|
||||
logger.log("UI state: Arousal");
|
||||
break;
|
||||
case VideoEmotion.desire:
|
||||
// 渴望状态的UI更新
|
||||
console.log("UI state: Desire");
|
||||
logger.log("UI state: Desire");
|
||||
break;
|
||||
case VideoEmotion.passion:
|
||||
// 激情状态的UI更新
|
||||
console.log("UI state: Passion");
|
||||
logger.log("UI state: Passion");
|
||||
break;
|
||||
case VideoEmotion.orgasm:
|
||||
// 高潮状态的UI更新
|
||||
console.log("UI state: Orgasm");
|
||||
logger.log("UI state: Orgasm");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -529,17 +531,17 @@ export class ChatPanel extends li_BaseView implements IChatPanelCallback {
|
||||
*/
|
||||
public clearRoleDataDebug(roleId?: number): void {
|
||||
if (!this.chatController) {
|
||||
console.warn("ChatController not initialized");
|
||||
logger.warn("ChatController not initialized");
|
||||
return;
|
||||
}
|
||||
|
||||
const targetRoleId = roleId || this.id;
|
||||
if (!targetRoleId) {
|
||||
console.warn("No role ID specified");
|
||||
logger.warn("No role ID specified");
|
||||
return;
|
||||
}
|
||||
|
||||
this.chatController.clearRoleData(targetRoleId);
|
||||
console.log(`Cleared data for role ${targetRoleId}`);
|
||||
logger.log(`Cleared data for role ${targetRoleId}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import { GirlData } from "../../data/GirlData";
|
||||
import { GirlService } from "db://assets/Scripts/chat18x/network/services/GirlService";
|
||||
import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { SceneBgVideoLayer } from "../../../Sub/UI/SceneBgVideoLayer";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -106,18 +107,18 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
|
||||
setVideEnable(enable: boolean) {
|
||||
if (!this.videoLayer) {
|
||||
console.error("GirlDetailPanel: SceneBgVideoLayer 不可用");
|
||||
logger.error("GirlDetailPanel: SceneBgVideoLayer 不可用");
|
||||
return;
|
||||
}
|
||||
|
||||
if (enable) {
|
||||
// 恢复播放
|
||||
this.videoLayer.resume();
|
||||
console.log("GirlDetailPanel: 开启视频播放");
|
||||
logger.log("GirlDetailPanel: 开启视频播放");
|
||||
} else {
|
||||
// 暂停播放
|
||||
this.videoLayer.pause();
|
||||
console.log("GirlDetailPanel: 暂停视频播放");
|
||||
logger.log("GirlDetailPanel: 暂停视频播放");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,7 +133,7 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
}
|
||||
|
||||
// 如果没有 videoArea,使用默认尺寸
|
||||
console.warn("GirlDetailPanel: videoArea 未设置,使用默认尺寸");
|
||||
logger.warn("GirlDetailPanel: videoArea 未设置,使用默认尺寸");
|
||||
return new Size(600, 800);
|
||||
}
|
||||
|
||||
@@ -159,9 +160,9 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
|
||||
// 检查 SceneBgVideoLayer 是否可用
|
||||
if (!this.videoLayer) {
|
||||
console.error("GirlDetailPanel: SceneBgVideoLayer.handle 未初始化");
|
||||
logger.error("GirlDetailPanel: SceneBgVideoLayer.handle 未初始化");
|
||||
} else {
|
||||
console.log("GirlDetailPanel: 成功获取 SceneBgVideoLayer 实例");
|
||||
logger.log("GirlDetailPanel: 成功获取 SceneBgVideoLayer 实例");
|
||||
// 初始化视频显示位置
|
||||
//this.initVideoPosition();
|
||||
}
|
||||
@@ -191,7 +192,7 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
this.tags.string = desc;
|
||||
const star = girlData.getStar(this.category.toString(), this.id);
|
||||
const stars = this.starParent.getComponentsInChildren(Sprite);
|
||||
console.log("好感度:" + star);
|
||||
logger.log("好感度:" + star);
|
||||
for (let i = 0; i < stars.length; i++) {
|
||||
const element = stars[i];
|
||||
if (star > i) {
|
||||
@@ -215,7 +216,7 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
|
||||
// 使用 SceneBgVideoLayer 加载并播放视频
|
||||
if (this.videoLayer && firstPath) {
|
||||
console.log(`GirlDetailPanel: 加载视频 ${firstPath}`);
|
||||
logger.log(`GirlDetailPanel: 加载视频 ${firstPath}`);
|
||||
|
||||
// 获取 videoArea 的尺寸和位置
|
||||
const targetSize = this.videoArea
|
||||
@@ -234,7 +235,7 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
this.videoLayer.getVideoPlayer().node.parent;
|
||||
if (videoPlayerParent) {
|
||||
const parentWorldPos = videoPlayerParent.getWorldPosition();
|
||||
console.log(
|
||||
logger.log(
|
||||
`GirlDetailPanel: VideoPlayer 父节点世界位置: (${parentWorldPos.x}, ${parentWorldPos.y}, ${parentWorldPos.z})`
|
||||
);
|
||||
}
|
||||
@@ -339,7 +340,7 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
// 停止视频播放,释放资源
|
||||
if (this.videoLayer) {
|
||||
//this.videoLayer.stop();
|
||||
//console.log("GirlDetailPanel: 停止视频播放");
|
||||
//logger.log("GirlDetailPanel: 停止视频播放");
|
||||
}
|
||||
|
||||
super.onClose();
|
||||
@@ -352,7 +353,7 @@ export class GirlDetailPanel extends li_BaseView {
|
||||
// 确保视频资源被释放
|
||||
if (this.videoLayer) {
|
||||
//this.videoLayer.stop();
|
||||
//console.log("GirlDetailPanel: 销毁时停止视频播放");
|
||||
//logger.log("GirlDetailPanel: 销毁时停止视频播放");
|
||||
}
|
||||
|
||||
// 回收所有使用中的节点到对象池
|
||||
|
||||
@@ -26,6 +26,8 @@ import { ViewManager } from "../../../Main/Manager/ViewManager";
|
||||
import { TipsPanel } from "./TipsPanel";
|
||||
import ResManager from "../../../Main/Manager/ResManager";
|
||||
import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("GirlListPopupPanel")
|
||||
@@ -79,7 +81,7 @@ export class GirlListPopupPanel extends li_BaseView {
|
||||
|
||||
const path = girlData.getGrilAvatar(this.category.toString(), this.girlId);
|
||||
this.refreshCoinNum();
|
||||
//console.log(path);
|
||||
//logger.log(path);
|
||||
// 加载远程资源
|
||||
const envData = DataManager.I.getDataById<EnvData>(DataId.Env);
|
||||
let newPath = envData.cdn + "/" + "Girls/" + path + ".png";
|
||||
@@ -101,13 +103,13 @@ export class GirlListPopupPanel extends li_BaseView {
|
||||
}
|
||||
async buyCharacter() {
|
||||
// 购买id为girlId的女生
|
||||
console.log(this.girlId);
|
||||
logger.log(this.girlId);
|
||||
// 请求解锁
|
||||
const reqData = {
|
||||
id: this.girlId,
|
||||
};
|
||||
let res = await GirlService.I.reqUnlockGirl(reqData);
|
||||
console.log("请求解锁技师响应数据:", res);
|
||||
logger.log("请求解锁技师响应数据:", res);
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
const resData = res.data;
|
||||
// 保存数据
|
||||
|
||||
@@ -6,6 +6,7 @@ import { NavigationManager, PanelType } from "../../manager/NavigationManager";
|
||||
import { NavigationBtn } from "../items/NavigationBtn";
|
||||
import { ChatHistoryManager } from "../../manager/ChatHistoryManager";
|
||||
import { PastGirlListPanel } from "./PastGirlListPanel";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -101,7 +102,7 @@ export class NavigationPanel extends li_BaseView {
|
||||
private refreshButtonVisuals() {
|
||||
// TODO: 实现按钮状态更新的视觉效果
|
||||
// 根据 currentActivePanel 更新按钮的选中状态
|
||||
console.log(
|
||||
logger.log(
|
||||
"[NavigationPanel] Button states updated for:",
|
||||
this.currentActivePanel
|
||||
);
|
||||
|
||||
@@ -6,6 +6,7 @@ import { PastGirlListItem } from "../../uiitems/PastGirlListItem";
|
||||
import { DataManager, DataId } from "../../data/DataManager";
|
||||
import { GirlData } from "../../data/GirlData";
|
||||
import { ChatHistoryManager } from "../../manager/ChatHistoryManager";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -71,7 +72,7 @@ export class PastGirlListPanel extends li_BaseView {
|
||||
private getUnlockedGirls(): number[] {
|
||||
const GirlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
const allids = GirlData.getAllReleaseGirlIds();
|
||||
console.log(allids);
|
||||
logger.log(allids);
|
||||
return allids;
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@ import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { ConfigId, ConfigManager } from "../../manager/ConfigManager";
|
||||
import { PurchaseConfig } from "../../config/PurchaseConfig";
|
||||
import LanguageUtils from "../../../Main/Common/LanguageUtils";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("PayToTalkSubpanel")
|
||||
@@ -76,7 +78,7 @@ export class PayToTalkSubpanel extends Component {
|
||||
//ChatController.Instance.resetChatCount();
|
||||
const shopData = DataManager.I.getDataById<ShopData>(DataId.Shop);
|
||||
const chatIds = shopData.getChatIds();
|
||||
console.log("聊天商品Id: ", chatIds);
|
||||
logger.log("聊天商品Id: ", chatIds);
|
||||
if (chatIds.length > 0) {
|
||||
this.reqBuyGood(chatIds[0], this.girlId);
|
||||
}
|
||||
@@ -84,7 +86,7 @@ export class PayToTalkSubpanel extends Component {
|
||||
|
||||
onClick_BuyVip() {
|
||||
//购买VIP
|
||||
console.log("购买vip");
|
||||
logger.log("购买vip");
|
||||
const shopData = DataManager.I.getDataById<ShopData>(DataId.Shop);
|
||||
const memberId = shopData.get7DayMemberId();
|
||||
this.reqBuyGood(memberId, this.girlId);
|
||||
@@ -98,7 +100,7 @@ export class PayToTalkSubpanel extends Component {
|
||||
girlId: girlId,
|
||||
};
|
||||
let res = await ShopService.I.reqBuyGood(reqData);
|
||||
console.log("请求使用余额购买商品的响应数据:", res);
|
||||
logger.log("请求使用余额购买商品的响应数据:", res);
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
const resData = res.data;
|
||||
// 保存数据
|
||||
|
||||
@@ -26,6 +26,7 @@ import {
|
||||
} from "../../manager/NavigationManager";
|
||||
import { PlayerDataService } from "../../network/services/PlayerDataService";
|
||||
import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -91,7 +92,7 @@ export class PersonalPanel extends li_BaseView {
|
||||
private async refresh() {
|
||||
const reqData = {};
|
||||
let res = await PlayerDataService.I.reqMyInfo(reqData);
|
||||
console.log("个人信息响应数据:", res);
|
||||
logger.log("个人信息响应数据:", res);
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
const resData = res.data;
|
||||
const walletData = DataManager.I.getDataById<WalletData>(DataId.Wallet);
|
||||
|
||||
@@ -22,6 +22,8 @@ import LanguageUtils from "../../../Main/Common/LanguageUtils";
|
||||
import { ImagePopup } from "../components/ImagePopup";
|
||||
import { TipsPanel } from "./TipsPanel";
|
||||
import ResManager from "../../../Main/Manager/ResManager";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("PopupGirlDetailPanel")
|
||||
@@ -115,7 +117,7 @@ export class PopupGirlDetailPanel extends li_BaseView {
|
||||
}
|
||||
async buyCharacter() {
|
||||
// 购买id为girlId的女生
|
||||
console.log(this.girlId + "---" + this.resId);
|
||||
logger.log(this.girlId + "---" + this.resId);
|
||||
|
||||
// 请求解锁
|
||||
const reqData = {
|
||||
@@ -124,7 +126,7 @@ export class PopupGirlDetailPanel extends li_BaseView {
|
||||
type: this.type,
|
||||
};
|
||||
let res = await GirlService.I.reqUnlockGirlRes(reqData);
|
||||
console.log("请求解锁资源响应数据:", res);
|
||||
logger.log("请求解锁资源响应数据:", res);
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
const resData = res.data;
|
||||
// 保存数据
|
||||
|
||||
@@ -15,6 +15,7 @@ import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import { NavigationManager, PanelType } from "../../manager/NavigationManager";
|
||||
import { Web3PopPanel } from "./Web3PopPanel";
|
||||
import { TipsPanel } from "./TipsPanel";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -255,7 +256,7 @@ export class PurchasePanel extends li_BaseView {
|
||||
girlId: 0,
|
||||
};
|
||||
let res = await ShopService.I.reqBuyGood(reqData);
|
||||
console.log("请求使用余额购买商品的响应数据:", res);
|
||||
logger.log("请求使用余额购买商品的响应数据:", res);
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
const resData = res.data;
|
||||
// 保存数据
|
||||
@@ -276,16 +277,16 @@ export class PurchasePanel extends li_BaseView {
|
||||
network,
|
||||
};
|
||||
let res = await PaymentService.I.startPayment(reqData);
|
||||
console.log("支付完成的响应数据:", res);
|
||||
logger.log("支付完成的响应数据:", res);
|
||||
if (res) {
|
||||
let status = res.status;
|
||||
if (status === -1) {
|
||||
console.log("支付失败!!!,错误码:", res.retCode);
|
||||
logger.log("支付失败!!!,错误码:", res.retCode);
|
||||
|
||||
const key = "error_code_" + res.retCode;
|
||||
TipsPanel.show(LanguageUtils.getText(key));
|
||||
} else if (status === 0) {
|
||||
console.log("支付成功!!!");
|
||||
logger.log("支付成功!!!");
|
||||
const walletData = DataManager.I.getDataById<WalletData>(DataId.Wallet);
|
||||
walletData.balance = Number(res.balance);
|
||||
walletData.vipExpire = Number(res.vipExpire);
|
||||
|
||||
@@ -22,6 +22,7 @@ import { ConfigManager } from "../../manager/ConfigManager";
|
||||
import LanguageUtils from "../../../Main/Common/LanguageUtils";
|
||||
import { Dialog } from "../../data/DialogData";
|
||||
import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -132,7 +133,7 @@ export class RecordPanel extends li_BaseView {
|
||||
this.allMessages = ChatHistoryManager.Instance.loadHistory(this.id);
|
||||
|
||||
if (this.allMessages.length === 0) {
|
||||
console.log(`No chat history found for role ${this.id}`);
|
||||
logger.log(`No chat history found for role ${this.id}`);
|
||||
this.updateLoadMoreBtn();
|
||||
return;
|
||||
}
|
||||
@@ -170,7 +171,7 @@ export class RecordPanel extends li_BaseView {
|
||||
// 添加到已显示的消息列表
|
||||
this.displayedMessages.push(...newDialogs);
|
||||
|
||||
console.log(
|
||||
logger.log(
|
||||
`Loaded page ${this.currentPage + 1}, showing ${
|
||||
this.displayedMessages.length
|
||||
}/${this.allMessages.length} messages`
|
||||
@@ -234,7 +235,7 @@ export class RecordPanel extends li_BaseView {
|
||||
*/
|
||||
public clearHistory() {
|
||||
ChatHistoryManager.Instance.clearHistory(this.id);
|
||||
console.log(`Cleared chat history for role ${this.id}`);
|
||||
logger.log(`Cleared chat history for role ${this.id}`);
|
||||
|
||||
// 重置数据
|
||||
this.allMessages = [];
|
||||
|
||||
@@ -18,6 +18,8 @@ import { GButton } from "db://assets/Scripts/Main/Common/GButton";
|
||||
import { SceneBgVideoLayer } from "../../../Sub/UI/SceneBgVideoLayer";
|
||||
import { DataManager, DataId } from "../../data/DataManager";
|
||||
import { EnvData } from "../../data/EnvData";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
interface ShowPanelData {
|
||||
@@ -139,7 +141,7 @@ export class ShowPanel extends li_BaseView {
|
||||
const scale = Math.max(scaleX, scaleY); // 填满整个区域
|
||||
|
||||
this.videoPlayer.node.setScale(new Vec3(scale, scale, 1));
|
||||
console.log(`ShowPanel: 调整视频缩放到 ${scale}`);
|
||||
logger.log(`ShowPanel: 调整视频缩放到 ${scale}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ import proto from "db://assets/Scripts/proto/proto.pb.js";
|
||||
import GameRootUI from "../../../Main/Common/GameRootUI";
|
||||
import { MainController } from "../../core/MainController";
|
||||
import { GirlListPanel } from "./GirlListPanel";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -79,7 +80,7 @@ export class ThemePanel extends li_BaseView {
|
||||
async Show(forceRefresh: boolean = false) {
|
||||
// 防止重复加载
|
||||
if (this.isLoading) {
|
||||
console.log("[ThemePanel] 已在加载中,等待当前加载完成");
|
||||
logger.log("[ThemePanel] 已在加载中,等待当前加载完成");
|
||||
if (this.loadingPromise) {
|
||||
await this.loadingPromise;
|
||||
}
|
||||
@@ -123,12 +124,12 @@ export class ThemePanel extends li_BaseView {
|
||||
|
||||
// 如果需要强制刷新,先刷新数据
|
||||
if (forceRefresh) {
|
||||
console.log("[ThemePanel] 开始强制刷新数据");
|
||||
logger.log("[ThemePanel] 开始强制刷新数据");
|
||||
await Promise.all([
|
||||
MainController.I.refreshThemeData(),
|
||||
MainController.I.refreshDailyRecommend(),
|
||||
]);
|
||||
console.log("[ThemePanel] 数据刷新完成");
|
||||
logger.log("[ThemePanel] 数据刷新完成");
|
||||
|
||||
// 再次检查是否已被取消
|
||||
if (signal.aborted) {
|
||||
@@ -138,7 +139,7 @@ export class ThemePanel extends li_BaseView {
|
||||
|
||||
// 优先使用MainController中预加载的数据
|
||||
const preloadStatus = MainController.I.getPreloadStatus();
|
||||
console.log("[ThemePanel] 预加载状态:", preloadStatus);
|
||||
logger.log("[ThemePanel] 预加载状态:", preloadStatus);
|
||||
|
||||
// 处理主题数据
|
||||
await this.handleThemeData(preloadStatus.themeData);
|
||||
@@ -161,13 +162,13 @@ export class ThemePanel extends li_BaseView {
|
||||
// 处理商品列表数据
|
||||
await this.handleShopListData(preloadStatus.shopList);
|
||||
} catch (error) {
|
||||
console.error("[ThemePanel] Show操作出错:", error);
|
||||
logger.error("[ThemePanel] Show操作出错:", error);
|
||||
this._nodeTab.loadingRec.active = false;
|
||||
|
||||
// 如果不是取消操作导致的错误,可以考虑显示错误提示
|
||||
if (error.message !== "Operation was aborted") {
|
||||
// 这里可以添加错误提示逻辑
|
||||
console.error("[ThemePanel] 数据加载失败,请稍后重试");
|
||||
logger.error("[ThemePanel] 数据加载失败,请稍后重试");
|
||||
}
|
||||
} finally {
|
||||
this.abortController = null;
|
||||
@@ -179,7 +180,7 @@ export class ThemePanel extends li_BaseView {
|
||||
*/
|
||||
private async handleThemeData(isPreloaded: boolean): Promise<void> {
|
||||
if (isPreloaded) {
|
||||
console.log("[ThemePanel] 使用预加载的主题数据");
|
||||
logger.log("[ThemePanel] 使用预加载的主题数据");
|
||||
// 直接使用预加载的数据渲染界面
|
||||
const themeData = DataManager.I.getDataById<ThemeData>(DataId.Theme);
|
||||
if (themeData && themeData.themes) {
|
||||
@@ -189,7 +190,7 @@ export class ThemePanel extends li_BaseView {
|
||||
}
|
||||
|
||||
// 如果没有预加载数据,则请求数据
|
||||
console.log("[ThemePanel] 请求主题数据");
|
||||
logger.log("[ThemePanel] 请求主题数据");
|
||||
const reqData = {};
|
||||
let res = await ThemeService.I.reqHallTheme(reqData);
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
@@ -220,7 +221,7 @@ export class ThemePanel extends li_BaseView {
|
||||
*/
|
||||
private async handleDailyRecommendData(isPreloaded: boolean): Promise<void> {
|
||||
if (isPreloaded) {
|
||||
console.log("[ThemePanel] 使用预加载的每日推荐数据");
|
||||
logger.log("[ThemePanel] 使用预加载的每日推荐数据");
|
||||
// 直接使用预加载的数据渲染界面
|
||||
const girlData = DataManager.I.getDataById<GirlData>(DataId.Girl);
|
||||
if (girlData) {
|
||||
@@ -230,7 +231,7 @@ export class ThemePanel extends li_BaseView {
|
||||
}
|
||||
|
||||
// 如果没有预加载数据,则请求数据
|
||||
console.log("[ThemePanel] 请求每日推荐数据");
|
||||
logger.log("[ThemePanel] 请求每日推荐数据");
|
||||
const reqData = {};
|
||||
let res = await GirlService.I.reqDailyRecommend(reqData);
|
||||
if (res && res.code === proto.cs.EnmRetCode.SUCCESS) {
|
||||
@@ -266,13 +267,13 @@ export class ThemePanel extends li_BaseView {
|
||||
*/
|
||||
private async handleShopListData(isPreloaded: boolean): Promise<void> {
|
||||
if (isPreloaded) {
|
||||
console.log("[ThemePanel] 商品列表数据已预加载");
|
||||
logger.log("[ThemePanel] 商品列表数据已预加载");
|
||||
// 数据已经在DataManager中,不需要额外处理
|
||||
return;
|
||||
}
|
||||
|
||||
// 如果没有预加载数据,则请求数据
|
||||
console.log("[ThemePanel] 请求商品列表数据");
|
||||
logger.log("[ThemePanel] 请求商品列表数据");
|
||||
await this.reqShopList();
|
||||
}
|
||||
|
||||
@@ -336,7 +337,7 @@ export class ThemePanel extends li_BaseView {
|
||||
}
|
||||
|
||||
openMsgBox() {
|
||||
console.log("打开信箱");
|
||||
logger.log("打开信箱");
|
||||
}
|
||||
|
||||
// 刷新余额
|
||||
@@ -380,7 +381,7 @@ export class ThemePanel extends li_BaseView {
|
||||
*/
|
||||
private clearCache(): void {
|
||||
if (this.cache && this.cache.length > 0) {
|
||||
console.log(`[ThemePanel] 清理 ${this.cache.length} 个缓存节点`);
|
||||
logger.log(`[ThemePanel] 清理 ${this.cache.length} 个缓存节点`);
|
||||
for (let i = this.cache.length - 1; i >= 0; i--) {
|
||||
if (this.cache[i] && this.cache[i].node && this.cache[i].node.isValid) {
|
||||
this.cache[i].node.destroy();
|
||||
@@ -394,7 +395,7 @@ export class ThemePanel extends li_BaseView {
|
||||
* 页面被隐藏时调用
|
||||
*/
|
||||
public onHide(): void {
|
||||
console.log("[ThemePanel] onHide called");
|
||||
logger.log("[ThemePanel] onHide called");
|
||||
this.cancelCurrentOperation();
|
||||
}
|
||||
|
||||
@@ -403,14 +404,14 @@ export class ThemePanel extends li_BaseView {
|
||||
*/
|
||||
private cancelCurrentOperation(): void {
|
||||
if (this.abortController) {
|
||||
console.log("[ThemePanel] 取消当前操作");
|
||||
logger.log("[ThemePanel] 取消当前操作");
|
||||
this.abortController.abort();
|
||||
this.abortController = null;
|
||||
}
|
||||
}
|
||||
|
||||
onDestroy(): void {
|
||||
console.log("[ThemePanel] onDestroy called");
|
||||
logger.log("[ThemePanel] onDestroy called");
|
||||
|
||||
// 取消当前操作
|
||||
this.cancelCurrentOperation();
|
||||
|
||||
@@ -11,6 +11,7 @@ import { QRCodeGenerator } from "db://assets/utils/qrcodeGenerator";
|
||||
import { TipsPanel } from "./TipsPanel";
|
||||
import { SDKManager } from "../../../Main/Channel/SDKManager";
|
||||
import LanguageUtils from "../../../Main/Common/LanguageUtils";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -326,7 +327,7 @@ export class Web3PopPanel extends li_BaseView {
|
||||
}
|
||||
|
||||
private onCountdownExpired(): void {
|
||||
console.log("Web3支付倒计时已过期");
|
||||
logger.log("Web3支付倒计时已过期");
|
||||
this.disableButtons();
|
||||
TipsPanel.show("支付时间已过期,请重新发起支付");
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import {
|
||||
isValid,
|
||||
Node,
|
||||
} from "cc";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass } = _decorator;
|
||||
|
||||
@@ -28,12 +29,12 @@ export class ParentResize extends Component {
|
||||
this.uiTransform = this.getComponent(UITransform);
|
||||
|
||||
if (!this.sprite) {
|
||||
console.warn("ParentResize: 未找到 Sprite 组件");
|
||||
logger.warn("ParentResize: 未找到 Sprite 组件");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.uiTransform) {
|
||||
console.warn("ParentResize: 未找到 UITransform 组件");
|
||||
logger.warn("ParentResize: 未找到 UITransform 组件");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -41,11 +42,11 @@ export class ParentResize extends Component {
|
||||
if (this.node.parent) {
|
||||
this.parentTransform = this.node.parent.getComponent(UITransform);
|
||||
if (!this.parentTransform) {
|
||||
console.warn("ParentResize: 父物体未找到 UITransform 组件");
|
||||
logger.warn("ParentResize: 父物体未找到 UITransform 组件");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
console.warn("ParentResize: 未找到父物体");
|
||||
logger.warn("ParentResize: 未找到父物体");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -119,7 +120,7 @@ export class ParentResize extends Component {
|
||||
this.lastParentSize.set(0, 0); // 重置上次记录的尺寸
|
||||
this.adjustToParent();
|
||||
} else {
|
||||
console.warn("ParentResize: 新父物体未找到 UITransform 组件");
|
||||
logger.warn("ParentResize: 新父物体未找到 UITransform 组件");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import {
|
||||
Size,
|
||||
isValid,
|
||||
} from "cc";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass } = _decorator;
|
||||
|
||||
@@ -27,12 +28,12 @@ export class SpriteResize extends Component {
|
||||
this.uiTransform = this.getComponent(UITransform);
|
||||
|
||||
if (!this.sprite) {
|
||||
console.warn("SpriteResize: 未找到 Sprite 组件");
|
||||
logger.warn("SpriteResize: 未找到 Sprite 组件");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.uiTransform) {
|
||||
console.warn("SpriteResize: 未找到 UITransform 组件");
|
||||
logger.warn("SpriteResize: 未找到 UITransform 组件");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import { InnerMsgCode } from "../../Main/Config/InnerMsgCode";
|
||||
import { DataManager, DataId } from "../data/DataManager";
|
||||
import { GirlData } from "../data/GirlData";
|
||||
import { EnvData } from "../data/EnvData";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -148,7 +149,7 @@ export class GirlListItem extends Component {
|
||||
});
|
||||
|
||||
const star = girlData.getStar(this.category.toString(), this.id);
|
||||
console.log("好感度:" + star);
|
||||
logger.log("好感度:" + star);
|
||||
for (let i = 0; i < this.stars.length; i++) {
|
||||
const element = this.stars[i];
|
||||
if (star > i) {
|
||||
|
||||
@@ -11,6 +11,8 @@ import { InnerMsgCode } from "../../Main/Config/InnerMsgCode";
|
||||
import { DataManager, DataId } from "../data/DataManager";
|
||||
import { ThemeData } from "../data/ThemeData";
|
||||
import { ViewManager } from "../../Main/Manager/ViewManager";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("ThemeItem")
|
||||
@@ -91,7 +93,7 @@ export class ThemeItem extends Component {
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(
|
||||
logger.log(
|
||||
"[ThemeItem] Opening GirlListPanel for category:",
|
||||
this.category
|
||||
);
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
import LanguageUtils from "../../Main/Common/LanguageUtils";
|
||||
import { TipsPanel } from "../ui/panels/TipsPanel";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
export enum ErrorType {
|
||||
/** API调用错误 */
|
||||
@@ -158,54 +159,6 @@ export class ErrorHandler {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录错误到内部日志
|
||||
*/
|
||||
private logError(errorInfo: ErrorInfo): void {
|
||||
this.errorLog.push(errorInfo);
|
||||
|
||||
// 限制日志大小
|
||||
if (this.errorLog.length > this.MAX_LOG_SIZE) {
|
||||
this.errorLog.shift();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 输出错误到控制台
|
||||
*/
|
||||
private logToConsole(errorInfo: ErrorInfo): void {
|
||||
const logMessage = `[${errorInfo.type}] ${errorInfo.message}`;
|
||||
|
||||
switch (errorInfo.type) {
|
||||
case ErrorType.API_ERROR:
|
||||
case ErrorType.NETWORK_ERROR:
|
||||
console.error(logMessage, errorInfo.details);
|
||||
break;
|
||||
case ErrorType.VALIDATION_ERROR:
|
||||
console.warn(logMessage, errorInfo.details);
|
||||
break;
|
||||
default:
|
||||
console.log(logMessage, errorInfo.details);
|
||||
}
|
||||
|
||||
// 如果有堆栈信息,也输出
|
||||
if (errorInfo.stack) {
|
||||
console.error("Stack trace:", errorInfo.stack);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 向用户显示友好的错误信息
|
||||
*/
|
||||
private showUserFriendlyError(errorInfo: ErrorInfo): void {
|
||||
let userMessage: string;
|
||||
|
||||
TipsPanel.show(LanguageUtils.getText("chat_error_code_2005"));
|
||||
|
||||
// TODO: 这里应该显示UI提示,比如Toast或对话框
|
||||
console.log("用户提示:", userMessage);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取错误日志
|
||||
*/
|
||||
@@ -229,14 +182,65 @@ export class ErrorHandler {
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查是否有未处理的关键错误
|
||||
* 记录错误到内部日志
|
||||
*/
|
||||
public hasCriticalErrors(): boolean {
|
||||
const criticalTypes = [ErrorType.API_ERROR, ErrorType.CONFIG_ERROR];
|
||||
return this.errorLog.some(
|
||||
(error) =>
|
||||
criticalTypes.includes(error.type) &&
|
||||
Date.now() - error.timestamp < 60000 // 1分钟内的错误
|
||||
);
|
||||
private logError(errorInfo: ErrorInfo): void {
|
||||
this.errorLog.push(errorInfo);
|
||||
|
||||
// 限制日志大小
|
||||
if (this.errorLog.length > this.MAX_LOG_SIZE) {
|
||||
this.errorLog.shift();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 输出错误到控制台
|
||||
*/
|
||||
private logToConsole(errorInfo: ErrorInfo): void {
|
||||
const logMessage = `[${errorInfo.type}] ${errorInfo.message}`;
|
||||
|
||||
switch (errorInfo.type) {
|
||||
case ErrorType.API_ERROR:
|
||||
case ErrorType.NETWORK_ERROR:
|
||||
logger.error(logMessage, errorInfo.details);
|
||||
break;
|
||||
case ErrorType.VALIDATION_ERROR:
|
||||
logger.warn(logMessage, errorInfo.details);
|
||||
break;
|
||||
default:
|
||||
logger.log(logMessage, errorInfo.details);
|
||||
}
|
||||
|
||||
// 如果有堆栈信息,也输出
|
||||
if (errorInfo.stack) {
|
||||
logger.error("Stack trace:", errorInfo.stack);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 向用户显示友好的错误信息
|
||||
*/
|
||||
private showUserFriendlyError(errorInfo: ErrorInfo): void {
|
||||
let userMessage: string;
|
||||
|
||||
switch (errorInfo.type) {
|
||||
case ErrorType.API_ERROR:
|
||||
userMessage = "AI服务暂时不可用,请稍后再试";
|
||||
break;
|
||||
case ErrorType.NETWORK_ERROR:
|
||||
userMessage = "网络连接失败,请检查网络设置";
|
||||
break;
|
||||
case ErrorType.CONFIG_ERROR:
|
||||
userMessage = "系统配置错误,请联系管理员";
|
||||
break;
|
||||
case ErrorType.STORAGE_ERROR:
|
||||
userMessage = "数据保存失败,请重试";
|
||||
break;
|
||||
default:
|
||||
userMessage = "发生了未知错误,请重试或联系客服";
|
||||
}
|
||||
|
||||
// TODO: 这里应该显示UI提示,比如Toast或对话框
|
||||
logger.log("用户提示:", userMessage);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import {
|
||||
view,
|
||||
UIOpacity,
|
||||
} from "cc";
|
||||
import { logger } from "db://assets/Scripts/Main/Common/Logger";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@@ -33,7 +34,7 @@ export class UITransitionHelper {
|
||||
callback?: Function
|
||||
): void {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("UITransitionHelper: Invalid node for slideInFromRight");
|
||||
logger.warn("UITransitionHelper: Invalid node for slideInFromRight");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -73,7 +74,7 @@ export class UITransitionHelper {
|
||||
callback?: Function
|
||||
): void {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("UITransitionHelper: Invalid node for slideOutToLeft");
|
||||
logger.warn("UITransitionHelper: Invalid node for slideOutToLeft");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -115,7 +116,7 @@ export class UITransitionHelper {
|
||||
callback?: Function
|
||||
): void {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("UITransitionHelper: Invalid node for slideInFromLeft");
|
||||
logger.warn("UITransitionHelper: Invalid node for slideInFromLeft");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -155,7 +156,7 @@ export class UITransitionHelper {
|
||||
callback?: Function
|
||||
): void {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("UITransitionHelper: Invalid node for slideOutToRight");
|
||||
logger.warn("UITransitionHelper: Invalid node for slideOutToRight");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -197,7 +198,7 @@ export class UITransitionHelper {
|
||||
callback?: Function
|
||||
): void {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("UITransitionHelper: Invalid node for slideInFromTop");
|
||||
logger.warn("UITransitionHelper: Invalid node for slideInFromTop");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -237,7 +238,7 @@ export class UITransitionHelper {
|
||||
callback?: Function
|
||||
): void {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("UITransitionHelper: Invalid node for slideOutToTop");
|
||||
logger.warn("UITransitionHelper: Invalid node for slideOutToTop");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -279,7 +280,7 @@ export class UITransitionHelper {
|
||||
callback?: Function
|
||||
): void {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("UITransitionHelper: Invalid node for slideInFromBottom");
|
||||
logger.warn("UITransitionHelper: Invalid node for slideInFromBottom");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -319,7 +320,7 @@ export class UITransitionHelper {
|
||||
callback?: Function
|
||||
): void {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("UITransitionHelper: Invalid node for slideOutToBottom");
|
||||
logger.warn("UITransitionHelper: Invalid node for slideOutToBottom");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -361,7 +362,7 @@ export class UITransitionHelper {
|
||||
callback?: Function
|
||||
): void {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("UITransitionHelper: Invalid node for fadeIn");
|
||||
logger.warn("UITransitionHelper: Invalid node for fadeIn");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -402,7 +403,7 @@ export class UITransitionHelper {
|
||||
callback?: Function
|
||||
): void {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("UITransitionHelper: Invalid node for fadeOut");
|
||||
logger.warn("UITransitionHelper: Invalid node for fadeOut");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -440,7 +441,7 @@ export class UITransitionHelper {
|
||||
callback?: Function
|
||||
): void {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("UITransitionHelper: Invalid node for scaleIn");
|
||||
logger.warn("UITransitionHelper: Invalid node for scaleIn");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -471,7 +472,7 @@ export class UITransitionHelper {
|
||||
callback?: Function
|
||||
): void {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("UITransitionHelper: Invalid node for scaleOut");
|
||||
logger.warn("UITransitionHelper: Invalid node for scaleOut");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -493,7 +494,7 @@ export class UITransitionHelper {
|
||||
*/
|
||||
public static stopAllTweens(node: Node): void {
|
||||
if (!node || !node.isValid) {
|
||||
console.warn("UITransitionHelper: Invalid node for stopAllTweens");
|
||||
logger.warn("UITransitionHelper: Invalid node for stopAllTweens");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -37,8 +37,6 @@ export function initPolyfills(): void {
|
||||
|
||||
return obj;
|
||||
};
|
||||
|
||||
//console.log('[Polyfill] structuredClone polyfill loaded');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user