协议修改:增加热度值和收藏时间

This commit is contained in:
chen wei bo
2025-10-08 13:39:14 +08:00
parent 7489206537
commit 8b4f2d7262
8 changed files with 2827 additions and 59 deletions
@@ -37,6 +37,7 @@ export enum DataId {
GirlUnlock = "girlUnlock", // 技师的解锁数据
GirlChat = "girlChat", // 技师的聊天数据
GirlFavorability = "girlFavorability", // 技师的好感度数据
GirlOther = "girlOther", // 技师的其他数据
Env = "env", // 环境数据
Global = "global", // 全局数据
AiCharacter = "aiCharacter", // Ai角色配置
+135 -58
View File
@@ -7,6 +7,7 @@ import { GirlDetailData } from "./GirlDetailData";
import { GirlUnlockData } from "./GirlUnlockData";
import { GirlChatData } from "./GirlChatData";
import { GirlFavorabilityData } from "./GirlFavorabilityData";
import { GirlOtherData } from "./GirlOtherData";
import { DataId } from "./DataManager";
import proto from "db://assets/Scripts/proto/proto.pb.js";
import { PriceType } from "../../schema/schema";
@@ -24,6 +25,8 @@ interface CategoryBucket {
chats: Map<number, GirlChatData>;
// 技师的好感度数据
favorability: Map<number, GirlFavorabilityData>;
// 技师的其他数据
other: Map<number, GirlOtherData>;
// 技师的id
girlIds: number[];
}
@@ -67,6 +70,7 @@ export class GirlData extends BaseData {
unlocks: new Map<number, GirlUnlockData>(),
chats: new Map<number, GirlChatData>(),
favorability: new Map<number, GirlFavorabilityData>(),
other: new Map<number, GirlOtherData>(),
girlIds: [],
};
cats.set(categoryId, bucket);
@@ -89,6 +93,7 @@ export class GirlData extends BaseData {
this.setGirlBrief(categoryId, data.girls);
this.setGirlUnlock(categoryId, data.girls);
this.setGirlFavorability(categoryId, data.girls);
this.setGirlOther(categoryId, data.girls);
const bucket = this.ensureBucket(categoryId);
logger.log("保存类别 ", categoryId, " 的技师列表: ", bucket);
@@ -107,6 +112,7 @@ export class GirlData extends BaseData {
this.setGirlUnlock(categoryId, details);
this.setGirlChat(categoryId, details);
this.setGirlFavorability(categoryId, details);
this.setGirlOther(categoryId, details);
const bucket = this.ensureBucket(categoryId);
logger.log("保存类别 ", categoryId, " 的详细数据: ", bucket);
@@ -129,6 +135,54 @@ export class GirlData extends BaseData {
logger.log("保存可聊天的技师数据: ", cats);
}
/** --------------------------------------------------------- 每日推荐 --------------------------------------------------------- */
/** 保存每日推荐:放入特殊分类 DAILY_BUCKET,并维护 id 索引 */
public setDailyRecommend(data: proto.cs.ICSDailyRecommendRes): void {
if (!data) return;
this.mergeOneBrief(DAILY_BUCKET, data.girl);
const bucket = this.ensureBucket(DAILY_BUCKET);
logger.log("保存每日推荐: ", bucket);
}
/** 判断每日推荐是否存在 */
public isDailyRecommendIn(): boolean {
const bucket = this.ensureCategories().get(DAILY_BUCKET);
if (!bucket) return false;
return bucket.girlIds.length > 0;
}
/** 获取推荐id */
public getRecommendGirlId(): number {
const bucket = this.ensureBucket(DAILY_BUCKET);
const girlIds = bucket.girlIds;
const length = girlIds.length;
if (length <= 0) return 0;
return girlIds[length - 1];
}
/** 获取每日推荐的简要数据 */
private getRecommendGrilBrief(): GirlBriefData | null {
const recId = this.getRecommendGirlId();
if (recId <= 0) return null;
const data = this.getGrilBrief(DAILY_BUCKET, recId);
return data;
}
/** 获取名字 */
public getRecommendGrilName(): string {
let oneData = this.getRecommendGrilBrief();
if (!oneData) return "";
return oneData.getGrilName();
}
/** 获取头像路径 */
public getRecommendGrilAvatar(): string {
let oneData = this.getRecommendGrilBrief();
if (!oneData) return "";
return oneData.getGrilAvatar();
}
/** --------------------------------------------------------- 技师的简要数据 --------------------------------------------------------- */
/**
@@ -1155,31 +1209,24 @@ export class GirlData extends BaseData {
/** --------------------------------------------------------- 技师的好感度数据 --------------------------------------------------------- */
// 创建一个技师好感度数据
private createOneGirlFavorability(
id: number,
star: number
): GirlFavorabilityData {
private createOneGirlFavorability(id: number, star: number, bookmarkTime: number): GirlFavorabilityData {
let oneData = new GirlFavorabilityData();
oneData.init?.(DataId.GirlFavorability);
oneData.setId(id);
oneData.setStar(star);
oneData.setBookmarkTime(bookmarkTime);
return oneData;
}
// 解析技师好感度数据,一个
private parseOneGirlFavorability(
data: proto.cs.IGirlData
): GirlFavorabilityData | null {
private parseOneGirlFavorability(data: proto.cs.IGirlData): GirlFavorabilityData | null {
if (!data) return null;
let oneData = this.createOneGirlFavorability(data.id, data.star);
let oneData = this.createOneGirlFavorability(data.id, data.star, Number(data.bookmarkTime));
return oneData;
}
/** 保存技师的好感度数据 */
private setGirlFavorability(
categoryId: string,
data: proto.cs.IGirlData[]
): void {
private setGirlFavorability(categoryId: string,data: proto.cs.IGirlData[]): void {
if (!data) return;
const bucket = this.ensureBucket(categoryId);
for (const g of data) {
@@ -1195,14 +1242,14 @@ export class GirlData extends BaseData {
let briefData = data.girl;
let categoryId = briefData.category;
let girlId = briefData.id;
let favData = this.getGrilFavorability(categoryId.toString(), girlId);
let favData = this.getGirlFavorability(categoryId.toString(), girlId);
if (favData) {
// 已存在数据,刷新
favData.setStar(data.star);
} else {
// 不存在数据,创建
const bucket = this.ensureBucket(categoryId.toString());
let oneData = this.createOneGirlFavorability(data.id, data.star);
let oneData = this.createOneGirlFavorability(data.id, data.star, 0);
if (oneData) {
bucket.favorability.set(data.id, oneData);
}
@@ -1210,10 +1257,7 @@ export class GirlData extends BaseData {
}
/** 取某分类 + girlId 的好感度数据 */
private getGrilFavorability(
categoryId: string,
girlId: number
): GirlFavorabilityData | null {
private getGirlFavorability(categoryId: string, girlId: number): GirlFavorabilityData | null {
const b = this.ensureCategories().get(categoryId);
if (!b) return null;
return b.favorability.get(girlId) ?? null;
@@ -1228,56 +1272,89 @@ export class GirlData extends BaseData {
/** 获取星级 */
public getStar(categoryId: string, girlId: number): number {
let oneData = this.getGrilFavorability(categoryId, girlId);
let oneData = this.getGirlFavorability(categoryId, girlId);
if (!oneData) return 0;
return oneData.getStar();
}
/** --------------------------------------------------------- 每日推荐 --------------------------------------------------------- */
/** 获取收藏时间,时间戳,秒 */
public getBookmarkTime(categoryId: string, girlId: number): number {
let oneData = this.getGirlFavorability(categoryId, girlId);
if (!oneData) return 0;
return oneData.getBookmarkTime();
}
/** 保存每日推荐:放入特殊分类 DAILY_BUCKET,并维护 id 索引 */
public setDailyRecommend(data: proto.cs.ICSDailyRecommendRes): void {
/** 是否已经收藏 */
public isBookmarkGirl(categoryId: string, girlId: number): boolean {
let oneData = this.getGirlFavorability(categoryId, girlId);
if (!oneData) return false;
return oneData.isBookmarkGirl();
}
/** 获取所有已经收藏技师的 id */
public getAllBookmarkGirlIds(): number[] {
const result: number[] = [];
const seen = new Set<number>(); // 用来去重
const cats = this.ensureCategories();
// 遍历
for (const [categoryId, bucket] of cats.entries()) {
for (const girlId of bucket.girlIds) {
if (this.isBookmarkGirl(categoryId, girlId) && !seen.has(girlId)) {
seen.add(girlId); // 标记已加入
result.push(girlId);
}
}
}
// 返回结果
return result;
}
/** --------------------------------------------------------- 技师的其他数据 --------------------------------------------------------- */
// 创建一个技师其他数据
private createOneGirlOther(heatValue: number): GirlOtherData {
let oneData = new GirlOtherData();
oneData.init?.(DataId.GirlOther);
oneData.setHeatValue(heatValue);
return oneData;
}
// 解析技师其他数据,一个
private parseOneGirlOther(data: proto.cs.IGirlData): GirlOtherData | null {
if (!data) return null;
let oneData = this.createOneGirlOther(Number(data.score));
return oneData;
}
/** 保存技师的其他数据 */
private setGirlOther(categoryId: string, data: proto.cs.IGirlData[]): void {
if (!data) return;
this.mergeOneBrief(DAILY_BUCKET, data.girl);
const bucket = this.ensureBucket(DAILY_BUCKET);
logger.log("保存每日推荐: ", bucket);
const bucket = this.ensureBucket(categoryId);
for (const g of data) {
const one = this.parseOneGirlOther(g);
if (!one) continue;
bucket.other.set(g.id, one);
}
}
/** 判断每日推荐是否存在 */
public isDailyRecommendIn(): boolean {
const bucket = this.ensureCategories().get(DAILY_BUCKET);
if (!bucket) return false;
return bucket.girlIds.length > 0;
/** 取某分类 + girlId 的其他数据 */
private getGirlOther(categoryId: string, girlId: number): GirlOtherData | null {
const b = this.ensureCategories().get(categoryId);
if (!b) return null;
return b.other.get(girlId) ?? null;
}
/** 获取推荐id */
public getRecommendGirlId(): number {
const bucket = this.ensureBucket(DAILY_BUCKET);
const girlIds = bucket.girlIds;
const length = girlIds.length;
if (length <= 0) return 0;
return girlIds[length - 1];
}
/** 技师的其他数据是否存在 */
public isGirlOtherIn(categoryId: string, girlId: number): boolean {
const b = this.ensureCategories().get(categoryId);
if (!b) return false;
return b.other.has(girlId);
}
/** 获取每日推荐的简要数据 */
private getRecommendGrilBrief(): GirlBriefData | null {
const recId = this.getRecommendGirlId();
if (recId <= 0) return null;
const data = this.getGrilBrief(DAILY_BUCKET, recId);
return data;
}
/** 获取名字 */
public getRecommendGrilName(): string {
let oneData = this.getRecommendGrilBrief();
if (!oneData) return "";
return oneData.getGrilName();
}
/** 获取头像路径 */
public getRecommendGrilAvatar(): string {
let oneData = this.getRecommendGrilBrief();
if (!oneData) return "";
return oneData.getGrilAvatar();
/** 获取热度值 */
public getHeatValue(categoryId: string, girlId: number): number {
let oneData = this.getGirlOther(categoryId, girlId);
if (!oneData) return 0;
return oneData.getHeatValue();
}
}
@@ -9,27 +9,33 @@ export class GirlFavorabilityData extends BaseData {
private id: number;
// 星级
private star: number;
// 收藏时间,时间戳,秒,0: 表示还没收藏
private bookmarkTime: number;
constructor() {
super();
this.id = 0;
this.star = 0;
this.bookmarkTime = 0;
}
public reset(): void {
this.id = 0;
this.star = 0;
this.bookmarkTime = 0;
}
public clear(): void {
this.id = 0;
this.star = 0;
this.bookmarkTime = 0;
}
public destroy(): void {
super.destroy();
this.id = null;
this.star = null;
this.bookmarkTime = null;
}
/** 获取 id */
@@ -51,4 +57,20 @@ export class GirlFavorabilityData extends BaseData {
public setStar(value: number): void {
this.star = value;
}
/** 获取 收藏时间,时间戳,秒 */
public getBookmarkTime(): number {
return this.bookmarkTime;
}
/** 保存 收藏时间,时间戳,秒 */
public setBookmarkTime(value: number): void {
this.bookmarkTime = value;
// logger.log("设置角色 ", this.id, " 的收藏时间:", this.bookmarkTime);
}
/** 是否已经收藏 */
public isBookmarkGirl(): boolean {
return this.bookmarkTime !== 0;
}
}
@@ -0,0 +1,38 @@
/**
* 技师的其他数据
*/
import { BaseData } from "./BaseData";
import proto from 'db://assets/Scripts/proto/proto.pb.js';
export class GirlOtherData extends BaseData {
// 热度值
private heatValue: number;
constructor() {
super();
this.heatValue = 0;
}
public reset(): void {
this.heatValue = 0;
}
public clear(): void {
this.heatValue = 0;
}
public destroy(): void {
super.destroy();
this.heatValue = null;
}
/** 获取 热度值 */
public getHeatValue(): number {
return this.heatValue;
}
/** 保存 热度值 */
public setHeatValue(value: number): void {
this.heatValue = value;
}
}
@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "f3741d24-8c36-4f2c-825e-31097c50d628",
"files": [],
"subMetas": {},
"userData": {}
}