mirror of
				https://github.com/Klagarge/PokeHES.git
				synced 2025-10-31 03:39:16 +00:00 
			
		
		
		
	| @@ -14,10 +14,10 @@ public class Player extends Character{ | |||||||
|  |  | ||||||
|     private int xp; |     private int xp; | ||||||
| 	public Enemy lastEnemy = null; | 	public Enemy lastEnemy = null; | ||||||
| 	public boolean onEnemy = false; | 	public boolean frontOfEnemy = false; | ||||||
|  |  | ||||||
|     public Player(int x, int y, String map) { |     public Player(int x, int y, String map) { | ||||||
|         super("Player", x, y, "character", map); |         super("Player", x, y, "Character", map); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public void addXp(int xp){ |     public void addXp(int xp){ | ||||||
| @@ -32,7 +32,7 @@ public class Player extends Character{ | |||||||
| 			// Compute direction and next cell | 			// Compute direction and next cell | ||||||
| 			Vector<TiledMapTile> nextCell = new Vector<>(); | 			Vector<TiledMapTile> nextCell = new Vector<>(); | ||||||
| 			Player.Direction goalDirection = Player.Direction.NULL; | 			Player.Direction goalDirection = Player.Direction.NULL; | ||||||
| 			Vector2 nextPos = new Vector2(position); | 			Vector2 nextPos = position; | ||||||
|  |  | ||||||
| 			if (c.keyStatus.get(Input.Keys.RIGHT)) { | 			if (c.keyStatus.get(Input.Keys.RIGHT)) { | ||||||
| 				goalDirection = Player.Direction.RIGHT; | 				goalDirection = Player.Direction.RIGHT; | ||||||
| @@ -76,13 +76,12 @@ public class Player extends Character{ | |||||||
| 					nMap = ScreenMap.Door.nextMap; | 					nMap = ScreenMap.Door.nextMap; | ||||||
| 					x = ScreenMap.Door.nextX; | 					x = ScreenMap.Door.nextX; | ||||||
| 					y = ScreenMap.Door.nextY; | 					y = ScreenMap.Door.nextY; | ||||||
| 					goalDirection = ScreenMap.Door.direction; |  | ||||||
| 				} catch (Exception e) { } | 				} catch (Exception e) { } | ||||||
| 				ScreenMap.Door.reset(); | 				ScreenMap.Door.reset(); | ||||||
| 				if (nMap == null || x == null || y == null) return; | 				if (nMap == null || x == null || y == null) return; | ||||||
| 				map = nMap; | 				map = nMap; | ||||||
| 				setPosition(x*sm.tileWidth, y*sm.tileHeight); | 				setPosition(x*sm.tileWidth, y*sm.tileHeight); | ||||||
| 				System.out.println("Go to: " + map + " in " + x + " x " + y); | 				System.out.println("Go to: " + sm.map + " in " + x + " x " + y); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -98,7 +97,7 @@ public class Player extends Character{ | |||||||
| 			 | 			 | ||||||
| 			if(bMap && pX==eX && pY==eY) { | 			if(bMap && pX==eX && pY==eY) { | ||||||
| 				lastEnemy = enemy; | 				lastEnemy = enemy; | ||||||
| 				onEnemy = true; | 				frontOfEnemy = true; | ||||||
| 				return true; | 				return true; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -1,5 +1,7 @@ | |||||||
| package Game; | package Game; | ||||||
|  |  | ||||||
|  | import java.util.Arrays; | ||||||
|  |  | ||||||
| import Entity.Enemy; | import Entity.Enemy; | ||||||
| import Text.TextEnemy; | import Text.TextEnemy; | ||||||
|  |  | ||||||
| @@ -12,6 +14,8 @@ public class Battle { | |||||||
| 	 | 	 | ||||||
| 	public int answer; | 	public int answer; | ||||||
|  |  | ||||||
|  |     private int winPoint; | ||||||
|  |     | ||||||
|  |  | ||||||
|     public Battle(Enemy enemy){ |     public Battle(Enemy enemy){ | ||||||
|         this.enemy = enemy; |         this.enemy = enemy; | ||||||
| @@ -19,9 +23,8 @@ public class Battle { | |||||||
| 		textEnemy.generateText(); | 		textEnemy.generateText(); | ||||||
|  |  | ||||||
|         lineSpeech = 0; |         lineSpeech = 0; | ||||||
|         answer = 0; |         winPoint = 0; | ||||||
|  |  | ||||||
|         //initialize the first line |  | ||||||
|         System.out.println("lll : "+ getLine()); |         System.out.println("lll : "+ getLine()); | ||||||
|          |          | ||||||
|     } |     } | ||||||
| @@ -32,6 +35,37 @@ public class Battle { | |||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  |     //check the choice answer | ||||||
|  |     public void checkAnswer(int answer){ | ||||||
|  |         int attack = lineSpeech-1; | ||||||
|  |         //get number current attack random | ||||||
|  |         int currentAttack = textEnemy.getCurrentData().get(attack)[0]; | ||||||
|  |         System.out.println(Arrays.toString(textEnemy.getCurrentData().get(attack))); | ||||||
|  |  | ||||||
|  |         //get number current answer random | ||||||
|  |         int currentAnswer = textEnemy.getCurrentData().get(attack)[answer]; | ||||||
|  |         System.out.println("current answer  : " + currentAnswer); | ||||||
|  |  | ||||||
|  |         //get the answer of the player | ||||||
|  |         String answerPlayer = textEnemy.fightData.getAttack(currentAttack).getAnswer(currentAnswer); | ||||||
|  |         System.out.println("answer player  : " + answerPlayer); | ||||||
|  |  | ||||||
|  |         //get true answer | ||||||
|  |         String trueAsnwer = textEnemy.fightData.getAttack(currentAttack).getTrueAnswer(); | ||||||
|  |         System.out.println("true answer : " + trueAsnwer); | ||||||
|  |  | ||||||
|  |         //check the choice of the player | ||||||
|  |         if(answerPlayer == trueAsnwer){ | ||||||
|  |             System.out.println("it's true !!!!"); | ||||||
|  |         } | ||||||
|  |         else{ | ||||||
|  |             System.out.println("it's false !!!!"); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         readNextLine(); | ||||||
|  |  | ||||||
|  |     } | ||||||
|  |  | ||||||
|     public boolean getAttackOn(){ |     public boolean getAttackOn(){ | ||||||
|         return textEnemy.lines.get(lineSpeech).attackOn; |         return textEnemy.lines.get(lineSpeech).attackOn; | ||||||
|     } |     } | ||||||
| @@ -40,6 +74,7 @@ public class Battle { | |||||||
|         return textEnemy.lines.get(lineSpeech).line; |         return textEnemy.lines.get(lineSpeech).line; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |      | ||||||
|     public int getLineSpeech() { |     public int getLineSpeech() { | ||||||
|         return lineSpeech; |         return lineSpeech; | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -62,7 +62,7 @@ public class PokeMudry extends PortableApplication { | |||||||
|         if(onMapScreen) sp.p.manageEntity(sp.sm, controller); |         if(onMapScreen) sp.p.manageEntity(sp.sm, controller); | ||||||
|          |          | ||||||
|         // Switch screen |         // Switch screen | ||||||
|         if (sp.p.onEnemy && onMapScreen){ |         if (sp.p.frontOfEnemy && onMapScreen){ | ||||||
|             sp.e = sp.p.lastEnemy; |             sp.e = sp.p.lastEnemy; | ||||||
|             sp.sb = sp.screenManager.getScreenBattle(); |             sp.sb = sp.screenManager.getScreenBattle(); | ||||||
|             sp.b = new Battle(sp.e); |             sp.b = new Battle(sp.e); | ||||||
|   | |||||||
| @@ -98,7 +98,6 @@ public class ScreenBattle extends RenderingScreen{ | |||||||
| 		if(PokeMudry.front_montant){ | 		if(PokeMudry.front_montant){ | ||||||
|  	     	System.out.println("manage: " + battle.getLineSpeech()); |  	     	System.out.println("manage: " + battle.getLineSpeech()); | ||||||
|  |  | ||||||
|  |  | ||||||
| 			if( battle.getAttackOn() == false){ | 			if( battle.getAttackOn() == false){ | ||||||
| 				if (c.keyStatus.get(Input.Keys.SPACE)){ | 				if (c.keyStatus.get(Input.Keys.SPACE)){ | ||||||
| 					System.out.println("in"); | 					System.out.println("in"); | ||||||
| @@ -106,24 +105,22 @@ public class ScreenBattle extends RenderingScreen{ | |||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  |  | ||||||
| 			if(battle.getAttackOn() == true){ | 			if(battle.getAttackOn() == true){ | ||||||
| 				if (c.keyStatus.get(Input.Keys.NUM_1)){ | 				if (c.keyStatus.get(Input.Keys.NUM_1)){ | ||||||
| 					System.out.println("je sui dansakjshfljkahflkasjhfdlkajshflkajshfdlkasjdhfalsdkjfh123412341234"); | 					 | ||||||
| 					battle.readNextLine(); | 					battle.checkAnswer(1); | ||||||
| 					battle.answer = 1; |  | ||||||
| 				} | 				} | ||||||
| 				else if (c.keyStatus.get(Input.Keys.NUM_2)){ | 				else if (c.keyStatus.get(Input.Keys.NUM_2)){ | ||||||
| 					battle.readNextLine(); |  | ||||||
| 					battle.answer = 2; | 					battle.checkAnswer(2); | ||||||
| 				} | 				} | ||||||
| 				else if (c.keyStatus.get(Input.Keys.NUM_3)){ | 				else if (c.keyStatus.get(Input.Keys.NUM_3)){ | ||||||
| 					battle.readNextLine(); | 	 | ||||||
| 					battle.answer = 3; | 					battle.checkAnswer(3); | ||||||
| 				} | 				} | ||||||
| 				else if (c.keyStatus.get(Input.Keys.NUM_4)){ | 				else if (c.keyStatus.get(Input.Keys.NUM_4)){ | ||||||
| 					battle.readNextLine(); |  | ||||||
| 					battle.answer = 4; | 					battle.checkAnswer(4); | ||||||
| 					 | 					 | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| @@ -135,5 +132,6 @@ public class ScreenBattle extends RenderingScreen{ | |||||||
|  |  | ||||||
|  |  | ||||||
| 	 | 	 | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -59,24 +59,18 @@ public class ScreenMap extends RenderingScreen{ | |||||||
|          |          | ||||||
|         tiledLayer.clear(); |         tiledLayer.clear(); | ||||||
|          |          | ||||||
|         // Get actual map of the player |         try { map = player.getMap(); } catch (Exception e) {} | ||||||
|         try { map = player.getMap(); } catch (Exception e) { System.out.println("error for get map");} |  | ||||||
|  |  | ||||||
| 		// Get all layers on the current map | 		for (int i = 0; i < 50; i++) { | ||||||
|         for (int i = 0; i < 50; i++) { |  | ||||||
|             try { tiledLayer.add((TiledMapTileLayer) tMap.get(map).getLayers().get(i)); } catch (Exception e) { } |             try { tiledLayer.add((TiledMapTileLayer) tMap.get(map).getLayers().get(i)); } catch (Exception e) { } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Get heigh and width of tiles and the size of the tiles |  | ||||||
|         TiledMapTileLayer tl = tiledLayer.get(0); |         TiledMapTileLayer tl = tiledLayer.get(0); | ||||||
|         width = tl.getWidth(); |         width = tl.getWidth(); | ||||||
|         tileWidth = (int) tl.getTileWidth(); |         tileWidth = (int) tl.getTileWidth(); | ||||||
|         height = tl.getHeight(); |         height = tl.getHeight(); | ||||||
|         tileHeight = (int) tl.getTileHeight(); |         tileHeight = (int) tl.getTileHeight(); | ||||||
|          |          | ||||||
|         // System.out.println(width + " x " + height + " - " + tileWidth + " x " + tileHeight); |         //System.out.println(width + " x " + height + " - " + tileWidth + " x " + tileHeight); | ||||||
|  |  | ||||||
|         // Get all doors on the current map |  | ||||||
| 		try { | 		try { | ||||||
|             doors = tMap.get(map).getLayers().get("door").getObjects(); |             doors = tMap.get(map).getLayers().get("door").getObjects(); | ||||||
| 		} catch (Exception e) {	doors = null; } | 		} catch (Exception e) {	doors = null; } | ||||||
| @@ -84,7 +78,8 @@ public class ScreenMap extends RenderingScreen{ | |||||||
| 		 | 		 | ||||||
| 		// Render the tileMap | 		// Render the tileMap | ||||||
|         g.zoom(zoom); |         g.zoom(zoom); | ||||||
|         g.moveCamera((int)player.getPosition().x, (int)player.getPosition().y, width * tileWidth, height * tileHeight); |         try {g.moveCamera(player.getPosition().x, player.getPosition().y, width * tileWidth, height * tileHeight);} | ||||||
|  |         catch (Exception e) {System.out.println("Fail to move camera");} | ||||||
|  |  | ||||||
| 		tMapRenderer.get(map).setView(g.getCamera()); | 		tMapRenderer.get(map).setView(g.getCamera()); | ||||||
| 		tMapRenderer.get(map).render(); | 		tMapRenderer.get(map).render(); | ||||||
| @@ -111,11 +106,10 @@ public class ScreenMap extends RenderingScreen{ | |||||||
|  |  | ||||||
|     public boolean isWalkable(Vector<TiledMapTile> tile) { |     public boolean isWalkable(Vector<TiledMapTile> tile) { | ||||||
| 		if (tile == null) return false; | 		if (tile == null) return false; | ||||||
| 		if (tile.size() == 0) return false; |         boolean walkable = false; | ||||||
|         boolean walkable = true; |  | ||||||
|         for (TiledMapTile tiledMapTile : tile) { |         for (TiledMapTile tiledMapTile : tile) { | ||||||
|             Object test = tiledMapTile.getProperties().get("walkable"); |             Object test = tiledMapTile.getProperties().get("walkable"); | ||||||
|             walkable = Boolean.parseBoolean(test.toString()) ? walkable:false; |             walkable = Boolean.parseBoolean(test.toString()) ? true:walkable; | ||||||
|         } |         } | ||||||
|         return walkable; |         return walkable; | ||||||
| 	} | 	} | ||||||
| @@ -156,7 +150,6 @@ public class ScreenMap extends RenderingScreen{ | |||||||
| 				try { Door.nextMap = mapProperties.get("nextMap").toString(); } catch (Exception e) { } | 				try { Door.nextMap = mapProperties.get("nextMap").toString(); } catch (Exception e) { } | ||||||
| 				try { Door.nextX = Integer.parseInt(mapProperties.get("nextX").toString()); } catch (Exception e) { } | 				try { Door.nextX = Integer.parseInt(mapProperties.get("nextX").toString()); } catch (Exception e) { } | ||||||
| 				try { Door.nextY = Integer.parseInt(mapProperties.get("nextY").toString()); } catch (Exception e) { } | 				try { Door.nextY = Integer.parseInt(mapProperties.get("nextY").toString()); } catch (Exception e) { } | ||||||
| 				try { Door.direction = Player.Direction.valueOf(mapProperties.get("nextDirection").toString()); } catch (Exception e) { } |  | ||||||
| 			} | 			} | ||||||
|         } |         } | ||||||
|          |          | ||||||
| @@ -167,13 +160,11 @@ public class ScreenMap extends RenderingScreen{ | |||||||
| 		public static String nextMap; | 		public static String nextMap; | ||||||
| 		public static Integer nextX; | 		public static Integer nextX; | ||||||
| 		public static Integer nextY; | 		public static Integer nextY; | ||||||
|         public static Player.Direction direction; |  | ||||||
|  |  | ||||||
| 		public static void reset(){ | 		public static void reset(){ | ||||||
| 			nextMap = null; | 			nextMap = null; | ||||||
| 			nextX = null; | 			nextX = null; | ||||||
| 			nextY = null; | 			nextY = null; | ||||||
| 			direction = null; |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,11 +2,12 @@ package Text; | |||||||
|  |  | ||||||
| public class Attack { | public class Attack { | ||||||
|     String attack; |     String attack; | ||||||
|  |     int currentAttack; | ||||||
|     String answer1; |     String answer1; | ||||||
|     String answer2; |     String answer2; | ||||||
|     String answer3; |     String answer3; | ||||||
|     String answer4; |     String answer4; | ||||||
|     String[] s; |     public String[] s; | ||||||
|  |  | ||||||
|     float xp; |     float xp; | ||||||
|  |  | ||||||
| @@ -32,4 +33,9 @@ public class Attack { | |||||||
|     public String getAnswer(int i){ |     public String getAnswer(int i){ | ||||||
|         return s[i]; |         return s[i]; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public String getTrueAnswer(){ | ||||||
|  |         return answer1; | ||||||
|  |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -11,14 +11,15 @@ public class FightData { | |||||||
|     private  File file; |     private  File file; | ||||||
|     private static final String REGEX = ","; |     private static final String REGEX = ","; | ||||||
|  |  | ||||||
|  |      | ||||||
|  |  | ||||||
|     public int nbre_line =0; |     public int nbre_line =0; | ||||||
|  |  | ||||||
|     public FightData(String name) { |     public FightData(String name) { | ||||||
|         file = new File("./resources/Battle/Fight/" + name + ".csv"); |         file = new File("./resources/Battle/Fight/" + name + ".csv"); | ||||||
|  |          | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     public void readFile() { |     public void readFile() { | ||||||
|         Attack attack; |         Attack attack; | ||||||
|         String line = ""; |         String line = ""; | ||||||
| @@ -43,7 +44,8 @@ public class FightData { | |||||||
|         } catch (Exception e) { |         } catch (Exception e) { | ||||||
|             e.printStackTrace(); |             e.printStackTrace(); | ||||||
|         } |         } | ||||||
|         System.out.println(attacks.size()); |  | ||||||
|  |          | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     //return the vector with all attaks of one enemi |     //return the vector with all attaks of one enemi | ||||||
| @@ -56,6 +58,10 @@ public class FightData { | |||||||
|         return attacks.get(a); |         return attacks.get(a); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
|      |      | ||||||
|   | |||||||
| @@ -13,6 +13,8 @@ public class TextEnemy { | |||||||
|     private int[] orderAttack; |     private int[] orderAttack; | ||||||
|     private int[] orderAnswer; |     private int[] orderAnswer; | ||||||
|  |  | ||||||
|  |     private Vector<int[]> currentData; | ||||||
|  |  | ||||||
|     public static void main(String[] args) { |     public static void main(String[] args) { | ||||||
|          |          | ||||||
|         TextEnemy t  = new TextEnemy("enemi"); |         TextEnemy t  = new TextEnemy("enemi"); | ||||||
| @@ -35,6 +37,9 @@ public class TextEnemy { | |||||||
|         speechData = new SpeechData(name); |         speechData = new SpeechData(name); | ||||||
|         speechData.readFile(); |         speechData.readFile(); | ||||||
|  |  | ||||||
|  |         //save random data (attack and ansver) : attack, answer 1, answer 2 answer 3, answer 4 | ||||||
|  |         currentData = new Vector<int[]>(); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static int[] randomGenerate( int min, int max, int nbreRandom){ |     public static int[] randomGenerate( int min, int max, int nbreRandom){ | ||||||
| @@ -74,27 +79,48 @@ public class TextEnemy { | |||||||
|     public void generateText(){ |     public void generateText(){ | ||||||
|         int i =1; |         int i =1; | ||||||
|          |          | ||||||
|  |  | ||||||
|         //introduction line |         //introduction line | ||||||
|         lines.add(new Line(speechData.getSpeechs(0), false)); |         lines.add(new Line(speechData.getSpeechs(0), false)); | ||||||
|         orderAttack = randomGenerate(0, fightData.nbre_line-1, 4); |         orderAttack = randomGenerate(0, fightData.nbre_line-1, 4); | ||||||
|         for(int j=0; j<4;j++){ |         for(int j=0; j<4;j++){ | ||||||
|  |             int[] currentRandom = new int[5]; | ||||||
|  |             currentRandom[0] = orderAttack[j]; | ||||||
|  |  | ||||||
|             //generate the order of the answer |             //generate the order of the answer | ||||||
|             orderAnswer = randomGenerate(0, 3, 4); |             orderAnswer = randomGenerate(0, 3, 4); | ||||||
|             System.out.println("\n" + Arrays.toString(orderAnswer) + "\n"); |             System.out.println("\n attaque " + j + " : " + Arrays.toString(orderAnswer) + "\n"); | ||||||
|         //attack and answer (number on vector : 1-4)  |  | ||||||
|  |             //save the order of answer and attack | ||||||
|  |             for(int k=1;k<5;k++){ | ||||||
|  |                 currentRandom[k] = orderAnswer[k-1]; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             //attack and answer (number on vector : 1-4)  | ||||||
|             lines.add(new Line( |             lines.add(new Line( | ||||||
|                 speechData.getSpeechs(i++) + fightData.getAttack(orderAttack[j]).attack + " ?  ("+fightData.getAttack(orderAttack[j]).xp+ ") " + "\n" + |                 speechData.getSpeechs(i++) + fightData.getAttack(orderAttack[j]).attack + " ?  ("+fightData.getAttack(orderAttack[j]).xp+ ") " + "\n" + | ||||||
|                 fightData.getAttack(orderAttack[j]).getAnswer(orderAnswer[0]) + "\n" + |                 "1. " + fightData.getAttack(orderAttack[j]).getAnswer(orderAnswer[0]) + "\n" + | ||||||
|                 fightData.getAttack(orderAttack[j]).getAnswer(orderAnswer[1]) + "\n" +  |                 "2. " + fightData.getAttack(orderAttack[j]).getAnswer(orderAnswer[1]) + "\n" +  | ||||||
|                 fightData.getAttack(orderAttack[j]).getAnswer(orderAnswer[2]) + "\n" +  |                 "3. " + fightData.getAttack(orderAttack[j]).getAnswer(orderAnswer[2]) + "\n" +  | ||||||
|                 fightData.getAttack(orderAttack[j]).getAnswer(orderAnswer[3]), true)); |                 "4. " + fightData.getAttack(orderAttack[j]).getAnswer(orderAnswer[3]), true)); | ||||||
|  |  | ||||||
|  |              | ||||||
|  |             currentData.add(currentRandom); | ||||||
|         } |         } | ||||||
|  |          | ||||||
|  |         for(int[] a : currentData){ | ||||||
|  |             System.out.println(Arrays.toString(a)); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         //finish (win and death) |         //finish (win and death) | ||||||
|         lines.add(new Line(speechData.getSpeechs(5), false)); |         lines.add(new Line(speechData.getSpeechs(5), false)); | ||||||
|         lines.add(new Line(speechData.getSpeechs(6), false)); |         lines.add(new Line(speechData.getSpeechs(6), false)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public Vector<int[]> getCurrentData() { | ||||||
|  |         return currentData; | ||||||
|  |     } | ||||||
|  |  | ||||||
|      |      | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user