Skip to content
Permalink
Browse files
Added unfiltered chat, debug empty user
  • Loading branch information
amPerl committed Aug 30, 2014
1 parent c78abba commit 7e634252096cf484dde8a0f4acfb39db2256d1c7
Show file tree
Hide file tree
Showing 8 changed files with 121 additions and 11 deletions.
@@ -13,6 +13,7 @@ public class Player

public User User;
public List<Character> Characters;
public string ActiveCharacter;

private RiceClient authClient, lobbyClient, areaClient, gameClient;
public RiceClient AuthClient { get { return authClient; } set { authClient = value; authClient.Player = this; } }
@@ -28,6 +28,14 @@ private User()
{
}

public static User Empty
{
get
{
return new User() { Status = UserStatus.Normal };
}
}

public static User Retrieve(string username, string passwordHash)
{
DbConnection dbconn = Database.GetConnection();
@@ -39,17 +47,45 @@ public static User Retrieve(string username, string passwordHash)

Log.WriteLine("Username: {0}, PasswordHash: {1}", username, passwordHash);

DbDataReader reader = command.ExecuteReader();
User user = null;

if (reader.Read())
using (DbDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
user = new User();
user.UID = Convert.ToUInt64(reader["UID"]);
user.Username = reader["Username"] as string;
user.PasswordHash = reader["PasswordHash"] as string;
user.Status = (UserStatus)Convert.ToByte(reader["Status"]);
user.CreateIP = reader["CreateIP"] as string;
}
}

return user;
}

public static User Retrieve(string username)
{
DbConnection dbconn = Database.GetConnection();

DbCommand command = dbconn.CreateTextCommand("SELECT * FROM Users WHERE Username = @user");

command.AddParameter("@user", username);

User user = null;

using (DbDataReader reader = command.ExecuteReader())
{
user = new User();
user.UID = Convert.ToUInt64(reader["UID"]);
user.Username = reader["Username"] as string;
user.PasswordHash = reader["PasswordHash"] as string;
user.Status = (UserStatus)Convert.ToByte(reader["Status"]);
user.CreateIP = reader["CreateIP"] as string;
if (reader.Read())
{
user = new User();
user.UID = Convert.ToUInt64(reader["UID"]);
user.Username = reader["Username"] as string;
user.PasswordHash = reader["PasswordHash"] as string;
user.Status = (UserStatus)Convert.ToByte(reader["Status"]);
user.CreateIP = reader["CreateIP"] as string;
}
}

return user;
@@ -68,6 +68,7 @@
<Compile Include="Server\PacketIO.cs" />
<Compile Include="Server\Core\RicePacket.cs" />
<Compile Include="Server\Packets\Game\Character.cs" />
<Compile Include="Server\Packets\Game\Chat.cs" />
<Compile Include="Server\Packets\Game\Misc.cs" />
<Compile Include="Server\Packets\Lobby\User.cs" />
<Compile Include="Server\Packets\Lobby\Misc.cs" />
@@ -66,5 +66,14 @@ public RiceClient[] GetClients()
{
return clients.ToArray();
}

public void Broadcast(RicePacket packet, RiceClient exclude = null)
{
foreach (var client in GetClients())
{
if (exclude == null || client != exclude)
client.Send(packet);
}
}
}
}
@@ -82,7 +82,8 @@ public string ReadUnicode()
do
{
val = ReadInt16();
sb.Append((char)val);
if (val > 0)
sb.Append((char)val);
}
while (val > 0);
return sb.ToString();
@@ -14,14 +14,17 @@ public static void LoadCharacter(RicePacket packet)
{
string characterName = packet.Reader.ReadUnicode();

packet.Sender.Player = new Rice.Game.Player(Rice.Game.User.Empty); // TODO: load user info on checkin
packet.Sender.Player.ActiveCharacter = characterName; // TODO: verify this

var ack = new RicePacket(124);

var ackStruct = new Structures.LoadCharAck
{
CharInfo = new Structures.CharInfo
{
Avatar = 1,
Name = "charName",
Name = characterName,
Cid = 1,
City = 1,
CurCarId = 1,
@@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Rice.Server.Core;

namespace Rice.Server.Packets.Game
{
public static class Chat
{
[RicePacket(146, RiceServer.ServerType.Game)]
public static void ChatMessage(RicePacket packet)
{
string type = packet.Reader.ReadUnicodeStatic(10);
bool green = packet.Reader.ReadUInt32() == 0xFF00FF00; // need to ignore this and check for rank serverside
string message = packet.Reader.ReadUnicodePrefixed();

string sender = packet.Sender.Player.ActiveCharacter;

Console.WriteLine("({0}) <{1}> {2}", type, sender, message);

var ack = new RicePacket(147);
ack.Writer.WriteUnicodeStatic(type, 10);
ack.Writer.WriteUnicodeStatic(sender, 18);
ack.Writer.WriteUnicode(message);

switch (type)
{
case "room":
RiceServer.Game.Broadcast(ack); // TODO: broadcast only to users in same area
break;

case "channel":
RiceServer.Game.Broadcast(ack);
break;

case "party":
RiceServer.Game.Broadcast(ack); // TODO: broadcast only to users in same party
break;

case "team":
RiceServer.Game.Broadcast(ack); // TODO: broadcast only to users in same crew
break;

default:
Log.WriteError("Undefined chat message type.");
break;
}
}
}
}
@@ -22,16 +22,23 @@ public static void CheckInLobby(RicePacket packet)
string stringTicket = packet.Reader.ReadASCIIStatic(0x40);

Player player = null;
bool verifyTicket = true;

#if DEBUG
verifyTicket = false;
player = new Player(Rice.Game.User.Retrieve(username));
#else

foreach (var p in RiceServer.GetPlayers())
{
if (p.Ticket == ticket && p.User.Username == username)
if (p.User.Username == username && p.Ticket == ticket)
{
player = p;
player.LobbyClient = packet.Sender;
break;
}
}
#endif

if (player == null)
{

0 comments on commit 7e63425

Please sign in to comment.