develop #1
@@ -0,0 +1,16 @@
|
||||
package org.project;
|
||||
|
||||
public class ConsoleColors {
|
||||
public static final String RESET = "\u001B[0m";
|
||||
public static final String BLACK = "\u001B[30m";
|
||||
public static final String RED = "\u001B[31m";
|
||||
public static final String GREEN = "\u001B[32m";
|
||||
public static final String YELLOW = "\u001B[33m";
|
||||
public static final String BLUE = "\u001B[34m";
|
||||
public static final String PURPLE = "\u001B[35m";
|
||||
public static final String CYAN = "\u001B[36m";
|
||||
public static final String WHITE = "\u001B[37m";
|
||||
|
||||
public static final String BOLD = "\u001B[1m";
|
||||
public static final String UNDERLINE = "\u001B[4m";
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.project;
|
||||
|
||||
import java.util.Scanner;
|
||||
import static org.project.ConsoleColors.*;
|
||||
|
||||
public class Help {
|
||||
private Scanner scanner;
|
||||
@@ -9,27 +10,26 @@ public class Help {
|
||||
}
|
||||
|
||||
public void showHelp() {
|
||||
|
||||
while(true) {
|
||||
System.out.println("\n"+"===== Help Menu =====");
|
||||
System.out.println("What do you need help with, sir?");
|
||||
System.out.println("1-What is Java-Knight?");
|
||||
System.out.println("2-How to play");
|
||||
System.out.println("0-Back");
|
||||
System.out.println("=======================");
|
||||
System.out.println("\n" + CYAN + BOLD + "===== Help Menu =====" + RESET);
|
||||
System.out.println("What do you need help with, sir?");
|
||||
System.out.println("1-What is Java-Knight?");
|
||||
System.out.println("2-How to play");
|
||||
System.out.println("0-Back");
|
||||
System.out.println(CYAN + "=======================" + RESET);
|
||||
int choice = getValidIntInput();
|
||||
switch (choice) {
|
||||
case 1: javaKnight(); break;
|
||||
case 2: howTo(); break;
|
||||
case 0: return;
|
||||
default:
|
||||
System.out.println("Invalid choice. Please choose a number between 0-2.");
|
||||
System.out.println(RED + "Invalid choice. Please choose a number between 0-2." + RESET);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void javaKnight() {
|
||||
System.out.println("""
|
||||
System.out.println(WHITE + """
|
||||
Prologue: The Legend of Javanest
|
||||
For centuries, the land of Javanest lived in peace, until a magical Dragon attacked,
|
||||
plunging the realm into absolute darkness. With a wicked curse,
|
||||
@@ -39,14 +39,13 @@ public class Help {
|
||||
Now, it is your duty to step up and save the land. You must battle these monsters,
|
||||
recover the unique key from each monster type, and finally slay the Dragon to
|
||||
break the curse and restore peace to Javanest!
|
||||
""");
|
||||
|
||||
System.out.println("\nPress ENTER to go back...");
|
||||
""" + RESET);
|
||||
System.out.println(GREEN + "\nPress ENTER to go back..." + RESET);
|
||||
scanner.nextLine();
|
||||
|
||||
}
|
||||
|
||||
private void howTo() {
|
||||
System.out.println("=== HOW TO PLAY ===");
|
||||
System.out.println(CYAN + "=== HOW TO PLAY ===" + RESET);
|
||||
System.out.println();
|
||||
System.out.println("Goal – Defeat enemies to collect three unique keys (Goblin, Skeleton, Vampire), then storm the castle and slay the Dragon.");
|
||||
System.out.println();
|
||||
@@ -72,18 +71,17 @@ public class Help {
|
||||
System.out.println("Game Over – If your HP reaches zero, the game ends.");
|
||||
System.out.println();
|
||||
System.out.println("> \"Collect the keys. Break the curse. Save Javanest.\"");
|
||||
|
||||
System.out.println("\nPress ENTER to go back...");
|
||||
System.out.println(GREEN + "\nPress ENTER to go back..." + RESET);
|
||||
scanner.nextLine();
|
||||
}
|
||||
|
||||
private int getValidIntInput() {
|
||||
while (!scanner.hasNextInt()) {
|
||||
System.out.print("Please enter a valid number: ");
|
||||
System.out.print(RED + "Please enter a valid number: " + RESET);
|
||||
scanner.next();
|
||||
}
|
||||
int input = scanner.nextInt();
|
||||
scanner.nextLine(); // Clear buffer
|
||||
return input;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,24 +4,23 @@ import org.project.entity.players.Assassin;
|
||||
import org.project.entity.players.Knight;
|
||||
import org.project.entity.players.Player;
|
||||
import org.project.entity.players.Wizard;
|
||||
import org.project.item.weapons.Sword;
|
||||
|
||||
import java.util.Scanner;
|
||||
import static org.project.ConsoleColors.*;
|
||||
|
||||
public class Menu {
|
||||
private Scanner scanner = new Scanner(System.in);
|
||||
private MenuActions actions = new MenuActions();
|
||||
private Help helpMenu = new Help();
|
||||
|
||||
public void start() {
|
||||
public void start() { //main menu, where everything starts from
|
||||
while (true) {
|
||||
System.out.println("\n"+"===== Java Knight =====");
|
||||
System.out.println("Main menu");
|
||||
System.out.println("\n" + CYAN + BOLD + "===== Java Knight =====" + RESET);
|
||||
System.out.println(YELLOW + "Main menu" + RESET);
|
||||
System.out.println("What would you like to do, sir?");
|
||||
System.out.println("1-Start a game");
|
||||
System.out.println("2-Show help and game tips.");
|
||||
System.out.println("0-Exit");
|
||||
System.out.println("=======================");
|
||||
System.out.println(CYAN + "=======================" + RESET);
|
||||
|
||||
int choice = getValidIntInput();
|
||||
switch(choice) {
|
||||
@@ -29,26 +28,27 @@ public class Menu {
|
||||
case 1: startMenu(); break;
|
||||
case 2: helpMenu.showHelp(); break;
|
||||
default:
|
||||
System.out.println("Invalid choice, please choose a number between 0-2");
|
||||
System.out.println(RED + "Invalid choice, please choose a number between 0-2" + RESET);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void startMenu() {
|
||||
private void startMenu() { //game start menu, player chooses its character then the game itself is called.
|
||||
Player player = chooseCharacter();
|
||||
if (player == null) {
|
||||
System.out.println("Returning to the main menu...");
|
||||
System.out.println(YELLOW + "Returning to the main menu..." + RESET);
|
||||
start();
|
||||
return;
|
||||
}
|
||||
actions.startGame(player);
|
||||
}
|
||||
|
||||
public Player chooseCharacter() {
|
||||
String name;
|
||||
Player character = null;
|
||||
System.out.println("Enter Your name: ");
|
||||
System.out.println(CYAN + "Enter Your name: " + RESET);
|
||||
name = scanner.nextLine();
|
||||
System.out.println("\n" + "Choose a character: ");
|
||||
System.out.println("\n" + YELLOW + "Choose a character: " + RESET);
|
||||
System.out.println("1-Knight");
|
||||
System.out.println("2-Wizard");
|
||||
System.out.println("3-Assassin");
|
||||
@@ -59,29 +59,28 @@ public class Menu {
|
||||
int choice = getValidIntInput();
|
||||
switch (choice) {
|
||||
case 1: character = new Knight(name);
|
||||
System.out.println("You are a knight!");
|
||||
System.out.println(GREEN + "You are a knight!" + RESET);
|
||||
keepAsking = false; break;
|
||||
case 2: character = new Wizard(name);
|
||||
System.out.println("You are a wizard!");
|
||||
System.out.println(GREEN + "You are a wizard!" + RESET);
|
||||
keepAsking = false; break;
|
||||
case 3: character = new Assassin(name);
|
||||
System.out.println("You are an assassin!");
|
||||
System.out.println(GREEN + "You are an assassin!" + RESET);
|
||||
keepAsking = false; break;
|
||||
case 0: keepAsking = false; break;
|
||||
default: System.out.println("Invalid choice, please choose a number between 0-3");
|
||||
default: System.out.println(RED + "Invalid choice, please choose a number between 0-3" + RESET);
|
||||
}
|
||||
}
|
||||
return character;
|
||||
|
||||
}
|
||||
|
||||
private int getValidIntInput() {
|
||||
private int getValidIntInput() { //a function to receive user's choices as console input
|
||||
while (!scanner.hasNextInt()) {
|
||||
System.out.print("Please enter a valid number: ");
|
||||
System.out.print(RED + "Please enter a valid number: " + RESET);
|
||||
scanner.next();
|
||||
}
|
||||
int input = scanner.nextInt();
|
||||
scanner.nextLine(); // Clear buffer
|
||||
return input;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,12 +4,12 @@ import org.project.entity.Entity;
|
||||
import org.project.entity.enemies.*;
|
||||
import org.project.entity.players.Player;
|
||||
import org.project.location.Location;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Random;
|
||||
import java.util.Scanner;
|
||||
import static org.project.ConsoleColors.*;
|
||||
|
||||
public class MenuActions {
|
||||
public class MenuActions { //this class contains main game logic.
|
||||
private ArrayList<Location> locations;
|
||||
Scanner scanner;
|
||||
|
||||
@@ -18,33 +18,35 @@ public class MenuActions {
|
||||
this.locations = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void startGame(Player player) {
|
||||
while (player.getKeysCollectedCount() < 3) {
|
||||
public void startGame(Player player) { // gameplay starts from here
|
||||
Skeleton.resetKeysRemaining();
|
||||
Goblin.resetKeysRemaining();
|
||||
Vampire.resetKeysRemaining();
|
||||
while (player.getKeysCollectedCount() < 3) { //player keeps fighting until all 3 keys are collected
|
||||
askInventory(player);
|
||||
Enemy enemy = chooseEnemy();
|
||||
Entity winner = fight(player, enemy);
|
||||
if (winner != player) {
|
||||
System.out.println("Game over!\nreturning to main menu...");
|
||||
System.out.println(RED + "Game over!\nreturning to main menu..." + RESET);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (player.getKeysCollectedCount() == 3) {
|
||||
bossFight(player);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void bossFight(Player player) {
|
||||
System.out.println("Congratulations! You have successfully collected all 3 keys\n" +
|
||||
"You may now fight the Dragon");
|
||||
System.out.println("Make sure to upgrade before entering the castle!");
|
||||
System.out.println(GREEN + "Congratulations! You have successfully collected all 3 keys\n" +
|
||||
"You may now fight the Dragon" + RESET);
|
||||
System.out.println(YELLOW + "Make sure to upgrade before entering the castle!" + RESET);
|
||||
askInventory(player);
|
||||
System.out.println("Entering the castle...");
|
||||
System.out.println(CYAN + "Entering the castle..." + RESET);
|
||||
Entity winner = fight(player, new Dragon());
|
||||
if (winner != player) {
|
||||
System.out.println("You were killed by the dragon. Game over!\nreturning to main menu...");
|
||||
System.out.println(RED + "You were killed by the dragon. Game over!\nreturning to main menu..." + RESET);
|
||||
} else {
|
||||
System.out.println("Congratulations! You killed the dragon and saved Javanest!");
|
||||
System.out.println(GREEN + BOLD + "Congratulations! You killed the dragon and saved Javanest!" + RESET);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,9 +55,9 @@ public class MenuActions {
|
||||
Location location = new Location();
|
||||
Enemy enemy = location.getEnemies().get(0);
|
||||
String enemyName = enemy.getType();
|
||||
System.out.println("====================================");
|
||||
System.out.println("You are in the " + location.getName() + ".\nYou may fight with a "
|
||||
+ enemyName);
|
||||
System.out.println(CYAN + "====================================" + RESET);
|
||||
System.out.println("You are in the " + YELLOW + location.getName() + RESET +
|
||||
".\nYou may fight with a " + enemyName);
|
||||
System.out.println("Which option do you choose?" +"\n1- Fight with the "
|
||||
+ enemyName + "\n2- Skip to Another Location");
|
||||
outerLoop:
|
||||
@@ -67,16 +69,12 @@ public class MenuActions {
|
||||
case 2:
|
||||
System.out.println("You chose not to fight...Skipping to next location...");break outerLoop;
|
||||
default:
|
||||
System.out.println("Invalid choice. Please choose a number (1 or 2).");
|
||||
System.out.println(RED + "Invalid choice. Please choose a number (1 or 2)." + RESET);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void addLocation(String name) {
|
||||
locations.add(new Location(name));
|
||||
}
|
||||
public Entity fight(Player player, Enemy enemy) {
|
||||
player.heal(player.getMaxHP());
|
||||
player.fillMana(player.getMaxMP());
|
||||
@@ -85,10 +83,10 @@ public class MenuActions {
|
||||
playerTurn(player, enemy);
|
||||
if (enemy.getHp() == 0) {
|
||||
winner = player;
|
||||
System.out.println(player.getName() + " won the fight!");
|
||||
System.out.println(GREEN + player.getName() + " won the fight!" + RESET);
|
||||
if (!(enemy instanceof Dragon)) {
|
||||
player.setXp(player.getXp()+5);
|
||||
System.out.println(player.getName() + " got 5 XP for winning the fight!");
|
||||
System.out.println(GREEN + player.getName() + " got 5 XP for winning the fight!" + RESET);
|
||||
}
|
||||
|
||||
if (enemy instanceof Skeleton) {
|
||||
@@ -96,7 +94,7 @@ public class MenuActions {
|
||||
if (hasKey) {
|
||||
player.collectKey((Skeleton) enemy);
|
||||
player.setXp(player.getXp()+20);
|
||||
System.out.println(player.getName() + " got a Skeleton key and 20 XP!");
|
||||
System.out.println(GREEN + player.getName() + " got a Skeleton key and 20 XP!" + RESET);
|
||||
}
|
||||
}
|
||||
if (enemy instanceof Goblin) {
|
||||
@@ -104,7 +102,7 @@ public class MenuActions {
|
||||
if (hasKey) {
|
||||
player.collectKey((Goblin) enemy);
|
||||
player.setXp(player.getXp()+10);
|
||||
System.out.println(player.getName() + " got a Goblin key and 10 XP!");
|
||||
System.out.println(GREEN + player.getName() + " got a Goblin key and 10 XP!" + RESET);
|
||||
}
|
||||
}
|
||||
if (enemy instanceof Vampire) {
|
||||
@@ -112,32 +110,26 @@ public class MenuActions {
|
||||
if (hasKey) {
|
||||
player.collectKey((Vampire) enemy);
|
||||
player.setXp(player.getXp()+30);
|
||||
System.out.println(player.getName() + " got a Vampire key and 30 XP!");
|
||||
System.out.println(GREEN + player.getName() + " got a Vampire key and 30 XP!" + RESET);
|
||||
}
|
||||
}
|
||||
System.out.println("Keys collected: " + player.getStringKeysCollected());
|
||||
|
||||
return winner;
|
||||
}
|
||||
enemyTurn(player, enemy);
|
||||
if (player.getHp() == 0) {
|
||||
winner = enemy;
|
||||
System.out.println(winner.getType() + " won the fight!");
|
||||
System.out.println(RED + winner.getType() + " won the fight!" + RESET);
|
||||
return winner;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void enemyTurn(Player player, Enemy enemy) {
|
||||
System.out.println("====================================");
|
||||
System.out.println("Enemy turn. Let's see what it does!");
|
||||
System.out.println(CYAN + "====================================" + RESET);
|
||||
System.out.println(YELLOW + "Enemy turn. Let's see what it does!" + RESET);
|
||||
System.out.println("Your hp: " + player.getHp() + "/" + player.getMaxHP());
|
||||
System.out.println("Enemy hp: " + enemy.getHp() + "/" + enemy.getMaxHP());
|
||||
// System.out.println("1-Light attack, mana cost: 0");
|
||||
// System.out.println("2-Heavy attack, mana cost: ");
|
||||
// System.out.println("3-Special Ability, mana cost: ");
|
||||
// System.out.println("4-Defend, mana cost: 10"); disabled
|
||||
// System.out.println("5-Heal, mana cost: 20"); disabled
|
||||
while (true) {
|
||||
Random random = new Random();
|
||||
int choice = random.nextInt(3) + 1;
|
||||
@@ -152,21 +144,15 @@ public class MenuActions {
|
||||
enemy.getWeapon().useSpecialAbility(enemy, player);
|
||||
System.out.println(enemy.getType() + " used special ability!"); return;
|
||||
} break;
|
||||
// case 4: if (enemy.getMp() >= enemy.getDefendManaCost()) {
|
||||
// enemy.defend(); return;
|
||||
// } break;
|
||||
// case 5: if (enemy.getMp() >= enemy.getHealManaCost()) {
|
||||
// enemy.heal(20); return;
|
||||
// } break;
|
||||
default:
|
||||
System.out.println("Invalid choice");
|
||||
System.out.println(RED + "Invalid choice" + RESET);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void playerTurn(Player player, Enemy enemy) {
|
||||
System.out.println("====================================");
|
||||
System.out.println("Player turn. What do you want to do?");
|
||||
System.out.println(CYAN + "====================================" + RESET);
|
||||
System.out.println(YELLOW + "Player turn. What do you want to do?" + RESET);
|
||||
System.out.println("Your hp: " + player.getHp() + "/" + player.getMaxHP() +
|
||||
"\t Your mana: " + player.getMp() + "/" + player.getMaxMP());
|
||||
System.out.println("Enemy hp: " + enemy.getHp() + "/" + enemy.getMaxHP());
|
||||
@@ -184,34 +170,33 @@ public class MenuActions {
|
||||
player.getWeapon().heavyAttack(player, enemy);
|
||||
System.out.println("You chose heavy attack.");return;
|
||||
} else {
|
||||
System.out.println("Not enough mana. Choose Again: "); break;
|
||||
System.out.println(RED + "Not enough mana. Choose Again: " + RESET); break;
|
||||
}
|
||||
case 3: if (player.getMp() >= player.getWeapon().getSpecialMana()){
|
||||
player.getWeapon().useSpecialAbility(player, enemy);
|
||||
System.out.println("You chose special ability.");return;
|
||||
} else {
|
||||
System.out.println("Not enough mana. Choose Again: "); break;
|
||||
System.out.println(RED + "Not enough mana. Choose Again: " + RESET); break;
|
||||
}
|
||||
case 4: if (player.getMp() >= player.getDefendManaCost()) {
|
||||
player.defend();
|
||||
System.out.println("You chose to defend."); return;
|
||||
} else {
|
||||
System.out.println("Not enough mana. Choose Again: "); break;
|
||||
System.out.println(RED + "Not enough mana. Choose Again: " + RESET); break;
|
||||
}
|
||||
case 5: if (player.getMp() >= player.getHealManaCost()) {
|
||||
player.heal(20); return;
|
||||
} else {
|
||||
System.out.println("Not enough mana. Choose Again:");
|
||||
System.out.println(RED + "Not enough mana. Choose Again:" + RESET);
|
||||
System.out.println("You chose to heal yourself.");break;
|
||||
}
|
||||
default:
|
||||
System.out.println("Invalid choice");
|
||||
System.out.println(RED + "Invalid choice" + RESET);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void askInventory(Player player) {
|
||||
|
||||
whileLoop:
|
||||
while (true) {
|
||||
System.out.println("Choose an option: ");
|
||||
@@ -222,16 +207,15 @@ public class MenuActions {
|
||||
case 1: shop(player); break;
|
||||
case 2: return;
|
||||
default:
|
||||
System.out.println("Invalid choice, please choose a number (1 or 2)."); break;
|
||||
System.out.println(RED + "Invalid choice, please choose a number (1 or 2)." + RESET); break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void shop(Player player) {
|
||||
while (true) {
|
||||
System.out.println("=====Shop=====");
|
||||
System.out.println("You have " + player.getXp() + " XP");
|
||||
System.out.println(CYAN + "=====Shop=====" + RESET); // exactly original string
|
||||
System.out.println("You have " + YELLOW + player.getXp() + " XP" + RESET);
|
||||
System.out.println("Each experience point can be converted into either 1 mana or 1 hp");
|
||||
System.out.println("Which option do you choose?");
|
||||
System.out.println("1- Buy hp");
|
||||
@@ -247,11 +231,11 @@ public class MenuActions {
|
||||
int amount = getValidIntInput();
|
||||
if (amount <= player.getXp()) {
|
||||
player.buyHp(amount);
|
||||
System.out.println("Successfully bought " + amount + " hp.");
|
||||
System.out.println(GREEN + "Successfully bought " + amount + " hp." + RESET);
|
||||
System.out.println("Current hp and mana: " + "\thp: " + player.getMaxHP() +"\tmana: " + player.getMaxMP());
|
||||
break switchLoop;
|
||||
} else if (amount > player.getXp()) {
|
||||
System.out.println("Not enough XP");
|
||||
System.out.println(RED + "Not enough XP" + RESET);
|
||||
}
|
||||
}
|
||||
case 2:
|
||||
@@ -260,29 +244,28 @@ public class MenuActions {
|
||||
int amount = getValidIntInput();
|
||||
if (amount <= player.getXp()) {
|
||||
player.buyMp(amount);
|
||||
System.out.println("Successfully bought " + amount + " mana.");
|
||||
System.out.println(GREEN + "Successfully bought " + amount + " mana." + RESET);
|
||||
System.out.println("Current maximum hp and mana: " + "\thp: " + player.getMaxHP() +"\tmana: " + player.getMaxMP());
|
||||
break switchLoop;
|
||||
} else if (amount > player.getXp()) {
|
||||
System.out.println("Not enough XP");
|
||||
System.out.println(RED + "Not enough XP" + RESET);
|
||||
}
|
||||
}
|
||||
case 0: return;
|
||||
default:
|
||||
System.out.println("Invalid choice. Please choose a number from 0-2.");
|
||||
System.out.println(RED + "Invalid choice. Please choose a number from 0-2." + RESET);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private int getValidIntInput() {
|
||||
while (!scanner.hasNextInt()) {
|
||||
System.out.print("Please enter a valid number: ");
|
||||
System.out.print(RED + "Please enter a valid number: " + RESET);
|
||||
scanner.next();
|
||||
}
|
||||
int input = scanner.nextInt();
|
||||
scanner.nextLine(); // Clear buffer
|
||||
return input;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -56,4 +56,8 @@ public class Goblin extends Enemy implements Key{
|
||||
public String getKeyType() {
|
||||
return "Goblin";
|
||||
}
|
||||
|
||||
public static void resetKeysRemaining() {
|
||||
keysRemaining = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,4 +5,5 @@ public interface Key {
|
||||
void decreaseKey();
|
||||
int getKeysRemaining();
|
||||
String getKeyType();
|
||||
|
||||
}
|
||||
|
||||
@@ -56,5 +56,10 @@ public class Skeleton extends Enemy implements Key {
|
||||
public String getKeyType() {
|
||||
return "Skeleton";
|
||||
}
|
||||
|
||||
public static void resetKeysRemaining() {
|
||||
keysRemaining = 1;
|
||||
}
|
||||
|
||||
// TODO: DESIGN ENEMY AND IMPLEMENT THE CONSTRUCTOR
|
||||
}
|
||||
|
||||
@@ -56,4 +56,8 @@ public class Vampire extends Enemy implements Key{
|
||||
public String getKeyType() {
|
||||
return "Vampire";
|
||||
}
|
||||
|
||||
public static void resetKeysRemaining() {
|
||||
keysRemaining = 1;
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user