using System;
using System.Data;
using System.Text;
using System.Threading;
using System.Collections;
using Xoa.Virtual.Gangs;
using Xoa.Managers;
using Xoa.Virtual.Rooms;
using Microsoft.VisualBasic;
using Ion.Storage;
namespace Xoa.Virtual.Rooms.Bots
{
///
/// Represents a virtual user in a virtual room.
///
public class virtualRoomBot
{
///
/// The database ID of the user.
///
internal int botID;
///
/// 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;
///
/// 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;
/// The room user ID (rUID) of the virtual user where this virtual user is currently trading items with. If not trading, then this value is -1.
///
internal int _tradePartnerRoomUID = -1;
///
/// 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 virtualBot Bot;
///
/// The status manager of this room user.
///
internal virtualRoomBotStatusManager 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 = false;
private delegate void walkSleepPointer();
///
/// 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 virtualRoomBot(int botID, int roomID, int roomUID, virtualBot Bot, virtualRoomBotStatusManager statusManager)
{
this.botID = botID;
this.roomID = roomID;
this.roomUID = roomUID;
this.Bot = Bot;
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
{
using (DatabaseClient dbClient = Xoa.Eucalypt.dbManager.GetClient())
{
if (Bot.Animal != "-1")
{
// old pet string
//string s = "i:" + roomUID + Convert.ToChar(13) + "n:" + roomUID + Convert.ToChar(4) + Bot.Name + Convert.ToChar(13) + "f:" + Bot.Animal + " " + Bot.Animal + " " + Bot.Colour + Convert.ToChar(13) + "l:" + X + " " + Y + " " + H + Convert.ToChar(13);
//s += "c:" + Convert.ToChar(13);
//return s;
string Figure = Bot.Animal + " " + Bot.Animal + " " + Bot.Colour + "";
string s = "i:" + roomUID + Convert.ToChar(13) + "n:" + roomUID + Convert.ToChar(4) + Bot.Name + Convert.ToChar(13) + "f:" + Figure + Convert.ToChar(13) + "l:" + X + " " + Y + " " + H + Convert.ToChar(13);
s += "c:" + Convert.ToChar(13);
return s;
}
else
{
string s = "i:" + roomUID + Convert.ToChar(13) + "a:-1" + Convert.ToChar(13) + "n:" + Bot.Name + Convert.ToChar(13) + "f:" + Bot.Figure + Convert.ToChar(13) + "l:" + X + " " + Y + " " + H + Convert.ToChar(13);
if (Bot.Mission != "")
{
s += "c:" + Bot.Mission + Convert.ToChar(13);
}
s += "b:" + "1:NWB" + Convert.ToChar(13);
return s;
}
}
}
}
///
/// Returns the action string for this room user, containing position, movements, statuses etc.
///
internal string statusString
{
get
{
string s = roomUID + " " + X + "," + Y + "," + H.ToString().Replace(",", ".") + "," + Z1 + "," + Z2 + "/";
foreach (string Key in statusManager._Statuses.Keys)
{
s += Key;
string Value = (string)statusManager._Statuses[Key];
if (Value != "")
s += " " + Value;
s += "/";
}
return s;
}
}
}
}