Skip to content

Events

The Events system lets mods listen to 60+ game events and emit custom cross-mod events.

Global Events

Use the Events namespace for mod-level event listening:

typescript
import { Events } from "@hotbunny/hackhub-content-sdk";

Events.on("Terminal.NmapScan", (data) => {
    console.log(`Player scanned ${data.ip}`);
});

Events.on() returns an unsubscribe function:

typescript
const unsub = Events.on("Terminal.Ping", (data) => {
    console.log(`Pinged ${data.ip}`);
});

// later...
unsub();

Quest-Scoped Events

Inside quests, always use this.Events instead of the global Events. Listeners registered through this.Events are automatically cleaned up when the quest completes or is abandoned.

typescript
@RegisterQuest
class MyQuest extends Quest {

    // ...

    OnStart() {
        this.Events.on("Terminal.NmapScan", (data) => {
            // automatically removed on complete/abandon
        });
    }

}

See the Quests guide for more details.

Custom Events

Emit and listen to custom events for cross-mod communication:

typescript
Events.emit("MyMod.ScoreUpdated", { score: 100 });

Events.on("MyMod.ScoreUpdated", (data) => {
    console.log(`Score: ${data.score}`);
});

You can optionally register event names for discoverability:

typescript
Events.register("MyMod.ScoreUpdated");

Game Events Reference

Terminal

EventPayload
Terminal.NmapScan{ ip, ports }
Terminal.Nslookup{ domain, ip }
Terminal.Ping{ ip }
Terminal.InstallPackage{ name }
Terminal.SSH.Connected{ ip, username }
Terminal.SSH.FileDownload{ ip, filename }
Terminal.Cd{ path }
Terminal.Ls{ path }
Terminal.Openssl{ file }
Terminal.SSH.Shutdown{ ip }
Terminal.Lynx.Search{ query }
Terminal.Lynx.Lookup{ query, results }
Terminal.Mxlookup{ domain }
Terminal.Ifconfig{ }

Network & Scanning

EventPayload
Terminal.Hydra{ ip, username, password }
Terminal.Whois{ domain }
Terminal.FTP.Connect{ ip }
Terminal.Dig{ domain }
Terminal.Dirhunter{ ip, directories }
Terminal.Geoip{ ip }
Terminal.Cat{ filename }
Subfinder.Results{ domain, subdomains }
Nuclei.Results{ target, vulnerabilities }

Exploitation

EventPayload
Metasploit.Msfconsole{ }
Metasploit.Search{ query }
Metasploit.Use{ module }
Metasploit.ShowOptions{ module }
Metasploit.SetOption{ key, value }
Metasploit.Event{ type }
Metasploit.Rootgrab{ ip }
Meterpreter.Connected{ ip }
Meterpreter.Download{ ip, file }
Hashcat.Event{ hash }
John.Decrypt.Hash{ hash }
Fern.FindPassword{ ssid, password }

Bettercap

EventPayload
Bettercap.Open{ }
Bettercap.Close{ }
Bettercap.NetProbe{ }
Bettercap.NetShow{ devices }
Bettercap.WifiRecon{ networks }
Bettercap.WifiDeAuth{ ssid }

Files & Browser

EventPayload
Files.Open{ filename }
Files.Transfer{ filename, direction }
Files.Deleted{ filename }
Explorer.Event{ path }
Browser.WebsiteOpened{ host }
Browser.Meta{ url }

Communication

EventPayload
Mail.Received{ from, subject }
Mail.Read{ id }
Mail.Mailbox.Opened{ }
Mail.Account.Created{ email }
Mail.Account.LoggedIn{ email }

Social

EventPayload
Twotter.Account.Created{ username }
Twotter.Account.Login{ username }
Twotter.Account.Logout{ username }
Twotter.Post.Seen{ postId }
Twotter.Post{ content }
Twotter.Profile.Seen{ username }
Kisscord.FriendAdded{ userId }
Kisscord.Messaging{ contactId }
WeeChat.Connected{ host }
WeeChat.Disconnected{ host }
WeeChat.Message{ host, content }

Other

EventPayload
Bank.Transfer{ amount, from, to }
Bank.Account.Created{ iban }
Bank.Logout{ }
Quest.Claimed{ questName }
Database.Connected{ ip }
Database.DataUpdate{ table }
Sqlmap.ListTables{ ip, tables }
Sqlmap.DumpTable{ ip, table }
Network.PortChanges{ ip, ports }
Network.UserActivity{ ip, username }
Network.WifiConnected{ ssid }
PFSense.Login{ ip }
PFSense.Changes{ ip }
Process.Killed{ name, pid }
Wireshark.Started{ }
Wireshark.Stopped{ }
Python3.ExecFile{ filename }
BCC.News.Opened{ }
Remote.Connection.Established{ ip }
Remote.Connection.Disconnected{ ip }

INFO

Requires the events permission in your manifest.json.

HotBunny Interactive Entertainment Inc.