using System;
using System.Threading;
using System.Collections;
using Holo.Managers;
using Holo.Virtual.Rooms;
namespace Holo.Virtual.Users
{
///
/// Represents a virtual user in a virtual room.
///
public class virtualRoomUser
{
///
/// The database ID of the user.
///
internal int userID;
///
/// The ID of the virtual room where the user is in.
///
internal int roomID;
///
/// The ID of the user in the virtual room.
///
internal int roomUID;
internal string swimOutfit;
///
/// The X position of the user in the virtual room.
///
internal int X;
///
/// The Y position of the user in the virtual room.
///
internal int Y;
///
/// The height of the user in the virtual room.
///
internal double H;
///
/// The rotation of the user's head in the virtual room.
///
internal byte Z1;
///
/// The rotation of the user's body in the virtual room.
///
internal byte Z2;
///
/// The X position where the user wants to walk to. If not walking, -1.
///
internal int goalX;
///
/// The Y position where the user wants to walk to. If not walking, -1.
///
internal int goalY;
///
/// Specifies if the user can walk.
///
internal bool walkLock;
///
/// Specifies if the user is on his way of leaving the room after clicking the door.
///
internal bool walkDoor;
///
/// Guestroom only. Specifies if the user has voted on the guestroom already.
///
internal bool hasVoted;
///
/// Swimming pools only. Specifies the swimming pool outfit.
///
internal string SwimOutfit;
///
/// Gamelobbies only. Specifies the amount of gamepoints that this user has for the game in the current gamelobby.
///
internal int gamePoints;
///
/// The parent virtual user of this room user.
///
internal virtualUser User;
///
/// The status manager of this room user.
///
internal virtualRoomUserStatusManager statusManager;
///
/// Indicates if the room user is currently typing a chat message.
///
internal bool isTyping;
/// Indicates if the room user is able to use the special teleport cast, which allows him to teleport around the room.
///
internal bool SPECIAL_TELEPORTABLE;
// WOO!!!!
///
/// Turn the pettransform on or off.
///
internal bool petTransform_cat;
///
/// Turn the pettransform on or off.
///
internal bool petTransform_dog;
///
/// Turn the pettransform on or off.
///
internal bool petTransform_croc;
///
/// Initializes a virtual room user.
///
/// The database ID of the virtual user of this room user object.
/// The database ID of the room where the room user is in.
/// The ID that identifies the room user in the virtual room.
/// The parent vittual user of this room user.
/// The status manager of this room user.
internal virtualRoomUser(int userID, int roomID, int roomUID, virtualUser User, virtualRoomUserStatusManager statusManager)
{
this.userID = userID;
this.roomID = roomID;
this.roomUID = roomUID;
this.User = User;
this.statusManager = statusManager;
}
///
/// The virtualRoom object that represents the room where this room user is in.
///
internal virtualRoom Room
{
get
{
return roomManager.getRoom(roomID);
}
}
///
/// Refreshes the status of this room user in the virtual room.
///
internal void Refresh()
{
Room.Refresh(this);
}
///
/// Returns the details string for this room user, containing username etc.
///
internal string detailsString
{
get
{
if (User._isInvisible == false)
{
if (User.imitateEnabled)
{
try
{
if (userManager.containsUser(User.imitateID))
{ // see if the user is online for their info
virtualUser Target = userManager.getUser(User.imitateID);
string i = "i:" + roomUID + Convert.ToChar(13) + "a:" + userID + Convert.ToChar(13) + "n:" + Target._Username + Convert.ToChar(13) + "f:" + Target._Figure + Convert.ToChar(13) + "l:" + X + " " + Y + " " + H + Convert.ToChar(13);
if (Target._Mission != "") { i += "c:" + Target._Mission + Convert.ToChar(13); }
if (Target._Badge != "") { i += "b:" + Target._Badge + Convert.ToChar(13); }
if (Target.roomUser.swimOutfit != "") { i += "p:" + Target.roomUser.swimOutfit + Convert.ToChar(13); }
if (Target._groupID > 0) { i += "g:" + Target._groupID + Convert.ToChar(13) + "t:" + (int)Target._groupMemberRank + Convert.ToChar(13); }
return i;
}
else
{ // if not, use their database info
string[] Target = DB.runReadRow("SELECT name,figure,mission,figure_swim FROM users WHERE id = '" + User.imitateID + "'");
string TargetBadge = "";
if (DB.checkExists("SELECT badgeid FROM users_badges WHERE userid = '" + User.imitateID + "' AND iscurrent = '1'"))
TargetBadge = DB.runRead("SELECT badgeid FROM users_badges WHERE userid = '" + User.imitateID + "' AND iscurrent = '1'");
string i = "i:" + roomUID + Convert.ToChar(13) + "a:" + userID + Convert.ToChar(13) + "n:" + Target[0] + Convert.ToChar(13) + "f:" + Target[1] + Convert.ToChar(13) + "l:" + X + " " + Y + " " + H + Convert.ToChar(13);
if (Target[2] != "") { i += "c:" + Target[2] + Convert.ToChar(13); }
if (TargetBadge != "") { i += "b:" + TargetBadge + Convert.ToChar(13); }
if (Target[3] != "") { i += "p:" + Target[3] + Convert.ToChar(13); }
return i;
}
}
catch { return ""; }
}
string petTransformAdd = "";
string petTransformFigure = User._Figure;
if (User._isPet == true)
{
petTransformAdd = "7ui1";
petTransformFigure = User._petType + " 000 " + User._petColour;
}
string userName = DB.runRead("SELECT name FROM users WHERE id = '" + userID + "'");
string userMotto = DB.runRead("SELECT mission FROM users WHERE id = '" + userID + "'");
string userSex = DB.runRead("SELECT sex FROM users WHERE id = '" + userID + "'");
string s = "i:" + roomUID + Convert.ToChar(13) + "a:" + userID + Convert.ToChar(13) + "n:" + petTransformAdd + userName + Convert.ToChar(13) + "f:" + petTransformFigure + Convert.ToChar(13) + "l:" + X + " " + Y + " " + H + Convert.ToChar(13) + "c:" + userMotto + Convert.ToChar(13) + "s:" + userSex + Convert.ToChar(13);
//string s = "i:" + roomUID + Convert.ToChar(13) + "a:" + userID + Convert.ToChar(13) + "n:" + petTransformAdd + User._Username + Convert.ToChar(13) + "f:" + petTransformFigure + Convert.ToChar(13) + "l:" + X + " " + Y + " " + H + Convert.ToChar(13);
if (User._Mission != "") { s += "c:" + User._Mission + Convert.ToChar(13); }
s += "b:";
if (User._Badges.Count > 0)
{
for (int i = 0; i < User._Badges.Count; i++)
{
if (User._badgeSlotIDs[i] > 0)
{
s += User._badgeSlotIDs[i] + ":";
s += User._Badges[i];
if (i < User._Badges.Count)
s += ",";
}
}
}
s += Convert.ToChar(13);
//if (User._Badge != "") { s += "b:" + User._Badge + Convert.ToChar(13); }
if (swimOutfit != "") { s += "p:" + swimOutfit + Convert.ToChar(13); }
if (User._groupID > 0) { s += "g:" + User._groupID + Convert.ToChar(13) + "t:" + (int)User._groupMemberRank + Convert.ToChar(13); }
return s;
}
else
{
// ' + "l:" + X + " " + Y + " " + H + Convert.ToChar(13)'
return "i:" + roomUID + Convert.ToChar(13) + "a:" + userID + Convert.ToChar(13) + "n: " + Convert.ToChar(13) + "f:hd" + Convert.ToChar(13) + "[bot]" + Convert.ToChar(13) + "l:" + X + " " + Y + " 100" + Convert.ToChar(13);
}
}
}
///
/// Returns the action string for this room user, containing position, movements, statuses etc.
///
internal string statusString
{
get
{
return roomUID + " " + X + "," + Y + "," + H.ToString().Replace(",",".") + "," + Z1 + "," + Z2 + "/" + statusManager.ToString();
}
}
}
}