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; }
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()); } }