Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
353f173
feat: add KunaiRO theme — Phases 0-3 (base, visual system, hero)
bogeyrd Mar 25, 2026
6aefd2d
refactor: major visual overhaul — eliminate admin panel look
bogeyrd Mar 25, 2026
8dbde75
feat: enrich homepage — stats bar, why section, featured news, Discor…
bogeyrd Mar 25, 2026
f082edc
fix: resolve HTTP 500 — guard $server access, fix wrong language keys
bogeyrd Mar 25, 2026
166b019
polish: final visual refinements — hero grain, stats icons, why glow,…
bogeyrd Mar 25, 2026
41cceb6
polish: final UI refinement — sidebar, forms, inputs, gaming identity
bogeyrd Mar 25, 2026
b1c43c1
feat: modern account pages — replace table forms with card layout
bogeyrd Mar 25, 2026
7938173
fix: force consistent form alignment across all pages (CSS only)
bogeyrd Mar 25, 2026
1fbc20c
fix: rewrite login/register to use generic-form-table for consistent …
bogeyrd Mar 25, 2026
7fdde5d
fix: remove white form background, fix dark text, translate submenu tabs
bogeyrd Mar 25, 2026
55f1ef4
fix: force dark theme on all inputs/forms — eliminate white borders a…
bogeyrd Mar 25, 2026
a99b70a
fix: nuclear override for white form background — inline style + cach…
bogeyrd Mar 25, 2026
78ca570
Revert "fix: nuclear override for white form background — inline styl…
bogeyrd Mar 25, 2026
c533478
Revert "fix: force dark theme on all inputs/forms — eliminate white b…
bogeyrd Mar 25, 2026
4cf4be0
fix: copy flux.css to kunairo and fix white form bg + black text at s…
bogeyrd Mar 25, 2026
4c623e7
feat: complete dark theme conversion of flux.css — all 73+ selectors …
bogeyrd Mar 25, 2026
86f806c
fix: eliminate mobile horizontal overflow
bogeyrd Mar 25, 2026
d7054e3
update: server rates 75x/75x/20x → 250x/250x/50x
bogeyrd Mar 25, 2026
dcc2493
fix: set Renewal => false and update ExpRates to 250x/250x
bogeyrd Mar 25, 2026
d738933
fix: prevent wide tables from breaking layout — horizontal scroll
bogeyrd Mar 26, 2026
498a6e2
fix: reduce table columns to prevent layout overflow (no scroll)
bogeyrd Mar 26, 2026
19197f3
feat: add real KunaiRO logo image to navbar, hero, and footer
bogeyrd Mar 26, 2026
5851f79
fix: revert navbar to text logo, resize hero/footer logo images
bogeyrd Mar 26, 2026
b6d4541
Revert "fix: revert navbar to text logo, resize hero/footer logo images"
bogeyrd Mar 26, 2026
bd145e5
Revert "feat: add real KunaiRO logo image to navbar, hero, and footer"
bogeyrd Mar 26, 2026
4631b77
fix: eliminate mobile overflow — all fixed-width glow lines now use %
bogeyrd Mar 26, 2026
0955b47
config: lock theme to kunairo only — hide theme selector
bogeyrd Mar 26, 2026
712c3bd
fix: use Flux::message('Language') instead of hardcoded label
bogeyrd Mar 26, 2026
6d0a33e
fix: language label shows 'Language'/'Idioma' not language name
bogeyrd Mar 26, 2026
04543f7
update: copyright to Xponzy Network
bogeyrd Mar 26, 2026
cec33cf
update: hero button 'Play Now' → 'Download' / 'Descargar'
bogeyrd Mar 26, 2026
842f196
feat: add ToS page, download page content, and rules page content
bogeyrd Mar 26, 2026
ca16c3e
config: set Spanish as default, hide language selector
bogeyrd Mar 26, 2026
8a0310f
feat: translate purchase + donate pages to Spanish
bogeyrd Mar 26, 2026
2535728
feat: translate ALL purchase + donate pages to Spanish
bogeyrd Mar 26, 2026
be5561a
feat: translate all remaining hardcoded text to Spanish via lang system
bogeyrd Mar 26, 2026
247badc
feat: real server data on homepage — players, WoE, time, schedule
bogeyrd Mar 26, 2026
5578b3a
Revert "feat: real server data on homepage — players, WoE, time, sche…
bogeyrd Mar 26, 2026
0ac7667
feat: real server data in stats bar — players, WoE, server status
bogeyrd Mar 26, 2026
fd011ec
fix: add missing lang keys for WoEInactive, Online, Offline
bogeyrd Mar 26, 2026
439bf55
feat: server info strip between hero and stats — time + WoE schedule
bogeyrd Mar 26, 2026
1fca91b
feat: unified 6-card stats grid with real server data
bogeyrd Mar 26, 2026
84f21a9
feat: premium 3x2 stats grid with WoE schedule cards
bogeyrd Mar 26, 2026
92ed6c3
Revert "feat: premium 3x2 stats grid with WoE schedule cards"
bogeyrd Mar 26, 2026
6958daa
Revert "feat: unified 6-card stats grid with real server data"
bogeyrd Mar 26, 2026
a601e3e
Revert "feat: server info strip between hero and stats — time + WoE s…
bogeyrd Mar 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
!/themes/default
!/themes/bootstrap
!/themes/installer
!/themes/kunairo

# Import Configs
/config/import
4 changes: 2 additions & 2 deletions config/application.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
// WARNING: This will be mostly IGNORED on non-POSIX-compliant OSes (e.g. Windows).
'DefaultLoginGroup' => null,
'DefaultCharMapServer' => null,
'DefaultLanguage' => 'en_us', // Specify the default control panel language (see FLUX_ROOT/lang/ directory for available languages.)
'DefaultLanguage' => 'es_es', // Spanish only. Change to 'en_us' for English.
'SiteTitle' => 'Flux Control Panel', // This value is only used if the theme decides to use it.
'ThemeName' => array('default', 'bootstrap'), // Names of the themes you would like list for use in the footer. Themes are in FLUX_ROOT/themes.
'ThemeName' => array('kunairo'), // Only kunairo theme available. Add 'default','bootstrap' to re-enable selector.
'ScriptTimeLimit' => 0, // Script execution time limit. Specifies (in seconds) how long a page should run before timing out. (0 means forever)
'MissingEmblemBMP' => 'empty.bmp', //
'ItemIconNameFormat' => '%d.png', // The filename format for item icons (defaults to {itemid}.png).
Expand Down
8 changes: 4 additions & 4 deletions config/servers.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,15 @@
'CharMapServers' => array(
array(
'ServerName' => 'FluxRO',
'Renewal' => true,
'Renewal' => false,
'MaxCharSlots' => 9,
'DateTimezone' => null, // Specifies game server's timezone for this char/map pair. (See: http://php.net/timezones)
//'ResetDenyMaps' => 'sec_pri', // Defaults to 'sec_pri'. This value can be an array of map names.
//'Database' => 'ragnarok', // Defaults to DbConfig.Database
'ExpRates' => array(
'Base' => 100, // Rate at which (base) exp is given
'Job' => 100, // Rate at which job exp is given
'Mvp' => 100 // MVP bonus exp rate
'Base' => 250, // Rate at which (base) exp is given
'Job' => 250, // Rate at which job exp is given
'Mvp' => 250 // MVP bonus exp rate
),
'DropRates' => array(
// If drop rate was below this amount and bonus is applied to it, the bonus can't make it exceed this amount.
Expand Down
77 changes: 77 additions & 0 deletions lang/en_us.php
Original file line number Diff line number Diff line change
Expand Up @@ -836,5 +836,82 @@
// Module: webcommands
'WCTitleLabel' => 'Web Commands',

// KunaiRO Theme
'KunaiROHeroTitle' => 'KunaiRO',
'KunaiROHeroTagline' => 'Where War Matters',
'KunaiROHeroDescription' => 'Competitive Pre-Renewal server with a living economy and real progression.',
'KunaiROBadgePreRenewal' => 'Pre-Renewal',
'KunaiROBadgeRates' => '250x / 250x / 50x',
'KunaiROBadgeNoPTW' => 'No Pay-to-Win',
'KunaiROBtnPlay' => 'Download',
'KunaiROBtnRegister' => 'Create Account',
'KunaiROBtnDiscord' => 'Discord',
'KunaiROFooterTagline' => 'Where War Matters',
'KunaiROFooterCopyright' => 'All rights reserved.',
'KunaiROFooterNavDownload' => 'Download',
'KunaiROFooterNavSupport' => 'Support',

// KunaiRO — Stats bar
'KunaiROStatsPlayersLabel' => 'Active Players',
'KunaiROStatsWoELabel' => 'WoE Status',
'KunaiROStatsWoEActive' => 'Active',
'KunaiROStatsUptimeLabel' => 'Uptime',
'KunaiROStatsRatesLabel' => 'Rates',
'KunaiROStatsRatesValue' => '250x / 250x / 50x',

// KunaiRO — Why section
'KunaiROWhyHeading' => 'Why KunaiRO',
'KunaiROWhyBalancedTitle' => 'Balanced Pre-Renewal',
'KunaiROWhyBalancedDesc' => 'Classes tuned for competitive PvP and WoE. No broken builds, no exploits.',
'KunaiROWhyNoPTWTitle' => 'Zero Pay-to-Win',
'KunaiROWhyNoPTWDesc' => 'Every advantage is earned in-game. No cash shop shortcuts.',
'KunaiROWhyEconomyTitle' => 'Living Economy',
'KunaiROWhyEconomyDesc' => 'Player-driven market with real supply and demand. Vending matters.',
'KunaiROWhyCompetitionTitle' => 'Real Competition',
'KunaiROWhyCompetitionDesc' => 'Weekly WoE, ranked PvP seasons, and guild rivalries that define the server.',

// KunaiRO — News section
'KunaiRONewsHeading' => 'Latest News',
'KunaiRONewsEmpty' => 'No news yet. Stay tuned for updates.',
'KunaiROLabelLanguage' => 'Language',

// KunaiRO — Submenu translations (account module)
'KunaiROSubLogin' => 'Login',
'KunaiROSubRegister' => 'Register',
'KunaiROSubResetPass' => 'Reset Password',
'KunaiROSubResend' => 'Resend E-mail Confirmation',
'KunaiROSubChangePass' => 'Change Password',
'KunaiROSubChangeMail' => 'Change E-mail',
'KunaiROSubChangeGender' => 'Change Gender',
'KunaiROSubViewAccount' => 'View Account',
'KunaiROSubTransfer' => 'Transfer Credits',
'KunaiROSubXferLog' => 'Credit Transfer History',
'KunaiROSubCart' => 'Go to Shopping Cart',
'KunaiROSubListAccounts' => 'List Accounts',

// KunaiRO — Purchase/Donate submenu
'KunaiROSubShop' => 'Shop',
'KunaiROSubGoToCart' => 'Go to Cart',
'KunaiROSubCheckout' => 'Checkout',
'KunaiROSubEmptyCart' => 'Empty Cart',
'KunaiROSubPending' => 'Pending Redemption',
'KunaiROSubDonate' => 'Make a Donation',
'KunaiROSubDonateHistory' => 'Donation History',
'KunaiROSubTrustedPaypal' => 'Trusted PayPal E-mails',

// KunaiRO — Day names
'KunaiRODaySunday' => 'Sunday',
'KunaiRODayMonday' => 'Monday',
'KunaiRODayTuesday' => 'Tuesday',
'KunaiRODayWednesday' => 'Wednesday',
'KunaiRODayThursday' => 'Thursday',
'KunaiRODayFriday' => 'Friday',
'KunaiRODaySaturday' => 'Saturday',

// KunaiRO — Stats
'KunaiROStatsWoEInactive' => 'Inactive',
'KunaiROStatsOnline' => 'Online',
'KunaiROStatsOffline' => 'Offline',

);
?>
77 changes: 77 additions & 0 deletions lang/es_es.php
Original file line number Diff line number Diff line change
Expand Up @@ -844,5 +844,82 @@
'SDGroup3' => 'Administration',
'SDLinkOpenNew' => 'Open a new ticket',

// KunaiRO Theme
'KunaiROHeroTitle' => 'KunaiRO',
'KunaiROHeroTagline' => 'Donde la guerra sí importa',
'KunaiROHeroDescription' => 'Servidor Pre-Renewal competitivo con economía viva y progreso real.',
'KunaiROBadgePreRenewal' => 'Pre-Renewal',
'KunaiROBadgeRates' => '250x / 250x / 50x',
'KunaiROBadgeNoPTW' => 'Sin Pay-to-Win',
'KunaiROBtnPlay' => 'Descargar',
'KunaiROBtnRegister' => 'Crear cuenta',
'KunaiROBtnDiscord' => 'Discord',
'KunaiROFooterTagline' => 'Donde la guerra sí importa',
'KunaiROFooterCopyright' => 'Todos los derechos reservados.',
'KunaiROFooterNavDownload' => 'Descargar',
'KunaiROFooterNavSupport' => 'Soporte',

// KunaiRO — Stats bar
'KunaiROStatsPlayersLabel' => 'Jugadores activos',
'KunaiROStatsWoELabel' => 'Estado WoE',
'KunaiROStatsWoEActive' => 'Activo',
'KunaiROStatsUptimeLabel' => 'Uptime',
'KunaiROStatsRatesLabel' => 'Rates',
'KunaiROStatsRatesValue' => '250x / 250x / 50x',

// KunaiRO — Why section
'KunaiROWhyHeading' => 'Por qué KunaiRO',
'KunaiROWhyBalancedTitle' => 'Pre-Renewal balanceado',
'KunaiROWhyBalancedDesc' => 'Clases ajustadas para PvP y WoE competitivo. Sin builds rotos ni exploits.',
'KunaiROWhyNoPTWTitle' => 'Sin Pay-to-Win',
'KunaiROWhyNoPTWDesc' => 'Cada ventaja se gana jugando. Sin atajos de cash shop.',
'KunaiROWhyEconomyTitle' => 'Economía viva',
'KunaiROWhyEconomyDesc' => 'Mercado impulsado por jugadores con oferta y demanda real. El vending importa.',
'KunaiROWhyCompetitionTitle' => 'Competencia real',
'KunaiROWhyCompetitionDesc' => 'WoE semanal, temporadas PvP rankeadas y rivalidades de guild que definen el servidor.',

// KunaiRO — News section
'KunaiRONewsHeading' => 'Últimas noticias',
'KunaiRONewsEmpty' => 'Sin noticias por ahora. Pronto habrá novedades.',
'KunaiROLabelLanguage' => 'Idioma',

// KunaiRO — Submenu translations (account module)
'KunaiROSubLogin' => 'Iniciar sesión',
'KunaiROSubRegister' => 'Registrarse',
'KunaiROSubResetPass' => 'Restablecer contraseña',
'KunaiROSubResend' => 'Reenviar confirmación de e-mail',
'KunaiROSubChangePass' => 'Cambiar contraseña',
'KunaiROSubChangeMail' => 'Cambiar e-mail',
'KunaiROSubChangeGender' => 'Cambiar género',
'KunaiROSubViewAccount' => 'Ver cuenta',
'KunaiROSubTransfer' => 'Transferir créditos',
'KunaiROSubXferLog' => 'Historial de transferencias',
'KunaiROSubCart' => 'Ir al carrito de compras',
'KunaiROSubListAccounts' => 'Listar cuentas',

// KunaiRO — Purchase/Donate submenu
'KunaiROSubShop' => 'Tienda',
'KunaiROSubGoToCart' => 'Ir al carrito',
'KunaiROSubCheckout' => 'Pagar',
'KunaiROSubEmptyCart' => 'Vaciar carrito',
'KunaiROSubPending' => 'Pendientes de canjear',
'KunaiROSubDonate' => 'Hacer una donación',
'KunaiROSubDonateHistory' => 'Historial de donaciones',
'KunaiROSubTrustedPaypal' => 'Emails de PayPal confiables',

// KunaiRO — Day names
'KunaiRODaySunday' => 'Domingo',
'KunaiRODayMonday' => 'Lunes',
'KunaiRODayTuesday' => 'Martes',
'KunaiRODayWednesday' => 'Miércoles',
'KunaiRODayThursday' => 'Jueves',
'KunaiRODayFriday' => 'Viernes',
'KunaiRODaySaturday' => 'Sábado',

// KunaiRO — Stats
'KunaiROStatsWoEInactive' => 'Inactivo',
'KunaiROStatsOnline' => 'Online',
'KunaiROStatsOffline' => 'Offline',

);
?>
4 changes: 2 additions & 2 deletions modules/purchase/cart.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
$this->loginRequired();

if ($server->cart->isEmpty()) {
$session->setMessageData('Your cart is currently empty.');
$session->setMessageData('Tu carrito está vacío.');
$this->redirect($this->url('purchase'));
}

$title = 'Shopping Cart';
$title = 'Carrito de compras';

require_once 'Flux/ItemShop.php';
$items = $server->cart->getCartItems();
Expand Down
14 changes: 7 additions & 7 deletions modules/purchase/checkout.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@

$this->loginRequired();

$title = 'Checkout Area';
$title = 'Pagar';

if ($server->cart->isEmpty()) {
$session->setMessageData('Your cart is currently empty.');
$session->setMessageData('Tu carrito está vacío.');
$this->redirect($this->url('purchase'));
}
elseif (!$server->cart->hasFunds()) {
$session->setMessageData('You do not have sufficient funds to make this purchase!');
$session->setMessageData('No tienes suficientes créditos para esta compra.');
$this->redirect($this->url('purchase'));
}

Expand Down Expand Up @@ -51,19 +51,19 @@
if ($res) {
if (!$deduct) {
$server->cart->clear();
$session->setMessageData('Failed to purchase all of the items in your cart!');
$session->setMessageData('No se pudieron comprar los items de tu carrito.');
}
elseif ($deduct != $server->cart->getTotal()) {
$server->cart->clear();
$session->setMessageData('Items have been purchased, however, some failed (your credits are still there.)');
$session->setMessageData('Items comprados, pero algunos fallaron (tus créditos siguen ahí).');
}
else {
$server->cart->clear();
$session->setMessageData('Items have been purchased. You may redeem them from the Redemption NPC.');
$session->setMessageData('Items comprados exitosamente. Puedes canjearlos en el NPC de Canjeo.');
}
}
else {
$session->setMessageData('Purchase went bad, contact an admin!');
$session->setMessageData('Error en la compra, contacta a un administrador.');
}

$this->redirect();
Expand Down
4 changes: 2 additions & 2 deletions modules/purchase/clear.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
require_once 'Flux/ItemShop.php';

if ($server->cart && $server->cart->clear()) {
$session->setMessageData("Your cart has been emptied.");
$session->setMessageData("Tu carrito ha sido vaciado.");
}
else {
$session->setMessageData("Couldn't empty your cart, maybe it's already empty.");
$session->setMessageData("No se pudo vaciar tu carrito, puede que ya esté vacío.");
}

$this->redirect($this->url('purchase'));
Expand Down
10 changes: 5 additions & 5 deletions modules/purchase/remove.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,20 @@
$nRemoved = $server->cart->deleteByItemNum($num);
if ($nRemoved) {
if (!$server->cart->isEmpty()) {
$session->setMessageData("Removed $nRemoved item(s) from your cart.");
$session->setMessageData("Se eliminaron $nRemoved item(s) de tu carrito.");
$this->redirect($this->url('purchase', 'cart'));
}
else {
$session->setMessageData("Removed $nRemoved item(s) from your cart. Your cart is now empty.");
$session->setMessageData("Se eliminaron $nRemoved item(s) de tu carrito. Tu carrito ahora está vacío.");
}
}
else {
$session->setMessageData("There were no items to remove from your cart.");
$session->setMessageData("No había items para eliminar de tu carrito.");
}

$this->redirect($this->url('purchase'));
}

$session->setMessageData('No items were removed from your cart because none were selected.');
$session->setMessageData('No se eliminaron items porque no seleccionaste ninguno.');
$this->redirect($this->url('purchase', 'cart'));
?>
10 changes: 9 additions & 1 deletion modules/woe/custom.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,15 @@
$col = "sday.value AS sday, eday.value AS eday, ";
$col .= "stime.value AS stime, etime.value AS etime";

$dayNames = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
$dayNames = array(
Flux::message('KunaiRODaySunday'),
Flux::message('KunaiRODayMonday'),
Flux::message('KunaiRODayTuesday'),
Flux::message('KunaiRODayWednesday'),
Flux::message('KunaiRODayThursday'),
Flux::message('KunaiRODayFriday'),
Flux::message('KunaiRODaySaturday')
);
$woeTimes = array();
foreach ($session->loginAthenaGroup->athenaServers as $athenaServer) {
$sql = "SELECT $col FROM {$athenaServer->charMapDatabase}.mapreg AS sday ";
Expand Down
10 changes: 9 additions & 1 deletion modules/woe/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,15 @@
if (!defined('FLUX_ROOT')) exit;

$title = Flux::message('WoeTitle');
$dayNames = array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
$dayNames = array(
Flux::message('KunaiRODaySunday'),
Flux::message('KunaiRODayMonday'),
Flux::message('KunaiRODayTuesday'),
Flux::message('KunaiRODayWednesday'),
Flux::message('KunaiRODayThursday'),
Flux::message('KunaiRODayFriday'),
Flux::message('KunaiRODaySaturday')
);
$woeTimes = array();

foreach ($session->loginAthenaGroup->athenaServers as $athenaServer) {
Expand Down
Loading