no message

This commit is contained in:
SilicaAndPina 2020-09-30 02:54:32 +13:00
parent 7a8fa281b9
commit e3a9560c7c
11 changed files with 211 additions and 22 deletions

View file

@ -20,10 +20,6 @@ namespace Horse_Isle_Server
private Thread recvPackets;
private const byte PACKET_LOGIN = 0x7F;
private const byte PACKET_CHAT = 0x14;
private const byte PACKET_MOVE = 0x15;
private const byte PACKET_USERINFO = 0x81;
public void Login(int id)
{
@ -88,7 +84,7 @@ namespace Horse_Isle_Server
}
switch(identifier)
{
case PACKET_LOGIN:
case PacketBuilder.PACKET_LOGIN:
Server.OnLoginRequest(this,Packet);
break;
}

View file

@ -14,8 +14,9 @@ namespace Horse_Isle_Server
db = new MySqlConnection("server=" + ConfigReader.DatabaseIP + ";user=" + ConfigReader.DatabaseUsername + ";password=" + ConfigReader.DatabasePassword+";database="+ConfigReader.DatabaseName);
db.Open();
string UserTable = "CREATE TABLE Users(Id INT, Username TEXT(16),Email TEXT(128),Country TEXT(128),SecurityQuestion Text(128),SecurityAnswerHash TEXT(128),Age INT,PassHash TEXT(128), Salt TEXT(128),Gender TEXT(16), Admin TEXT(3), Moderator TEXT(3))";
string ExtTable = "CREATE TABLE UserExt(Id INT, X INT, Y INT, Money INT, BankBalance BIGINT,ProfilePage Text(1028), CharId, INT)";
string WorldTable = "CREATE TABLE World(TimeStarted INT, Weather TEXT(64)";
string ExtTable = "CREATE TABLE UserExt(Id INT, X INT, Y INT, Money INT, BankBalance BIGINT,ProfilePage Text(1028), CharId INT)";
string MailTable = "CREATE TABLE Mailbox(IdTo INT, PlayerFrom TEXT(16),Subject TEXT(128), Message Text(1028), TimeSent INT)";
string WorldTable = "CREATE TABLE World(TimeStarted INT, Weather TEXT(64))";
try
{
@ -40,6 +41,19 @@ namespace Horse_Isle_Server
Logger.WarnPrint(e.Message);
};
try
{
MySqlCommand sqlCommand = db.CreateCommand();
sqlCommand.CommandText = MailTable;
sqlCommand.ExecuteNonQuery();
}
catch (Exception e)
{
Logger.WarnPrint(e.Message);
};
try
{
@ -105,7 +119,35 @@ namespace Horse_Isle_Server
throw new KeyNotFoundException("Username " + username + " not found in database.");
}
}
public static int CheckMailcount(int id)
{
MySqlCommand sqlCommand = db.CreateCommand();
sqlCommand.CommandText = "SELECT COUNT(1) FROM Mailbox WHERE IdTo=@id";
sqlCommand.Parameters.AddWithValue("@id", id);
sqlCommand.Prepare();
Int32 count = Convert.ToInt32(sqlCommand.ExecuteScalar());
return count;
}
public static void AddMail(int toId, string fromName, string subject, string message)
{
MySqlCommand sqlCommand = db.CreateCommand();
int epoch = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
sqlCommand.CommandText = "INSERT INTO Mailbox VALUES(@toId,@from,@subject,@message,@time)";
sqlCommand.Parameters.AddWithValue("@toId", toId);
sqlCommand.Parameters.AddWithValue("@from", fromName);
sqlCommand.Parameters.AddWithValue("@subject", subject);
sqlCommand.Parameters.AddWithValue("@mesasge", message);
sqlCommand.Parameters.AddWithValue("@time", epoch);
sqlCommand.Prepare();
sqlCommand.ExecuteNonQuery();
}
public static bool CheckUserExist(int id)
{
MySqlCommand sqlCommand = db.CreateCommand();

View file

@ -50,6 +50,7 @@
<HintPath>..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.0\lib\netstandard2.0\System.Memory.dll</HintPath>
</Reference>
@ -77,7 +78,8 @@
<Compile Include="Logger.cs" />
<Compile Include="ConfigReader.cs" />
<Compile Include="CrossDomainPolicy.cs" />
<Compile Include="Packet.cs" />
<Compile Include="Map.cs" />
<Compile Include="PacketBuilder.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
@ -87,6 +89,7 @@
</Compile>
<Compile Include="Server.cs" />
<Compile Include="User.cs" />
<Compile Include="World.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />

View file

@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Horse_Isle_Server
{
class Mailbox
{
private User baseUser;
public int MailCount;
public Mailbox(User user)
{
MailCount = Database.CheckMailcount(user.Id);
baseUser = user;
}
}
}

View file

@ -19,7 +19,7 @@ namespace Horse_Isle_Server
public const byte PACKET_MOVE = 0x15;
public const byte PACKET_USERINFO = 0x81;
public const byte PACKET_WORLD = 0x7A;
public const byte PACKET_BASE_STATS = 0x7B;
private const byte CHAT_BOTTOM_LEFT = 0x14;
private const byte CHAT_BOTTOM_RIGHT = 0x15;
@ -152,6 +152,55 @@ namespace Horse_Isle_Server
return Packet;
}
public static byte[] CreateBaseStats(int money, int playerCount, int mail)
{
byte[] moneyStrBytes = Encoding.UTF8.GetBytes(money.ToString());
byte[] playerStrBytes = Encoding.UTF8.GetBytes(playerCount.ToString());
byte[] mailStrBytes = Encoding.UTF8.GetBytes(mail.ToString());
MemoryStream ms = new MemoryStream();
ms.WriteByte(PACKET_BASE_STATS);
ms.Write(moneyStrBytes, 0x00, moneyStrBytes.Length);
ms.WriteByte((byte)'|');
ms.Write(playerStrBytes, 0x00, playerStrBytes.Length);
ms.WriteByte((byte)'|');
ms.Write(mailStrBytes, 0x00, mailStrBytes.Length);
ms.WriteByte((byte)'|');
ms.WriteByte(PACKET_TERMINATOR);
ms.Seek(0x00, SeekOrigin.Begin);
byte[] Packet = ms.ToArray();
ms.Dispose();
return Packet;
}
public static byte[] CreateSecCode(byte[] SecCodeSeed, int SecCodeInc, bool Admin, bool Moderator)
{
MemoryStream ms = new MemoryStream();
ms.WriteByte(PACKET_USERINFO);
ms.WriteByte((byte)(SecCodeSeed[0] + 33));
ms.WriteByte((byte)(SecCodeSeed[1] + 33));
ms.WriteByte((byte)(SecCodeSeed[2] + 33));
ms.WriteByte((byte)(SecCodeInc + 33));
char userType = 'N'; // Normal?
if (Moderator)
userType = 'M';
if (Admin)
userType = 'A';
ms.WriteByte((byte)userType);
ms.WriteByte(PACKET_TERMINATOR);
ms.Seek(0x00, SeekOrigin.Begin);
byte[] Packet = ms.ToArray();
ms.Dispose();
return Packet;
}
public static byte[] CreateUserInfo(Client client)
{
MemoryStream ms = new MemoryStream();
@ -172,6 +221,13 @@ namespace Horse_Isle_Server
byte[] WorldData = CreateWorldData(timestamp, time.days, time.year, World.GetWeather());
ms.Write(WorldData, 0x00, LoginMessage.Length);
byte[] SecCodePacket = CreateSecCode(user.SecCodeSeeds, user.SecCodeInc, user.Administrator, user.Moderator);
ms.Write(SecCodePacket, 0x00, SecCodePacket.Length);
byte[] BaseStatsPacketData = CreateBaseStats(user.Money, Server.GetNumberOfPlayers(), user.MailBox.MailCount);
ms.Write(BaseStatsPacketData, 0x00, BaseStatsPacketData.Length);
ms.Seek(0x00, SeekOrigin.Begin);
byte[] Packet = ms.ToArray();
ms.Dispose();

View file

@ -1,4 +1,5 @@
using System.IO;
using System;
using System.IO;
using System.Reflection;
namespace Horse_Isle_Server

View file

@ -1,131 +0,0 @@
{"messages":{
"login_message":"Welcome to the land of Horse Isle, %USERNAME%!!",
"motd_format":"<FONT COLOR='#FF0000'><B>Today's Note:</B> %NOTE%</FONT>",
"global_chat":"<FONT COLOR='#880000'><B>%USERNAME%:</B> %MESSAGE</FONT>"
},
"new_user":{
"starting_message":"<B>Welcome Newest Rider of Horse Isle!</B><BR>Start by talking to Welcome Willy in the cabin. Click the TALK button by his name in the right hand window. He will know the location of a buried treasure on this island! Move to the spot he describes using the arrow keys. Then Click the WRENCH Icon at the lower right.",
"starting_x":518,
"starting_y":137
},
"isles":[
{"start_x":609,"end_x":612,"start_y":285,"end_y":287,"tileset":0,"name":"The Neverending Isles"},
{"start_x":668,"end_x":671,"start_y":259,"end_y":261,"tileset":0,"name":"Solomon Isle"},
{"start_x":614,"end_x":619,"start_y":217,"end_y":221,"tileset":0,"name":"Palm Isle"},
{"start_x":683,"end_x":688,"start_y":304,"end_y":310,"tileset":0,"name":"Nonesuch Isle"},
{"start_x":634,"end_x":640,"start_y":348,"end_y":353,"tileset":6,"name":"Isle of Hardly"},
{"start_x":619,"end_x":624,"start_y":276,"end_y":283,"tileset":0,"name":"The Neverending Isles"},
{"start_x":591,"end_x":597,"start_y":194,"end_y":200,"tileset":0,"name":"Talon Isle"},
{"start_x":615,"end_x":622,"start_y":290,"end_y":297,"tileset":0,"name":"The Neverending Isles"},
{"start_x":666,"end_x":671,"start_y":322,"end_y":333,"tileset":0,"name":"Rock Isle"},
{"start_x":634,"end_x":642,"start_y":284,"end_y":291,"tileset":0,"name":"The Neverending Isles"},
{"start_x":635,"end_x":643,"start_y":270,"end_y":277,"tileset":0,"name":"The Neverending Isles"},
{"start_x":679,"end_x":688,"start_y":319,"end_y":326,"tileset":0,"name":"Spirit Isle"},
{"start_x":591,"end_x":602,"start_y":360,"end_y":366,"tileset":5,"name":"Puuhonua Isle"},
{"start_x":607,"end_x":617,"start_y":356,"end_y":364,"tileset":0,"name":"Patsy Isle"},
{"start_x":613,"end_x":623,"start_y":261,"end_y":269,"tileset":0,"name":"Spice Isle"},
{"start_x":665,"end_x":673,"start_y":292,"end_y":302,"tileset":3,"name":"Haven Isle"},
{"start_x":395,"end_x":403,"start_y":463,"end_y":474,"tileset":2,"name":"The Sand Isles"},
{"start_x":666,"end_x":674,"start_y":303,"end_y":314,"tileset":3,"name":"Half Haven Isle"},
{"start_x":670,"end_x":680,"start_y":222,"end_y":231,"tileset":0,"name":"Crazy Eddie's Isle"},
{"start_x":636,"end_x":645,"start_y":210,"end_y":220,"tileset":0,"name":"Atropos Isle"},
{"start_x":618,"end_x":628,"start_y":352,"end_y":361,"tileset":0,"name":"Patsy Isle"},
{"start_x":356,"end_x":368,"start_y":418,"end_y":426,"tileset":2,"name":"The Sand Isles"},
{"start_x":621,"end_x":632,"start_y":225,"end_y":234,"tileset":0,"name":"Mare Isle"},
{"start_x":622,"end_x":636,"start_y":298,"end_y":308,"tileset":3,"name":"Tranquility Isle"},
{"start_x":637,"end_x":646,"start_y":299,"end_y":315,"tileset":0,"name":"Serenity Isle"},
{"start_x":622,"end_x":631,"start_y":202,"end_y":218,"tileset":0,"name":"Ardent Isle"},
{"start_x":619,"end_x":633,"start_y":334,"end_y":345,"tileset":0,"name":"Drill Isle"},
{"start_x":651,"end_x":665,"start_y":293,"end_y":304,"tileset":3,"name":"Haven Isle"},
{"start_x":641,"end_x":657,"start_y":404,"end_y":414,"tileset":0,"name":"Aesop Isle"},
{"start_x":689,"end_x":700,"start_y":264,"end_y":279,"tileset":0,"name":"Hotzeplotz Isle"},
{"start_x":651,"end_x":665,"start_y":305,"end_y":318,"tileset":3,"name":"Haven Isle"},
{"start_x":513,"end_x":524,"start_y":126,"end_y":144,"tileset":0,"name":"Welcome Isle"},
{"start_x":598,"end_x":615,"start_y":197,"end_y":209,"tileset":0,"name":"Shimmer Isle"},
{"start_x":621,"end_x":634,"start_y":312,"end_y":328,"tileset":0,"name":"Lilac Isle"},
{"start_x":670,"end_x":681,"start_y":268,"end_y":288,"tileset":0,"name":"Loch Isle"},
{"start_x":348,"end_x":370,"start_y":407,"end_y":417,"tileset":2,"name":"The Sand Isles"},
{"start_x":429,"end_x":449,"start_y":216,"end_y":227,"tileset":2,"name":"Mane Isle"},
{"start_x":673,"end_x":690,"start_y":202,"end_y":215,"tileset":0,"name":"Paradise Isle"},
{"start_x":419,"end_x":435,"start_y":228,"end_y":242,"tileset":2,"name":"Mane Isle"},
{"start_x":385,"end_x":394,"start_y":448,"end_y":473,"tileset":2,"name":"The Sand Isles"},
{"start_x":690,"end_x":705,"start_y":285,"end_y":301,"tileset":0,"name":"Theobroma Isle"},
{"start_x":698,"end_x":722,"start_y":22,"end_y":32,"tileset":1,"name":"Icicle Isle"},
{"start_x":628,"end_x":643,"start_y":244,"end_y":261,"tileset":0,"name":"Quiet Isle"},
{"start_x":701,"end_x":710,"start_y":245,"end_y":276,"tileset":0,"name":"Hotzeplotz Isle"},
{"start_x":665,"end_x":691,"start_y":247,"end_y":259,"tileset":0,"name":"Bone Isle"},
{"start_x":651,"end_x":670,"start_y":53,"end_y":71,"tileset":1,"name":"Snowball Isle"},
{"start_x":546,"end_x":561,"start_y":24,"end_y":47,"tileset":1,"name":"Christmas Isle"},
{"start_x":455,"end_x":478,"start_y":180,"end_y":196,"tileset":2,"name":"Mane Isle"},
{"start_x":650,"end_x":662,"start_y":251,"end_y":282,"tileset":0,"name":"Crescent Isle"},
{"start_x":641,"end_x":666,"start_y":322,"end_y":337,"tileset":0,"name":"Rock Isle"},
{"start_x":622,"end_x":635,"start_y":165,"end_y":196,"tileset":0,"name":"Saddle Isle"},
{"start_x":58,"end_x":85,"start_y":156,"end_y":172,"tileset":5,"name":"Rain Isle"},
{"start_x":686,"end_x":711,"start_y":217,"end_y":235,"tileset":0,"name":"Eldorado Isle"},
{"start_x":908,"end_x":931,"start_y":175,"end_y":195,"tileset":7,"name":"Tephra Isle"},
{"start_x":380,"end_x":421,"start_y":17,"end_y":29,"tileset":1,"name":"Glacier Isle"},
{"start_x":952,"end_x":977,"start_y":254,"end_y":275,"tileset":7,"name":"Scoria Isle"},
{"start_x":548,"end_x":569,"start_y":57,"end_y":82,"tileset":1,"name":"Berg Isle"},
{"start_x":435,"end_x":466,"start_y":197,"end_y":215,"tileset":2,"name":"Mane Isle"},
{"start_x":376,"end_x":397,"start_y":294,"end_y":321,"tileset":0,"name":"Tail Isle"},
{"start_x":964,"end_x":990,"start_y":30,"end_y":53,"tileset":3,"name":"Hat Isle"},
{"start_x":652,"end_x":682,"start_y":25,"end_y":47,"tileset":1,"name":"Polar Isle"},
{"start_x":722,"end_x":745,"start_y":262,"end_y":293,"tileset":0,"name":"Cabin Isle"},
{"start_x":602,"end_x":632,"start_y":408,"end_y":432,"tileset":2,"name":"Dust Isle"},
{"start_x":647,"end_x":668,"start_y":426,"end_y":462,"tileset":2,"name":"Torrid Isle"},
{"start_x":648,"end_x":675,"start_y":214,"end_y":246,"tileset":0,"name":"Bone Isle"},
{"start_x":280,"end_x":321,"start_y":371,"end_y":393,"tileset":0,"name":"Tail Isle"},
{"start_x":696,"end_x":711,"start_y":144,"end_y":205,"tileset":0,"name":"Saddle Isle"},
{"start_x":86,"end_x":113,"start_y":149,"end_y":183,"tileset":5,"name":"Vine Isle"},
{"start_x":944,"end_x":990,"start_y":8,"end_y":29,"tileset":3,"name":"Hat Isle"},
{"start_x":636,"end_x":657,"start_y":152,"end_y":201,"tileset":0,"name":"Saddle Isle"},
{"start_x":322,"end_x":352,"start_y":355,"end_y":390,"tileset":0,"name":"Tail Isle"},
{"start_x":525,"end_x":559,"start_y":343,"end_y":377,"tileset":0,"name":"Hoof Isle"},
{"start_x":251,"end_x":279,"start_y":349,"end_y":393,"tileset":0,"name":"Tail Isle"},
{"start_x":726,"end_x":782,"start_y":294,"end_y":316,"tileset":0,"name":"Cabin Isle"},
{"start_x":356,"end_x":384,"start_y":430,"end_y":474,"tileset":2,"name":"The Sand Isles"},
{"start_x":585,"end_x":621,"start_y":155,"end_y":190,"tileset":0,"name":"Saddle Isle"},
{"start_x":11,"end_x":52,"start_y":14,"end_y":46,"tileset":0,"name":"Prison Isle"},
{"start_x":608,"end_x":668,"start_y":434,"end_y":456,"tileset":2,"name":"Torrid Isle"},
{"start_x":938,"end_x":977,"start_y":200,"end_y":234,"tileset":7,"name":"Magma Isle"},
{"start_x":832,"end_x":875,"start_y":18,"end_y":49,"tileset":3,"name":"Treasure Isle"},
{"start_x":612,"end_x":653,"start_y":114,"end_y":151,"tileset":0,"name":"Rider Isle"},
{"start_x":44,"end_x":109,"start_y":184,"end_y":209,"tileset":5,"name":"Vine Isle"},
{"start_x":313,"end_x":355,"start_y":418,"end_y":458,"tileset":2,"name":"The Sand Isles"},
{"start_x":588,"end_x":652,"start_y":457,"end_y":486,"tileset":2,"name":"Torrid Isle"},
{"start_x":704,"end_x":750,"start_y":381,"end_y":426,"tileset":7,"name":"Pumice Isle"},
{"start_x":549,"end_x":581,"start_y":99,"end_y":169,"tileset":0,"name":"Horn Isle"},
{"start_x":344,"end_x":399,"start_y":66,"end_y":107,"tileset":0,"name":"Art Isle"},
{"start_x":558,"end_x":611,"start_y":286,"end_y":332,"tileset":0,"name":"Turtle Isle"},
{"start_x":334,"end_x":385,"start_y":150,"end_y":200,"tileset":0,"name":"Cat Isle"},
{"start_x":353,"end_x":401,"start_y":322,"end_y":379,"tileset":0,"name":"Tail Isle"},
{"start_x":739,"end_x":836,"start_y":199,"end_y":229,"tileset":0,"name":"Whorl Isle"},
{"start_x":746,"end_x":808,"start_y":245,"end_y":294,"tileset":0,"name":"Cabin Isle"},
{"start_x":27,"end_x":90,"start_y":210,"end_y":260,"tileset":5,"name":"Vine Isle"},
{"start_x":191,"end_x":250,"start_y":339,"end_y":393,"tileset":0,"name":"Starfish Isle"},
{"start_x":122,"end_x":160,"start_y":19,"end_y":104,"tileset":5,"name":"Web Isle"},
{"start_x":934,"end_x":981,"start_y":386,"end_y":456,"tileset":7,"name":"Basalt Isle"},
{"start_x":658,"end_x":695,"start_y":110,"end_y":199,"tileset":0,"name":"Saddle Isle"},
{"start_x":569,"end_x":650,"start_y":32,"end_y":73,"tileset":1,"name":"Ice Isle"},
{"start_x":73,"end_x":121,"start_y":34,"end_y":107,"tileset":5,"name":"Web Isle"},
{"start_x":446,"end_x":502,"start_y":77,"end_y":142,"tileset":0,"name":"Ring Isle"},
{"start_x":271,"end_x":336,"start_y":289,"end_y":353,"tileset":4,"name":"Flower Isle"},
{"start_x":289,"end_x":332,"start_y":169,"end_y":270,"tileset":0,"name":"Hare Isle"},
{"start_x":387,"end_x":453,"start_y":117,"end_y":184,"tileset":0,"name":"Bird Isle"},
{"start_x":653,"end_x":759,"start_y":24,"end_y":67,"tileset":1,"name":"Polar Isle"},
{"start_x":839,"end_x":920,"start_y":217,"end_y":287,"tileset":7,"name":"Igneous Isle"},
{"start_x":309,"end_x":347,"start_y":334,"end_y":490,"tileset":2,"name":"Yellow Brick Isle"},
{"start_x":344,"end_x":408,"start_y":210,"end_y":308,"tileset":0,"name":"Dolphin Isle"},
{"start_x":426,"end_x":547,"start_y":14,"end_y":69,"tileset":1,"name":"Snow Isle"},
{"start_x":856,"end_x":963,"start_y":34,"end_y":122,"tileset":3,"name":"Pirate Isle"},
{"start_x":733,"end_x":844,"start_y":93,"end_y":198,"tileset":0,"name":"Whorl Isle"},
{"start_x":104,"end_x":230,"start_y":266,"end_y":360,"tileset":5,"name":"Jungle Isle"},
{"start_x":770,"end_x":971,"start_y":286,"end_y":363,"tileset":7,"name":"Lava Isle"},
{"start_x":378,"end_x":597,"start_y":406,"end_y":493,"tileset":2,"name":"Desert Isle"},
{"start_x":27,"end_x":103,"start_y":78,"end_y":343,"tileset":5,"name":"Dog Isle"},
{"start_x":746,"end_x":930,"start_y":363,"end_y":483,"tileset":7,"name":"Lava Isle"},
{"start_x":7,"end_x":247,"start_y":365,"end_y":473,"tileset":6,"name":"The Cloud Isles"},
{"start_x":405,"end_x":608,"start_y":154,"end_y":370,"tileset":0,"name":"Horse Isle"},
{"start_x":104,"end_x":327,"start_y":54,"end_y":265,"tileset":5,"name":"Jungle Isle"}
]
}

View file

@ -76,6 +76,17 @@ namespace Horse_Isle_Server
}
}
public static int GetNumberOfPlayers()
{
int count = 0;
foreach(Client client in ConnectedClients)
{
if (client.LoggedIn)
count++;
}
return count;
}
public static void StartServer()
{
ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

View file

@ -13,6 +13,7 @@ namespace Horse_Isle_Server
public bool Administrator;
public bool Moderator;
public bool NewPlayer = false;
public Mailbox MailBox;
public string ProfilePage {
get
@ -52,7 +53,7 @@ namespace Horse_Isle_Server
}
}
public short X
public int X
{
get
{
@ -65,7 +66,7 @@ namespace Horse_Isle_Server
}
}
public short Y
public int Y
{
get
{
@ -78,7 +79,7 @@ namespace Horse_Isle_Server
}
}
public short CharacterId
public int CharacterId
{
get
{
@ -98,6 +99,28 @@ namespace Horse_Isle_Server
private int money;
private int bankMoney;
public byte[] SecCodeSeeds = new byte[3];
public int SecCodeInc = 0;
public int SecCodeCount = 0;
public byte[] GenerateSecCode()
{
var i = 0;
SecCodeCount++;
SecCodeSeeds[SecCodeCount % 3] = (byte)(SecCodeSeeds[SecCodeCount % 3] + SecCodeInc);
SecCodeSeeds[SecCodeCount % 3] = (byte)(SecCodeSeeds[SecCodeCount % 3] % 92);
i = SecCodeSeeds[0] + SecCodeSeeds[1] * SecCodeSeeds[2] - SecCodeSeeds[1];
i = Math.Abs(i);
i = i % 92;
byte[] SecCode = new byte[4];
SecCode[0] = (byte)(SecCodeSeeds[0] + 33);
SecCode[1] = (byte)(SecCodeSeeds[1] + 33);
SecCode[2] = (byte)(SecCodeSeeds[2] + 33);
SecCode[3] = (byte)(i + 33);
return SecCode;
}
public User(int UserId)
{
@ -118,11 +141,23 @@ namespace Horse_Isle_Server
x = Database.GetPlayerX(UserId);
y = Database.GetPlayerY(UserId);
charId = Database.GetPlayerCharId(UserId);
money = Database.GetPlayerMoney(UserId);
bankMoney = Database.GetPlayerBankMoney(UserId);
profilePage = Database.GetPlayerProfile(UserId);
MailBox = new Mailbox(this);
// Generate SecCodes
Random rng = new Random();
SecCodeSeeds[0] = (byte)rng.Next(0, 255 - 33);
SecCodeSeeds[1] = (byte)rng.Next(0, 255 - 33);
SecCodeSeeds[2] = (byte)rng.Next(0, 255 - 33);
SecCodeInc = (byte)rng.Next(0, 255 - 33);
}
}
}

View file

@ -6,13 +6,20 @@ using System.Threading.Tasks;
namespace Horse_Isle_Server
{
class World
{
public static int ServerStartTime;
public struct Time
{
public int minutes;
public int hours;
public int days;
public int year;
}
public const int MINUTE = 4320;
public static int GetGameDay()
public static Time GetGameTime()
{
int epoch = Database.GetServerCreationTime();
DateTime serverCreationTime = DateTimeOffset.FromUnixTimeSeconds(epoch).DateTime;
@ -20,13 +27,26 @@ namespace Horse_Isle_Server
TimeSpan difference = (currentTime.Date - currentTime.Date);
Int64 totalMilis = Convert.ToInt32(difference.TotalMilliseconds);
int totalMilis = Convert.ToInt32(difference.TotalMilliseconds);
Int64 gameMinutes = totalMilis / 4320;
int gameMinutes = totalMilis / MINUTE;
int gameHours = (totalMilis / MINUTE * 600);
int gameDays = (totalMilis / (MINUTE * 60) * 24);
int gameYears = ((totalMilis / (MINUTE * 60) * 24)*365);
Time time = new Time();
time.days = gameDays;
time.year = gameYears;
time.minutes = gameMinutes;
time.hours = gameHours;
return;
return time;
}
public static string GetWeather()
{
return Database.GetWorldWeather();
}
}
}