多语言模块

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
+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.