mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
Merge pull request #2988 from kevlahnota/newmaster2
Add AdventureWinLose Overlay
This commit is contained in:
@@ -19,4 +19,5 @@ public class SettingData {
|
|||||||
public Float rewardCardAdjLandscape;
|
public Float rewardCardAdjLandscape;
|
||||||
public Float cardTooltipAdjLandscape;
|
public Float cardTooltipAdjLandscape;
|
||||||
public boolean dayNightBG;
|
public boolean dayNightBG;
|
||||||
|
public boolean disableWinLose;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import forge.player.GamePlayerUtil;
|
|||||||
import forge.player.PlayerControllerHuman;
|
import forge.player.PlayerControllerHuman;
|
||||||
import forge.screens.FScreen;
|
import forge.screens.FScreen;
|
||||||
import forge.screens.LoadingOverlay;
|
import forge.screens.LoadingOverlay;
|
||||||
|
import forge.screens.TransitionScreen;
|
||||||
import forge.screens.match.MatchController;
|
import forge.screens.match.MatchController;
|
||||||
import forge.sound.MusicPlaylist;
|
import forge.sound.MusicPlaylist;
|
||||||
import forge.sound.SoundSystem;
|
import forge.sound.SoundSystem;
|
||||||
@@ -130,18 +131,20 @@ public class DuelScene extends ForgeScene {
|
|||||||
@Override
|
@Override
|
||||||
public void run(Integer result) {
|
public void run(Integer result) {
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
afterGameEnd(enemyName, finalWinner, true, true);
|
afterGameEnd(enemyName, finalWinner);
|
||||||
|
if (Config.instance().getSettingData().disableWinLose)
|
||||||
|
exitDuelScene();
|
||||||
}
|
}
|
||||||
fb.dispose();
|
fb.dispose();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
afterGameEnd(enemyName, winner, false, false);
|
afterGameEnd(enemyName, winner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Runnable endRunnable = null;
|
||||||
void afterGameEnd(String enemyName, boolean winner, boolean showOverlay, boolean alternate) {
|
void afterGameEnd(String enemyName, boolean winner) {
|
||||||
Runnable runnable = () -> Gdx.app.postRunnable(()-> {
|
endRunnable = () -> Gdx.app.postRunnable(()-> {
|
||||||
if (GameScene.instance().isNotInWorldMap()) {
|
if (GameScene.instance().isNotInWorldMap()) {
|
||||||
SoundSystem.instance.pause();
|
SoundSystem.instance.pause();
|
||||||
GameHUD.getInstance().playAudio();
|
GameHUD.getInstance().playAudio();
|
||||||
@@ -160,14 +163,9 @@ public class DuelScene extends ForgeScene {
|
|||||||
((IAfterMatch) last).setWinner(winner);
|
((IAfterMatch) last).setWinner(winner);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (showOverlay) {
|
}
|
||||||
FThreads.invokeInEdtNowOrLater(() -> {
|
public void exitDuelScene() {
|
||||||
matchOverlay = new LoadingOverlay(runnable, true, alternate);
|
Forge.setTransitionScreen(new TransitionScreen(endRunnable, Forge.takeScreenshot(), false, false));
|
||||||
matchOverlay.show();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
runnable.run();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void addEffects(RegisteredPlayer player, Array<EffectData> effects) {
|
void addEffects(RegisteredPlayer player, Array<EffectData> effects) {
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import java.io.IOException;
|
|||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.time.LocalTime;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
@@ -203,7 +202,6 @@ public class SettingsScene extends UIScene {
|
|||||||
boolean value = ((CheckBox) actor).isChecked();
|
boolean value = ((CheckBox) actor).isChecked();
|
||||||
Config.instance().getSettingData().fullScreen = value;
|
Config.instance().getSettingData().fullScreen = value;
|
||||||
Config.instance().saveSettings();
|
Config.instance().saveSettings();
|
||||||
setTargetTime(LocalTime.now().getHour());
|
|
||||||
//update
|
//update
|
||||||
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_FULLSCREEN_MODE) != value) {
|
if (FModel.getPreferences().getPrefBoolean(ForgePreferences.FPref.UI_FULLSCREEN_MODE) != value) {
|
||||||
FModel.getPreferences().setPref(ForgePreferences.FPref.UI_LANDSCAPE_MODE, value);
|
FModel.getPreferences().setPref(ForgePreferences.FPref.UI_LANDSCAPE_MODE, value);
|
||||||
@@ -223,6 +221,14 @@ public class SettingsScene extends UIScene {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
addSettingField(Forge.getLocalizer().getMessage("lblDisableWinLose"), Config.instance().getSettingData().disableWinLose, new ChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void changed(ChangeEvent event, Actor actor) {
|
||||||
|
boolean value = ((CheckBox) actor).isChecked();
|
||||||
|
Config.instance().getSettingData().disableWinLose = value;
|
||||||
|
Config.instance().saveSettings();
|
||||||
|
}
|
||||||
|
});
|
||||||
addCheckBox(Forge.getLocalizer().getMessage("lblCardName"), ForgePreferences.FPref.UI_OVERLAY_CARD_NAME);
|
addCheckBox(Forge.getLocalizer().getMessage("lblCardName"), ForgePreferences.FPref.UI_OVERLAY_CARD_NAME);
|
||||||
addSettingSlider(Forge.getLocalizer().getMessage("cbAdjustMusicVolume"), ForgePreferences.FPref.UI_VOL_MUSIC, 0, 100);
|
addSettingSlider(Forge.getLocalizer().getMessage("cbAdjustMusicVolume"), ForgePreferences.FPref.UI_VOL_MUSIC, 0, 100);
|
||||||
addSettingSlider(Forge.getLocalizer().getMessage("cbAdjustSoundsVolume"), ForgePreferences.FPref.UI_VOL_SOUNDS, 0, 100);
|
addSettingSlider(Forge.getLocalizer().getMessage("cbAdjustSoundsVolume"), ForgePreferences.FPref.UI_VOL_SOUNDS, 0, 100);
|
||||||
|
|||||||
@@ -338,12 +338,14 @@ public class GameHUD extends Stage {
|
|||||||
//unequip and reequip abilities
|
//unequip and reequip abilities
|
||||||
updateAbility();
|
updateAbility();
|
||||||
}
|
}
|
||||||
|
void clearAbility() {
|
||||||
void updateAbility() {
|
|
||||||
for (TextraButton button : abilityButtonMap) {
|
for (TextraButton button : abilityButtonMap) {
|
||||||
button.remove();
|
button.remove();
|
||||||
}
|
}
|
||||||
abilityButtonMap.clear();
|
abilityButtonMap.clear();
|
||||||
|
}
|
||||||
|
void updateAbility() {
|
||||||
|
clearAbility();
|
||||||
setAbilityButton(AdventurePlayer.current().getEquippedAbility1());
|
setAbilityButton(AdventurePlayer.current().getEquippedAbility1());
|
||||||
setAbilityButton(AdventurePlayer.current().getEquippedAbility2());
|
setAbilityButton(AdventurePlayer.current().getEquippedAbility2());
|
||||||
float x = Forge.isLandscapeMode() ? 426f : 216f;
|
float x = Forge.isLandscapeMode() ? 426f : 216f;
|
||||||
@@ -570,6 +572,14 @@ public class GameHUD extends Stage {
|
|||||||
}
|
}
|
||||||
opacity = visible ? 1f : 0.4f;
|
opacity = visible ? 1f : 0.4f;
|
||||||
}
|
}
|
||||||
|
void toggleConsole() {
|
||||||
|
console.toggle();
|
||||||
|
if (console.isVisible()) {
|
||||||
|
clearAbility();
|
||||||
|
} else {
|
||||||
|
updateAbility();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean keyUp(int keycode) {
|
public boolean keyUp(int keycode) {
|
||||||
@@ -584,12 +594,12 @@ public class GameHUD extends Stage {
|
|||||||
}
|
}
|
||||||
ui.pressDown(keycode);
|
ui.pressDown(keycode);
|
||||||
if (keycode == Input.Keys.F9 || keycode == Input.Keys.F10) {
|
if (keycode == Input.Keys.F9 || keycode == Input.Keys.F10) {
|
||||||
console.toggle();
|
toggleConsole();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (keycode == Input.Keys.BACK) {
|
if (keycode == Input.Keys.BACK) {
|
||||||
if (console.isVisible()) {
|
if (console.isVisible()) {
|
||||||
console.toggle();
|
toggleConsole();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (console.isVisible())
|
if (console.isVisible())
|
||||||
@@ -701,7 +711,7 @@ public class GameHUD extends Stage {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean longPress(Actor actor, float x, float y) {
|
public boolean longPress(Actor actor, float x, float y) {
|
||||||
console.toggle();
|
toggleConsole();
|
||||||
return super.longPress(actor, x, y);
|
return super.longPress(actor, x, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,11 +6,11 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import forge.adventure.scene.DuelScene;
|
import forge.adventure.scene.DuelScene;
|
||||||
|
import forge.adventure.util.Config;
|
||||||
import forge.ai.GameState;
|
import forge.ai.GameState;
|
||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.item.IPaperCard;
|
import forge.item.IPaperCard;
|
||||||
import forge.screens.TransitionScreen;
|
|
||||||
import forge.util.collect.FCollection;
|
import forge.util.collect.FCollection;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@@ -312,14 +312,12 @@ public class MatchController extends AbstractGuiGame {
|
|||||||
@Override
|
@Override
|
||||||
public void finishGame() {
|
public void finishGame() {
|
||||||
if (Forge.isMobileAdventureMode) {
|
if (Forge.isMobileAdventureMode) {
|
||||||
Forge.setCursor(null, "0");
|
if (Config.instance().getSettingData().disableWinLose) {
|
||||||
if (DuelScene.instance().hasCallbackExit())
|
Forge.setCursor(null, "0");
|
||||||
|
if (!DuelScene.instance().hasCallbackExit())
|
||||||
|
DuelScene.instance().exitDuelScene();
|
||||||
return;
|
return;
|
||||||
Forge.setTransitionScreen(new TransitionScreen(() -> {
|
}
|
||||||
Forge.clearTransitionScreen();
|
|
||||||
Forge.clearCurrentScreen();
|
|
||||||
}, Forge.takeScreenshot(), false, false));
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (hasLocalPlayers() || getGameView().isMatchOver()) {
|
if (hasLocalPlayers() || getGameView().isMatchOver()) {
|
||||||
view.setViewWinLose(new ViewWinLose(getGameView()));
|
view.setViewWinLose(new ViewWinLose(getGameView()));
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package forge.screens.match.winlose;
|
||||||
|
|
||||||
|
import forge.Forge;
|
||||||
|
import forge.adventure.scene.DuelScene;
|
||||||
|
import forge.game.GameView;
|
||||||
|
|
||||||
|
public class AdventureWinLose extends ControlWinLose {
|
||||||
|
/**
|
||||||
|
* @param v   ViewWinLose
|
||||||
|
* @param game
|
||||||
|
*/
|
||||||
|
public AdventureWinLose(ViewWinLose v, GameView game) {
|
||||||
|
super(v, game);
|
||||||
|
v.getBtnContinue().setVisible(false);
|
||||||
|
v.getBtnRestart().setVisible(false);
|
||||||
|
v.getLabelShowBattlefield().setVisible(false);
|
||||||
|
v.getBtnQuit().setText(Forge.getLocalizer().getMessage("lblBackToAdventure"));
|
||||||
|
Forge.setCursor(null, "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionOnContinue() {
|
||||||
|
//Do Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionOnRestart() {
|
||||||
|
//Do Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionOnQuit() {
|
||||||
|
getView().hide();
|
||||||
|
DuelScene.instance().exitDuelScene();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveOptions() {
|
||||||
|
//Do Nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showRewards() {
|
||||||
|
//Do Nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -123,6 +123,9 @@ public class ViewWinLose extends FOverlay implements IWinLoseView<FButton> {
|
|||||||
}).build());
|
}).build());
|
||||||
lblTitle.setText(composeTitle(game0));
|
lblTitle.setText(composeTitle(game0));
|
||||||
|
|
||||||
|
if (Forge.isMobileAdventureMode)
|
||||||
|
control = new AdventureWinLose(this, game0);
|
||||||
|
|
||||||
showGameOutcomeSummary();
|
showGameOutcomeSummary();
|
||||||
showPlayerScores();
|
showPlayerScores();
|
||||||
control.showRewards();
|
control.showRewards();
|
||||||
@@ -152,6 +155,10 @@ public class ViewWinLose extends FOverlay implements IWinLoseView<FButton> {
|
|||||||
return this.btnQuit;
|
return this.btnQuit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public FLabel getLabelShowBattlefield() {
|
||||||
|
return this.btnShowBattlefield;
|
||||||
|
}
|
||||||
|
|
||||||
private void showGameOutcomeSummary() {
|
private void showGameOutcomeSummary() {
|
||||||
for (GameLogEntry o : game.getGameLog().getLogEntriesExact(GameLogEntryType.GAME_OUTCOME)) {
|
for (GameLogEntry o : game.getGameLog().getLogEntriesExact(GameLogEntryType.GAME_OUTCOME)) {
|
||||||
pnlOutcomes.add(new FLabel.Builder().text(o.message).font(FSkinFont.get(14)).build());
|
pnlOutcomes.add(new FLabel.Builder().text(o.message).font(FSkinFont.get(14)).build());
|
||||||
@@ -191,12 +198,20 @@ public class ViewWinLose extends FOverlay implements IWinLoseView<FButton> {
|
|||||||
y += h + dy;
|
y += h + dy;
|
||||||
|
|
||||||
h = height / 12;
|
h = height / 12;
|
||||||
btnContinue.setBounds(x, y, w, h);
|
if (Forge.isMobileAdventureMode) {
|
||||||
y += h + dy;
|
btnQuit.setBounds(x, y, w, h);
|
||||||
btnRestart.setBounds(x, y, w, h);
|
y += h + dy;
|
||||||
y += h + dy;
|
btnContinue.setVisible(false);
|
||||||
btnQuit.setBounds(x, y, w, h);
|
btnRestart.setVisible(false);
|
||||||
y += h + dy;
|
} else {
|
||||||
|
btnContinue.setBounds(x, y, w, h);
|
||||||
|
y += h + dy;
|
||||||
|
btnRestart.setBounds(x, y, w, h);
|
||||||
|
y += h + dy;
|
||||||
|
btnQuit.setBounds(x, y, w, h);
|
||||||
|
y += h + dy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
h = lblLog.getAutoSizeBounds().height + dy;
|
h = lblLog.getAutoSizeBounds().height + dy;
|
||||||
lblLog.setBounds(x, y, w, h);
|
lblLog.setBounds(x, y, w, h);
|
||||||
|
|||||||
@@ -2962,6 +2962,8 @@ lblZoom=Zoomen
|
|||||||
lblEffect=Wirkung
|
lblEffect=Wirkung
|
||||||
lblEmblem=Emblem
|
lblEmblem=Emblem
|
||||||
lblBoon=Vorteil
|
lblBoon=Vorteil
|
||||||
|
lblBackToAdventure=Zurück zum Abenteuer
|
||||||
|
lblDisableWinLose=Deaktivieren Sie Winslose Overlay
|
||||||
lblExitToWoldMap=Zurück zur Weltkarte?
|
lblExitToWoldMap=Zurück zur Weltkarte?
|
||||||
lblStartArena=Willst du in die Arena gehen?
|
lblStartArena=Willst du in die Arena gehen?
|
||||||
lblWouldYouLikeDestroy=Möchten Sie {0} zerstören?
|
lblWouldYouLikeDestroy=Möchten Sie {0} zerstören?
|
||||||
|
|||||||
@@ -2972,6 +2972,8 @@ lblZoom=Zoom
|
|||||||
lblEffect=Effect
|
lblEffect=Effect
|
||||||
lblEmblem=Emblem
|
lblEmblem=Emblem
|
||||||
lblBoon=Boon
|
lblBoon=Boon
|
||||||
|
lblBackToAdventure=Back to Adventure
|
||||||
|
lblDisableWinLose=Disable WinLose Overlay
|
||||||
lblExitToWoldMap=Exit to the World Map?
|
lblExitToWoldMap=Exit to the World Map?
|
||||||
lblStartArena=Do you want to go into the Arena?
|
lblStartArena=Do you want to go into the Arena?
|
||||||
lblWouldYouLikeDestroy=Would you like to destroy {0}?
|
lblWouldYouLikeDestroy=Would you like to destroy {0}?
|
||||||
|
|||||||
@@ -2965,6 +2965,8 @@ lblZoom=Zoom
|
|||||||
lblEffect=Efecto
|
lblEffect=Efecto
|
||||||
lblEmblem=Emblem
|
lblEmblem=Emblem
|
||||||
lblBoon=Boon
|
lblBoon=Boon
|
||||||
|
lblBackToAdventure=Volver a la aventura
|
||||||
|
lblDisableWinLose=Desactivar WinLose Overlay
|
||||||
lblExitToWoldMap=Salir al mapa del mundo?
|
lblExitToWoldMap=Salir al mapa del mundo?
|
||||||
lblStartArena=¿Quieres ir a la arena?
|
lblStartArena=¿Quieres ir a la arena?
|
||||||
lblWouldYouLikeDestroy=¿Le gustaría destruir {0}?
|
lblWouldYouLikeDestroy=¿Le gustaría destruir {0}?
|
||||||
|
|||||||
@@ -2968,6 +2968,8 @@ lblZoom=Zoom
|
|||||||
lblEffect=Effet
|
lblEffect=Effet
|
||||||
lblEmblem=Emblème
|
lblEmblem=Emblème
|
||||||
lblBoon=Aubaine
|
lblBoon=Aubaine
|
||||||
|
lblBackToAdventure=Retour à l'aventure
|
||||||
|
lblDisableWinLose=Désactiver la superposition Winlose
|
||||||
lblExitToWoldMap=Sortir sur la carte du monde?
|
lblExitToWoldMap=Sortir sur la carte du monde?
|
||||||
lblStartArena=Voulez-vous entrer dans l'arène?
|
lblStartArena=Voulez-vous entrer dans l'arène?
|
||||||
lblWouldYouLikeDestroy=Souhaitez-vous détruire {0}?
|
lblWouldYouLikeDestroy=Souhaitez-vous détruire {0}?
|
||||||
|
|||||||
@@ -2968,6 +2968,8 @@ lblZoom=Ingrandisci
|
|||||||
lblEffect=Effetto
|
lblEffect=Effetto
|
||||||
lblEmblem=Emblema
|
lblEmblem=Emblema
|
||||||
lblBoon=Boon
|
lblBoon=Boon
|
||||||
|
lblBackToAdventure=Torna all'avventura
|
||||||
|
lblDisableWinLose=Disabilita overlay winlose
|
||||||
lblExitToWoldMap=Esci alla mappa del mondo?
|
lblExitToWoldMap=Esci alla mappa del mondo?
|
||||||
lblStartArena=Vuoi andare nell'arena?
|
lblStartArena=Vuoi andare nell'arena?
|
||||||
lblWouldYouLikeDestroy=Vorresti distruggere {0}?
|
lblWouldYouLikeDestroy=Vorresti distruggere {0}?
|
||||||
|
|||||||
@@ -2964,6 +2964,8 @@ lblZoom=ズーム
|
|||||||
lblEffect=効果
|
lblEffect=効果
|
||||||
lblEmblem=エンブレム
|
lblEmblem=エンブレム
|
||||||
lblBoon=ブーン
|
lblBoon=ブーン
|
||||||
|
lblBackToAdventure=冒険に戻ります
|
||||||
|
lblDisableWinLose=Winloseオーバーレイを無効にします
|
||||||
lblExitToWoldMap=世界地図に終了しますか?
|
lblExitToWoldMap=世界地図に終了しますか?
|
||||||
lblStartArena=アリーナに行きたいですか?
|
lblStartArena=アリーナに行きたいですか?
|
||||||
lblWouldYouLikeDestroy={0}を破壊しますか?
|
lblWouldYouLikeDestroy={0}を破壊しますか?
|
||||||
|
|||||||
@@ -3054,6 +3054,8 @@ lblZoom=Ampliação
|
|||||||
lblEffect=Efeito
|
lblEffect=Efeito
|
||||||
lblEmblem=Emblem
|
lblEmblem=Emblem
|
||||||
lblBoon=Boon
|
lblBoon=Boon
|
||||||
|
lblBackToAdventure=De volta à aventura
|
||||||
|
lblDisableWinLose=Desative a sobreposição de Winlose
|
||||||
lblExitToWoldMap=Sair para o mapa do mundo?
|
lblExitToWoldMap=Sair para o mapa do mundo?
|
||||||
lblStartArena=Você quer entrar na arena?
|
lblStartArena=Você quer entrar na arena?
|
||||||
lblWouldYouLikeDestroy=Você gostaria de destruir {0}?
|
lblWouldYouLikeDestroy=Você gostaria de destruir {0}?
|
||||||
|
|||||||
@@ -2947,6 +2947,8 @@ lblZoom=飞涨
|
|||||||
lblEffect=影响
|
lblEffect=影响
|
||||||
lblEmblem=象征
|
lblEmblem=象征
|
||||||
lblBoon=恩赐
|
lblBoon=恩赐
|
||||||
|
lblBackToAdventure=回到冒险
|
||||||
|
lblDisableWinLose=禁用Winlose覆盖
|
||||||
lblExitToWoldMap=退出世界地图?
|
lblExitToWoldMap=退出世界地图?
|
||||||
lblStartArena=您想进入竞技场吗?
|
lblStartArena=您想进入竞技场吗?
|
||||||
lblWouldYouLikeDestroy=您想销毁{0}吗?
|
lblWouldYouLikeDestroy=您想销毁{0}吗?
|
||||||
|
|||||||
Reference in New Issue
Block a user