BCStorm Buy pet fix

Results 1 to 11 of 11
  1. #1
    [̲̅$̲̅(̲̅1̲̅)̲̅$ ̲̅] leenster is offline
    MemberRank
    May 2008 Join Date
    KanaadaLocation
    992Posts

    BCStorm Buy pet fix

    This should fix the bug where you buy a pet and it wont show up in your inventory right away.

    Find
    PHP Code:
    internal static Pet CreatePet(uint UserIdstring Nameint Typestring Racestring Color
    And replace that method with this one.

    PHP Code:
    internal static Pet CreatePet(uint UserIdstring Nameint Typestring Racestring Color)
            {
                
    GameClient clientByUserID ButterflyEnvironment.GetGame().GetClientManager().GetClientByUserID(UserId);
                
    Pet pet = new Pet(0x194UserId0Name, (uintTypeRaceColor01001000, (double) ButterflyEnvironment.GetUnixTimestamp(), 000.000, -1false) {
                    
    DBState DatabaseUpdateState.NeedsUpdate
                
    };
                
    using (IQueryAdapter adapter ButterflyEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    if (
    adapter.dbType == DatabaseType.MSSQL)
                    {
                        
    adapter.setQuery(string.Concat(new object[] { "INSERT INTO user_pets (user_id,name,type,race,color,expirience,energy,createstamp,nutrition,respect,x,y,z) OUTPUT INSERTED.* VALUES ("pet.OwnerId",@name,"pet.Type",@race,@color,0,100,'"pet.CreationStamp"',0,0,0,0,0)" }));
                    }
                    else
                    {
                        
    adapter.setQuery(string.Concat(new object[] { "INSERT INTO user_pets (user_id,name,type,race,color,expirience,energy,createstamp) VALUES ("pet.OwnerId",@name,"pet.Type",@race,@color,0,100,'"pet.CreationStamp"')" }));
                    }
                    
    adapter.addParameter("name"pet.Name);
                    
    adapter.addParameter("race"pet.Race);
                    
    adapter.addParameter("color"pet.Color);
                    
    pet.PetId = (uintadapter.insertQuery();
                }
                
    clientByUserID.GetHabbo().GetInventoryComponent().AddPet(pet);
                
    ButterflyEnvironment.GetGame().GetAchievementManager().ProgressUserAchievement(clientByUserID"ACH_PetLover"1);
                
    clientByUserID.SendMessage(clientByUserID.GetHabbo().GetInventoryComponent().SerializePetInventory());
                
                return 
    pet;
            } 

    That should fix it.
    Last edited by leenster; 15-01-13 at 07:13 AM.


  2. #2
    Member iDamien is offline
    MemberRank
    Aug 2012 Join Date
    65Posts

    Re: BCStorm Buy pet fix

    Thank you!

  3. #3
    Member Andy2000 is offline
    MemberRank
    Jan 2013 Join Date
    96Posts

    Re: BCStorm Buy pet fix

    Thanks but which folder?

  4. #4
    Member iDamien is offline
    MemberRank
    Aug 2012 Join Date
    65Posts

    Re: BCStorm Buy pet fix

    Butterfly/HabboHotel/catalogs/catalog.cs

  5. #5
    [̲̅$̲̅(̲̅1̲̅)̲̅$ ̲̅] leenster is offline
    MemberRank
    May 2008 Join Date
    KanaadaLocation
    992Posts

    Re: BCStorm Buy pet fix

    HabboHotel/Catalogs/Catalog.cs

  6. #6
    Owner of Habbo.ac iRaged is offline
    MemberRank
    Nov 2011 Join Date
    229Posts

    Re: BCStorm Buy pet fix

    Thank you. My MySQL error logs have been filling up with this!

  7. #7
    [̲̅$̲̅(̲̅1̲̅)̲̅$ ̲̅] leenster is offline
    MemberRank
    May 2008 Join Date
    KanaadaLocation
    992Posts

    Re: BCStorm Buy pet fix

    Quote Originally Posted by iRaged View Post
    Thank you. My MySQL error logs have been filling up with this!
    You probably get some more SQL errors related to pets.....

    Here are some other fixes for that

    In RoomUserManager.cs find

    PHP Code:
    internal void AppendPetsUpdateString(IQueryAdapter dbClient
    Replace that whole method with this one

    PHP Code:
    internal void AppendPetsUpdateString(IQueryAdapter dbClient)
            {
                
    QueryChunk chunk = new QueryChunk("INSERT INTO user_pets (id,user_id,room_id,name,type,race,color,expirience,energy,createstamp,nutrition,respect,z,y,z) VALUES ");
                
    QueryChunk chunk2 = new QueryChunk();
                List<
    uint> list = new List<uint>();
                
                foreach (
    Pet pet in this.GetPets())
                {
                    if (!list.
    Contains(pet.PetId))
                    {
                        list.
    Add(pet.PetId);
                        
                        if (
    pet.DBState == DatabaseUpdateState.NeedsInsert)
                        {
                            
    chunk.AddParameter("name"pet.Name);
                            
    chunk.AddParameter("race"pet.Race);
                            
    chunk.AddParameter("color"pet.Color);
                            
    chunk.AddQuery(string.Concat(new object[] { 
                                
    "("pet.PetId","pet.OwnerId","pet.RoomId",@name,"pet.Type",@race,@color,0,100,'"pet.CreationStamp
                                
    "',0,0,0,0,0)"
                             
    }));
                            
    chunk.Execute(dbClient);
                            
    chunk.Dispose();
                           
                        }

                        else if (
    pet.DBState == DatabaseUpdateState.NeedsUpdate)
                        {
                            
    chunk2.AddParameter("name"pet.Name);
                            
    chunk2.AddParameter("race"pet.Race);
                            
    chunk2.AddParameter("color"pet.Color);
                            
    chunk2.AddQuery(string.Concat(new object[] { 
                                
    "UPDATE user_pets SET room_id = "pet.RoomId", name = @name, race = @race, color = @color, type = "pet.Type", expirience = "pet.Expirience", energy = "pet.Energy", nutrition = "pet.Nutrition
                                
    ", respect = "pet.Respect", createstamp = '"pet.CreationStamp"', x = "pet.X", Y = "pet.Y", Z = "pet.Z" WHERE id = "pet.PetId
                             
    }));
                            
    chunk2.Execute(dbClient);
                            
    chunk2.Dispose();
                            
                        }
                        
                        
    pet.DBState DatabaseUpdateState.Updated;
                    }
                }
                
    chunk null;
                
    chunk2 null;
            } 

    In InventoryComponents.cs find

    PHP Code:
    internal void RunDBUpdate() 
    Replace that entire method with this one

    PHP Code:
    internal void RunDBUpdate()
            {
                try
                {
                    if (((
    this.mRemovedItems.Count 0) || (this.mAddedItems.Count 0)) || (this.InventoryPets.Count 0))
                    {
                        
    using (IQueryAdapter adapter ButterflyEnvironment.GetDatabaseManager().getQueryreactor())
                        {
                            if (
    this.mAddedItems.Count 0)
                            {
                                foreach (
    UserItem item in this.mAddedItems.Values)
                                {
                                    
    adapter.runFastQuery(string.Concat(new object[] { "UPDATE items_users SET user_id = "this.UserId" WHERE item_id = "item.Id }));
                                }
                                
    this.mAddedItems.Clear();
                            }
                            if (
    this.mRemovedItems.Count 0)
                            {
                                foreach (
    uint num in this.mRemovedItems.ToArray())
                                {
                                    
    adapter.runFastQuery(string.Concat(new object[] { "DELETE FROM items_users WHERE item_id="num" AND user_id="this.UserId }));
                                }
                                
    this.mRemovedItems.Clear();
                            }
                            foreach (
    Pet pet in this.InventoryPets.Values)
                            {
                                if (
    pet.DBState == DatabaseUpdateState.NeedsUpdate)
                                {
                                    
    adapter.addParameter("name"pet.Name);
                                    
    adapter.addParameter("race"pet.Race);
                                    
    adapter.addParameter("color"pet.Color);
                                    
    adapter.runFastQuery(string.Concat(new object[] { 
                                        
    "UPDATE user_pets SET room_id = "pet.RoomId", name = @name, race = @race, color = @color, type = "pet.Type", expirience = "pet.Expirience", energy = "pet.Energy", nutrition = "pet.Nutrition
                                        
    ", respect = "pet.Respect", createstamp = '"pet.CreationStamp"', x = "pet.X", Y = "pet.Y", Z = "pet.Z" WHERE id = "pet.PetId
                                     
    }));
                                }
                                
    pet.DBState DatabaseUpdateState.Updated;
                            }
                        }
                    }
                }
                catch (
    Exception exception)
                {
                    
    Logging.LogCacheError("FATAL ERROR DURING USER INVENTORY DB UPDATE: " exception.ToString());
                }
            } 
    That should fix all SQL errors related to pets.

  8. #8
    Owner of Habbo.ac iRaged is offline
    MemberRank
    Nov 2011 Join Date
    229Posts

    Re: BCStorm Buy pet fix

    I'll see if this works. I haven't logged any SQL errors since I have changed the original part but I will have to see as users use them.

  9. #9
    Boomshakalaka resize is offline
    MemberRank
    Dec 2011 Join Date
    286Posts

    Re: BCStorm Buy pet fix

    Thanks Leenster!

  10. #10
    Apprentice Fiorenzito is offline
    MemberRank
    Jan 2012 Join Date
    14Posts

    Re: BCStorm Buy pet fix

    Quote Originally Posted by leenster View Post
    This should fix the bug where you buy a pet and it wont show up in your inventory right away.

    Find
    PHP Code:
    internal static Pet CreatePet(uint UserIdstring Nameint Typestring Racestring Color
    And replace that method with this one.

    PHP Code:
    internal static Pet CreatePet(uint UserIdstring Nameint Typestring Racestring Color)
            {
                
    GameClient clientByUserID ButterflyEnvironment.GetGame().GetClientManager().GetClientByUserID(UserId);
                
    Pet pet = new Pet(0x194UserId0Name, (uintTypeRaceColor01001000, (double) ButterflyEnvironment.GetUnixTimestamp(), 000.000, -1false) {
                    
    DBState DatabaseUpdateState.NeedsUpdate
                
    };
                
    using (IQueryAdapter adapter ButterflyEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    if (
    adapter.dbType == DatabaseType.MSSQL)
                    {
                        
    adapter.setQuery(string.Concat(new object[] { "INSERT INTO user_pets (user_id,name,type,race,color,expirience,energy,createstamp,nutrition,respect,x,y,z) OUTPUT INSERTED.* VALUES ("pet.OwnerId",@name,"pet.Type",@race,@color,0,100,'"pet.CreationStamp"',0,0,0,0,0)" }));
                    }
                    else
                    {
                        
    adapter.setQuery(string.Concat(new object[] { "INSERT INTO user_pets (user_id,name,type,race,color,expirience,energy,createstamp) VALUES ("pet.OwnerId",@name,"pet.Type",@race,@color,0,100,'"pet.CreationStamp"')" }));
                    }
                    
    adapter.addParameter("name"pet.Name);
                    
    adapter.addParameter("race"pet.Race);
                    
    adapter.addParameter("color"pet.Color);
                    
    pet.PetId = (uintadapter.insertQuery();
                }
                
    clientByUserID.GetHabbo().GetInventoryComponent().AddPet(pet);
                
    ButterflyEnvironment.GetGame().GetAchievementManager().ProgressUserAchievement(clientByUserID"ACH_PetLover"1);
                
    clientByUserID.SendMessage(clientByUserID.GetHabbo().GetInventoryComponent().SerializePetInventory());
                
                return 
    pet;
            } 

    That should fix it.
    Why???

  11. #11
    Member SilWare is offline
    MemberRank
    Aug 2012 Join Date
    Spaichingen, GeLocation
    93Posts

    Re: BCStorm Buy pet fix

    Could you give us a right SWF Pack ?



Advertisement