多语言模块

This commit is contained in:
2025-08-12 19:49:50 +08:00
parent 83370bd0ef
commit 707946304e
43 changed files with 1977 additions and 1305 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-9
View File
@@ -1,9 +0,0 @@
[
{"key":"/apple", "en":"apple", "zh":"苹果"},
{"key":"/abc", "en":"apple", "zh":"苹果"},
{"key":"/def", "en":"apple", "zh":"苹果"},
{"key":"key_name", "en":"apple", "zh":"苹果"},
{"key":"test/a", "en":"apple", "zh":"苹果"},
{"key":"name", "en":"apple", "zh":"苹果"},
{"key":"/banana", "en":"banana", "zh":"香蕉"}
]
Binary file not shown.
+4
View File
@@ -0,0 +1,4 @@
[
{ "key": "/apple", "en": "apple", "zh": "苹果" },
{ "key": "/abc", "en": "apple", "zh": "苹果" }
]
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+3 -1
View File
@@ -6,6 +6,8 @@ dotnet %LUBAN_DLL% ^
-t all ^
-d json ^
--conf %CONF_ROOT%\luban.conf ^
-x outputDataDir=output
-x outputDataDir=output
pause
-14
View File
@@ -1,14 +0,0 @@
[
{
"id": 1001,
"name": "道具1",
"desc": "描述1",
"count": 10
},
{
"id": 1002,
"name": "道具2",
"desc": "描述2",
"count": 100
}
]
-14
View File
@@ -1,14 +0,0 @@
[
{
"id": 1001,
"name": "道具1",
"desc": "碎片",
"count": 10
},
{
"id": 1002,
"name": "道具2",
"desc": "金币",
"count": 100
}
]
+6 -12
View File
@@ -1,36 +1,30 @@
[
{
"id": 10001,
"name": "Anaya Kapoor",
"nameKey": "girl_10001_name",
"age": "29",
"category": 0,
"tag": [
"Hot,Horny"
],
"tagKey": "girl_10001_tag",
"priceType": 0,
"avatarPath": "Image/Girls/10001/Avatar/10001_avatar",
"starCount": 5
},
{
"id": 10002,
"name": "Meher Joshi",
"nameKey": "girl_10002_name",
"age": "26",
"category": 0,
"tag": [
"Earth-tone linens,handcrafted jewelry"
],
"tagKey": "girl_10002_tag",
"priceType": 1,
"avatarPath": "Image/Girls/10002/Avatar/10002_avatar",
"starCount": 4
},
{
"id": 10003,
"name": "Sana Reddy",
"nameKey": "girl_10003_name",
"age": "25",
"category": 0,
"tag": [
"Singer-Songwriter,Dancer"
],
"tagKey": "girl_10003_tag",
"priceType": 2,
"avatarPath": "Image/Girls/10003/Avatar/10003_avatar",
"starCount": 3
+162
View File
@@ -0,0 +1,162 @@
[
{
"key": "themepanel.title",
"language_en": "Girls Online",
"language_cn": "在线选妃",
"language_hi": "ऑनलाइन लड़कियाँ",
"language_fr": "Filles en ligne",
"language_de": "Mädchen Online"
},
{
"key": "themepanel.recomandtext",
"language_en": "Daily Recomand",
"language_cn": "每日推荐",
"language_hi": "दैनिक सिफारिश",
"language_fr": "Recommandation quotidienne",
"language_de": "Tägliche Empfehlung"
},
{
"key": "girllistpanel.title",
"language_en": "Girl List",
"language_cn": "技师列表",
"language_hi": "लड़कियों की सूची",
"language_fr": "Liste des filles",
"language_de": "Mädchenliste"
},
{
"key": "girldetailpanel.chatbtn",
"language_en": "Send Msgs!",
"language_cn": "发送消息",
"language_hi": "संदेश भेजें",
"language_fr": "Envoyer un message",
"language_de": "Nachricht senden"
},
{
"key": "girldetailpanel.name",
"language_en": "Name:",
"language_cn": "名字:",
"language_hi": "नाम:",
"language_fr": "Nom :",
"language_de": "Name:"
},
{
"key": "girldetailpanel.age",
"language_en": "Age:",
"language_cn": "年龄:",
"language_hi": "उम्र:",
"language_fr": "Âge :",
"language_de": "Alter:"
},
{
"key": "girldetailpanel.desc",
"language_en": "Description:",
"language_cn": "自我介绍:",
"language_hi": "विवरण:",
"language_fr": "Description :",
"language_de": "Beschreibung:"
},
{
"key": "chatpanel.inputplaceholder",
"language_en": "Messages!",
"language_cn": "请输入:",
"language_hi": "संदेश लिखें",
"language_fr": "Écrivez ici...",
"language_de": "Nachricht eingeben"
},
{
"key": "category_1001",
"language_en": "mature_lady",
"language_cn": "熟女",
"language_hi": "परिपक्व महिला",
"language_fr": "Femme mature",
"language_de": "Reife Dame"
},
{
"key": "category_1002",
"language_en": "eighteen",
"language_cn": "18岁",
"language_hi": "अठारह वर्ष",
"language_fr": "Dix-huit ans",
"language_de": "Achtzehn"
},
{
"key": "category_1003",
"language_en": "hot_mommy",
"language_cn": "辣妈",
"language_hi": "सेक्सी माँ",
"language_fr": "Maman sexy",
"language_de": "Heiße Mama"
},
{
"key": "category_1004",
"language_en": "binding",
"language_cn": "捆绑",
"language_hi": "बंधन",
"language_fr": "Bondage",
"language_de": "Fesseln"
},
{
"key": "category_1005",
"language_en": "public_fight",
"language_cn": "公众野战",
"language_hi": "सार्वजनिक संभोग",
"language_fr": "Sexe public",
"language_de": "Öffentlicher Sex"
},
{
"key": "category_1006",
"language_en": "cartoon",
"language_cn": "卡通",
"language_hi": "कार्टून",
"language_fr": "Dessin animé",
"language_de": "Zeichentrick"
},
{
"key": "girl_10001_name",
"language_en": "Anaya Kapoor",
"language_cn": "阿纳雅",
"language_hi": "आन्या कपूर",
"language_fr": "Anaya Kapoor",
"language_de": "Anaya Kapoor"
},
{
"key": "girl_10002_name",
"language_en": "Meher Joshi",
"language_cn": "梅尔",
"language_hi": "मेहर जोशी",
"language_fr": "Meher Joshi",
"language_de": "Meher Joshi"
},
{
"key": "girl_10003_name",
"language_en": "Sana Reddy",
"language_cn": "萨娜",
"language_hi": "साना रेड्डी",
"language_fr": "Sana Reddy",
"language_de": "Sana Reddy"
},
{
"key": "girl_10001_tag",
"language_en": "Hot|Horny",
"language_cn": "火辣|饥渴",
"language_hi": "सेक्सी|कामुक",
"language_fr": "Chaude|Excitée",
"language_de": "Heiß|Geil"
},
{
"key": "girl_10002_tag",
"language_en": "Earth-tone linens,handcrafted jewelry",
"language_cn": "土色亚麻制品|手工珠宝",
"language_hi": "भूरे रंग के लिनन|हस्तनिर्मित गहने",
"language_fr": "Linge terreux,Bijoux artisanaux",
"language_de": "Erdfarbene Leinen,Handgemachter Schmuck"
},
{
"key": "girl_10003_tag",
"language_en": "Singer-Songwriter,Dancer",
"language_cn": "舞者|歌手",
"language_hi": "गायक-गीतकार|नर्तकी",
"language_fr": "Chanteuse-compositrice,Danseuse",
"language_de": "Sängerin-Songwriterin,Tänzerin"
}
]
+6
View File
@@ -1,6 +1,7 @@
[
{
"id": 1001,
"key": "category_1001",
"name": "mature_lady",
"category": 0,
"isRelease": true,
@@ -8,6 +9,7 @@
},
{
"id": 1002,
"key": "category_1002",
"name": "eighteen",
"category": 1,
"isRelease": false,
@@ -15,6 +17,7 @@
},
{
"id": 1003,
"key": "category_1003",
"name": "hot_mommy",
"category": 2,
"isRelease": false,
@@ -22,6 +25,7 @@
},
{
"id": 1004,
"key": "category_1004",
"name": "binding",
"category": 3,
"isRelease": false,
@@ -29,6 +33,7 @@
},
{
"id": 1005,
"key": "category_1005",
"name": "public_fight",
"category": 4,
"isRelease": false,
@@ -36,6 +41,7 @@
},
{
"id": 1006,
"key": "category_1006",
"name": "cartoon",
"category": 5,
"isRelease": false,
+134
View File
@@ -0,0 +1,134 @@
import { _decorator, Component, Label, Node } from "cc";
import LanguageUtils, { LanguageType } from "./LanguageUtils";
const { ccclass, property, requireComponent } = _decorator;
@ccclass("LanguageLabel")
@requireComponent(Label)
export class LanguageLabel extends Component {
@property({
displayName: "Language Key",
tooltip: "多语言配置表中的key值",
})
private languageKey: string = "";
@property({
displayName: "Default Text",
tooltip: "如果找不到对应的翻译时显示的默认文本",
})
private defaultText: string = "";
@property({
displayName: "Auto Update",
tooltip: "是否自动监听语言变化并更新",
})
private autoUpdate: boolean = true;
private label: Label = null;
private params: { [key: string]: any } = null;
onLoad() {
this.label = this.getComponent(Label);
if (!this.label) {
console.error("LanguageLabel: Label component not found!");
return;
}
this.updateText();
if (this.autoUpdate) {
LanguageUtils.onLanguageChanged(this.onLanguageChanged, this);
}
}
onDestroy() {
if (this.autoUpdate) {
LanguageUtils.offLanguageChanged(this.onLanguageChanged, this);
}
}
onEnable() {
this.updateText();
}
private onLanguageChanged(language: LanguageType) {
this.updateText();
}
private updateText() {
if (!this.label || !this.languageKey) {
return;
}
let text: string;
if (this.params && Object.keys(this.params).length > 0) {
text = LanguageUtils.getTextWithParams(
this.languageKey,
this.params,
this.defaultText
);
} else {
text = LanguageUtils.getText(this.languageKey, this.defaultText);
}
this.label.string = text;
}
/**
* 设置语言key
*/
public setLanguageKey(key: string) {
this.languageKey = key;
this.updateText();
}
/**
* 设置文本参数(用于替换文本中的占位符)
* @param params 参数对象,如 {name: "玩家", score: 100}
*/
public setParams(params: { [key: string]: any }) {
this.params = params;
this.updateText();
}
/**
* 添加或更新单个参数
*/
public setParam(key: string, value: any) {
if (!this.params) {
this.params = {};
}
this.params[key] = value;
this.updateText();
}
/**
* 清除所有参数
*/
public clearParams() {
this.params = null;
this.updateText();
}
/**
* 手动刷新文本
*/
public refresh() {
this.updateText();
}
/**
* 获取当前的语言key
*/
public getLanguageKey(): string {
return this.languageKey;
}
/**
* 设置默认文本
*/
public setDefaultText(text: string) {
this.defaultText = text;
this.updateText();
}
}
@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "d7e4f3a2-8b9c-4d2e-a1f6-3c5e9d7b8a4f",
"files": [],
"subMetas": {},
"userData": {}
}
+201
View File
@@ -0,0 +1,201 @@
import { _decorator, sys } from "cc";
import { Language } from "../../schema/schema";
import ConfigManager from "../../chat18x/manager/ConfigManager";
import { CommonConfig } from "../Config/CommonConfig";
import li_EventManager from "./li_EventManager";
import Utils from "./Utils";
import { InnerMsgCode } from "../Config/InnerMsgCode";
const { ccclass } = _decorator;
export enum LanguageType {
EN = "en", // 英文
CN = "cn", // 中文
HI = "hi", // 印地语
FR = "fr", // 法语
DE = "de", //德语
}
export enum LanguageEvent {
LANGUAGE_CHANGED = "LANGUAGE_CHANGED",
}
@ccclass("LanguageUtils")
export default class LanguageUtils {
private static currentLanguage: LanguageType = LanguageType.EN;
private static languageCache: Map<string, string> = new Map();
private static isInitialized: boolean = false;
public static get CurrentLanguage(): LanguageType {
if (!this.isInitialized) {
this.init();
}
return this.currentLanguage;
}
private static init() {
if (this.isInitialized) return;
this.isInitialized = true;
this.loadLanguageSetting();
}
private static loadLanguageSetting() {
const savedLanguage = sys.localStorage.getItem(
CommonConfig.StorageConfig.LANGUAGE_SETTING
);
if (
savedLanguage &&
Object.values(LanguageType).includes(savedLanguage as LanguageType)
) {
this.currentLanguage = savedLanguage as LanguageType;
} else {
this.detectSystemLanguage();
}
console.log(
"LanguageUtils initialized with language:",
this.currentLanguage
);
}
private static detectSystemLanguage() {
const systemLanguage = sys.language;
if (systemLanguage.startsWith("zh")) {
this.currentLanguage = LanguageType.CN;
} else if (systemLanguage.startsWith("hi")) {
this.currentLanguage = LanguageType.HI;
} else if (systemLanguage.startsWith("fr")) {
this.currentLanguage = LanguageType.FR;
} else if (systemLanguage.startsWith("de")) {
this.currentLanguage = LanguageType.DE;
} else {
this.currentLanguage = LanguageType.EN;
}
}
public static setLanguage(language: LanguageType): void {
if (!this.isInitialized) {
this.init();
}
if (this.currentLanguage === language) {
return;
}
this.currentLanguage = language;
this.languageCache.clear();
sys.localStorage.setItem(
CommonConfig.StorageConfig.LANGUAGE_SETTING,
language
);
Utils.sendInnerMsg(InnerMsgCode.LanguageChange, language);
console.log("Language changed to:", language);
}
public static getText(key: string, defaultText: string = ""): string {
if (!this.isInitialized) {
this.init();
}
if (!key) {
return defaultText;
}
if (this.languageCache.has(key)) {
return this.languageCache.get(key);
}
if (!ConfigManager.tables || !ConfigManager.tables.TbLanguage) {
console.warn("Language table not loaded yet");
return defaultText || key;
}
const languageData = ConfigManager.tables.TbLanguage.get(key);
if (!languageData) {
console.warn(`Language key not found: ${key}`);
return defaultText || key;
}
let text: string = "";
switch (this.currentLanguage) {
case LanguageType.EN:
text = languageData.languageEn;
break;
case LanguageType.CN:
text = languageData.languageCn;
break;
case LanguageType.HI:
text = languageData.languageHi;
break;
case LanguageType.FR:
text = languageData.languageFr;
break;
case LanguageType.DE:
text = languageData.languageDe;
break;
default:
text = languageData.languageEn;
}
if (!text || text.length === 0) {
text = languageData.languageEn || defaultText || key;
}
this.languageCache.set(key, text);
return text;
}
public static getTextWithParams(
key: string,
params: { [key: string]: any },
defaultText: string = ""
): string {
let text = this.getText(key, defaultText);
for (let paramKey in params) {
const regex = new RegExp(`{${paramKey}}`, "g");
text = text.replace(regex, params[paramKey].toString());
}
return text;
}
public static getAvailableLanguages(): LanguageType[] {
return Object.values(LanguageType);
}
public static getLanguageDisplayName(language: LanguageType): string {
switch (language) {
case LanguageType.EN:
return "English";
case LanguageType.CN:
return "中文";
case LanguageType.HI:
return "हिंदी";
case LanguageType.FR:
return "Français";
case LanguageType.DE:
return "Deutsch";
default:
return language;
}
}
public static clearCache(): void {
this.languageCache.clear();
}
public static onLanguageChanged(
callback: (language: LanguageType) => void,
target: any
): void {
Utils.addInnerEL(InnerMsgCode.LanguageChange, target, callback);
}
public static offLanguageChanged(
callback: (language: LanguageType) => void,
target: any
): void {
Utils.removeInnerEL(InnerMsgCode.LanguageChange, target, callback);
}
}
@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "c8b5e7a2-4f3d-4e8b-9c2a-1d6f5e8a7b9c",
"files": [],
"subMetas": {},
"userData": {}
}
@@ -30,6 +30,7 @@ export namespace CommonConfig {
DD_LEVELOPER = StorageConfigUtil.BaseData + 16, //进入关卡且首次进度>0时(或第一次操作)
GUIDE_MAIN = StorageConfigUtil.BaseData + 17, //主界面引导是否完成
GUIDE_TALK = StorageConfigUtil.BaseData + 18, //聊天界面引导是否完成
LANGUAGE_SETTING = StorageConfigUtil.BaseData + 19, //语言设置
DOUYIN_SIDEBAR = StorageConfigUtil.Channel + 1, //抖音渠道侧边栏奖励是否领取
}
@@ -26,4 +26,5 @@ export enum InnerMsgCode {
Chat_DialogRefresh,
SimplePlayVide,
LanguageChange,
}
+222 -195
View File
@@ -1,213 +1,240 @@
import { _decorator, AssetManager, AudioClip, Button, Component, ImageAsset, JsonAsset, Label, Material, Node, Prefab, ProgressBar, Sprite, SpriteFrame } from 'cc';
import { GButton } from '../../Main/Common/GButton';
import ResManager from '../../Main/Manager/ResManager';
import Resource from '../../Main/Config/Resource';
import { SDKManager } from '../../Main/Channel/SDKManager';
import HttpUnit from '../../Main/Common/HttpUnit';
import GlobalValue from '../../Main/Common/GlobalValue';
import Utils from '../../Main/Common/Utils';
import { InnerMsgCode } from '../../Main/Config/InnerMsgCode';
import { promptItem } from '../Item/promptItem';
import {
_decorator,
AssetManager,
AudioClip,
Button,
Component,
ImageAsset,
JsonAsset,
Label,
Material,
Node,
Prefab,
ProgressBar,
Sprite,
SpriteFrame,
} from "cc";
import { GButton } from "../../Main/Common/GButton";
import ResManager from "../../Main/Manager/ResManager";
import Resource from "../../Main/Config/Resource";
import { SDKManager } from "../../Main/Channel/SDKManager";
import HttpUnit from "../../Main/Common/HttpUnit";
import GlobalValue from "../../Main/Common/GlobalValue";
import Utils from "../../Main/Common/Utils";
import { InnerMsgCode } from "../../Main/Config/InnerMsgCode";
import { promptItem } from "../Item/promptItem";
import LanguageUtils, { LanguageType } from "../../Main/Common/LanguageUtils";
const { ccclass, property } = _decorator;
@ccclass('PreloadUI')
@ccclass("PreloadUI")
export class PreloadUI extends Component {
private checkFinish = true; //检查完成
private preloadFinish = false; //资源加载完成
private loginFinish = false; //登录完成
private checkFinish = true; //检查完成
private preloadFinish = false; //资源加载完成
private loginFinish = false; //登录完成
private jinduBar: Node = null;
private jinduFilled: Sprite = null;
private LabProgress: Label = null;
//private btnLogin: Sprite = null; //登录按钮
private jinduBar: Node = null;
private jinduFilled: Sprite = null;
private LabProgress: Label = null;
//private btnLogin: Sprite = null; //登录按钮
start() {
//Utils.addInnerEL(InnerMsgCode.UI_ShowPrompt, this, this.resiveShowPrompt)
start() {
//Utils.addInnerEL(InnerMsgCode.UI_ShowPrompt, this, this.resiveShowPrompt)
this.jinduBar = this.node.getChildByName("jinduBar");
this.jinduFilled = this.jinduBar.getChildByName("jinduFilled").getComponent(Sprite);
this.LabProgress = this.node.getChildByName("LabProgress").getComponent(Label);
//this.btnLogin = this.node.getChildByName("btnLogin").getComponent(Sprite);
//适配背景图
let BG = this.node.getChildByName("BG");
Utils.adjustBgPixelRatio(BG, 1)
this.jinduBar = this.node.getChildByName("jinduBar");
this.jinduFilled = this.jinduBar
.getChildByName("jinduFilled")
.getComponent(Sprite);
this.LabProgress = this.node
.getChildByName("LabProgress")
.getComponent(Label);
//this.btnLogin = this.node.getChildByName("btnLogin").getComponent(Sprite);
this.jinduFilled.fillRange = 0;
//this.btnLogin.node.active = false;
//适配背景图
let BG = this.node.getChildByName("BG");
Utils.adjustBgPixelRatio(BG, 1);
this.preloadFiles()
this.jinduFilled.fillRange = 0;
//this.btnLogin.node.active = false;
this.preloadFiles();
LanguageUtils.setLanguage(LanguageType.CN);
}
protected onDestroy(): void {
Utils.removeInnerEL(
InnerMsgCode.UI_ShowPrompt,
this,
this.resiveShowPrompt
);
}
update(deltaTime: number) {
if (this.checkFinish) {
if (this.preloadFinish && this.loginFinish) {
this.checkFinish = false;
this.enterGame();
}
}
}
protected onDestroy(): void {
Utils.removeInnerEL(InnerMsgCode.UI_ShowPrompt, this, this.resiveShowPrompt)
}
/**收到飘字消息 */
resiveShowPrompt(data: any) {
let msg = data.text;
let self = this;
ResManager.I.loadSubpackagePrefab("item/promptItem", (n_node: Node) => {
self.node.addChild(n_node);
let pItem = n_node.getComponent(promptItem);
pItem.setLabel(msg);
});
}
update(deltaTime: number) {
if (this.checkFinish) {
if (this.preloadFinish && this.loginFinish) {
this.checkFinish = false
this.enterGame()
}
//预加载文件
preloadFiles() {
let preloadTab = [
{ path: "ChatPanel", bundleName: "Chat18x", ftype: Prefab },
{ path: "GirlDetailPanel", bundleName: "Chat18x", ftype: Prefab },
{ path: "GirlListPanel", bundleName: "Chat18x", ftype: Prefab },
// {path:"Music/music_interface", bundleName: "Audio", ftype: AudioClip},
// {path:"bg/mengli_stage_bg", bundleName: "Raw", ftype: ImageAsset},
// {path:"cg0/mengli_0_cg", bundleName: "Raw", ftype: ImageAsset},
// {path:"cg1/mengli_1_cg", bundleName: "Raw", ftype: ImageAsset},
// {path:"cg2/mengli_2_cg", bundleName: "Raw", ftype: ImageAsset},
// {path:"cg3/mengli_3_cg", bundleName: "Raw", ftype: ImageAsset},
// {path:"emo_1/mengli_shy", bundleName: "Raw", ftype: ImageAsset},
// {path:"emo_2/mengli_laugh", bundleName: "Raw", ftype: ImageAsset},
// {path:"emo_3/mengli_disgust", bundleName: "Raw", ftype: ImageAsset},
// {path:"role/mengli_default", bundleName: "Raw", ftype: ImageAsset},
// {path:"Zjm/raw1", bundleName: "Raw", ftype: ImageAsset},
// {path:"touming", bundleName: "common", ftype: ImageAsset},
// // {path:"chanpin_1_0", bundleName: "daoju", ftype: ImageAsset}, //有合图加载失败
// {path:"zjm_1", bundleName: "Zhujiemian", ftype: ImageAsset},
// {path:"zjm_19", bundleName: "Zhujiemian", ftype: ImageAsset},
// {path:"zjm_30", bundleName: "Zhujiemian", ftype: ImageAsset},
// {path:"mohu", bundleName: "Materials", ftype: Material},
// {path:"UI/Cross/Cross_UI", bundleName: "PB", ftype: Prefab},
// {path:"UI/StartUI/Start_UI", bundleName: "PB", ftype: Prefab},
// {path:"commonGlobal", bundleName: "DataTable", ftype: JsonAsset},
];
let num_prefab = 0; //已加载数量
let num_succeed = 0; //加载成功数量
let preloadFunc = () => {
if (num_prefab < preloadTab.length) {
let cfg = preloadTab[num_prefab];
ResManager.I.preLoadSubpackageFile(
cfg.path,
cfg.bundleName,
cfg.ftype,
(ret) => {
num_prefab++;
num_succeed++;
let percent = 0.45 * (num_prefab / preloadTab.length);
this.showLoadProgress(0.55 + percent);
console.log("加载成功:", cfg.path);
preloadFunc();
},
(err) => {
num_prefab++;
console.log("加载失败:", err);
}
);
} else {
if (num_succeed >= num_prefab) {
this.loadDataTable();
}
}
}
};
preloadFunc();
}
/**收到飘字消息 */
resiveShowPrompt(data: any) {
let msg = data.text
let self = this
ResManager.I.loadSubpackagePrefab("item/promptItem", (n_node: Node)=>{
self.node.addChild(n_node)
let pItem = n_node.getComponent(promptItem)
pItem.setLabel(msg)
})
}
//加载配置表
loadDataTable() {
let dataArr = [
//"commonGlobal",
// "levelHole",
//"Music",
//"Sound",
];
//配置表使用方法: let cfgs = Resource.getConfig("Sound")
let num_prefab = 0;
let preloadFunc = () => {
if (num_prefab < dataArr.length) {
let cfgname = dataArr[num_prefab];
ResManager.I.loadSubpackageDataTable(cfgname, (ret: JsonAsset) => {
num_prefab++;
Resource.addSubJsonConfig(cfgname, ret.json);
preloadFunc();
});
} else {
this.preloadFinish = true;
this.onLogin();
}
};
preloadFunc();
}
//预加载文件
preloadFiles() {
let preloadTab = [
{path:"ChatPanel", bundleName: "Chat18x", ftype: Prefab},
{path:"GirlDetailPanel", bundleName: "Chat18x", ftype: Prefab},
{path:"GirlListPanel", bundleName: "Chat18x", ftype: Prefab},
// {path:"Music/music_interface", bundleName: "Audio", ftype: AudioClip},
// {path:"bg/mengli_stage_bg", bundleName: "Raw", ftype: ImageAsset},
// {path:"cg0/mengli_0_cg", bundleName: "Raw", ftype: ImageAsset},
// {path:"cg1/mengli_1_cg", bundleName: "Raw", ftype: ImageAsset},
// {path:"cg2/mengli_2_cg", bundleName: "Raw", ftype: ImageAsset},
// {path:"cg3/mengli_3_cg", bundleName: "Raw", ftype: ImageAsset},
// {path:"emo_1/mengli_shy", bundleName: "Raw", ftype: ImageAsset},
// {path:"emo_2/mengli_laugh", bundleName: "Raw", ftype: ImageAsset},
// {path:"emo_3/mengli_disgust", bundleName: "Raw", ftype: ImageAsset},
// {path:"role/mengli_default", bundleName: "Raw", ftype: ImageAsset},
// {path:"Zjm/raw1", bundleName: "Raw", ftype: ImageAsset},
// {path:"touming", bundleName: "common", ftype: ImageAsset},
// // {path:"chanpin_1_0", bundleName: "daoju", ftype: ImageAsset}, //有合图加载失败
// {path:"zjm_1", bundleName: "Zhujiemian", ftype: ImageAsset},
// {path:"zjm_19", bundleName: "Zhujiemian", ftype: ImageAsset},
// {path:"zjm_30", bundleName: "Zhujiemian", ftype: ImageAsset},
// {path:"mohu", bundleName: "Materials", ftype: Material},
// {path:"UI/Cross/Cross_UI", bundleName: "PB", ftype: Prefab},
// {path:"UI/StartUI/Start_UI", bundleName: "PB", ftype: Prefab},
// {path:"commonGlobal", bundleName: "DataTable", ftype: JsonAsset},
];
let num_prefab = 0; //已加载数量
let num_succeed = 0;//加载成功数量
let preloadFunc = () => {
if (num_prefab < preloadTab.length) {
let cfg = preloadTab[num_prefab]
ResManager.I.preLoadSubpackageFile(cfg.path, cfg.bundleName, cfg.ftype, (ret) => {
num_prefab++;
num_succeed++;
let percent = 0.45 * (num_prefab / preloadTab.length)
this.showLoadProgress(0.55 + percent);
console.log("加载成功:", cfg.path);
preloadFunc();
}, (err)=>{
num_prefab++;
console.log("加载失败:", err);
});
} else {
if (num_succeed >= num_prefab) {
this.loadDataTable();
}
}
}
preloadFunc();
}
//显示加载进度
showLoadProgress(percent) {
this.jinduFilled.fillRange = percent;
}
//加载配置表
loadDataTable(){
let dataArr = [
//"commonGlobal",
// "levelHole",
//"Music",
//"Sound",
]
//登录
onLogin() {
//初始化SDK信息
// SDKManager.init(() => {
// //检测是否有授权,有授权直接登录,没有授权就先进主界面,到主界面获取权限
// SDKManager.checkAutoSetting("userInfo", (ishave) => {
// if (ishave) {
// console.log("有授权,直接登录")
// HttpUnit.ins.login((loginData) => {
// if (loginData == null) {
// //登录失败,这里处理重复登录的逻辑
// } else {
// this.loginFinish = true
// }
// })
// } else {
// console.log("没有授权,等待授权后登录")
// // this.loginFinish = true
// this.jinduBar.active = false
// this.LabProgress.node.active = false
// //登录按钮
// this.btnLogin.node.active = true
// let loginPath = ""
// if (SDKManager.isWenxin()) {
// loginPath = "login1"
// } else if (SDKManager.isByteDance()) {
// loginPath = "login2"
// } else if (SDKManager.isKuaishou()) {
// loginPath = "login3"
// }
// ResManager.I.changeResourceSpriteFrame(this.btnLogin, loginPath)
//
// HttpUnit.ins.login((loginData) => {
// if (loginData == null) {
// //登录失败,这里处理重复登录的逻辑
// } else {
// this.loginFinish = true
// }
// })
// }
// })
// })
this.loginFinish = true;
}
//配置表使用方法: let cfgs = Resource.getConfig("Sound")
let num_prefab = 0;
let preloadFunc = () => {
if (num_prefab < dataArr.length) {
let cfgname = dataArr[num_prefab]
ResManager.I.loadSubpackageDataTable(cfgname, (ret: JsonAsset) => {
num_prefab++;
Resource.addSubJsonConfig(cfgname, ret.json)
preloadFunc();
});
} else {
this.preloadFinish = true;
this.onLogin();
}
}
preloadFunc();
}
//显示加载进度
showLoadProgress(percent) {
this.jinduFilled.fillRange = percent;
}
//登录
onLogin() {
//初始化SDK信息
// SDKManager.init(() => {
// //检测是否有授权,有授权直接登录,没有授权就先进主界面,到主界面获取权限
// SDKManager.checkAutoSetting("userInfo", (ishave) => {
// if (ishave) {
// console.log("有授权,直接登录")
// HttpUnit.ins.login((loginData) => {
// if (loginData == null) {
// //登录失败,这里处理重复登录的逻辑
// } else {
// this.loginFinish = true
// }
// })
// } else {
// console.log("没有授权,等待授权后登录")
// // this.loginFinish = true
// this.jinduBar.active = false
// this.LabProgress.node.active = false
// //登录按钮
// this.btnLogin.node.active = true
// let loginPath = ""
// if (SDKManager.isWenxin()) {
// loginPath = "login1"
// } else if (SDKManager.isByteDance()) {
// loginPath = "login2"
// } else if (SDKManager.isKuaishou()) {
// loginPath = "login3"
// }
// ResManager.I.changeResourceSpriteFrame(this.btnLogin, loginPath)
//
// HttpUnit.ins.login((loginData) => {
// if (loginData == null) {
// //登录失败,这里处理重复登录的逻辑
// } else {
// this.loginFinish = true
// }
// })
// }
// })
// })
this.loginFinish = true;
}
enterGame() {
//let islogin = HttpUnit.IsLogin();
//console.log("进入游戏,登录状态:", islogin);
this.jinduBar.active = false
this.LabProgress.node.active = false
//this.btnLogin.node.active = false
// if (islogin) {
// } else {
// //没登录成功,先进主界面,在主界面里进行登录
// }
ResManager.I.goMainScene(); //进入下一个场景
// ResManager.I.goCustomScene("Test2DScene"); //进入自定义场景
}
enterGame() {
//let islogin = HttpUnit.IsLogin();
//console.log("进入游戏,登录状态:", islogin);
this.jinduBar.active = false;
this.LabProgress.node.active = false;
//this.btnLogin.node.active = false
// if (islogin) {
// } else {
// //没登录成功,先进主界面,在主界面里进行登录
// }
ResManager.I.goMainScene(); //进入下一个场景
// ResManager.I.goCustomScene("Test2DScene"); //进入自定义场景
}
}
+13 -1
View File
@@ -22,6 +22,7 @@ import { ImagePopup } from "../components/ImagePopup";
import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
import { VideoRoleType } from "db://assets/Scripts/Main/Common/GlobalValue";
import ConfigManager from "../../manager/ConfigManager";
import LanguageUtils from "../../../Main/Common/LanguageUtils";
const { ccclass, property } = _decorator;
@ccclass("ChatPanel")
@@ -46,6 +47,7 @@ export class ChatPanel extends li_BaseView {
id: number;
private _nodeTab: any = {};
nameKey: string;
openUIDataCT(data) {
this.id = data;
// 设置当前聊天的角色ID
@@ -64,13 +66,23 @@ export class ChatPanel extends li_BaseView {
this,
this.onDialogUpdate
);
Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => {
this.girlName.string = LanguageUtils.getText(this.nameKey);
});
}
onDestroy(): void {
Utils.removeInnerEL(InnerMsgCode.LanguageChange, this, () => {
this.girlName.string = LanguageUtils.getText(this.nameKey);
});
}
refresh(id: number) {
this.id = id;
const data = ConfigManager.tables.TbGirls.get(this.id);
const dataDetail = ConfigManager.tables.TbGirlsDetail.get(this.id);
if (!data) return;
this.girlName.string = data.name;
this.nameKey = data.nameKey;
this.girlName.string = LanguageUtils.getText(data.nameKey);
ResManager.I.changeBundleSpriteFrame(
this.girlImg,
data.avatarPath,
@@ -4,6 +4,9 @@ import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
import { DetailImageItem } from "./DetailImageItem";
import { NavigationManager } from "../../manager/NavigationManager";
import ConfigManager from "../../manager/ConfigManager";
import LanguageUtils from "../../../Main/Common/LanguageUtils";
import Utils from "../../../Main/Common/Utils";
import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode";
const { ccclass, property } = _decorator;
@@ -47,6 +50,19 @@ export class GirlDetailPanel extends li_BaseView {
super.onLoadCT();
this.imgItemInst.node.active = false;
this.refresh(this.id);
Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => {
this.girlName.string = this.descName.string = LanguageUtils.getText(
this.nameKey
);
let desc = "";
const tags = LanguageUtils.getText(this.tagKey).split("|");
for (let i = 0; i < tags.length; i++) {
if (i != 0) desc += "\n";
desc += tags[i];
}
this.tags.string = desc;
});
}
setVideEnable(enable: boolean) {
@@ -55,12 +71,16 @@ export class GirlDetailPanel extends li_BaseView {
this.avatarVideo.play();
}
}
nameKey: string;
tagKey: string;
refresh(index: number) {
console.log(index);
const dataDetail = ConfigManager.tables.TbGirlsDetail.get(this.id);
const data = ConfigManager.tables.TbGirls.get(this.id);
this.girlName.string = this.descName.string = data.name;
this.nameKey = data.nameKey;
this.girlName.string = this.descName.string = LanguageUtils.getText(
data.nameKey
);
if (dataDetail.pics[0].endsWith("video")) {
ResManager.I.changeBundleVideo(
@@ -86,9 +106,11 @@ export class GirlDetailPanel extends li_BaseView {
this.desc.string = dataDetail.detailDesc;
let desc = "";
for (let i = 0; i < data.tag.length; i++) {
this.tagKey = data.tagKey;
const tags = LanguageUtils.getText(data.tagKey).split("|");
for (let i = 0; i < tags.length; i++) {
if (i != 0) desc += "\n";
desc += data.tag[i];
desc += tags[i];
}
this.tags.string = desc;
for (let i = 0; i < 5; i++) {
@@ -5,6 +5,8 @@ import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
import Utils from "db://assets/Scripts/Main/Common/Utils";
import { NavigationManager } from "../../manager/NavigationManager";
import { Girl, PriceType } from "../../../schema/schema";
import LanguageUtils from "../../../Main/Common/LanguageUtils";
import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode";
const { ccclass, property } = _decorator;
@@ -29,15 +31,49 @@ export class GirlListItem extends Component {
id: number = -1;
nameKey: string;
tagKey: string;
protected onLoad(): void {
Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => {
this.girlName.string = this.girlName.string = LanguageUtils.getText(
this.nameKey
);
let desc = "";
const tags = LanguageUtils.getText(this.tagKey).split("|");
for (let i = 0; i < tags.length; i++) {
if (i != 0) desc += "\n";
desc += tags[i];
}
this.tags.string = desc;
});
}
protected onDestroy(): void {
Utils.removeInnerEL(InnerMsgCode.LanguageChange, this, () => {
this.girlName.string = this.girlName.string = LanguageUtils.getText(
this.nameKey
);
let desc = "";
const tags = LanguageUtils.getText(this.tagKey).split("|");
for (let i = 0; i < tags.length; i++) {
if (i != 0) desc += "\n";
desc += tags[i];
}
this.tags.string = desc;
});
}
baseNode: Node;
refreshData(data: Girl, baseNode: Node) {
this.baseNode = baseNode;
this.id = data.id;
this.girlName.string = data.name;
this.nameKey = data.nameKey;
this.girlName.string = LanguageUtils.getText(data.nameKey);
this.tagKey = data.tagKey;
let desc = "";
for (let i = 0; i < data.tag.length; i++) {
if (i != 0) desc += "&";
desc += data.tag[i];
const tags = LanguageUtils.getText(data.tagKey).split("|");
for (let i = 0; i < tags.length; i++) {
if (i != 0) desc += "|";
desc += tags[i];
}
this.tags.string = desc;
this.price.node.active = data.priceType == PriceType.pay;
+17 -2
View File
@@ -4,6 +4,8 @@ import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
import Utils from "db://assets/Scripts/Main/Common/Utils";
import { NavigationManager } from "../../manager/NavigationManager";
import { TbThemes, Theme } from "../../../schema/schema";
import LanguageUtils from "../../../Main/Common/LanguageUtils";
import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode";
const { ccclass, property } = _decorator;
@ccclass("ThemeItem")
@@ -19,11 +21,24 @@ export class ThemeItem extends Component {
private category: number;
private isLocked: boolean;
start() {}
key: string;
protected onLoad(): void {
Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => {
this.titleName.string = LanguageUtils.getText(this.key);
});
}
protected onDestroy(): void {
Utils.removeInnerEL(InnerMsgCode.LanguageChange, this, () => {
this.titleName.string = LanguageUtils.getText(this.key);
});
}
refresh(themeData: Theme) {
this.lockImg.node.active = !themeData.isRelease;
this.isLocked = !themeData.isRelease;
this.titleName.string = themeData.name;
this.key = themeData.key;
this.titleName.string = LanguageUtils.getText(themeData.key);
this.category = themeData.category;
ResManager.I.changeBundleSpriteFrame(
this.img,
@@ -15,6 +15,7 @@ import { ThemeItem } from "./ThemeItem";
import { NavigationManager } from "../../manager/NavigationManager";
import { GirlListItem } from "./GirlListItem";
import ConfigManager from "../../manager/ConfigManager";
import LanguageUtils from "../../../Main/Common/LanguageUtils";
const { ccclass, property } = _decorator;
@@ -43,6 +44,7 @@ export class ThemePanel extends li_BaseView {
this.itemInst = this._nodeTab.ThemeItem.getComponent(ThemeItem);
this.itemInst.node.active = false;
this.content = this._nodeTab.AllThemesLayout;
this.Show();
}
@@ -50,7 +52,6 @@ export class ThemePanel extends li_BaseView {
//some temp data
this.coinNum.string = (50.0).toString();
this.recId = 1;
if (this.cache) {
for (let i = this.cache.length - 1; i >= 0; i--) {
this.cache[i].node.destroy();
+73 -137
View File
@@ -60,91 +60,15 @@ export enum PriceType {
export namespace demo {
export class item {
constructor(_buf_: ByteBuf) {
this.id = _buf_.readInt()
this.name = _buf_.readString()
this.desc = _buf_.readString()
this.count = _buf_.readInt()
}
/**
* id
*/
readonly id: number
/**
* 名称
*/
readonly name: string
/**
* 描述
*/
readonly desc: string
/**
* 个数
*/
readonly count: number
resolve(tables:Tables) {
}
}
}
export namespace demo {
export class Reward {
constructor(_buf_: ByteBuf) {
this.id = _buf_.readInt()
this.name = _buf_.readString()
this.desc = _buf_.readString()
this.count = _buf_.readInt()
}
/**
* id
*/
readonly id: number
/**
* 名称
*/
readonly name: string
/**
* 描述
*/
readonly desc: string
/**
* 个数
*/
readonly count: number
resolve(tables:Tables) {
}
}
}
export class Girl {
constructor(_buf_: ByteBuf) {
this.id = _buf_.readInt()
this.name = _buf_.readString()
this.nameKey = _buf_.readString()
this.age = _buf_.readString()
this.category = _buf_.readInt()
{ let n = Math.min(_buf_.readSize(), _buf_.size); this.tag = []; for(let i = 0 ; i < n ; i++) { let _e0 ;_e0 = _buf_.readString(); this.tag.push(_e0);}}
this.tagKey = _buf_.readString()
this.priceType = _buf_.readInt()
this.avatarPath = _buf_.readString()
this.starCount = _buf_.readInt()
@@ -155,9 +79,9 @@ export class Girl {
*/
readonly id: number
/**
* 名
* 名字键
*/
readonly name: string
readonly nameKey: string
/**
* 年龄
*/
@@ -167,9 +91,9 @@ export class Girl {
*/
readonly category: Category
/**
* 标签
* 标签
*/
readonly tag: string[]
readonly tagKey: string
/**
* 付费类型
*/
@@ -231,10 +155,55 @@ export class GirlDetail {
export class Language {
constructor(_buf_: ByteBuf) {
this.key = _buf_.readString()
this.languageEn = _buf_.readString()
this.languageCn = _buf_.readString()
this.languageHi = _buf_.readString()
this.languageFr = _buf_.readString()
this.languageDe = _buf_.readString()
}
/**
* key
*/
readonly key: string
readonly languageEn: string
readonly languageCn: string
/**
* 印地语翻译
*/
readonly languageHi: string
/**
* 法语翻译
*/
readonly languageFr: string
/**
* 德语翻译
*/
readonly languageDe: string
resolve(tables:Tables) {
}
}
export class Theme {
constructor(_buf_: ByteBuf) {
this.id = _buf_.readInt()
this.key = _buf_.readString()
this.name = _buf_.readString()
this.category = _buf_.readInt()
this.isRelease = _buf_.readBool()
@@ -245,6 +214,10 @@ export class Theme {
* id
*/
readonly id: number
/**
* 多语言键
*/
readonly key: string
/**
* 主题名称
*/
@@ -268,6 +241,7 @@ export class Theme {
}
}
@@ -344,25 +318,25 @@ export class vector4 {
export namespace demo {
export class TbReward {
private _dataMap: Map<number, demo.Reward>
private _dataList: demo.Reward[]
export class TbLanguage {
private _dataMap: Map<string, Language>
private _dataList: Language[]
constructor(_buf_: ByteBuf) {
this._dataMap = new Map<number, demo.Reward>()
this._dataMap = new Map<string, Language>()
this._dataList = []
for(let n = _buf_.readInt(); n > 0; n--) {
let _v: demo.Reward
_v = new demo.Reward(_buf_)
let _v: Language
_v = new Language(_buf_)
this._dataList.push(_v)
this._dataMap.set(_v.id, _v)
this._dataMap.set(_v.key, _v)
}
}
getDataMap(): Map<number, demo.Reward> { return this._dataMap; }
getDataList(): demo.Reward[] { return this._dataList; }
getDataMap(): Map<string, Language> { return this._dataMap; }
getDataList(): Language[] { return this._dataList; }
get(key: number): demo.Reward | undefined {
get(key: string): Language | undefined {
return this._dataMap.get(key);
}
@@ -374,7 +348,7 @@ export class TbReward {
}
}
}
@@ -476,76 +450,38 @@ export class TbThemes {
export namespace demo {
export class Tbitem {
private _dataMap: Map<number, demo.item>
private _dataList: demo.item[]
constructor(_buf_: ByteBuf) {
this._dataMap = new Map<number, demo.item>()
this._dataList = []
for(let n = _buf_.readInt(); n > 0; n--) {
let _v: demo.item
_v = new demo.item(_buf_)
this._dataList.push(_v)
this._dataMap.set(_v.id, _v)
}
}
getDataMap(): Map<number, demo.item> { return this._dataMap; }
getDataList(): demo.item[] { return this._dataList; }
get(key: number): demo.item | undefined {
return this._dataMap.get(key);
}
resolve(tables:Tables) {
for(let data of this._dataList)
{
data.resolve(tables)
}
}
}
}
type ByteBufLoader = (file: string) => ByteBuf
export class Tables {
private _TbReward: demo.TbReward
get TbReward(): demo.TbReward { return this._TbReward;}
private _TbLanguage: TbLanguage
get TbLanguage(): TbLanguage { return this._TbLanguage;}
private _TbGirls: TbGirls
get TbGirls(): TbGirls { return this._TbGirls;}
private _TbGirlsDetail: TbGirlsDetail
get TbGirlsDetail(): TbGirlsDetail { return this._TbGirlsDetail;}
private _TbThemes: TbThemes
get TbThemes(): TbThemes { return this._TbThemes;}
private _Tbitem: demo.Tbitem
get Tbitem(): demo.Tbitem { return this._Tbitem;}
static getTableNames(): string[] {
let names: string[] = [];
names.push('demo_tbreward');
names.push('tblanguage');
names.push('tbgirls');
names.push('tbgirlsdetail');
names.push('tbthemes');
names.push('demo_tbitem');
return names;
}
constructor(loader: ByteBufLoader) {
this._TbReward = new demo.TbReward(loader('demo_tbreward'))
this._TbLanguage = new TbLanguage(loader('tblanguage'))
this._TbGirls = new TbGirls(loader('tbgirls'))
this._TbGirlsDetail = new TbGirlsDetail(loader('tbgirlsdetail'))
this._TbThemes = new TbThemes(loader('tbthemes'))
this._Tbitem = new demo.Tbitem(loader('demo_tbitem'))
this._TbReward.resolve(this)
this._TbLanguage.resolve(this)
this._TbGirls.resolve(this)
this._TbGirlsDetail.resolve(this)
this._TbThemes.resolve(this)
this._Tbitem.resolve(this)
}
}
+135 -111
View File
@@ -28,23 +28,23 @@
"__id__": 112
},
{
"__id__": 211
"__id__": 213
}
],
"_active": true,
"_components": [
{
"__id__": 241
},
{
"__id__": 243
},
{
"__id__": 245
},
{
"__id__": 247
}
],
"_prefab": {
"__id__": 247
"__id__": 249
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -103,23 +103,23 @@
"__id__": 150
},
{
"__id__": 196
"__id__": 198
}
],
"_active": true,
"_components": [
{
"__id__": 204
},
{
"__id__": 206
},
{
"__id__": 208
},
{
"__id__": 210
}
],
"_prefab": {
"__id__": 210
"__id__": 212
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -3410,23 +3410,23 @@
"__id__": 151
},
{
"__id__": 174
"__id__": 176
}
],
"_active": true,
"_components": [
{
"__id__": 189
},
{
"__id__": 191
},
{
"__id__": 193
},
{
"__id__": 195
}
],
"_prefab": {
"__id__": 195
"__id__": 197
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -3475,9 +3475,6 @@
],
"_active": true,
"_components": [
{
"__id__": 164
},
{
"__id__": 166
},
@@ -3485,11 +3482,14 @@
"__id__": 168
},
{
"__id__": 171
"__id__": 170
},
{
"__id__": 173
}
],
"_prefab": {
"__id__": 173
"__id__": 175
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -3695,10 +3695,13 @@
},
{
"__id__": 161
},
{
"__id__": 163
}
],
"_prefab": {
"__id__": 163
"__id__": 165
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -3825,6 +3828,27 @@
"__type__": "cc.CompPrefabInfo",
"fileId": "c7ZJkEwKRCTajinGWIDefs"
},
{
"__type__": "d7e4fOii5xNLqH2PF6de4pP",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 158
},
"_enabled": true,
"__prefab": {
"__id__": 164
},
"languageKey": "chatpanel.inputplaceholder",
"defaultText": "",
"autoUpdate": true,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "47FCHFhs9Hur4PavpxytHf"
},
{
"__type__": "cc.PrefabInfo",
"root": {
@@ -3848,7 +3872,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 165
"__id__": 167
},
"_contentSize": {
"__type__": "cc.Size",
@@ -3876,7 +3900,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 167
"__id__": 169
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -3921,14 +3945,14 @@
},
"_enabled": true,
"__prefab": {
"__id__": 169
"__id__": 171
},
"editingDidBegan": [],
"textChanged": [],
"editingDidEnded": [],
"editingReturn": [
{
"__id__": 170
"__id__": 172
}
],
"_textLabel": {
@@ -3973,7 +3997,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 172
"__id__": 174
},
"_alignFlags": 44,
"_target": null,
@@ -4022,23 +4046,23 @@
},
"_children": [
{
"__id__": 175
"__id__": 177
}
],
"_active": true,
"_components": [
{
"__id__": 181
},
{
"__id__": 183
},
{
"__id__": 185
},
{
"__id__": 187
}
],
"_prefab": {
"__id__": 188
"__id__": 190
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -4075,20 +4099,20 @@
"_objFlags": 512,
"__editorExtras__": {},
"_parent": {
"__id__": 174
"__id__": 176
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 176
"__id__": 178
},
{
"__id__": 178
"__id__": 180
}
],
"_prefab": {
"__id__": 180
"__id__": 182
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -4125,11 +4149,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 175
"__id__": 177
},
"_enabled": true,
"__prefab": {
"__id__": 177
"__id__": 179
},
"_contentSize": {
"__type__": "cc.Size",
@@ -4153,11 +4177,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 175
"__id__": 177
},
"_enabled": true,
"__prefab": {
"__id__": 179
"__id__": 181
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -4234,11 +4258,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 174
"__id__": 176
},
"_enabled": true,
"__prefab": {
"__id__": 182
"__id__": 184
},
"_contentSize": {
"__type__": "cc.Size",
@@ -4262,11 +4286,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 174
"__id__": 176
},
"_enabled": true,
"__prefab": {
"__id__": 184
"__id__": 186
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -4307,15 +4331,15 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 174
"__id__": 176
},
"_enabled": true,
"__prefab": {
"__id__": 186
"__id__": 188
},
"clickEvents": [
{
"__id__": 187
"__id__": 189
}
],
"_interactable": true,
@@ -4367,7 +4391,7 @@
"_duration": 0.1,
"_zoomScale": 1.2,
"_target": {
"__id__": 174
"__id__": 176
},
"_id": ""
},
@@ -4408,7 +4432,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 190
"__id__": 192
},
"_contentSize": {
"__type__": "cc.Size",
@@ -4436,7 +4460,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 192
"__id__": 194
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -4481,7 +4505,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 194
"__id__": 196
},
"_alignFlags": 44,
"_target": null,
@@ -4531,18 +4555,18 @@
"_children": [],
"_active": true,
"_components": [
{
"__id__": 197
},
{
"__id__": 199
},
{
"__id__": 201
},
{
"__id__": 203
}
],
"_prefab": {
"__id__": 203
"__id__": 205
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -4579,11 +4603,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 196
"__id__": 198
},
"_enabled": true,
"__prefab": {
"__id__": 198
"__id__": 200
},
"_contentSize": {
"__type__": "cc.Size",
@@ -4607,11 +4631,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 196
"__id__": 198
},
"_enabled": true,
"__prefab": {
"__id__": 200
"__id__": 202
},
"_alignFlags": 45,
"_target": null,
@@ -4643,11 +4667,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 196
"__id__": 198
},
"_enabled": true,
"__prefab": {
"__id__": 202
"__id__": 204
},
"_resourceType": 1,
"_remoteURL": "",
@@ -4690,7 +4714,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 205
"__id__": 207
},
"_contentSize": {
"__type__": "cc.Size",
@@ -4718,7 +4742,7 @@
},
"_enabled": false,
"__prefab": {
"__id__": 207
"__id__": 209
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -4763,7 +4787,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 209
"__id__": 211
},
"_alignFlags": 45,
"_target": null,
@@ -4812,20 +4836,20 @@
},
"_children": [
{
"__id__": 212
"__id__": 214
}
],
"_active": true,
"_components": [
{
"__id__": 236
"__id__": 238
},
{
"__id__": 238
"__id__": 240
}
],
"_prefab": {
"__id__": 240
"__id__": 242
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -4862,24 +4886,24 @@
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 211
"__id__": 213
},
"_children": [
{
"__id__": 213
"__id__": 215
}
],
"_active": true,
"_components": [
{
"__id__": 231
"__id__": 233
},
{
"__id__": 233
"__id__": 235
}
],
"_prefab": {
"__id__": 235
"__id__": 237
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -4916,27 +4940,27 @@
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 212
"__id__": 214
},
"_children": [
{
"__id__": 214
"__id__": 216
}
],
"_active": true,
"_components": [
{
"__id__": 224
},
{
"__id__": 226
},
{
"__id__": 228
},
{
"__id__": 230
}
],
"_prefab": {
"__id__": 230
"__id__": 232
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -4973,14 +4997,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 213
"__id__": 215
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 215
},
{
"__id__": 217
},
@@ -4989,10 +5010,13 @@
},
{
"__id__": 221
},
{
"__id__": 223
}
],
"_prefab": {
"__id__": 223
"__id__": 225
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -5029,11 +5053,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 214
"__id__": 216
},
"_enabled": true,
"__prefab": {
"__id__": 216
"__id__": 218
},
"_contentSize": {
"__type__": "cc.Size",
@@ -5057,11 +5081,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 214
"__id__": 216
},
"_enabled": true,
"__prefab": {
"__id__": 218
"__id__": 220
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -5102,11 +5126,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 214
"__id__": 216
},
"_enabled": true,
"__prefab": {
"__id__": 220
"__id__": 222
},
"_alignFlags": 12,
"_target": null,
@@ -5138,11 +5162,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 214
"__id__": 216
},
"_enabled": true,
"__prefab": {
"__id__": 222
"__id__": 224
},
"clickEvents": [],
"_interactable": true,
@@ -5207,11 +5231,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 213
"__id__": 215
},
"_enabled": true,
"__prefab": {
"__id__": 225
"__id__": 227
},
"_contentSize": {
"__type__": "cc.Size",
@@ -5235,11 +5259,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 213
"__id__": 215
},
"_enabled": true,
"__prefab": {
"__id__": 227
"__id__": 229
},
"_type": 3,
"_inverted": false,
@@ -5257,11 +5281,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 213
"__id__": 215
},
"_enabled": true,
"__prefab": {
"__id__": 229
"__id__": 231
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -5315,11 +5339,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 212
"__id__": 214
},
"_enabled": true,
"__prefab": {
"__id__": 232
"__id__": 234
},
"_contentSize": {
"__type__": "cc.Size",
@@ -5343,11 +5367,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 212
"__id__": 214
},
"_enabled": true,
"__prefab": {
"__id__": 234
"__id__": 236
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -5401,11 +5425,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 211
"__id__": 213
},
"_enabled": true,
"__prefab": {
"__id__": 237
"__id__": 239
},
"_contentSize": {
"__type__": "cc.Size",
@@ -5429,14 +5453,14 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 211
"__id__": 213
},
"_enabled": true,
"__prefab": {
"__id__": 239
"__id__": 241
},
"image": {
"__id__": 217
"__id__": 219
},
"_id": ""
},
@@ -5467,7 +5491,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 242
"__id__": 244
},
"_contentSize": {
"__type__": "cc.Size",
@@ -5495,7 +5519,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 244
"__id__": 246
},
"_alignFlags": 45,
"_target": null,
@@ -5531,11 +5555,11 @@
},
"_enabled": true,
"__prefab": {
"__id__": 246
"__id__": 248
},
"m_rootNode": null,
"editBox": {
"__id__": 168
"__id__": 170
},
"girlName": {
"__id__": 24
@@ -5547,7 +5571,7 @@
"__id__": 77
},
"popUpImage": {
"__id__": 238
"__id__": 240
},
"_id": ""
},
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-2
View File
@@ -1,2 +0,0 @@
┐ИИ│⌠Е┘╥1Ф▐▐Х©╟1
┐ЙИ│⌠Е┘╥2Ф▐▐Х©╟2d
@@ -1,2 +0,0 @@
┐ИИ│⌠Е┘╥1Г╒▌Г┴┤
┐ЙИ│⌠Е┘╥2И┤▒Е╦│d
@@ -1,12 +0,0 @@
{
"ver": "1.0.3",
"importer": "buffer",
"imported": true,
"uuid": "22867eec-f2ee-4997-b2b4-b277af84b625",
"files": [
".bin",
".json"
],
"subMetas": {},
"userData": {}
}
Binary file not shown.
+9
View File
@@ -0,0 +1,9 @@
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 eingeben␍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é Zeichentrickgirl_10001_name Anaya Kapoor 阿纳雅आन्या कपूर Anaya Kapoor Anaya Kapoorgirl_10002_name Meher Joshi梅尔मेहर जोशी Meher Joshi Meher Joshigirl_10003_name
Sana Reddy萨娜साना रेड्डी
Sana Reddy
Sana Reddygirl_10001_tag Hot|Horny␍火辣|饥渴"सेक्सी|कामुकChaude|Excitée
Heiß|Geilgirl_10002_tag%Earth-tone linens,handcrafted jewelry土色亚麻制品|手工珠宝Yभूरे रंग के लिनन|हस्तनिर्मित गहनेLinge terreux,Bijoux artisanaux'Erdfarbene Leinen,Handgemachter Schmuckgirl_10003_tagSinger-Songwriter,Dancer␍舞者|歌手2गायक-गीतकार|नर्तकीChanteuse-compositrice,Danseuse Sängerin-Songwriterin,Tänzerin
@@ -2,7 +2,7 @@
"ver": "1.0.3",
"importer": "buffer",
"imported": true,
"uuid": "63fbd1bd-9cb1-4fa3-aca9-15b259a9c421",
"uuid": "4c2b1986-c2f8-47a9-be89-9dbe639a2f4a",
"files": [
".bin",
".json"
Binary file not shown.