mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-06 05:05:40 +12:00
109 lines
3.2 KiB
C#
Executable file
109 lines
3.2 KiB
C#
Executable file
using HISP.Player;
|
|
using HISP.Server;
|
|
using HISP.Util;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace HISP.Game
|
|
{
|
|
public class Multiroom
|
|
{
|
|
private static List<Multiroom> multirooms = new List<Multiroom>();
|
|
private ThreadSafeList<User> joinedUsers = new ThreadSafeList<User>();
|
|
|
|
public int x;
|
|
public int y;
|
|
public User[] JoinedUsers
|
|
{
|
|
get
|
|
{
|
|
return joinedUsers.ToArray();
|
|
}
|
|
}
|
|
public static Multiroom[] Multirooms
|
|
{
|
|
get
|
|
{
|
|
return multirooms.ToArray();
|
|
}
|
|
}
|
|
public static Multiroom GetMultiroom(int x, int y)
|
|
{
|
|
foreach (Multiroom multiroom in Multirooms)
|
|
if(multiroom.x == x && multiroom.y == y)
|
|
return multiroom;
|
|
|
|
throw new KeyNotFoundException();
|
|
}
|
|
public static bool IsMultiRoomAt(int x, int y)
|
|
{
|
|
foreach (Multiroom multiroom in Multirooms)
|
|
if (multiroom.x == x && multiroom.y == y)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
public static void LeaveAllMultirooms(User user)
|
|
{
|
|
foreach (Multiroom room in Multirooms)
|
|
room.Leave(user);
|
|
}
|
|
|
|
public static void CreateMultirooms()
|
|
{
|
|
Logger.InfoPrint("Creating Multirooms...");
|
|
foreach(World.SpecialTile tile in World.SpecialTiles)
|
|
{
|
|
if (tile.Code != null)
|
|
{
|
|
if (tile.Code.StartsWith("MULTIROOM") || tile.Code.StartsWith("MULTIHORSES") || tile.Code.StartsWith("2PLAYER") || tile.Code.StartsWith("AUCTION"))
|
|
{
|
|
Logger.DebugPrint("Created Multiroom @ " + tile.X.ToString() + "," + tile.Y.ToString());
|
|
new Multiroom(tile.X, tile.Y);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
public Multiroom(int x, int y)
|
|
{
|
|
this.x = x;
|
|
this.y = y;
|
|
|
|
multirooms.Add(this);
|
|
}
|
|
|
|
public void Join(User user)
|
|
{
|
|
if (!JoinedUsers.Contains(user))
|
|
{
|
|
Logger.DebugPrint(user.Username + " Joined multiroom @ " + x.ToString() + "," + y.ToString());
|
|
joinedUsers.Add(user);
|
|
|
|
foreach (User joinedUser in JoinedUsers)
|
|
if (joinedUser.Id != user.Id)
|
|
if(!TwoPlayer.IsPlayerInGame(joinedUser))
|
|
if(!joinedUser.MajorPriority)
|
|
GameServer.UpdateArea(joinedUser.Client);
|
|
}
|
|
|
|
}
|
|
|
|
public void Leave(User user)
|
|
{
|
|
|
|
if(JoinedUsers.Contains(user))
|
|
{
|
|
Logger.DebugPrint(user.Username + " Left multiroom @ " + x.ToString() + "," + y.ToString());
|
|
joinedUsers.Remove(user);
|
|
|
|
|
|
foreach (User joinedUser in JoinedUsers)
|
|
if (!TwoPlayer.IsPlayerInGame(joinedUser))
|
|
if (!joinedUser.MajorPriority)
|
|
GameServer.UpdateArea(joinedUser.Client);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|