From e89d515bde5f69a630232610c75080cbe32e88ed Mon Sep 17 00:00:00 2001 From: chen wei bo <1025839511@qq.com> Date: Tue, 9 Sep 2025 18:16:13 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/Scripts/Main/Config/InnerMsgCode.ts | 2 + assets/Scripts/chat18x/data/GirlData.ts | 7 + assets/Scripts/chat18x/data/ShopData.ts | 33 +- .../network/services/MockGirlService.ts | 53 +++- .../network/services/MockShopService.ts | 41 ++- .../chat18x/ui/panels/GirlListPopupPanel.ts | 31 +- .../Scripts/chat18x/uiitems/GirlListItem.ts | 8 +- assets/Scripts/proto/proto.pb.d.ts | 42 +++ assets/Scripts/proto/proto.pb.js | 281 +++++++++++++++++- proto_cs | 2 +- 10 files changed, 468 insertions(+), 32 deletions(-) diff --git a/assets/Scripts/Main/Config/InnerMsgCode.ts b/assets/Scripts/Main/Config/InnerMsgCode.ts index 9b22f633..8d92cf88 100644 --- a/assets/Scripts/Main/Config/InnerMsgCode.ts +++ b/assets/Scripts/Main/Config/InnerMsgCode.ts @@ -27,6 +27,8 @@ export enum InnerMsgCode { Chat_EmotionUpdated, SimplePlayVide, LanguageChange, + BalanceChange, // 余额发生变化 + VipExpireChange, // vip失效时间戳发生变化 } export enum InnerEventCode { diff --git a/assets/Scripts/chat18x/data/GirlData.ts b/assets/Scripts/chat18x/data/GirlData.ts index e417b5bc..f743e9c9 100644 --- a/assets/Scripts/chat18x/data/GirlData.ts +++ b/assets/Scripts/chat18x/data/GirlData.ts @@ -488,6 +488,13 @@ export class GirlData extends BaseData { return oneData.getIsRelease(); } + /** 保存 付费技师是否已经解锁 */ + public setIsRelease(categoryId: string, girlId: number, value: boolean): void { + let oneData = this.getGrilUnlock(categoryId, girlId); + if (!oneData) return; + oneData.setIsRelease(value); + } + /** 判断图片是否解锁 */ public isImageUnlock(categoryId: string, girlId: number, id: number): boolean { let oneData = this.getGrilUnlock(categoryId, girlId); diff --git a/assets/Scripts/chat18x/data/ShopData.ts b/assets/Scripts/chat18x/data/ShopData.ts index cd365fc2..cfe9ee3a 100644 --- a/assets/Scripts/chat18x/data/ShopData.ts +++ b/assets/Scripts/chat18x/data/ShopData.ts @@ -53,45 +53,60 @@ export class ShopData extends BaseData { /** 获取所有商品 id */ public get goodIds(): number[] { return this._goodIds; } + /** 是否是充值商品,首位数字为 1 */ + public isRechargeId(id: number): boolean { + const firstDigit = id.toString()[0]; // 取首位字符 + return firstDigit === "1"; + } + /** 获取 充值商品的id数组,首位数字为 1 */ - private getRechargeIds(): number[] { + public getRechargeIds(): number[] { let allId = this._goodIds; if (!allId) return []; // 获取所有 id let resultId = []; for (let one of allId) { - const firstDigit = one.toString()[0]; // 取首位字符 - if (firstDigit === "1") { + if (this.isRechargeId(one)) { resultId.push(one); } } return resultId; } + /** 是否是会员商品,首位数字为 2 */ + public isMemberId(id: number): boolean { + const firstDigit = id.toString()[0]; // 取首位字符 + return firstDigit === "2"; + } + /** 获取 会员商品的id数组,首位数字为 2 */ - private getMemberIds(): number[] { + public getMemberIds(): number[] { let allId = this._goodIds; if (!allId) return []; // 获取所有 id let resultId = []; for (let one of allId) { - const firstDigit = one.toString()[0]; // 取首位字符 - if (firstDigit === "2") { + if (this.isMemberId(one)) { resultId.push(one); } } return resultId; } + /** 是否是聊天商品,首位数字为 3 */ + public isChatId(id: number): boolean { + const firstDigit = id.toString()[0]; // 取首位字符 + return firstDigit === "3"; + } + /** 获取 聊天商品的id数组,首位数字为 3 */ - private getChatIds(): number[] { + public getChatIds(): number[] { let allId = this._goodIds; if (!allId) return []; // 获取所有 id let resultId = []; for (let one of allId) { - const firstDigit = one.toString()[0]; // 取首位字符 - if (firstDigit === "3") { + if (this.isChatId(one)) { resultId.push(one); } } diff --git a/assets/Scripts/chat18x/network/services/MockGirlService.ts b/assets/Scripts/chat18x/network/services/MockGirlService.ts index 511d2bde..23823db1 100644 --- a/assets/Scripts/chat18x/network/services/MockGirlService.ts +++ b/assets/Scripts/chat18x/network/services/MockGirlService.ts @@ -4,6 +4,10 @@ import type { IGirlService } from "./IGirlService"; import { ConfigManager, ConfigId } from "../../manager/ConfigManager"; import { GirlConfig } from "../../config/GirlConfig"; import { GirlDetailConfig } from "../../config/GirlDetailConfig"; +import { DataManager, DataId } from "../../data/DataManager"; +import { GirlData } from "../../data/GirlData"; +import { WalletData } from "../../data/WalletData"; + export class MockGirlService implements IGirlService { private delay(ms = 180) { return new Promise(r => setTimeout(r, ms)); } private randInt(min: number, max: number) { return Math.floor(Math.random() * (max - min + 1)) + min; } @@ -240,20 +244,61 @@ export class MockGirlService implements IGirlService { } // 解锁技师 - async reqUnlockGirl(_req: proto.cs.ICSUnlockGirlReq): Promise> { + async reqUnlockGirl(req: proto.cs.ICSUnlockGirlReq): Promise> { // 延时 await this.delay(180); + // 请求数据 + const reqGirlId = req.id; + // 数据层的数据 + const girlData = DataManager.I.getDataById(DataId.Girl); + const category = girlData.getGrilCategoryById(reqGirlId); + const price = girlData.getGrilPrice(category.toString(), reqGirlId); + const walletData = DataManager.I.getDataById(DataId.Wallet); + // 余额 + let balanceNumber = Number(walletData.balance) - Number(price); + let balance = balanceNumber.toString(); + // vip 30天后过期 + const nowSeconds = Math.floor(Date.now() / 1000); + let vipExpire = nowSeconds + 30 * 24 * 3600; // 返回数据 - const res: proto.cs.ICSUnlockGirlRes = {}; + const res: proto.cs.ICSUnlockGirlRes = { + balance, + vipExpire, + }; return this.ok(res); } // 解锁资源 - async reqUnlockGirlRes(_req: proto.cs.ICSUnlockResourceReq): Promise> { + async reqUnlockGirlRes(req: proto.cs.ICSUnlockResourceReq): Promise> { // 延时 await this.delay(180); + // 请求数据 + const reqGirlId = req.girlId; + const resId = req.resId; + const resType = req.type; + // 数据层的数据 + const girlData = DataManager.I.getDataById(DataId.Girl); + const category = girlData.getGrilCategoryById(reqGirlId); + let price = 0; + if (resType === proto.cs.EnmResType.ERT_Image) { + // 图片 + price = girlData.getGrilPhotoPrice(category.toString(), reqGirlId, resId); + } else if (resType === proto.cs.EnmResType.ERT_Video) { + // 视频 + price = girlData.getGrilVideoPrice(category.toString(), reqGirlId, resId); + } + const walletData = DataManager.I.getDataById(DataId.Wallet); + // 余额 + let balanceNumber = Number(walletData.balance) - Number(price); + let balance = balanceNumber.toString(); + // vip 30天后过期 + const nowSeconds = Math.floor(Date.now() / 1000); + let vipExpire = nowSeconds + 30 * 24 * 3600; // 返回数据 - const res: proto.cs.ICSUnlockResourceRes = {}; + const res: proto.cs.ICSUnlockResourceRes = { + balance, + vipExpire, + }; return this.ok(res); } } diff --git a/assets/Scripts/chat18x/network/services/MockShopService.ts b/assets/Scripts/chat18x/network/services/MockShopService.ts index 44613d99..b1d01e34 100644 --- a/assets/Scripts/chat18x/network/services/MockShopService.ts +++ b/assets/Scripts/chat18x/network/services/MockShopService.ts @@ -3,6 +3,10 @@ import proto from "db://assets/Scripts/proto/proto.pb.js"; import type { IShopService } from "./IShopService"; import { PurchaseConfig } from "../../config/PurchaseConfig"; import { ConfigManager, ConfigId } from "../../manager/ConfigManager"; +import { DataManager, DataId } from "../../data/DataManager"; +import { GirlData } from "../../data/GirlData"; +import { WalletData } from "../../data/WalletData"; +import { ShopData } from "../../data/ShopData"; export class MockShopService implements IShopService { private delay(ms = 180) { return new Promise(r => setTimeout(r, ms)); } @@ -26,7 +30,7 @@ export class MockShopService implements IShopService { } // 获取商品列表 - async reqShopList(_req: proto.cs.ICSGetPurchaseReq): Promise> { + async reqShopList(req: proto.cs.ICSGetPurchaseReq): Promise> { // 延时 await this.delay(); // 配置数据 @@ -46,11 +50,42 @@ export class MockShopService implements IShopService { } // 使用余额购买商品 - async reqBuyGood(_req: proto.cs.ICSBuyGoodReq): Promise> { + async reqBuyGood(req: proto.cs.ICSBuyGoodReq): Promise> { // 延时 await this.delay(); + // 请求数据 + const reqGirlId = req.girlId; + const goodId = req.goodId; + // 数据层的数据 + const girlData = DataManager.I.getDataById(DataId.Girl); + const walletData = DataManager.I.getDataById(DataId.Wallet); + const shopData = DataManager.I.getDataById(DataId.Shop); + const category = girlData.getGrilCategoryById(reqGirlId); + + let chatRemainCount = 0; + if (shopData.isRechargeId(goodId)) { + // 充值 + } else if (shopData.isMemberId(goodId)) { + // 会员 + chatRemainCount = -1; + } else if (shopData.isChatId(goodId)) { + // 聊天 + const curCount = girlData.getChatRemainCount(category.toString(), reqGirlId); + chatRemainCount = curCount + shopData.getCountById(goodId); + } + // 余额 + const price = shopData.getPriceById(goodId); + let balanceNumber = Number(walletData.balance) - Number(price); + let balance = balanceNumber.toString(); + // vip 30天后过期 + const nowSeconds = Math.floor(Date.now() / 1000); + let vipExpire = nowSeconds + 30 * 24 * 3600; // 返回数据 - const res: proto.cs.ICSBuyGoodRes = {}; + const res: proto.cs.ICSBuyGoodRes = { + balance, + vipExpire, + chatRemainCount, + }; return this.ok(res); } } diff --git a/assets/Scripts/chat18x/ui/panels/GirlListPopupPanel.ts b/assets/Scripts/chat18x/ui/panels/GirlListPopupPanel.ts index bfc2b6e2..3b473623 100644 --- a/assets/Scripts/chat18x/ui/panels/GirlListPopupPanel.ts +++ b/assets/Scripts/chat18x/ui/panels/GirlListPopupPanel.ts @@ -4,16 +4,24 @@ import Utils from "../../../Main/Common/Utils"; import { GButton } from "../../../Main/Common/GButton"; import { PopupGirlDetailPanel } from "./PopupGirlDetailPanel"; import { GirlListItem } from "../../uiitems/GirlListItem"; +import { GirlService } from "db://assets/Scripts/chat18x/network/services/GirlService"; +import { DataManager, DataId } from "../../data/DataManager"; +import { GirlData } from "../../data/GirlData"; +import { PlayerDataService } from "db://assets/Scripts/chat18x/network/services/PlayerDataService"; +import { PlayerData } from "../../data/PlayerData"; +import { WalletData } from "../../data/WalletData"; +import proto from "db://assets/Scripts/proto/proto.pb.js"; const { ccclass, property } = _decorator; @ccclass("GirlListPopupPanel") export class GirlListPopupPanel extends li_BaseView { private _nodeTab: any = {}; - + private category: number; private girlId: number; base: GirlListItem; openUIDataCT(data) { + this.category = data.category; this.girlId = data.id; this.base = data.base; } @@ -28,13 +36,26 @@ export class GirlListPopupPanel extends li_BaseView { Close() { this.close(); } - buyCharacter() { + async buyCharacter() { // 购买id为girlId的女生 console.log(this.girlId); - - if (true) { + // 请求解锁 + const reqData = { + id: this.girlId, + }; + let res = await GirlService.I.reqUnlockGirl(reqData); + console.log("请求解锁响应数据:", res); + if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { + const resData = res.data; + // 保存数据 + const girlData = DataManager.I.getDataById(DataId.Girl); + girlData.setIsRelease(this.category.toString(), this.girlId, true); + const walletData = DataManager.I.getDataById(DataId.Wallet); + walletData.balance = Number(resData.balance); + walletData.vipExpire = Number(resData.vipExpire); + // 刷新界面 this.base.refreshBuy(true); - this.close(); + this.close(); } } } diff --git a/assets/Scripts/chat18x/uiitems/GirlListItem.ts b/assets/Scripts/chat18x/uiitems/GirlListItem.ts index 3e0b69cd..35486134 100644 --- a/assets/Scripts/chat18x/uiitems/GirlListItem.ts +++ b/assets/Scripts/chat18x/uiitems/GirlListItem.ts @@ -91,6 +91,8 @@ export class GirlListItem extends Component { this.nameKey = girlData.getGrilName(this.category.toString(), this.id); this.girlName.string = LanguageUtils.getText(this.nameKey); this.tagKey = girlData.getGrilTagKey(this.category.toString(), this.id); + // 是否已经解锁 + const isRelease = girlData.getIsRelease(this.category.toString(), this.id); let desc = ""; const tags = LanguageUtils.getText(this.tagKey).split("|"); for (let i = 0; i < tags.length; i++) { @@ -148,13 +150,17 @@ export class GirlListItem extends Component { } onClickDetail() { - if (false) { + const girlData = DataManager.I.getDataById(DataId.Girl); + // 是否已经解锁 + const isRelease = girlData.getIsRelease(this.category.toString(), this.id); + if (isRelease) { NavigationManager.Instance.navigateToGirlDetail(this.id); ViewManager.I.closeView(this.baseNode); } else { //未解锁 ViewManager.I.openBundlesView("GirlListPopupPanel", { base: this, + category: this.category, id: this.id, }); } diff --git a/assets/Scripts/proto/proto.pb.d.ts b/assets/Scripts/proto/proto.pb.d.ts index a92602bb..543be1f6 100644 --- a/assets/Scripts/proto/proto.pb.d.ts +++ b/assets/Scripts/proto/proto.pb.d.ts @@ -1129,6 +1129,12 @@ static getTypeUrl(typeUrlPrefix?: string): string; /** Properties of a CSUnlockGirlRes. */ interface ICSUnlockGirlRes { + + /** CSUnlockGirlRes balance */ + balance?: (number|Long|null); + + /** CSUnlockGirlRes vipExpire */ + vipExpire?: (number|Long|null); } /** Represents a CSUnlockGirlRes. */ @@ -1140,6 +1146,12 @@ static getTypeUrl(typeUrlPrefix?: string): string; */ constructor(properties?: cs.ICSUnlockGirlRes); + /** CSUnlockGirlRes balance. */ +balance: (number|Long); + + /** CSUnlockGirlRes vipExpire. */ +vipExpire: (number|Long); + /** * Creates a new CSUnlockGirlRes instance using the specified properties. * @param [properties] Properties to set @@ -1335,6 +1347,12 @@ static getTypeUrl(typeUrlPrefix?: string): string; /** Properties of a CSUnlockResourceRes. */ interface ICSUnlockResourceRes { + + /** CSUnlockResourceRes balance */ + balance?: (number|Long|null); + + /** CSUnlockResourceRes vipExpire */ + vipExpire?: (number|Long|null); } /** Represents a CSUnlockResourceRes. */ @@ -1346,6 +1364,12 @@ static getTypeUrl(typeUrlPrefix?: string): string; */ constructor(properties?: cs.ICSUnlockResourceRes); + /** CSUnlockResourceRes balance. */ +balance: (number|Long); + + /** CSUnlockResourceRes vipExpire. */ +vipExpire: (number|Long); + /** * Creates a new CSUnlockResourceRes instance using the specified properties. * @param [properties] Properties to set @@ -1529,6 +1553,15 @@ static getTypeUrl(typeUrlPrefix?: string): string; /** Properties of a CSBuyGoodRes. */ interface ICSBuyGoodRes { + + /** CSBuyGoodRes balance */ + balance?: (number|Long|null); + + /** CSBuyGoodRes vipExpire */ + vipExpire?: (number|Long|null); + + /** CSBuyGoodRes chatRemainCount */ + chatRemainCount?: (number|null); } /** Represents a CSBuyGoodRes. */ @@ -1540,6 +1573,15 @@ static getTypeUrl(typeUrlPrefix?: string): string; */ constructor(properties?: cs.ICSBuyGoodRes); + /** CSBuyGoodRes balance. */ +balance: (number|Long); + + /** CSBuyGoodRes vipExpire. */ +vipExpire: (number|Long); + + /** CSBuyGoodRes chatRemainCount. */ +chatRemainCount: number; + /** * Creates a new CSBuyGoodRes instance using the specified properties. * @param [properties] Properties to set diff --git a/assets/Scripts/proto/proto.pb.js b/assets/Scripts/proto/proto.pb.js index 28ba57aa..4d5995f0 100644 --- a/assets/Scripts/proto/proto.pb.js +++ b/assets/Scripts/proto/proto.pb.js @@ -2585,6 +2585,8 @@ $root.cs = (function() { * Properties of a CSUnlockGirlRes. * @memberof cs * @interface ICSUnlockGirlRes + * @property {number|Long|null} [balance] CSUnlockGirlRes balance + * @property {number|Long|null} [vipExpire] CSUnlockGirlRes vipExpire */ /** @@ -2602,6 +2604,22 @@ $root.cs = (function() { this[keys[i]] = properties[keys[i]]; } + /** + * CSUnlockGirlRes balance. + * @member {number|Long} balance + * @memberof cs.CSUnlockGirlRes + * @instance + */ + CSUnlockGirlRes.prototype.balance = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * CSUnlockGirlRes vipExpire. + * @member {number|Long} vipExpire + * @memberof cs.CSUnlockGirlRes + * @instance + */ + CSUnlockGirlRes.prototype.vipExpire = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + /** * Creates a new CSUnlockGirlRes instance using the specified properties. * @function create @@ -2626,6 +2644,10 @@ $root.cs = (function() { CSUnlockGirlRes.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); + if (message.balance != null && Object.hasOwnProperty.call(message, "balance")) + writer.uint32(/* id 1, wireType 0 =*/8).int64(message.balance); + if (message.vipExpire != null && Object.hasOwnProperty.call(message, "vipExpire")) + writer.uint32(/* id 2, wireType 0 =*/16).int64(message.vipExpire); return writer; }; @@ -2662,6 +2684,14 @@ $root.cs = (function() { if (tag === error) break; switch (tag >>> 3) { + case 1: { + message.balance = reader.int64(); + break; + } + case 2: { + message.vipExpire = reader.int64(); + break; + } default: reader.skipType(tag & 7); break; @@ -2697,6 +2727,12 @@ $root.cs = (function() { CSUnlockGirlRes.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; + if (message.balance != null && message.hasOwnProperty("balance")) + if (!$util.isInteger(message.balance) && !(message.balance && $util.isInteger(message.balance.low) && $util.isInteger(message.balance.high))) + return "balance: integer|Long expected"; + if (message.vipExpire != null && message.hasOwnProperty("vipExpire")) + if (!$util.isInteger(message.vipExpire) && !(message.vipExpire && $util.isInteger(message.vipExpire.low) && $util.isInteger(message.vipExpire.high))) + return "vipExpire: integer|Long expected"; return null; }; @@ -2711,7 +2747,26 @@ $root.cs = (function() { CSUnlockGirlRes.fromObject = function fromObject(object) { if (object instanceof $root.cs.CSUnlockGirlRes) return object; - return new $root.cs.CSUnlockGirlRes(); + var message = new $root.cs.CSUnlockGirlRes(); + if (object.balance != null) + if ($util.Long) + (message.balance = $util.Long.fromValue(object.balance)).unsigned = false; + else if (typeof object.balance === "string") + message.balance = parseInt(object.balance, 10); + else if (typeof object.balance === "number") + message.balance = object.balance; + else if (typeof object.balance === "object") + message.balance = new $util.LongBits(object.balance.low >>> 0, object.balance.high >>> 0).toNumber(); + if (object.vipExpire != null) + if ($util.Long) + (message.vipExpire = $util.Long.fromValue(object.vipExpire)).unsigned = false; + else if (typeof object.vipExpire === "string") + message.vipExpire = parseInt(object.vipExpire, 10); + else if (typeof object.vipExpire === "number") + message.vipExpire = object.vipExpire; + else if (typeof object.vipExpire === "object") + message.vipExpire = new $util.LongBits(object.vipExpire.low >>> 0, object.vipExpire.high >>> 0).toNumber(); + return message; }; /** @@ -2723,8 +2778,33 @@ $root.cs = (function() { * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - CSUnlockGirlRes.toObject = function toObject() { - return {}; + CSUnlockGirlRes.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.balance = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.balance = options.longs === String ? "0" : 0; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.vipExpire = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.vipExpire = options.longs === String ? "0" : 0; + } + if (message.balance != null && message.hasOwnProperty("balance")) + if (typeof message.balance === "number") + object.balance = options.longs === String ? String(message.balance) : message.balance; + else + object.balance = options.longs === String ? $util.Long.prototype.toString.call(message.balance) : options.longs === Number ? new $util.LongBits(message.balance.low >>> 0, message.balance.high >>> 0).toNumber() : message.balance; + if (message.vipExpire != null && message.hasOwnProperty("vipExpire")) + if (typeof message.vipExpire === "number") + object.vipExpire = options.longs === String ? String(message.vipExpire) : message.vipExpire; + else + object.vipExpire = options.longs === String ? $util.Long.prototype.toString.call(message.vipExpire) : options.longs === Number ? new $util.LongBits(message.vipExpire.low >>> 0, message.vipExpire.high >>> 0).toNumber() : message.vipExpire; + return object; }; /** @@ -3028,6 +3108,8 @@ $root.cs = (function() { * Properties of a CSUnlockResourceRes. * @memberof cs * @interface ICSUnlockResourceRes + * @property {number|Long|null} [balance] CSUnlockResourceRes balance + * @property {number|Long|null} [vipExpire] CSUnlockResourceRes vipExpire */ /** @@ -3045,6 +3127,22 @@ $root.cs = (function() { this[keys[i]] = properties[keys[i]]; } + /** + * CSUnlockResourceRes balance. + * @member {number|Long} balance + * @memberof cs.CSUnlockResourceRes + * @instance + */ + CSUnlockResourceRes.prototype.balance = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * CSUnlockResourceRes vipExpire. + * @member {number|Long} vipExpire + * @memberof cs.CSUnlockResourceRes + * @instance + */ + CSUnlockResourceRes.prototype.vipExpire = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + /** * Creates a new CSUnlockResourceRes instance using the specified properties. * @function create @@ -3069,6 +3167,10 @@ $root.cs = (function() { CSUnlockResourceRes.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); + if (message.balance != null && Object.hasOwnProperty.call(message, "balance")) + writer.uint32(/* id 1, wireType 0 =*/8).int64(message.balance); + if (message.vipExpire != null && Object.hasOwnProperty.call(message, "vipExpire")) + writer.uint32(/* id 2, wireType 0 =*/16).int64(message.vipExpire); return writer; }; @@ -3105,6 +3207,14 @@ $root.cs = (function() { if (tag === error) break; switch (tag >>> 3) { + case 1: { + message.balance = reader.int64(); + break; + } + case 2: { + message.vipExpire = reader.int64(); + break; + } default: reader.skipType(tag & 7); break; @@ -3140,6 +3250,12 @@ $root.cs = (function() { CSUnlockResourceRes.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; + if (message.balance != null && message.hasOwnProperty("balance")) + if (!$util.isInteger(message.balance) && !(message.balance && $util.isInteger(message.balance.low) && $util.isInteger(message.balance.high))) + return "balance: integer|Long expected"; + if (message.vipExpire != null && message.hasOwnProperty("vipExpire")) + if (!$util.isInteger(message.vipExpire) && !(message.vipExpire && $util.isInteger(message.vipExpire.low) && $util.isInteger(message.vipExpire.high))) + return "vipExpire: integer|Long expected"; return null; }; @@ -3154,7 +3270,26 @@ $root.cs = (function() { CSUnlockResourceRes.fromObject = function fromObject(object) { if (object instanceof $root.cs.CSUnlockResourceRes) return object; - return new $root.cs.CSUnlockResourceRes(); + var message = new $root.cs.CSUnlockResourceRes(); + if (object.balance != null) + if ($util.Long) + (message.balance = $util.Long.fromValue(object.balance)).unsigned = false; + else if (typeof object.balance === "string") + message.balance = parseInt(object.balance, 10); + else if (typeof object.balance === "number") + message.balance = object.balance; + else if (typeof object.balance === "object") + message.balance = new $util.LongBits(object.balance.low >>> 0, object.balance.high >>> 0).toNumber(); + if (object.vipExpire != null) + if ($util.Long) + (message.vipExpire = $util.Long.fromValue(object.vipExpire)).unsigned = false; + else if (typeof object.vipExpire === "string") + message.vipExpire = parseInt(object.vipExpire, 10); + else if (typeof object.vipExpire === "number") + message.vipExpire = object.vipExpire; + else if (typeof object.vipExpire === "object") + message.vipExpire = new $util.LongBits(object.vipExpire.low >>> 0, object.vipExpire.high >>> 0).toNumber(); + return message; }; /** @@ -3166,8 +3301,33 @@ $root.cs = (function() { * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - CSUnlockResourceRes.toObject = function toObject() { - return {}; + CSUnlockResourceRes.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.balance = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.balance = options.longs === String ? "0" : 0; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.vipExpire = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.vipExpire = options.longs === String ? "0" : 0; + } + if (message.balance != null && message.hasOwnProperty("balance")) + if (typeof message.balance === "number") + object.balance = options.longs === String ? String(message.balance) : message.balance; + else + object.balance = options.longs === String ? $util.Long.prototype.toString.call(message.balance) : options.longs === Number ? new $util.LongBits(message.balance.low >>> 0, message.balance.high >>> 0).toNumber() : message.balance; + if (message.vipExpire != null && message.hasOwnProperty("vipExpire")) + if (typeof message.vipExpire === "number") + object.vipExpire = options.longs === String ? String(message.vipExpire) : message.vipExpire; + else + object.vipExpire = options.longs === String ? $util.Long.prototype.toString.call(message.vipExpire) : options.longs === Number ? new $util.LongBits(message.vipExpire.low >>> 0, message.vipExpire.high >>> 0).toNumber() : message.vipExpire; + return object; }; /** @@ -3434,6 +3594,9 @@ $root.cs = (function() { * Properties of a CSBuyGoodRes. * @memberof cs * @interface ICSBuyGoodRes + * @property {number|Long|null} [balance] CSBuyGoodRes balance + * @property {number|Long|null} [vipExpire] CSBuyGoodRes vipExpire + * @property {number|null} [chatRemainCount] CSBuyGoodRes chatRemainCount */ /** @@ -3451,6 +3614,30 @@ $root.cs = (function() { this[keys[i]] = properties[keys[i]]; } + /** + * CSBuyGoodRes balance. + * @member {number|Long} balance + * @memberof cs.CSBuyGoodRes + * @instance + */ + CSBuyGoodRes.prototype.balance = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * CSBuyGoodRes vipExpire. + * @member {number|Long} vipExpire + * @memberof cs.CSBuyGoodRes + * @instance + */ + CSBuyGoodRes.prototype.vipExpire = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * CSBuyGoodRes chatRemainCount. + * @member {number} chatRemainCount + * @memberof cs.CSBuyGoodRes + * @instance + */ + CSBuyGoodRes.prototype.chatRemainCount = 0; + /** * Creates a new CSBuyGoodRes instance using the specified properties. * @function create @@ -3475,6 +3662,12 @@ $root.cs = (function() { CSBuyGoodRes.encode = function encode(message, writer) { if (!writer) writer = $Writer.create(); + if (message.balance != null && Object.hasOwnProperty.call(message, "balance")) + writer.uint32(/* id 1, wireType 0 =*/8).int64(message.balance); + if (message.vipExpire != null && Object.hasOwnProperty.call(message, "vipExpire")) + writer.uint32(/* id 2, wireType 0 =*/16).int64(message.vipExpire); + if (message.chatRemainCount != null && Object.hasOwnProperty.call(message, "chatRemainCount")) + writer.uint32(/* id 3, wireType 0 =*/24).int32(message.chatRemainCount); return writer; }; @@ -3511,6 +3704,18 @@ $root.cs = (function() { if (tag === error) break; switch (tag >>> 3) { + case 1: { + message.balance = reader.int64(); + break; + } + case 2: { + message.vipExpire = reader.int64(); + break; + } + case 3: { + message.chatRemainCount = reader.int32(); + break; + } default: reader.skipType(tag & 7); break; @@ -3546,6 +3751,15 @@ $root.cs = (function() { CSBuyGoodRes.verify = function verify(message) { if (typeof message !== "object" || message === null) return "object expected"; + if (message.balance != null && message.hasOwnProperty("balance")) + if (!$util.isInteger(message.balance) && !(message.balance && $util.isInteger(message.balance.low) && $util.isInteger(message.balance.high))) + return "balance: integer|Long expected"; + if (message.vipExpire != null && message.hasOwnProperty("vipExpire")) + if (!$util.isInteger(message.vipExpire) && !(message.vipExpire && $util.isInteger(message.vipExpire.low) && $util.isInteger(message.vipExpire.high))) + return "vipExpire: integer|Long expected"; + if (message.chatRemainCount != null && message.hasOwnProperty("chatRemainCount")) + if (!$util.isInteger(message.chatRemainCount)) + return "chatRemainCount: integer expected"; return null; }; @@ -3560,7 +3774,28 @@ $root.cs = (function() { CSBuyGoodRes.fromObject = function fromObject(object) { if (object instanceof $root.cs.CSBuyGoodRes) return object; - return new $root.cs.CSBuyGoodRes(); + var message = new $root.cs.CSBuyGoodRes(); + if (object.balance != null) + if ($util.Long) + (message.balance = $util.Long.fromValue(object.balance)).unsigned = false; + else if (typeof object.balance === "string") + message.balance = parseInt(object.balance, 10); + else if (typeof object.balance === "number") + message.balance = object.balance; + else if (typeof object.balance === "object") + message.balance = new $util.LongBits(object.balance.low >>> 0, object.balance.high >>> 0).toNumber(); + if (object.vipExpire != null) + if ($util.Long) + (message.vipExpire = $util.Long.fromValue(object.vipExpire)).unsigned = false; + else if (typeof object.vipExpire === "string") + message.vipExpire = parseInt(object.vipExpire, 10); + else if (typeof object.vipExpire === "number") + message.vipExpire = object.vipExpire; + else if (typeof object.vipExpire === "object") + message.vipExpire = new $util.LongBits(object.vipExpire.low >>> 0, object.vipExpire.high >>> 0).toNumber(); + if (object.chatRemainCount != null) + message.chatRemainCount = object.chatRemainCount | 0; + return message; }; /** @@ -3572,8 +3807,36 @@ $root.cs = (function() { * @param {$protobuf.IConversionOptions} [options] Conversion options * @returns {Object.} Plain object */ - CSBuyGoodRes.toObject = function toObject() { - return {}; + CSBuyGoodRes.toObject = function toObject(message, options) { + if (!options) + options = {}; + var object = {}; + if (options.defaults) { + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.balance = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.balance = options.longs === String ? "0" : 0; + if ($util.Long) { + var long = new $util.Long(0, 0, false); + object.vipExpire = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.vipExpire = options.longs === String ? "0" : 0; + object.chatRemainCount = 0; + } + if (message.balance != null && message.hasOwnProperty("balance")) + if (typeof message.balance === "number") + object.balance = options.longs === String ? String(message.balance) : message.balance; + else + object.balance = options.longs === String ? $util.Long.prototype.toString.call(message.balance) : options.longs === Number ? new $util.LongBits(message.balance.low >>> 0, message.balance.high >>> 0).toNumber() : message.balance; + if (message.vipExpire != null && message.hasOwnProperty("vipExpire")) + if (typeof message.vipExpire === "number") + object.vipExpire = options.longs === String ? String(message.vipExpire) : message.vipExpire; + else + object.vipExpire = options.longs === String ? $util.Long.prototype.toString.call(message.vipExpire) : options.longs === Number ? new $util.LongBits(message.vipExpire.low >>> 0, message.vipExpire.high >>> 0).toNumber() : message.vipExpire; + if (message.chatRemainCount != null && message.hasOwnProperty("chatRemainCount")) + object.chatRemainCount = message.chatRemainCount; + return object; }; /** diff --git a/proto_cs b/proto_cs index f055100c..9ec1d4f0 160000 --- a/proto_cs +++ b/proto_cs @@ -1 +1 @@ -Subproject commit f055100cf0f378ddd96d8e153655b5166c65e6e8 +Subproject commit 9ec1d4f07754a1c91f80bf1e3c583d42e42049b2 From a4b1ecd44a0b127b85c72b625a3b46ce411e4561 Mon Sep 17 00:00:00 2001 From: chen wei bo <1025839511@qq.com> Date: Tue, 9 Sep 2025 18:51:12 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/Scripts/chat18x/data/WalletData.ts | 6 ++++++ assets/Scripts/chat18x/ui/panels/ThemePanel.ts | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/assets/Scripts/chat18x/data/WalletData.ts b/assets/Scripts/chat18x/data/WalletData.ts index 6aa46cd9..77db0d4c 100644 --- a/assets/Scripts/chat18x/data/WalletData.ts +++ b/assets/Scripts/chat18x/data/WalletData.ts @@ -2,6 +2,8 @@ * 钱包数据 */ import { BaseData } from "./BaseData"; +import Utils from "../../Main/Common/Utils"; +import { InnerMsgCode } from "../../Main/Config/InnerMsgCode"; export class WalletData extends BaseData { // 余额 @@ -28,6 +30,8 @@ export class WalletData extends BaseData { /** 设置余额 */ public set balance(value: number) { this._balance = value; + // 发出事件 + Utils.sendInnerMsg(InnerMsgCode.BalanceChange, this._balance); } /** 获取余额 */ @@ -38,6 +42,8 @@ export class WalletData extends BaseData { /** 设置vip失效时间戳 */ public set vipExpire(value: number) { this._vipExpire = value; + // 发出事件 + Utils.sendInnerMsg(InnerMsgCode.VipExpireChange, this._vipExpire); } /** 获取vip失效时间戳 */ diff --git a/assets/Scripts/chat18x/ui/panels/ThemePanel.ts b/assets/Scripts/chat18x/ui/panels/ThemePanel.ts index e086b7cc..573b2753 100644 --- a/assets/Scripts/chat18x/ui/panels/ThemePanel.ts +++ b/assets/Scripts/chat18x/ui/panels/ThemePanel.ts @@ -126,6 +126,12 @@ export class ThemePanel extends li_BaseView { Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => { this.recName.string = LanguageUtils.getText(this.rectNameKey); }); + Utils.addInnerEL(InnerMsgCode.BalanceChange, this, () => { + + }); + Utils.addInnerEL(InnerMsgCode.VipExpireChange, this, () => { + + }); } enterShop() { From fe67cf3814a7f7edb6973728102eacd8c5988923 Mon Sep 17 00:00:00 2001 From: chen wei bo <1025839511@qq.com> Date: Tue, 9 Sep 2025 19:16:46 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/Scripts/chat18x/data/GirlData.ts | 24 +++++++++++++++++++ assets/Scripts/chat18x/data/ShopData.ts | 14 ++++++++--- .../chat18x/ui/panels/GirlListPopupPanel.ts | 9 ++++--- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/assets/Scripts/chat18x/data/GirlData.ts b/assets/Scripts/chat18x/data/GirlData.ts index f743e9c9..058c3c36 100644 --- a/assets/Scripts/chat18x/data/GirlData.ts +++ b/assets/Scripts/chat18x/data/GirlData.ts @@ -199,6 +199,14 @@ export class GirlData extends BaseData { return oneData.getGrilPriceType(); } + /** 获取原来的价格,除100 */ + public getGrilOriginalPrice(categoryId: string, girlId: number): number { + let oneData = this.getGrilBrief(categoryId, girlId); + if (!oneData) return 0; + let price = oneData.getGrilPrice(); + return price/100; + } + /** 获取价格 */ public getGrilPrice(categoryId: string, girlId: number): number { let oneData = this.getGrilBrief(categoryId, girlId); @@ -350,6 +358,14 @@ export class GirlData extends BaseData { if (!oneData) return 0; return oneData.getGrilPhotoUnlockCounts(id); } + + /** 获取技师图片的原来价格,除100 */ + public getGrilPhotoOriginalPrice(categoryId: string, girlId: number, id: number): number { + let oneData = this.getGrilDetail(categoryId, girlId); + if (!oneData) return 0; + let price = oneData.getGrilPhotoPrice(id); + return price/100; + } /** 获取技师图片的价格 */ public getGrilPhotoPrice(categoryId: string, girlId: number, id: number): number { @@ -430,6 +446,14 @@ export class GirlData extends BaseData { return oneData.getGrilVideoEmotion(id); } + /** 获取技师视频的原来价格,除100 */ + public getGrilVideoOriginalPrice(categoryId: string, girlId: number, id: number): number { + let oneData = this.getGrilDetail(categoryId, girlId); + if (!oneData) return 0; + let price = oneData.getGrilVideoPrice(id); + return price/100; + } + /** 获取技师视频的价格 */ public getGrilVideoPrice(categoryId: string, girlId: number, id: number): number { let oneData = this.getGrilDetail(categoryId, girlId); diff --git a/assets/Scripts/chat18x/data/ShopData.ts b/assets/Scripts/chat18x/data/ShopData.ts index cfe9ee3a..a87e170c 100644 --- a/assets/Scripts/chat18x/data/ShopData.ts +++ b/assets/Scripts/chat18x/data/ShopData.ts @@ -126,10 +126,18 @@ export class ShopData extends BaseData { return oneData.name; } - /** 根据商品 id 获取商品价格 */ - public getPriceById(id: number): number | null { + /** 根据商品 id 获取商品的原来价格,除100 */ + public getOriginalPriceById(id: number): number { let oneData = this.getGoodDataById(id); - if (!oneData) return null; + if (!oneData) return 0; + let price = oneData.price; + return price/100; + } + + /** 根据商品 id 获取商品价格 */ + public getPriceById(id: number): number { + let oneData = this.getGoodDataById(id); + if (!oneData) return 0; return oneData.price; } diff --git a/assets/Scripts/chat18x/ui/panels/GirlListPopupPanel.ts b/assets/Scripts/chat18x/ui/panels/GirlListPopupPanel.ts index 3b473623..6533101b 100644 --- a/assets/Scripts/chat18x/ui/panels/GirlListPopupPanel.ts +++ b/assets/Scripts/chat18x/ui/panels/GirlListPopupPanel.ts @@ -1,4 +1,4 @@ -import { _decorator, Button, Component, Node } from "cc"; +import { _decorator, Button, Component, Node, Label } from "cc"; import li_BaseView from "../../../Main/Common/li_BaseView"; import Utils from "../../../Main/Common/Utils"; import { GButton } from "../../../Main/Common/GButton"; @@ -7,8 +7,6 @@ import { GirlListItem } from "../../uiitems/GirlListItem"; import { GirlService } from "db://assets/Scripts/chat18x/network/services/GirlService"; import { DataManager, DataId } from "../../data/DataManager"; import { GirlData } from "../../data/GirlData"; -import { PlayerDataService } from "db://assets/Scripts/chat18x/network/services/PlayerDataService"; -import { PlayerData } from "../../data/PlayerData"; import { WalletData } from "../../data/WalletData"; import proto from "db://assets/Scripts/proto/proto.pb.js"; const { ccclass, property } = _decorator; @@ -16,6 +14,7 @@ const { ccclass, property } = _decorator; @ccclass("GirlListPopupPanel") export class GirlListPopupPanel extends li_BaseView { private _nodeTab: any = {}; + private priceLabel: Label; private category: number; private girlId: number; @@ -27,6 +26,10 @@ export class GirlListPopupPanel extends li_BaseView { } onLoadCT() { Utils.parseNode(this.node, this._nodeTab); + const girlData = DataManager.I.getDataById(DataId.Girl); + // 价格 + this.priceLabel = this._nodeTab.Price.getComponent(Label); + this.priceLabel.string = girlData.getGrilOriginalPrice(this.category.toString(), this.girlId).toString(); this.registerListener(); } registerListener() {