优化房间视图控制器中的消息处理逻辑,增加 TurboModeStateManager 对全服礼物和游戏飘屏的控制,移除不必要的本地缓存,确保实时查询状态。更新 BoomInfoViewController 中的比值计算方式,提升代码可读性。调整 XPEffectPanelViewController 和 XPRoomMoreMenuViewController 的布局约束,改善用户界面。移除多处调试日志,提升代码整洁性。

This commit is contained in:
edwinQQQ
2025-09-16 15:55:38 +08:00
parent eb74017143
commit 8d8beeaa2d
10 changed files with 232 additions and 297 deletions

View File

@@ -690,7 +690,7 @@
// label
NSString *ratioText = [NSString stringWithFormat:@"%@/%@",
@(boom.exp * boom.speed / 100.0).stringValue,
@(floor(boom.exp * boom.speed / 100.0)).stringValue,
@(boom.exp).stringValue];
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:ratioText];

View File

@@ -123,14 +123,12 @@
}
- (void)resume {
if (!self.isPaused) {
NSLog(@"▶️ BannerScheduler: 恢复调度器");
self.isPaused = NO;
//
if (!self.isPlaying) {
[self processNextBanner];
}
NSLog(@"▶️ BannerScheduler: 恢复调度器");
self.isPaused = NO;
//
if (!self.isPlaying) {
[self processNextBanner];
}
}

View File

@@ -191,11 +191,7 @@ BannerSchedulerDelegate
// 🔧 使 TurboModeStateManager
@property (nonatomic, strong) NSString *currentRoomId; // ID
// 🔧 TurboModeStateManager
@property (nonatomic, assign) BOOL cachedGiftEffectsEnabled;
@property (nonatomic, assign) BOOL cachedGlobalGiftScreenEnabled;
@property (nonatomic, assign) BOOL cachedGlobalGameScreenEnabled;
@property (nonatomic, assign) BOOL cachedCpMicEnabled;
// TurboModeStateManager
@end
@@ -601,8 +597,10 @@ BannerSchedulerDelegate
effectPath:(NSString *)effectPath
isCPEnter:(BOOL)isCP {
// 🔧 使
if (!self.cachedGiftEffectsEnabled) {
//
NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue;
BOOL giftEffectsEnabled = [[TurboModeStateManager sharedManager] isGiftEffectsEnabledForRoom:roomIdForTurbo];
if (!giftEffectsEnabled) {
NSLog(@"🎮 Turbo Mode进房特效已关闭跳过进房动画");
return;
}
@@ -735,7 +733,9 @@ BannerSchedulerDelegate
if (obj.second == Custom_Message_Sub_General_Floating_Screen_One_Room ||
obj.second == Custom_Message_Sub_General_Floating_Screen_All_Room) {
// banner
if (!self.cachedGlobalGameScreenEnabled) {
NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue;
BOOL allowGameScreen = [[TurboModeStateManager sharedManager] isGlobalGameScreenEnabledForRoom:roomIdForTurbo];
if (!allowGameScreen) {
NSLog(@"🎮 Turbo Mode全局游戏屏幕已关闭跳过游戏banner");
return;
}
@@ -743,7 +743,9 @@ BannerSchedulerDelegate
obj.second == Custom_Message_Sub_Gift_ChannelNotify ||
obj.second == Custom_Message_Sub_LuckyPackage) {
// banner
if (!self.cachedGlobalGiftScreenEnabled) {
NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue;
BOOL allowGiftScreen = [[TurboModeStateManager sharedManager] isGlobalGiftScreenEnabledForRoom:roomIdForTurbo];
if (!allowGiftScreen) {
NSLog(@"🎮 Turbo Mode全局礼物屏幕已关闭跳过礼物banner");
return;
}
@@ -751,7 +753,9 @@ BannerSchedulerDelegate
obj.second == Custom_Message_Sub_CP_Upgrade ||
obj.second == Custom_Message_Sub_CP_Binding) {
// CPbanner -
if (!self.cachedGiftEffectsEnabled) {
NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue;
BOOL giftEffectsEnabled = [[TurboModeStateManager sharedManager] isGiftEffectsEnabledForRoom:roomIdForTurbo];
if (!giftEffectsEnabled) {
NSLog(@"🎮 Turbo Mode礼物特效已关闭跳过CP banner");
return;
}
@@ -1358,10 +1362,14 @@ BannerSchedulerDelegate
#pragma mark - Method: Send Gifts
- (void)receiveGiftHandleSendGiftAnimationWith:(GiftReceiveInfoModel *)receiveInfo attachment:(AttachmentModel *)attachment {
// 🔧 使
if (!self.cachedGiftEffectsEnabled) {
//
{
NSString *roomIdForTurbo = self.currentRoomId ?: @([self.hostDelegate getRoomInfo].roomId).stringValue;
BOOL giftEffectsEnabled = [[TurboModeStateManager sharedManager] isGiftEffectsEnabledForRoom:roomIdForTurbo];
if (!giftEffectsEnabled) {
NSLog(@"🎮 RoomAnimationView 礼物特效已关闭,跳过动画");
return;
}
}
if (!self.hostDelegate.getRoomInfo.hasAnimationEffect) {
@@ -1860,7 +1868,7 @@ BannerSchedulerDelegate
}
AttachmentModel *attachment = (AttachmentModel *)obj.attachment;
{
#if DEBUG
// first/secondpayload size线
NSData *payloadJSON = nil;
@try { payloadJSON = [NSJSONSerialization dataWithJSONObject:attachment.data ?: @{} options:0 error:nil]; } @catch (__unused NSException *e) {}
@@ -1869,7 +1877,7 @@ BannerSchedulerDelegate
(unsigned long)payloadJSON.length,
[NSThread isMainThread] ? @"YES" : @"NO",
[[NSDate date] timeIntervalSince1970]);
}
#endif
switch (attachment.first) {
case CustomMessageType_User_Enter_Room:
[self _handleEnterRoomMessage:message];
@@ -4064,14 +4072,10 @@ BannerSchedulerDelegate
#pragma mark - BannerSchedulerDelegate
- (void)bannerScheduler:(BannerScheduler *)scheduler shouldPlayBanner:(id)banner {
// NSLog(@"🎯 BannerSchedulerDelegate: 收到播放 Banner 请求");
// NSLog(@"🎯 Banner 类型: %@", [banner class]);
// Banner AttachmentModel
if ([banner isKindOfClass:[AttachmentModel class]]) {
AttachmentModel *attachment = (AttachmentModel *)banner;
// NSLog(@"🎯 AttachmentModel 类型: %ld", (long)attachment.second);
// NSLog(@"🎯 AttachmentModel 数据: %@", attachment.data);
[self _playBannerWithAttachment:attachment];
} else {
NSLog(@"⚠️ BannerSchedulerDelegate: Banner 不是 AttachmentModel 类型");
@@ -4276,9 +4280,6 @@ BannerSchedulerDelegate
- (void)handleTurboGiftEffectsChanged:(NSNotification *)notification {
BOOL enabled = [notification.userInfo[@"on"] boolValue];
// 🔧
self.cachedGiftEffectsEnabled = enabled;
//
if (!enabled) {
[self cleanupGiftEffects];
@@ -4291,9 +4292,6 @@ BannerSchedulerDelegate
- (void)handleTurboGlobalGiftScreenChanged:(NSNotification *)notification {
BOOL enabled = [notification.userInfo[@"on"] boolValue];
// 🔧
self.cachedGlobalGiftScreenEnabled = enabled;
// banner
if (!enabled) {
[self cleanupGiftBanners];
@@ -4306,9 +4304,6 @@ BannerSchedulerDelegate
- (void)handleTurboGlobalGameScreenChanged:(NSNotification *)notification {
BOOL enabled = [notification.userInfo[@"on"] boolValue];
// 🔧
self.cachedGlobalGameScreenEnabled = enabled;
// banner
if (!enabled) {
[self cleanupGameBanners];
@@ -4321,9 +4316,6 @@ BannerSchedulerDelegate
- (void)handleTurboCpMicChanged:(NSNotification *)notification {
BOOL enabled = [notification.userInfo[@"on"] boolValue];
// 🔧
self.cachedCpMicEnabled = enabled;
// CP MicMidpointRectManager
NSLog(@"🎮 RoomAnimationView CP麦位开关状态变化: %@", enabled ? @"开启" : @"关闭");
}
@@ -4339,29 +4331,12 @@ BannerSchedulerDelegate
[[TurboModeStateManager sharedManager] updateGiftEffectsForRoom:roomId
enabled:self.hostDelegate.getRoomInfo.hasAnimationEffect];
// 🔧
[self updateLocalSwitchCache];
NSLog(@"🎮 RoomAnimationView: 收到房间ID设置通知房间ID: %@", roomId);
}
}
// 🔧
- (void)updateLocalSwitchCache {
if (!self.currentRoomId) return;
TurboModeStateManager *manager = [TurboModeStateManager sharedManager];
self.cachedGiftEffectsEnabled = [manager isGiftEffectsEnabledForRoom:self.currentRoomId];
self.cachedGlobalGiftScreenEnabled = [manager isGlobalGiftScreenEnabledForRoom:self.currentRoomId];
self.cachedGlobalGameScreenEnabled = [manager isGlobalGameScreenEnabledForRoom:self.currentRoomId];
self.cachedCpMicEnabled = [manager isCpMicEnabledForRoom:self.currentRoomId];
NSLog(@"🎮 RoomAnimationView: 本地开关缓存已更新 - 礼物特效:%@, 全局礼物:%@, 全局游戏:%@, CP麦位:%@",
self.cachedGiftEffectsEnabled ? @"开启" : @"关闭",
self.cachedGlobalGiftScreenEnabled ? @"开启" : @"关闭",
self.cachedGlobalGameScreenEnabled ? @"开启" : @"关闭",
self.cachedCpMicEnabled ? @"开启" : @"关闭");
}
// TurboModeStateManager
// 🔧 Turbo Mode
- (void)handleTurboModeStateChanged:(NSNotification *)notification {
@@ -4373,7 +4348,11 @@ BannerSchedulerDelegate
NSLog(@"🎮 RoomAnimationView: Turbo Mode 已开启,停止所有 banner 和动画");
} else {
// Turbo Mode banner
NSLog(@"🎮 RoomAnimationView: Turbo Mode 已关闭,恢复正常的 banner 和动画控制");
if (self.bannerScheduler) {
// isPaused
[self.bannerScheduler resume];
}
NSLog(@"🎮 RoomAnimationView: Turbo Mode 已关闭,恢复 banner 调度");
}
}

View File

@@ -53,11 +53,6 @@
- (void)setItemModel:(XPRoomMoreItemModel *)itemModel {
_itemModel = itemModel;
if (_itemModel) {
NSLog(@"=== Cell 设置数据 ===");
NSLog(@"标题: %@", _itemModel.title);
NSLog(@"图片: %@", _itemModel.imageName);
NSLog(@"类型: %ld", (long)_itemModel.type);
self.titleLabel.text = _itemModel.title;
self.titleLabel.textColor = _itemModel.titleColor ? _itemModel.titleColor : [DJDKMIMOMColor mainTextColor];
if (itemModel.imageTintColor) {
@@ -66,8 +61,6 @@
} else {
self.logoImageView.image = [UIImage getLanguageImage:_itemModel.imageName];
}
NSLog(@"图片是否加载成功: %@", self.logoImageView.image ? @"是" : @"否");
}
}

View File

@@ -76,60 +76,56 @@
make.trailing.mas_equalTo(self.bottomAreaBackground).offset(-20);
make.width.height.mas_equalTo(44);
}];
self.dismissButton.hidden = YES;
}
- (void)setupTitle {
self.titleLabel = [[UILabel alloc] init];
self.titleLabel.text = YMLocalizedString(@"20.20.62_text_9"); // Turbo Mode
self.titleLabel.textColor = [UIColor whiteColor];
self.titleLabel.font = [UIFont boldSystemFontOfSize:18];
self.titleLabel.font = kFontMedium(15);
self.titleLabel.textAlignment = NSTextAlignmentCenter;
[self.bottomAreaBackground addSubview:self.titleLabel];
// - 使 Masonry
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.mas_equalTo(self.dismissButton);
make.centerX.mas_equalTo(self.bottomAreaBackground);
make.leading.mas_greaterThanOrEqualTo(self.bottomAreaBackground).offset(60);
make.trailing.mas_lessThanOrEqualTo(self.bottomAreaBackground).offset(-60);
// make.centerX.mas_equalTo(self.bottomAreaBackground);
make.leading.mas_greaterThanOrEqualTo(self.bottomAreaBackground).offset(16);
// make.trailing.mas_lessThanOrEqualTo(self.bottomAreaBackground).offset(-60);
}];
}
- (void)setupSwitches {
//
[self setupSwitchItem:YMLocalizedString(@"20.20.62_text_10") // Gift effects
switch:self.giftEffectsSwitch
atIndex:0];
atIndex:0];
//
[self setupSwitchItem:YMLocalizedString(@"20.20.62_text_11") // Global gift screen
switch:self.globalGiftScreenSwitch
atIndex:1];
atIndex:1];
//
[self setupSwitchItem:YMLocalizedString(@"20.20.62_text_12") // Global game screen
switch:self.globalGameScreenSwitch
atIndex:2];
atIndex:2];
// CP
[self setupSwitchItem:YMLocalizedString(@"20.20.62_text_21") // CP mic
switch:self.cpMicSwitch
atIndex:3];
atIndex:3];
}
- (void)setupSwitchItem:(NSString *)title
switch:(UISwitch *)switchControl
atIndex:(NSInteger)index {
UIView *switchView = [[UIView alloc] init];
switchView.backgroundColor = [UIColor colorWithWhite:0.2 alpha:0.8];
switchView.layer.cornerRadius = 12;
UIView *switchView = [[UIView alloc] init];
switchView.backgroundColor = [UIColor clearColor];
switchView.layer.cornerRadius = 12;
[self.bottomAreaBackground addSubview:switchView];
UILabel *titleLabel = [[UILabel alloc] init];
titleLabel.text = title;
titleLabel.textColor = [UIColor whiteColor];
titleLabel.font = [UIFont systemFontOfSize:16];
titleLabel.font = kFontRegular(14);
[switchView addSubview:titleLabel];
UISwitch *switchViewControl = [[UISwitch alloc] init];
@@ -138,19 +134,18 @@
// - 使 Masonry
[switchView mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(self.bottomAreaBackground).offset(20);
make.trailing.mas_equalTo(self.bottomAreaBackground).offset(-20);
make.top.mas_equalTo(self.titleLabel.mas_bottom).offset(30 + index * 70);
make.leading.trailing.mas_equalTo(self.bottomAreaBackground).inset(16);
make.top.mas_equalTo(self.titleLabel.mas_bottom).offset(20 + index * 50);
make.height.mas_equalTo(50);
}];
[titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(switchView).offset(16);
make.leading.mas_equalTo(switchView);
make.centerY.mas_equalTo(switchView);
}];
[switchViewControl mas_makeConstraints:^(MASConstraintMaker *make) {
make.trailing.mas_equalTo(switchView).offset(-16);
make.trailing.mas_equalTo(switchView);
make.centerY.mas_equalTo(switchView);
}];

View File

@@ -201,13 +201,6 @@ extern NSString *const kTurboModeButtonStateChanged;
#pragma mark - XPMoreMenuProtocol
- (void)getMoreMenuDataSuccess:(NSArray<XPRoomMoreItemModel *> *)list {
NSLog(@"=== getMoreMenuDataSuccess ===");
NSLog(@"接收到 %lu 个菜单项", (unsigned long)list.count);
for (XPRoomMoreItemModel *item in list) {
NSLog(@"菜单项: 标题=%@, 图片=%@, 类型=%ld", item.title, item.imageName, (long)item.type);
}
self.datasource = list;
[self.collectionView reloadData];

View File

@@ -390,14 +390,6 @@ NSString * const kBoomStateForceResetNotification = @"BoomStateForceResetNotific
//
- (void)printComboState {
NSDictionary *stateInfo = [self getComboStateInfo];
NSLog(@"[Combo effect] 📊 当前连击状态:");
NSLog(@"[Combo effect] - isCombing: %@", [stateInfo[@"isCombing"] boolValue] ? @"YES" : @"NO");
NSLog(@"[Combo effect] - enableCombo: %@", [stateInfo[@"enableCombo"] boolValue] ? @"YES" : @"NO");
NSLog(@"[Combo effect] - combo: %@", stateInfo[@"combo"]);
NSLog(@"[Combo effect] - hasGiftInfo: %@", [stateInfo[@"hasGiftInfo"] boolValue] ? @"YES" : @"NO");
NSLog(@"[Combo effect] - targetCount: %@", stateInfo[@"targetCount"]);
NSLog(@"[Combo effect] - errorMessage: %@", stateInfo[@"errorMessage"]);
//
[self validateAndFixComboCount];
}

View File

@@ -172,7 +172,6 @@
- (void)updateCount {
//
NSInteger comboCount = [[GiftComboManager sharedManager] currentCount];
NSLog(@"[Combo effect] 🔢 更新连击次数显示 - combo: %ld", (long)comboCount);
NSString *countStr = [NSString stringWithFormat:@"x%ld", comboCount];
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowBlurRadius = 3;

View File

@@ -2096,9 +2096,20 @@ XPCandyTreeInsufficientBalanceViewDelegate>
NSLog(@"[Recv] --- Message Raw Attach Content: %@, %@, %ld", @(message.senderClientType), message.rawAttachContent, (long)message.messageType);
if ([message.rawAttachContent containsString:@"\"allRoomMsg\":1"]) {
NSLog(@"[Recv] --- 拦截旧的全房间消息");
continue;
// / TurboModeStateManager
NSString *currentRoomIdForTurbo = @(self.roomInfo.roomId).stringValue;
BOOL containsAllRoomMsg = [message.rawAttachContent containsString:@"\"allRoomMsg\":1"]; //
BOOL containsAllGameMsg = [message.rawAttachContent containsString:@"\"allGameMsg\":1"]; //
if (containsAllRoomMsg || containsAllGameMsg) {
BOOL allowGiftScreen = [[TurboModeStateManager sharedManager] isGlobalGiftScreenEnabledForRoom:currentRoomIdForTurbo];
BOOL allowGameScreen = [[TurboModeStateManager sharedManager] isGlobalGameScreenEnabledForRoom:currentRoomIdForTurbo];
if ((containsAllRoomMsg && !allowGiftScreen) || (containsAllGameMsg && !allowGameScreen)) {
NSLog(@"[Recv] ⛔️ 按 TurboMode 屏蔽全服飘屏 | gift=%@ game=%@ | roomId=%@",
allowGiftScreen ? @"ON" : @"OFF",
allowGameScreen ? @"ON" : @"OFF",
currentRoomIdForTurbo);
continue;
}
}
if (message.messageType == NIMMessageTypeNotification) {
@@ -2915,6 +2926,15 @@ XPCandyTreeInsufficientBalanceViewDelegate>
}else if(attachment.first == CustomMessageType_LuckyBag && attachment.second == Custom_Message_Sub_Room_Gift_LuckBag_FullScree){
isHave = YES;
}
// TurboModeStateManager
if (isHave && (attachment.first == CustomMessageType_General_Public_Screen && attachment.second == Custom_Message_Sub_General_Public_Screen_All_Room)) {
NSString *currentRoomIdForTurbo = @(self.roomInfo.roomId).stringValue;
BOOL allowGiftScreen = [[TurboModeStateManager sharedManager] isGlobalGiftScreenEnabledForRoom:currentRoomIdForTurbo];
if (!allowGiftScreen) {
NSLog(@"[Broadcast] ⛔️ 按 TurboMode 屏蔽全服礼物飘屏 | roomId=%@", currentRoomIdForTurbo);
return;
}
}
if (attachment.first == CustomMessageType_RedPacket && attachment.second == Custom_Message_Sub_AllDiamandRedPacket) {
if(self.isShowRedPacket == YES)return;
XPRedPacketModel *data = [XPRedPacketModel modelWithDictionary:attachment.data];

View File

@@ -808,197 +808,163 @@
"XPMineDataClanTableViewCell5" = "Hali hech qanday guildga a'zo emas";
"XPMineDataClanTableViewCell6" = "Profil";
"XPMineDataClanTableViewCell7" = "Burjalar:";
// TODO: 漏的翻译 start
"XPMineDataClanTableViewCell8" = "Birthday:";
"XPMineDataClanTableViewCell9" = "Room:";
"XPMineDataClanTableViewCell10" = "Guild:";
"XPMineDataClanTableViewCell11" = "This user has not joined any room yet";
"XPMineDataClanTableViewCell12" = "Not joined any room yet";
"XPMineDataClanTableViewCell13" = "Region:";
"XPMineDataClanTableViewCell14" = "More";
"XPMineUserInfoGiftWallViewController0" = "Gifts";
"XPMineUserInfoGiftWallViewController1" = "Normal gifts";
"XPMineUserInfoGiftWallViewController2" = "Lucky gifts";
"XPMineUserInfoGiftWallViewController3" = "No photos yet";
"XPMineUserInfoGiftWallViewController4" = "No gifts yet";
"XPMineUserInfoTableViewCell1" = "I am a default signature";
"XPMineUserInfoTableViewCell2" = "Live";
"XPMineVisitorEmptyTableViewCell0" = "No data";
"XPMineVisitorTableViewCell0" = "User nickname";
"XPMineRechargeTableViewCell0" = "Coins";
"XPMineUserInfoViewController0" = "Report";
"XPMineUserInfoViewController1" = "Block User";
"XPMineUserInfoViewController2" = "Remove from Blacklist";
"XPMineUserInfoViewController3" = "By removing from blacklist, you will receive messages from this user as usual";
"XPMineUserInfoViewController4" = "Add to Blacklist";
"XPMineUserInfoViewController5" = "By adding to blacklist, you will no longer receive messages from this user";
"XPMineUserInfoViewController6" = "Removed from blacklist successfully";
"XPMineUserInfoViewController7" = "Added to blacklist successfully";
"XPMineUserInfoViewController8" = "Chat";
"XPMineUserInfoViewController9" = "Follow";
"XPMineUserInfoViewController10" = "Following";
"XPMineUserInfoViewController11" = "Profile";
"XPMineUserInfoViewController12" = "Posts";
"XPMineUserInfoViewController13" = "Gift Wall";
"XPMineUserInfoAlbumViewController0" = "My Albums";
"XPMineUserInfoAlbumViewController1" = "Upload from Camera";
"XPMineUserInfoAlbumViewController3" = "Camera access restricted. Tap OK to go to system settings";
"XPMineUserInfoAlbumViewController5" = "Photo library access restricted. Tap OK to go to system settings";
"XPMineUserInfoAlbumViewController6" = "Local Album";
"XPMineUserInfoAlbumViewController8" = "Photo library access restricted. Tap OK to go to system settings";
"XPMineUserInfoAlbumViewController10" = "Photo library access restricted. Tap OK to go to system settings";
"XPMineUserInfoAlbumViewController11" = "You can only upload up to 8 photos";
"XPMineUserInfoAlbumViewController12" = "Deletion is irreversible";
"XPMineUserInfoAlbumViewController13" = "Do you want to delete?";
"XPMineUserInfoAlbumViewController14" = "Photo under review, will be uploaded automatically after approval";
"XPMineUserInfoAlbumViewController15" = "Deleted successfully";
"XPMineUserInfoAlbumViewController16" = "Edit";
"XPMineUserInfoAlbumViewController17" = "Done";
"XPMineUserDataViewController0" = "Application submitted, waiting for admin approval";
"XPMineUserDataViewController1" = "Posts";
"XPMineUserDataViewController2" = "Default posts cannot be liked";
"XPMineUserDataViewController3" = "Default posts cannot be commented";
"XPMineSimpleUserInfoViewController0" = "Report";
"XPMineSimpleUserInfoViewController1" = "We have received your request and will process it as soon as possible";
"XPMineSimpleUserInfoViewController2" = "Block";
"XPMineSimpleUserInfoViewController3" = "Remove from Blacklist";
"XPMineSimpleUserInfoViewController4" = "By removing from blacklist, you will receive messages from this user as usual";
"XPMineSimpleUserInfoViewController5" = "Add to Blacklist";
"XPMineSimpleUserInfoViewController6" = "By adding to blacklist, you will no longer receive messages from this user";
"XPMineSimpleUserInfoViewController7" = "Removed from blacklist successfully";
"XPMineSimpleUserInfoViewController8" = "Added to blacklist successfully";
"XPMineSimpleUserInfoViewController9" = "Chat with them";
"XPMineSimpleUserInfoViewController10" = "Follow";
"XPMineSimpleUserInfoViewController11" = "Following";
"XPMineUserInfoDesViewController0" = "Edit Personal Introduction";
"XPMineUserInfoDesViewController1" = "Maximum %ld characters";
"XPMineUserInfoDesViewController2" = "Write a self-introduction to let others know more about you~";
"XPMineUserInfoDesViewController3" = "Done";
"XPMineUserInfoEditViewController0" = "Edit Profile";
"XPMineUserInfoEditViewController1" = "Upload from Camera";
"XPMineUserInfoEditViewController2" = "Camera unavailable";
"XPMineUserInfoEditViewController3" = "Camera access restricted. Tap OK to go to system settings";
"XPMineUserInfoEditViewController4" = "Camera unavailable";
"XPMineUserInfoEditViewController5" = "Photo library access restricted. Tap OK to go to system settings";
"XPMineUserInfoEditViewController6" = "Local Album";
"XPMineUserInfoEditViewController7" = "Photo library access restricted. Tap OK to go to system settings";
"XPMineUserInfoEditViewController8" = "Photo library access restricted. Tap OK to go to system settings";
"XPMineUserInfoEditViewController9" = "Profile under review";
"XPMineUserInfoEditViewController10" = "Profile under review, will be applied automatically after approval";
"XPMineUserInfoEditViewController11" = "Updated successfully";
"XPMineUserInfoEditViewController12" = "Avatar has been submitted for review, it will be automatically applied upon approval";
"XPMineUserInfoEditViewController13" = "Update successful";
"XPMineUserInfoNickViewController0" = "Edit Nickname";
"XPMineUserInfoNickViewController1" = "Maximum character limit reached";
"XPMineUserInfoNickViewController2" = "Maximum character limit reached";
"XPMineUserInfoNickViewController3" = "Done";
"XPMineUserInfoGiftWallViewController0" = "Gifts";
"XPMineVisitorViewController0" = "No more visitor records";
"XPMineVisitorViewController1" = "Visitor records";
"XPMineVisitorViewController2" = "No visitor records yet";
"XPMineViewController0" = "To create a safer online environment and protect your and others' property security, please complete real-name authentication first.";
"XPMineViewController2" = "Real-name Authentication";
"XPSimpleMineViewController0" = "You don't have any guild yet";
"XPSimpleMineViewController1" = "My Guild";
"XPSimpleMineViewController2" = "Personalize";
"XPSimpleMineViewController3" = "Fan Clubs";
"XPSimpleMineViewController4" = "Teen Mode";
"XPSimpleMineViewController5" = "Feedback";
"XPSimpleMineViewController6" = "Settings";
"XPIAPRechargeHeaderView0" = "My Coins";
"XPIAPRechargeViewController0" = "Purchase Failed";
"XPIAPRechargeViewController1" = "Unknown error occurred, please try again";
"XPIAPRechargeViewController2" = "Confirm Recharge";
"XPIAPRechargeViewController3" = "《User Recharge Agreement》";
"XPIAPRechargeViewController4" = "I have read and agree";
"XPIAPRechargeViewController5" = "For any questions, please contact customer service, MoliStar ID";
"XPIAPRechargeViewController6" = "My Account";
"XPIAPRechargeViewController7" = "Reminder";
"XPIAPRechargeViewController8" = "Recharge failed. Please contact customer service for assistance.";
"XPIAPRechargeViewController9" = "Contact Customer Service";
"XPIAPRechargeViewController10" = "Recharge failed. Currently only devices running iOS 15 and above can recharge. Please upgrade your system and try again.";
"XPIAPRechargeViewController11" = "Please select the number of Coins to be recharged";
"XPMineRechargeViewController0" = "Purchase Failed";
"XPMineRechargeViewController1" = "Unknown error occurred, please try again";
"XPMineRechargeViewController2" = "《User Recharge Agreement";
"XPMineRechargeViewController3" = "I have read and agree";
"XPMinePayPwdViewController0" = "Set Payment Password";
"XPMinePayPwdViewController1" = "Failed to get phone number";
"XPMinePayPwdViewController2" = "Verification code sent successfully";
"XPMinePayPwdViewController3" = "Payment password set successfully";
"XPMinePayPwdViewController4" = "Payment password must be 6-digit number";
"XPMinePayPwdViewController5" = "Payment password must be numeric";
"XPMinePayPwdViewController6" = "Passwords entered do not match";
"XPMinePayPwdViewController7" = "Enter verification code";
"XPMinePayPwdViewController9" = "Verification code sent to your bound phone %@****%@";
"XPMinePayPwdViewController10" = "Enter payment password";
"XPMinePayPwdViewController11" = "Confirm payment password";
"XPMineBlackListViewController0" = "Blacklist";
"XPMineBlackListViewController1" = "Remove";
"XPMineResetPayPwdViewController0" = "Reset Payment Password";
"XPMineResetPayPwdViewController1" = "Payment password reset successfully";
"XPMineResetPayPwdViewController2" = "Passwords entered do not match";
"XPMineResetPayPwdViewController3" = "Enter payment password";
"XPMineResetPayPwdViewController4" = "Confirm payment password";
"XPMineSettingViewController0" = "Settings";
"XPMineSettingViewController1" = "Please bind your phone number first";
"XPMineSettingViewController2" = "Clear Cache";
"XPMineSettingViewController3" = "Do you want to clear cache?";
"XPMineSettingViewController4" = "Cache cleared";
"XPMineSettingViewController5" = "Currently updated to the latest version";
"XPMineSettingViewController6" = "Currently updated to the latest version";
"XPMineSettingViewController7" = "Log out of current account";
"XPMineSettingViewController8" = "Log out";
"XPMineSettingViewController9" = "Set Login Password";
"XPMineSettingViewController10" = "To facilitate your next login, please set a login password first";
"XPMineModifPayPwdViewController0" = "Modify Payment Password";
"XPMineModifPayPwdViewController1" = "Payment password modified successfully";
"XPMineModifPayPwdViewController2" = "Passwords entered do not match";
"XPMineModifPayPwdViewController3" = "New payment password must be numeric";
"XPMineModifPayPwdViewController4" = "Enter current payment password";
"XPMineModifPayPwdViewController5" = "Enter payment password";
"XPMineModifPayPwdViewController6" = "Confirm payment password";
"XPMineModifPayPwdViewController8" = "Forgot Password";
"XPMineFeedbackViewController0" = "Feedback";
"XPMineFeedbackViewController1" = "Thank you for your valuable feedback, let's work together to create a better";
"XPMineFeedbackViewController2" = "Problem Description";
"XPMineFeedbackViewController3" = "Please describe in detail the problems and situations you encountered. Thank you for your valuable feedback.";
"XPMineFeedbackViewController4" = "Please enter your contact information";
"XPMineFeedbackViewController5" = "Submit Feedback";
// TODO: 漏的翻译 end
"XPMineDataClanTableViewCell8" = "Tug'ilgan kun:";
"XPMineDataClanTableViewCell9" = "Xona:";
"XPMineDataClanTableViewCell10" = "Gildiya:";
"XPMineDataClanTableViewCell11" = "Bu foydalanuvchi hali hech qanday xonaga qo'shilmagan";
"XPMineDataClanTableViewCell12" = "Hali hech qanday xonaga qo'shilmagan";
"XPMineDataClanTableViewCell13" = "Hudud:";
"XPMineDataClanTableViewCell14" = "Batafsil";
"XPMineUserInfoGiftWallViewController0" = "Sovg'alar";
"XPMineUserInfoGiftWallViewController1" = "Oddiy sovg'alar";
"XPMineUserInfoGiftWallViewController2" = "Omadli sovg'alar";
"XPMineUserInfoGiftWallViewController3" = "Hali rasmlar mavjud emas";
"XPMineUserInfoGiftWallViewController4" = "Hali sovg'alar mavjud emas";
"XPMineUserInfoTableViewCell1" = "Men standart imzodaman";
"XPMineUserInfoTableViewCell2" = "Jonli";
"XPMineVisitorEmptyTableViewCell0" = "Ma'lumot yo'q";
"XPMineVisitorTableViewCell0" = "Foydalanuvchi taxallusi";
"XPMineRechargeTableViewCell0" = "Tangalar";
"XPMineUserInfoViewController0" = "Shikoyat qilish";
"XPMineUserInfoViewController1" = "Foydalanuvchini bloklash";
"XPMineUserInfoViewController2" = "Qora ro'yxatdan olib tashlash";
"XPMineUserInfoViewController3" = "Qora ro'yxatdan olib tashlash orqali siz ushbu foydalanuvchidan xabarlarni odatdagidek olasiz";
"XPMineUserInfoViewController4" = "Qora ro'yxatga qo'shish";
"XPMineUserInfoViewController5" = "Qora ro'yxatga qo'shish orqali siz ushbu foydalanuvchidan boshqa xabarlar olmaysiz";
"XPMineUserInfoViewController6" = "Qora ro'yxatdan muvaffaqiyatli olib tashlandi";
"XPMineUserInfoViewController7" = "Qora ro'yxatga muvaffaqiyatli qo'shildi";
"XPMineUserInfoViewController8" = "Suhbat";
"XPMineUserInfoViewController9" = "Kuzatish";
"XPMineUserInfoViewController10" = "Kuzatilmoqda";
"XPMineUserInfoViewController11" = "Profil";
"XPMineUserInfoViewController12" = "Postlar";
"XPMineUserInfoViewController13" = "Sovg'alar devori";
"XPMineUserInfoAlbumViewController0" = "Mening albomlarim";
"XPMineUserInfoAlbumViewController1" = "Kameradan yuklash";
"XPMineUserInfoAlbumViewController3" = "Kameraga kirish cheklangan. Tizim sozlamalariga o'tish uchun OK tugmasini bosing";
"XPMineUserInfoAlbumViewController5" = "Fotoalbomga kirish cheklangan. Tizim sozlamalariga o'tish uchun OK tugmasini bosing";
"XPMineUserInfoAlbumViewController6" = "Lokal albom";
"XPMineUserInfoAlbumViewController8" = "Fotoalbomga kirish cheklangan. Tizim sozlamalariga o'tish uchun OK tugmasini bosing";
"XPMineUserInfoAlbumViewController10" = "Fotoalbomga kirish cheklangan. Tizim sozlamalariga o'tish uchun OK tugmasini bosing";
"XPMineUserInfoAlbumViewController11" = "Siz faqat 8 tagacha rasm yuklashingiz mumkin";
"XPMineUserInfoAlbumViewController12" = "O'chirishni qaytarib bo'lmaydi";
"XPMineUserInfoAlbumViewController13" = "O'chirmoqchimisiz?";
"XPMineUserInfoAlbumViewController14" = "Rasm ko'rib chiqilmoqda, tasdiqlangandan keyin avtomatik yuklanadi";
"XPMineUserInfoAlbumViewController15" = "Muvaffaqiyatli o'chirildi";
"XPMineUserInfoAlbumViewController16" = "Tahrirlash";
"XPMineUserInfoAlbumViewController17" = "Bajarildi";
"XPMineUserDataViewController0" = "Ariza topshirildi, ma'mur tasdiqini kutmoqda";
"XPMineUserDataViewController1" = "Postlar";
"XPMineUserDataViewController2" = "Standart postlarni yoqtirish mumkin emas";
"XPMineUserDataViewController3" = "Standart postlarga izoh qoldirish mumkin emas";
"XPMineSimpleUserInfoViewController0" = "Shikoyat qilish";
"XPMineSimpleUserInfoViewController1" = "Biz sizning so'rovingizni qabul qildik va imkon qadar tezda ko'rib chiqamiz";
"XPMineSimpleUserInfoViewController2" = "Bloklash";
"XPMineSimpleUserInfoViewController3" = "Qora ro'yxatdan olib tashlash";
"XPMineSimpleUserInfoViewController4" = "Qora ro'yxatdan olib tashlash orqali siz ushbu foydalanuvchidan xabarlarni odatdagidek olasiz";
"XPMineSimpleUserInfoViewController5" = "Qora ro'yxatga qo'shish";
"XPMineSimpleUserInfoViewController6" = "Qora ro'yxatga qo'shish orqali siz ushbu foydalanuvchidan boshqa xabarlar olmaysiz";
"XPMineSimpleUserInfoViewController7" = "Qora ro'yxatdan muvaffaqiyatli olib tashlandi";
"XPMineSimpleUserInfoViewController8" = "Qora ro'yxatga muvaffaqiyatli qo'shildi";
"XPMineSimpleUserInfoViewController9" = "Ularni suhbat qilish";
"XPMineSimpleUserInfoViewController10" = "Kuzatish";
"XPMineSimpleUserInfoViewController11" = "Kuzatilmoqda";
"XPMineUserInfoDesViewController0" = "Shaxsiy ta'rifni tahrirlash";
"XPMineUserInfoDesViewController1" = "Maksimal %ld belgi";
"XPMineUserInfoDesViewController2" = "O'zingiz haqingizda batafsil yozing, boshqalar sizni yaxshiroq tanishsin~";
"XPMineUserInfoDesViewController3" = "Bajarildi";
"XPMineUserInfoEditViewController0" = "Profilni tahrirlash";
"XPMineUserInfoEditViewController1" = "Kameradan yuklash";
"XPMineUserInfoEditViewController2" = "Kamera mavjud emas";
"XPMineUserInfoEditViewController3" = "Kameraga kirish cheklangan. Tizim sozlamalariga o'tish uchun OK tugmasini bosing";
"XPMineUserInfoEditViewController4" = "Kamera mavjud emas";
"XPMineUserInfoEditViewController5" = "Fotoalbomga kirish cheklangan. Tizim sozlamalariga o'tish uchun OK tugmasini bosing";
"XPMineUserInfoEditViewController6" = "Lokal albom";
"XPMineUserInfoEditViewController7" = "Fotoalbomga kirish cheklangan. Tizim sozlamalariga o'tish uchun OK tugmasini bosing";
"XPMineUserInfoEditViewController8" = "Fotoalbomga kirish cheklangan. Tizim sozlamalariga o'tish uchun OK tugmasini bosing";
"XPMineUserInfoEditViewController9" = "Profil ko'rib chiqilmoqda";
"XPMineUserInfoEditViewController10" = "Profil ko'rib chiqilmoqda, tasdiqlangandan keyin avtomatik qo'llaniladi";
"XPMineUserInfoEditViewController11" = "Muvaffaqiyatli yangilandi";
"XPMineUserInfoEditViewController12" = "Avatar ko'rib chiqish uchun topshirildi, tasdiqlangandan keyin avtomatik qo'llaniladi";
"XPMineUserInfoEditViewController13" = "Yangilash muvaffaqiyatli";
"XPMineUserInfoNickViewController0" = "Taxallusni tahrirlash";
"XPMineUserInfoNickViewController1" = "Maksimal belgi chegarasiga yetildi";
"XPMineUserInfoNickViewController2" = "Maksimal belgi chegarasiga yetildi";
"XPMineUserInfoNickViewController3" = "Bajarildi";
"XPMineUserInfoGiftWallViewController0" = "Sovg'alar";
"XPMineVisitorViewController0" = "Boshqa mehmon yozuvlari yo'q";
"XPMineVisitorViewController1" = "Mehmon yozuvlari";
"XPMineVisitorViewController2" = "Hali mehmon yozuvlari mavjud emas";
"XPMineViewController0" = "Xavfsiz onlayn muhit yaratish va sizning va boshqalarning mulk xavfsizligini himoya qilish uchun, iltimos, avval haqiqiy ism autentifikatsiyasini to'ldiring.";
"XPMineViewController2" = "Haqiqiy ism autentifikatsiyasi";
"XPSimpleMineViewController0" = "Sizda hali hech qanday gildiya yo'q";
"XPSimpleMineViewController1" = "Mening gildiyam";
"XPSimpleMineViewController2" = "Shaxsiylashtirish";
"XPSimpleMineViewController3" = "Muxlislar klublari";
"XPSimpleMineViewController4" = "Yosh rejimi";
"XPSimpleMineViewController5" = "Fikr-mulohaza";
"XPSimpleMineViewController6" = "Sozlamalar";
"XPIAPRechargeHeaderView0" = "Mening tangalarim";
"XPIAPRechargeViewController0" = "Xarida muvaffaqiyatsiz";
"XPIAPRechargeViewController1" = "Noma'lum xato yuz berdi, iltimos qayta urinib ko'ring";
"XPIAPRechargeViewController2" = "To'ldirishni tasdiqlash";
"XPIAPRechargeViewController3" = "《Foydalanuvchi To'ldirish Shartnomasi》";
"XPIAPRechargeViewController4" = "Men o'qidim va qabul qildim";
"XPIAPRechargeViewController5" = "Savollar bo'lsa, iltimos mijozlar xizmatiga murojaat qiling, MoliStar ID";
"XPIAPRechargeViewController6" = "Mening hisobim";
"XPIAPRechargeViewController7" = "Eslatma";
"XPIAPRechargeViewController8" = "To'ldirish muvaffaqiyatsiz. Iltimos yordam uchun mijozlar xizmatiga murojaat qiling.";
"XPIAPRechargeViewController9" = "Mijozlar xizmatiga murojaat qiling";
"XPIAPRechargeViewController10" = "To'ldirish muvaffaqiyatsiz. Hozirda faqat iOS 15 va undan yuqori versiyalarda ishlaydigan qurilmalar to'ldirishi mumkin. Iltimos tizimingizni yangilang va qayta urinib ko'ring.";
"XPIAPRechargeViewController11" = "Iltimos to'ldiriladigan Tangalar sonini tanlang";
"XPMineRechargeViewController0" = "Xarida muvaffaqiyatsiz";
"XPMineRechargeViewController1" = "Noma'lum xato yuz berdi, iltimos qayta urinib ko'ring";
"XPMineRechargeViewController2" = "《Foydalanuvchi To'ldirish Shartnomasi";
"XPMineRechargeViewController3" = "Men o'qidim va qabul qildim";
"XPMinePayPwdViewController0" = "To'lov parolini o'rnatish";
"XPMinePayPwdViewController1" = "Telefon raqamini olish muvaffaqiyatsiz";
"XPMinePayPwdViewController2" = "Tasdiqlash kodi muvaffaqiyatli yuborildi";
"XPMinePayPwdViewController3" = "To'lov paroli muvaffaqiyatli o'rnatildi";
"XPMinePayPwdViewController4" = "To'lov paroli 6 raqamli bo'lishi kerak";
"XPMinePayPwdViewController5" = "To'lov paroli raqamli bo'lishi kerak";
"XPMinePayPwdViewController6" = "Kiritilgan parollar mos kelmadi";
"XPMinePayPwdViewController7" = "Tasdiqlash kodini kiriting";
"XPMinePayPwdViewController9" = "Tasdiqlash kodi sizning bog'langan telefon raqamingiz %@****%@ ga yuborildi";
"XPMinePayPwdViewController10" = "To'lov parolini kiriting";
"XPMinePayPwdViewController11" = "To'lov parolini tasdiqlang";
"XPMineBlackListViewController0" = "Qora ro'yxat";
"XPMineBlackListViewController1" = "O'chirish";
"XPMineResetPayPwdViewController0" = "To'lov parolini qayta o'rnatish";
"XPMineResetPayPwdViewController1" = "To'lov paroli muvaffaqiyatli qayta o'rnatildi";
"XPMineResetPayPwdViewController2" = "Kiritilgan parollar mos kelmadi";
"XPMineResetPayPwdViewController3" = "To'lov parolini kiriting";
"XPMineResetPayPwdViewController4" = "To'lov parolini tasdiqlang";
"XPMineSettingViewController0" = "Sozlamalar";
"XPMineSettingViewController1" = "Iltimos avval telefon raqamingizni bog'lang";
"XPMineSettingViewController2" = "Keshni tozalash";
"XPMineSettingViewController3" = "Keshni tozalamoqchimisiz?";
"XPMineSettingViewController4" = "Kesh tozalandi";
"XPMineSettingViewController5" = "Hozirda eng so'nggi versiyaga yangilandi";
"XPMineSettingViewController6" = "Hozirda eng so'nggi versiyaga yangilandi";
"XPMineSettingViewController7" = "Joriy hisobdan chiqish";
"XPMineSettingViewController8" = "Chiqish";
"XPMineSettingViewController9" = "Kirish parolini o'rnatish";
"XPMineSettingViewController10" = "Keyingi kirishingizni qulaylashtirish uchun, iltimos avval kirish parolini o'rnating";
"XPMineModifPayPwdViewController0" = "To'lov parolini o'zgartirish";
"XPMineModifPayPwdViewController1" = "To'lov paroli muvaffaqiyatli o'zgartirildi";
"XPMineModifPayPwdViewController2" = "Kiritilgan parollar mos kelmadi";
"XPMineModifPayPwdViewController3" = "Yangi to'lov paroli raqamli bo'lishi kerak";
"XPMineModifPayPwdViewController4" = "Joriy to'lov parolini kiriting";
"XPMineModifPayPwdViewController5" = "To'lov parolini kiriting";
"XPMineModifPayPwdViewController6" = "To'lov parolini tasdiqlang";
"XPMineModifPayPwdViewController8" = "Parolni unutdingizmi";
"XPMineFeedbackViewController0" = "Fikr-mulohaza";
"XPMineFeedbackViewController1" = "Sizning qimmatli fikringiz uchun tashakkur, keling birgalikda yaxshiroq yarataylik";
"XPMineFeedbackViewController2" = "Muammo tavsifi";
"XPMineFeedbackViewController3" = "Iltimos, duch kelgan muammo va vaziyatlaringizni batafsil tasvirlang. Qimmatli fikringiz uchun tashakkur.";
"XPMineFeedbackViewController4" = "Iltimos aloqa ma'lumotlaringizni kiriting";
"XPMineFeedbackViewController5" = "Fikr-mulohazani yuborish";
"XPMineAboutUsViewController0" = "Haqida";
"XPMineNotificaViewController0" = "Bildirishnoma sozlamalari";