multiroom meta

This commit is contained in:
SilicaAndPina 2021-01-03 15:44:02 +13:00
parent 6e671be0b5
commit 1a9de769bf
7 changed files with 173 additions and 23 deletions

View file

@ -129,10 +129,10 @@
"fountain":"Although it's not recommended, you could drink from this fountain if you are thirsty...^T6Drink from the public fountain. ^B1D^R1^X^Z",
"venus_flytrap_format":"The Giant Venus Flytrap chomped at you!<BR><B>OUCH!!</B><BR>It chomped your pocket, taking $%MONEY% with it!!",
"password_input":"<BR>^PLReply:|^PS14|ANSWER^R1",
"poetry":{
"last_poet":"^R1^LLast Player Poet:%USERNAME% ^R1",
"multiroom":{
"other_players_participating":"<BR>^LThe following other players are participating:",
"partcipent_format":"^R1^T3%USERNAME%",
"lastplayer_format":"^R1^LLast Player Poet:%USERNAME% ^R1"
"partcipent_format":"^R1^T3%USERNAME%"
},
"bank":{
"made_interest":"^LYou made $%MONEY% in interest since your last visit.^R1",

View file

@ -304,6 +304,13 @@ namespace HISP.Game
public static string LongFullLine;
public static string MetaTerminator;
// Birckpoet
public static string LastPoetFormat;
// Multiroom
public static string MultiroomPlayersParticipating;
public static string MultiroomParticipentFormat;
// Inn
public static string InnBuyMeal;
public static string InnBuyRest;
@ -331,6 +338,14 @@ namespace HISP.Game
// Click
public static string NothingInterestingHere;
public static string FormatLastPoet(string name)
{
return LastPoetFormat.Replace("%USERNAME%", name);
}
public static string FormatMultiroomParticipent(string name)
{
return MultiroomParticipentFormat.Replace("%USERNAME%", name);
}
public static string FormatVenusFlyTrapMeta(int money)
{
return VenusFlyTrapFormat.Replace("%MONEY%", money.ToString("N0"));

View file

@ -206,6 +206,29 @@ namespace HISP.Game
return message;
}
private static string buildMultiroom(string id, User user)
{
string message = Messages.MultiroomPlayersParticipating;
foreach(User userOnTile in GameServer.GetUsersOnSpecialTileCode("MULTIROOM-"+id))
{
if (userOnTile.Id == user.Id)
continue;
message += Messages.FormatMultiroomParticipent(userOnTile.Username);
}
if(id[0] == 'P') // Poet
{
int lastPoet = Database.GetLastPlayer(id);
string username = "";
if(lastPoet != -1)
username = Database.GetUsername(lastPoet);
message += Messages.FormatLastPoet(username);
}
message += Messages.ExitThisPlace;
message += Messages.MetaTerminator;
return message;
}
private static string buildEquippedCompetitionGear(User user)
{
string message = Messages.CompetitionGearSelected;
@ -698,6 +721,11 @@ namespace HISP.Game
{
message += buildVenusFlyTrap(user);
}
if(TileCode == "MULTIROOM")
{
user.MetaPriority = false; // acturally want to track updates here >-<
message += buildMultiroom(TileArg, user);
}
if(TileCode == "PASSWORD")
{
message += buildPassword();
@ -721,6 +749,7 @@ namespace HISP.Game
return message;
}
public static string BuildAbuseReportPage()
{
string reportReasons = "";

View file

@ -150,6 +150,8 @@ namespace HISP.Game.SwfModules
{
Logger.InfoPrint("Loading poetry room: " + room.ToString());
poetryRooms.Add(getPoetryRoom(room));
if (!Database.LastPlayerExist("P" + room))
Database.AddLastPlayer("P" + room, -1);
}
}

View file

@ -33,6 +33,7 @@ namespace HISP.Server
string Leaderboards = "CREATE TABLE Leaderboards(playerId INT, minigame TEXT(128), wins INT, looses INT, timesplayed INT, score INT, type TEXT(128))";
string NpcStartPoint = "CREATE TABLE NpcStartPoint(playerId INT, npcId INT, chatpointId INT)";
string PoetryRooms = "CREATE TABLE PoetryRooms(poetId INT, X INT, Y INT, roomId INT)";
string LastPlayer = "CREATE TABLE LastPlayer(roomId TEXT(1028), playerId INT)";
string DeleteOnlineUsers = "DELETE FROM OnlineUsers";
@ -216,6 +217,20 @@ namespace HISP.Server
Logger.WarnPrint(e.Message);
};
try
{
MySqlCommand sqlCommand = db.CreateCommand();
sqlCommand.CommandText = LastPlayer;
sqlCommand.ExecuteNonQuery();
sqlCommand.Dispose();
}
catch (Exception e)
{
Logger.WarnPrint(e.Message);
};
try
{
@ -277,6 +292,71 @@ namespace HISP.Server
}
public static void AddLastPlayer(string roomId, int playerId)
{
using (MySqlConnection db = new MySqlConnection(ConnectionString))
{
db.Open();
MySqlCommand sqlCommand = db.CreateCommand();
sqlCommand.CommandText = "INSERT INTO LastPlayer VALUES(@roomId,@playerId)";
sqlCommand.Parameters.AddWithValue("@roomId", roomId);
sqlCommand.Parameters.AddWithValue("@playerId", playerId);
sqlCommand.Prepare();
sqlCommand.ExecuteNonQuery();
sqlCommand.Dispose();
}
}
public static bool LastPlayerExist(string roomId)
{
using (MySqlConnection db = new MySqlConnection(ConnectionString))
{
db.Open();
MySqlCommand sqlCommand = db.CreateCommand();
sqlCommand.CommandText = "SELECT COUNT(1) FROM LastPlayer WHERE roomId=@roomId";
sqlCommand.Parameters.AddWithValue("@roomId", roomId);
sqlCommand.Prepare();
int count = Convert.ToInt32(sqlCommand.ExecuteScalar());
sqlCommand.Dispose();
return count > 0;
}
}
public static int GetLastPlayer(string roomId)
{
using (MySqlConnection db = new MySqlConnection(ConnectionString))
{
db.Open();
MySqlCommand sqlCommand = db.CreateCommand();
sqlCommand.CommandText = "SELECT playerId FROM LastPlayer WHERE roomId=@roomId";
sqlCommand.Parameters.AddWithValue("@roomId", roomId);
sqlCommand.Prepare();
int playerId = Convert.ToInt32(sqlCommand.ExecuteScalar());
sqlCommand.Dispose();
return playerId;
}
}
public static void SetLastPlayer(string roomId, int playerId)
{
using (MySqlConnection db = new MySqlConnection(ConnectionString))
{
db.Open();
MySqlCommand sqlCommand = db.CreateCommand();
sqlCommand.CommandText = "UPDATE LastPlayer SET playerId=@playerId WHERE roomId=@roomId";
sqlCommand.Parameters.AddWithValue("@roomId", roomId);
sqlCommand.Parameters.AddWithValue("@playerId", playerId);
sqlCommand.Prepare();
sqlCommand.ExecuteNonQuery();
sqlCommand.Dispose();
}
}
public static void AddPoetWord(int id, int x, int y, int room)
{
using (MySqlConnection db = new MySqlConnection(ConnectionString))

View file

@ -453,6 +453,7 @@ namespace HISP.Server
}
Item.Present = gameData.item.special.present;
Item.MailMessage = gameData.item.special.mail_message;
Item.DorothyShoes = gameData.item.special.dorothy_shoes;
@ -589,6 +590,13 @@ namespace HISP.Server
Messages.PasswordNotice = gameData.messages.chat.password_included;
Messages.CapsNotice = gameData.messages.chat.caps_notice;
// Brickpoet
Messages.LastPoetFormat = gameData.messages.meta.last_poet;
// Mutliroom
Messages.MultiroomParticipentFormat = gameData.messages.meta.multiroom.partcipent_format;
Messages.MultiroomPlayersParticipating = gameData.messages.meta.multiroom.other_players_participating;
// Dropped Items
Messages.NothingMessage = gameData.messages.meta.dropped_items.nothing_message;

View file

@ -484,7 +484,6 @@ namespace HISP.Server
break;
}
int roomId = packet[2] - 40;
int peiceId;
int x;
@ -501,37 +500,31 @@ namespace HISP.Server
room = Brickpoet.GetPoetryRoom(roomId);
peice = Brickpoet.GetPoetryPeice(room, peiceId);
}
catch (Exception)
{
Logger.ErrorPrint(sender.LoggedinUser.Username + " tried to move a peice in an invalid brickpoet room: " + roomId);
break;
}
peice.X = x;
peice.Y = y;
foreach(GameClient client in connectedClients)
foreach(User user in GetUsersOnSpecialTileCode("MULTIROOM-" + "P" + roomId.ToString()))
{
if(client.LoggedIn)
{
if (client.LoggedinUser.Id == sender.LoggedinUser.Id)
continue;
if (user.Id == sender.LoggedinUser.Id)
continue;
if (World.InSpecialTile(client.LoggedinUser.X, client.LoggedinUser.Y))
{
World.SpecialTile tile = World.GetSpecialTile(client.LoggedinUser.X, client.LoggedinUser.Y);
byte[] updatePoetRoomPacket = PacketBuilder.CreateBrickPoetMovePacket(peice);
user.LoggedinClient.SendPacket(updatePoetRoomPacket);
}
if (tile.Code.StartsWith("MULTIROOM-"))
{
string roomNo = tile.Code.Split('-')[1];
if (roomNo == "P" + roomId.ToString())
{
byte[] updatePoetRoomPacket = PacketBuilder.CreateBrickPoetMovePacket(peice);
client.SendPacket(updatePoetRoomPacket);
}
}
}
}
if (Database.GetLastPlayer("P" + roomId) == sender.LoggedinUser.Id)
{
Database.SetLastPlayer("P" + roomId, sender.LoggedinUser.Id);
UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y);
}
break;
@ -2399,6 +2392,29 @@ namespace HISP.Server
return usersInIsle.ToArray();
}
public static User[] GetUsersOnSpecialTileCode(string code)
{
List<User> userList = new List<User>();
foreach (GameClient client in connectedClients)
{
if (client.LoggedIn)
{
if (World.InSpecialTile(client.LoggedinUser.X, client.LoggedinUser.Y))
{
World.SpecialTile tile = World.GetSpecialTile(client.LoggedinUser.X, client.LoggedinUser.Y);
if (tile.Code == code)
{
userList.Add(client.LoggedinUser);
}
}
}
}
return userList.ToArray();
}
public static User[] GetUsersAt(int x, int y, bool includeStealth = false, bool includeMuted = false)
{
List<User> usersHere = new List<User>();