Facebook 

SMFHacks.com - Celebrating 20 Years!

+-

SMFHacks.com

+- User Information

Welcome, Guest.
Please login or register.
 
 
 
Forgot your password?

+- Forum Stats

Members
Total Members: 4340
Latest: damahi5899
New This Month: 2
New This Week: 1
New Today: 0
Stats
Total Posts: 44288
Total Topics: 7676
Most Online Today: 353
Most Online Ever: 27044
(May 30, 2026, 09:10:16 pm)
Users Online
Members: 0
Guests: 215
Total: 215

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - SMFHacks

Pages: [1] 2 3 ... 22
1
News / Downloads Pro 7.0 Released
« on: October 07, 2026, 07:35:30 pm »
We are proud to announce a major release of Downloads Pro 7.0 for SMF 2.1.x. This has been rebuilt for SMF 2.1 with many new features/layout updates to make it easier/friendly to users. Browser previews of items, Users can now sell downloads, author dashboard, clamav antivirus scanning, api, smf package server mode (if you are offering modifications for smf) and much more!

Screenshots: https://www.smfhacks.com/index.php?action=gallery;cat=7

Demo:
https://www.smfhacks.com/demos21/index.php?action=downloads

Order information: https://www.smfhacks.com/download-system-pro.php Existing active license owners and community suite members this upgrade is included.


Full changelog below.

7.0
Rebuilt for SMF 2.1 only (PHP 7.4 - 8.4). Upgrades 6.x in place.

SMF 2.1 integration
+No core file edits: everything uses SMF 2.1 hooks (credits per post, menu, permissions, admin, Who's Online)
+SMF alerts and emails for comments, approvals, new downloads, new versions, credits, reports, mentions, access requests, review replies, purchases and sales
+Profile Downloads tab, profile menu entry, member data export
+Likes on downloads and comments, @mentions in comments
+Moderation Center queues and home block, board index "Latest downloads" block
+[download]ID[/download] BBCode with an editor button
+Scheduled tasks replace downs3cron.php; settings use SMF's settings API and admin search
+Deleting a member cleans up their personal data; their downloads stay (or are removed, optional)
+Proper uninstall with "remove data"

Downloads and versions
+Versions and releases: post updates with release notes and release type, keep older versions downloadable per category, update approval, versions and changelog tabs
+SHA-256 checksums with copy button and VirusTotal link; duplicate upload detection
+Each version has its own download count; downloads of extra files and older versions still add to the download's total, as in 6.x
+Drafts, scheduled publishing, unlisted and private downloads with access requests
+Co-authors, edit history with restore
+Chunked/resumable uploads for files larger than PHP's upload limit, bulk upload, import from a URL
+ClamAV malware scanning of uploads
+In-browser previews: audio/video players, PDF, text files, ZIP contents (only for members who could download the file for free; can be switched off)
+Settings to show or hide the SHA-256 checksum and the VirusTotal link
+Typed custom fields with validation, visibility per group and search filters
+All file types are accepted by default, as in 6.x, including server scripts (.php, .asp, .htaccess) and files without an extension; optional list of allowed types (forum-wide or per category, * = every type) and of blocked types
+Tags (old keywords are converted), featured downloads
+HTTP Range/resume, X-Sendfile / X-Accel-Redirect / LiteSpeed delivery, S3-compatible storage (R2, B2, Wasabi, Spaces, MinIO)
+Per-group bandwidth per day, uploads per day, concurrent downloads and speed limits

Browsing and community
+New responsive card layout, GLightbox screenshots (replaces Highslide), dark-theme friendly styles
+Grid or list view for download lists: the admin picks the default and whether visitors may switch
+Trending this week and recently updated blocks, faceted search
+Reviews with author replies and helpful votes, follow downloads/categories/authors, favorites and collections
+Author pages, author directory and author dashboard
+RSS feeds for updates and per author (UTF-8, enclosures), XML sitemap, optional search-engine friendly URLs
+schema.org structured data for Google rich results: SoftwareApplication / DigitalDocument with price (0 for free downloads), star rating, screenshot, version, file size, author, software type and operating system (settings), BreadcrumbList on download and category pages; Open Graph and X/Twitter card tags
+Sharing to X, Mastodon, Reddit, Facebook, LinkedIn, WhatsApp, Telegram, email and the Web Share API

Credits and store
+Credit ledger with a member statement; Stripe Checkout for credit packages
+Pay-per-download with PayPal, Stripe and Coinbase; coupons; license keys with an activation API; My purchases
+Free and discount membergroups (SMF Paid Subscriptions) and credits per paid subscription
+Store reports with creator revenue

Administration
+Overview dashboard, health check with storage self-test, link checker
+Drag and drop category ordering in Manage Categories and on the category lists (download managers)
!The upgrade renames columns that older versions created with other letter case (for example id_cat) to the expected names
+Recycle bin, bulk moderation (approve, move, change owner, set price, feature)
+Log retention and IP anonymisation, import from forum attachments
+JSON API with API keys, outgoing webhooks (Discord-aware), SMF Package Server mode
!Removed SMF 1.1/2.0 code, Highslide (CC BY-NC), the old Flash uploader and other unused files

2
News / Newsletter Pro 4.0 Released
« on: September 23, 2026, 08:08:24 pm »
We have just released Newsletter Pro with features and improvements focused on the SMF 2.1 version
Main changes is no file edits any more for SMF 2.1, bounce handling via imap, List-Unsubscribe and List-Unsubscribe-Post headers.


Full changelog:
4.0
+SMF 2.1: no core files are edited any more. The mod plugs in through integration hooks (NewsProHooks.php) and the scheduled task's "callable", so SMF updates no longer break it. Uninstall the previous version before installing this one.
+One click unsubscribe. Newsletters now carry the List-Unsubscribe and List-Unsubscribe-Post headers that Gmail and Yahoo have required from bulk senders since 2024. Mail without them gets throttled or sent to spam whatever it contains. On by default, with an optional mailto: address as well.
+Bounce handling for everyone, not just Amazon SES. Point the mod at a mailbox that collects your bounces and a new hourly task reads it, records the failures and stops mailing dead addresses. It understands standard delivery status notifications, "this is spam" feedback reports and several common non-standard layouts. POP3 and IMAP are both supported without needing a PHP extension.
+Country lookups rebuilt around MaxMind's current format. A GeoLite2 country database is now included and installed into your Sources folder, so report flags work out of the box and IPv6 addresses are recognised. The mod uses the geoip extension or the PECL reader when the host has them and a reader built into the mod otherwise. Replace Sources/GeoLite2-Country.mmdb with a fresh download from MaxMind whenever you want newer data.
+Signups now record when and from what address someone joined a list and when they confirmed it, shown on the list screen, so consent can be evidenced.
+Sending to a saved list from the newsletter page is now done in batches like the rest of the newsletter, and the progress bar covers the list too.
+Importing a list inserts in batches rather than one query per address, which is far quicker on a large import, and skips duplicates.
+Added email validation for syntax.
+Added indexes on key columns for bigger forums for performance.
+Country flags are installed on SMF 2.0 and 2.1 as well, so the reports no longer show broken flag images.
+The browse button on the image hosting add and edit screens now offers only gif, jpg, jpeg and png rather than every file on the computer.
!The title box on the add image, edit image and add list screens had a malformed size attribute that swallowed the value after it, so editing an image never showed its current title.
!Reports counted every newsletter but only listed those whose list still existed, so deleting a list left empty pages at the end of the report index. Reports whose list has gone are listed again, with the stats intact.
!The Links, List, Viewers, Clickers and Unsubscribe screens showed 20 rows a page but paged in tens, so every page repeated half of the one before it and the page numbers ran on past the end.
!The admin screens read a page offset that SMF only sets for board and topic links, which logged a warning on PHP 8 on every first visit.
!A page offset past the end of the results, or a negative one, now lands on a real page instead of showing nothing.
!Scheduling a campaign against membergroups instead of a saved list failed with "please select a list". The list check ran before the groups were looked at.
!Scheduling a campaign with both a saved list and groups ticked silently threw the chosen list away and used the groups. The saved list is now used and the groups ignored, which is what the label on the page says.
!Generated list tables could collide and quietly share one table between two lists, because the name came from a 12 hour clock with no am/pm marker.
!Recounting a list whose table had already been deleted raised a PHP 8 warning and then ran a broken query.
!Fixed a fatal error on any host that has PHP's geoip extension installed: the bundled geoip.php redeclared two of its functions, which took down the whole Newsletter Pro admin area.
!Addresses on the unsubscribe list were still mailed when sending to a saved list from the newsletter page.
!Members in an excluded membergroup were counted as sent and added to the tracking list even though they never received the newsletter.
!Sending a newsletter as personal messages sent the wrong message body.
!The list total was not recounted when only a saved list was sent (no membergroups selected), so the new list showed 0 addresses.
!Links containing & (written as & by the editor) redirected to the wrong address.
!{$board_url} links were tracked before being replaced, so the tracked link led nowhere.
!Messages that already had their own <html> tag got no unsubscribe link or tracking pixel.
!Links longer than 255 characters no longer fail on strict MySQL servers.
!Scheduled campaigns failed on PHP 8 (SET SQL_BIG_SELECTS call), and a campaign whose list or message had been deleted was retried every few minutes forever.
!Amazon SES handler (newsaws.php): hard bounces and complaints were never logged (broken SQL, wrong table name) and the SNS classes were called without their namespace.
!List tables are created with the forum's own engine and character set rather than a hardcoded MyISAM and utf8. A list in a different collation from the members table could not use its email index, which made sending to a large list far slower than it needed to be. Existing lists can be converted from the Lists screen.
!The unsubscribe list now holds one row per address. Repeated opt outs used to pile up and slow the check down on every send.
!Signup, unsubscribe, confirmation and tracking requests now use escaped database queries instead of building SQL from the request.
!The signup form's thank-you URL is only followed when it is a real http(s) address.
!Unsubscribe and confirmation link hashes now include a secret that is generated when the mod is installed.
!The settings form was missing its session check.
!Uninstall did not remove the scheduled task on SMF 2.x.
!Fixed error log message when sending a pm.
!Fixed error logged if no message, no list selected when scheduling a campaign.
!Removed the unused Google+ and Personalize buttons from the editor toolbar.



For more information on Newsletter Pro visit
https://www.smfhacks.com/newsletter-pro.php

Existing active customers can download from
https://www.smfhacks.com/index.php/topic,2407.0.html

If you need to renew your license. The renewal page is found at:
https://www.smfhacks.com/index.php?action=license


3
MCP Server for SMF 2.1 is out. It gives your forum a Model Context Protocol endpoint, which means AI assistants such as Claude Code, Claude Desktop, claude.ai, ChatGPT connectors and Cursor can
  connect to your forum and do admin work for you, in plain English.

  What that looks like in practice
 
  • "Summarize the open reports and tell me which ones are actual spam."
  • "Find accounts that registered in the last 48 hours from the same IP range with zero posts, and ban the obvious bots."
  • "Why are members not getting their activation emails?" - it checks the mail queue and scheduled tasks and tells you.
  • "Post the maintenance announcement in News, pin it and lock it."
  • "How did last week compare to the previous month?"
  • "Move the old boards under an Archive category and hide it from guests."

  51 tools across six areas
 
  • Moderation: reported posts and members with reporter comments, close / ignore reports, moderator notes, the approval queue, warnings with the watch / moderate / mute thresholds, post removal and
      topic deletion (recycle board aware).
  • Members: search by name, email, IP range, date, post count or status; full profiles with warning history; every IP a member used and other accounts sharing them; login history; approve or reject
      registrations; member groups; bans; personal messages.
  • Content: read and search topics, create topics and replies, edit posts, lock / pin / move, create and reorder boards and categories, board visibility per group.
  • Settings and stats: read and change every setting the admin panel shows, activity stats with period comparison, top posters / boards / topics, who is online.
  • Logs and maintenance: admin, moderation and error logs, scheduled task status and run-now, mail queue status, recount.

  Built for administrators, safely
 
  • Every call runs as the administrator who created the key, through SMF's own permission system. Demote that account and the key stops working.
  • Every write and delete is recorded in the admin log with the tool and the target. The admin page shows recent activity.
  • Deleting tools are flagged as destructive, so the assistant asks you before calling them.
  • Administrators cannot be banned, deleted, warned or demoted through the endpoint. Password hashes, salts and the key itself are never returned.
  • Rate limited per key. Works with two-factor authentication on the admin account.
  • No Node.js, no extra services: one PHP file plus a few Sources files, installed through the package manager with no core edits.

  Setup takes about five minutes
  1. Install the package.
  2. Go to Admin -> Configuration -> MCP / AI Access and click Generate key.
  3. Paste the endpoint into your client. The admin page shows the exact commands for Claude Code, Claude Desktop, claude.ai and Cursor.

  Requirements: SMF 2.1.x on MySQL, PHP 7.4 or newer, and an MCP client.

  Price: $15.99, one-time, including a year of updates. Community Suite members get it as part of the bundle.

  Product page and purchase

4
For SMF 2.0.x not organized but you can follow logic here.


❯ Can we add on this screen
Registration Successful

Thank you for registering. You will receive an email soon with a link to activate your account. If you don't receive an email after some time, check your spam folder.
index.php?action=join2 Show the users email address and give them the option to change it if they want. If they change it, it resends them an activation link to that email
address.

● Searched for 1 pattern, read 1 file (ctrl+o to expand)

● Now let me see the template after sub-template:

● Searched for 2 patterns, read 1 file (ctrl+o to expand)

● Now let me look at the Activate function to understand how email changes and re-sending work:

● Read 1 file (ctrl+o to expand)

● Now I understand the full picture. The existing Activate function already supports email change + resend, but requires the user to go to ?action=activate and enter their username/password. I need to:

  1. Pass the member ID and email to the "after" template
  2. Add a form to change email and resend activation
  3. Handle the form submission in Register.php

● Read 1 file (ctrl+o to expand)

● Now I need to also check if $memberID and the email are available at this point. Let me check what $regOptions contains:

● Searched for 3 patterns (ctrl+o to expand)

● Good. At the point where the "after" template is shown, $memberID and $regOptions['email'] are available. Now let me also check what the register3 action routes to — I need a handler for the email change
  form:

● Searched for 1 pattern (ctrl+o to expand)

● OK so register3 maps to Register2(). I'll add a new action for the email change. The cleanest approach is to handle it within the existing Activate function since it already has all the email-change + resend
  logic. But for the "after registration" screen, I'll store the member ID in session and add a simple form handler.

  Let me implement this:

● Update(Sources\Register.php)
  ⎿  Added 7 lines, removed 1 line
      1117        'page_title' => $txt['register'],
      1118        'title' => $txt['registration_successful'],
      1119        'sub_template' => 'after',
      1120 -      'description' => $modSettings['registration_method'] == 2 ? $txt['approval_after_registration'] : $txt['activate_after_registration']
      1120 +      'description' => $modSettings['registration_method'] == 2 ? $txt['approval_after_registration'] : $txt['activate_after_registration'],
      1121 +      'reg_member_id' => $memberID,
      1122 +      'reg_email' => $regOptions['email'],
      1123 +      'reg_needs_activation' => ($modSettings['registration_method'] == 1),
      1124      );
      1125 +
      1126 +    // Store in session so the email change form can use it
      1127 +    $_SESSION['reg_member_id'] = $memberID;
      1128    }
      1129    else
      1130    {

● Now add a function to handle the email change + resend from the registration success page. I'll add it at the end of Register.php before the closing ?>:

● Searched for 1 pattern, read 1 file (ctrl+o to expand)

● Now add the email change handler and register the action route:

● Update(Sources\Register.php)
  ⎿  Added 96 lines
      1602  return $ipoc[3].".".$ipoc[2].".".$ipoc[1].".".$ipoc[0];
      1603  }
      1604
      1605 +/**
      1606 + * Handle email change + resend activation from the registration success page.
      1607 + */
      1608 +function ChangeRegEmail()
      1609 +{
      1610 +  global $context, $txt, $modSettings, $scripturl, $sourcedir, $smcFunc, $language;
      1611 +
      1612 +  // Must have a valid session member ID from registration
      1613 +  if (empty($_SESSION['reg_member_id']))
      1614 +    fatal_lang_error('no_access', false);
      1615 +
      1616 +  $memberID = (int) $_SESSION['reg_member_id'];
      1617 +
      1618 +  // Look up the member
      1619 +  $request = $smcFunc['db_query']('', '
      1620 +    SELECT id_member, validation_code, member_name, real_name, email_address, is_activated, lngfile
      1621 +    FROM {db_prefix}members
      1622 +    WHERE id_member = {int:id_member}
      1623 +    LIMIT 1',
      1624 +    array('id_member' => $memberID)
      1625 +  );
      1626 +
      1627 +  if ($smcFunc['db_num_rows']($request) == 0)
      1628 +    fatal_lang_error('no_access', false);
      1629 +
      1630 +  $row = $smcFunc['db_fetch_assoc']($request);
      1631 +  $smcFunc['db_free_result']($request);
      1632 +
      1633 +  // Only allow for accounts pending activation (is_activated = 0 or 2)
      1634 +  if ($row['is_activated'] != 0 && $row['is_activated'] != 2)
      1635 +    fatal_lang_error('no_access', false);
      1636 +
      1637 +  loadTemplate('Register');
      1638 +  loadLanguage('Login');
      1639 +
      1640 +  $new_email = !empty($_POST['new_email']) ? trim($_POST['new_email']) : '';
      1641 +  $email_updated = false;
      1642 +
      1643 +  if (!empty($new_email) && $new_email !== $row['email_address'])
      1644 +  {
      1645 +    checkSession('post');
      1646 +
      1647 +    // Validate email
      1648 +    if (filter_var($new_email, FILTER_VALIDATE_EMAIL) === false || strlen($new_email) > 255)
      1649 +      fatal_error(sprintf($txt['valid_email_needed'], htmlspecialchars($new_email)), false);
      1650 +
      1651 +    // Make sure it's not banned
      1652 +    isBannedEmail($new_email, 'cannot_register', $txt['ban_register_prohibited']);
      1653 +
      1654 +    // Make sure nobody else has it
      1655 +    $check = $smcFunc['db_query']('', '
      1656 +      SELECT id_member
      1657 +      FROM {db_prefix}members
      1658 +      WHERE email_address = {string:email}
      1659 +        AND id_member != {int:id_member}
      1660 +      LIMIT 1',
      1661 +      array('email' => $new_email, 'id_member' => $memberID)
      1662 +    );
      1663 +    if ($smcFunc['db_num_rows']($check) != 0)
      1664 +      fatal_lang_error('email_in_use', false, array(htmlspecialchars($new_email)));
      1665 +    $smcFunc['db_free_result']($check);
      1666 +
      1667 +    // Update the email
      1668 +    updateMemberData($memberID, array('email_address' => $new_email));
      1669 +    $row['email_address'] = $new_email;
      1670 +    $email_updated = true;
      1671 +  }
      1672 +
      1673 +  // Resend the activation email (whether email changed or just resend requested)
      1674 +  require_once($sourcedir . '/Subs-Post.php');
      1675 +
      1676 +  $replacements = array(
      1677 +    'REALNAME' => $row['real_name'],
      1678 +    'USERNAME' => $row['member_name'],
      1679 +    'ACTIVATIONLINK' => $scripturl . '?action=activate;u=' . $row['id_member'] . ';code=' . $row['validation_code'],
      1680 +    'ACTIVATIONLINKWITHOUTCODE' => $scripturl . '?action=activate;u=' . $row['id_member'],
      1681 +    'ACTIVATIONCODE' => $row['validation_code'],
      1682 +    'FORGOTPASSWORDLINK' => $scripturl . '?action=reminder',
      1683 +  );
      1684 +
      1685 +  $emaildata = loadEmailTemplate('resend_activate_message', $replacements, empty($row['lngfile']) || empty($modSettings['userLanguage']) ? $language : $row['lngfile']);
      1686 +  sendmail($row['email_address'], $emaildata['subject'], $emaildata['body'], null, null, false, 0);
      1687 +
      1688 +  $context += array(
      1689 +    'page_title' => $txt['register'],
      1690 +    'title' => $txt['registration_successful'],
      1691 +    'sub_template' => 'after',
      1692 +    'description' => $txt['activate_after_registration'],
      1693 +    'reg_member_id' => $memberID,
      1694 +    'reg_email' => $row['email_address'],
      1695 +    'reg_needs_activation' => true,
      1696 +    'reg_email_sent' => true,
      1697 +    'reg_email_updated' => $email_updated,
      1698 +  );
      1699 +}
      1700 +
      1701  ?>
      1702  No newline at end of file

● Now add the action route in index.php:

● Read 1 file (ctrl+o to expand)

● Update(index.php)
  ⎿  Added 1 line
      1168      'register' => array('Register.php', 'Register'),
      1169      'register2' => array('Register.php', 'Register2'),
      1171 +    'changeregemail' => array('Register.php', 'ChangeRegEmail'),
      1172      'reminder' => array('Reminder.php', 'RemindMe'),
      1173      'removepoll' => array('Poll.php', 'RemovePoll'),
      1174      'removetopic2' => array('RemoveTopic.php', 'RemoveTopic2'),

● Also allow guests to access this action (same as register/activate):

● Read 1 file (ctrl+o to expand)

● Update(index.php)
  ⎿  Added 1 line, removed 1 line
      1025      }
      1026    }
      1027    // If guest access is off, a guest can only do one of the very few following actions.
      1028 -  elseif (empty($modSettings['allow_guestAccess']) && $user_info['is_guest'] && (!isset($_REQUEST['action']) || !in_array($_REQUEST['action'], array('oasl_registration', 'oasl_callback',
          -'coppa', 'login', 'login2', 'register', 'register2', 'register3',  'reminder', 'activate', 'help', 'smstats', 'mailq', 'verificationcode', 'openidreturn'))))
      1028 +  elseif (empty($modSettings['allow_guestAccess']) && $user_info['is_guest'] && (!isset($_REQUEST['action']) || !in_array($_REQUEST['action'], array('oasl_registration', 'oasl_callback',
          +'coppa', 'login', 'login2', 'register', 'register2', 'register3', 'changeregemail', 'reminder', 'activate', 'help', 'smstats', 'mailq', 'verificationcode', 'openidreturn'))))
      1029    {
      1030      require_once($sourcedir . '/Subs-Auth.php');
      1031      return 'KickGuest';

● Now update the template to show the email and change form:

● Update(Themes\default\Register.template.php)
  ⎿  Added 39 lines, removed 1 line
      623        </div>
      624        <div class="windowbg">
      625          <span class="topslice"><span></span></span>
      626 -        <p class="content">', $context['description'], '</p>
      626 +        <p class="content">', $context['description'], '</p>';
      627 +
      628 +  // Show email and option to change it (only for activation-required registrations)
      629 +  if (!empty($context['reg_needs_activation']) && !empty($context['reg_email']))
      630 +  {
      631 +    // Success message if email was just updated or resent
      632 +    if (!empty($context['reg_email_sent']))
      633 +    {
      634 +      if (!empty($context['reg_email_updated']))
      635 +        echo '
      636 +        <div style="background: #e8f5e9; border: 1px solid #4caf50; border-radius: 4px; padding: 10px 14px; margin: 10px 0; color: #2e7d32;">
      637 +          <strong>Email updated!</strong> A new activation link has been sent to <strong>', htmlspecialchars($context['reg_email']), '</strong>.
      638 +        </div>';
      639 +      else
      640 +        echo '
      641 +        <div style="background: #e3f2fd; border: 1px solid #42a5f5; border-radius: 4px; padding: 10px 14px; margin: 10px 0; color: #1565c0;">
      642 +          <strong>Activation email resent</strong> to <strong>', htmlspecialchars($context['reg_email']), '</strong>. Check your inbox and spam folder.
      643 +        </div>';
      644 +    }
      645 +
      646 +    echo '
      647 +        <div style="background: #f8f9fa; border: 1px solid #ddd; border-radius: 6px; padding: 14px; margin-top: 12px;">
      648 +          <div style="margin-bottom: 8px;">
      649 +            <strong>Activation email sent to:</strong>
      650 +            <span style="font-size: 15px; color: #333; margin-left: 4px;">', htmlspecialchars($context['reg_email']), '</span>
      651 +          </div>
      652 +          <p style="font-size: 12px; color: #777; margin: 4px 0 12px;">Wrong email address? Update it below and we\'ll send a new activation link.</p>
      653 +          <form action="', $scripturl, '?action=changeregemail" method="post">
      654 +            <div style="display: flex; gap: 6px; align-items: center; flex-wrap: wrap;">
      655 +              <input type="email" name="new_email" value="', htmlspecialchars($context['reg_email']), '" size="30" maxlength="255"
      656 +                style="padding: 6px 10px; border: 1px solid #ccc; border-radius: 4px; font-size: 14px; flex: 1; min-width: 200px;" />
      657 +              <input type="submit" value="Update &amp; Resend" style="padding: 6px 16px; background: #4a90d9; color: #fff; border: none; border-radius: 4px; cursor: pointer; font-size: 13px;
          + font-weight: 600;" />
      658 +            </div>
      659 +            <input type="hidden" name="sc" value="', $context['session_id'], '" />
      660 +          </form>
      661 +        </div>';
      662 +  }
      663 +
      664 +  echo '
      665          <span class="botslice"><span></span></span>
      666        </div>
      667      </div>';

5
Latest Mods / [Mod]Weekly Email Digest
« on: April 06, 2026, 11:39:34 pm »
Weekly Email Digest



https://www.smfhacks.com/index.php?action=downloads;sa=view;down=264

Weekly Digest
Version: 1.0.0
Compatible with: SMF 2.0.x and SMF 2.1.x
License: BSD

Description:
Sends an email to your members every week showing the most popular topics. An email with the most viewed topics from the past week is sent to all members that have logged in within the past 30 days. If a member does not want to receive the Weekly Digest email, they can unsubscribe by clicking the link provided in the email or the link in the forum footer.

This is an opt-out mod. All active members are automatically subscribed.

Features:
  • Only members who have logged in within a configurable number of days will receive the digest.
  • Option to exclude specific boards from the digest.
  • Option to set the number of topics included in the email.
  • Option to group topics by board name.
  • Option to send a test email to a specific address.
  • Adds an unsubscribe/subscribe link to the forum footer.
  • One-click unsubscribe from email with confirmation page.
  • Respects the "Receive site mailings" member setting.
  • All language strings prefixed with weeklydigest_ for convenience.


Admin Settings:
Admin > Configuration > Weekly Digest

Scheduled Task:
The digest schedule can be adjusted from:
Admin > Maintenance > Scheduled Tasks > Weekly Digest

Q&A:
Q: Are emails sent to inactive members?
A: No. Members who have not logged in within the configured number of days (default 30) will not receive an email.

Q: Is "Receive site mailings" honored?
A: Yes.

Q: How are topics chosen?
A: Topics are selected from the past 7 days, sorted by most viewed. An additional grouping by board name can be enabled in settings.

Q: Is there an option for opt-in instead of opt-out?
A: No. Opt-in does not work well because most members will never subscribe.

Q: Are new members automatically enrolled?
A: Yes. Members must opt-out if they do not wish to receive the weekly email.

6
Latest Mods / [Mod]SMFHacks Analytics for Google
« on: March 31, 2026, 03:56:58 pm »
SMFHacks Analytics for Google




https://www.smfhacks.com/index.php?action=downloads;sa=view;down=263

SMFHacks Analytics for Google
Version: 1.0.0
Author: vbgamer45 - https://www.smfhacks.com
License: MIT
Compatible with: SMF 2.1.x



Description

A comprehensive Google Analytics 4 (GA4) integration for Simple Machines Forum. This modification provides deep analytics tracking, server-side event collection via the Measurement Protocol, Google OAuth2 API access, and in-admin reporting - all without modifying any core SMF files.



Features

Tracking
  • GA4 tracking code (gtag.js) automatically injected on all forum pages
  • Track registered members across devices using their user ID
  • Track which theme/style users are using
  • Track boards via custom GA4 dimension
  • Track topics via custom GA4 dimension
  • Track user groups with configurable priority ordering
  • Client-side error tracking (JavaScript errors, console errors, failed image loads, unhandled promise rejections)

Event Tracking
  • User registrations (sign_up event)
  • User logins (login event)
  • New topic creation (create_content event)
  • New reply/post creation (create_content event)
  • Personal messages sent (create_content event)
  • Attachment downloads tracked server-side via Measurement Protocol (file_download event)
  • Paid subscription views, checkout, and purchases tracked as GA4 eCommerce events (view_item_list, begin_checkout, purchase)
  • UTM parameters automatically added to links in outgoing forum emails

Google Analytics API Integration
  • OAuth2 authentication using your own Google Cloud credentials
  • Browse and select existing GA4 properties from your Google Analytics accounts
  • Create new GA4 properties and data streams directly from the admin panel
  • Measurement Protocol API secret auto-generated
  • Custom dimensions automatically created in your GA4 property (board_id, topic_id, style_id, user_group_id, user_id, and error tracking dimensions)

In-Admin Reporting
  • Dashboard - Realtime visitor map showing active users by country (Google GeoChart, auto-refreshes every 30 seconds)
  • Charts - Configurable line charts with date range, dimension (OS, browser, country, city, page, device, language, board, topic), metric (page views, sessions, active users, events, new users), and minimum value filter
  • Heat Map - Weekly activity heatmap (hour of day x day of week) with configurable metric, weeks of data, and end date
  • Errors - Client-side error report showing error type, message, page URL, location, line number, and occurrence count



Requirements

  • SMF 2.1.x
  • PHP 7.0+ with cURL extension enabled
  • A Google Analytics 4 property (created automatically or select an existing one)
  • Google Cloud OAuth2 credentials (Client ID and Client Secret) - see setup instructions below



Installation

1. Install via SMF Package Manager (Admin > Packages > Install a Package)
2. After installation you will be redirected to the settings page



Setup Instructions

Step 1: Create Google Cloud OAuth Credentials
1. Go to Google Cloud Console - Credentials
2. Create a project (or select an existing one)
3. Enable the following APIs:
   - Google Analytics Admin API
   - Google Analytics Data API
4. Go to Credentials > Create Credentials > OAuth 2.0 Client ID
5. Application type: Web application
6. Add your forum URL as an Authorized redirect URI:
   
Code: [Select]
https://yourforum.com/index.php?action=smfhacks_analytics;sa=oauth_callback7. Copy the Client ID and Client Secret

Step 2: Configure the Modification
1. Go to Admin > Configuration > Analytics for Google > Settings
2. Enter your OAuth Client ID and Client Secret
3. Click Save
4. Click "Link Google Account" and authorize access
5. Select an existing GA4 property or create a new one
6. The Measurement ID and API Secret will be auto-populated
7. Custom dimensions are automatically created in your GA4 property
8. Configure which tracking features and events you want enabled
9. Set user group priority order if desired

Step 3: Enable Enhanced Measurement (Recommended)
In your Google Analytics account:
1. Go to Admin > Property > Data Streams
2. Click your web data stream
3. Enable Enhanced Measurement for automatic tracking of scrolling, outbound clicks, site search, video engagement, and file downloads



How It Works

Client-side tracking: The gtag.js script is injected on every page via SMF's integrate_load_theme hook. Custom dimensions (board, topic, style, user group) are set based on the current page context.

Event queue: Forum actions (login, registration, topic/post creation, PMs) are queued in the PHP session and fired as gtag() calls on the user's next page load.

Server-side tracking: Attachment downloads and paid subscription purchases are tracked via the GA4 Measurement Protocol directly from PHP, since these actions don't render a page.

Reporting: Admin report pages fetch data from the Google Analytics Data API via an AJAX proxy endpoint, keeping page loads fast.

100% hook-based: This modification uses 14 SMF integration hooks and does not modify any core SMF files.



Hooks Used

  • integrate_actions
  • integrate_admin_areas
  • integrate_load_theme
  • integrate_pre_javascript_output
  • integrate_pre_css_output
  • integrate_login
  • integrate_register_after
  • integrate_create_topic
  • integrate_create_post
  • integrate_personal_message_after
  • integrate_download_request
  • integrate_outgoing_email
  • integrate_exit
  • integrate_daily_maintenance



Uninstallation

Uninstall via SMF Package Manager. All hooks are automatically removed, all files are deleted, and all settings are cleaned from the database. No traces are left behind.



Support

For support, bug reports, and feature requests visit https://www.smfhacks.com



Changelog

1.0.0 - Initial release
  • GA4 tracking code injection with custom dimensions
  • Google OAuth2 integration with property selection and creation
  • Forum event tracking (login, registration, topics, posts, PMs, downloads)
  • Client-side error tracking
  • Paid subscription eCommerce tracking
  • Email UTM tagging
  • In-admin reporting (dashboard, charts, heat map, errors)

7
Latest Mods / [Mod]Private Profile for SMF 2.1
« on: March 28, 2026, 09:53:00 pm »
Private Profile for SMF 2.1



https://www.smfhacks.com/index.php?action=downloads;sa=view;down=262

Private Profile
by vbgamer45



Description
Allows users to set their profile as private. When enabled, other members will see a "This profile is set to private" message instead of the full profile. Administrators and users with the moderate_forum permission can still view private profiles.

Features
  • Simple toggle in the user's profile under Edit Profile > Privacy
  • Blocks all profile areas (summary, posts, statistics, etc.) for non-privileged users
  • Admins and moderators bypass the privacy setting
  • Users can always view their own profile
  • Hooks only - no template edits required

Compatibility
  • SMF 2.1.x

License
MIT License

Support
https://www.smfhacks.com

8
News / Coinbase Commerce - Crypto shutting down!
« on: March 21, 2026, 08:02:20 pm »
I just learned coinbase commerce is shutting down at the end of March 31. IF you use download pro/store with crypto please disable as soon as possible.
I am exploring to see if I can use Coinbase Business https://help.coinbase.com/en/transitioning-from-coinbase-commerce-to-coinbase-business
 Or update to latest version of those mods! I just posted updates for Coinbase Business





Also, if you are still using crypto let us know...

9
Latest Mods / [Mod]Topic Preview for SMF 2.1 and SMF 2.0
« on: March 19, 2026, 10:48:05 pm »
Topic Preview for SMF 2.1 and SMF 2.0




https://www.smfhacks.com/index.php?action=downloads;sa=view;down=260

Topic Preview
Version 1.0
by vbgamer45


Description:
Shows a styled popup preview when hovering over topic titles in the message index (board view). The popup displays the topic title, author name, post time, a preview of the first post body, and reply/view counts.

Compatibility:
  • SMF 2.0.x
  • SMF 2.1.x


Features:
  • Hover popup with topic preview on message index pages
  • Shows first post body text (truncated), author, time, reply and view counts
  • Smooth show/hide with configurable delay (no flicker)
  • Viewport-aware positioning (stays within screen bounds)
  • Admin settings panel (SMF 2.1) to enable/disable and set preview length
  • Graceful fallback: when disabled, original tooltip behavior is restored


Installation:
Install via the SMF Package Manager (Admin > Packages > Install).

Settings (SMF 2.1):
After installation, go to Admin > Configuration > Modifications > General to find Topic Preview settings:
  • Enable Topic Preview popup - Turn the mod on or off
  • Preview text length - Number of characters to show in the preview (default: 256)


Settings (SMF 2.0):
The mod is enabled by default when installed. Settings are stored in the database (topic_preview_enabled, topic_preview_length).

Uninstallation:
Uninstall via the SMF Package Manager. All file changes will be reversed and mod files removed.

Author:
vbgamer45 - SMF Hacks

License:
BSD 3-Clause License

10
Latest Themes / [Theme] XenFlow - Theme Beta
« on: March 17, 2026, 08:40:47 pm »
XenFlow - Theme Beta




https://www.smfhacks.com/index.php?action=downloads;sa=view;down=259

XenFlow is a modern, clean forum theme for Simple Machines Forum (SMF) 2.1.
Inspired by XenForo-style design, it features a dark header/footer, cyan accent
navigation, 2-column board grid layout, right sidebar, guest welcome banner,
and a built-in dark/light mode toggle.

11
Latest Mods / [Mod]Magic Llama Mod v2.0 for SMF 2.1
« on: March 16, 2026, 08:16:18 pm »
Magic Llama Mod v2.0 for SMF 2.1



https://www.smfhacks.com/index.php?action=downloads;sa=view;down=258

Magic Llama Mod v2.0 for SMF 2.1
==================================

By vbgamer45 - https://www.smfhacks.com
Original concept by Aquilo (2004) - rewritten for SMF 2.1.

Description
-----------
A gamification mod that randomly releases virtual llamas on forum pages.
Members click floating llama images to catch them, earning or losing points.
Good llamas give points, evil llamas take them away!

12
Latest Mods / [Mod]ProgressiveWebApp - for Mobile Phones SMF 2.1
« on: March 16, 2026, 04:17:40 pm »
ProgressiveWebApp - for Mobile Phones SMF 2.1




https://www.smfhacks.com/index.php?action=downloads;sa=view;down=257

Mobile-First PWA Shell for SMF 2.1
  Version 1.0.0
================================================================================

  Author:      vbgamer45 / SMF Hacks
  Website:      https://www.smfhacks.com
  Compatibility: SMF 2.1.x (tested on 2.1.6)
  License:      MIT
  Package ID:  smfmods:pwa-shell

================================================================================
  OVERVIEW
================================================================================

  Transforms your SMF forum into a modern Progressive Web App on mobile devices.
  Installs as a standard SMF package using only hooks - zero core file edits.
  The desktop experience is completely untouched.

  Mobile users get:
  - Bottom tab navigation (Feed, Boards, Alerts, Messages, Profile)
  - Sticky header with search and dark mode toggle
  - Pull-to-refresh gesture
  - Swipe-right from left edge to go back
  - Floating action button for new post/reply
  - "Add to Home Screen" install prompt (iOS and Android)
  - Dark mode with system preference detection
  - Push notifications for forum alerts
  - Offline fallback page when network is unavailable
  - Service worker caching for faster page loads

================================================================================
  REQUIREMENTS
================================================================================

  - SMF 2.1.x
  - PHP 7.4+ (PHP 8.x recommended)
  - OpenSSL PHP extension (required for push notification VAPID keys)
  - cURL PHP extension (required for sending push notifications)
  - HTTPS (required by browsers for service workers and push notifications)

================================================================================
  INSTALLATION
================================================================================

  1. Download the package zip file.
  2. Go to Admin > Packages > Install a New Package.
  3. Upload the zip file and click Install.
  4. You will be redirected to the PWA Settings page after install.
  5. Configure your preferences (see Settings section below).

  On install, the mod will:
  - Generate VAPID encryption keys for push notifications (via OpenSSL)
  - Create a database table for push subscriptions
  - Register a scheduled task for push notification delivery
  - Register three integration hooks (no core files modified)

================================================================================
  UNINSTALLATION
================================================================================

  1. Go to Admin > Packages > Installed Packages.
  2. Find "Mobile-First PWA Shell" and click Uninstall.

  This will cleanly remove:
  - All mod files (PHP sources, CSS, JS, icons, templates)
  - The push subscriptions database table
  - All mod settings (including VAPID keys)
  - The scheduled task
  - All registered hooks

================================================================================
  ADMIN SETTINGS
================================================================================

  Found at: Admin > Configuration > PWA Shell Settings

  General Settings:
  - Enable PWA Shell          Master on/off toggle for the mobile experience.
  - Enable Push Notifications Allow users to receive push notifications.

  Appearance:
  - Default Dark Mode        Light / Dark / Follow System.
                              Users can override with the toggle in the header.
  - Accent Color              Primary theme color used in the manifest, browser
                              toolbar, and UI accents. Default: #557EA0

  Behavior:
  - Install Prompt Delay      Number of page visits before showing the
                              "Add to Home Screen" banner. Default: 2
  - Offline Message          Text shown on the offline fallback page when the
                              user has no network connection.

  Push Notifications:
  - VAPID Contact Email      Email address used as the VAPID subject. Push
                              services (Google, Apple) may contact this address.
  - VAPID Public Key          Auto-generated on install. Display-only.
                              Do not change unless you want to invalidate all
                              existing push subscriptions.

================================================================================
  FEATURES IN DETAIL
================================================================================

  BOTTOM TAB NAVIGATION
  ---------------------
  A fixed bottom navigation bar with 5 tabs, injected via JavaScript so it
  works with any SMF theme. Tabs:

    Feed      (?action=unread)            Recent unread topics
    Boards    (board index)                Board listing
    Alerts    (?action=profile;area=showalerts)  Your alerts
    Messages  (?action=pm)                Personal messages
    Profile    (?action=profile)            Your profile (or Login for guests)

  The active tab is highlighted based on the current page URL. Badge counts
  for unread alerts and PMs are shown on the Alerts and Messages tabs.

  STICKY HEADER
  -------------
  A compact header replaces SMF's default top section on mobile with:
  - Forum name / page title
  - Search button
  - Dark mode toggle (moon/sun icon)

  FLOATING ACTION BUTTON
  ----------------------
  A "+" button in the bottom-right corner. Context-aware behavior:
  - Viewing a topic: scrolls to and focuses the quick reply box
  - Viewing a board: opens "New Topic" for that board
  - Elsewhere: navigates to unread topics
  Only shown for logged-in users.

  DARK MODE
  ---------
  Full dark theme using CSS custom properties. Three modes:
  - Light: always light
  - Dark: always dark
  - System: follows the device's prefers-color-scheme setting

  The admin sets the default. Users toggle with the header button.
  Preference is saved to localStorage (works for guests too).
  Overrides all standard SMF CSS classes: windowbg, titlebg, catbg,
  roundframe, buttons, inputs, links, code blocks, quotes, etc.

  PULL TO REFRESH
  ---------------
  Pull down from the top of the page to refresh. Shows a spinner indicator.
  Haptic feedback when the pull threshold is crossed (on supported devices).

  SWIPE GESTURES
  --------------
  Swipe right from the left edge of the screen to go back (history.back).
  Mimics the native iOS/Android back gesture.

  SERVICE WORKER & OFFLINE
  ------------------------
  A service worker is registered for all users (mobile and desktop) to
  enable caching and offline support.

  Caching strategies:
  - Static assets (CSS, JS, images, fonts): Stale-while-revalidate.
    Served instantly from cache, updated in the background.
  - HTML pages: Network-first with cache fallback.
    Always tries the network. Falls back to cached version if offline.
  - AJAX/API calls: Network-only. Never cached to prevent stale data.

  When offline with no cached page available, a styled offline fallback page
  is shown with a "Try Again" button. Respects dark mode preference.

  The service worker is served via ?action=pwa-sw with a
  Service-Worker-Allowed: / header, allowing root scope even though SMF
  URLs are query-string based. It is also installed to the webroot as
  sw.js for direct access.

  ADD TO HOME SCREEN
  ------------------
  Prompts users to install the forum as an app on their device.

  Android/Chrome:
    Intercepts the browser's beforeinstallprompt event and shows a custom
    banner with an "Install" button after the configured number of visits.

  iOS/Safari:
    iOS does not support beforeinstallprompt. The banner instead shows
    manual instructions: "Tap [share icon] then Add to Home Screen"
    with the actual iOS share icon displayed inline.

  The banner is not shown if:
  - The app is already installed (standalone mode detected)
  - The user dismissed the banner previously
  - The visit count hasn't reached the configured delay

  WEB APP MANIFEST
  ----------------
  Served dynamically at ?action=pwa-manifest with values populated from
  your forum settings:
  - name / short_name: from forum name
  - description: from meta description setting
  - theme_color: from accent color setting
  - icons: 192px, 512px, and maskable 512px from /pwa-icons/
  - display: standalone
  - orientation: portrait

================================================================================
  PUSH NOTIFICATIONS
================================================================================

  OVERVIEW
  --------
  When enabled, users can subscribe to receive push notifications on their
  devices. Notifications are delivered for forum alerts such as replies,
  mentions, quotes, and likes.

  HOW IT WORKS
  ------------
  1. The user visits the forum and is prompted to enable notifications.
    - On Android: shown after 3 page visits, or immediately in the
      installed PWA.
    - On iOS: only shown inside the installed home screen app (push
      does not work in regular Safari). Requires iOS 16.4+.
  2. If the user allows, a push subscription is created via the browser's
    Push API and sent to the server.
  3. A scheduled task ("PWA Push Notifications") runs every 2 minutes.
  4. It queries the user_alerts table for new unread alerts belonging to
    members who have push subscriptions.
  5. Each alert is converted into a human-readable notification and sent
    to all of that member's subscribed devices via the Web Push protocol.

  SUPPORTED ALERT TYPES
  ---------------------
  The following SMF events generate push notifications:

    Event                Push Notification Title
    -------------------  --------------------------------
    @mention            "Mentioned by {name}"
    Quote                "Quoted by {name}"
    Like                "{name} liked your post"
    Reply (watched)      "New reply from {name}"
    New topic (watched)  "New topic by {name}"
    Buddy request        "Buddy Request"
    Group approved      "Group Request Approved"
    Any other alert      "New Notification" (generic)

  Each notification includes the topic subject and a direct link to the
  relevant content. Tapping a notification opens the forum to that page.

  TECHNICAL DETAILS
  -----------------
  - Uses VAPID authentication (keys auto-generated on install via OpenSSL)
  - Payload encryption per RFC 8291 (Web Push Message Encryption)
  - ECDH key exchange + AES-128-GCM encryption
  - Pure PHP implementation using openssl extension - no Composer or
    external libraries required
  - Stale subscriptions (HTTP 410) are automatically cleaned up
  - Push delivery uses cURL
  - Alert tracking uses a high-water mark (last processed alert ID) to
    avoid duplicate notifications

  SCHEDULED TASK
  --------------
  Name:        PWA Push Notifications
  Location:    Admin > Scheduled Tasks
  Frequency:  Every 2 minutes (configurable in admin)
  Description: Checks for new alerts and sends push notifications to
              members with subscribed devices.


================================================================================
  BROWSER COMPATIBILITY
================================================================================

  Mobile (full PWA experience):
  - Chrome for Android 67+
  - Samsung Internet 9.2+
  - Safari iOS 16.4+ (push requires installed PWA)
  - Firefox for Android 100+
  - Edge for Android 67+

  Desktop (service worker caching only, no shell UI):
  - All modern browsers with service worker support

  Push notification support:
  - Chrome 50+, Edge 17+, Firefox 44+, Safari 16.4+ (installed PWA only)
  - NOT supported: Safari on macOS (as of 2025)

================================================================================
  CUSTOMIZING ICONS
================================================================================

  The default icons are placeholder images with a blue background and "F"
  letter. To replace them with your forum's branding:

  1. Create PNG images at these sizes:
    - 192x192 pixels (icon-192.png)
    - 512x512 pixels (icon-512.png)
    - 512x512 pixels with extra padding for safe zone (icon-maskable-512.png)

  2. Upload them to your forum's /pwa-icons/ directory, replacing the
    existing files.

  For the maskable icon, keep important content within the center 80% of
  the image. The outer 10% on each side may be cropped by the device.

  Tip: Use https://maskable.app to preview and test your maskable icon.

================================================================================
  TROUBLESHOOTING
================================================================================

  "VAPID key generation failed" on install:
    Your server's OpenSSL may not find its config file. The installer tries
    multiple fallback paths. Check that openssl.cnf exists and PHP's OpenSSL
    extension supports EC (P-256) keys. PHP 7.4+ with OpenSSL 1.1+ required.

  Service worker not registering:
    Ensure your forum is served over HTTPS. Service workers require a secure
    context. Check browser DevTools > Application > Service Workers for errors.

  Push notifications not arriving:
    - Check Admin > Scheduled Tasks: ensure "PWA Push Notifications" is
      enabled and running (last run time should be recent).
    - Verify the VAPID Contact Email is set in PWA Settings.
    - Check that the user has allowed notifications (browser permissions).
    - On iOS: push only works in the installed home screen app, not Safari.

  Bottom nav not showing:
    The mobile shell only activates on mobile viewports (max-width: 768px)
    and when the mod is enabled. Check Admin > PWA Shell Settings.

  Icons not displaying:
    Ensure the /pwa-icons/ directory exists in your forum root with the
    PNG files. Check file permissions (readable by web server).

  Dark mode not persisting:
    Dark mode preference is saved to localStorage. If the user clears
    browser data, the preference resets to the admin default.

13
Latest Mods / [Mod]Multi Accounts for SMF 2.1
« on: March 15, 2026, 11:05:11 pm »
Multi Accounts for SMF 2.1



https://www.smfhacks.com/index.php?action=downloads;sa=view;down=255

Multi Accounts v1.0
by vbgamer45





Description:

Multi Accounts allows your forum members to create and manage multiple linked accounts from a single parent account. Members can switch between their accounts instantly without logging out and back in.

Features:

  • Create new linked accounts or link existing accounts
  • Instant account switching via the account switcher widget
  • Post as any linked account from the compose form
  • Merge linked accounts (transfers all posts and data)
  • Split linked accounts into independent accounts
  • Reassign parent account status
  • Share accounts between multiple parent accounts
  • Search across all linked accounts
  • Per-group account limits
  • Full permission system (own/any for create, delete, merge, split)
  • Child accounts cannot log in directly (must use parent account switcher)
  • Admin panel to view and manage all linked accounts


Requirements:

  • SMF 2.1.x


Installation:

  • Upload the package via Admin > Package Manager > Download Packages
  • Install the package
  • Go to Admin > Members > Multi Accounts > Settings to enable the mod
  • Configure permissions under Admin > Permissions


Usage:

  • Members can manage their linked accounts via Profile > Multi Accounts
  • Use the account switcher in the menu to switch between accounts
  • When composing a post, use the "Post as" dropdown to post as a linked account


License: BSD 2-Clause License

Support: https://www.smfhacks.com

14
Latest Mods / [Mod]OpenSearch for SMF 2.1
« on: March 13, 2026, 10:58:04 pm »
OpenSearch for SMF 2.1



https://www.smfhacks.com/index.php?action=downloads;sa=view;down=254

OpenSearch for SMF
==================
Version: 1.0
Compatible with: SMF 2.1.x
License: BSD

Integrates OpenSearch as a search backend for SMF 2.1 via REST API.
Replaces SMF's built-in search with OpenSearch for faster, more relevant
full-text search results.


Requirements
------------
- SMF 2.1.0 or later
- PHP 7.4+ with the cURL extension enabled
- An OpenSearch server (1.x or 2.x)


Installation
------------
1. In your SMF admin panel, go to Admin > Package Manager.
2. Upload and install the package.
3. You will be redirected to Admin > Search > Search Method.
4. Select "OpenSearch" as the search method and save.
5. Go to Admin > Search > Settings to configure connection details.
6. Click "Test Connection" to verify connectivity.
7. Click "Rebuild Index" to perform the initial index of all forum posts.


Configuration
-------------
All settings are found under Admin > Search > Settings after selecting
OpenSearch as the search method.

Connection:
  - Host: OpenSearch server hostname or IP (default: localhost)
  - Port: OpenSearch server port (default: 9200)
  - Use SSL/HTTPS: Enable for HTTPS connections
  - Verify SSL: Disable for self-signed certificates

Authentication:
  - Username: Leave blank if auth is not required
  - Password: Leave blank if auth is not required

Index:
  - Index name: The OpenSearch index name (default: smf_search)
  - Maximum results: Max results returned per search (default: 1000)

Search Tuning:
  - Fuzziness (typo tolerance): Controls how many character differences are
    allowed when matching words. Options:
      Off       - Exact spelling required (default)
      AUTO      - Recommended. Scales tolerance by word length: no fuzziness
                  for 1-2 character words, 1 character for 3-5 character words,
                  2 characters for longer words.
      1         - Allow 1 character difference (e.g. "foruum" matches "forum")
      2         - Allow 2 character differences
    Fuzziness does not apply to "quoted phrase" searches.

  - Subject boost factor: How much more weight subject/title matches receive
    compared to body matches (default: 2). Set higher to prioritize title
    matches in results. Set to 1 for equal weighting, or 0 to ignore subjects.

  - Enable English stemming: Reduces words to their root form during indexing
    so that "running" matches "run", "posted" matches "post", "communities"
    matches "community", etc. IMPORTANT: You must click "Rebuild Index" after
    enabling or disabling this setting for it to take effect.

  - Minimum relevance score: Filters out results below a relevance threshold.
    Set to 0 to disable (default). Useful for cutting low-quality noise from
    results on large forums. Start with a small value like 1-5 and increase
    until the noise is gone without losing relevant results.

  - Multi-word match mode: Controls how multi-word searches behave when the
    user does not use explicit AND/OR operators.
      All words required (AND) - Every word must appear (default)
      Any word matches (OR)    - Results containing any of the words are shown,
                                 ranked by how many words match


Features
--------
- Full-text search via OpenSearch Query DSL with BM25 scoring
- Boolean search operators: AND (implicit), OR (|), NOT (-), "quoted phrases"
- Subject-only search mode
- Configurable fuzziness for typo-tolerant searching
- Optional English stemming for root-word matching
- Configurable subject boost, minimum score, and match operator
- Real-time indexing: new, edited, and deleted posts update the index
  immediately without needing a cron job or manual reindex
- Topic move/delete operations update the index automatically
- Relevance scoring uses SMF's configurable search weights
  (age, length, first message, sticky)
- One result per topic in search results
- Results caching for performance
- Admin tools for connection testing and full reindex


Uninstallation
--------------
1. Go to Admin > Search > Search Method and switch to a different method.
2. Go to Admin > Package Manager and uninstall the package.
3. Optionally delete the OpenSearch index manually:
   curl -X DELETE http://localhost:9200/smf_search


Troubleshooting
---------------
"Could not connect to OpenSearch":
  Verify the host, port, and SSL settings are correct. Ensure the
  OpenSearch server is running and accessible from your web server.

Search returns no results after installation:
  You must click "Rebuild Index" in the settings page to perform the
  initial index of all forum posts.

cURL extension not available:
  Install the PHP cURL extension. On Debian/Ubuntu:
  sudo apt-get install php-curl




15
Latest Mods / [Mod] Army System RPG Game for SMF 2.1.x
« on: March 13, 2026, 09:04:04 pm »
Army System RPG Game for SMF 2.1.x




https://www.smfhacks.com/index.php?action=downloads;sa=view;down=253

================================================================================
Army System 1.0 for SMF 2.1.x
by: vbgamer45
https://www.smfhacks.com
================================================================================

A multiplayer forum RPG where members build armies, pick races, buy weapons and
armor, upgrade fortifications and siege technology, train soldiers, hire
mercenaries, build a naval fleet, attack other players, spy on opponents, form
clans, and climb the rankings.

Based on the idea from the original IPB "Army System 2.2 FINAL" by supersmashbrothers.

================================================================================
TABLE OF CONTENTS
================================================================================

1. Requirements
2. Installation
3. Features Overview
4. Race System
5. Equipment & Items
6. Training & Mercenaries
7. Battle System
8. Espionage System
9. Naval Fleet (Ships)
10. Fortifications & Siege
11. Clans
12. Economy & Currency
13. Transfers
14. Vacation Mode
15. Rankings & Profiles
16. Admin Panel
17. Admin Settings Reference
18. Permissions
19. Scheduled Tasks
20. Uninstallation
21. Credits

================================================================================
1. REQUIREMENTS
================================================================================

- SMF 2.1.x (tested with 2.1.0 through 2.1.6)
- PHP 8.0 or higher
- MySQL 5.7+ or MariaDB 10.x+
- InnoDB storage engine

================================================================================
2. INSTALLATION
================================================================================

1. Download the Army System package (.tar.gz or .zip)
2. Go to Admin > Package Manager > Download Packages
3. Upload the package file
4. Click "Install Mod" and follow the prompts
5. Set permissions under Admin > Members > Permissions
6. Configure settings under Admin > Army System > Settings
7. The "Army" button will appear in the main navigation menu

================================================================================
3. FEATURES OVERVIEW
================================================================================

The Army System adds a full RPG layer to your forum with these major systems:

- 10 unique races with strategic bonuses and tradeoffs
- 10 attack weapons and 10 defense armor pieces (tiered progression)
- 5 spy tools and 5 sentry tools
- 20 ships that boost both attack and defense
- 9-level fortification and 9-level siege upgrade trees
- 30-level unit production upgrades
- 10-level spy skill upgrades
- Soldier training (attack, defense, spy, sentry)
- Mercenary hiring (attack, defense, untrained)
- Full battle system with equipment degradation and casualties
- Espionage with recon and sabotage missions
- Clan system with leader management and join modes
- Gold/item transfers between players
- Vacation mode to protect inactive players
- Paginated rankings by army size
- Event feed tracking major actions
- Forum post integration (earn gold and soldiers from posting)
- Full admin panel with settings, race/item editors, member management
- IP-based multi-account detection
- Guest viewing support (configurable)

================================================================================
4. RACE SYSTEM
================================================================================

New players must choose a race before participating. Each race provides
percentage bonuses (positive or negative) to different aspects of gameplay.
Choosing a race is permanent unless the player resets their army.

Default Races:

  Race        Income  Discount  Casualties  Attack  Defense  Spy  Sentry
  ----------  ------  --------  ----------  ------  -------  ---  ------
  Humans      +40%    0%        0%          0%      0%      0%  0%
  Elves      0%      0%        0%          +10%    +10%    0%  0%
  Orcs        0%      0%        0%          0%      0%      +10% +10%
  Ghosts      0%      0%        +25%        0%      0%      0%  0%
  Corpses    0%      0%        0%          +40%    -10%    -10% -5%
  Ogres      0%      0%        0%          -10%    +40%    -5%  -15%
  Wizards    0%      0%        0%          -15%    -5%      +40% -10%
  Wights      0%      0%        0%          -5%    -15%    -10% +40%
  Dragons    -50%    0%        0%          +15%    +15%    +15% +15%
  Dwarfs      0%      0%        +40%        -10%    0%      0%  0%

Bonus types explained:
- Income: Percentage modifier on gold generation
- Discount: Percentage reduction on item/training costs
- Casualties: Percentage reduction in soldiers lost during battle
- Attack/Defense/Spy/Sentry: Percentage modifier on respective power ratings

Admins can add, edit, or remove races from the admin panel. Each race can have
a custom icon image displayed throughout the interface.

================================================================================
5. EQUIPMENT & ITEMS
================================================================================

Equipment is purchased from the Armory and contributes to power calculations.
Items have a strength value that degrades during combat (0.5% per turn used)
and can be repaired.

ATTACK WEAPONS (type 'a') — 10 tiers:
  #  Name              Strength    Price
  1  Dagger            10          10,000
  2  Hand Axe          30          30,000
  3  Spear              60          60,000
  4  Mace              100        100,000
  5  Flail              180        180,000
  6  Hammer            320        320,000
  7  War Hammer        600        600,000
  8  Battle Axe        1,200      1,200,000
  9  Morningstar        3,000      1,600,000
  10  Two Handed Sword  10,000      2,000,000

DEFENSE ARMOR (type 'd') — 10 tiers:
  #  Name              Strength    Price
  1  Leather Helmet    10          10,000
  2  Leather Armor      30          30,000
  3  Wooden Shield      60          60,000
  4  Scale Mail        100        100,000
  5  Iron Shield        180        180,000
  6  Plate Armor        320        320,000
  7  Steel Shield      600        600,000
  8  Steel Helmet      1,200      1,200,000
  9  Steel Plate Armor  3,000      1,600,000
  10  Elven Mail        10,000      2,000,000

SPY TOOLS (type 'q') — 5 tiers:
  #  Name              Strength    Price
  1  Rope              1          10,000
  2  Dirk              3          20,000
  3  Cloak              10          40,000
  4  Grappling Hook    25          60,000
  5  Stealth Horse      60          100,000

SENTRY TOOLS (type 'e') — 5 tiers:
  #  Name              Strength    Price
  1  Big Candle        1          10,000
  2  Horn              3          20,000
  3  Tripwire          10          40,000
  4  Guard Dog          25          60,000
  5  Watch Post        60          100,000

Items can be sold back at configurable resell rates:
- Armor: 75% of purchase price (default)
- Ships: 60% of purchase price (default)
- Weapons/Tools: 45% of purchase price (default)

All items have icon images displayed in the shop and inventory.

================================================================================
6. TRAINING & MERCENARIES
================================================================================

TRAINING:
Untrained soldiers can be trained into specialized roles at the Training page.

  Type      Cost per Soldier
  ---------  ----------------
  Attack    2,500 gold
  Defense    2,500 gold
  Spy        3,500 gold
  Sentry    3,500 gold
  Untrain    500 gold (returns specialist to untrained pool)

UNIT PRODUCTION UPGRADES (30 levels):
Increase automatic soldier generation. Each level doubles the cost of the
previous level, starting at 10,000 gold.

MERCENARIES:
Hired soldiers that fight alongside your army. More expensive than training
but provide immediate power.

  Type      Cost    Strength
  ---------  ------  --------
  Attack    3,500    10 each
  Defense    3,500    10 each
  Untrained  3,000    25 each

Mercenaries require ongoing upkeep (default: 10 gold per merc, deducted by
scheduled task). Mercs can be retrained between roles.

================================================================================
7. BATTLE SYSTEM
================================================================================

Players can attack others through the Attack page. Each attack costs turns.

ATTACK CALCULATION:
1. Attacker Offense =
  (weapon_strength + attack_soldiers + attack_mercs * 10 + ship_power / 2)
  * turns * (1 + race_attack_bonus%) * (1 + siege_bonus%)

2. Defender Defense =
  (armor_strength + defense_soldiers + defense_mercs * 10 + ship_power / 2)
  * (1 + race_defense_bonus%) * (1 + fort_bonus%)

3. Both values randomized +/- 20%
4. Higher total wins

BATTLE OUTCOMES:
- Gold stolen: defender_gold * (turns * attack_money_rate / 100)
- Casualties: Based on power ratio, army size, turns used, reduced by race bonus
- Equipment degradation: 0.5% strength loss per turn on weapons, armor, and ships

FLOOD PROTECTION:
- Maximum attacks against same target: 5 per 14-day period (configurable)
- IP tracking prevents multi-account abuse

BATTLE LOGS:
Full battle records including damage dealt, casualties on both sides, gold
stolen, and per-item degradation breakdown. Logs retained for 14 days
(configurable).

================================================================================
8. ESPIONAGE SYSTEM
================================================================================

Players can run spy missions against other players through the Espionage page.

MISSION TYPES:
- Recon: Reveals target's army stats with an accuracy margin
- Sabotage: Damages random equipment in the target's inventory

SUCCESS CALCULATION:
  Spy Power = (spies_used + spy_tools) * (1 + race_spy_bonus%)
              * (1 + spy_skill_level * 10%)

  Sentry Power = (sentry_soldiers + sentry_tools) * (1 + race_sentry_bonus%)

  Success Chance = spy_power / (spy_power + sentry_power) * 100%

CONSEQUENCES:
- Failed missions: 1 to all deployed spies are killed
- Maximum spies per mission: 10 (configurable)

SPY SKILL UPGRADES (10 levels):
Each level adds +10% to spy power. Cost starts at 18,000 gold and doubles
per level.

================================================================================
9. NAVAL FLEET (SHIPS)
================================================================================

Ships are a unique item type that contribute to BOTH attack and defense power
(50/50 split). They are purchased from the Ships tab in the Armory.

  #  Name                    Strength    Price
  1  Canoe                    5          8,000
  2  Rowboat                  10          15,000
  3  Skiff                    20          25,000
  4  Dhow                    40          40,000
  5  Fishing Trawler          75          70,000
  6  Merchant Cog            120        120,000
  7  Viking Longship          200        200,000
  8  Two-Masted Schooner      350        350,000
  9  Chinese Junk Warship    500        500,000
  10  Caravel                  750        750,000
  11  Carrack                  1,000      1,000,000
  12  Frigate                  1,500      1,500,000
  13  Small Warship            2,000      2,000,000
  14  Galleon                  3,000      3,000,000
  15  Man of War              5,000      5,000,000
  16  Icebreaker              7,000      7,000,000
  17  Elven Ship              9,000      9,000,000
  18  Ghost Ship              12,000      12,000,000
  19  Dwarven Submersible      15,000      15,000,000
  20  Airship                  20,000      20,000,000

Ships degrade in combat just like weapons and armor and can be repaired.
Ships can be sold at 60% of purchase price (configurable).

Naval Power is displayed on the dashboard alongside attack, defense, spy,
and sentry power ratings.

================================================================================
10. FORTIFICATIONS & SIEGE
================================================================================

FORTIFICATIONS (9 levels):
Upgrade your fort to gain a defense bonus per level (default: 25% per level).

  Level  Name          Price
  1      Camp          Free (starting)
  2      Stockade      10,000
  3      Walled Town    20,000
  4      Tower          40,000
  5      Battlements    80,000
  6      Fortress      160,000
  7      Moat          320,000
  8      Stronghold    2,560,000
  9      Citadel        5,120,000

SIEGE TECHNOLOGY (9 levels):
Upgrade siege to gain an offense bonus against fortified defenders.

  Level  Name          Price
  1      None          Free (starting)
  2      Ballistas      10,000
  3      Battering Ram  20,000
  4      Ladders        40,000
  5      Catapult      80,000
  6      Siege Tower    160,000
  7      Trebuchets    320,000
  8      Dynamite      2,560,000
  9      Cannons        5,120,000

Both upgrade trees show visual progression indicators in the Armory.

================================================================================
11. CLANS
================================================================================

Players can create or join clans for social organization.

FEATURES:
- Create a clan with a custom name and description
- Two join modes: Open (anyone can join) or Invite-Only
- Leader powers: invite members, approve/deny join requests, remove members,
  edit clan details, transfer leadership, disband clan
- Member roster with join dates
- Pending invitation/request management

REQUIREMENTS:
- Must have chosen a race to create or join a clan
- Cannot be in multiple clans simultaneously

================================================================================
12. ECONOMY & CURRENCY
================================================================================

The currency name is fully customizable (default: "Gold").

GOLD GENERATION:
1. Forum posting (automatic, integrated with SMF):
  - New topic: 10,000 gold (configurable)
  - Reply: 5,000 gold (configurable)

2. Automatic income (scheduled task, every hour):
  - Base amount configurable (default: 50 gold per tick)
  - Modified by race income bonus
  - Modified by unit production level

SOLDIER GENERATION:
- Automatic via scheduled task based on unit production level
- Soldiers per post threshold (default: 10 soldiers per 10 posts)

EXPENSES:
- Equipment purchases (weapons, armor, tools, ships)
- Training costs
- Mercenary hiring and upkeep
- Fortification and siege upgrades
- Spy skill upgrades
- Unit production upgrades
- Viewing opponent stats before attack

================================================================================
13. TRANSFERS
================================================================================

Players can send gold and items to other players through the Transfer page.

Default transfer services:
- Weapons Transfer: Send weapons to another player
- Money Transfer: Send gold to another player

Admins can define additional custom transfer services. All transfers are
logged in the transfer log for auditing.

================================================================================
14. VACATION MODE
================================================================================

Players can activate vacation mode to protect themselves while away.

- Protected from all attacks while on vacation
- Cannot attack, spy, or perform most actions while on vacation
- Minimum duration: 4 days (configurable)
- Maximum duration: 28 days (configurable)
- Early return: Disabled by default (configurable)
- Vacation auto-expires when the end date is reached

================================================================================
15. RANKINGS & PROFILES
================================================================================

RANKINGS:
- Paginated leaderboard sorted by army size
- Shows rank, player name, race, army size
- Accessible to guests (configurable)

PROFILES:
- "Army Stats" tab added to SMF user profiles
- Shows race (with icon), army size, rank, total attacks/defends
- Own profile shows additional details: gold, soldiers by type, turns
- Other players' profiles show limited public information
- Dedicated Army Profile page with full stat breakdown

DASHBOARD:
- Overview of all stats: race, army size, gold, rank
- Power ratings: attack, defense, spy, sentry, naval
- Soldier breakdown by type
- Recent events feed
- Quick action links to all major pages

================================================================================
16. ADMIN PANEL
================================================================================

Access via Admin > Army System. Five sections:

SETTINGS:
All 40+ configurable options organized by category (see section 17 below).

RACES:
- View all races with their bonus values
- Add new races with custom bonuses and icons
- Edit existing race names, bonuses, and icons
- Delete races (with member impact warnings)

ITEMS:
- View all items filtered by type (weapons, armor, ships, etc.)
- Add new items with name, strength, price, and icon
- Edit item properties
- Delete items

MEMBERS:
- Search members by name
- View full army data for any member
- Edit member stats (gold, soldiers, turns, levels)
- Reset or deactivate member accounts

LOGS:
- Staff action audit trail (who changed what, when)
- Attack log viewer with filtering
- All admin actions are logged automatically

================================================================================
17. ADMIN SETTINGS REFERENCE
================================================================================

GENERAL:
  army_enabled          Enable/disable the Army System          Default: On
  allow_guest_view      Allow guests to view rankings          Default: On
  name                  Custom name for the system              Default: Army System
  currency_name        Custom currency name                    Default: Gold

ECONOMY:
  tool_resell          Spy/sentry/weapon resell rate (%)      Default: 45%
  armor_resell          Armor resell rate (%)                  Default: 75%
  ship_resell          Ship resell rate (%)                    Default: 60%
  money_amount          Gold per automatic income tick          Default: 50
  money_mercanery      Mercenary upkeep cost per unit          Default: 10
  post_point_reply      Gold earned per forum reply            Default: 5,000
  post_point_topic      Gold earned per new topic              Default: 10,000
  guy_per_post          Soldiers gained per post threshold      Default: 10
  post_per_guy          Posts needed to reach threshold        Default: 10

COMBAT:
  max_attack            Max attacks on same target per period  Default: 5
  turns_max            Max turns per single attack            Default: 15
  turn_gain            Attack turns gained per tick            Default: 1
  attack_money          Gold stolen per attack (% per turn)    Default: 1%
  view_money            Gold cost to view opponent stats        Default: 5
  fort_percent          Fort defense bonus per level (%)        Default: 25%
  siege_percent        Siege offense bonus per level (%)      Default: 25%
  max_spy              Max spy soldiers per mission            Default: 10

PRODUCTION:
  auto_gain_prod        Enable automatic soldier generation    Default: On
  auto_gain_money      Enable automatic gold generation        Default: On
  production_type      Production formula type                Default: 1
  production_base      Base production multiplier              Default: 2
  production_constant  Production constant                    Default: 1

STARTING RESOURCES (given on join/reset):
  reset_army            Starting untrained soldiers            Default: 10
  reset_turn            Starting attack turns                  Default: 25
  reset_money          Starting gold                          Default: 50,000

MAINTENANCE:
  log_time              Attack log retention period            Default: 14 days
  inactive_time        Inactivity threshold before flagging    Default: 14 days
  security_check        IP clone detection level (0=off)        Default: 0

VACATION:
  vacation_allowed      Enable vacation mode                    Default: On
  vacation_min_time    Minimum vacation duration (days)        Default: 4
  vacation_max_time    Maximum vacation duration (days)        Default: 28
  vacation_back        Allow early return from vacation        Default: Off

================================================================================
18. PERMISSIONS
================================================================================

Five permissions are registered, configurable per membergroup:

  Permission      Description                                    Default
  --------------- ---------------------------------------------- -------
  army_view      View Army System pages and rankings            All
  army_play      Participate in Army System (join, buy, train)  Members
  army_attack    Execute attacks against other players          Members
  army_spy        Perform espionage missions                      Members
  army_admin      Access Army System admin panel                  Admin

================================================================================
19. SCHEDULED TASKS
================================================================================

Three scheduled tasks are registered during installation:

  Task                    Interval    Description
  ----------------------  ----------  -----------------------------------------
  army_auto_gain          1 hour      Generate soldiers and gold for all players
  army_merc_upkeep        2 hours    Deduct mercenary maintenance costs
  army_inactive_check    1 day      Flag inactive players, handle cleanup

Tasks can be managed from Admin > Maintenance > Scheduled Tasks.

================================================================================
20. UNINSTALLATION
================================================================================

1. Go to Admin > Package Manager > Installed Packages
2. Click "Uninstall" next to Army System
3. Follow the prompts

Uninstallation removes all source files, templates, CSS, language files,
images, hooks, and scheduled tasks. Database tables are NOT automatically
dropped to preserve data. To fully remove data, manually drop all tables
prefixed with {db_prefix}army_ from your database.

================================================================================
21. CREDITS
================================================================================

- Based on the idea of IPB mod: supersmashbrothers (Army System 2.2 FINAL)
- SMF 2.1.x port: vbgamer45 (https://www.smfhacks.com)
- Icon artwork included in Themes/default/images/army/

================================================================================

Pages: [1] 2 3 ... 22

+- Recent Topics

Apollo Neuro Promo Code [VIVANEST] $99 Off Compare And Save Instantly by damahi5899
October 12, 2026, 01:47:08 am

Apollo Neuro Promo Code [VIVANEST] $99 Off Compare And Save Instantly by damahi5899
October 12, 2026, 01:45:57 am

Downloads Pro 7.0 Released by SMFHacks
October 07, 2026, 07:35:30 pm

[Mod]ActivityPub Federation for SMF 2.1 by SMFHacks
October 01, 2026, 05:03:45 pm

Newsletter Pro 4.0 Released by SMFHacks
September 23, 2026, 08:08:24 pm

Can't remove or restore any item from the recycle bin by SMFHacks
September 22, 2026, 11:01:51 am

MCP Server for SMF 2.1 - let Claude, ChatGPT or Cursor run your admin chores by SMFHacks
September 12, 2026, 02:50:45 pm

Suggestions for improvements to Ultimate Shoutbox & Chatroom by davejo
September 02, 2026, 01:35:09 am

Automatic Sorting of Categories by Kiwi
August 31, 2026, 12:36:09 am

' appears as &#39; in Most Viewed (and Recent Items ?) by SMFHacks
August 22, 2026, 11:01:56 pm

Powered by EzPortal