商业化-前端部分

This commit is contained in:
2025-08-15 13:55:26 +08:00
parent f928e7fabe
commit 41f9555e53
15 changed files with 22958 additions and 22810 deletions
Binary file not shown.
Binary file not shown.
+72
View File
@@ -71,6 +71,78 @@
"language_fr": "Choisir la langue",
"language_de": "Sprache wählen"
},
{
"key": "purchasepanel.title",
"language_en": "Shop",
"language_cn": "商店",
"language_hi": "दुकान",
"language_fr": "Boutique",
"language_de": "Geschäft"
},
{
"key": "purchasepanel.vip_left",
"language_en": "left${leftTime}",
"language_cn": "剩余${leftTime}",
"language_hi": "बचे हुए${leftTime}",
"language_fr": "reste${leftTime}",
"language_de": "verbleibend${leftTime}"
},
{
"key": "purchasepanel.vip_name",
"language_en": "VIP Card",
"language_cn": "特权卡",
"language_hi": "वीआईपी कार्ड",
"language_fr": "Carte VIP",
"language_de": "VIP-Karte"
},
{
"key": "purchasepanel.vip_desc",
"language_en": "Purchase VIP card to chat with any girl unlimitedly within 7 days",
"language_cn": "购买特权卡后在7天内可与任意对象进行聊天,且聊天次数不限",
"language_hi": "वीआईपी कार्ड खरीदने के बाद, आप 7 दिनों के भीतर किसी भी लड़की के साथ बिना सीमा के चैट कर सकते हैं",
"language_fr": "Achetez la carte VIP pour discuter avec n'importe quelle fille sans limite pendant 7 jours",
"language_de": "VIP-Karte kaufen, um innerhalb von 7 Tagen ohne Einschränkungen mit jedem Mädchen zu chatten"
},
{
"key": "purchasepanel.get_diamond_text",
"language_en": "Get Diamonds:",
"language_cn": "获取钻石:",
"language_hi": "हीरे प्राप्त करें:",
"language_fr": "Obtenir des diamants:",
"language_de": "Diamanten erhalten:"
},
{
"key": "purchasepanel.buy_diamond_btn",
"language_en": "Buy Diamonds",
"language_cn": "购买钻石",
"language_hi": "हीरे खरीदें",
"language_fr": "Acheter des diamants",
"language_de": "Diamanten kaufen"
},
{
"key": "purchasepanel.day",
"language_en": "day",
"language_cn": "天",
"language_hi": "दिन",
"language_fr": "jours",
"language_de": "Tage"
},
{
"key": "purchasepanel.hour",
"language_en": "hours",
"language_cn": "小时",
"language_hi": "घंटे",
"language_fr": "heures",
"language_de": "Stunden"
},
{
"key": "purchasepanel.minute",
"language_en": "min",
"language_cn": "分",
"language_hi": "मिनट",
"language_fr": "minutes",
"language_de": "Minuten"
},
{
"key": "category_1001",
"language_en": "Mature Lady",
+27 -23
View File
@@ -1,30 +1,34 @@
//消息枚举
export enum InnerMsgCode {
GM_UI_Close, //关闭GM界面
SceneLayerBgUp, //刷新场景背景图
UI_Talk_Back, //从聊天界面返回
UI_BD_Sidebar, //抖音侧边栏状态刷新
UI_Socket_Timeout, //socket超时
UI_TalkStageUp, //更改聊天阶段
UI_ResartGame, //重新开始游戏
UI_ShowPrompt, //显示飘字提示
UI_Tj_huiyi_Pic, //显示回忆大图
UI_Tj_huiyi_Lv, //前往回忆对应关卡
GM_UI_Close, //关闭GM界面
SceneLayerBgUp, //刷新场景背景图
UI_Talk_Back, //从聊天界面返回
UI_BD_Sidebar, //抖音侧边栏状态刷新
UI_Socket_Timeout, //socket超时
UI_TalkStageUp, //更改聊天阶段
UI_ResartGame, //重新开始游戏
UI_ShowPrompt, //显示飘字提示
UI_Tj_huiyi_Pic, //显示回忆大图
UI_Tj_huiyi_Lv, //前往回忆对应关卡
Data_UserInfo_Up, //用户信息更新
Data_NpcTalkBack, //NPC对话返回
Data_LevelStarUp, //刷新关卡星级
Data_ChehuiUp, //撤回消息
Data_BDSidebarReward, //抖音侧边栏奖励领取消息
Data_Redpoint, //红点刷新消息
Data_ZhencangUp, //私家珍藏更新消息
Data_UserInfo_Up, //用户信息更新
Data_NpcTalkBack, //NPC对话返回
Data_LevelStarUp, //刷新关卡星级
Data_ChehuiUp, //撤回消息
Data_BDSidebarReward, //抖音侧边栏奖励领取消息
Data_Redpoint, //红点刷新消息
Data_ZhencangUp, //私家珍藏更新消息
BgVideo_Ready, //背景视频准备完成
BgVideo_End, //背景视频播放完毕
BgVideo_Ready, //背景视频准备完成
BgVideo_End, //背景视频播放完毕
Chat_DialogRefresh,
SimplePlayVide,
LanguageChange,
}
Chat_DialogRefresh,
SimplePlayVide,
LanguageChange,
export enum InnerEventCode {
DiamondCountChanged = 15618,
IsVipChanged,
VipEndDayChange,
}
@@ -0,0 +1,106 @@
import LanguageUtils from "../../Main/Common/LanguageUtils";
import Utils from "../../Main/Common/Utils";
import { InnerEventCode } from "../../Main/Config/InnerMsgCode";
export class CommercialData {
private static _instance: CommercialData;
public static get Instance(): CommercialData {
if (!CommercialData._instance) {
CommercialData._instance = new CommercialData();
}
return CommercialData._instance;
}
private _diamondCount: number = 0;
private _isVip: boolean = false;
private _vipEndTime: number = 0;
public get diamondCount(): number {
return this._diamondCount;
}
public set diamondCount(value: number) {
if (this._diamondCount !== value) {
this._diamondCount = Math.max(0, value);
Utils.sendInnerMsg(InnerEventCode.DiamondCountChanged, {
count: this._diamondCount,
});
}
}
public get isVip(): boolean {
return this._isVip;
}
public set isVip(value: boolean) {
if (this._isVip !== value) {
this._isVip = value;
Utils.sendInnerMsg(InnerEventCode.IsVipChanged, { isVip: this._isVip });
}
}
public get vipEndTime(): number {
return this._vipEndTime;
}
public set vipEndTime(value: number) {
if (this._vipEndTime !== value) {
this._vipEndTime = Math.max(0, value);
Utils.sendInnerMsg(InnerEventCode.VipEndDayChange, {
vipEndTime: this._vipEndTime,
});
}
}
private constructor() {
this.loadData();
}
public addDiamonds(amount: number): void {
if (amount > 0) {
this.diamondCount += amount;
}
}
public spendDiamonds(amount: number): boolean {
if (amount > 0 && this._diamondCount >= amount) {
this.diamondCount -= amount;
return true;
}
return false;
}
public setVipTime(timeInSeconds: number): void {
this._vipEndTime = timeInSeconds;
if (timeInSeconds > 0) {
this.isVip = true;
}
}
public getVipLeftTime(): string {
const dateNow = new Date();
const timeDiff = Math.abs(this._vipEndTime - dateNow.getTime());
const hours = Math.floor(timeDiff / (1000 * 60 * 60));
if (hours >= 24) {
return (
(hours % 24).toString() + LanguageUtils.getText("purchasepanel.day")
);
}
const minutes = Math.floor((timeDiff / (1000 * 60)) % 60);
//const seconds = Math.floor((timeDiff / 1000) % 60);
return `${hours}${LanguageUtils.getText(
"purchasepanel.hour"
)}:${minutes}${LanguageUtils.getText("purchasepanel.minute")}`;
}
private loadData(): void {
//假数据
this._diamondCount = 18556;
this._isVip = true;
//const dateNow = new Date();
const dateEndTime = new Date("2025-08-30T12:00:00Z");
this._vipEndTime = dateEndTime.getTime();
}
}
@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "b63bfbf7-eac0-4713-84ca-dbb1d0ea1c5c",
"files": [],
"subMetas": {},
"userData": {}
}
@@ -0,0 +1,129 @@
import { _decorator, Component, Label, Node } from "cc";
import li_BaseView from "../../../Main/Common/li_BaseView";
import Utils from "../../../Main/Common/Utils";
import { CommercialData } from "../../data/CommercialData";
import ConfigManager from "../../manager/ConfigManager";
import { GButton } from "../../../Main/Common/GButton";
import { PurchasePanelItem } from "../../uiitems/PurchasePanelItem";
import { ViewManager } from "../../../Main/Manager/ViewManager";
import LanguageUtils from "../../../Main/Common/LanguageUtils";
import { InnerEventCode } from "../../../Main/Config/InnerMsgCode";
const { ccclass, property } = _decorator;
@ccclass("PurchasePanel")
export class PurchasePanel extends li_BaseView {
private _nodeTab: any = {};
private diamondCount: Label;
private vipLeftTime: Label;
private vipPriceTag: Label;
private tryBuyId: number;
@property([PurchasePanelItem])
public items: PurchasePanelItem[] = [];
onLoadCT(): void {
Utils.parseNode(this.node, this._nodeTab);
this.diamondCount = this._nodeTab.diamondNumber.getComponent(Label);
this.vipLeftTime = this._nodeTab.vipText.getComponent(Label);
this.vipPriceTag = this._nodeTab.vipPrice.getComponent(Label);
this.bandBtn();
//订阅商业化数据事件
Utils.addInnerEL(
InnerEventCode.DiamondCountChanged,
this,
this.onDiamondCountChanged
);
Utils.addInnerEL(
InnerEventCode.VipEndDayChange,
this,
this.onVipEndDayChange
);
//获取商业化数据
this.getPlayerMerData();
const cfg = ConfigManager.tables.TbPurchaseConfig;
for (let index = 0; index < this.items.length; index++) {
const element = this.items[index];
element.init(this, cfg.get(1001 + index));
}
this.updateView();
}
bandBtn() {
GButton.BandClick(
this._nodeTab.BuyVipBtn,
() => {
//TODO:购买vip
console.log("购买Vip");
},
this
);
GButton.BandClick(
this._nodeTab.BuyDiamondBtn,
() => {
//TODO:购买钻石
console.log("购买钻石,商品id" + this.tryBuyId);
},
this
);
GButton.BandClick(
this._nodeTab.QUIT,
() => {
//TODO:购买钻石
ViewManager.I.closeView(this.node);
},
this
);
}
updateView() {
this.getPlayerMerData();
const vipPrice = ConfigManager.tables.TbPurchaseConfig.get(2001).count;
this.vipPriceTag.string = `$ ${vipPrice}`;
this.items.forEach((item) => item.show());
}
setDiamondTag(id: number) {
this.tryBuyId = id;
}
getPlayerMerData() {
//todo: 获取服务器玩家商业化数据
this.diamondCount.string = CommercialData.Instance.diamondCount.toString();
const leftTime = CommercialData.Instance.getVipLeftTime();
this.vipLeftTime.string = LanguageUtils.getText(
"purchasepanel.vip_left"
).replace("${leftTime}", leftTime);
}
onDiamondCountChanged(data: any) {
this.diamondCount.string = data.count.toString();
}
onVipEndDayChange(data: any) {
const leftTime = CommercialData.Instance.getVipLeftTime();
this.vipLeftTime.string = LanguageUtils.getText(
"purchasepanel.vip_left"
).replace("${leftTime}", leftTime);
}
onDestroy() {
Utils.removeInnerEL(
InnerEventCode.DiamondCountChanged,
this,
this.onDiamondCountChanged
);
Utils.removeInnerEL(
InnerEventCode.VipEndDayChange,
this,
this.onVipEndDayChange
);
super.onDestroy();
}
}
@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "c657f7a9-a2dc-42a6-80df-1d7dd729f268",
"files": [],
"subMetas": {},
"userData": {}
}
@@ -97,11 +97,17 @@ export class ThemePanel extends li_BaseView {
GButton.BandClick(this._nodeTab.ChatWithRecBtn, this.chatWithRec, this);
GButton.BandClick(this._nodeTab.ShopPanelEntry, this.enterShop, this);
Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => {
this.recName.string = LanguageUtils.getText(this.rectNameKey);
});
}
enterShop() {
ViewManager.I.openBundlesView("PurchasePanel");
}
chatWithRec() {
NavigationManager.Instance.navigateToChat(this.recId);
}
@@ -0,0 +1,28 @@
import { _decorator, Component, Label, Node } from "cc";
import { PurchasePanel } from "../ui/panels/PurchasePanel";
import { PurchaseConfig } from "../../schema/schema";
const { ccclass, property } = _decorator;
@ccclass("PurchasePanelItem")
export class PurchasePanelItem extends Component {
@property(Label)
count: Label;
@property(Label)
price: Label;
baseView: PurchasePanel;
data: PurchaseConfig;
public init(base: PurchasePanel, data: PurchaseConfig) {
this.baseView = base;
this.data = data;
}
public show() {
this.count.string = this.data.desc.toString();
this.price.string = this.data.count.toString();
}
onClickThis() {
this.baseView.setDiamondTag(this.data.id);
}
}
@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "0c5a1f4a-a909-49dd-802c-06e27182eb79",
"files": [],
"subMetas": {},
"userData": {}
}
+17800 -15459
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+128 -159
View File
@@ -148,7 +148,10 @@
"__id__": 34
},
{
"__id__": 52
"__id__": 50
},
{
"__id__": 74
}
],
"_active": true,
@@ -912,13 +915,10 @@
},
{
"__id__": 47
},
{
"__id__": 49
}
],
"_prefab": {
"__id__": 51
"__id__": 49
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -1220,64 +1220,6 @@
"__type__": "cc.CompPrefabInfo",
"fileId": "7aLgSeobBB96Nlervm4IKB"
},
{
"__type__": "cc.Button",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 34
},
"_enabled": true,
"__prefab": {
"__id__": 48
},
"clickEvents": [],
"_interactable": true,
"_transition": 1,
"_normalColor": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_hoverColor": {
"__type__": "cc.Color",
"r": 211,
"g": 211,
"b": 211,
"a": 255
},
"_pressedColor": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_disabledColor": {
"__type__": "cc.Color",
"r": 124,
"g": 124,
"b": 124,
"a": 255
},
"_normalSprite": null,
"_hoverSprite": null,
"_pressedSprite": null,
"_disabledSprite": null,
"_duration": 0.1,
"_zoomScale": 1.2,
"_target": {
"__id__": 34
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "619TuwPfNO/bklqk6WLFGc"
},
{
"__type__": "cc.Widget",
"_name": "",
@@ -1288,7 +1230,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 50
"__id__": 48
},
"_alignFlags": 36,
"_target": null,
@@ -1337,29 +1279,26 @@
},
"_children": [
{
"__id__": 53
"__id__": 51
},
{
"__id__": 61
"__id__": 59
}
],
"_active": true,
"_components": [
{
"__id__": 67
},
{
"__id__": 69
},
{
"__id__": 71
},
{
"__id__": 73
},
{
"__id__": 75
}
],
"_prefab": {
"__id__": 77
"__id__": 73
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -1396,23 +1335,23 @@
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 52
"__id__": 50
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 52
},
{
"__id__": 54
},
{
"__id__": 56
},
{
"__id__": 58
}
],
"_prefab": {
"__id__": 60
"__id__": 58
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -1449,11 +1388,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 53
"__id__": 51
},
"_enabled": true,
"__prefab": {
"__id__": 55
"__id__": 53
},
"_contentSize": {
"__type__": "cc.Size",
@@ -1477,11 +1416,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 53
"__id__": 51
},
"_enabled": true,
"__prefab": {
"__id__": 57
"__id__": 55
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -1545,11 +1484,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 53
"__id__": 51
},
"_enabled": true,
"__prefab": {
"__id__": 59
"__id__": 57
},
"_alignFlags": 34,
"_target": null,
@@ -1594,23 +1533,23 @@
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 52
"__id__": 50
},
"_children": [],
"_active": false,
"_components": [
{
"__id__": 60
},
{
"__id__": 62
},
{
"__id__": 64
},
{
"__id__": 66
}
],
"_prefab": {
"__id__": 68
"__id__": 66
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -1647,11 +1586,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 61
"__id__": 59
},
"_enabled": true,
"__prefab": {
"__id__": 63
"__id__": 61
},
"_contentSize": {
"__type__": "cc.Size",
@@ -1675,11 +1614,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 61
"__id__": 59
},
"_enabled": true,
"__prefab": {
"__id__": 65
"__id__": 63
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -1743,11 +1682,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 61
"__id__": 59
},
"_enabled": true,
"__prefab": {
"__id__": 67
"__id__": 65
},
"_alignFlags": 34,
"_target": null,
@@ -1792,11 +1731,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 52
"__id__": 50
},
"_enabled": true,
"__prefab": {
"__id__": 70
"__id__": 68
},
"_contentSize": {
"__type__": "cc.Size",
@@ -1820,11 +1759,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 52
"__id__": 50
},
"_enabled": true,
"__prefab": {
"__id__": 72
"__id__": 70
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -1859,75 +1798,17 @@
"__type__": "cc.CompPrefabInfo",
"fileId": "d4MqRKZDdAO4WY6+Sxj+kt"
},
{
"__type__": "cc.Button",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 52
},
"_enabled": true,
"__prefab": {
"__id__": 74
},
"clickEvents": [],
"_interactable": true,
"_transition": 1,
"_normalColor": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_hoverColor": {
"__type__": "cc.Color",
"r": 211,
"g": 211,
"b": 211,
"a": 255
},
"_pressedColor": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_disabledColor": {
"__type__": "cc.Color",
"r": 124,
"g": 124,
"b": 124,
"a": 255
},
"_normalSprite": null,
"_hoverSprite": null,
"_pressedSprite": null,
"_disabledSprite": null,
"_duration": 0.1,
"_zoomScale": 1.2,
"_target": {
"__id__": 52
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "5fdbzBCl5Mb7C4+dO/3Gon"
},
{
"__type__": "cc.Widget",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 52
"__id__": 50
},
"_enabled": true,
"__prefab": {
"__id__": 76
"__id__": 72
},
"_alignFlags": 36,
"_target": null,
@@ -1966,6 +1847,94 @@
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.Node",
"_name": "ShopPanelEntry",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 3
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 75
}
],
"_prefab": {
"__id__": 77
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 328.5,
"y": -199.837,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 33554432,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": ""
},
{
"__type__": "cc.UITransform",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 74
},
"_enabled": true,
"__prefab": {
"__id__": 76
},
"_contentSize": {
"__type__": "cc.Size",
"width": 231.6,
"height": 173.9
},
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "59KyF4h5xO2J5FwEAGulRT"
},
{
"__type__": "cc.PrefabInfo",
"root": {
"__id__": 1
},
"asset": {
"__id__": 0
},
"fileId": "6brjVZTrlJO7ODE5OMYlQz",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
"__type__": "cc.UITransform",
"_name": "",
+2 -2
View File
@@ -1,6 +1,6 @@
themepanel.title Girls Online 在线选妃+ऑनलाइन लड़कियाँFilles en ligneMädchen Onlinethemepanel.recomandtextDaily Recomand 每日推荐%दैनिक सिफारिशRecommandation quotidienneTägliche Empfehlunggirllistpanel.title Girl List 技师列表,लड़कियों की सूचीListe des filles␍Mädchenlistegirldetailpanel.chatbtn
themepanel.title Girls Online 在线选妃+ऑनलाइन लड़कियाà¤Filles en ligneMädchen Onlinethemepanel.recomandtextDaily Recomand æ¯æ—¥æŽ¨è%दैनिक सिफारिशRecommandation quotidienneTägliche Empfehlunggirllistpanel.title Girl List 技师列表,लड़कियों की सूचीListe des filles␍Mädchenlistegirldetailpanel.chatbtn
Send Msgs! å‘逿¶ˆæ¯संदेश भेजेंEnvoyer un messageNachricht sendengirldetailpanel.nameName:åå­—:
नाम:Nom:Name:girldetailpanel.ageAge:年龄:␍उम्र:Âge:Alter:girldetailpanel.desc Description:␍自我介绍:विवरण: Description:␍Beschreibung:chatpanel.inputplaceholder Messages! 请输入:संदेश लिखेंÉcrivez ici...Nachricht eingebensettingpanel.titleSelect Language 选择语言भाषा चुनेंChoisir la langueSprache wählen␍category_1001 Mature Lady熟女%परिपक्व महिला Femme mature
नाम:Nom:Name:girldetailpanel.ageAge:年龄:␍उमà¥à¤°:Âge:Alter:girldetailpanel.desc Description:␍自我介ç»:विवरण: Description:␍Beschreibung:chatpanel.inputplaceholder Messages! 请输入:संदेश लिखेंÉcrivez ici...Nachricht eingebensettingpanel.titleSelect Language 选择语言भाषा चà¥à¤¨à¥‡à¤‚Choisir la langueSprache wählenpurchasepanel.titleShop商店दà¥à¤•ानBoutique Geschäftpurchasepanel.vip_leftleft${leftTime}剩余${leftTime}बचे हà¥à¤${leftTime}reste${leftTime}verbleibend${leftTime}purchasepanel.vip_nameVIP Card 特æƒå¡"वीआईपी कारà¥à¤¡ Carte VIP VIP-Kartepurchasepanel.vip_descAPurchase VIP card to chat with any girl unlimitedly within 7 daysR购买特æƒå¡åŽåœ¨7天内å¯ä¸Žä»»æ„对象进行èŠå¤©ï¼Œä¸”èŠå¤©æ¬¡æ•°ä¸é™€òवीआईपी कारà¥à¤¡ खरीदने के बाद, आप 7 दिनों के भीतर किसी भी लड़की के साथ बिना सीमा के चैट कर सकते हैंZAchetez la carte VIP pour discuter avec n'importe quelle fille sans limite pendant 7 jours^VIP-Karte kaufen, um innerhalb von 7 Tagen ohne Einschränkungen mit jedem Mädchen zu chattenpurchasepanel.get_diamond_text␍Get Diamonds:␍获å–钻石:0हीरे पà¥à¤°à¤¾à¤ªà¥à¤¤ करें:Obtenir des diamants:Diamanten erhalten:purchasepanel.buy_diamond_btn Buy Diamonds 购买钻石हीरे खरीदेंAcheter des diamantsDiamanten kaufenpurchasepanel.dayday天 दिनjoursTagepurchasepanel.hourhourså°æ—¶ घंटेheuresStundenpurchasepanel.minutemin分 मिनटminutesMinuten␍category_1001 Mature Lady熟女%परिपकà¥à¤µ महिला Femme mature
Reife Dame␍category_1002Eighteen18å²अठारह वरà¥à¤· Dix-huit ansAchtzehn␍category_1003 Hot Mommy辣妈सेकà¥à¤¸à¥€ माà¤
Maman sexy Heiße Mama␍category_1004Bindingæ†ç»‘ बंधनBondageFesseln␍category_1005 Public Fight 公众野战+सारà¥à¤µà¤œà¤¨à¤¿à¤• संभोग Sexe publicÖffentlicher Sex␍category_1006Cartoonå¡é€šकारà¥à¤Ÿà¥‚न␍Dessin animé Zeichentrick␍category_1007 Up Coming Up Comingकारà¥à¤Ÿà¥‚न␍Dessin animé Zeichentrickgirl_10001_name Anaya Kapoor 阿纳雅आनà¥à¤¯à¤¾ कपूर Anaya Kapoor Anaya Kapoorgirl_10002_name Meher Joshi梅尔मेहर जोशी Meher Joshi Meher Joshigirl_10003_name
Sana Reddyè¨å¨œसाना रेडà¥à¤¡à¥€