///////////////////////////////////////////////////////////////////////////
 // Despawn Pet
 ///////////////////////////////////////////////////////////////////////////
 public static byte[] PetSpawn(int petid, byte type, CLGameServer.WorldMgr.pet_obj o)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_PLAYER_SPAWN_PET);   //Select Opcode
     Writer.DWord(petid);                              //Pet ID
     switch (type)
     {
         case 1:
             //Despawn pet
             Writer.Byte(1);
             break;
         case 2:
             //Rename pet respawn
             Writer.Byte(5);
             Writer.Text(o.Petname);
             break;
         case 3:
             //Attack pet respawn for exp info
             Writer.Byte(3);//Static
             Writer.LWord(o.exp);//New exp
             Writer.DWord(o.OwnerID);//Owner id
             break;
     }
     return Writer.GetBytes();
 }
 public static byte[] EffectUpdate(int objectid, CLGameServer.Effect.EffectNumbers effectid, bool start)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_SKILL_EFFECTS);
     Writer.DWord(objectid);
     Writer.Byte(1);
     Writer.Bool(start);
     Writer.Byte(4); // effect change
     Writer.DWord(effectid);
     return Writer.GetBytes();
 }
 public static byte[] Pet_Information(int id, int model, int hp, int charid, CLGameServer.WorldMgr.pet_obj o)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_PET_INFORMATION);  //Select opcode
     Writer.DWord(id);                               //Horse ID
     Writer.DWord(model);                            //Horse Model
     Writer.DWord(hp);                               //Horse HP
     Writer.DWord(hp);                               //Horse SEC HP
     Writer.Byte(0);                                 //Static byte ?
     return Writer.GetBytes();
 }
 ///////////////////////////////////////////////////////////////////////////
 // Grab pet information packet
 ///////////////////////////////////////////////////////////////////////////
 public static byte[] Pet_Information_grab(CLGameServer.WorldMgr.pet_obj o, byte slot)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_PET_INFORMATION);
     try
     {
         //////////////////////////////////////////////////////////////////////////////////////
         // Grabpet structure
         //////////////////////////////////////////////////////////////////////////////////////
         Writer.DWord(o.UniqueID);                   //Unique ID
         Writer.DWord(o.Model);                      //Pet Model
         Writer.DWord(0x00006D);                     //Settings
         Writer.DWord(0x00006D);                     //Settings
         Writer.DWord(0x000047);                     //Settings 0x47 grab pet active 0 disabled
         if (o.Petname != "No name")                 //###############
             Writer.Text(o.Petname);                 // Name region
         else                                        //
             Writer.Word(0);                         //###############
         Writer.Byte(o.Slots);                       //Slots count inventory pet
         //////////////////////////////////////////////////////////////////////////////////////
         // Grabpet item inventory
         //////////////////////////////////////////////////////////////////////////////////////
         DB ms = new DB("SELECT * FROM char_items WHERE owner='" + o.OwnerID + "' AND pet_storage_id='" + o.UniqueID + "'");
         Writer.Byte(ms.Count());
         using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
         {
             while (reader.Read())
                 Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9), reader.GetInt32(30));
         }
         ms.Close();
         //////////////////////////////////////////////////////////////////////////////////////
         // Other
         //////////////////////////////////////////////////////////////////////////////////////
         Writer.DWord(o.OwnerID);                    //Character ID
         Writer.Byte(slot);                          //Slot location of the pet
         //////////////////////////////////////////////////////////////////////////////////////
     }
     catch (Exception ex)
     {
         Log.Exception(ex);
     }
     return Writer.GetBytes();
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////
 // Pet related item inventory movement
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////
 public static byte[] MoveItemPet(int itemid, byte f_slot, byte t_slot,CLGameServer.WorldMgr.pet_obj o,short info, string action)
 {
     PacketWriter Writer = new PacketWriter();
     Writer.Create(OperationCode.SERVER_ITEM_MOVE);
     switch (action)
     {
         case "MOVE_TO_PET":
         case "MOVE_FROM_PET":
                 Writer.Byte(1);
                 Writer.Byte(o.Slots);
                 Writer.DWord(itemid);
                 Writer.Byte(f_slot);
                 Writer.Byte(t_slot);
             break;
         case "MOVE_INSIDE_PET":
                 Writer.Byte(1);
                 Writer.Byte(0x10);
                 Writer.DWord(itemid);
                 Writer.Byte(f_slot);
                 Writer.Byte(t_slot);
                 Writer.Word(info);
             break;
     }
     return Writer.GetBytes();
 }