示例#1
0
        internal void AppendPetsUpdateString(IQueryAdapter dbClient)
        {
            QueryChunk inserts = new QueryChunk("INSERT INTO bots (id,user_id,room_id,name,x,y,z) VALUES ");
            QueryChunk Inserts = new QueryChunk("INSERT INTO bots_petdata (type,race,color,experience,energy,createstamp,nutrition,respect) VALUES ");
            QueryChunk updates = new QueryChunk();

            List<uint> petsSaved = new List<uint>();
            foreach (Pet pet in GetPets())
            {
                if (petsSaved.Contains(pet.PetId))
                    continue;

                petsSaved.Add(pet.PetId);
                if (pet.DBState == DatabaseUpdateState.NeedsInsert)
                {
                    inserts.AddParameter(pet.PetId + "name", pet.Name);
                    Inserts.AddParameter(pet.PetId + "race", pet.Race);
                    Inserts.AddParameter(pet.PetId + "color", pet.Color);
                    inserts.AddQuery("(" + pet.PetId + "," + pet.OwnerId + "," + pet.RoomId + ",@" + pet.PetId + "name,0,0,0)");
                    Inserts.AddQuery("(" + pet.Type + ",@" + pet.PetId + "race,@" + pet.PetId + "color,0,100,'" + pet.CreationStamp + "',0,0)");
                }
                else if (pet.DBState == DatabaseUpdateState.NeedsUpdate)
                {
                    updates.AddParameter(pet.PetId + "name", pet.Name);
                    updates.AddParameter(pet.PetId + "race", pet.Race);
                    updates.AddParameter(pet.PetId + "color", pet.Color);
                    updates.AddQuery("UPDATE bots SET room_id = " + pet.RoomId + ", name = @" + pet.PetId + "name, x = " + pet.X + ", Y = " + pet.Y + ", Z = " + pet.Z + " WHERE id = " + pet.PetId);
                    updates.AddQuery("UPDATE bots_petdata SET race = @" + pet.PetId + "race, color = @" + pet.PetId + "color, type = " + pet.Type + ", experience = " + pet.experience + ", " +
                        "energy = " + pet.Energy + ", nutrition = " + pet.Nutrition + ", respect = " + pet.Respect + ", createstamp = '" + pet.CreationStamp + "' WHERE id = " + pet.PetId);
                }

                pet.DBState = DatabaseUpdateState.Updated;
            }

            inserts.Execute(dbClient);
            updates.Execute(dbClient);

            inserts.Dispose();
            updates.Dispose();

            inserts = null;
            updates = null;
        }
示例#2
0
        internal void RunDBUpdate()
        {
            //DateTime Start = DateTime.Now;
            try
            {
                if (mRemovedItems.Count > 0 || mAddedItems.Count > 0 || InventoryPets.Count > 0)
                {

                    QueryChunk queries = new QueryChunk();

                    if (mAddedItems.Count > 0) //This should be checked more carefully
                    {
                        foreach (UserItem Item in mAddedItems.Values)
                        {
                            queries.AddQuery("UPDATE items SET user_id = " + UserId + ", room_id='' WHERE id = " + Item.Id);
                        }
                        mAddedItems.Clear();
                    }
                    if (mRemovedItems.Count > 0)
                    {
                        try
                        {
                            foreach (UserItem Item in mRemovedItems.Values)
                            {
                                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                                {
                                    //Item GetRoom = SilverwaveEnvironment.GetGame().GetItemManager().GetItem(Item.Id);
                                    //room.GetRoomItemHandler().SaveFurniture(dbClient);
                                    //if(GetClient().GetHabbo().CurrentRoom != null)
                                        GetClient().GetHabbo().CurrentRoom.GetRoomItemHandler().SaveFurniture(dbClient);
                                    //else
                                        //queries.AddQuery("UPDATE items SET room_id='', x='', y='', z='', rot='' WHERE id = " + Item.Id + " ");
                                    //mRemovedItems.Clear();
                                }
                                //queries.AddQuery("UPDATE items SET room_id='1', user_id='' WHERE id=" + Item.Id);
                                if (discs.ContainsKey(Item.Id))
                                    discs.Remove(Item.Id);
                            }
                        }
                        catch (Exception)
                        {
                            //Console.WriteLine("Error caught: " + e);
                        }
                        mRemovedItems.Clear();
                    }

                    foreach (Pet pet in InventoryPets.Values)
                    {
                        if (pet.DBState == DatabaseUpdateState.NeedsUpdate)
                        {

                            queries.AddParameter(pet.PetId + "name", pet.Name);
                            queries.AddParameter(pet.PetId + "race", pet.Race);
                            queries.AddParameter(pet.PetId + "color", pet.Color);
                            queries.AddQuery("UPDATE bots SET room_id = " + pet.RoomId + ", name = @" + pet.PetId + "name, x = " + pet.X + ", Y = " + pet.Y + ", Z = " + pet.Z + " WHERE id = " + pet.PetId);
                                queries.AddQuery("UPDATE bots_petdata SET race = @" + pet.PetId + "race, color = @" + pet.PetId + "color, type = " + pet.Type + ", experience = " + pet.experience + ", " +
                                "energy = " + pet.Energy + ", nutrition = " + pet.Nutrition + ", respect = " + pet.Respect + ", createstamp = '" + pet.CreationStamp + "' WHERE id = " + pet.PetId);
                        }
                        pet.DBState = DatabaseUpdateState.Updated;
                    }

                    using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                    {
                        queries.Execute(dbClient);
                    }
                }
            }
            catch (Exception e)
            {
                Logging.LogCacheError("FATAL ERROR DURING USER INVENTORY DB UPDATE: " + e.ToString());
            }
        }
示例#3
0
        public void SaveFurniture(IQueryAdapter dbClient, GameClient Session = null)
        {
            try
            {
                if (mAddedItems.Count > 0 || mRemovedItems.Count > 0 || mMovedItems.Count > 0 || room.GetRoomUserManager().PetCount > 0)
                {
                    QueryChunk standardQueries = new QueryChunk();
                    QueryChunk itemInserts = new QueryChunk();
                    QueryChunk extradataInserts = new QueryChunk();

                    foreach (RoomItem Item in mRemovedItems.Values)
                    {
                        standardQueries.AddQuery("UPDATE items SET room_id='', x='', y='', z='', rot='' WHERE id = " + Item.Id + " ");
                    }

                    if (mAddedItems.Count > 0)
                    {
                        foreach (RoomItem Item in mAddedItems.Values)
                        {
                            if (!string.IsNullOrEmpty(Item.ExtraData))
                            {
                                extradataInserts.AddQuery("UPDATE items SET extra_data=@edata" + Item.Id + " WHERE id='" + Item.Id + "'");
                                extradataInserts.AddParameter("edata" + Item.Id, Item.ExtraData);
                            }

                            if (Item.IsFloorItem)
                            {
                                itemInserts.AddQuery("UPDATE items SET room_id=" + Item.RoomId + ", x=" + Item.GetX + ", y=" + Item.GetY + ", z=" + Item.GetZ + ", rot=" + Item.Rot + " WHERE id='" + Item.Id + "'");
                            }
                            else
                            {
                                itemInserts.AddQuery("UPDATE items SET room_id='" + Item.RoomId + "',wall_pos='" + Item.wallCoord + "' WHERE id='" + Item.Id + "'");
                            }
                        }

                    }

                    foreach (RoomItem Item in mMovedItems.Values)
                    {

                        if (!string.IsNullOrEmpty(Item.ExtraData))
                        {
                            standardQueries.AddQuery("UPDATE items SET extra_data = @EData" + Item.Id + " WHERE id='" + Item.Id + "'");
                            standardQueries.AddParameter("EData" + Item.Id, Item.ExtraData);
                        }

                        if (Item.IsWallItem && (!Item.GetBaseItem().Name.Contains("wallpaper_single") || !Item.GetBaseItem().Name.Contains("floor_single") || !Item.GetBaseItem().Name.Contains("landscape_single")))
                        {
                            standardQueries.AddQuery("UPDATE items SET wall_pos='" + Item.wallCoord + "' WHERE id=" + Item.Id + "");
                        }
                        else if (Item.GetBaseItem().Name.Contains("wallpaper_single") || Item.GetBaseItem().Name.Contains("floor_single") || Item.GetBaseItem().Name.Contains("landscape_single"))
                        {
                            standardQueries.AddQuery("DELETE FROM items WHERE id=" + Item.Id + " LIMIT 1");
                        }
                        else
                        {
                            standardQueries.AddQuery("UPDATE items SET x=" + Item.GetX + ", y=" + Item.GetY + ", z=" + Item.GetZ + ", rot=" + Item.Rot + " WHERE id=" + Item.Id + "");
                        }
                    }

                    room.GetRoomUserManager().AppendPetsUpdateString(dbClient);

                    if (Session != null)
                        Session.GetHabbo().GetInventoryComponent().RunDBUpdate();

                    mAddedItems.Clear();
                    mRemovedItems.Clear();
                    mMovedItems.Clear();

                    standardQueries.Execute(dbClient);
                    itemInserts.Execute(dbClient);
                    extradataInserts.Execute(dbClient);

                    standardQueries.Dispose();
                    itemInserts.Dispose();
                    extradataInserts.Dispose();

                    standardQueries = null;
                    itemInserts = null;
                    extradataInserts = null;
                }
            }
            catch (Exception e)
            {
                Logging.LogCriticalException("Error during saving furniture for room " + room.RoomId + ". Stack: " + e.ToString());
            }
        }