Komplettumbau und Splashscreen sollte jetzt funktionieren (Muss noch getestet werden)
This commit is contained in:
@@ -24,7 +24,7 @@ namespace WorldOfPeacecraft
|
|||||||
Dragons = new Dictionary<int, Dragon> ();
|
Dragons = new Dictionary<int, Dragon> ();
|
||||||
Players = new Dictionary<int, Player> ();
|
Players = new Dictionary<int, Player> ();
|
||||||
ChatMessages = new LinkedList<Message> ();
|
ChatMessages = new LinkedList<Message> ();
|
||||||
Client = new TcpClient ("localhost", 9999);
|
Client = new TcpClient ();
|
||||||
Buffer receiverBuffer = new Buffer(10000);
|
Buffer receiverBuffer = new Buffer(10000);
|
||||||
SenderBuffer = new Buffer(100);
|
SenderBuffer = new Buffer(100);
|
||||||
Parse = new Parser (this, receiverBuffer);
|
Parse = new Parser (this, receiverBuffer);
|
||||||
@@ -182,6 +182,10 @@ namespace WorldOfPeacecraft
|
|||||||
Send.Stop ();
|
Send.Stop ();
|
||||||
Client.Close ();
|
Client.Close ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Connect(){
|
||||||
|
Client.Connect ("localhost", 9999);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,12 +10,11 @@ namespace WorldOfPeacecraft
|
|||||||
private Font MessageFont;
|
private Font MessageFont;
|
||||||
private Font SenderFont;
|
private Font SenderFont;
|
||||||
private Font IregularSenderFont;
|
private Font IregularSenderFont;
|
||||||
|
private Music m = new Music();
|
||||||
|
|
||||||
public ChatOutputBox (IBackend backend)
|
public ChatOutputBox (IBackend backend)
|
||||||
{
|
{
|
||||||
Backend = backend;
|
Backend = backend;
|
||||||
this.ReadOnly = true;
|
|
||||||
this.Multiline = true;
|
|
||||||
MessageFont = this.SelectionFont;
|
MessageFont = this.SelectionFont;
|
||||||
SenderFont = new Font (MessageFont, FontStyle.Bold);
|
SenderFont = new Font (MessageFont, FontStyle.Bold);
|
||||||
IregularSenderFont = new Font (MessageFont, FontStyle.Bold | FontStyle.Italic);
|
IregularSenderFont = new Font (MessageFont, FontStyle.Bold | FontStyle.Italic);
|
||||||
@@ -43,10 +42,18 @@ namespace WorldOfPeacecraft
|
|||||||
this.AppendText (": ");
|
this.AppendText (": ");
|
||||||
this.SelectionFont = MessageFont;
|
this.SelectionFont = MessageFont;
|
||||||
this.AppendText (message.GetMessage ());
|
this.AppendText (message.GetMessage ());
|
||||||
|
if (message.GetMessage().Contains("nyancat")) {
|
||||||
|
m.Playmusic ("poptart");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.ResumeLayout ();
|
this.ResumeLayout ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void InitializeComponents(){
|
||||||
|
this.ReadOnly = true;
|
||||||
|
this.Multiline = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,9 +15,6 @@ namespace WorldOfPeacecraft
|
|||||||
ChatInput = new ChatInputBox ();
|
ChatInput = new ChatInputBox ();
|
||||||
ChatInput.ChatMessageSubmitted += OnChatMessageSent;
|
ChatInput.ChatMessageSubmitted += OnChatMessageSent;
|
||||||
ChatOutput = new ChatOutputBox (backend);
|
ChatOutput = new ChatOutputBox (backend);
|
||||||
|
|
||||||
this.Controls.Add (ChatInput);
|
|
||||||
this.Controls.Add (ChatOutput);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnLayout (LayoutEventArgs levent)
|
protected override void OnLayout (LayoutEventArgs levent)
|
||||||
@@ -36,8 +33,9 @@ namespace WorldOfPeacecraft
|
|||||||
{
|
{
|
||||||
if (message.StartsWith ("/")) {
|
if (message.StartsWith ("/")) {
|
||||||
string command = message.Substring (1);
|
string command = message.Substring (1);
|
||||||
Backend.SendCommand(command);
|
Backend.SendCommand (command);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
Backend.SendChatMessage(message);
|
Backend.SendChatMessage(message);
|
||||||
}
|
}
|
||||||
// TODO Move focus to board?
|
// TODO Move focus to board?
|
||||||
@@ -47,5 +45,11 @@ namespace WorldOfPeacecraft
|
|||||||
{
|
{
|
||||||
ChatOutput.UpdateData ();
|
ChatOutput.UpdateData ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void InitializeComponents(){
|
||||||
|
ChatOutput.InitializeComponents ();
|
||||||
|
this.Controls.Add (ChatInput);
|
||||||
|
this.Controls.Add (ChatOutput);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using System.Runtime.InteropServices;
|
|||||||
|
|
||||||
namespace WorldOfPeacecraft
|
namespace WorldOfPeacecraft
|
||||||
{
|
{
|
||||||
class Gui : Form, IGui
|
public class Gui : Form, IGui
|
||||||
{
|
{
|
||||||
private const int ChatWidth = 300;
|
private const int ChatWidth = 300;
|
||||||
private const int OnlinePlayerWidth = 150;
|
private const int OnlinePlayerWidth = 150;
|
||||||
@@ -20,7 +20,7 @@ namespace WorldOfPeacecraft
|
|||||||
|
|
||||||
public Gui ()
|
public Gui ()
|
||||||
{
|
{
|
||||||
//AllocConsole();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetBackend (IBackend backend)
|
public void SetBackend (IBackend backend)
|
||||||
@@ -42,9 +42,9 @@ namespace WorldOfPeacecraft
|
|||||||
|
|
||||||
public void InitializeComponents ()
|
public void InitializeComponents ()
|
||||||
{
|
{
|
||||||
ChatPanel = new ChatPanel (Backend);
|
MapPanel.InitializeComponents ();
|
||||||
MapPanel = new MapPanel (Backend);
|
ChatPanel.InitializeComponents ();
|
||||||
OnlinePlayerList = new OnlinePlayerList (Backend);
|
OnlinePlayerList.InitializeComponents ();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
this.Size = new Size(OnlinePlayerWidth + 400 + ChatWidth, 400);
|
this.Size = new Size(OnlinePlayerWidth + 400 + ChatWidth, 400);
|
||||||
OnlinePlayerList.Location = new Point(0,0);
|
OnlinePlayerList.Location = new Point(0,0);
|
||||||
@@ -91,6 +91,14 @@ namespace WorldOfPeacecraft
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void LoadResources(){
|
||||||
|
ChatPanel = new ChatPanel (Backend);
|
||||||
|
MapPanel = new MapPanel (Backend);
|
||||||
|
OnlinePlayerList = new OnlinePlayerList (Backend);
|
||||||
|
MapPanel.LoadResources ();
|
||||||
|
OnlinePlayerList.LoadResources ();
|
||||||
|
}
|
||||||
|
|
||||||
[DllImport("kernel32.dll", SetLastError = true)]
|
[DllImport("kernel32.dll", SetLastError = true)]
|
||||||
[return: MarshalAs(UnmanagedType.Bool)]
|
[return: MarshalAs(UnmanagedType.Bool)]
|
||||||
static extern bool AllocConsole();
|
static extern bool AllocConsole();
|
||||||
|
|||||||
@@ -25,5 +25,7 @@ namespace WorldOfPeacecraft
|
|||||||
void StartThreads();
|
void StartThreads();
|
||||||
|
|
||||||
void Stop();
|
void Stop();
|
||||||
|
|
||||||
|
void Connect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,43 +50,7 @@ namespace WorldOfPeacecraft
|
|||||||
|
|
||||||
public MapPanel (IBackend backend)
|
public MapPanel (IBackend backend)
|
||||||
{
|
{
|
||||||
SetStyle (ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
|
|
||||||
Backend = backend;
|
Backend = backend;
|
||||||
this.PreviewKeyDown += board_KeyPress;
|
|
||||||
Dragon1 = Image.FromFile (ImagesFolder + "dragon1.png");
|
|
||||||
Dragon2 = Image.FromFile (ImagesFolder + "dragon2.png");
|
|
||||||
Dragon3 = Image.FromFile (ImagesFolder + "dragon3.png");
|
|
||||||
Forest = Image.FromFile (ImagesFolder + "forest.png");
|
|
||||||
ForestStag = Image.FromFile (ImagesFolder + "stag.png");
|
|
||||||
ForestLeft = Image.FromFile (ImagesFolder + "forest_left.png");
|
|
||||||
ForestRight = Image.FromFile (ImagesFolder + "forest_right.png");
|
|
||||||
ForestTop = Image.FromFile (ImagesFolder + "forest_top.png");
|
|
||||||
ForestBottom = Image.FromFile (ImagesFolder + "forest_bottom.png");
|
|
||||||
Knight = Image.FromFile (ImagesFolder + "knight.png");
|
|
||||||
Walkable = Image.FromFile (ImagesFolder + "walkable.jpg");
|
|
||||||
Water = Image.FromFile (ImagesFolder + "water.jpg");
|
|
||||||
Flowers = Image.FromFile(ImagesFolder + "flowers.png");
|
|
||||||
BeachBottom = Image.FromFile (ImagesFolder + "beach.png");
|
|
||||||
BeachLeft = RotateFlipImage (BeachBottom, RotateFlipType.Rotate90FlipNone);
|
|
||||||
BeachTop = RotateFlipImage (BeachBottom, RotateFlipType.Rotate180FlipNone);
|
|
||||||
BeachRight = RotateFlipImage (BeachBottom, RotateFlipType.Rotate270FlipNone);
|
|
||||||
BeachBottomRight = Image.FromFile (ImagesFolder + "beachcorner.png");
|
|
||||||
BeachBottomLeft = RotateFlipImage (BeachBottomRight, RotateFlipType.Rotate90FlipNone);
|
|
||||||
BeachTopLeft = RotateFlipImage (BeachBottomRight, RotateFlipType.Rotate180FlipNone);
|
|
||||||
BeachTopRight = RotateFlipImage (BeachBottomRight, RotateFlipType.Rotate270FlipNone);
|
|
||||||
WallBase = Image.FromFile(ImagesFolder + "wall_base.png");
|
|
||||||
WallEdgeBotLeft = Image.FromFile (ImagesFolder + "wall_edge_botleft.png");
|
|
||||||
WallEdgeBotRight = Image.FromFile (ImagesFolder + "wall_edge_botright.png");
|
|
||||||
WallEdgeTopLeft = Image.FromFile (ImagesFolder + "wall_edge_topleft.png");
|
|
||||||
WallEdgeTopRight = Image.FromFile (ImagesFolder + "wall_edge_topright.png");
|
|
||||||
WallCornerBotLeft = Image.FromFile (ImagesFolder + "wall_corner_botleft.png");
|
|
||||||
WallCornerBotRight = Image.FromFile (ImagesFolder + "wall_corner_botright.png");
|
|
||||||
WallCornerTopLeft = Image.FromFile (ImagesFolder + "wall_corner_topleft.png");
|
|
||||||
WallCornerTopRight = Image.FromFile (ImagesFolder + "wall_corner_topright.png");
|
|
||||||
WallInnerBotLeft = Image.FromFile (ImagesFolder + "wall_inner_botleft.png");
|
|
||||||
WallInnerBotRight = Image.FromFile (ImagesFolder + "wall_inner_botright.png");
|
|
||||||
WallInnerTopLeft = Image.FromFile (ImagesFolder + "wall_inner_topleft.png");
|
|
||||||
WallInnerTopRight = Image.FromFile (ImagesFolder + "wall_inner_topright.png");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Image RotateFlipImage(Image image, RotateFlipType type)
|
private Image RotateFlipImage(Image image, RotateFlipType type)
|
||||||
@@ -377,10 +341,47 @@ namespace WorldOfPeacecraft
|
|||||||
int y = posy + (TileSize - image.Height) / 2;
|
int y = posy + (TileSize - image.Height) / 2;
|
||||||
g.DrawImage(image, x, y, image.Width, image.Height);
|
g.DrawImage(image, x, y, image.Width, image.Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void LoadResources (){
|
||||||
|
Dragon1 = Image.FromFile (ImagesFolder + "dragon1.png");
|
||||||
|
Dragon2 = Image.FromFile (ImagesFolder + "dragon2.png");
|
||||||
|
Dragon3 = Image.FromFile (ImagesFolder + "dragon3.png");
|
||||||
|
Forest = Image.FromFile (ImagesFolder + "forest.png");
|
||||||
|
ForestStag = Image.FromFile (ImagesFolder + "stag.png");
|
||||||
|
ForestLeft = Image.FromFile (ImagesFolder + "forest_left.png");
|
||||||
|
ForestRight = Image.FromFile (ImagesFolder + "forest_right.png");
|
||||||
|
ForestTop = Image.FromFile (ImagesFolder + "forest_top.png");
|
||||||
|
ForestBottom = Image.FromFile (ImagesFolder + "forest_bottom.png");
|
||||||
|
Knight = Image.FromFile (ImagesFolder + "knight.png");
|
||||||
|
Walkable = Image.FromFile (ImagesFolder + "walkable.jpg");
|
||||||
|
Water = Image.FromFile (ImagesFolder + "water.jpg");
|
||||||
|
Flowers = Image.FromFile(ImagesFolder + "flowers.png");
|
||||||
|
BeachBottom = Image.FromFile (ImagesFolder + "beach.png");
|
||||||
|
BeachLeft = RotateFlipImage (BeachBottom, RotateFlipType.Rotate90FlipNone);
|
||||||
|
BeachTop = RotateFlipImage (BeachBottom, RotateFlipType.Rotate180FlipNone);
|
||||||
|
BeachRight = RotateFlipImage (BeachBottom, RotateFlipType.Rotate270FlipNone);
|
||||||
|
BeachBottomRight = Image.FromFile (ImagesFolder + "beachcorner.png");
|
||||||
|
BeachBottomLeft = RotateFlipImage (BeachBottomRight, RotateFlipType.Rotate90FlipNone);
|
||||||
|
BeachTopLeft = RotateFlipImage (BeachBottomRight, RotateFlipType.Rotate180FlipNone);
|
||||||
|
BeachTopRight = RotateFlipImage (BeachBottomRight, RotateFlipType.Rotate270FlipNone);
|
||||||
|
WallBase = Image.FromFile(ImagesFolder + "wall_base.png");
|
||||||
|
WallEdgeBotLeft = Image.FromFile (ImagesFolder + "wall_edge_botleft.png");
|
||||||
|
WallEdgeBotRight = Image.FromFile (ImagesFolder + "wall_edge_botright.png");
|
||||||
|
WallEdgeTopLeft = Image.FromFile (ImagesFolder + "wall_edge_topleft.png");
|
||||||
|
WallEdgeTopRight = Image.FromFile (ImagesFolder + "wall_edge_topright.png");
|
||||||
|
WallCornerBotLeft = Image.FromFile (ImagesFolder + "wall_corner_botleft.png");
|
||||||
|
WallCornerBotRight = Image.FromFile (ImagesFolder + "wall_corner_botright.png");
|
||||||
|
WallCornerTopLeft = Image.FromFile (ImagesFolder + "wall_corner_topleft.png");
|
||||||
|
WallCornerTopRight = Image.FromFile (ImagesFolder + "wall_corner_topright.png");
|
||||||
|
WallInnerBotLeft = Image.FromFile (ImagesFolder + "wall_inner_botleft.png");
|
||||||
|
WallInnerBotRight = Image.FromFile (ImagesFolder + "wall_inner_botright.png");
|
||||||
|
WallInnerTopLeft = Image.FromFile (ImagesFolder + "wall_inner_topleft.png");
|
||||||
|
WallInnerTopRight = Image.FromFile (ImagesFolder + "wall_inner_topright.png");
|
||||||
|
}
|
||||||
|
|
||||||
public void PaintEntity (Graphics g, IPositionable entity, Color color)
|
public void InitializeComponents(){
|
||||||
{
|
SetStyle (ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
|
||||||
|
this.PreviewKeyDown += board_KeyPress;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,9 +12,6 @@ namespace WorldOfPeacecraft
|
|||||||
public OnlinePlayerList(IBackend backend)
|
public OnlinePlayerList(IBackend backend)
|
||||||
{
|
{
|
||||||
this.Backend = backend;
|
this.Backend = backend;
|
||||||
SetStyle (ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
|
|
||||||
Font = new Font(Font, FontStyle.Bold);
|
|
||||||
PlayerOnlineImage = Image.FromFile("textures/playerOnline.png");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnPaint (PaintEventArgs e)
|
protected override void OnPaint (PaintEventArgs e)
|
||||||
@@ -32,5 +29,14 @@ namespace WorldOfPeacecraft
|
|||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void LoadResources(){
|
||||||
|
Font = new Font(Font, FontStyle.Bold);
|
||||||
|
PlayerOnlineImage = Image.FromFile("textures/playerOnline.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void InitializeComponents(){
|
||||||
|
SetStyle (ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -9,11 +9,16 @@ namespace WorldOfPeacecraft
|
|||||||
{
|
{
|
||||||
Application.EnableVisualStyles();
|
Application.EnableVisualStyles();
|
||||||
Application.SetCompatibleTextRenderingDefault(false);
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
|
||||||
Gui gui = new Gui();
|
Gui gui = new Gui();
|
||||||
Backend backend = new Backend(gui);
|
Backend backend = new Backend(gui);
|
||||||
gui.SetBackend(backend);
|
gui.SetBackend(backend);
|
||||||
Application.Run (gui);
|
SplashScreen splash = new SplashScreen (gui,backend);
|
||||||
|
splash.GuiHasLoaded += OnGuiLoaded;
|
||||||
|
Application.Run (splash);
|
||||||
|
}
|
||||||
|
private static void OnGuiLoaded(SplashScreen screen, Gui gui){
|
||||||
|
screen.Hide ();
|
||||||
|
gui.Show ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Threading;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Drawing2D;
|
using System.Drawing.Drawing2D;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
@@ -10,9 +11,19 @@ namespace WorldOfPeacecraft
|
|||||||
private string ImagesFolder = "textures/";
|
private string ImagesFolder = "textures/";
|
||||||
private Image Logo;
|
private Image Logo;
|
||||||
private Music m = new Music();
|
private Music m = new Music();
|
||||||
|
private Gui gui;
|
||||||
|
private IBackend backend;
|
||||||
|
|
||||||
public SplashScreen ()
|
public delegate void GuiHasLoadedEventHandler (SplashScreen screen, Gui gui);
|
||||||
|
public event GuiHasLoadedEventHandler GuiHasLoaded;
|
||||||
|
|
||||||
|
public SplashScreen (Gui gui, IBackend backend)
|
||||||
{
|
{
|
||||||
|
this.gui = gui;
|
||||||
|
this.backend = backend;
|
||||||
|
Thread t = new Thread (ThreadEntry);
|
||||||
|
t.Start ();
|
||||||
|
this.SetClientSizeCore (450, 150);
|
||||||
Logo = Image.FromFile (ImagesFolder + "splashscreen.png");
|
Logo = Image.FromFile (ImagesFolder + "splashscreen.png");
|
||||||
m.Playmusic ("splashscreen");
|
m.Playmusic ("splashscreen");
|
||||||
}
|
}
|
||||||
@@ -23,6 +34,14 @@ namespace WorldOfPeacecraft
|
|||||||
g.InterpolationMode = InterpolationMode.Low;
|
g.InterpolationMode = InterpolationMode.Low;
|
||||||
g.DrawImage (Logo, 0, 0, 450, 150);
|
g.DrawImage (Logo, 0, 0, 450, 150);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ThreadEntry(){
|
||||||
|
gui.LoadResources ();
|
||||||
|
backend.Connect ();
|
||||||
|
Thread.Sleep (1000);
|
||||||
|
if (GuiHasLoaded != null)
|
||||||
|
GuiHasLoaded (this,gui);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,19 +11,25 @@ namespace WorldOfPeacecraft
|
|||||||
private SoundPlayer minigameplayer = new SoundPlayer(musicpath + "minigame.wav");
|
private SoundPlayer minigameplayer = new SoundPlayer(musicpath + "minigame.wav");
|
||||||
private SoundPlayer splashscreenplayer = new SoundPlayer (soundpath + "splashscreen.wav");
|
private SoundPlayer splashscreenplayer = new SoundPlayer (soundpath + "splashscreen.wav");
|
||||||
private SoundPlayer walkplayer = new SoundPlayer(soundpath + "step.wav");
|
private SoundPlayer walkplayer = new SoundPlayer(soundpath + "step.wav");
|
||||||
|
private SoundPlayer poptartplayer = new SoundPlayer(musicpath + "poptart.wav");
|
||||||
|
|
||||||
public Music ()
|
public Music ()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Playmusic (string sound){
|
public void Playmusic (string sound){
|
||||||
if (sound == "overworld")
|
if (sound == "overworld")
|
||||||
overworldplayer.PlayLooping ();
|
overworldplayer.PlayLooping ();
|
||||||
if (sound == "minigame")
|
if (sound == "minigame")
|
||||||
minigameplayer.PlayLooping ();
|
minigameplayer.PlayLooping ();
|
||||||
if (sound == "splashscreen")
|
if (sound == "splashscreen")
|
||||||
splashscreenplayer.PlaySync ();
|
splashscreenplayer.Play ();
|
||||||
if (sound == "walk")
|
if (sound == "walk")
|
||||||
walkplayer.Play ();
|
walkplayer.Play ();
|
||||||
|
if (sound == "poptart")
|
||||||
|
poptartplayer.Play ();
|
||||||
|
//TODO: Monalisa
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user