コード例 #1
0
ファイル: Gamemap.cs プロジェクト: BjkGkh/Azure2
 /// <summary>
 /// Destroys this instance.
 /// </summary>
 internal void Destroy()
 {
     _userMap.Clear();
     Model.Destroy();
     CoordinatedItems.Clear();
     Array.Clear(GameMap, 0, GameMap.Length);
     Array.Clear(EffectMap, 0, EffectMap.Length);
     Array.Clear(ItemHeightMap, 0, ItemHeightMap.Length);
     _userMap = null;
     GameMap = null;
     EffectMap = null;
     ItemHeightMap = null;
     CoordinatedItems = null;
     Model = null;
     UserRoom = null;
     StaticModel = null;
 }
コード例 #2
0
ファイル: DynamicRoomModel.cs プロジェクト: BjkGkh/Azure2
 /// <summary>
 /// Destroys this instance.
 /// </summary>
 internal void Destroy()
 {
     Array.Clear(SqState, 0, SqState.Length);
     Array.Clear(SqFloorHeight, 0, SqFloorHeight.Length);
     Array.Clear(SqSeatRot, 0, SqSeatRot.Length);
     _staticModel = null;
     Heightmap = null;
     SqState = null;
     SqFloorHeight = null;
     SqSeatRot = null;
 }
コード例 #3
0
ファイル: RoomManager.cs プロジェクト: kessiler/azureEmulator
 /// <summary>
 ///     Update the existent model.
 /// </summary>
 /// <param name="model">The model.</param>
 internal void UpdateCustomModel(uint roomId, RoomModel modelData)
 {
     var modelId = $"custom_{roomId}";
     if (_roomModels.Contains(modelId))
     {
         _roomModels[modelId] = modelData;
     }
     else
     {
         _roomModels.Add(modelId, modelData);
     }
 }
コード例 #4
0
ファイル: DynamicRoomModel.cs プロジェクト: BjkGkh/Azure2
 /// <summary>
 /// Initializes a new instance of the <see cref="DynamicRoomModel"/> class.
 /// </summary>
 /// <param name="pModel">The p model.</param>
 /// <param name="room">The room.</param>
 internal DynamicRoomModel(RoomModel pModel, Room room)
 {
     _staticModel = pModel;
     DoorX = _staticModel.DoorX;
     DoorY = _staticModel.DoorY;
     DoorZ = _staticModel.DoorZ;
     DoorOrientation = _staticModel.DoorOrientation;
     Heightmap = _staticModel.Heightmap;
     MapSizeX = _staticModel.MapSizeX;
     MapSizeY = _staticModel.MapSizeY;
     ClubOnly = _staticModel.ClubOnly;
     _mRoom = room;
     Generate();
 }
コード例 #5
0
ファイル: Rooms.cs プロジェクト: kessiler/azureEmulator
        internal void SaveHeightmap()
        {
            if (Session != null && Session.GetHabbo() != null)
            {
                var room = Session.GetHabbo().CurrentRoom;

                if (room == null)
                {
                    Session.SendNotif(Azure.GetLanguage().GetVar("user_is_not_in_room"));
                    return;
                }

                if (!room.CheckRights(Session, true))
                {
                    Session.SendNotif(Azure.GetLanguage().GetVar("user_is_not_his_room"));
                    return;
                }

                var heightMap = Request.GetString();
                var doorX = Request.GetInteger();
                var doorY = Request.GetInteger();
                var doorOrientation = Request.GetInteger();
                var wallThickness = Request.GetInteger();
                var floorThickness = Request.GetInteger();
                var wallHeight = Request.GetInteger();

                if (heightMap.Length < 2)
                {
                    Session.SendNotif(Azure.GetLanguage().GetVar("invalid_room_length"));
                    return;
                }

                if (wallThickness < -2 || wallThickness > 1)
                    wallThickness = 0;

                if (floorThickness < -2 || floorThickness > 1)
                    floorThickness = 0;

                if (doorOrientation < 0 || doorOrientation > 8)
                    doorOrientation = 2;

                if (wallHeight < -1 || wallHeight > 16)
                    wallHeight = -1;

                char[] validLetters =
                {
                    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
                    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', '\r'
                };
                if (heightMap.Any(letter => !validLetters.Contains(letter)))
                {
                    Session.SendNotif(Azure.GetLanguage().GetVar("user_floor_editor_error"));

                    return;
                }

                if (heightMap.Last() == Convert.ToChar(13))
                    heightMap = heightMap.Remove(heightMap.Length - 1);

                if (heightMap.Length > 1800)
                {
                    var message = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));
                    message.AppendString("floorplan_editor.error");
                    message.AppendInteger(1);
                    message.AppendString("errors");
                    message.AppendString(
                        "(general): too large height (max 64 tiles)\r(general): too large area (max 1800 tiles)");
                    Session.SendMessage(message);

                    return;
                }

                if (heightMap.Split((char)13).Length - 1 < doorY)
                {
                    var message = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));
                    message.AppendString("floorplan_editor.error");
                    message.AppendInteger(1);
                    message.AppendString("errors");
                    message.AppendString("Y: Door is in invalid place.");
                    Session.SendMessage(message);

                    return;
                }

                var lines = heightMap.Split((char)13);
                var lineWidth = lines[0].Length;
                for (var i = 1; i < lines.Length; i++)
                    if (lines[i].Length != lineWidth)
                    {
                        var message = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));
                        message.AppendString("floorplan_editor.error");
                        message.AppendInteger(1);
                        message.AppendString("errors");
                        message.AppendString("(general): Line " + (i + 1) + " is of different length than line 1");
                        Session.SendMessage(message);

                        return;
                    }
                var doorZ = 0.0;
                var charDoor = lines[doorY][doorX];
                if (charDoor >= (char)97 && charDoor <= 119) // a-w
                {
                    doorZ = charDoor - 87;
                }
                else
                {
                    double.TryParse(charDoor.ToString(), out doorZ);
                }
                using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
                {
                    queryReactor.SetQuery("REPLACE INTO rooms_models_customs (roomid,door_x,door_y,door_z,door_dir,heightmap,poolmap) VALUES ('" + room.RoomId + "', '" + doorX + "','" +
                                      doorY + "','" + doorZ.ToString(CultureInfo.InvariantCulture).Replace(',', '.') + "','" + doorOrientation + "',@newmodel,'')");
                    queryReactor.AddParameter("newmodel", heightMap);
                    queryReactor.RunQuery();

                    room.RoomData.WallHeight = wallHeight;
                    room.RoomData.WallThickness = wallThickness;
                    room.RoomData.FloorThickness = floorThickness;
                    room.RoomData.Model.DoorZ = doorZ;

                    Azure.GetGame().GetAchievementManager().ProgressUserAchievement(Session, "ACH_RoomDecoHoleFurniCount", 1);

                    queryReactor.RunFastQuery(
                        string.Format(
                            "UPDATE rooms_data SET model_name = 'custom', wallthick = '{0}', floorthick = '{1}', walls_height = '{2}' WHERE id = {3};",
                            wallThickness, floorThickness, wallHeight, room.RoomId));
                    RoomModel roomModel = new RoomModel(doorX, doorY, doorZ, doorOrientation, heightMap, "", false, "");
                    Azure.GetGame().GetRoomManager().UpdateCustomModel(room.RoomId, roomModel);
                    room.ResetGameMap("custom", wallHeight, wallThickness, floorThickness);
                    Azure.GetGame().GetRoomManager().UnloadRoom(room, "Reload floor");

                    var forwardToRoom = new ServerMessage(LibraryParser.OutgoingRequest("RoomForwardMessageComposer"));
                    forwardToRoom.AppendInteger(room.RoomId);
                    Session.SendMessage(forwardToRoom);
                }
            }
        }
コード例 #6
0
ファイル: RoomData.cs プロジェクト: BjkGkh/Azure2
 /// <summary>
 /// Resets the model.
 /// </summary>
 internal void ResetModel()
 {
     _model = AzureEmulator.GetGame().GetRoomManager().GetModel(ModelName, Id);
 }
コード例 #7
0
ファイル: RoomData.cs プロジェクト: BjkGkh/Azure2
 /// <summary>
 /// Fills the null.
 /// </summary>
 /// <param name="id">The identifier.</param>
 internal void FillNull(uint id)
 {
     Id = id;
     Name = "Unknown Room";
     Description = "-";
     Type = "private";
     Owner = "-";
     Category = 0;
     UsersNow = 0;
     UsersMax = 0;
     ModelName = "NO_MODEL";
     CCTs = string.Empty;
     Score = 0;
     Tags = new List<string>();
     AllowPets = true;
     AllowPetsEating = false;
     AllowWalkThrough = true;
     HideWall = false;
     PassWord = string.Empty;
     WallPaper = "0.0";
     Floor = "0.0";
     LandScape = "0.0";
     WallThickness = 0;
     FloorThickness = 0;
     Group = null;
     AllowRightsOverride = false;
     Event = null;
     GameId = 0;
     WhoCanBan = 0;
     WhoCanKick = 0;
     WhoCanMute = 0;
     TradeState = 2;
     State = 0;
     RoomChat = new ConcurrentStack<Chatlog>();
     WordFilter = new List<string>();
     WallHeight = -1;
     _model = AzureEmulator.GetGame().GetRoomManager().GetModel(ModelName, Id);
     CompetitionStatus = 0;
 }
コード例 #8
0
ファイル: RoomData.cs プロジェクト: BjkGkh/Azure2
        /// <summary>
        /// Fills the specified row.
        /// </summary>
        /// <param name="row">The row.</param>
        internal void Fill(DataRow row)
        {
            try
            {
                Id = Convert.ToUInt32(row["id"]);
                Name = (string)row["caption"];
                PassWord = (string)row["password"];
                Description = (string)row["description"];
                Type = (string)row["roomtype"];
                Owner = (string)row["owner"];
                OwnerId = 0;
                RoomChat = new ConcurrentStack<Chatlog>();
                WordFilter = new List<string>();

                using (var queryReactor = AzureEmulator.GetDatabaseManager().GetQueryReactor())
                {
                    queryReactor.SetQuery("SELECT id FROM users WHERE username = @name");
                    queryReactor.AddParameter("name", Owner);
                    uint integer = Convert.ToUInt32(queryReactor.GetInteger());

                    OwnerId = integer != uint.MinValue ? Convert.ToInt32(integer) : 0;

                    queryReactor.SetQuery(string.Format("SELECT user_id, message, timestamp FROM users_chatlogs WHERE room_id= '{0}' ORDER BY timestamp ASC LIMIT 150", Id));
                    var table = queryReactor.GetTable();
                    foreach (DataRow dataRow in table.Rows)
                    {
                        RoomChat.Push(new Chatlog((uint)dataRow[0], (string)dataRow[1], AzureEmulator.UnixToDateTime(int.Parse(dataRow[2].ToString())), true, Id));
                    }

                    queryReactor.SetQuery(string.Format("SELECT word FROM rooms_wordfilter WHERE room_id = '{0}'", Id));
                    DataTable tableFilter = queryReactor.GetTable();

                    foreach (DataRow dataRow in tableFilter.Rows)
                    {
                        WordFilter.Add(dataRow["word"].ToString());
                    }
                }
                var roomState = row["state"].ToString().ToLower();

                switch (roomState)
                {
                    case "locked":
                        State = 1;
                        break;

                    case "password":
                        State = 2;
                        break;

                    case "open":
                    default:
                        State = 0;
                        break;
                }

                ModelName = (string)row["model_name"];
                WallPaper = (string)row["wallpaper"];
                Floor = (string)row["floor"];
                LandScape = (string)row["landscape"];
                CCTs = (string)row["public_ccts"];

                int.TryParse(row["trade_state"].ToString(), out TradeState);
                int.TryParse(row["category"].ToString(), out Category);
                int.TryParse(row["walls_height"].ToString(), out WallHeight);
                int.TryParse(row["score"].ToString(), out Score);
                int.TryParse(row["floorthick"].ToString(), out FloorThickness);
                int.TryParse(row["wallthick"].ToString(), out WallThickness);
                int.TryParse(row["chat_type"].ToString(), out ChatType);
                int.TryParse(row["game_id"].ToString(), out GameId);
                int.TryParse(row["mute_settings"].ToString(), out WhoCanMute);
                int.TryParse(row["kick_settings"].ToString(), out WhoCanKick);
                int.TryParse(row["ban_settings"].ToString(), out WhoCanBan);

                uint.TryParse(row["users_now"].ToString(), out UsersNow);
                uint.TryParse(row["users_max"].ToString(), out UsersMax);
                int.TryParse(row["group_id"].ToString(), out GroupId);
                uint.TryParse(row["chat_balloon"].ToString(), out ChatBalloon);
                uint.TryParse(row["chat_speed"].ToString(), out ChatSpeed);
                uint.TryParse(row["chat_max_distance"].ToString(), out ChatMaxDistance);
                uint.TryParse(row["chat_flood_protection"].ToString(), out ChatFloodProtection);

                AllowPets = AzureEmulator.EnumToBool(row["allow_pets"].ToString());
                AllowPetsEating = AzureEmulator.EnumToBool(row["allow_pets_eat"].ToString());
                AllowWalkThrough = AzureEmulator.EnumToBool(row["allow_walkthrough"].ToString());
                HideWall = AzureEmulator.EnumToBool(row["hidewall"].ToString());

                AllowRightsOverride = false;

                Group = AzureEmulator.GetGame().GetGroupManager().GetGroup(GroupId);
                Event = AzureEmulator.GetGame().GetRoomEvents().GetEvent(Id);
                _model = AzureEmulator.GetGame().GetRoomManager().GetModel(ModelName, Id);
                CompetitionStatus = 0;

                /*
                var dictionary = new Dictionary<int, int>();
                if (!string.IsNullOrEmpty(row["icon_items"].ToString()))
                {
                    string[] array = row["icon_items"].ToString().Split('|');
                    foreach (string text in array)
                    {
                        if (string.IsNullOrEmpty(text))
                        {
                            continue;
                        }
                        string[] array2 = text.Replace('.', ',').Split(',');
                        int key = 0;
                        int value = 0;
                        int.TryParse(array2[0], out key);
                        if (array2.Length > 1)
                        {
                            int.TryParse(array2[1], out value);
                        }
                        try
                        {
                            if (!dictionary.ContainsKey(key))
                            {
                                dictionary.Add(key, value);
                            }
                        }
                        catch (Exception ex)
                        {
                            Logging.LogException("Exception: " + ex + "[" + text + "]");
                        }
                    }
                }
                 */

                Tags = new List<string>();

                if (row.IsNull("tags") || !string.IsNullOrEmpty(row["tags"].ToString()))
                    return;

                foreach (var item in row["tags"].ToString().Split(','))
                    Tags.Add(item);
            }
            catch (Exception ex)
            {
                Logging.LogException("Exception on RoomData Loading (Fill Void): " + ex);
            }
        }