Compare commits
No commits in common. "master" and "v0.0.55" have entirely different histories.
@ -598,7 +598,7 @@
|
|||||||
"__id__": 30
|
"__id__": 30
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_active": false,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 36
|
"__id__": 36
|
||||||
@ -1037,7 +1037,7 @@
|
|||||||
"__id__": 378
|
"__id__": 378
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_active": true,
|
"_active": false,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 387
|
"__id__": 387
|
||||||
@ -1253,7 +1253,7 @@
|
|||||||
},
|
},
|
||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 893.55908203125,
|
"width": 873.017578125,
|
||||||
"height": 50.4
|
"height": 50.4
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
@ -1289,7 +1289,7 @@
|
|||||||
"b": 187,
|
"b": 187,
|
||||||
"a": 255
|
"a": 255
|
||||||
},
|
},
|
||||||
"_string": "누적 베팅 횟수 XX회 및 누적 베팅 금액 XX를 달성하면 이벤트에 참여할 수 있습니다",
|
"_string": "活动介绍:活动期间参与指定游戏,并将赢分排在前XX名即可获得丰厚大",
|
||||||
"_horizontalAlign": 1,
|
"_horizontalAlign": 1,
|
||||||
"_verticalAlign": 1,
|
"_verticalAlign": 1,
|
||||||
"_actualFontSize": 27,
|
"_actualFontSize": 27,
|
||||||
@ -1302,7 +1302,7 @@
|
|||||||
"_isSystemFontUsed": true,
|
"_isSystemFontUsed": true,
|
||||||
"_spacingX": 0,
|
"_spacingX": 0,
|
||||||
"_isItalic": false,
|
"_isItalic": false,
|
||||||
"_isBold": false,
|
"_isBold": true,
|
||||||
"_isUnderline": false,
|
"_isUnderline": false,
|
||||||
"_underlineHeight": 2,
|
"_underlineHeight": 2,
|
||||||
"_cacheMode": 0,
|
"_cacheMode": 0,
|
||||||
@ -4293,7 +4293,7 @@
|
|||||||
"__prefab": {
|
"__prefab": {
|
||||||
"__id__": 174
|
"__id__": 174
|
||||||
},
|
},
|
||||||
"_key": "Player ID",
|
"_key": "",
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -4597,7 +4597,7 @@
|
|||||||
"b": 7,
|
"b": 7,
|
||||||
"a": 255
|
"a": 255
|
||||||
},
|
},
|
||||||
"_string": "bet",
|
"_string": "Winnings",
|
||||||
"_horizontalAlign": 1,
|
"_horizontalAlign": 1,
|
||||||
"_verticalAlign": 1,
|
"_verticalAlign": 1,
|
||||||
"_actualFontSize": 30,
|
"_actualFontSize": 30,
|
||||||
@ -4655,7 +4655,7 @@
|
|||||||
"__prefab": {
|
"__prefab": {
|
||||||
"__id__": 190
|
"__id__": 190
|
||||||
},
|
},
|
||||||
"_key": "AID_MAIN_SHOW_BET",
|
"_key": "Winnings",
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -10748,7 +10748,7 @@
|
|||||||
"__prefab": {
|
"__prefab": {
|
||||||
"__id__": 451
|
"__id__": 451
|
||||||
},
|
},
|
||||||
"_key": "Player ID",
|
"_key": "",
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -11052,7 +11052,7 @@
|
|||||||
"b": 7,
|
"b": 7,
|
||||||
"a": 255
|
"a": 255
|
||||||
},
|
},
|
||||||
"_string": "bet",
|
"_string": "Winnings",
|
||||||
"_horizontalAlign": 1,
|
"_horizontalAlign": 1,
|
||||||
"_verticalAlign": 1,
|
"_verticalAlign": 1,
|
||||||
"_actualFontSize": 30,
|
"_actualFontSize": 30,
|
||||||
@ -11110,7 +11110,7 @@
|
|||||||
"__prefab": {
|
"__prefab": {
|
||||||
"__id__": 467
|
"__id__": 467
|
||||||
},
|
},
|
||||||
"_key": "AID_MAIN_SHOW_BET",
|
"_key": "Winnings",
|
||||||
"_id": ""
|
"_id": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -17605,7 +17605,7 @@
|
|||||||
},
|
},
|
||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 274.232421875,
|
"width": 108,
|
||||||
"height": 36.76
|
"height": 36.76
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
@ -17641,7 +17641,7 @@
|
|||||||
"b": 255,
|
"b": 255,
|
||||||
"a": 255
|
"a": 255
|
||||||
},
|
},
|
||||||
"_string": "Reward claim records",
|
"_string": "领奖记录",
|
||||||
"_horizontalAlign": 1,
|
"_horizontalAlign": 1,
|
||||||
"_verticalAlign": 1,
|
"_verticalAlign": 1,
|
||||||
"_actualFontSize": 26,
|
"_actualFontSize": 26,
|
||||||
@ -23575,7 +23575,7 @@
|
|||||||
"__id__": 1106
|
"__id__": 1106
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"_active": false,
|
"_active": true,
|
||||||
"_components": [
|
"_components": [
|
||||||
{
|
{
|
||||||
"__id__": 1115
|
"__id__": 1115
|
||||||
|
|||||||
@ -1092,9 +1092,9 @@
|
|||||||
"_dstBlendFactor": 4,
|
"_dstBlendFactor": 4,
|
||||||
"_color": {
|
"_color": {
|
||||||
"__type__": "cc.Color",
|
"__type__": "cc.Color",
|
||||||
"r": 221,
|
"r": 90,
|
||||||
"g": 162,
|
"g": 6,
|
||||||
"b": 154,
|
"b": 7,
|
||||||
"a": 255
|
"a": 255
|
||||||
},
|
},
|
||||||
"_string": "4",
|
"_string": "4",
|
||||||
|
|||||||
@ -117,7 +117,7 @@ export class RankHistoryList extends Component {
|
|||||||
this.refreshSelfRankingInfo(null);
|
this.refreshSelfRankingInfo(null);
|
||||||
if (!this.isTypeAvailable(type)) {
|
if (!this.isTypeAvailable(type)) {
|
||||||
console.log(`${type} 历史榜单活动未开启`);
|
console.log(`${type} 历史榜单活动未开启`);
|
||||||
this.rankHistoryLoadingNode.active = false;
|
this.rankHistoryLoadingNode.active = false;
|
||||||
this.showActivityNotOpenTip();
|
this.showActivityNotOpenTip();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -181,7 +181,7 @@ export class RankHistoryList extends Component {
|
|||||||
}
|
}
|
||||||
this.selfInfo.getChildByName('Uid').getComponent(Label).string = truncateString(selfInfo.Uid);
|
this.selfInfo.getChildByName('Uid').getComponent(Label).string = truncateString(selfInfo.Uid);
|
||||||
this.selfInfo.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
this.selfInfo.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
||||||
this.selfInfo.getChildByName('Win').getComponent(Label).string = selfInfo.Bet.toString();
|
this.selfInfo.getChildByName('Win').getComponent(Label).string = selfInfo.Win.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
getHistoryDate(type: string, index: number): string {
|
getHistoryDate(type: string, index: number): string {
|
||||||
@ -225,7 +225,7 @@ export class RankHistoryList extends Component {
|
|||||||
node.getChildByName('Rank').getChildByName('rankLab').getComponent(Label).string = (idx + 1).toString();
|
node.getChildByName('Rank').getChildByName('rankLab').getComponent(Label).string = (idx + 1).toString();
|
||||||
node.getChildByName('Uid').getComponent(Label).string = truncateString(itemData.Uid);
|
node.getChildByName('Uid').getComponent(Label).string = truncateString(itemData.Uid);
|
||||||
node.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
node.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
||||||
node.getChildByName('Win').getComponent(Label).string = itemData.Bet.toString();
|
node.getChildByName('Win').getComponent(Label).string = itemData.Win.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.rankingHistoryListVScroll.refreshList(rankInfos.List);
|
this.rankingHistoryListVScroll.refreshList(rankInfos.List);
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { _decorator, Button, Color, Component, Label, Node, Sprite, Tween, tween, UITransform, v3, Vec2 } from 'cc';
|
import { _decorator, Button, Color, Component, Label, Node, Sprite, Tween, tween, UITransform, v3 } from 'cc';
|
||||||
import { VirtualScrollView } from './VScrollView';
|
import { VirtualScrollView } from './VScrollView';
|
||||||
import { Palette } from './Palette';
|
import { Palette } from './Palette';
|
||||||
import { SlotRankingDataManager } from './SlotRankingDataManager';
|
import { SlotRankingDataManager } from './SlotRankingDataManager';
|
||||||
@ -116,7 +116,7 @@ export class RankList extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async switchRankTab(type: string) {
|
async switchRankTab(type: string) {
|
||||||
if (this.currentRankType === type) {
|
if (this.currentRankType === type) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ export class RankList extends Component {
|
|||||||
this.msg_1.active = false;
|
this.msg_1.active = false;
|
||||||
}
|
}
|
||||||
this.marqueeTexts = [];
|
this.marqueeTexts = [];
|
||||||
this.currentMarqueeIndex = 0;
|
this.currentMarqueeIndex = 0;
|
||||||
this.showActivityNotOpenTip();
|
this.showActivityNotOpenTip();
|
||||||
if (this.countdownTimer) {
|
if (this.countdownTimer) {
|
||||||
clearInterval(this.countdownTimer);
|
clearInterval(this.countdownTimer);
|
||||||
@ -249,24 +249,11 @@ export class RankList extends Component {
|
|||||||
// 再次强制更新以确保宽度准确
|
// 再次强制更新以确保宽度准确
|
||||||
labelComp.updateRenderData(true);
|
labelComp.updateRenderData(true);
|
||||||
let labelLength = labelComp.node.getComponent(UITransform).width;
|
let labelLength = labelComp.node.getComponent(UITransform).width;
|
||||||
let maskLength = this.msg_1.parent.getComponent(UITransform).width
|
|
||||||
|
|
||||||
// 设置初始位置
|
// 设置初始位置
|
||||||
let endX = 0
|
this.msg_1.setPosition(-450, this.msg_1.position.y, this.msg_1.position.z);
|
||||||
let duration = 0
|
let endX = -labelLength;
|
||||||
|
let duration = Math.max(3, (-450 + labelLength) / 80);
|
||||||
if (labelLength <= maskLength) {
|
|
||||||
labelComp.node.getComponent(UITransform).setAnchorPoint(new Vec2(0.5, 0.5))
|
|
||||||
this.msg_1.setPosition(0, this.msg_1.position.y, this.msg_1.position.z);
|
|
||||||
endX = - maskLength / 2 - labelLength / 2 - 30
|
|
||||||
duration = Math.max(3, labelLength / 80);
|
|
||||||
} else {
|
|
||||||
labelComp.node.getComponent(UITransform).setAnchorPoint(new Vec2(0, 0.5))
|
|
||||||
this.msg_1.setPosition(- maskLength / 2, this.msg_1.position.y, this.msg_1.position.z);
|
|
||||||
endX = - maskLength / 2 - labelLength - 30
|
|
||||||
duration = Math.max(3, (- maskLength / 2 + labelLength) / 80);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// 启动跑马灯动画
|
// 启动跑马灯动画
|
||||||
Tween.stopAllByTarget(this.msg_1);
|
Tween.stopAllByTarget(this.msg_1);
|
||||||
@ -300,7 +287,7 @@ export class RankList extends Component {
|
|||||||
node.getChildByName('Rank').getChildByName('rankLab').getComponent(Label).string = itemData.Rank.toString();
|
node.getChildByName('Rank').getChildByName('rankLab').getComponent(Label).string = itemData.Rank.toString();
|
||||||
node.getChildByName('Uid').getComponent(Label).string = truncateString(itemData.Uid);
|
node.getChildByName('Uid').getComponent(Label).string = truncateString(itemData.Uid);
|
||||||
node.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
node.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
||||||
node.getChildByName('Win').getComponent(Label).string = itemData.Bet.toString();
|
node.getChildByName('Win').getComponent(Label).string = itemData.Win.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.rankingListVScroll.refreshList(rankInfos.List);
|
this.rankingListVScroll.refreshList(rankInfos.List);
|
||||||
@ -331,7 +318,7 @@ export class RankList extends Component {
|
|||||||
}
|
}
|
||||||
this.selfInfo.getChildByName('Uid').getComponent(Label).string = truncateString(selfInfo.Uid);
|
this.selfInfo.getChildByName('Uid').getComponent(Label).string = truncateString(selfInfo.Uid);
|
||||||
this.selfInfo.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
this.selfInfo.getChildByName('Shop').getComponent(Label).string = SlotRankingDataManager.instance.getRankListServerId() || '-';
|
||||||
this.selfInfo.getChildByName('Win').getComponent(Label).string = selfInfo.Bet.toString();
|
this.selfInfo.getChildByName('Win').getComponent(Label).string = selfInfo.Win.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== 按钮状态管理 ====================
|
// ==================== 按钮状态管理 ====================
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import { Palette } from './Palette';
|
|||||||
import { SlotRankingDataManager } from './SlotRankingDataManager';
|
import { SlotRankingDataManager } from './SlotRankingDataManager';
|
||||||
import { callGameApiForRank } from 'db://assets/Loading/scripts/comm';
|
import { callGameApiForRank } from 'db://assets/Loading/scripts/comm';
|
||||||
import { AudioManager } from 'db://assets/Loading/scripts/manager/AudioManager';
|
import { AudioManager } from 'db://assets/Loading/scripts/manager/AudioManager';
|
||||||
import { I18nManager } from 'db://assets/Loading/scripts/manager/I18nManager';
|
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ -119,7 +118,7 @@ export class RewardList extends Component {
|
|||||||
|
|
||||||
this.setRewardRadioBtn(type);
|
this.setRewardRadioBtn(type);
|
||||||
|
|
||||||
if (!this.isTypeAvailable(type) || SlotRankingDataManager.instance.getRankListStatusByType(type) !== 0) {
|
if (!this.isTypeAvailable(type)) {
|
||||||
console.log(`${type} 奖励榜单活动未开启`);
|
console.log(`${type} 奖励榜单活动未开启`);
|
||||||
this.rewardLoadingNode.active = false;
|
this.rewardLoadingNode.active = false;
|
||||||
this.showActivityNotOpenTip();
|
this.showActivityNotOpenTip();
|
||||||
@ -209,19 +208,19 @@ export class RewardList extends Component {
|
|||||||
|
|
||||||
if (this.rewardsData.DayRanks && this.rewardsData.DayRanks.length > 0) {
|
if (this.rewardsData.DayRanks && this.rewardsData.DayRanks.length > 0) {
|
||||||
for (let item of this.rewardsData.DayRanks) {
|
for (let item of this.rewardsData.DayRanks) {
|
||||||
this.selfRewardsList.push({ ...item, TypeLabel: I18nManager.instance.t('Daily Ranking') });
|
this.selfRewardsList.push({ ...item, TypeLabel: '日榜' });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.rewardsData.WeekRanks && this.rewardsData.WeekRanks.length > 0) {
|
if (this.rewardsData.WeekRanks && this.rewardsData.WeekRanks.length > 0) {
|
||||||
for (let item of this.rewardsData.WeekRanks) {
|
for (let item of this.rewardsData.WeekRanks) {
|
||||||
this.selfRewardsList.push({ ...item, TypeLabel: I18nManager.instance.t('Weekly Ranking') });
|
this.selfRewardsList.push({ ...item, TypeLabel: '周榜' });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.rewardsData.MonthRanks && this.rewardsData.MonthRanks.length > 0) {
|
if (this.rewardsData.MonthRanks && this.rewardsData.MonthRanks.length > 0) {
|
||||||
for (let item of this.rewardsData.MonthRanks) {
|
for (let item of this.rewardsData.MonthRanks) {
|
||||||
this.selfRewardsList.push({ ...item, TypeLabel: I18nManager.instance.t('Monthly Ranking') });
|
this.selfRewardsList.push({ ...item, TypeLabel: '月榜' });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import { RewardHistoryList } from './RewardHistoryList';
|
|||||||
import { SlotRankingDataManager } from './SlotRankingDataManager';
|
import { SlotRankingDataManager } from './SlotRankingDataManager';
|
||||||
import { callGameApiForRank, getGameId } from 'db://assets/Loading/scripts/comm';
|
import { callGameApiForRank, getGameId } from 'db://assets/Loading/scripts/comm';
|
||||||
import { AudioManager } from 'db://assets/Loading/scripts/manager/AudioManager';
|
import { AudioManager } from 'db://assets/Loading/scripts/manager/AudioManager';
|
||||||
import { SlotScene } from '../../scripts/SlotScene';
|
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ -34,7 +33,7 @@ export class SlotRanking extends Component {
|
|||||||
DESIGN_WIDTH: number = 1080;
|
DESIGN_WIDTH: number = 1080;
|
||||||
DESIGN_HEIGHT: number = 1920;
|
DESIGN_HEIGHT: number = 1920;
|
||||||
|
|
||||||
slotScene: SlotScene = null; // SlotScene 引用
|
slotScene: any = null; // SlotScene 引用
|
||||||
isMove: boolean = false; // 是否是拖动状态
|
isMove: boolean = false; // 是否是拖动状态
|
||||||
isClick: boolean = false; // 是否是点击状态
|
isClick: boolean = false; // 是否是点击状态
|
||||||
startPos: Vec3 = v3(432, 650, 0);
|
startPos: Vec3 = v3(432, 650, 0);
|
||||||
@ -119,7 +118,7 @@ export class SlotRanking extends Component {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
setSlotScene(slotScene: SlotScene) {
|
setSlotScene(slotScene: any) {
|
||||||
this.slotScene = slotScene;
|
this.slotScene = slotScene;
|
||||||
// 将 slotScene 引用传递给 RewardList
|
// 将 slotScene 引用传递给 RewardList
|
||||||
if (this.rewardList) {
|
if (this.rewardList) {
|
||||||
@ -129,13 +128,8 @@ export class SlotRanking extends Component {
|
|||||||
|
|
||||||
// 检查是否可以点击排行榜按钮
|
// 检查是否可以点击排行榜按钮
|
||||||
canClickRankingBtn(): boolean {
|
canClickRankingBtn(): boolean {
|
||||||
console.log('slotScene', this.slotScene)
|
|
||||||
|
|
||||||
if (!this.slotScene) return true;
|
if (!this.slotScene) return true;
|
||||||
console.log('isAutoSpin', this.slotScene.gameState.isAutoSpin)
|
|
||||||
console.log('isInFreeSpin', this.slotScene.gameState.isInFreeSpin)
|
|
||||||
console.log('isFeatureBuySpin', this.slotScene.gameState.isFeatureBuySpin)
|
|
||||||
console.log('isEliminating', this.slotScene.gameState.isEliminating)
|
|
||||||
// 如果正在滚动,不可点击
|
// 如果正在滚动,不可点击
|
||||||
if (this.slotScene.slotGame && this.slotScene.slotGame.isScroll()) {
|
if (this.slotScene.slotGame && this.slotScene.slotGame.isScroll()) {
|
||||||
return false;
|
return false;
|
||||||
@ -225,7 +219,7 @@ export class SlotRanking extends Component {
|
|||||||
this.isClick = false;
|
this.isClick = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
console.log('isClick', this.isClick)
|
|
||||||
if (this.isClick) {
|
if (this.isClick) {
|
||||||
// 检查是否可以点击
|
// 检查是否可以点击
|
||||||
if (!this.canClickRankingBtn()) {
|
if (!this.canClickRankingBtn()) {
|
||||||
|
|||||||
@ -66,7 +66,7 @@ export class SlotRankingDataManager {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
getRankMaxCloseTimeIsBiggerThanCurTime(): boolean {
|
getRankMaxCloseTimeIsBiggerThanCurTime(): boolean {
|
||||||
if (!this._rankList || !this._rankList.List || this._rankList.List.length === 0) {
|
if (!this._rankList || !this._rankList.List || this._rankList.List.length === 0) {
|
||||||
// 代表当前没有活动开启,则说明关闭入口按钮
|
// 代表当前没有活动开启,则说明关闭入口按钮
|
||||||
@ -78,20 +78,11 @@ export class SlotRankingDataManager {
|
|||||||
if (item.CloseTime > maxCloseTime) {
|
if (item.CloseTime > maxCloseTime) {
|
||||||
maxCloseTime = item.CloseTime;
|
maxCloseTime = item.CloseTime;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Date.now() <= (maxCloseTime * 1000);
|
return Date.now() <= (maxCloseTime * 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
getRankListStatusByType(type: string): number {
|
|
||||||
if (!this._rankList || !this._rankList.List || this._rankList.List.length === 0) {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
let item = this._rankList.List.find((item: any) => item.Type === type);
|
|
||||||
return item ? item.Status : 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
getRankListStatus(): number {
|
getRankListStatus(): number {
|
||||||
if (!this._rankList || !this._rankList.List || this._rankList.List.length === 0) {
|
if (!this._rankList || !this._rankList.List || this._rankList.List.length === 0) {
|
||||||
return 2;
|
return 2;
|
||||||
|
|||||||
@ -1391,7 +1391,7 @@
|
|||||||
"Feature Buy": "အင်္ဂါရပ် ဝယ်ယူမှု",
|
"Feature Buy": "အင်္ဂါရပ် ဝယ်ယူမှု",
|
||||||
"Free Spins": "အခမဲ့ လည်ပတ်မှုများ",
|
"Free Spins": "အခမဲ့ လည်ပတ်မှုများ",
|
||||||
"Free Spin:": "အခမဲ့ လည်ပတ်မှု :",
|
"Free Spin:": "အခမဲ့ လည်ပတ်မှု :",
|
||||||
"Game History": "ဂိမ်းမှတ်တမ်း",
|
"Game History": "ဂိမ်း မှတ်တမ်း",
|
||||||
"Last 7 days": "ပြီးခဲ့သော ၇ ရက်",
|
"Last 7 days": "ပြီးခဲ့သော ၇ ရက်",
|
||||||
"Loading More...": "ဆက်လက် ဖော်ပြသည် ...",
|
"Loading More...": "ဆက်လက် ဖော်ပြသည် ...",
|
||||||
"No Game History": "ဂိမ်း မှတ်တမ်း မရှိပါ",
|
"No Game History": "ဂိမ်း မှတ်တမ်း မရှိပါ",
|
||||||
@ -1475,9 +1475,9 @@
|
|||||||
"Select Date Range": "ရက်စွဲ အပိုင်း အခြား ရွေးချယ် ပါ",
|
"Select Date Range": "ရက်စွဲ အပိုင်း အခြား ရွေးချယ် ပါ",
|
||||||
"Time": "အချိန်",
|
"Time": "အချိန်",
|
||||||
"Today": "ယနေ့",
|
"Today": "ယနေ့",
|
||||||
"Transaction": "ငွေကြေးလွှဲပြောင်းမှု",
|
"Transaction": "ငွေကြေး လွှဲပြောင်း မှု",
|
||||||
"Win Multiplier": "အနိုင်ရမြှောက်ကိန်း",
|
"Win Multiplier": "အနိုင်ရ မြှောက်ကိန်း",
|
||||||
"of a Kind": "အမျိုးအစားတူ",
|
"of a Kind": "အမျိုးအစား တူ",
|
||||||
"way(s)": "Way(s)"
|
"way(s)": "Way(s)"
|
||||||
},
|
},
|
||||||
"nl": {
|
"nl": {
|
||||||
@ -2171,26 +2171,26 @@
|
|||||||
"way(s)": "Way(s)"
|
"way(s)": "Way(s)"
|
||||||
},
|
},
|
||||||
"th": {
|
"th": {
|
||||||
"All record(s) displayed": "แสดงทั้งหมดแล้ว",
|
"All record(s) displayed": "ฟรีสปิน:",
|
||||||
"B/BxS": "เดิมพัน / เดิมพันพื้นฐาน x ค่าตัวคูณสัญลักษณ์",
|
"B/BxS": "Indsats / Basisindsats x Symboludbetalingsværdier",
|
||||||
"B/BxSxW": "เดิมพัน / เดิมพันพื้นฐาน x ค่าตัวคูณสัญลักษณ์ x Way",
|
"B/BxSxW": "Indsats / Basisindsats x Symboludbetalingsværdier x Way(s)",
|
||||||
"B/BxSxWxM": "เดิมพัน / เดิมพันพื้นฐาน x ค่าตัวคูณสัญลักษณ์ x Way x ตัวคูณ",
|
"B/BxSxWxM": "Indsats / Basisindsats x Symboludbetalingsværdier x Way(s) x Multiplikator",
|
||||||
"Balance": "ยอดคงเหลือ",
|
"Balance": "ไม่มี คอมโบ ชนะ",
|
||||||
"Bet": "เดิมพัน",
|
"Bet": "แสดง ทั้งหมด แล้ว",
|
||||||
"Close": "ปิด",
|
"Close": "การ จ่าย เงิน",
|
||||||
"Custom": "กำหนดเอง",
|
"Custom": "เดิมพัน",
|
||||||
"Feature Buy": "ซื้อฟีเจอร์",
|
"Feature Buy": "ชนิด เดียวกัน",
|
||||||
"Free Spins": "ฟรีสปิน",
|
"Free Spins": "Way",
|
||||||
"Free Spin:": "ฟรีสปิน:",
|
"Free Spin:": "รอบ:",
|
||||||
"Game History": "ประวัติการเล่น",
|
"Game History": "7 วันที่ ผ่านมา",
|
||||||
"Last 7 days": "7 วันที่ผ่านมา",
|
"Last 7 days": "รายการ",
|
||||||
"Loading More...": "กำลังโหลดเพิ่ม...",
|
"Loading More...": "ปิด",
|
||||||
"No Game History": "ไม่มีประวัติการเล่น",
|
"No Game History": "สปิน ปกติ",
|
||||||
"No Winning Combination": "ไม่มีคอมโบชนะ",
|
"No Winning Combination": "ตัวคูณ รางวัล",
|
||||||
"Normal Spin": "สปินปกติ",
|
"Normal Spin": "ยอด คงเหลือ",
|
||||||
"Payout": "การจ่ายเงิน",
|
"Payout": "ฟรี สปิน",
|
||||||
"Paytable": "ตารางการจ่ายเงิน",
|
"Paytable": "ตาราง การ จ่าย เงิน",
|
||||||
"Paytable_1": "มูลค่าการจ่ายเงินของสัญลักษณ์",
|
"Paytable_1": "มูลค่า การ จ่าย เงิน ของ สัญลักษณ์",
|
||||||
"Paytable_1_1": "ป่า",
|
"Paytable_1_1": "ป่า",
|
||||||
"Paytable_1_2": "เครื่องหมาย",
|
"Paytable_1_2": "เครื่องหมาย",
|
||||||
"Paytable_1_3": "กระจัดกระจาย",
|
"Paytable_1_3": "กระจัดกระจาย",
|
||||||
@ -2198,24 +2198,24 @@
|
|||||||
"Paytable_1_5": "สัญลักษณ์ บาง ตัว อาจ ครอบครอง พื้นที่ สัญลักษณ์ 2 ถึง 4 ช่อง และ สัญลักษณ์ แต่ละ ตัว จะ แสดง เป็น สัญลักษณ์ เดียว ใน ระหว่าง การ คำนวณ การ จ่าย เงิน",
|
"Paytable_1_5": "สัญลักษณ์ บาง ตัว อาจ ครอบครอง พื้นที่ สัญลักษณ์ 2 ถึง 4 ช่อง และ สัญลักษณ์ แต่ละ ตัว จะ แสดง เป็น สัญลักษณ์ เดียว ใน ระหว่าง การ คำนวณ การ จ่าย เงิน",
|
||||||
"Paytable_1_6": "สัญลักษณ์ Wild แทนที่ สัญลักษณ์ ทั้งหมด ยกเว้น สัญลักษณ์ Scatter",
|
"Paytable_1_6": "สัญลักษณ์ Wild แทนที่ สัญลักษณ์ ทั้งหมด ยกเว้น สัญลักษณ์ Scatter",
|
||||||
"Paytable_1_7": "สัญลักษณ์ Wild จะ ปรากฏ บน รีล 2, 3, 4 และ 5 เท่านั้น",
|
"Paytable_1_7": "สัญลักษณ์ Wild จะ ปรากฏ บน รีล 2, 3, 4 และ 5 เท่านั้น",
|
||||||
"Paytable_2": "ไวลด์ออนเดอะเวย์",
|
"Paytable_2": "ไวลด์ ออน เดอะ เวย์",
|
||||||
"Paytable_2_1": "ใน ระหว่าง การ หมุน ใด ๆ สัญลักษณ์ บาง ตัว (ไม่ รวม สัญลักษณ์ Wild และ สัญลักษณ์ Scatter) ใน รีล 2, 3, 4 และ/หรือ 5 ที่ ครอบครอง พื้นที่ สัญลักษณ์ 2 ถึง 4 ช่อง อาจ มี พื้นหลัง สีทอง",
|
"Paytable_2_1": "ใน ระหว่าง การ หมุน ใด ๆ สัญลักษณ์ บาง ตัว (ไม่ รวม สัญลักษณ์ Wild และ สัญลักษณ์ Scatter) ใน รีล 2, 3, 4 และ/หรือ 5 ที่ ครอบครอง พื้นที่ สัญลักษณ์ 2 ถึง 4 ช่อง อาจ มี พื้นหลัง สีทอง",
|
||||||
"Paytable_2_2": "ใน ทุก ๆ รอบ ใหม่ หลังจาก ที่ สัญลักษณ์ ใหม่ ไหล ลงมา สัญลักษณ์ พื้นหลัง สีทอง ใด ๆ ที่ เกี่ยวข้อง กับ การ ชนะ ใน รอบ ก่อนหน้า จะ ถูก เปลี่ยน เป็น สัญลักษณ์ Wild",
|
"Paytable_2_2": "ใน ทุก ๆ รอบ ใหม่ หลังจาก ที่ สัญลักษณ์ ใหม่ ไหล ลงมา สัญลักษณ์ พื้นหลัง สีทอง ใด ๆ ที่ เกี่ยวข้อง กับ การ ชนะ ใน รอบ ก่อนหน้า จะ ถูก เปลี่ยน เป็น สัญลักษณ์ Wild",
|
||||||
"Paytable_3": "รีลตัวคูณ",
|
"Paytable_3": "รีล ตัวคูณ",
|
||||||
"Paytable_3_1": "ใน ช่วง เริ่มต้น ของ การ หมุน เกม หลัก ใด ๆ ค่า ตัวคูณ 4 ตัว ด้านล่าง รีล จะ ถูก ตั้ง เป็น x2",
|
"Paytable_3_1": "ใน ช่วง เริ่มต้น ของ การ หมุน เกม หลัก ใด ๆ ค่า ตัวคูณ 4 ตัว ด้านล่าง รีล จะ ถูก ตั้ง เป็น x2",
|
||||||
"Paytable_3_2": "ใน ระหว่าง การ หมุน เกม หลัก ใด ๆ ก็ตาม เมื่อใด ก็ตาม ที่ มี สัญลักษณ์ Wild ปรากฏ บน วงล้อ ตั้งแต่ 1 ตัว ขึ้นไป และ เกี่ยวข้อง กับ การ ชนะ ตัวคูณ ที่ อยู่ ใต้ สัญลักษณ์ Wild เหล่านั้น จะ ถูก นำมา รวมกัน เงินรางวัล จะ ถูก คูณ ด้วย ตัวคูณ ทั้งหมด ก่อนที่ จะ จ่าย เงินรางวัล",
|
"Paytable_3_2": "ใน ระหว่าง การ หมุน เกม หลัก ใด ๆ ก็ตาม เมื่อใด ก็ตาม ที่ มี สัญลักษณ์ Wild ปรากฏ บน วงล้อ ตั้งแต่ 1 ตัว ขึ้นไป และ เกี่ยวข้อง กับ การ ชนะ ตัวคูณ ที่ อยู่ ใต้ สัญลักษณ์ Wild เหล่านั้น จะ ถูก นำมา รวมกัน เงินรางวัล จะ ถูก คูณ ด้วย ตัวคูณ ทั้งหมด ก่อนที่ จะ จ่าย เงินรางวัล",
|
||||||
"Paytable_3_3": "หลังจาก จ่าย เงินรางวัล แล้ว ตัวคูณ ที่ ใช้ ไป จะ ถูก ทำลาย และ ตัวคูณ ที่ ใหญ่กว่า จะ ไหล เข้ามา จาก ทาง ขวา",
|
"Paytable_3_3": "หลังจาก จ่าย เงินรางวัล แล้ว ตัวคูณ ที่ ใช้ ไป จะ ถูก ทำลาย และ ตัวคูณ ที่ ใหญ่กว่า จะ ไหล เข้ามา จาก ทาง ขวา",
|
||||||
"Paytable_4": "ฟีเจอร์ฟรีสปิน",
|
"Paytable_4": "ฟีเจอร์ ฟรี สปิน",
|
||||||
"Paytable_4_1": "สัญลักษณ์ Scatter 4 ตัว ที่ ปรากฏ ใน ตำแหน่ง ใด ก็ได้ จะ เปิดใช้งาน ฟีเจอร์ ฟรี สปิน พร้อม ฟรี สปิน 10 ครั้ง สัญลักษณ์ Scatter เพิ่มเติม แต่ละ ตัว จะ เปิดใช้งาน ฟรี สปิน เพิ่ม อีก 2 ครั้ง",
|
"Paytable_4_1": "สัญลักษณ์ Scatter 4 ตัว ที่ ปรากฏ ใน ตำแหน่ง ใด ก็ได้ จะ เปิดใช้งาน ฟีเจอร์ ฟรี สปิน พร้อม ฟรี สปิน 10 ครั้ง สัญลักษณ์ Scatter เพิ่มเติม แต่ละ ตัว จะ เปิดใช้งาน ฟรี สปิน เพิ่ม อีก 2 ครั้ง",
|
||||||
"Paytable_4_2": "ใน ช่วง เริ่มต้น ของ ฟีเจอร์ หมุน ฟรี ค่า ตัวคูณ 4 ตัว ด้านล่าง รีล จะ ถูก ตั้ง เป็น x2",
|
"Paytable_4_2": "ใน ช่วง เริ่มต้น ของ ฟีเจอร์ หมุน ฟรี ค่า ตัวคูณ 4 ตัว ด้านล่าง รีล จะ ถูก ตั้ง เป็น x2",
|
||||||
"Paytable_4_3": "ใน ระหว่าง การ หมุน ฟรี ใด ๆ ก็ตาม เมื่อใด ก็ตาม ที่ มี สัญลักษณ์ Wild ปรากฏ บน วงล้อ ตั้งแต่ 1 ตัว ขึ้นไป และ เกี่ยวข้อง กับ การ ชนะ ตัวคูณ ที่ อยู่ ใต้ สัญลักษณ์ Wild เหล่านั้น จะ ถูก นำมา รวมกัน เงินรางวัล จะ ถูก คูณ ด้วย ตัวคูณ ทั้งหมด ก่อนที่ จะ จ่าย เงินรางวัล",
|
"Paytable_4_3": "ใน ระหว่าง การ หมุน ฟรี ใด ๆ ก็ตาม เมื่อใด ก็ตาม ที่ มี สัญลักษณ์ Wild ปรากฏ บน วงล้อ ตั้งแต่ 1 ตัว ขึ้นไป และ เกี่ยวข้อง กับ การ ชนะ ตัวคูณ ที่ อยู่ ใต้ สัญลักษณ์ Wild เหล่านั้น จะ ถูก นำมา รวมกัน เงินรางวัล จะ ถูก คูณ ด้วย ตัวคูณ ทั้งหมด ก่อนที่ จะ จ่าย เงินรางวัล",
|
||||||
"Paytable_4_4": "หลังจาก จ่าย เงินรางวัล แล้ว ตัวคูณ ที่ ใช้ ไป จะ ถูก ทำลาย และ ตัวคูณ ที่ ใหญ่กว่า จะ ไหล เข้ามา จาก ทาง ขวา",
|
"Paytable_4_4": "หลังจาก จ่าย เงินรางวัล แล้ว ตัวคูณ ที่ ใช้ ไป จะ ถูก ทำลาย และ ตัวคูณ ที่ ใหญ่กว่า จะ ไหล เข้ามา จาก ทาง ขวา",
|
||||||
"Paytable_4_5": "ค่า ตัวคูณ ที่ อยู่ ด้านล่าง รีล จะ ไม่ รีเซ็ต หลังจาก การ หมุน ฟรี ครั้ง แรก",
|
"Paytable_4_5": "ค่า ตัวคูณ ที่ อยู่ ด้านล่าง รีล จะ ไม่ รีเซ็ต หลังจาก การ หมุน ฟรี ครั้ง แรก",
|
||||||
"Paytable_4_6": "ฟรี สปิน สามารถ ทริกเกอร์ ซ้ำ ได้",
|
"Paytable_4_6": "ฟรี สปิน สามารถ ทริกเกอร์ ซ้ำ ได้",
|
||||||
"Paytable_5": "คุณสมบัติการซื้อ",
|
"Paytable_5": "คุณสมบัติ การ ซื้อ",
|
||||||
"Paytable_5_1": "แตะ ที่ ปุ่ม ซื้อ คุณสมบัติ เพื่อ เปิด เมนู ซื้อ คุณสมบัติ",
|
"Paytable_5_1": "แตะ ที่ ปุ่ม ซื้อ คุณสมบัติ เพื่อ เปิด เมนู ซื้อ คุณสมบัติ",
|
||||||
"Paytable_5_2": "แตะ ที่ ปุ่ม เริ่ม เพื่อ ซื้อ ฟีเจอร์ สปิน ฟรี ใน ราคา ที่ แสดง ใน เมนู ซื้อ ฟีเจอร์",
|
"Paytable_5_2": "แตะ ที่ ปุ่ม เริ่ม เพื่อ ซื้อ ฟีเจอร์ สปิน ฟรี ใน ราคา ที่ แสดง ใน เมนู ซื้อ ฟีเจอร์",
|
||||||
"Paytable_6": "400-15,625วิธี",
|
"Paytable_6": "400-15,625 วิธี",
|
||||||
"Paytable_6_1": "วิธี เดิมพัน จะ ชนะ ถ้า สัญลักษณ์ ที่ ชนะ เรียง ต่อกัน จาก รีล ซ้ายสุด ไป ทาง ขวา",
|
"Paytable_6_1": "วิธี เดิมพัน จะ ชนะ ถ้า สัญลักษณ์ ที่ ชนะ เรียง ต่อกัน จาก รีล ซ้ายสุด ไป ทาง ขวา",
|
||||||
"Paytable_6_2": "จำนวน รวม ของ วิธี เดิมพัน ที่ ชนะ สำหรับ แต่ละ สัญลักษณ์ จะ คำนวณ โดย การ คูณ จำนวน สัญลักษณ์ ที่ ชนะ ที่ อยู่ ติดกัน บน แต่ละ สัญลักษณ์ จาก รีล ซ้ายสุด ไป ยัง ขวา",
|
"Paytable_6_2": "จำนวน รวม ของ วิธี เดิมพัน ที่ ชนะ สำหรับ แต่ละ สัญลักษณ์ จะ คำนวณ โดย การ คูณ จำนวน สัญลักษณ์ ที่ ชนะ ที่ อยู่ ติดกัน บน แต่ละ สัญลักษณ์ จาก รีล ซ้ายสุด ไป ยัง ขวา",
|
||||||
"Paytable_6_3": "จาก ตัวอย่าง ข้างต้น:",
|
"Paytable_6_3": "จาก ตัวอย่าง ข้างต้น:",
|
||||||
@ -2223,11 +2223,11 @@
|
|||||||
"Paytable_6_5": "ตัวอย่าง นี้ แสดง จำนวน เงินรางวัล รวม:",
|
"Paytable_6_5": "ตัวอย่าง นี้ แสดง จำนวน เงินรางวัล รวม:",
|
||||||
"Paytable_6_6": "หลังจาก การ จ่าย เงิน ใน แต่ละ รอบ เสร็จสิ้น แล้ว สัญลักษณ์ ที่ ชนะ ทั้งหมด จะ ระเบิด ทำให้ สัญลักษณ์ ที่ อยู่ เหนือ สัญลักษณ์ เหล่านั้น จะ ตกลงมา เพื่อ เล่น รอบ ใหม่",
|
"Paytable_6_6": "หลังจาก การ จ่าย เงิน ใน แต่ละ รอบ เสร็จสิ้น แล้ว สัญลักษณ์ ที่ ชนะ ทั้งหมด จะ ระเบิด ทำให้ สัญลักษณ์ ที่ อยู่ เหนือ สัญลักษณ์ เหล่านั้น จะ ตกลงมา เพื่อ เล่น รอบ ใหม่",
|
||||||
"Paytable_6_7": "ระบบ จะ นับ ชุด ค่าผสม ที่ ชนะ เพิ่มเติม ใน ทุก ๆ รอบ จนกว่า จะ ไม่ สามารถ นับ ชุด ค่าผสม ที่ ชนะ เพิ่มเติม ได้ อีก",
|
"Paytable_6_7": "ระบบ จะ นับ ชุด ค่าผสม ที่ ชนะ เพิ่มเติม ใน ทุก ๆ รอบ จนกว่า จะ ไม่ สามารถ นับ ชุด ค่าผสม ที่ ชนะ เพิ่มเติม ได้ อีก",
|
||||||
"Paytable_6_8": "แสดงชัยชนะทั้งหมดเป็นเงินสด",
|
"Paytable_6_8": "แสดง ชัยชนะ ทั้งหมด เป็น เงินสด",
|
||||||
"Profit": "กำไร",
|
"Profit": "กำลัง โหลด เพิ่ม...",
|
||||||
"Round:": "รอบ:",
|
"Round:": "ซื้อ ฟีเจอร์",
|
||||||
"Rules": "กฎของเกม",
|
"Rules": "กฎ ของ เกม",
|
||||||
"Rules_1": "หม้อไฟคาร์นิวัล",
|
"Rules_1": "หม้อ ไฟ คาร์นิวัล",
|
||||||
"Rules_1_1": "Hot pot Carnival เป็น วิดีโอ สล็อต 6 รีล 5 แถว (พร้อม รีล เพิ่มเติม ที่ ด้านล่าง ของ รีล 2, 3, 4 และ 5) โดย มี สัญลักษณ์ Wilds-on-the-Way และ ตัวคูณ ที่ ด้านล่าง ของ รีล",
|
"Rules_1_1": "Hot pot Carnival เป็น วิดีโอ สล็อต 6 รีล 5 แถว (พร้อม รีล เพิ่มเติม ที่ ด้านล่าง ของ รีล 2, 3, 4 และ 5) โดย มี สัญลักษณ์ Wilds-on-the-Way และ ตัวคูณ ที่ ด้านล่าง ของ รีล",
|
||||||
"Rules_1_10": "การ จ่าย เงิน สัญลักษณ์ ที่ ชนะ จะ คูณ ด้วย จำนวน วิธี เดิมพัน ที่ ชนะ",
|
"Rules_1_10": "การ จ่าย เงิน สัญลักษณ์ ที่ ชนะ จะ คูณ ด้วย จำนวน วิธี เดิมพัน ที่ ชนะ",
|
||||||
"Rules_1_11": "เพิ่ม การ ชนะ พร้อมกัน จาก วิธี เดิมพัน ที่ แตกต่างกัน",
|
"Rules_1_11": "เพิ่ม การ ชนะ พร้อมกัน จาก วิธี เดิมพัน ที่ แตกต่างกัน",
|
||||||
@ -2246,30 +2246,30 @@
|
|||||||
"Rules_1_7": "วิธี เดิมพัน ที่ ชนะ เป็น เงินสด จะ เท่ากับ ค่า ที่ แสดง ใน \"ตาราง การ จ่าย เงิน\" คูณ ด้วย ขนาด เดิมพัน และ ระดับ เดิมพัน",
|
"Rules_1_7": "วิธี เดิมพัน ที่ ชนะ เป็น เงินสด จะ เท่ากับ ค่า ที่ แสดง ใน \"ตาราง การ จ่าย เงิน\" คูณ ด้วย ขนาด เดิมพัน และ ระดับ เดิมพัน",
|
||||||
"Rules_1_8": "วิธี เดิมพัน จะ ชนะ ถ้า สัญลักษณ์ ที่ ชนะ เรียง ต่อกัน จาก รีล ซ้ายสุด ไป ทาง ขวา",
|
"Rules_1_8": "วิธี เดิมพัน จะ ชนะ ถ้า สัญลักษณ์ ที่ ชนะ เรียง ต่อกัน จาก รีล ซ้ายสุด ไป ทาง ขวา",
|
||||||
"Rules_1_9": "จำนวน รวม ของ วิธี เดิมพัน ที่ ชนะ สำหรับ แต่ละ สัญลักษณ์ จะ คำนวณ โดย การ คูณ จำนวน สัญลักษณ์ ที่ ชนะ ติดกัน บน แต่ละ สัญลักษณ์ จาก รีล ซ้ายสุด ไป ยัง ขวา",
|
"Rules_1_9": "จำนวน รวม ของ วิธี เดิมพัน ที่ ชนะ สำหรับ แต่ละ สัญลักษณ์ จะ คำนวณ โดย การ คูณ จำนวน สัญลักษณ์ ที่ ชนะ ติดกัน บน แต่ละ สัญลักษณ์ จาก รีล ซ้ายสุด ไป ยัง ขวา",
|
||||||
"Rules_2": "ไวลด์ออนเดอะเวย์",
|
"Rules_2": "ไวลด์ ออน เดอะ เวย์",
|
||||||
"Rules_2_1": "ใน ระหว่าง การ หมุน ใด ๆ สัญลักษณ์ บาง ตัว (ไม่ รวม สัญลักษณ์ Wild และ สัญลักษณ์ Scatter) ใน รีล 2, 3, 4 และ/หรือ 5 ที่ ครอบครอง พื้นที่ สัญลักษณ์ 2 ถึง 4 ช่อง อาจ มี พื้นหลัง สีทอง",
|
"Rules_2_1": "ใน ระหว่าง การ หมุน ใด ๆ สัญลักษณ์ บาง ตัว (ไม่ รวม สัญลักษณ์ Wild และ สัญลักษณ์ Scatter) ใน รีล 2, 3, 4 และ/หรือ 5 ที่ ครอบครอง พื้นที่ สัญลักษณ์ 2 ถึง 4 ช่อง อาจ มี พื้นหลัง สีทอง",
|
||||||
"Rules_2_2": "ใน ทุก ๆ รอบ ใหม่ หลังจาก ที่ สัญลักษณ์ ใหม่ ไหล ลงมา สัญลักษณ์ พื้นหลัง สีทอง ใด ๆ ที่ เกี่ยวข้อง กับ การ ชนะ ใน รอบ ก่อนหน้า จะ ถูก เปลี่ยน เป็น สัญลักษณ์ Wild",
|
"Rules_2_2": "ใน ทุก ๆ รอบ ใหม่ หลังจาก ที่ สัญลักษณ์ ใหม่ ไหล ลงมา สัญลักษณ์ พื้นหลัง สีทอง ใด ๆ ที่ เกี่ยวข้อง กับ การ ชนะ ใน รอบ ก่อนหน้า จะ ถูก เปลี่ยน เป็น สัญลักษณ์ Wild",
|
||||||
"Rules_3": "รีลตัวคูณ",
|
"Rules_3": "รีล ตัวคูณ",
|
||||||
"Rules_3_1": "ใน ช่วง เริ่มต้น ของ การ หมุน เกม หลัก ใด ๆ ค่า ตัวคูณ 4 ตัว ด้านล่าง รีล จะ ถูก ตั้ง เป็น x2",
|
"Rules_3_1": "ใน ช่วง เริ่มต้น ของ การ หมุน เกม หลัก ใด ๆ ค่า ตัวคูณ 4 ตัว ด้านล่าง รีล จะ ถูก ตั้ง เป็น x2",
|
||||||
"Rules_3_2": "ใน ระหว่าง การ หมุน เกม หลัก ใด ๆ ก็ตาม เมื่อใด ก็ตาม ที่ มี สัญลักษณ์ Wild ปรากฏ บน วงล้อ ตั้งแต่ 1 ตัว ขึ้นไป และ เกี่ยวข้อง กับ การ ชนะ ตัวคูณ ที่ อยู่ ใต้ สัญลักษณ์ Wild เหล่านั้น จะ ถูก นำมา รวมกัน เงินรางวัล จะ ถูก คูณ ด้วย ตัวคูณ ทั้งหมด ก่อนที่ จะ จ่าย เงินรางวัล",
|
"Rules_3_2": "ใน ระหว่าง การ หมุน เกม หลัก ใด ๆ ก็ตาม เมื่อใด ก็ตาม ที่ มี สัญลักษณ์ Wild ปรากฏ บน วงล้อ ตั้งแต่ 1 ตัว ขึ้นไป และ เกี่ยวข้อง กับ การ ชนะ ตัวคูณ ที่ อยู่ ใต้ สัญลักษณ์ Wild เหล่านั้น จะ ถูก นำมา รวมกัน เงินรางวัล จะ ถูก คูณ ด้วย ตัวคูณ ทั้งหมด ก่อนที่ จะ จ่าย เงินรางวัล",
|
||||||
"Rules_3_3": "หลังจาก จ่าย เงินรางวัล แล้ว ตัวคูณ ที่ ใช้ ไป จะ ถูก ทำลาย และ ตัวคูณ ที่ ใหญ่กว่า จะ ไหล เข้ามา จาก ทาง ขวา",
|
"Rules_3_3": "หลังจาก จ่าย เงินรางวัล แล้ว ตัวคูณ ที่ ใช้ ไป จะ ถูก ทำลาย และ ตัวคูณ ที่ ใหญ่กว่า จะ ไหล เข้ามา จาก ทาง ขวา",
|
||||||
"Rules_4": "ฟีเจอร์ฟรีสปิน",
|
"Rules_4": "ฟีเจอร์ ฟรี สปิน",
|
||||||
"Rules_4_1": "สัญลักษณ์ Scatter 4 ตัว ที่ ปรากฏ ใน ตำแหน่ง ใด ก็ได้ จะ เปิดใช้งาน ฟีเจอร์ ฟรี สปิน พร้อม ฟรี สปิน 10 ครั้ง สัญลักษณ์ Scatter เพิ่มเติม แต่ละ ตัว จะ เปิดใช้งาน ฟรี สปิน เพิ่ม อีก 2 ครั้ง",
|
"Rules_4_1": "สัญลักษณ์ Scatter 4 ตัว ที่ ปรากฏ ใน ตำแหน่ง ใด ก็ได้ จะ เปิดใช้งาน ฟีเจอร์ ฟรี สปิน พร้อม ฟรี สปิน 10 ครั้ง สัญลักษณ์ Scatter เพิ่มเติม แต่ละ ตัว จะ เปิดใช้งาน ฟรี สปิน เพิ่ม อีก 2 ครั้ง",
|
||||||
"Rules_4_2": "ใน ช่วง เริ่มต้น ของ ฟีเจอร์ การ หมุน ฟรี ค่า ตัวคูณ 4 ตัว ด้านล่าง รีล จะ ถูก ตั้ง เป็น x2",
|
"Rules_4_2": "ใน ช่วง เริ่มต้น ของ ฟีเจอร์ การ หมุน ฟรี ค่า ตัวคูณ 4 ตัว ด้านล่าง รีล จะ ถูก ตั้ง เป็น x2",
|
||||||
"Rules_4_3": "ใน ระหว่าง การ หมุน ฟรี ใด ๆ ก็ตาม เมื่อใด ก็ตาม ที่ มี สัญลักษณ์ Wild ปรากฏ บน วงล้อ ตั้งแต่ 1 ตัว ขึ้นไป และ เกี่ยวข้อง กับ การ ชนะ ตัวคูณ ที่ อยู่ ใต้ สัญลักษณ์ Wild เหล่านั้น จะ ถูก นำมา รวมกัน เงินรางวัล จะ ถูก คูณ ด้วย ตัวคูณ ทั้งหมด ก่อนที่ จะ จ่าย เงินรางวัล",
|
"Rules_4_3": "ใน ระหว่าง การ หมุน ฟรี ใด ๆ ก็ตาม เมื่อใด ก็ตาม ที่ มี สัญลักษณ์ Wild ปรากฏ บน วงล้อ ตั้งแต่ 1 ตัว ขึ้นไป และ เกี่ยวข้อง กับ การ ชนะ ตัวคูณ ที่ อยู่ ใต้ สัญลักษณ์ Wild เหล่านั้น จะ ถูก นำมา รวมกัน เงินรางวัล จะ ถูก คูณ ด้วย ตัวคูณ ทั้งหมด ก่อนที่ จะ จ่าย เงินรางวัล",
|
||||||
"Rules_4_4": "หลังจาก จ่าย เงินรางวัล แล้ว ตัวคูณ ที่ ใช้ ไป จะ ถูก ทำลาย และ ตัวคูณ ที่ ใหญ่กว่า จะ ไหล เข้ามา จาก ทาง ขวา",
|
"Rules_4_4": "หลังจาก จ่าย เงินรางวัล แล้ว ตัวคูณ ที่ ใช้ ไป จะ ถูก ทำลาย และ ตัวคูณ ที่ ใหญ่กว่า จะ ไหล เข้ามา จาก ทาง ขวา",
|
||||||
"Rules_4_5": "ค่า ตัวคูณ ที่ อยู่ ด้านล่าง รีล จะ ไม่ รีเซ็ต หลังจาก การ หมุน ฟรี ครั้ง แรก",
|
"Rules_4_5": "ค่า ตัวคูณ ที่ อยู่ ด้านล่าง รีล จะ ไม่ รีเซ็ต หลังจาก การ หมุน ฟรี ครั้ง แรก",
|
||||||
"Rules_4_6": "ฟรี สปิน สามารถ ทริกเกอร์ ซ้ำ ได้",
|
"Rules_4_6": "ฟรี สปิน สามารถ ทริกเกอร์ ซ้ำ ได้",
|
||||||
"Rules_5": "คุณสมบัติการซื้อ",
|
"Rules_5": "คุณสมบัติ การ ซื้อ",
|
||||||
"Rules_5_1": "แตะ ที่ ปุ่ม ซื้อ คุณสมบัติ เพื่อ เปิด เมนู ซื้อ คุณสมบัติ",
|
"Rules_5_1": "แตะ ที่ ปุ่ม ซื้อ คุณสมบัติ เพื่อ เปิด เมนู ซื้อ คุณสมบัติ",
|
||||||
"Rules_5_2": "แตะ ที่ ปุ่ม เริ่ม เพื่อ ซื้อ ฟีเจอร์ สปิน ฟรี ใน ราคา ที่ แสดง ใน เมนู ซื้อ ฟีเจอร์",
|
"Rules_5_2": "แตะ ที่ ปุ่ม เริ่ม เพื่อ ซื้อ ฟีเจอร์ สปิน ฟรี ใน ราคา ที่ แสดง ใน เมนู ซื้อ ฟีเจอร์",
|
||||||
"Rules_6": "เกมหลัก",
|
"Rules_6": "เกม หลัก",
|
||||||
"Rules_6_1": "สปิน",
|
"Rules_6_1": "สปิน",
|
||||||
"Rules_6_10": "การตั้งค่าเพิ่มเติม",
|
"Rules_6_10": "การ ตั้งค่า เพิ่มเติม",
|
||||||
"Rules_6_10_1": "แตะ เพื่อ เข้าถึง การ ตั้งค่า อื่น ๆ",
|
"Rules_6_10_1": "แตะ เพื่อ เข้าถึง การ ตั้งค่า อื่น ๆ",
|
||||||
"Rules_6_11": "เสียง",
|
"Rules_6_11": "เสียง",
|
||||||
"Rules_6_11_1": "แตะ เพื่อ เปิด หรือ ปิด เสียง",
|
"Rules_6_11_1": "แตะ เพื่อ เปิด หรือ ปิด เสียง",
|
||||||
"Rules_6_12": "ตารางการจ่ายเงิน",
|
"Rules_6_12": "ตาราง การ จ่าย เงิน",
|
||||||
"Rules_6_12_1": "แสดง ชุด ค่าผสม ที่ ชนะ และ อัตรา การ จ่าย เงิน",
|
"Rules_6_12_1": "แสดง ชุด ค่าผสม ที่ ชนะ และ อัตรา การ จ่าย เงิน",
|
||||||
"Rules_6_13": "กฎกติกา",
|
"Rules_6_13": "กฎกติกา",
|
||||||
"Rules_6_13_1": "แสดง กฎ เกม และ หน้าที่ ของ ปุ่ม ต่าง ๆ",
|
"Rules_6_13_1": "แสดง กฎ เกม และ หน้าที่ ของ ปุ่ม ต่าง ๆ",
|
||||||
@ -2286,27 +2286,27 @@
|
|||||||
"Rules_6_3_1": "แตะ เพื่อ ลด จำนวน เงิน เดิมพัน",
|
"Rules_6_3_1": "แตะ เพื่อ ลด จำนวน เงิน เดิมพัน",
|
||||||
"Rules_6_4": "เพิ่ม",
|
"Rules_6_4": "เพิ่ม",
|
||||||
"Rules_6_4_1": "แตะ เพื่อ เพิ่ม จำนวน เงิน เดิมพัน",
|
"Rules_6_4_1": "แตะ เพื่อ เพิ่ม จำนวน เงิน เดิมพัน",
|
||||||
"Rules_6_5": "ยอดเงินในกระเป๋าสตางค์",
|
"Rules_6_5": "ยอด เงิน ใน กระเป๋า สตางค์",
|
||||||
"Rules_6_5_1": "แสดง ยอด เงิน ใน กระเป๋า สตางค์ ที่ ใช้ ได้",
|
"Rules_6_5_1": "แสดง ยอด เงิน ใน กระเป๋า สตางค์ ที่ ใช้ ได้",
|
||||||
"Rules_6_6": "จำนวน เงิน เดิมพัน",
|
"Rules_6_6": "จำนวน เงิน เดิมพัน",
|
||||||
"Rules_6_6_1": "แสดง จำนวน เงิน ที่ เดิมพัน ปัจจุบัน",
|
"Rules_6_6_1": "แสดง จำนวน เงิน ที่ เดิมพัน ปัจจุบัน",
|
||||||
"Rules_6_7": "จำนวนเงินที่ชนะ",
|
"Rules_6_7": "จำนวน เงิน ที่ ชนะ",
|
||||||
"Rules_6_7_1": "แสดง จำนวน เงิน ที่ ได้รับ จาก การ เล่น รอบ นี้",
|
"Rules_6_7_1": "แสดง จำนวน เงิน ที่ ได้รับ จาก การ เล่น รอบ นี้",
|
||||||
"Rules_6_8": "สปินอัตโนมัติ",
|
"Rules_6_8": "สปิน อัตโนมัติ",
|
||||||
"Rules_6_8_1": "เล่น เกม โดย อัตโนมัติ ตาม จำนวน ครั้ง ที่ เลือก",
|
"Rules_6_8_1": "เล่น เกม โดย อัตโนมัติ ตาม จำนวน ครั้ง ที่ เลือก",
|
||||||
"Rules_6_8_2": "แตะ ตัวเลข เพื่อ เลือก จำนวน สปิน อัตโนมัติ",
|
"Rules_6_8_2": "แตะ ตัวเลข เพื่อ เลือก จำนวน สปิน อัตโนมัติ",
|
||||||
"Rules_6_9": "เทอร์โบสปิน",
|
"Rules_6_9": "เทอร์โบ สปิน",
|
||||||
"Rules_6_9_1": "แตะ เพื่อ เปิด หรือ ปิด เทอร์โบ สปิน เพื่อ ลด ระยะเวลา การ หมุน วงล้อ",
|
"Rules_6_9_1": "แตะ เพื่อ เปิด หรือ ปิด เทอร์โบ สปิน เพื่อ ลด ระยะเวลา การ หมุน วงล้อ",
|
||||||
"Rules_7": "ข้อมูลเพิ่มเติม",
|
"Rules_7": "ข้อมูล เพิ่มเติม",
|
||||||
"Rules_7_1": "การ ทำงาน ผิดพลาด จะ ทำให้ การ จ่าย เงิน และ การ เล่น ทั้งหมด เป็น โมฆะ",
|
"Rules_7_1": "การ ทำงาน ผิดพลาด จะ ทำให้ การ จ่าย เงิน และ การ เล่น ทั้งหมด เป็น โมฆะ",
|
||||||
"Rules_7_2": "ใน กรณี ที่ มี ข้อ พิพาท เกี่ยวกับ ผล เกม ผล เกม ทั้งหมด ที่ แสดง ใน หน้า ประวัติ ถือเป็น ที่ สิ้นสุด และ ไม่ มี เปลี่ยนแปลง",
|
"Rules_7_2": "ใน กรณี ที่ มี ข้อ พิพาท เกี่ยวกับ ผล เกม ผล เกม ทั้งหมด ที่ แสดง ใน หน้า ประวัติ ถือเป็น ที่ สิ้นสุด และ ไม่ มี เปลี่ยนแปลง",
|
||||||
"Select Date Range": "เลือกช่วงวันที่",
|
"Select Date Range": "กำหนด เอง",
|
||||||
"Time": "เวลา",
|
"Time": "กำไร",
|
||||||
"Today": "วันนี้",
|
"Today": "เวลา",
|
||||||
"Transaction": "รายการ",
|
"Transaction": "ไม่มี ประวัติ การ เล่น",
|
||||||
"Win Multiplier": "ตัวคูณรางวัล",
|
"Win Multiplier": "เดิมพัน / เดิมพัน พื้นฐาน x ค่า ตัวคูณ สัญลักษณ์",
|
||||||
"of a Kind": "ชนิดเดียวกัน",
|
"of a Kind": "เดิมพัน / เดิมพัน พื้นฐาน x ค่า ตัวคูณ สัญลักษณ์ x Way",
|
||||||
"way(s)": "Way"
|
"way(s)": "เดิมพัน / เดิมพัน พื้นฐาน x ค่า ตัวคูณ สัญลักษณ์ x Way x ตัวคูณ"
|
||||||
},
|
},
|
||||||
"tr": {
|
"tr": {
|
||||||
"All record(s) displayed": "Tüm Kayıtlar Görüntülendi",
|
"All record(s) displayed": "Tüm Kayıtlar Görüntülendi",
|
||||||
|
|||||||
@ -13487,7 +13487,7 @@
|
|||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 303.558,
|
"y": 157.016,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
"_lrot": {
|
"_lrot": {
|
||||||
@ -13528,7 +13528,7 @@
|
|||||||
"_contentSize": {
|
"_contentSize": {
|
||||||
"__type__": "cc.Size",
|
"__type__": "cc.Size",
|
||||||
"width": 1080,
|
"width": 1080,
|
||||||
"height": 1000
|
"height": 1300
|
||||||
},
|
},
|
||||||
"_anchorPoint": {
|
"_anchorPoint": {
|
||||||
"__type__": "cc.Vec2",
|
"__type__": "cc.Vec2",
|
||||||
|
|||||||
9
assets/Game/prefabs/ReadyHand.meta
Normal file
9
assets/Game/prefabs/ReadyHand.meta
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.2.0",
|
||||||
|
"importer": "directory",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "6433b29b-f544-440f-8be6-477a5c024f7c",
|
||||||
|
"files": [],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {}
|
||||||
|
}
|
||||||
146
assets/Game/prefabs/ReadyHand/readyHand.prefab
Normal file
146
assets/Game/prefabs/ReadyHand/readyHand.prefab
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"__type__": "cc.Prefab",
|
||||||
|
"_name": "readyHand",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"_native": "",
|
||||||
|
"data": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"optimizationPolicy": 0,
|
||||||
|
"persistent": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.Node",
|
||||||
|
"_name": "readyHand",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"_parent": null,
|
||||||
|
"_children": [],
|
||||||
|
"_active": true,
|
||||||
|
"_components": [
|
||||||
|
{
|
||||||
|
"__id__": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__id__": 4
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_prefab": {
|
||||||
|
"__id__": 6
|
||||||
|
},
|
||||||
|
"_lpos": {
|
||||||
|
"__type__": "cc.Vec3",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
"_lrot": {
|
||||||
|
"__type__": "cc.Quat",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"z": 0,
|
||||||
|
"w": 1
|
||||||
|
},
|
||||||
|
"_lscale": {
|
||||||
|
"__type__": "cc.Vec3",
|
||||||
|
"x": 1,
|
||||||
|
"y": 1,
|
||||||
|
"z": 1
|
||||||
|
},
|
||||||
|
"_mobility": 0,
|
||||||
|
"_layer": 33554432,
|
||||||
|
"_euler": {
|
||||||
|
"__type__": "cc.Vec3",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.UITransform",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 3
|
||||||
|
},
|
||||||
|
"_contentSize": {
|
||||||
|
"__type__": "cc.Size",
|
||||||
|
"width": 149.36000061035156,
|
||||||
|
"height": 721.510009765625
|
||||||
|
},
|
||||||
|
"_anchorPoint": {
|
||||||
|
"__type__": "cc.Vec2",
|
||||||
|
"x": 0.49377343129770096,
|
||||||
|
"y": 0.49974359668460616
|
||||||
|
},
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "b1mehXP45KqZ5ylDhnzjMj"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "sp.Skeleton",
|
||||||
|
"_name": "",
|
||||||
|
"_objFlags": 0,
|
||||||
|
"__editorExtras__": {},
|
||||||
|
"node": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"_enabled": true,
|
||||||
|
"__prefab": {
|
||||||
|
"__id__": 5
|
||||||
|
},
|
||||||
|
"_customMaterial": null,
|
||||||
|
"_srcBlendFactor": 2,
|
||||||
|
"_dstBlendFactor": 4,
|
||||||
|
"_color": {
|
||||||
|
"__type__": "cc.Color",
|
||||||
|
"r": 255,
|
||||||
|
"g": 255,
|
||||||
|
"b": 255,
|
||||||
|
"a": 255
|
||||||
|
},
|
||||||
|
"_skeletonData": {
|
||||||
|
"__uuid__": "c540ca75-7466-4e9a-aa3f-f1d031999a27",
|
||||||
|
"__expectedType__": "sp.SkeletonData"
|
||||||
|
},
|
||||||
|
"defaultSkin": "default",
|
||||||
|
"defaultAnimation": "readyHand_01",
|
||||||
|
"_premultipliedAlpha": true,
|
||||||
|
"_timeScale": 1,
|
||||||
|
"_preCacheMode": 0,
|
||||||
|
"_cacheMode": 0,
|
||||||
|
"_sockets": [],
|
||||||
|
"_useTint": false,
|
||||||
|
"_debugMesh": false,
|
||||||
|
"_debugBones": false,
|
||||||
|
"_debugSlots": false,
|
||||||
|
"_enableBatch": false,
|
||||||
|
"loop": true,
|
||||||
|
"_id": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.CompPrefabInfo",
|
||||||
|
"fileId": "092Em93rtLuav6edDSYQF4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"__type__": "cc.PrefabInfo",
|
||||||
|
"root": {
|
||||||
|
"__id__": 1
|
||||||
|
},
|
||||||
|
"asset": {
|
||||||
|
"__id__": 0
|
||||||
|
},
|
||||||
|
"fileId": "e8VoLh3KlENrVZJLIIITZJ",
|
||||||
|
"targetOverrides": null
|
||||||
|
}
|
||||||
|
]
|
||||||
13
assets/Game/prefabs/ReadyHand/readyHand.prefab.meta
Normal file
13
assets/Game/prefabs/ReadyHand/readyHand.prefab.meta
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"ver": "1.1.50",
|
||||||
|
"importer": "prefab",
|
||||||
|
"imported": true,
|
||||||
|
"uuid": "f6c8dc7d-3478-495c-a358-5abb883f7aab",
|
||||||
|
"files": [
|
||||||
|
".json"
|
||||||
|
],
|
||||||
|
"subMetas": {},
|
||||||
|
"userData": {
|
||||||
|
"syncNodeName": "readyHand"
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@ -370,7 +370,7 @@
|
|||||||
},
|
},
|
||||||
"_lpos": {
|
"_lpos": {
|
||||||
"__type__": "cc.Vec3",
|
"__type__": "cc.Vec3",
|
||||||
"x": 0,
|
"x": 70,
|
||||||
"y": 94,
|
"y": 94,
|
||||||
"z": 0
|
"z": 0
|
||||||
},
|
},
|
||||||
|
|||||||
@ -41,7 +41,6 @@ import { AudioManager } from "../../Loading/scripts/manager/AudioManager";
|
|||||||
|
|
||||||
import { showFromBottom, hideToBottom } from "./game/Tools";
|
import { showFromBottom, hideToBottom } from "./game/Tools";
|
||||||
import { SpinAni } from "./game/SpinAni";
|
import { SpinAni } from "./game/SpinAni";
|
||||||
import { SlotGame } from "./SlotGame";
|
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ -53,8 +52,6 @@ export class SlotBar extends Component {
|
|||||||
|
|
||||||
@property(Node)
|
@property(Node)
|
||||||
private tipSmall: Node = null;
|
private tipSmall: Node = null;
|
||||||
@property(SlotGame)
|
|
||||||
private slotGame: SlotGame = null;
|
|
||||||
|
|
||||||
@property(Prefab)
|
@property(Prefab)
|
||||||
pfb_history: Prefab = null;
|
pfb_history: Prefab = null;
|
||||||
@ -266,19 +263,12 @@ export class SlotBar extends Component {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
allowClickManualStop(bl: boolean) {
|
|
||||||
this.hasClickSpin = bl;
|
|
||||||
this.manualStopNode.active = bl
|
|
||||||
}
|
|
||||||
|
|
||||||
notAllowClickManualStop(bl: boolean) {
|
|
||||||
this.hasClickManualStop = bl;
|
|
||||||
}
|
|
||||||
|
|
||||||
onBtnSpin() {
|
onBtnSpin() {
|
||||||
// 第一次点击 旋转
|
// 第一次点击 旋转
|
||||||
if (!this.hasClickSpin && !this.hasClickManualStop) {
|
if (!this.hasClickSpin && !this.hasClickManualStop) {
|
||||||
AudioManager.instance.playSFX("Spin_Button_Click");
|
AudioManager.instance.playSFX("Spin_Button_Click");
|
||||||
|
this.hasClickSpin = true;
|
||||||
|
this.manualStopNode.active = true
|
||||||
this.node.emit(SLOT_BAR_EVENT.ON_SPIN_CLICK);
|
this.node.emit(SLOT_BAR_EVENT.ON_SPIN_CLICK);
|
||||||
this.spinAni.startSpin();
|
this.spinAni.startSpin();
|
||||||
|
|
||||||
@ -297,14 +287,13 @@ export class SlotBar extends Component {
|
|||||||
// 第一次点击 旋转
|
// 第一次点击 旋转
|
||||||
if (!this.hasClickSpin && !this.hasClickManualStop) {
|
if (!this.hasClickSpin && !this.hasClickManualStop) {
|
||||||
// AudioManager.instance.playSFX('Spin_Button_Click');
|
// AudioManager.instance.playSFX('Spin_Button_Click');
|
||||||
|
this.hasClickSpin = true;
|
||||||
|
this.manualStopNode.active = true
|
||||||
|
|
||||||
this.setBtnEnable(this.subBtn, false);
|
this.setBtnEnable(this.subBtn, false);
|
||||||
this.setBtnEnable(this.addBtn, false);
|
this.setBtnEnable(this.addBtn, false);
|
||||||
this.setBtnEnable(this.autoBtn, false);
|
this.setBtnEnable(this.autoBtn, false);
|
||||||
this.setBtnEnable(this.menuBtn, false);
|
this.setBtnEnable(this.menuBtn, false);
|
||||||
|
|
||||||
}
|
}
|
||||||
// 第二次点击 手动停止
|
// 第二次点击 手动停止
|
||||||
else if (this.hasClickSpin && !this.hasClickManualStop) {
|
else if (this.hasClickSpin && !this.hasClickManualStop) {
|
||||||
@ -315,7 +304,7 @@ export class SlotBar extends Component {
|
|||||||
onBtnTestSpin(event, args) {
|
onBtnTestSpin(event, args) {
|
||||||
// 第一次点击 旋转
|
// 第一次点击 旋转
|
||||||
if (!this.hasClickSpin && !this.hasClickManualStop) {
|
if (!this.hasClickSpin && !this.hasClickManualStop) {
|
||||||
// this.hasClickSpin = true;
|
this.hasClickSpin = true;
|
||||||
this.node.emit(SLOT_BAR_EVENT.ON_TEST_SPIN_CLICK, args);
|
this.node.emit(SLOT_BAR_EVENT.ON_TEST_SPIN_CLICK, args);
|
||||||
|
|
||||||
this.setBtnEnable(this.subBtn, false);
|
this.setBtnEnable(this.subBtn, false);
|
||||||
@ -336,7 +325,7 @@ export class SlotBar extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
manualStop() {
|
manualStop() {
|
||||||
this.notAllowClickManualStop(true)
|
this.hasClickManualStop = true;
|
||||||
this.spinAni.stopSpin();
|
this.spinAni.stopSpin();
|
||||||
this.setBtnEnable(this.spinBtn, false);
|
this.setBtnEnable(this.spinBtn, false);
|
||||||
}
|
}
|
||||||
@ -583,8 +572,6 @@ export class SlotBar extends Component {
|
|||||||
this.setBtnEnable(this.menuBtn, false);
|
this.setBtnEnable(this.menuBtn, false);
|
||||||
this.setBtnEnable(this.spinBtn, false);
|
this.setBtnEnable(this.spinBtn, false);
|
||||||
|
|
||||||
this.slotGame.showFeatureBuy(true)
|
|
||||||
|
|
||||||
this.setBtnVisible(this.spinBtn, false);
|
this.setBtnVisible(this.spinBtn, false);
|
||||||
this.setBtnVisible(this.stopAutoBtn, true);
|
this.setBtnVisible(this.stopAutoBtn, true);
|
||||||
|
|
||||||
@ -605,8 +592,6 @@ export class SlotBar extends Component {
|
|||||||
this.setBtnVisible(this.spinBtn, true);
|
this.setBtnVisible(this.spinBtn, true);
|
||||||
this.setBtnVisible(this.stopAutoBtn, false);
|
this.setBtnVisible(this.stopAutoBtn, false);
|
||||||
this.setBtnEnable(this.spinBtn, false);
|
this.setBtnEnable(this.spinBtn, false);
|
||||||
this.slotGame.showFeatureBuy(false)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reconnectState(hasDelete: boolean = false) {
|
reconnectState(hasDelete: boolean = false) {
|
||||||
@ -620,10 +605,9 @@ export class SlotBar extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
resetAllState() {
|
resetAllState() {
|
||||||
this.allowClickManualStop(false)
|
this.hasClickSpin = false;
|
||||||
this.notAllowClickManualStop(false)
|
this.hasClickManualStop = false;
|
||||||
|
this.manualStopNode.active = false
|
||||||
|
|
||||||
this.isAuto = false;
|
this.isAuto = false;
|
||||||
this.setBtnVisible(this.spinBtn, true);
|
this.setBtnVisible(this.spinBtn, true);
|
||||||
this.spinAni.stopSpin();
|
this.spinAni.stopSpin();
|
||||||
|
|||||||
@ -7,7 +7,6 @@ import { gold2cash } from '../../Loading/scripts/comm';
|
|||||||
import { NodePoolManager } from '../../Loading/scripts/manager/NodePoolManager';
|
import { NodePoolManager } from '../../Loading/scripts/manager/NodePoolManager';
|
||||||
import { I18nManager } from '../../Loading/scripts/manager/I18nManager';
|
import { I18nManager } from '../../Loading/scripts/manager/I18nManager';
|
||||||
import { AudioManager } from '../../Loading/scripts/manager/AudioManager';
|
import { AudioManager } from '../../Loading/scripts/manager/AudioManager';
|
||||||
import { UpLayer } from './game/UpLayer';
|
|
||||||
let { ccclass, property } = _decorator;
|
let { ccclass, property } = _decorator;
|
||||||
|
|
||||||
//倍率瓶子的所在位置
|
//倍率瓶子的所在位置
|
||||||
@ -33,9 +32,6 @@ export class SlotGame extends Component {
|
|||||||
@property(Prefab)
|
@property(Prefab)
|
||||||
multiPre: Prefab = null;
|
multiPre: Prefab = null;
|
||||||
|
|
||||||
@property(UpLayer)
|
|
||||||
upLayer: UpLayer = null;
|
|
||||||
|
|
||||||
@property(Prefab)
|
@property(Prefab)
|
||||||
multiLabelPre: Prefab = null;
|
multiLabelPre: Prefab = null;
|
||||||
|
|
||||||
@ -109,7 +105,7 @@ export class SlotGame extends Component {
|
|||||||
this.grayNode = this.node.getChildByName('grayNode');
|
this.grayNode = this.node.getChildByName('grayNode');
|
||||||
this.winLayer = this.node.getChildByName('winLayer');
|
this.winLayer = this.node.getChildByName('winLayer');
|
||||||
this.readyHand = this.node.getChildByName('readyHand');
|
this.readyHand = this.node.getChildByName('readyHand');
|
||||||
this.scatterLayer = this.node.getChildByPath('scatterLayer')
|
this.scatterLayer = this.node.getChildByPath('scatterLayer/layer')
|
||||||
|
|
||||||
this.winType = this.node.getChildByName('winType');
|
this.winType = this.node.getChildByName('winType');
|
||||||
|
|
||||||
@ -229,15 +225,9 @@ export class SlotGame extends Component {
|
|||||||
|
|
||||||
// 初始化滚轮数据
|
// 初始化滚轮数据
|
||||||
initRollerWithIcon(gameInfo: any) {
|
initRollerWithIcon(gameInfo: any) {
|
||||||
this.upLayer.hideAllLayer();
|
|
||||||
this.rollerManager.setUpLayer(this.upLayer);
|
|
||||||
this.gameInfo = gameInfo;
|
this.gameInfo = gameInfo;
|
||||||
this.spinData = this.gameInfo.Data;
|
this.spinData = this.gameInfo.Data;
|
||||||
this.rollerManager.initRollerWithIcon(this.spinData);
|
this.rollerManager.initRollerWithIcon(this.spinData);
|
||||||
this.rollerManager.vRollers.forEach((roller) => {
|
|
||||||
this.upLayer.syncSpecialFromRoller(roller);
|
|
||||||
})
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setRollerIconRule(rollerIconRule: any) {
|
setRollerIconRule(rollerIconRule: any) {
|
||||||
@ -249,7 +239,6 @@ export class SlotGame extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
spin(isFree: boolean) {
|
spin(isFree: boolean) {
|
||||||
this.upLayer.giveBackAllSpecials(this.rollerManager);
|
|
||||||
AudioManager.instance.playSFX('Spin_Button_Click');
|
AudioManager.instance.playSFX('Spin_Button_Click');
|
||||||
this.setWaysCount('...');
|
this.setWaysCount('...');
|
||||||
if (!isFree) {
|
if (!isFree) {
|
||||||
@ -613,8 +602,6 @@ export class SlotGame extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onRollerStop(rollerId: number) {
|
onRollerStop(rollerId: number) {
|
||||||
let roller = this.rollerManager.allRollers[rollerId];
|
|
||||||
this.upLayer.syncSpecialFromRoller(roller);
|
|
||||||
// if (rollerId < 1) return;
|
// if (rollerId < 1) return;
|
||||||
// 计算当前停止列之前的所有数字的乘积
|
// 计算当前停止列之前的所有数字的乘积
|
||||||
let totalWays = 1;
|
let totalWays = 1;
|
||||||
@ -645,7 +632,6 @@ export class SlotGame extends Component {
|
|||||||
|
|
||||||
// 新增:事件处理方法
|
// 新增:事件处理方法
|
||||||
onAllRollerIconsDeleted() {
|
onAllRollerIconsDeleted() {
|
||||||
this.upLayer.giveBackAllSpecials(this.rollerManager);
|
|
||||||
// 向上传递事件
|
// 向上传递事件
|
||||||
this.node.emit(SLOT_GAME_EVENT.ALL_ROLLER_ICONS_DELETED);
|
this.node.emit(SLOT_GAME_EVENT.ALL_ROLLER_ICONS_DELETED);
|
||||||
}
|
}
|
||||||
@ -656,7 +642,6 @@ export class SlotGame extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onAllRollerIconsFallen() {
|
onAllRollerIconsFallen() {
|
||||||
this.upLayer.resetAndSyncAllSpecials(this.rollerManager);
|
|
||||||
// 向上传递事件
|
// 向上传递事件
|
||||||
this.node.emit(SLOT_GAME_EVENT.ALL_ROLLER_ICONS_FALLEN);
|
this.node.emit(SLOT_GAME_EVENT.ALL_ROLLER_ICONS_FALLEN);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,6 @@ import { FreeSpinEnter } from "./game/FreeSpinEnter";
|
|||||||
import { FreeSpinAdd } from "./game/FreeSpinAdd";
|
import { FreeSpinAdd } from "./game/FreeSpinAdd";
|
||||||
import { SysGift } from "./game/SysGift";
|
import { SysGift } from "./game/SysGift";
|
||||||
import { ErrorManager } from "../../Loading/scripts/manager/ErrorManager";
|
import { ErrorManager } from "../../Loading/scripts/manager/ErrorManager";
|
||||||
import { SlotRanking } from "../SlotRanking/scripts/SlotRanking";
|
|
||||||
|
|
||||||
let { ccclass, property } = _decorator;
|
let { ccclass, property } = _decorator;
|
||||||
|
|
||||||
@ -37,7 +36,6 @@ interface GameState {
|
|||||||
isInFreeSpin: boolean;
|
isInFreeSpin: boolean;
|
||||||
isOneRoundEnd: boolean;
|
isOneRoundEnd: boolean;
|
||||||
isDebug: boolean;
|
isDebug: boolean;
|
||||||
isFeatureBuySpin: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 自动旋转配置接口
|
// 自动旋转配置接口
|
||||||
@ -53,7 +51,7 @@ interface AutoSpinConfig {
|
|||||||
export class SlotScene extends Component {
|
export class SlotScene extends Component {
|
||||||
// 组件引用
|
// 组件引用
|
||||||
@property(SlotGame)
|
@property(SlotGame)
|
||||||
public slotGame: SlotGame = null;
|
private slotGame: SlotGame = null;
|
||||||
|
|
||||||
@property(SlotBar)
|
@property(SlotBar)
|
||||||
private slotBar: SlotBar = null;
|
private slotBar: SlotBar = null;
|
||||||
@ -79,9 +77,6 @@ export class SlotScene extends Component {
|
|||||||
@property(SysGift)
|
@property(SysGift)
|
||||||
private SysGift: SysGift = null;
|
private SysGift: SysGift = null;
|
||||||
|
|
||||||
@property(SlotRanking)
|
|
||||||
slotRanking: SlotRanking = null;
|
|
||||||
|
|
||||||
// 游戏数据
|
// 游戏数据
|
||||||
private gameInfo: GameInfo = null;
|
private gameInfo: GameInfo = null;
|
||||||
private spinInfo: any = null;
|
private spinInfo: any = null;
|
||||||
@ -92,7 +87,7 @@ export class SlotScene extends Component {
|
|||||||
private objectId: string[] = [];
|
private objectId: string[] = [];
|
||||||
|
|
||||||
// 游戏状态管理
|
// 游戏状态管理
|
||||||
public gameState: GameState = {
|
private gameState: GameState = {
|
||||||
isOnReconnect: false,
|
isOnReconnect: false,
|
||||||
isAutoSpin: false,
|
isAutoSpin: false,
|
||||||
isEliminating: false,
|
isEliminating: false,
|
||||||
@ -100,7 +95,6 @@ export class SlotScene extends Component {
|
|||||||
isFirstFreeSpin: false,
|
isFirstFreeSpin: false,
|
||||||
isInFreeSpin: false,
|
isInFreeSpin: false,
|
||||||
isOneRoundEnd: false,
|
isOneRoundEnd: false,
|
||||||
isFeatureBuySpin: false,
|
|
||||||
isDebug: false,
|
isDebug: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -116,10 +110,8 @@ export class SlotScene extends Component {
|
|||||||
batchingTimer: number = 0;
|
batchingTimer: number = 0;
|
||||||
isErr: boolean = false;
|
isErr: boolean = false;
|
||||||
|
|
||||||
async start() {
|
|
||||||
this.slotRanking.node.active = true
|
|
||||||
this.slotRanking.setSlotScene(this);
|
|
||||||
|
|
||||||
|
async start() {
|
||||||
await this.init();
|
await this.init();
|
||||||
// this.TotalWin.show(505000, 10)
|
// this.TotalWin.show(505000, 10)
|
||||||
// this.FreeSpinEnter.show(8)
|
// this.FreeSpinEnter.show(8)
|
||||||
@ -273,8 +265,6 @@ export class SlotScene extends Component {
|
|||||||
this.node.addChild(panel);
|
this.node.addChild(panel);
|
||||||
featureBuy.show(this.slotBar.getBet(), this.gameInfo.BuyMul, () => {
|
featureBuy.show(this.slotBar.getBet(), this.gameInfo.BuyMul, () => {
|
||||||
this.spinBtnClick(false, true);
|
this.spinBtnClick(false, true);
|
||||||
this.gameState.isFeatureBuySpin = true;
|
|
||||||
|
|
||||||
this.slotBar.featureBuySpin();
|
this.slotBar.featureBuySpin();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -323,8 +313,7 @@ export class SlotScene extends Component {
|
|||||||
}
|
}
|
||||||
if (!this.gameState.isDebug) {
|
if (!this.gameState.isDebug) {
|
||||||
this.spinInfo = await callGameApi("spin", msg);
|
this.spinInfo = await callGameApi("spin", msg);
|
||||||
this.slotBar.allowClickManualStop(true)
|
|
||||||
this.slotBar.notAllowClickManualStop(false)
|
|
||||||
if (this.spinInfo.Frb.Ongoing) {
|
if (this.spinInfo.Frb.Ongoing) {
|
||||||
if (!isFreeSpin) {
|
if (!isFreeSpin) {
|
||||||
let count = this.spinInfo.Frb.Ongoing.Frn;
|
let count = this.spinInfo.Frb.Ongoing.Frn;
|
||||||
@ -386,9 +375,9 @@ export class SlotScene extends Component {
|
|||||||
if (!this.isReceiveMsg) return;
|
if (!this.isReceiveMsg) return;
|
||||||
|
|
||||||
// 免费游戏不能手动停止
|
// 免费游戏不能手动停止
|
||||||
// if (this.gameState.isInFreeSpin) {
|
if (this.gameState.isInFreeSpin) {
|
||||||
// return;
|
return;
|
||||||
// }
|
}
|
||||||
|
|
||||||
// 滚轮没有开始旋转的时候不能停止
|
// 滚轮没有开始旋转的时候不能停止
|
||||||
if (!this.slotGame.isScroll()) return;
|
if (!this.slotGame.isScroll()) return;
|
||||||
@ -788,8 +777,6 @@ export class SlotScene extends Component {
|
|||||||
isReconnect: boolean = false
|
isReconnect: boolean = false
|
||||||
) {
|
) {
|
||||||
this.gameState.isFirstFreeSpin = false;
|
this.gameState.isFirstFreeSpin = false;
|
||||||
this.gameState.isFeatureBuySpin = false;
|
|
||||||
|
|
||||||
this.gameState.isInFreeSpin = false;
|
this.gameState.isInFreeSpin = false;
|
||||||
this.slotBar.exitFreeSpin();
|
this.slotBar.exitFreeSpin();
|
||||||
|
|
||||||
@ -984,14 +971,6 @@ export class SlotScene extends Component {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 5:
|
|
||||||
msg1 = I18nManager.instance.t('AID_ERROR_CONTENT_4');
|
|
||||||
msg2 = I18nManager.instance.t('AID_ERROR_CODE_4');
|
|
||||||
tip = `${msg1}\n${msg2}`;
|
|
||||||
if (!this.TipPanel.getHasTip()) {
|
|
||||||
this.TipPanel.showTip(title, tip, () => { window.close() }, () => { callback?.(); }, I18nManager.instance.t('AID_ERROR_QUIT_BUTTON'), I18nManager.instance.t('AID_ERROR_RETRY_BUTTON'), true);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -70,7 +70,7 @@ export abstract class BaseRoller extends Component {
|
|||||||
iconFactory: IconFactory = null;
|
iconFactory: IconFactory = null;
|
||||||
|
|
||||||
// 保护属性,子类可访问
|
// 保护属性,子类可访问
|
||||||
_rollerId: number = 0;
|
protected _rollerId: number = 0;
|
||||||
protected _view: Node = null;
|
protected _view: Node = null;
|
||||||
protected _content: Node = null;
|
protected _content: Node = null;
|
||||||
protected _info: Info = new Info();
|
protected _info: Info = new Info();
|
||||||
@ -608,7 +608,7 @@ export abstract class BaseRoller extends Component {
|
|||||||
return null; // 返回安全的默认值
|
return null; // 返回安全的默认值
|
||||||
}
|
}
|
||||||
|
|
||||||
return icon.getWorldPosition();
|
return this._content.getComponent(UITransform).convertToWorldSpaceAR(icon.position);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -389,11 +389,6 @@ export class BigWinUI extends Component {
|
|||||||
this.unscheduleAllCallbacks();
|
this.unscheduleAllCallbacks();
|
||||||
this.currentScore = this.winScore;
|
this.currentScore = this.winScore;
|
||||||
this.updateScoreLabel();
|
this.updateScoreLabel();
|
||||||
this.bigWinAudio.stop();
|
|
||||||
this.bigWinAudio.clip = this.bigWinAudioClips[3];
|
|
||||||
if (!AudioManager.instance.getMuted()) {
|
|
||||||
this.bigWinAudio.play();
|
|
||||||
}
|
|
||||||
this.endAni();
|
this.endAni();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -236,7 +236,7 @@ export class HistoryDetail extends Component {
|
|||||||
|
|
||||||
info.getChildByName("Label_Bet").getComponent(Label).string = getTranslate(this.dict, "Bet") + `(${currencySymbol})`;
|
info.getChildByName("Label_Bet").getComponent(Label).string = getTranslate(this.dict, "Bet") + `(${currencySymbol})`;
|
||||||
|
|
||||||
info.getChildByName("txt_profit").getComponent(Label).string = fixNum(pan.Profit);
|
info.getChildByName("txt_profit").getComponent(Label).string = fixNum(pan.WinInfo ? pan.WinInfo.Score : 0);
|
||||||
info.getChildByName("Label_Profit").getComponent(Label).string = getTranslate(this.dict, "Profit") + `(${currencySymbol})`;
|
info.getChildByName("Label_Profit").getComponent(Label).string = getTranslate(this.dict, "Profit") + `(${currencySymbol})`;
|
||||||
|
|
||||||
info.getChildByName("txt_balance_before").getComponent(Label).string = fixNum(pan.Balance - pan.AllScore + pan.Bet) + "➡️";
|
info.getChildByName("txt_balance_before").getComponent(Label).string = fixNum(pan.Balance - pan.AllScore + pan.Bet) + "➡️";
|
||||||
@ -432,7 +432,7 @@ export class HistoryDetail extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// scatter 数量统计 node_scatter
|
// scatter 数量统计 node_scatter
|
||||||
if (pan.Symbol.ScNum >= 4 && (pan.Free && pan.Free.GamesTimes >= 10)) {
|
if (pan.Symbol.ScNum >= 4 && pan.Free.GamesTimes >= 10) {
|
||||||
const node_scatter = content.getChildByName("node_scatter")
|
const node_scatter = content.getChildByName("node_scatter")
|
||||||
const txt_scatter_num = node_scatter.getChildByName("txt_scatter_num").getComponent(Label)
|
const txt_scatter_num = node_scatter.getChildByName("txt_scatter_num").getComponent(Label)
|
||||||
txt_scatter_num.string = "x " + pan.Symbol.ScNum
|
txt_scatter_num.string = "x " + pan.Symbol.ScNum
|
||||||
|
|||||||
@ -243,16 +243,6 @@ export class Roller extends BaseRoller {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getNodeMsgFromPos(pos: number): { node: Node, start: number, height: number } | null {
|
|
||||||
let iconNode = this.getIconNode(pos);
|
|
||||||
if (!iconNode) return null;
|
|
||||||
|
|
||||||
let start = iconNode.getComponent(Icon).startPos;
|
|
||||||
let height = iconNode.getComponent(Icon).lHeight;
|
|
||||||
|
|
||||||
return { node: iconNode, start: start, height: height };
|
|
||||||
}
|
|
||||||
|
|
||||||
stopScrollWork(stopSpeedData: number[][]) {
|
stopScrollWork(stopSpeedData: number[][]) {
|
||||||
this._info.hasStopScrollWork = true;
|
this._info.hasStopScrollWork = true;
|
||||||
this.changeState(ROLLER_STATE.DECELERATE);
|
this.changeState(ROLLER_STATE.DECELERATE);
|
||||||
|
|||||||
@ -43,8 +43,6 @@ export class RollerManager extends Component {
|
|||||||
{ row: 5, col: 1 },
|
{ row: 5, col: 1 },
|
||||||
{ row: 5, col: 1 },
|
{ row: 5, col: 1 },
|
||||||
];
|
];
|
||||||
upLayer: any = null;
|
|
||||||
|
|
||||||
// 竖向滚轮数组
|
// 竖向滚轮数组
|
||||||
vRollers: Roller[] = [];
|
vRollers: Roller[] = [];
|
||||||
// 滚轮数组
|
// 滚轮数组
|
||||||
@ -136,10 +134,6 @@ export class RollerManager extends Component {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setUpLayer(upLayer: any) {
|
|
||||||
this.upLayer = upLayer;
|
|
||||||
}
|
|
||||||
|
|
||||||
registerEvent() {
|
registerEvent() {
|
||||||
for (let lx = 0; lx < this.allRollers.length; lx++) {
|
for (let lx = 0; lx < this.allRollers.length; lx++) {
|
||||||
let roller = this.allRollers[lx];
|
let roller = this.allRollers[lx];
|
||||||
@ -572,8 +566,6 @@ export class RollerManager extends Component {
|
|||||||
roller.setCroSymbols(rollerCroSymbols);
|
roller.setCroSymbols(rollerCroSymbols);
|
||||||
roller.manualStopScroll(stopData)
|
roller.manualStopScroll(stopData)
|
||||||
}
|
}
|
||||||
this.upLayer.resetAndSyncAllSpecials(this);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 对服务器下发的数据进行操作
|
// 对服务器下发的数据进行操作
|
||||||
@ -641,7 +633,6 @@ export class RollerManager extends Component {
|
|||||||
uniquePositions.forEach(pos => {
|
uniquePositions.forEach(pos => {
|
||||||
let iconNode = this.getIconNode(pos);
|
let iconNode = this.getIconNode(pos);
|
||||||
if (iconNode) {
|
if (iconNode) {
|
||||||
this.upLayer.removeSpecialByNode(iconNode);
|
|
||||||
// 保存原始父节点和位置信息到Map中
|
// 保存原始父节点和位置信息到Map中
|
||||||
this.winIconNodeMap.set(pos, {
|
this.winIconNodeMap.set(pos, {
|
||||||
node: iconNode,
|
node: iconNode,
|
||||||
|
|||||||
@ -28,6 +28,13 @@ export class SysGift extends Component {
|
|||||||
|
|
||||||
onLoad(): void {
|
onLoad(): void {
|
||||||
this.hideAll();
|
this.hideAll();
|
||||||
|
let sp_win = this.info.getChildByName("sysgift_win")
|
||||||
|
|
||||||
|
|
||||||
|
sp_win.getComponent(LocalizedSprite).fetchRender();
|
||||||
|
let scale = 116 / sp_win.getComponent(Sprite).spriteFrame.width;
|
||||||
|
sp_win.setScale(scale, scale, scale);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hideAll() {
|
hideAll() {
|
||||||
@ -46,10 +53,9 @@ export class SysGift extends Component {
|
|||||||
|
|
||||||
let txt_spin_num = this.info.getChildByName("count")
|
let txt_spin_num = this.info.getChildByName("count")
|
||||||
txt_spin_num.getComponent(Label).string = (frb.Ongoing.Frn.toLocaleString())
|
txt_spin_num.getComponent(Label).string = (frb.Ongoing.Frn.toLocaleString())
|
||||||
let sp_win = this.info.getChildByName("sysgift_win")
|
|
||||||
let txt_win = this.info.getChildByName("win")
|
let txt_win = this.info.getChildByName("win")
|
||||||
let scale = 116 / sp_win.getComponent(Sprite).spriteFrame.width;
|
|
||||||
sp_win.setScale(scale, scale, scale);
|
|
||||||
|
|
||||||
let num = Math.round(frb.Ongoing.Fra * 100 + 1e-6) / 100;
|
let num = Math.round(frb.Ongoing.Fra * 100 + 1e-6) / 100;
|
||||||
txt_win.getComponent(Label).string = num.toLocaleString('en-US', {
|
txt_win.getComponent(Label).string = num.toLocaleString('en-US', {
|
||||||
|
|||||||
@ -1,99 +0,0 @@
|
|||||||
import { _decorator, Component, instantiate, Node, sp, tween, UIOpacity, UITransform, v3 } from 'cc';
|
|
||||||
import { PREVIEW } from 'cc/env';
|
|
||||||
import { Icon } from './Icon';
|
|
||||||
import { Roller } from './Roller';
|
|
||||||
import { RollerManager } from './RollerManager';
|
|
||||||
let { ccclass, property } = _decorator;
|
|
||||||
|
|
||||||
@ccclass('UpLayer')
|
|
||||||
export class UpLayer extends Component {
|
|
||||||
|
|
||||||
@property(Node)
|
|
||||||
wildLayer: Node = null;
|
|
||||||
|
|
||||||
@property(Node)
|
|
||||||
scatterLayer: Node = null;
|
|
||||||
|
|
||||||
|
|
||||||
// 统一隐藏所有层
|
|
||||||
hideAllLayer() {
|
|
||||||
this.wildLayer.active = false;
|
|
||||||
this.scatterLayer.active = false;
|
|
||||||
}
|
|
||||||
// ---------------------------------------readyHandNode、scatterLayer、wildLayer相关 ---------------------------------------
|
|
||||||
adopted = new Map<Node, { rollerId: number; startPos: number; height: number; type: 'wild' | 'scatter' }>();
|
|
||||||
|
|
||||||
|
|
||||||
setSpecialLayersActive() {
|
|
||||||
let hasWild = Array.from(this.adopted.values()).some(v => v.type === 'wild');
|
|
||||||
let hasScatter = Array.from(this.adopted.values()).some(v => v.type === 'scatter');
|
|
||||||
this.wildLayer.active = hasWild;
|
|
||||||
this.scatterLayer.active = hasScatter;
|
|
||||||
}
|
|
||||||
|
|
||||||
adoptSpecial(node: Node, rollerId: number, startPos: number, height: number, type: 'wild' | 'scatter') {
|
|
||||||
if (!node || !node.isValid) return;
|
|
||||||
if (this.adopted.has(node)) return;
|
|
||||||
|
|
||||||
let wp = node.worldPosition.clone();
|
|
||||||
let layer = type === 'wild' ? this.wildLayer : this.scatterLayer;
|
|
||||||
layer.active = true;
|
|
||||||
|
|
||||||
node.parent = layer;
|
|
||||||
node.setWorldPosition(wp);
|
|
||||||
node.setSiblingIndex(9999);
|
|
||||||
|
|
||||||
this.adopted.set(node, { rollerId, startPos, height, type });
|
|
||||||
this.setSpecialLayersActive();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 增量同步某列(停轮/单列落定时可用)
|
|
||||||
syncSpecialFromRoller(roller: Roller) {
|
|
||||||
if (!roller) return;
|
|
||||||
let seen = new Set<Node>();
|
|
||||||
for (let i = 0; i < roller.row; i++) {
|
|
||||||
let n = (roller as any).getIconNode(i);
|
|
||||||
if (!n || seen.has(n)) continue;
|
|
||||||
seen.add(n);
|
|
||||||
|
|
||||||
let icon = n.getComponent(Icon);
|
|
||||||
if (!icon || !icon._isWildOrScatter) continue;
|
|
||||||
|
|
||||||
let msg = (roller as any).getNodeMsgFromPos(i);
|
|
||||||
if (!msg) continue;
|
|
||||||
|
|
||||||
let type: 'wild' | 'scatter' = icon.index === 0 ? 'wild' : 'scatter';
|
|
||||||
this.adoptSpecial(msg.node, roller._rollerId, msg.start, msg.height, type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 删除前:去登记,避免后续“归还”
|
|
||||||
removeSpecialByNode(node: Node) {
|
|
||||||
if (!node) return;
|
|
||||||
if (this.adopted.delete(node)) this.setSpecialLayersActive();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 统一归还(开新轮或重算前调用)
|
|
||||||
giveBackAllSpecials(rm: RollerManager) {
|
|
||||||
if (!rm) return;
|
|
||||||
this.adopted.forEach((info, node) => {
|
|
||||||
if (!node || !node.isValid) return;
|
|
||||||
let roller = rm.allRollers[info.rollerId];
|
|
||||||
if (!roller) return;
|
|
||||||
node.parent = roller.node;
|
|
||||||
node.setPosition(roller.getIconPosition(info.startPos, info.height));
|
|
||||||
});
|
|
||||||
this.adopted.clear();
|
|
||||||
this.setSpecialLayersActive();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 全量重算:不累加,重新扫描所有列
|
|
||||||
resetAndSyncAllSpecials(rm: RollerManager) {
|
|
||||||
if (!rm) return;
|
|
||||||
this.giveBackAllSpecials(rm); // 清空旧数据与节点
|
|
||||||
for (let i = 0; i < rm.allRollers.length; i++) {
|
|
||||||
this.syncSpecialFromRoller(rm.allRollers[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@ -76,9 +76,7 @@ export class LayoutAdapter extends Component {
|
|||||||
const texH = this.sprite.spriteFrame.height;
|
const texH = this.sprite.spriteFrame.height;
|
||||||
const scale = Math.max(size.width / texW, size.height / texH);
|
const scale = Math.max(size.width / texW, size.height / texH);
|
||||||
this.BG_01.setScale(scale, scale); // 铺满并保持比例
|
this.BG_01.setScale(scale, scale); // 铺满并保持比例
|
||||||
if (this.Logo.isValid) {
|
this.changeLoge(size.height)
|
||||||
this.changeLoge(size.height)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (this.isMobile()) {
|
if (this.isMobile()) {
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import { PREVIEW } from "cc/env"
|
|||||||
const gameId = "rp_11001";
|
const gameId = "rp_11001";
|
||||||
// let apiaddr = "https://rpgames-api.rpfafafahkdev.com";
|
// let apiaddr = "https://rpgames-api.rpfafafahkdev.com";
|
||||||
let apiaddr = "";
|
let apiaddr = "";
|
||||||
let token = "eyJQIjoxMDA5NDksIkUiOjE3Njc4ODExMzMsIlMiOjEwMDEsIkQiOiJycF8xMTAwMSJ9.N2C9PWfr9Vjv_Ve_1OTGwCBh40m1mTg_gZhq3mu43wg";
|
let token = "eyJQIjoxMDA5NDksIkUiOjE3NjcxMDIxMTgsIlMiOjk5OCwiRCI6InJwXzExMDAxIn0.qCCuGCYZ-poXpw3BxTLjKnCm9SDdzg7Gd-7H8I5MlzQ";
|
||||||
|
|
||||||
|
|
||||||
let language = "en"
|
let language = "en"
|
||||||
|
|||||||
123
assets/Loading/scripts/i18n/LocalizedSpine.ts
Normal file
123
assets/Loading/scripts/i18n/LocalizedSpine.ts
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
import { _decorator, Component, resources } from 'cc';
|
||||||
|
import { sp } from 'cc';
|
||||||
|
import { I18nManager } from '../manager/I18nManager';
|
||||||
|
|
||||||
|
const { ccclass, property, executeInEditMode } = _decorator;
|
||||||
|
|
||||||
|
@ccclass('LocalizedSpine')
|
||||||
|
export class LocalizedSpine extends Component {
|
||||||
|
private spineComponent: sp.Skeleton | null = null;
|
||||||
|
|
||||||
|
@property({ tooltip: 'Spine资源名字' })
|
||||||
|
private spineName: string = '';
|
||||||
|
|
||||||
|
@property({ tooltip: '默认动画名称' })
|
||||||
|
private defaultAnimation: string = '';
|
||||||
|
|
||||||
|
@property({ tooltip: '是否自动播放默认动画' })
|
||||||
|
private autoPlay: boolean = true;
|
||||||
|
|
||||||
|
onLoad() {
|
||||||
|
if (!I18nManager.instance.getIsReady()) {
|
||||||
|
I18nManager.instance.init('en');
|
||||||
|
}
|
||||||
|
this.fetchRender();
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchRender() {
|
||||||
|
if (!this.spineComponent) {
|
||||||
|
this.spineComponent = this.getComponent(sp.Skeleton);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.spineComponent) {
|
||||||
|
this.updateSpine();
|
||||||
|
} else {
|
||||||
|
console.warn(`LocalizedSpine: No Spine component found on node ${this.node.name}`);
|
||||||
|
this.loadDefaultSpine();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public updateSpine() {
|
||||||
|
if (!this.spineComponent || !this.spineName) return;
|
||||||
|
|
||||||
|
const currentLanguage = I18nManager.instance.currentLanguage;
|
||||||
|
const cacheKey = `${currentLanguage}_${this.spineName}`;
|
||||||
|
|
||||||
|
// 从I18nManager获取缓存的SpineData
|
||||||
|
const cachedSpineData = I18nManager.instance.spineCache.get(cacheKey);
|
||||||
|
if (cachedSpineData) {
|
||||||
|
this.setNewSpineData(cachedSpineData);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果缓存中没有,从resources加载
|
||||||
|
const spinePath = `i18nSprite/${currentLanguage}/${this.spineName}_${currentLanguage}`;
|
||||||
|
resources.load(spinePath, sp.SkeletonData, (err, spineData) => {
|
||||||
|
if (err) {
|
||||||
|
console.warn(`Failed to load spine: ${spinePath}`, err);
|
||||||
|
this.loadDefaultSpine();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spineData) {
|
||||||
|
// 添加到I18nManager的缓存中
|
||||||
|
I18nManager.instance.spineCache.set(cacheKey, spineData);
|
||||||
|
this.setNewSpineData(spineData);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private loadDefaultSpine() {
|
||||||
|
const defaultPath = `i18nSpine/en/${this.spineName}_en`;
|
||||||
|
const cacheKey = `en_${this.spineName}`;
|
||||||
|
|
||||||
|
// 从I18nManager获取默认语言的缓存
|
||||||
|
const cachedSpineData = I18nManager.instance.spineCache.get(cacheKey);
|
||||||
|
if (cachedSpineData) {
|
||||||
|
this.setNewSpineData(cachedSpineData);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
resources.load(defaultPath, sp.SkeletonData, (err, spineData) => {
|
||||||
|
if (err) {
|
||||||
|
console.error('Failed to load default spine:', err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spineData) {
|
||||||
|
I18nManager.instance.spineCache.set(cacheKey, spineData);
|
||||||
|
this.setNewSpineData(spineData);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private setNewSpineData(newData: sp.SkeletonData) {
|
||||||
|
if (this.spineComponent) {
|
||||||
|
this.spineComponent.skeletonData = newData;
|
||||||
|
|
||||||
|
// 如果设置了默认动画且启用了自动播放,则播放默认动画
|
||||||
|
if (this.defaultAnimation && this.autoPlay) {
|
||||||
|
this.spineComponent.setAnimation(0, this.defaultAnimation, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public setSpineName(name: string) {
|
||||||
|
this.spineName = name;
|
||||||
|
this.updateSpine();
|
||||||
|
}
|
||||||
|
|
||||||
|
public playAnimation(animName: string, loop: boolean = false) {
|
||||||
|
if (this.spineComponent) {
|
||||||
|
this.spineComponent.setAnimation(0, animName, loop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onDestroy() {
|
||||||
|
// 清理组件引用
|
||||||
|
if (this.spineComponent) {
|
||||||
|
this.spineComponent.skeletonData = null;
|
||||||
|
}
|
||||||
|
this.spineComponent = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -2,7 +2,7 @@
|
|||||||
"ver": "4.0.24",
|
"ver": "4.0.24",
|
||||||
"importer": "typescript",
|
"importer": "typescript",
|
||||||
"imported": true,
|
"imported": true,
|
||||||
"uuid": "55162d22-5267-4d67-9e5d-d56c2cc460eb",
|
"uuid": "fff06ff8-efe2-4de7-a99a-f141dbd008f8",
|
||||||
"files": [],
|
"files": [],
|
||||||
"subMetas": {},
|
"subMetas": {},
|
||||||
"userData": {}
|
"userData": {}
|
||||||
@ -1,35 +1,105 @@
|
|||||||
import { _decorator, Component, Sprite } from 'cc';
|
import { _decorator, Component, SpriteFrame, Sprite, resources } from 'cc';
|
||||||
import { I18nManager } from '../manager/I18nManager';
|
import { I18nManager } from '../manager/I18nManager';
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
const { ccclass, property, executeInEditMode } = _decorator;
|
||||||
|
|
||||||
@ccclass('LocalizedSprite')
|
@ccclass('LocalizedSprite')
|
||||||
export class LocalizedSprite extends Component {
|
export class LocalizedSprite extends Component {
|
||||||
private sprite: Sprite | null = null;
|
private sprite: Sprite | null = null;
|
||||||
|
|
||||||
@property({ tooltip: '资源名字' })
|
@property({ tooltip: '资源名字' })
|
||||||
private spriteName: string = '';
|
private spriteName: string = '';
|
||||||
|
|
||||||
onLoad() {
|
onLoad() {
|
||||||
this.sprite = this.getComponent(Sprite);
|
if (I18nManager.instance.ready) {
|
||||||
this.updateSprite();
|
this.fetchRender();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchRender() {
|
||||||
|
if (!this.sprite) {
|
||||||
|
this.sprite = this.getComponent(Sprite);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.sprite) {
|
||||||
|
this.updateSprite();
|
||||||
|
} else {
|
||||||
|
console.warn(`LocalizedSprite: No Sprite component found on node ${this.node.name}`);
|
||||||
|
this.loadDefaultSprite();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public updateSprite() {
|
public updateSprite() {
|
||||||
if (!this.sprite || !this.spriteName) return;
|
if (!this.sprite || !this.spriteName) return;
|
||||||
if (!I18nManager.instance.ready) return;
|
|
||||||
let cacheKey = `${I18nManager.instance.currentLanguage}_${this.spriteName}`;
|
|
||||||
let cachedFrame = I18nManager.instance.spriteFrameCache.get(cacheKey);
|
|
||||||
|
|
||||||
|
const currentLanguage = I18nManager.instance.currentLanguage;
|
||||||
|
const cacheKey = `${currentLanguage}_${this.spriteName}`;
|
||||||
|
|
||||||
|
// 从I18nManager获取缓存的SpriteFrame
|
||||||
|
const cachedFrame = I18nManager.instance.spriteFrameCache.get(cacheKey);
|
||||||
if (cachedFrame) {
|
if (cachedFrame) {
|
||||||
this.sprite.spriteFrame = cachedFrame;
|
this.setNewSpriteFrame(cachedFrame);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果缓存中没有,从resources加载
|
||||||
|
const spritePath = `i18nSprite/${currentLanguage}/${this.spriteName}/spriteFrame`;
|
||||||
|
resources.load(spritePath, SpriteFrame, (err, spriteFrame) => {
|
||||||
|
if (err) {
|
||||||
|
console.warn(`Failed to load sprite: ${spritePath}`, err);
|
||||||
|
this.loadDefaultSprite();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spriteFrame) {
|
||||||
|
// 添加到I18nManager的缓存中
|
||||||
|
I18nManager.instance.spriteFrameCache.set(cacheKey, spriteFrame);
|
||||||
|
this.setNewSpriteFrame(spriteFrame);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private loadDefaultSprite() {
|
||||||
|
const defaultPath = `i18nSprite/en/${this.spriteName}/spriteFrame`;
|
||||||
|
const cacheKey = `en_${this.spriteName}`;
|
||||||
|
|
||||||
|
// 从I18nManager获取默认语言的缓存
|
||||||
|
const cachedFrame = I18nManager.instance.spriteFrameCache.get(cacheKey);
|
||||||
|
if (cachedFrame) {
|
||||||
|
this.setNewSpriteFrame(cachedFrame);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
resources.load(defaultPath, SpriteFrame, (err, spriteFrame) => {
|
||||||
|
if (err) {
|
||||||
|
console.error('Failed to load default sprite:', err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spriteFrame) {
|
||||||
|
// 添加到I18nManager的缓存中
|
||||||
|
I18nManager.instance.spriteFrameCache.set(cacheKey, spriteFrame);
|
||||||
|
this.setNewSpriteFrame(spriteFrame);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private setNewSpriteFrame(newFrame: SpriteFrame) {
|
||||||
|
if (this.sprite) {
|
||||||
|
this.sprite.spriteFrame = newFrame;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
updateSpriteForPreload(language: string) {
|
public setSpriteName(name: string) {
|
||||||
this.sprite = this.getComponent(Sprite);
|
this.spriteName = name;
|
||||||
let cacheKey = `${language}_${this.spriteName}`;
|
this.updateSprite();
|
||||||
let cachedFrame = I18nManager.instance.spriteFrameCache.get(cacheKey);
|
}
|
||||||
this.sprite.spriteFrame = cachedFrame;
|
|
||||||
|
onDestroy() {
|
||||||
|
// 只清理当前组件的引用
|
||||||
|
if (this.sprite) {
|
||||||
|
this.sprite.spriteFrame = null;
|
||||||
|
}
|
||||||
|
this.sprite = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,46 +1,34 @@
|
|||||||
import {
|
import { _decorator, Component, Node, ProgressBar, Label, Button, view, VideoPlayer, UITransform, AssetManager, tween, ResolutionPolicy, game, director, Director, sys, macro, JsonAsset } from 'cc';
|
||||||
_decorator,
|
import { callGameApi, getIsRB7, getLanguage, initReqAddr } from './comm';
|
||||||
Component,
|
import { GameDataManager } from './manager/GameDataManager';
|
||||||
Node,
|
import { ResManager } from './manager/ResManager';
|
||||||
ProgressBar,
|
import { AudioManager } from './manager/AudioManager';
|
||||||
Label,
|
import { NodePoolManager } from './manager/NodePoolManager';
|
||||||
UITransform,
|
import { I18nManager } from './manager/I18nManager';
|
||||||
tween,
|
import { LocalizedSprite } from './i18n/LocalizedSprite';
|
||||||
JsonAsset,
|
import { initErrorManager } from './manager/ErrorManager';
|
||||||
Button,
|
let { ccclass, property } = _decorator;
|
||||||
} from "cc";
|
|
||||||
import {
|
|
||||||
callGameApi,
|
|
||||||
getIsRB7,
|
|
||||||
getLanguage,
|
|
||||||
initReqAddr,
|
|
||||||
} from "./comm";
|
|
||||||
import { DEBUG } from "cc/env";
|
|
||||||
import { initErrorManager } from "./manager/ErrorManager";
|
|
||||||
import { I18nManager } from "./manager/I18nManager";
|
|
||||||
import { LocalizedSprite } from "./i18n/LocalizedSprite";
|
|
||||||
import { AudioManager } from "./manager/AudioManager";
|
|
||||||
import { GameDataManager } from "./manager/GameDataManager";
|
|
||||||
import { ResManager } from "./manager/ResManager";
|
|
||||||
import { NodePoolManager } from "./manager/NodePoolManager";
|
|
||||||
|
|
||||||
const { ccclass, property } = _decorator;
|
@ccclass('LoadingUI')
|
||||||
|
export class LoadingUI extends Component {
|
||||||
|
//test
|
||||||
|
@property(Node)
|
||||||
|
BG: Node = null;
|
||||||
|
|
||||||
|
@property(Node)
|
||||||
|
LoadingUINode: Node = null;
|
||||||
|
|
||||||
|
@property(ProgressBar)
|
||||||
|
progressBar: ProgressBar = null;
|
||||||
|
|
||||||
@ccclass("Loading")
|
|
||||||
export class Loading extends Component {
|
|
||||||
// UI组件
|
|
||||||
@property(Node) progressNode: Node = null;
|
|
||||||
@property(ProgressBar) progressBar: ProgressBar = null;
|
|
||||||
@property(Label) progressLabel: Label = null;
|
|
||||||
@property(Label) loadingLabel: Label = null;
|
|
||||||
@property(Node) maskSpineNode: Node = null;
|
|
||||||
@property(Node) lightSpineNode: Node = null;
|
|
||||||
@property(Node) startBtnNode: Node = null;
|
|
||||||
@property(Node) LoadingUINode: Node = null;
|
|
||||||
@property(Node) rb7Logo: Node = null;
|
|
||||||
@property(JsonAsset) languageJson: JsonAsset = null;
|
|
||||||
@property(Label)
|
@property(Label)
|
||||||
tipLabel: Label = null;
|
progressLabel: Label = null;
|
||||||
|
|
||||||
|
@property(Label)
|
||||||
|
loadingTipLabel: Label = null;
|
||||||
|
|
||||||
|
@property(Label)
|
||||||
|
retryTipLabel: Label = null;
|
||||||
|
|
||||||
@property(Button)
|
@property(Button)
|
||||||
startBtn: Button = null;
|
startBtn: Button = null;
|
||||||
@ -48,275 +36,261 @@ export class Loading extends Component {
|
|||||||
@property(Label)
|
@property(Label)
|
||||||
startBtnLabel: Label = null;
|
startBtnLabel: Label = null;
|
||||||
|
|
||||||
|
@property(Node)
|
||||||
|
GameNode: Node = null;
|
||||||
|
|
||||||
|
@property(JsonAsset)
|
||||||
|
languageJson: JsonAsset = null;
|
||||||
|
|
||||||
private _networkComplete = false;
|
private _networkComplete = false;
|
||||||
private _retryCount = 0;
|
private _retryCount = 0;
|
||||||
private readonly MAX_RETRY = 5;
|
private readonly MAX_RETRY = 5;
|
||||||
// 加载状态
|
private INITIAL_PROGRESS = 0.3;
|
||||||
private isNetworkReady = false;
|
private _instanceGameNode = null;
|
||||||
private readonly PROGRESS_ANIMATION_DURATION = 0.3;
|
|
||||||
|
|
||||||
// 进度条阶段
|
|
||||||
private readonly PROGRESS_INIT = 0.2; // 初始化完成
|
|
||||||
private readonly PROGRESS_NETWORK = 0.5; // 网络请求完成
|
|
||||||
private readonly PROGRESS_RESOURCE = 0.9; // 资源加载完成
|
|
||||||
private readonly PROGRESS_COMPLETE = 1.0; // 完全加载完成
|
|
||||||
|
|
||||||
// 游戏节点
|
// 新增动画
|
||||||
private gameContainer: Node = null;
|
private maskUITransform: UITransform = null;
|
||||||
private gameNode: Node = null;
|
private lightNode: Node = null;
|
||||||
|
|
||||||
protected async onLoad() {
|
protected async onLoad() {
|
||||||
initReqAddr();
|
|
||||||
let language = getLanguage();
|
|
||||||
|
|
||||||
if (getLanguage() == 'zh') {
|
|
||||||
this.node.getChildByPath("Mask/LoadingUINode/logo_zh").active = true;
|
|
||||||
this.node.getChildByPath("Mask/LoadingUINode/logo_en").active = false;
|
|
||||||
} else {
|
|
||||||
this.node.getChildByPath("Mask/LoadingUINode/logo_zh").active = false;
|
|
||||||
this.node.getChildByPath("Mask/LoadingUINode/logo_en").active = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// initErrorManager();
|
// initErrorManager();
|
||||||
await I18nManager.instance.ensureI18nSprite(language, "2");
|
// 初始显示状态
|
||||||
this.node
|
this.initUI();
|
||||||
.getChildByPath('Mask/LoadingUINode/msg')
|
this.LoadingUINode.active = false;
|
||||||
.getComponent(LocalizedSprite)
|
}
|
||||||
.updateSpriteForPreload(language);
|
|
||||||
this.node.getChildByPath('Mask/LoadingUINode/msg').active = true;
|
|
||||||
|
|
||||||
await I18nManager.instance.init(language, this.languageJson);
|
|
||||||
I18nManager.instance.updateSceneRenderers();
|
|
||||||
|
|
||||||
this.initializeUI();
|
|
||||||
// 初始化完成,进度条到20%
|
|
||||||
this.updateProgress(this.PROGRESS_INIT);
|
|
||||||
|
|
||||||
|
async start() {
|
||||||
try {
|
try {
|
||||||
await this.initializeSystem();
|
initReqAddr();
|
||||||
|
this.node.getChildByName('Logo').active = getIsRB7();
|
||||||
|
await I18nManager.instance.init(getLanguage(), this.languageJson);
|
||||||
|
I18nManager.instance.updateSceneRenderers();
|
||||||
|
// this.LoadingUINode.getChildByName("bg").getComponent(LocalizedSprite).fetchRender();
|
||||||
|
this.LoadingUINode.active = true;
|
||||||
|
// 更新进度条到 0.4
|
||||||
|
this.updateProgress(0.4);
|
||||||
|
|
||||||
AudioManager.instance.init();
|
AudioManager.instance.init();
|
||||||
this.updateLoadingText("AID_LOADING");
|
game.setFrameRate(61);
|
||||||
|
// this.checkStartLoading();
|
||||||
|
// 开始网络请求
|
||||||
|
this.initNetwork();
|
||||||
|
|
||||||
// 延迟一下让用户看到进度条开始
|
|
||||||
this.scheduleOnce(() => {
|
|
||||||
this.startNetworkLoading();
|
|
||||||
}, 0.2);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Network initialization failed:", error);
|
console.error('Network initialization failed:', error);
|
||||||
this.handleError(error);
|
this.handleError(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private initUI() {
|
||||||
|
this.BG.active = true;
|
||||||
|
this.startBtn.node.active = false;
|
||||||
|
this.maskUITransform = this.LoadingUINode.getChildByName('mask').getComponent(UITransform);
|
||||||
|
this.lightNode = this.LoadingUINode.getChildByName('light');
|
||||||
|
this.updateProgress(this.INITIAL_PROGRESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** 初始化系统 */
|
private async initNetwork() {
|
||||||
private async initializeSystem() {
|
|
||||||
this.rb7Logo.active = getIsRB7();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 初始化UI */
|
|
||||||
private initializeUI() {
|
|
||||||
this.startBtnNode.active = false;
|
|
||||||
this.gameContainer = this.node
|
|
||||||
.getChildByPath('Mask/GameNode')
|
|
||||||
|
|
||||||
// 初始化进度条为0
|
|
||||||
this.updateProgress(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 开始网络加载 */
|
|
||||||
private async startNetworkLoading() {
|
|
||||||
this.updateLoadingText("AID_LOADING");
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
// 更新进度条到 0.6
|
||||||
|
this.updateProgress(0.6);
|
||||||
|
this.loadingTipLabel.string = I18nManager.instance.t('AID_LOADING');
|
||||||
|
this.retryTipLabel.string = '';
|
||||||
let gameInfo = await callGameApi("gameinfo", {});
|
let gameInfo = await callGameApi("gameinfo", {});
|
||||||
|
if (!gameInfo) throw new Error('Get game info failed');
|
||||||
GameDataManager.instance.gameInfo = gameInfo;
|
GameDataManager.instance.gameInfo = gameInfo;
|
||||||
this.isNetworkReady = true;
|
|
||||||
|
|
||||||
// 网络请求完成,进度条到50%
|
// 更新进度条到 0.8
|
||||||
this.updateProgress(this.PROGRESS_NETWORK);
|
this.updateProgress(0.8);
|
||||||
|
|
||||||
// 稍微延迟一下让用户看到进度变化
|
this._networkComplete = true;
|
||||||
this.scheduleOnce(() => {
|
|
||||||
this.startResourceLoading();
|
await GameDataManager.instance.preloadFrameTypeCache();
|
||||||
}, 0.3);
|
await GameDataManager.instance.preloadSymbolCache();
|
||||||
|
this.checkStartLoading();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Network initialization failed:", error);
|
console.error('Network initialization failed:', error);
|
||||||
this.handleError(error);
|
this.handleError(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private checkStartLoading() {
|
||||||
|
if (this._networkComplete) {
|
||||||
|
this.LoadingUINode.active = true;
|
||||||
|
this.startLoadingGameBundle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async startLoadingGameBundle() {
|
||||||
|
try {
|
||||||
|
// 显示加载UI
|
||||||
|
this.loadingTipLabel.string = I18nManager.instance.t('AID_LOADING');
|
||||||
|
this.retryTipLabel.string = '';
|
||||||
|
this.startBtn.node.active = false;
|
||||||
|
|
||||||
|
// 从 0.8 开始加载
|
||||||
|
let startProgress = 0.8;
|
||||||
|
|
||||||
|
// 使用新的合并函数加载 Bundle 和预制体
|
||||||
|
this._instanceGameNode = await ResManager.instance.loadPrefabFromBundle(
|
||||||
|
'Game',
|
||||||
|
'prefabs/SlotScene',
|
||||||
|
(finished: number, total: number) => {
|
||||||
|
if (total <= 0) return;
|
||||||
|
let bundleProgress = finished / total;
|
||||||
|
// 将加载进度映射到 0.8-1 的范围
|
||||||
|
let mappedProgress = startProgress + (bundleProgress * (1 - startProgress));
|
||||||
|
this.updateProgress(mappedProgress);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
this.updateProgress(1);
|
||||||
|
this.onLoadComplete();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Loading error:', error);
|
||||||
|
this.handleError(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private updateProgress(progress: number) {
|
||||||
|
// 使用 tween 使进度条更新更平滑
|
||||||
|
tween(this.progressBar)
|
||||||
|
.to(0.2, { progress: progress }, {
|
||||||
|
easing: 'smooth',
|
||||||
|
onUpdate: (target: any, ratio: number) => {
|
||||||
|
this.progressLabel.string = `${Math.floor(target.progress * 100)}%`;
|
||||||
|
this.maskUITransform.width = target.progress * 494;
|
||||||
|
this.lightNode.setPosition(target.progress * 496 - 274, -612, 0);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private onLoadComplete() {
|
||||||
|
// 开始游戏
|
||||||
|
this.scheduleOnce(() => {
|
||||||
|
this.loadingTipLabel.string = '';
|
||||||
|
this.retryTipLabel.string = '';
|
||||||
|
this.startBtn.node.active = true;
|
||||||
|
this.startBtnLabel.string = I18nManager.instance.t('AID_GET_STARTED');
|
||||||
|
this.progressBar.node.active = false;
|
||||||
|
this.progressLabel.node.active = false;
|
||||||
|
|
||||||
|
this.maskUITransform.node.active = false;
|
||||||
|
this.lightNode.active = false;
|
||||||
|
}, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
private handleError(error: Error) {
|
private handleError(error: Error) {
|
||||||
this._retryCount++;
|
this._retryCount++;
|
||||||
|
this.loadingTipLabel.string = '';
|
||||||
if (this._retryCount <= this.MAX_RETRY) {
|
if (this._retryCount <= this.MAX_RETRY) {
|
||||||
// 自动重试
|
// 自动重试
|
||||||
// this.tipLabel.string = `retry(${this._retryCount}/${this.MAX_RETRY})...`;
|
|
||||||
switch (this._retryCount) {
|
switch (this._retryCount) {
|
||||||
case 1:
|
case 1:
|
||||||
this.tipLabel.string = I18nManager.instance.t("AID_NETWORK_RETRY_1");
|
this.retryTipLabel.string = I18nManager.instance.t('AID_NETWORK_RETRY_1');
|
||||||
break;
|
break
|
||||||
case 2:
|
case 2:
|
||||||
this.tipLabel.string = I18nManager.instance.t("AID_NETWORK_RETRY_2");
|
this.retryTipLabel.string = I18nManager.instance.t('AID_NETWORK_RETRY_2');
|
||||||
break;
|
break
|
||||||
case 3:
|
case 3:
|
||||||
this.tipLabel.string = I18nManager.instance.t("AID_NETWORK_RETRY_3");
|
this.retryTipLabel.string = I18nManager.instance.t('AID_NETWORK_RETRY_3');
|
||||||
break;
|
break
|
||||||
case 4:
|
case 4:
|
||||||
this.tipLabel.string = I18nManager.instance.t("AID_NETWORK_RETRY_4");
|
this.retryTipLabel.string = I18nManager.instance.t('AID_NETWORK_RETRY_4');
|
||||||
break;
|
break
|
||||||
case 5:
|
case 5:
|
||||||
this.tipLabel.string = I18nManager.instance.t("AID_NETWORK_RETRY_5");
|
this.retryTipLabel.string = I18nManager.instance.t('AID_NETWORK_RETRY_5');
|
||||||
break;
|
break
|
||||||
|
|
||||||
}
|
}
|
||||||
this.scheduleOnce(() => {
|
this.scheduleOnce(() => {
|
||||||
if (!this._networkComplete) {
|
if (!this._networkComplete) {
|
||||||
this.startNetworkLoading();
|
this.initNetwork();
|
||||||
} else {
|
} else {
|
||||||
this.startResourceLoading();
|
this.startLoadingGameBundle();
|
||||||
}
|
}
|
||||||
}, 2);
|
}, 2);
|
||||||
} else {
|
} else {
|
||||||
// 显示重试按钮
|
// 显示重试按钮
|
||||||
this.tipLabel.string = I18nManager.instance.t("AID_LOADING");
|
this.loadingTipLabel.string = I18nManager.instance.t('AID_LOADING');
|
||||||
|
this.retryTipLabel.string = '';
|
||||||
this.startBtn.node.active = true;
|
this.startBtn.node.active = true;
|
||||||
this.progressBar.node.active = false;
|
this.progressBar.node.active = false;
|
||||||
this.progressLabel.node.active = false;
|
this.progressLabel.node.active = false;
|
||||||
this.startBtnLabel.string = I18nManager.instance.t(
|
|
||||||
"AID_ERROR_RETRY_BUTTON"
|
|
||||||
);
|
this.maskUITransform.node.active = false;
|
||||||
|
this.lightNode.active = false;
|
||||||
|
|
||||||
|
this.startBtnLabel.string = I18nManager.instance.t('AID_ERROR_RETRY_BUTTON');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/** 开始资源加载 */
|
|
||||||
private async startResourceLoading() {
|
|
||||||
if (!this.isNetworkReady) return;
|
|
||||||
|
|
||||||
this.tipLabel.string = I18nManager.instance.t("AID_LOADING");
|
|
||||||
this.startBtnNode.active = false;
|
|
||||||
|
|
||||||
this.gameNode = await ResManager.instance.loadPrefabFromBundle(
|
|
||||||
"Game",
|
|
||||||
"SlotScene",
|
|
||||||
(finished: number, total: number) => {
|
|
||||||
if (total > 0) {
|
|
||||||
// 资源加载进度从50%到90%
|
|
||||||
const resourceProgress = finished / total;
|
|
||||||
const currentProgress =
|
|
||||||
this.PROGRESS_NETWORK +
|
|
||||||
resourceProgress * (this.PROGRESS_RESOURCE - this.PROGRESS_NETWORK);
|
|
||||||
this.updateProgress(currentProgress);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// 资源加载完成,进度条到90%
|
|
||||||
this.updateProgress(this.PROGRESS_RESOURCE);
|
|
||||||
|
|
||||||
// 延迟一下然后完成最后的10%
|
|
||||||
this.scheduleOnce(() => {
|
|
||||||
this.finishLoading();
|
|
||||||
}, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 完成加载 */
|
|
||||||
private finishLoading() {
|
|
||||||
// this.updateLoadingText('Loading More...');
|
|
||||||
|
|
||||||
// 最后10%快速完成
|
|
||||||
this.updateProgress(this.PROGRESS_COMPLETE);
|
|
||||||
|
|
||||||
// 0.5秒后显示开始按钮
|
|
||||||
this.scheduleOnce(() => {
|
|
||||||
this.onLoadComplete();
|
|
||||||
}, 0.5);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 更新进度条 */
|
|
||||||
private updateProgress(progress: number) {
|
|
||||||
tween(this.progressBar)
|
|
||||||
.to(
|
|
||||||
this.PROGRESS_ANIMATION_DURATION,
|
|
||||||
{ progress },
|
|
||||||
{
|
|
||||||
easing: "smooth",
|
|
||||||
onUpdate: (target: any) => {
|
|
||||||
const currentProgress = target.progress;
|
|
||||||
this.progressLabel.string = `${Math.floor(currentProgress * 100)}%`;
|
|
||||||
this.maskSpineNode
|
|
||||||
.getComponent(UITransform)
|
|
||||||
.setContentSize(currentProgress * 509, 100);
|
|
||||||
this.lightSpineNode.setPosition(
|
|
||||||
currentProgress * 509 - 278,
|
|
||||||
-612,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
},
|
|
||||||
}
|
|
||||||
)
|
|
||||||
.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 更新加载文本 */
|
|
||||||
private updateLoadingText(key: string) {
|
|
||||||
this.loadingLabel.string = I18nManager.instance.t("AID_LOADING");
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 加载完成 */
|
|
||||||
private onLoadComplete() {
|
|
||||||
this.startBtnLabel.string = I18nManager.instance.t("AID_GET_STARTED");
|
|
||||||
this.hideProgressUI();
|
|
||||||
this.showStartButton();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 隐藏进度UI */
|
|
||||||
private hideProgressUI() {
|
|
||||||
this.loadingLabel.string = '';
|
|
||||||
this.progressBar.node.active = false;
|
|
||||||
this.progressLabel.node.active = false;
|
|
||||||
this.maskSpineNode.active = false;
|
|
||||||
this.lightSpineNode.active = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 显示开始按钮 */
|
|
||||||
private showStartButton() {
|
|
||||||
this.startBtnNode.active = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 开始游戏 */
|
|
||||||
private startGame() {
|
|
||||||
if (!this.gameContainer) {
|
|
||||||
console.error("Game container not found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.gameContainer.addChild(this.gameNode);
|
|
||||||
// 隐藏加载界面
|
|
||||||
this.LoadingUINode.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 按钮点击事件 */
|
|
||||||
onStartBtnClick() {
|
onStartBtnClick() {
|
||||||
if (
|
if (this.startBtnLabel.string === I18nManager.instance.t('AID_ERROR_RETRY_BUTTON')) {
|
||||||
this.startBtnLabel.string ===
|
|
||||||
I18nManager.instance.t("AID_ERROR_RETRY_BUTTON")
|
|
||||||
) {
|
|
||||||
// 重试逻辑
|
// 重试逻辑
|
||||||
this._retryCount = 0;
|
this._retryCount = 0;
|
||||||
this.startBtn.node.active = false;
|
this.startBtn.node.active = false;
|
||||||
this.progressBar.node.active = true;
|
this.progressBar.node.active = true;
|
||||||
this.progressLabel.node.active = true;
|
this.progressLabel.node.active = true;
|
||||||
|
|
||||||
|
|
||||||
|
this.maskUITransform.node.active = true;
|
||||||
|
this.lightNode.active = true;
|
||||||
|
|
||||||
if (!this._networkComplete) {
|
if (!this._networkComplete) {
|
||||||
this.startNetworkLoading();
|
this.initNetwork();
|
||||||
} else {
|
} else {
|
||||||
this.startResourceLoading();
|
this.startLoadingGameBundle();
|
||||||
}
|
}
|
||||||
} else {
|
} else if (this.startBtnLabel.string === I18nManager.instance.t('AID_GET_STARTED')) {
|
||||||
this.startGame();
|
this.node.getChildByName('Logo').active = false;
|
||||||
|
// 确保 GameNode 存在
|
||||||
|
if (!this.GameNode) {
|
||||||
|
throw new Error('GameNode is not set');
|
||||||
|
}
|
||||||
|
// 添加到场景
|
||||||
|
this.GameNode.addChild(this._instanceGameNode);
|
||||||
|
// 隐藏加载界面
|
||||||
|
this.LoadingUINode.destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onDestroy() {
|
onDestroy() {
|
||||||
this.unscheduleAllCallbacks();
|
this.unscheduleAllCallbacks();
|
||||||
tween(this.progressBar).stop();
|
tween(this.progressBar).stop();
|
||||||
|
AudioManager.instance.destroy();
|
||||||
NodePoolManager.instance.clearAll();
|
NodePoolManager.instance.clearAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// UNKNOWN = 0, // 未知平台
|
||||||
|
// WINDOWS = 1, // Windows
|
||||||
|
// LINUX = 2, // Linux
|
||||||
|
// MACOS = 3, // macOS
|
||||||
|
// ANDROID = 4, // Android
|
||||||
|
// IOS = 5, // iOS
|
||||||
|
// MOBILE_BROWSER = 6, // 移动端浏览器
|
||||||
|
// DESKTOP_BROWSER = 7,// 桌面端浏览器
|
||||||
|
// WECHAT_GAME = 8, // 微信小游戏
|
||||||
|
// BAIDU_MINI_GAME = 9,// 百度小游戏
|
||||||
|
// XIAOMI_QUICK_GAME = 10,// 小米快游戏
|
||||||
|
// ALIPAY_MINI_GAME = 11, // 支付宝小游戏
|
||||||
|
// BYTEDANCE_MINI_GAME = 12,// 字节跳动小游戏
|
||||||
|
// OPPO_MINI_GAME = 13,// OPPO小游戏
|
||||||
|
// VIVO_MINI_GAME = 14,// vivo小游戏
|
||||||
|
// HUAWEI_QUICK_GAME = 15,// 华为快游戏
|
||||||
|
// COCOSPLAY = 16, // Cocos Play
|
||||||
|
// LINKSURE_MINI_GAME = 17,// 连尚小游戏
|
||||||
|
// QTT_MINI_GAME = 18 // 趣头条小游戏
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,165 +1,148 @@
|
|||||||
import { resources, JsonAsset, director, SpriteFrame, SpriteAtlas, sp } from 'cc';
|
import { resources, JsonAsset, director, SpriteFrame, Sprite, Node, SpriteAtlas, sp } from 'cc';
|
||||||
|
import { LocalizedSprite } from '../i18n/LocalizedSprite';
|
||||||
|
|
||||||
export class I18nManager {
|
export class I18nManager {
|
||||||
|
private static _instance: I18nManager = null;
|
||||||
private static _instance: I18nManager;
|
|
||||||
spriteFrameCache: Map<string, SpriteFrame> = new Map();
|
spriteFrameCache: Map<string, SpriteFrame> = new Map();
|
||||||
spineCache: Map<string, sp.SkeletonData> = new Map();
|
spineCache: Map<string, sp.SkeletonData> = new Map();
|
||||||
_sfTasks = new Map<string, Promise<SpriteFrame>>();
|
|
||||||
languageData: Record<string, any> = {};
|
languageData: Record<string, any> = {};
|
||||||
currentLanguage: string = 'en';
|
currentLanguage: string = 'en';
|
||||||
ready: boolean = false;
|
ready: boolean = false;
|
||||||
|
|
||||||
static get instance() {
|
static get instance() {
|
||||||
return this._instance || (this._instance = new I18nManager());
|
if (this._instance) {
|
||||||
|
return this._instance;
|
||||||
|
}
|
||||||
|
this._instance = new I18nManager();
|
||||||
|
return this._instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private constructor() { }
|
private constructor() { }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// yield/await 风格:谁都可以 await,且只加载一次
|
|
||||||
ensureI18nSprite(lang: string, name: string): Promise<SpriteFrame> {
|
|
||||||
const key = `${lang}_${name}`;
|
|
||||||
const path = `i18nSprite/${lang}/${name}/spriteFrame`;
|
|
||||||
|
|
||||||
const cached = this.spriteFrameCache.get(key);
|
|
||||||
if (cached) return Promise.resolve(cached);
|
|
||||||
|
|
||||||
const pending = this._sfTasks.get(key);
|
|
||||||
if (pending) return pending;
|
|
||||||
|
|
||||||
const task = new Promise<SpriteFrame>((resolve, reject) => {
|
|
||||||
resources.load(path, SpriteFrame, (err, sf) => {
|
|
||||||
this._sfTasks.delete(key);
|
|
||||||
if (err || !sf) return reject(err);
|
|
||||||
this.spriteFrameCache.set(key, sf);
|
|
||||||
resolve(sf);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
this._sfTasks.set(key, task);
|
|
||||||
return task;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 初始化国际化管理器
|
* 初始化语言管理器
|
||||||
* @param language 初始语言代码
|
* @param language 初始语言
|
||||||
* @param languageJson 语言数据JSON资源
|
|
||||||
*/
|
*/
|
||||||
public async init(language: string = 'en', languageJson: JsonAsset = null): Promise<void> {
|
public async init(language: string = 'en', languageJson: JsonAsset): Promise<void> {
|
||||||
this.currentLanguage = language;
|
this.currentLanguage = language;
|
||||||
try {
|
try {
|
||||||
if (languageJson) {
|
this.languageData = languageJson.json;
|
||||||
this.languageData = languageJson.json;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 预加载资源(目前资源列表为空,可根据需要添加)
|
// 预加载并缓存图片资源
|
||||||
let okSprite = await this.preloadAssets('spriteFrame', [
|
await this.preloadSpriteFrames();
|
||||||
'2',
|
await this.preloadSpriteFrameAltas();
|
||||||
'3',
|
await this.preloadSpineAssets(); // 新增预加载 spine 资源
|
||||||
'4',
|
this.ready = true;
|
||||||
'5',
|
|
||||||
'6',
|
|
||||||
'7',
|
|
||||||
'8',
|
|
||||||
'9',
|
|
||||||
'10',
|
|
||||||
'11',
|
|
||||||
'12',
|
|
||||||
'13',
|
|
||||||
'14',
|
|
||||||
'15',
|
|
||||||
'16',
|
|
||||||
'17',
|
|
||||||
'18',
|
|
||||||
'19',
|
|
||||||
'20',
|
|
||||||
'21',
|
|
||||||
'22',
|
|
||||||
'23',
|
|
||||||
'24',
|
|
||||||
'25',
|
|
||||||
'26',
|
|
||||||
'27',
|
|
||||||
'29',
|
|
||||||
'30',
|
|
||||||
'98',
|
|
||||||
'99',
|
|
||||||
'Buy_5',
|
|
||||||
'sysgift_completed',
|
|
||||||
'sysgift_continue',
|
|
||||||
'sysgift_fbs',
|
|
||||||
'sysgift_info_fbs',
|
|
||||||
'sysgift_received',
|
|
||||||
'sysgift_symbols',
|
|
||||||
'sysgift_total',
|
|
||||||
'sysgift_win',
|
|
||||||
]);
|
|
||||||
let okAtlas = await this.preloadAssets('atlas', []);
|
|
||||||
let okSpine = await this.preloadAssets('spine', []);
|
|
||||||
|
|
||||||
this.ready = okSprite && okAtlas && okSpine;
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('I18nManager init failed:', error);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
getIsReady() {
|
||||||
* 预加载指定类型的资源
|
return this.ready;
|
||||||
* @param type 资源类型
|
|
||||||
* @param names 资源名称列表
|
|
||||||
*/
|
|
||||||
private async preloadAssets(type: 'spriteFrame' | 'atlas' | 'spine', names: string[]): Promise<boolean> {
|
|
||||||
let results = await Promise.all(names.map(name => this.loadAsset(type, name)));
|
|
||||||
return results.every(ok => ok);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 加载单个资源
|
* 预加载并缓存图片资源
|
||||||
* @param type 资源类型
|
|
||||||
* @param name 资源名称
|
|
||||||
*/
|
*/
|
||||||
private loadAsset(type: 'spriteFrame' | 'atlas' | 'spine', name: string): Promise<boolean> {
|
private async preloadSpriteFrames(): Promise<void> {
|
||||||
return new Promise(resolve => {
|
const imageNames = [
|
||||||
let cacheKey = `${this.currentLanguage}_${name}`;
|
'loadingBg',
|
||||||
|
'sysgift_completed',
|
||||||
|
'sysgift_continue',
|
||||||
|
'sysgift_fbs',
|
||||||
|
'sysgift_info_fbs',
|
||||||
|
'sysgift_received',
|
||||||
|
'sysgift_symbols',
|
||||||
|
'sysgift_total',
|
||||||
|
'sysgift_win',
|
||||||
|
];
|
||||||
|
|
||||||
if (type === 'spriteFrame') {
|
for (const name of imageNames) {
|
||||||
let path = `i18nSprite/${this.currentLanguage}/${name}/spriteFrame`;
|
const path = `i18nSprite/${this.currentLanguage}/${name}/spriteFrame`;
|
||||||
resources.load(path, SpriteFrame, (err, asset) => {
|
const cacheKey = `${this.currentLanguage}_${name}`;
|
||||||
if (!err && asset) {
|
|
||||||
this.spriteFrameCache.set(cacheKey, asset);
|
if (!this.spriteFrameCache.has(cacheKey)) {
|
||||||
resolve(true);
|
await new Promise<void>((resolve) => {
|
||||||
} else {
|
resources.load(path, SpriteFrame, (err, spriteFrame) => {
|
||||||
console.warn(`[i18n] spriteFrame load failed: ${path}`, err?.message || err);
|
if (!err && spriteFrame) {
|
||||||
resolve(false);
|
this.spriteFrameCache.set(cacheKey, spriteFrame);
|
||||||
}
|
}
|
||||||
});
|
resolve();
|
||||||
} else if (type === 'atlas') {
|
});
|
||||||
let path = `i18nSprite/${this.currentLanguage}/${name}`;
|
|
||||||
resources.load(path, SpriteAtlas, (err, atlas) => {
|
|
||||||
if (!err && atlas) {
|
|
||||||
atlas.getSpriteFrames().forEach(frame => {
|
|
||||||
this.spriteFrameCache.set(`${this.currentLanguage}_${frame.name}`, frame);
|
|
||||||
});
|
|
||||||
resolve(true);
|
|
||||||
} else {
|
|
||||||
console.warn(`[i18n] atlas load failed: ${path}`, err?.message || err);
|
|
||||||
resolve(false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else if (type === 'spine') {
|
|
||||||
let path = `i18nSpine/${this.currentLanguage}/${name}`;
|
|
||||||
resources.load(path, sp.SkeletonData, (err, asset) => {
|
|
||||||
if (!err && asset) {
|
|
||||||
this.spineCache.set(cacheKey, asset);
|
|
||||||
resolve(true);
|
|
||||||
} else {
|
|
||||||
console.warn(`[i18n] spine load failed: ${path}`, err?.message || err);
|
|
||||||
resolve(false);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async preloadSpriteFrameAltas(): Promise<void> {
|
||||||
|
const altasNames = [
|
||||||
|
`FreeSpinINOUT_${this.currentLanguage}`,
|
||||||
|
`BuyFeature_${this.currentLanguage}`,
|
||||||
|
`Others_${this.currentLanguage}`,
|
||||||
|
`SymbolsInfo_${this.currentLanguage}`,
|
||||||
|
]
|
||||||
|
|
||||||
|
for (const altasName of altasNames) {
|
||||||
|
const atlasPath = `i18nSprite/${this.currentLanguage}/${altasName}`;
|
||||||
|
// 加载图集并缓存其中的多个 SpriteFrame
|
||||||
|
await new Promise<void>((resolve) => {
|
||||||
|
resources.load(atlasPath, SpriteAtlas, (err, atlas) => {
|
||||||
|
if (!err && atlas) {
|
||||||
|
const spriteFrames = atlas.getSpriteFrames();
|
||||||
|
spriteFrames.forEach((frame, index) => {
|
||||||
|
let name = frame.name;
|
||||||
|
const cacheKey = `${this.currentLanguage}_${name}`;
|
||||||
|
this.spriteFrameCache.set(cacheKey, frame);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加预加载 Spine 资源的方法
|
||||||
|
private async preloadSpineAssets(): Promise<void> {
|
||||||
|
const spineNames = [
|
||||||
|
`WinWinWin_${this.currentLanguage}`,
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const name of spineNames) {
|
||||||
|
const path = `i18nSprite/${this.currentLanguage}/${name}`;
|
||||||
|
const cacheKey = `${this.currentLanguage}_${name}`;
|
||||||
|
|
||||||
|
if (!this.spineCache.has(cacheKey)) {
|
||||||
|
await new Promise<void>((resolve) => {
|
||||||
|
resources.load(path, sp.SkeletonData, (err, spineData) => {
|
||||||
|
if (!err && spineData) {
|
||||||
|
this.spineCache.set(cacheKey, spineData);
|
||||||
|
}
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setSpriteFrame(node: Node, name: string) {
|
||||||
|
// 先尝试从缓存获取
|
||||||
|
const cacheKey = `${this.currentLanguage}_${name}`;
|
||||||
|
const cachedFrame = this.spriteFrameCache.get(cacheKey);
|
||||||
|
|
||||||
|
if (cachedFrame) {
|
||||||
|
const sprite = node.getComponent(Sprite);
|
||||||
|
if (sprite) {
|
||||||
|
sprite.spriteFrame = cachedFrame;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果缓存中没有,则使用原有逻辑
|
||||||
|
let spriteNode = node.getComponent(LocalizedSprite);
|
||||||
|
if (spriteNode) {
|
||||||
|
spriteNode.setSpriteName(name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -176,21 +159,17 @@ export class I18nManager {
|
|||||||
/**
|
/**
|
||||||
* 翻译文本
|
* 翻译文本
|
||||||
* @param key 翻译键
|
* @param key 翻译键
|
||||||
* @returns 翻译后的文本,如果找不到则返回键本身
|
|
||||||
*/
|
*/
|
||||||
public t(key: string): string {
|
public t(key: string): string {
|
||||||
return this.languageData[this.currentLanguage]?.[key] || key;
|
const translation = this.languageData[this.currentLanguage]?.[key];
|
||||||
}
|
if (!translation) {
|
||||||
|
return key; // Return the key itself if translation is not found
|
||||||
public getSpriteFrame(spriteName: string): SpriteFrame {
|
}
|
||||||
let cacheKey = `${this.currentLanguage}_${spriteName}`;
|
return translation;
|
||||||
let cachedFrame = this.spriteFrameCache.get(cacheKey);
|
|
||||||
return cachedFrame;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新场景中的所有本地化组件
|
* 更新场景中的本地化组件
|
||||||
* 在语言切换时调用,刷新所有本地化文本和资源
|
|
||||||
*/
|
*/
|
||||||
public updateSceneRenderers(): void {
|
public updateSceneRenderers(): void {
|
||||||
if (!this.ready) {
|
if (!this.ready) {
|
||||||
@ -199,23 +178,41 @@ export class I18nManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let scene = director.getScene();
|
let scene = director.getScene();
|
||||||
if (!scene?.isValid) return;
|
if (!scene || !scene.isValid) return;
|
||||||
|
|
||||||
// 收集所有本地化组件
|
const rootNodes = director.getScene()?.children || [];
|
||||||
let allLocalizedLabels = [];
|
const allLocalizedLabels: any[] = [];
|
||||||
let allLocalizedSprites = [];
|
const allLocalizedSprites: any[] = [];
|
||||||
|
|
||||||
scene.children.forEach(node => {
|
rootNodes.forEach(node => {
|
||||||
allLocalizedLabels.push(...node.getComponentsInChildren('LocalizedLabel'));
|
allLocalizedLabels.push(...node.getComponentsInChildren('LocalizedLabel'));
|
||||||
allLocalizedSprites.push(...node.getComponentsInChildren('LocalizedSprite'));
|
allLocalizedSprites.push(...node.getComponentsInChildren('LocalizedSprite'));
|
||||||
});
|
});
|
||||||
|
|
||||||
// 更新所有激活的本地化组件
|
allLocalizedLabels.forEach(label => {
|
||||||
[...allLocalizedLabels, ...allLocalizedSprites].forEach(component => {
|
if (label.node.active) {
|
||||||
if (component.node.active) {
|
label.updateLabel();
|
||||||
// 调用对应的更新方法
|
}
|
||||||
component.updateLabel?.() || component.updateSprite?.();
|
});
|
||||||
|
|
||||||
|
allLocalizedSprites.forEach(sprite => {
|
||||||
|
if (sprite.node.active) {
|
||||||
|
sprite.updateSprite();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// // 供插件查询当前语言使用
|
||||||
|
// const win = window as any;
|
||||||
|
// win._languageData = {
|
||||||
|
// get language() {
|
||||||
|
// return I18nManager.instance.currentLanguage;
|
||||||
|
// },
|
||||||
|
// init(lang: string) {
|
||||||
|
// I18nManager.instance.init(lang);
|
||||||
|
// },
|
||||||
|
// updateSceneRenderers() {
|
||||||
|
// I18nManager.instance.updateSceneRenderers();
|
||||||
|
// },
|
||||||
|
// };
|
||||||
@ -55,7 +55,7 @@
|
|||||||
"Weekly Ranking": "Ugentlig rangliste",
|
"Weekly Ranking": "Ugentlig rangliste",
|
||||||
"Monthly Ranking": "Månedlig rangliste",
|
"Monthly Ranking": "Månedlig rangliste",
|
||||||
"Event Description": "Eventbeskrivelse",
|
"Event Description": "Eventbeskrivelse",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "I kampagneperioden — deltag i de udvalgte spil, og hvis dine indsatser ligger i top XX, kan du få store præmier!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Deltag i udvalgte spil i eventperioden, og bliv rangeret efter “gevinstpoint”. De XX bedst placerede spillere modtager attraktive præmier!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Opnå i alt XX indsatser og en samlet indsats på XX for at deltage i eventet",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Opnå i alt XX indsatser og en samlet indsats på XX for at deltage i eventet",
|
||||||
"Historical leaderboard records": "Historik for ranglister",
|
"Historical leaderboard records": "Historik for ranglister",
|
||||||
"Claim with one click": "Hent alle præmier",
|
"Claim with one click": "Hent alle præmier",
|
||||||
@ -125,7 +125,7 @@
|
|||||||
"Weekly Ranking": "Wochenrangliste",
|
"Weekly Ranking": "Wochenrangliste",
|
||||||
"Monthly Ranking": "Monatsrangliste",
|
"Monthly Ranking": "Monatsrangliste",
|
||||||
"Event Description": "Eventbeschreibung",
|
"Event Description": "Eventbeschreibung",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Während der Aktionszeit nimm an den ausgewählten Spielen teil und sichere dir großartige Preise, wenn deine Einsätze unter den Top-XX liegen!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Nehmen Sie während des Eventzeitraums an den angegebenen Spielen teil und werden Sie nach „Gewinnpunkten“ gerankt. Die Top XX Spieler erhalten attraktive Preise!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Erreichen Sie insgesamt XX Einsätze und einen kumulierten Einsatz von XX, um am Event teilzunehmen",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Erreichen Sie insgesamt XX Einsätze und einen kumulierten Einsatz von XX, um am Event teilzunehmen",
|
||||||
"Historical leaderboard records": "Ranglistenverlauf",
|
"Historical leaderboard records": "Ranglistenverlauf",
|
||||||
"Claim with one click": "Alle Belohnungen abholen",
|
"Claim with one click": "Alle Belohnungen abholen",
|
||||||
@ -195,7 +195,7 @@
|
|||||||
"Weekly Ranking": "Weekly Ranking",
|
"Weekly Ranking": "Weekly Ranking",
|
||||||
"Monthly Ranking": "Monthly Ranking",
|
"Monthly Ranking": "Monthly Ranking",
|
||||||
"Event Description": "Event Description",
|
"Event Description": "Event Description",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "During the event, participate in the designated games and rank within the top XX by bets to win generous rewards!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Accumulate XX bets or a total wager of XX to participate in the event",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Accumulate XX bets or a total wager of XX to participate in the event",
|
||||||
"Historical leaderboard records": "Historical leaderboard records",
|
"Historical leaderboard records": "Historical leaderboard records",
|
||||||
"Claim with one click": "Claim with one click",
|
"Claim with one click": "Claim with one click",
|
||||||
@ -265,7 +265,7 @@
|
|||||||
"Weekly Ranking": "Ranking Semanal",
|
"Weekly Ranking": "Ranking Semanal",
|
||||||
"Monthly Ranking": "Ranking Mensual",
|
"Monthly Ranking": "Ranking Mensual",
|
||||||
"Event Description": "Descripción del Evento",
|
"Event Description": "Descripción del Evento",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Durante el período del evento, participa en los juegos designados y, si tus apuestas se ubican entre los primeros XX, ¡podrás ganar grandes premios!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Durante el período del evento, participa en los juegos designados y clasifícate según los “puntos de ganancia”. ¡Los XX mejores jugadores obtendrán grandes premios!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Acumula XX apuestas y alcanza un total de apuestas de XX para poder participar en el evento",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Acumula XX apuestas y alcanza un total de apuestas de XX para poder participar en el evento",
|
||||||
"Historical leaderboard records": "Historial de Rankings",
|
"Historical leaderboard records": "Historial de Rankings",
|
||||||
"Claim with one click": "Reclamar Todo",
|
"Claim with one click": "Reclamar Todo",
|
||||||
@ -335,7 +335,7 @@
|
|||||||
"Weekly Ranking": "Viikoittainen lista",
|
"Weekly Ranking": "Viikoittainen lista",
|
||||||
"Monthly Ranking": "Kuukausittainen lista",
|
"Monthly Ranking": "Kuukausittainen lista",
|
||||||
"Event Description": "Tapahtuman kuvaus",
|
"Event Description": "Tapahtuman kuvaus",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Kampanjan aikana osallistu valittuihin peleihin, ja jos panoksesi sijoittuvat kärjen XX joukkoon, voit voittaa upeita palkintoja!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Osallistu tapahtuman aikana määrättyihin peleihin ja sijoitu “voittopisteiden” perusteella. Parhaat XX pelaajaa saavat houkuttelevia palkintoja!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Saavuta yhteensä XX panostusta ja XX kokonaispanos osallistuaksesi tapahtumaan",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Saavuta yhteensä XX panostusta ja XX kokonaispanos osallistuaksesi tapahtumaan",
|
||||||
"Historical leaderboard records": "Tulostaulukon historia",
|
"Historical leaderboard records": "Tulostaulukon historia",
|
||||||
"Claim with one click": "Lunasta kaikki",
|
"Claim with one click": "Lunasta kaikki",
|
||||||
@ -405,7 +405,7 @@
|
|||||||
"Weekly Ranking": "Classement hebdomadaire",
|
"Weekly Ranking": "Classement hebdomadaire",
|
||||||
"Monthly Ranking": "Classement mensuel",
|
"Monthly Ranking": "Classement mensuel",
|
||||||
"Event Description": "Description de l’événement",
|
"Event Description": "Description de l’événement",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Pendant la période de l’événement, participez aux jeux désignés et, si vos mises se classent parmi les XX premiers, vous pourrez remporter de superbes récompenses !",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Pendant la période de l’événement, participez aux jeux désignés et soyez classé selon les « points de gain ». Les XX meilleurs joueurs recevront des récompenses attractives !",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Cumulez XX mises et atteignez un montant total de mises de XX pour pouvoir participer à l’événement",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Cumulez XX mises et atteignez un montant total de mises de XX pour pouvoir participer à l’événement",
|
||||||
"Historical leaderboard records": "Historique des classements",
|
"Historical leaderboard records": "Historique des classements",
|
||||||
"Claim with one click": "Tout réclamer",
|
"Claim with one click": "Tout réclamer",
|
||||||
@ -475,7 +475,7 @@
|
|||||||
"Weekly Ranking": "Peringkat Mingguan",
|
"Weekly Ranking": "Peringkat Mingguan",
|
||||||
"Monthly Ranking": "Peringkat Bulanan",
|
"Monthly Ranking": "Peringkat Bulanan",
|
||||||
"Event Description": "Deskripsi Acara",
|
"Event Description": "Deskripsi Acara",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Selama periode acara, ikut serta dalam permainan yang ditentukan dan raih peringkat teratas XX berdasarkan taruhan untuk mendapatkan hadiah besar!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Selama periode acara, mainkan game yang ditentukan dan menangkan poin untuk masuk ke peringkat XX teratas dan dapatkan hadiah menarik!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Akumulasi taruhan mencapai XX kali dan total taruhan mencapai XX untuk berpartisipasi dalam acara",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Akumulasi taruhan mencapai XX kali dan total taruhan mencapai XX untuk berpartisipasi dalam acara",
|
||||||
"Historical leaderboard records": "Riwayat Papan Peringkat",
|
"Historical leaderboard records": "Riwayat Papan Peringkat",
|
||||||
"Claim with one click": "Klaim Sekaligus",
|
"Claim with one click": "Klaim Sekaligus",
|
||||||
@ -545,7 +545,7 @@
|
|||||||
"Weekly Ranking": "Classifica Settimanale",
|
"Weekly Ranking": "Classifica Settimanale",
|
||||||
"Monthly Ranking": "Classifica Mensile",
|
"Monthly Ranking": "Classifica Mensile",
|
||||||
"Event Description": "Descrizione dell’Evento",
|
"Event Description": "Descrizione dell’Evento",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Durante il periodo dell’evento, partecipa ai giochi designati e, se le tue puntate rientrano tra le prime XX, potrai ottenere ricche ricompense!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Durante il periodo dell’evento, partecipa ai giochi selezionati e vieni classificato in base ai “punti vincita”. I primi XX giocatori riceveranno premi interessanti!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Accumula XX puntate e raggiungi un totale di puntate pari a XX per partecipare all’evento",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Accumula XX puntate e raggiungi un totale di puntate pari a XX per partecipare all’evento",
|
||||||
"Historical leaderboard records": "Cronologia delle Classifiche",
|
"Historical leaderboard records": "Cronologia delle Classifiche",
|
||||||
"Claim with one click": "Riscatta Tutto",
|
"Claim with one click": "Riscatta Tutto",
|
||||||
@ -615,7 +615,7 @@
|
|||||||
"Weekly Ranking": "ウィークリーランキング",
|
"Weekly Ranking": "ウィークリーランキング",
|
||||||
"Monthly Ranking": "マンスリーランキング",
|
"Monthly Ranking": "マンスリーランキング",
|
||||||
"Event Description": "イベント概要",
|
"Event Description": "イベント概要",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "イベント期間中、指定されたゲームに参加し、ベットがトップXXに入れば、豪華な報酬を獲得できます!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "イベント期間中に指定されたゲームに参加し、「獲得ポイント」に基づいてランキングが決定されます。上位 XX 名のプレイヤーには豪華報酬が贈られます!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "累計ベット回数が XX 回、かつ累計ベット額が XX に達すると、イベントに参加できます",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "累計ベット回数が XX 回、かつ累計ベット額が XX に達すると、イベントに参加できます",
|
||||||
"Historical leaderboard records": "ランキング履歴",
|
"Historical leaderboard records": "ランキング履歴",
|
||||||
"Claim with one click": "一括受け取り",
|
"Claim with one click": "一括受け取り",
|
||||||
@ -685,7 +685,7 @@
|
|||||||
"Weekly Ranking": "주간 랭킹",
|
"Weekly Ranking": "주간 랭킹",
|
||||||
"Monthly Ranking": "월간 랭킹",
|
"Monthly Ranking": "월간 랭킹",
|
||||||
"Event Description": "이벤트 안내",
|
"Event Description": "이벤트 안내",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "이벤트 기간 동안 지정된 게임에 참여하고 베팅 순위가 상위 XX위 안에 들면 풍성한 보상을 받을 수 있습니다!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "이벤트 기간 동안 지정된 게임에 참여하고 “획득 포인트” 기준으로 랭킹이 결정됩니다. 상위 XX명의 플레이어에게 푸짐한 보상이 지급됩니다!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "누적 베팅 횟수 XX회 및 누적 베팅 금액 XX를 달성하면 이벤트에 참여할 수 있습니다",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "누적 베팅 횟수 XX회 및 누적 베팅 금액 XX를 달성하면 이벤트에 참여할 수 있습니다",
|
||||||
"Historical leaderboard records": "랭킹 기록",
|
"Historical leaderboard records": "랭킹 기록",
|
||||||
"Claim with one click": "일괄 수령",
|
"Claim with one click": "일괄 수령",
|
||||||
@ -755,7 +755,7 @@
|
|||||||
"Weekly Ranking": "အပတ်စဉ် အဆင့်သတ်မှတ်ဇယား",
|
"Weekly Ranking": "အပတ်စဉ် အဆင့်သတ်မှတ်ဇယား",
|
||||||
"Monthly Ranking": "လစဉ် အဆင့်သတ်မှတ်ဇယား",
|
"Monthly Ranking": "လစဉ် အဆင့်သတ်မှတ်ဇယား",
|
||||||
"Event Description": "ပွဲလှုပ်ရှားမှု အကြောင်းအရာ",
|
"Event Description": "ပွဲလှုပ်ရှားမှု အကြောင်းအရာ",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "အစီအစဉ်ကာလအတွင်း သတ်မှတ်ထားသောဂိမ်းများတွင် ပါဝင်ကာ ပေါက်ကြေးတင်ထားမှုများသည် ထိပ်တန်း XX အဆင့်အတွင်းဝင်လျှင် စျေးကြီးမော်လပြည့် ရခိုင်ထောက်ပံ့မျိုးစုံကို ရယူနိုင်ပါသည်!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "ပွဲလှုပ်ရှားမှုကာလအတွင်း သတ်မှတ်ထားသော ဂိမ်းများတွင် ပါဝင်ကစားပြီး “အနိုင်ရမှတ်များ” အပေါ် မူတည်၍ အဆင့်သတ်မှတ်မည်ဖြစ်ပါသည်။ ထိပ်ဆုံး XX ဦးသည် ဆုလာဘ်အထူးများကို ရရှိမည်ဖြစ်ပါသည်။",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "စုစုပေါင်း လောင်းကစားအကြိမ် XX ကြိမ်နှင့် စုစုပေါင်း လောင်းကစားပမာဏ XX ကို ပြည့်မီပါက ပွဲလှုပ်ရှားမှုတွင် ပါဝင်နိုင်ပါသည်",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "စုစုပေါင်း လောင်းကစားအကြိမ် XX ကြိမ်နှင့် စုစုပေါင်း လောင်းကစားပမာဏ XX ကို ပြည့်မီပါက ပွဲလှုပ်ရှားမှုတွင် ပါဝင်နိုင်ပါသည်",
|
||||||
"Historical leaderboard records": "အဆင့်သတ်မှတ်ဇယား မှတ်တမ်း",
|
"Historical leaderboard records": "အဆင့်သတ်မှတ်ဇယား မှတ်တမ်း",
|
||||||
"Claim with one click": "တစ်ကြိမ်တည်း ဆုလက်ခံမည်",
|
"Claim with one click": "တစ်ကြိမ်တည်း ဆုလက်ခံမည်",
|
||||||
@ -825,7 +825,7 @@
|
|||||||
"Weekly Ranking": "Wekelijkse ranglijst",
|
"Weekly Ranking": "Wekelijkse ranglijst",
|
||||||
"Monthly Ranking": "Maandelijkse ranglijst",
|
"Monthly Ranking": "Maandelijkse ranglijst",
|
||||||
"Event Description": "Beschrijving van het evenement",
|
"Event Description": "Beschrijving van het evenement",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Tijdens de actieperiode kun je deelnemen aan de aangewezen spellen en, als je inzetten bij de top XX horen, geweldige prijzen winnen!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Neem tijdens de evenementperiode deel aan de geselecteerde spellen en word gerangschikt op basis van “winstpunten”. De beste XX spelers ontvangen aantrekkelijke beloningen!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Bereik in totaal XX inzetten en een cumulatief inzetbedrag van XX om aan het evenement deel te nemen",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Bereik in totaal XX inzetten en een cumulatief inzetbedrag van XX om aan het evenement deel te nemen",
|
||||||
"Historical leaderboard records": "Geschiedenis van ranglijsten",
|
"Historical leaderboard records": "Geschiedenis van ranglijsten",
|
||||||
"Claim with one click": "Alles claimen",
|
"Claim with one click": "Alles claimen",
|
||||||
@ -895,7 +895,7 @@
|
|||||||
"Weekly Ranking": "Classificação Semanal",
|
"Weekly Ranking": "Classificação Semanal",
|
||||||
"Monthly Ranking": "Classificação Mensal",
|
"Monthly Ranking": "Classificação Mensal",
|
||||||
"Event Description": "Descrição do Evento",
|
"Event Description": "Descrição do Evento",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Durante o período do evento, participe nos jogos designados e, se as suas apostas ficarem entre os primeiros XX, você poderá ganhar grandes recompensas!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Durante o período do evento, participe dos jogos selecionados e seja classificado com base nos “pontos de ganho”. Os XX melhores jogadores receberão prêmios atrativos!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Acumule XX apostas e alcance um total de apostas de XX para participar do evento",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Acumule XX apostas e alcance um total de apostas de XX para participar do evento",
|
||||||
"Historical leaderboard records": "Histórico de Classificações",
|
"Historical leaderboard records": "Histórico de Classificações",
|
||||||
"Claim with one click": "Resgatar Tudo",
|
"Claim with one click": "Resgatar Tudo",
|
||||||
@ -965,7 +965,7 @@
|
|||||||
"Weekly Ranking": "Clasament săptămânal",
|
"Weekly Ranking": "Clasament săptămânal",
|
||||||
"Monthly Ranking": "Clasament lunar",
|
"Monthly Ranking": "Clasament lunar",
|
||||||
"Event Description": "Descrierea evenimentului",
|
"Event Description": "Descrierea evenimentului",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "În perioada evenimentului, participă la jocurile desemnate și, dacă pariurile tale se află în top XX, poți obține recompense generoase!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Pe durata evenimentului, participă la jocurile selectate și fii clasat în funcție de „punctele de câștig”. Primii XX de jucători vor primi recompense atractive!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Acumulează XX pariuri și atinge un total al pariurilor de XX pentru a putea participa la eveniment",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Acumulează XX pariuri și atinge un total al pariurilor de XX pentru a putea participa la eveniment",
|
||||||
"Historical leaderboard records": "Istoric clasamente",
|
"Historical leaderboard records": "Istoric clasamente",
|
||||||
"Claim with one click": "Revendică tot",
|
"Claim with one click": "Revendică tot",
|
||||||
@ -1035,7 +1035,7 @@
|
|||||||
"Weekly Ranking": "Еженедельный рейтинг",
|
"Weekly Ranking": "Еженедельный рейтинг",
|
||||||
"Monthly Ranking": "Ежемесячный рейтинг",
|
"Monthly Ranking": "Ежемесячный рейтинг",
|
||||||
"Event Description": "Описание события",
|
"Event Description": "Описание события",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "В период проведения акции участвуйте в выбранных играх и, если ваши ставки войдут в топ XX, вы сможете получить щедрые призы!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "В период проведения события участвуйте в выбранных играх и занимайте места в рейтинге на основе «очков выигрыша». Топ XX игроков получат щедрые награды!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Совершите XX ставок и наберите общий объём ставок XX, чтобы принять участие в событии",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Совершите XX ставок и наберите общий объём ставок XX, чтобы принять участие в событии",
|
||||||
"Historical leaderboard records": "История рейтингов",
|
"Historical leaderboard records": "История рейтингов",
|
||||||
"Claim with one click": "Забрать всё",
|
"Claim with one click": "Забрать всё",
|
||||||
@ -1047,7 +1047,8 @@
|
|||||||
"Reward claim records": "История получений",
|
"Reward claim records": "История получений",
|
||||||
"Event": "Событие",
|
"Event": "Событие",
|
||||||
"Claim": "Забрать",
|
"Claim": "Забрать",
|
||||||
"Event Time": "Время события"
|
"Event Time": "Время события"
|
||||||
|
|
||||||
},
|
},
|
||||||
"sv": {
|
"sv": {
|
||||||
"AID_AUTO_BUTTON": "Starta autospinn",
|
"AID_AUTO_BUTTON": "Starta autospinn",
|
||||||
@ -1105,7 +1106,7 @@
|
|||||||
"Weekly Ranking": "Veckovis topplista",
|
"Weekly Ranking": "Veckovis topplista",
|
||||||
"Monthly Ranking": "Månatlig topplista",
|
"Monthly Ranking": "Månatlig topplista",
|
||||||
"Event Description": "Evenemangsbeskrivning",
|
"Event Description": "Evenemangsbeskrivning",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Under kampanjperioden — delta i de utvalda spelen, och om dina insatser hamnar bland topp XX kan du vinna fina priser!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Delta i de utvalda spelen under evenemangsperioden och rangordnas baserat på ”vinstpoäng”. De XX bästa spelarna får attraktiva belöningar!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Uppnå totalt XX insatser och ett sammanlagt insatsbelopp på XX för att delta i evenemanget",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Uppnå totalt XX insatser och ett sammanlagt insatsbelopp på XX för att delta i evenemanget",
|
||||||
"Historical leaderboard records": "Topplistehistorik",
|
"Historical leaderboard records": "Topplistehistorik",
|
||||||
"Claim with one click": "Hämta alla",
|
"Claim with one click": "Hämta alla",
|
||||||
@ -1175,7 +1176,7 @@
|
|||||||
"Weekly Ranking": "อันดับรายสัปดาห์",
|
"Weekly Ranking": "อันดับรายสัปดาห์",
|
||||||
"Monthly Ranking": "อันดับรายเดือน",
|
"Monthly Ranking": "อันดับรายเดือน",
|
||||||
"Event Description": "รายละเอียดกิจกรรม",
|
"Event Description": "รายละเอียดกิจกรรม",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "ในช่วงกิจกรรม เพียงเข้าร่วมเล่นเกมที่กำหนด และมียอดเดิมพันติดอันดับ XX อันดับแรก ก็รับรางวัลใหญ่ได้เลย!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "ร่วมเล่นเกมที่กำหนดในช่วงเวลากิจกรรม และจัดอันดับตาม “คะแนนชนะ” ผู้เล่นที่ติดอันดับ XX แรก รับรางวัลสุดพิเศษทันที!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "สะสมยอดเดิมพันครบ XX ครั้ง และมียอดเดิมพันสะสมครบ XX จึงจะมีสิทธิ์เข้าร่วมกิจกรรม",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "สะสมยอดเดิมพันครบ XX ครั้ง และมียอดเดิมพันสะสมครบ XX จึงจะมีสิทธิ์เข้าร่วมกิจกรรม",
|
||||||
"Historical leaderboard records": "ประวัติตารางจัดอันดับ",
|
"Historical leaderboard records": "ประวัติตารางจัดอันดับ",
|
||||||
"Claim with one click": "รับรางวัลทั้งหมดในครั้งเดียว",
|
"Claim with one click": "รับรางวัลทั้งหมดในครั้งเดียว",
|
||||||
@ -1245,7 +1246,7 @@
|
|||||||
"Weekly Ranking": "Haftalık Sıralama",
|
"Weekly Ranking": "Haftalık Sıralama",
|
||||||
"Monthly Ranking": "Aylık Sıralama",
|
"Monthly Ranking": "Aylık Sıralama",
|
||||||
"Event Description": "Etkinlik Açıklaması",
|
"Event Description": "Etkinlik Açıklaması",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Etkinlik süresi boyunca belirlenen oyunlara katıl ve bahislerin ilk XX sırada yer alırsa büyük ödüller kazan!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Etkinlik süresi boyunca belirlenen oyunlara katılın ve “kazanç puanları”na göre sıralamaya girin. İlk XX oyuncu cazip ödüller kazanacaktır!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Etkinliğe katılmak için toplam XX bahis yapın ve toplam bahis tutarınız XX’e ulaşsın",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Etkinliğe katılmak için toplam XX bahis yapın ve toplam bahis tutarınız XX’e ulaşsın",
|
||||||
"Historical leaderboard records": "Sıralama Geçmişi",
|
"Historical leaderboard records": "Sıralama Geçmişi",
|
||||||
"Claim with one click": "Hepsini Al",
|
"Claim with one click": "Hepsini Al",
|
||||||
@ -1315,7 +1316,7 @@
|
|||||||
"Weekly Ranking": "Bảng tuần",
|
"Weekly Ranking": "Bảng tuần",
|
||||||
"Monthly Ranking": "Bảng tháng",
|
"Monthly Ranking": "Bảng tháng",
|
||||||
"Event Description": "Giới thiệu sự kiện",
|
"Event Description": "Giới thiệu sự kiện",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Trong thời gian diễn ra sự kiện, hãy tham gia các trò chơi được chỉ định và xếp hạng trong top XX về tổng cược để nhận những phần thưởng hấp dẫn!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "Trong thời gian diễn ra sự kiện, tham gia các trò chơi được chỉ định và xếp hạng theo “điểm thắng”. Người chơi nằm trong Top XX sẽ nhận được phần thưởng hấp dẫn!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "Tích lũy XX lượt cược và tổng số tiền cược đạt XX để đủ điều kiện tham gia sự kiện",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "Tích lũy XX lượt cược và tổng số tiền cược đạt XX để đủ điều kiện tham gia sự kiện",
|
||||||
"Historical leaderboard records": "Lịch sử bảng xếp hạng",
|
"Historical leaderboard records": "Lịch sử bảng xếp hạng",
|
||||||
"Claim with one click": "Nhận thưởng một lần",
|
"Claim with one click": "Nhận thưởng một lần",
|
||||||
@ -1385,7 +1386,7 @@
|
|||||||
"Weekly Ranking": "週榜",
|
"Weekly Ranking": "週榜",
|
||||||
"Monthly Ranking": "月榜",
|
"Monthly Ranking": "月榜",
|
||||||
"Event Description": "活動說明",
|
"Event Description": "活動說明",
|
||||||
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "活動期間內參與指定遊戲,依「投注」排名前 XX 名,即可獲得豐富大獎!",
|
"During the event, participate in designated games and rank in the top XX by winnings to receive generous rewards!": "活動期間內參與指定遊戲,依「贏分」排名前 XX 名,即可獲得豐富大獎!",
|
||||||
"Accumulate XX bets or a total wager of XX to participate in the event": "累積投注達 XX 次,且累積投注金額達 XX,即可參與活動",
|
"Accumulate XX bets or a total wager of XX to participate in the event": "累積投注達 XX 次,且累積投注金額達 XX,即可參與活動",
|
||||||
"Historical leaderboard records": "歷史排行榜紀錄",
|
"Historical leaderboard records": "歷史排行榜紀錄",
|
||||||
"Claim with one click": "一鍵領取",
|
"Claim with one click": "一鍵領取",
|
||||||
@ -1399,4 +1400,4 @@
|
|||||||
"Claim": "領取",
|
"Claim": "領取",
|
||||||
"Event Time": "活動時間"
|
"Event Time": "活動時間"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 143 KiB |
@ -11,7 +11,7 @@
|
|||||||
"6c48a": {
|
"6c48a": {
|
||||||
"importer": "texture",
|
"importer": "texture",
|
||||||
"uuid": "fc4357cf-5f55-416c-b94a-b412108a32a7@6c48a",
|
"uuid": "fc4357cf-5f55-416c-b94a-b412108a32a7@6c48a",
|
||||||
"displayName": "logo_en",
|
"displayName": "logo",
|
||||||
"id": "6c48a",
|
"id": "6c48a",
|
||||||
"name": "texture",
|
"name": "texture",
|
||||||
"userData": {
|
"userData": {
|
||||||
@ -35,7 +35,7 @@
|
|||||||
"f9941": {
|
"f9941": {
|
||||||
"importer": "sprite-frame",
|
"importer": "sprite-frame",
|
||||||
"uuid": "fc4357cf-5f55-416c-b94a-b412108a32a7@f9941",
|
"uuid": "fc4357cf-5f55-416c-b94a-b412108a32a7@f9941",
|
||||||
"displayName": "logo_en",
|
"displayName": "logo",
|
||||||
"id": "f9941",
|
"id": "f9941",
|
||||||
"name": "spriteFrame",
|
"name": "spriteFrame",
|
||||||
"userData": {
|
"userData": {
|
||||||
|
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 115 KiB |
@ -11,7 +11,7 @@
|
|||||||
"6c48a": {
|
"6c48a": {
|
||||||
"importer": "texture",
|
"importer": "texture",
|
||||||
"uuid": "51ffde0b-ff7a-4e4e-b639-b58e4b55b73f@6c48a",
|
"uuid": "51ffde0b-ff7a-4e4e-b639-b58e4b55b73f@6c48a",
|
||||||
"displayName": "logo_zh",
|
"displayName": "logo",
|
||||||
"id": "6c48a",
|
"id": "6c48a",
|
||||||
"name": "texture",
|
"name": "texture",
|
||||||
"userData": {
|
"userData": {
|
||||||
@ -35,7 +35,7 @@
|
|||||||
"f9941": {
|
"f9941": {
|
||||||
"importer": "sprite-frame",
|
"importer": "sprite-frame",
|
||||||
"uuid": "51ffde0b-ff7a-4e4e-b639-b58e4b55b73f@f9941",
|
"uuid": "51ffde0b-ff7a-4e4e-b639-b58e4b55b73f@f9941",
|
||||||
"displayName": "logo_zh",
|
"displayName": "logo",
|
||||||
"id": "f9941",
|
"id": "f9941",
|
||||||
"name": "spriteFrame",
|
"name": "spriteFrame",
|
||||||
"userData": {
|
"userData": {
|
||||||
@ -16,7 +16,7 @@
|
|||||||
"physics-2d": "inherit-project-setting"
|
"physics-2d": "inherit-project-setting"
|
||||||
},
|
},
|
||||||
"macroConfig": {
|
"macroConfig": {
|
||||||
"cleanupImageCache": "inherit-project-setting"
|
"cleanupImageCache": "off"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nativeCodeBundleMode": "both",
|
"nativeCodeBundleMode": "both",
|
||||||
@ -35,7 +35,7 @@
|
|||||||
"handleTemplateMd5Link": true
|
"handleTemplateMd5Link": true
|
||||||
},
|
},
|
||||||
"mainBundleIsRemote": false,
|
"mainBundleIsRemote": false,
|
||||||
"mainBundleCompressionType": "merge_all_json",
|
"mainBundleCompressionType": "merge_dep",
|
||||||
"useSplashScreen": false,
|
"useSplashScreen": false,
|
||||||
"bundleCommonChunk": false,
|
"bundleCommonChunk": false,
|
||||||
"packAutoAtlas": true,
|
"packAutoAtlas": true,
|
||||||
|
|||||||
@ -1,11 +1,3 @@
|
|||||||
{
|
{
|
||||||
"__version__": "1.3.9",
|
"__version__": "1.3.9"
|
||||||
"splash-setting": {
|
|
||||||
"background": {
|
|
||||||
"type": "color"
|
|
||||||
},
|
|
||||||
"logo": {
|
|
||||||
"type": "none"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
"label": "customSplash",
|
"label": "customSplash",
|
||||||
"enable": true,
|
"enable": true,
|
||||||
"customSplash": {
|
"customSplash": {
|
||||||
"complete": true,
|
"complete": false,
|
||||||
"form": "https://creator-api.cocos.com/api/form/show?sid=d7d2df3c7819de249897b8f170c1432d"
|
"form": "https://creator-api.cocos.com/api/form/show?sid=d7d2df3c7819de249897b8f170c1432d"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user