Habbo Hotel automation scripts including: - Game solvers (Snake, Color Puzzle, Tetris, Flappy Bird, Flood-IT) - Room utilities (Autogate, One-Way Door, Furni Scanner) - Bot tools (Heal Bot, Pet Trainer, User Collector) - Trading & economy (Furni-Matic, Seed Trade, Trade Spam) Cleaned up: removed 5 duplicates and 2 broken scripts, renamed 37 gibberish filenames to descriptive names.
246 lines
7.5 KiB
C#
246 lines
7.5 KiB
C#
/// @name User Collector + Auto Hopper
|
|
/// @desc Sammelt User-Namen und hoppt automatisch durch Raeume
|
|
/// @author OpenCode
|
|
/// @scripter 1.0.0-beta.136
|
|
|
|
// ============ EINSTELLUNGEN ============
|
|
int minUsers = 5; // Minimum User im Raum
|
|
int waitInRoom = 6000; // Wie lange in jedem Raum bleiben (ms)
|
|
int delayBetweenRooms = 2000; // Pause zwischen Raumwechsel (ms)
|
|
// ========================================
|
|
|
|
// Pfad zur Ausgabedatei auf dem Desktop
|
|
var desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
|
|
var outputFile = Path.Combine(desktopPath, "HabboUserList.txt");
|
|
|
|
// HashSet um Duplikate zu vermeiden
|
|
var collectedUsers = new HashSet<string>();
|
|
|
|
// Besuchte Raeume tracken
|
|
var visitedRooms = new HashSet<long>();
|
|
|
|
// Raeume Queue - sortiert nach User-Anzahl
|
|
var roomQueue = new List<(long Id, string Name, int UserCount)>();
|
|
|
|
// Lade bereits gesammelte User aus der Datei (falls vorhanden)
|
|
if (File.Exists(outputFile))
|
|
{
|
|
var lines = File.ReadAllLines(outputFile);
|
|
foreach (var line in lines)
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(line))
|
|
collectedUsers.Add(line.Trim());
|
|
}
|
|
Log($"Loaded: {collectedUsers.Count} users from file");
|
|
}
|
|
|
|
Log("=================================");
|
|
Log("User Collector + Auto Hopper");
|
|
Log($"Min. users per room: {minUsers}");
|
|
Log("=================================");
|
|
Log("HOW TO USE:");
|
|
Log("1. Open Navigator in game");
|
|
Log("2. Click 'Rooms' -> 'Popular'");
|
|
Log("3. Script catches the rooms");
|
|
Log("4. Type :start to begin hopping");
|
|
Log("=================================");
|
|
Log("Commands: :start :stop :status :reset");
|
|
Log("=================================");
|
|
|
|
// Hopping aktiv?
|
|
bool isHopping = false;
|
|
|
|
// Event: Wenn jemand den Raum betritt
|
|
OnEntityAdded(e => {
|
|
if (e.Entity is IRoomUser user)
|
|
{
|
|
var userName = user.Name;
|
|
if (collectedUsers.Add(userName))
|
|
{
|
|
File.AppendAllText(outputFile, userName + "\n");
|
|
Log($"+ {userName}");
|
|
}
|
|
}
|
|
});
|
|
|
|
// Intercept Navigator Suchergebnisse (Navigator2)
|
|
OnIntercept(In.Navigator2SearchResultBlocks, e => {
|
|
try
|
|
{
|
|
var packet = e.Packet;
|
|
var searchCode = packet.ReadString();
|
|
var filterText = packet.ReadString();
|
|
var blockCount = packet.ReadInt();
|
|
|
|
int foundRooms = 0;
|
|
|
|
for (int b = 0; b < blockCount; b++)
|
|
{
|
|
var blockCode = packet.ReadString();
|
|
var blockText = packet.ReadString();
|
|
var actionAllowed = packet.ReadInt();
|
|
var forceClosed = packet.ReadBool();
|
|
var roomCount = packet.ReadInt();
|
|
|
|
for (int r = 0; r < roomCount; r++)
|
|
{
|
|
var roomId = packet.ReadLong();
|
|
var roomName = packet.ReadString();
|
|
var ownerId = packet.ReadLong();
|
|
var ownerName = packet.ReadString();
|
|
var doorMode = packet.ReadInt();
|
|
var userCount = packet.ReadInt();
|
|
var maxUsers = packet.ReadInt();
|
|
var description = packet.ReadString();
|
|
var tradeMode = packet.ReadInt();
|
|
var score = packet.ReadInt();
|
|
var ranking = packet.ReadInt();
|
|
var categoryId = packet.ReadInt();
|
|
|
|
// Tags
|
|
var tagCount = packet.ReadInt();
|
|
for (int t = 0; t < tagCount; t++)
|
|
packet.ReadString();
|
|
|
|
// Flags
|
|
var flags = packet.ReadInt();
|
|
if ((flags & 1) != 0) packet.ReadString();
|
|
if ((flags & 2) != 0) packet.ReadString();
|
|
if ((flags & 4) != 0) { packet.ReadString(); packet.ReadLong(); packet.ReadString(); }
|
|
|
|
// Raum hinzufuegen
|
|
if (userCount >= minUsers && !visitedRooms.Contains(roomId))
|
|
{
|
|
if (!roomQueue.Any(x => x.Id == roomId))
|
|
{
|
|
roomQueue.Add((roomId, roomName, userCount));
|
|
foundRooms++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (foundRooms > 0)
|
|
{
|
|
// Sort by user count (most first)
|
|
roomQueue = roomQueue.OrderByDescending(x => x.UserCount).ToList();
|
|
Log($"+ {foundRooms} new rooms found! (Total: {roomQueue.Count})");
|
|
Status($"Queue: {roomQueue.Count} rooms | Users: {collectedUsers.Count}");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log($"Parse-Fehler: {ex.Message}");
|
|
}
|
|
});
|
|
|
|
// Chat-Befehl zum Starten
|
|
OnIntercept(Out.Chat, e => {
|
|
var msg = e.Packet.ReadString(0);
|
|
if (msg == ":start")
|
|
{
|
|
e.Block();
|
|
if (roomQueue.Count > 0)
|
|
{
|
|
isHopping = true;
|
|
Log($"Starting hopping through {roomQueue.Count} rooms...");
|
|
}
|
|
else
|
|
{
|
|
Log("No rooms in queue! Open Navigator -> Popular");
|
|
}
|
|
}
|
|
else if (msg == ":stop")
|
|
{
|
|
e.Block();
|
|
isHopping = false;
|
|
Log("Hopping stopped.");
|
|
}
|
|
else if (msg == ":status")
|
|
{
|
|
e.Block();
|
|
Log($"Queue: {roomQueue.Count} | Visited: {visitedRooms.Count} | Users: {collectedUsers.Count}");
|
|
}
|
|
else if (msg == ":reset")
|
|
{
|
|
e.Block();
|
|
visitedRooms.Clear();
|
|
roomQueue.Clear();
|
|
Log("Reset! Open Navigator again.");
|
|
}
|
|
});
|
|
|
|
// Hauptschleife
|
|
while (Run)
|
|
{
|
|
// User im aktuellen Raum sammeln
|
|
if (IsInRoom)
|
|
{
|
|
foreach (var user in Users)
|
|
{
|
|
if (collectedUsers.Add(user.Name))
|
|
{
|
|
File.AppendAllText(outputFile, user.Name + "\n");
|
|
Log($"+ {user.Name}");
|
|
}
|
|
}
|
|
}
|
|
|
|
// Hopping wenn aktiv
|
|
if (isHopping && roomQueue.Count > 0)
|
|
{
|
|
var room = roomQueue[0];
|
|
roomQueue.RemoveAt(0);
|
|
|
|
if (!visitedRooms.Contains(room.Id))
|
|
{
|
|
visitedRooms.Add(room.Id);
|
|
Log($">>> {room.Name} ({room.UserCount} User)");
|
|
|
|
Send(Out.GoToFlat, room.Id, "", -1);
|
|
Delay(3500);
|
|
|
|
if (IsInRoom)
|
|
{
|
|
// User sammeln
|
|
foreach (var user in Users)
|
|
{
|
|
if (collectedUsers.Add(user.Name))
|
|
{
|
|
File.AppendAllText(outputFile, user.Name + "\n");
|
|
Log($"+ {user.Name}");
|
|
}
|
|
}
|
|
|
|
Status($"Users: {collectedUsers.Count} | Rooms: {visitedRooms.Count} | Queue: {roomQueue.Count}");
|
|
|
|
// Warten
|
|
Delay(waitInRoom);
|
|
|
|
// Nochmal sammeln (fuer Joiner)
|
|
foreach (var user in Users)
|
|
{
|
|
if (collectedUsers.Add(user.Name))
|
|
{
|
|
File.AppendAllText(outputFile, user.Name + "\n");
|
|
Log($"+ {user.Name}");
|
|
}
|
|
}
|
|
}
|
|
|
|
Delay(delayBetweenRooms);
|
|
}
|
|
}
|
|
else if (isHopping && roomQueue.Count == 0)
|
|
{
|
|
isHopping = false;
|
|
Log($"=== DONE! ===");
|
|
Log($"Visited: {visitedRooms.Count} rooms");
|
|
Log($"Collected: {collectedUsers.Count} users");
|
|
Log("Open Navigator for more rooms, then :start");
|
|
}
|
|
|
|
Status($"Users: {collectedUsers.Count} | Queue: {roomQueue.Count}");
|
|
Delay(1000);
|
|
}
|