mirror of
https://github.com/slawkens/myaac.git
synced 2025-12-16 13:59:47 +01:00
Compare commits
2 Commits
develop
...
feature/ge
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6353febfd0 | ||
|
|
c8475ad65e |
2
.github/workflows/cypress.yml
vendored
2
.github/workflows/cypress.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: [ '8.1', '8.2', '8.3', '8.4', '8.5' ]
|
php-versions: [ '8.1', '8.2', '8.3', '8.4' ]
|
||||||
ots: ['tfs-1.4', 'canary-3.1.2'] # TODO: add 'tfs-master' (actually doesn't work cause AAC doesn't support reading .env configuration)
|
ots: ['tfs-1.4', 'canary-3.1.2'] # TODO: add 'tfs-master' (actually doesn't work cause AAC doesn't support reading .env configuration)
|
||||||
name: Cypress (PHP ${{ matrix.php-versions }}, ${{ matrix.ots }})
|
name: Cypress (PHP ${{ matrix.php-versions }}, ${{ matrix.ots }})
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
13
common.php
13
common.php
@@ -148,17 +148,16 @@ if(!IS_CLI) {
|
|||||||
|
|
||||||
/** @var array $config */
|
/** @var array $config */
|
||||||
ini_set('log_errors', 1);
|
ini_set('log_errors', 1);
|
||||||
if(isset($config['env']) && $config['env'] !== 'dev' && !defined('MYAAC_INSTALL')) {
|
if(@$config['env'] === 'dev' || defined('MYAAC_INSTALL')) {
|
||||||
ini_set('display_errors', 0);
|
|
||||||
ini_set('display_startup_errors', 0);
|
|
||||||
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ini_set('html_errors', 0);
|
|
||||||
ini_set('display_errors', 1);
|
ini_set('display_errors', 1);
|
||||||
ini_set('display_startup_errors', 1);
|
ini_set('display_startup_errors', 1);
|
||||||
error_reporting(E_ALL);
|
error_reporting(E_ALL);
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
ini_set('display_errors', 0);
|
||||||
|
ini_set('display_startup_errors', 0);
|
||||||
|
error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
|
||||||
|
}
|
||||||
|
|
||||||
$autoloadFile = VENDOR . 'autoload.php';
|
$autoloadFile = VENDOR . 'autoload.php';
|
||||||
if (!is_file($autoloadFile)) {
|
if (!is_file($autoloadFile)) {
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ use MyAAC\Models\Guild;
|
|||||||
use MyAAC\Models\House;
|
use MyAAC\Models\House;
|
||||||
use MyAAC\Models\Pages;
|
use MyAAC\Models\Pages;
|
||||||
use MyAAC\Models\Player;
|
use MyAAC\Models\Player;
|
||||||
|
use MyAAC\Models\PlayerDeath;
|
||||||
|
use MyAAC\Models\PlayerKillers;
|
||||||
use MyAAC\News;
|
use MyAAC\News;
|
||||||
use MyAAC\Plugins;
|
use MyAAC\Plugins;
|
||||||
use MyAAC\Settings;
|
use MyAAC\Settings;
|
||||||
@@ -1135,11 +1137,29 @@ function csrfProtect(): void
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTopPlayers($limit = 5, $skill = 'level') {
|
function getTopPlayers($limit = 5, $skill = POT::SKILL_LEVEL)
|
||||||
|
{
|
||||||
global $db;
|
global $db;
|
||||||
|
|
||||||
if ($skill === 'level') {
|
$skillOriginal = $skill;
|
||||||
$skill = 'experience';
|
|
||||||
|
if (is_string($skill)) {
|
||||||
|
$skills = [
|
||||||
|
'level' => POT::SKILL_LEVEL,
|
||||||
|
'experience' => POT::SKILL_LEVEL,
|
||||||
|
|
||||||
|
'magic' => POT::SKILL_MAGIC,
|
||||||
|
'maglevel' => POT::SKILL_MAGIC,
|
||||||
|
|
||||||
|
'balance' => SKILL_BALANCE,
|
||||||
|
'frags' => SKILL_FRAGS,
|
||||||
|
];
|
||||||
|
|
||||||
|
$skill = $skills[$skill] ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_numeric($skill)) {
|
||||||
|
throw new RuntimeException("getTopPlayers: Invalid skill: $skillOriginal");
|
||||||
}
|
}
|
||||||
|
|
||||||
return Cache::remember("top_{$limit}_{$skill}", 2 * 60, function () use ($db, $limit, $skill) {
|
return Cache::remember("top_{$limit}_{$skill}", 2 * 60, function () use ($db, $limit, $skill) {
|
||||||
@@ -1160,15 +1180,64 @@ function getTopPlayers($limit = 5, $skill = 'level') {
|
|||||||
$columns[] = 'lookmount';
|
$columns[] = 'lookmount';
|
||||||
}
|
}
|
||||||
|
|
||||||
return Player::query()
|
$query = Player::query()
|
||||||
->select($columns)
|
->select($columns)
|
||||||
->withOnlineStatus()
|
->withOnlineStatus()
|
||||||
->notDeleted()
|
->notDeleted()
|
||||||
->where('group_id', '<', setting('core.highscores_groups_hidden'))
|
->where('group_id', '<', setting('core.highscores_groups_hidden'))
|
||||||
->whereNotIn('id', setting('core.highscores_ids_hidden'))
|
->whereNotIn('id', setting('core.highscores_ids_hidden'))
|
||||||
->where('account_id', '!=', 1)
|
->where('account_id', '!=', 1)
|
||||||
->orderByDesc($skill)
|
->orderByDesc('value');
|
||||||
->limit($limit)
|
|
||||||
|
if ($limit > 0) {
|
||||||
|
$query->limit($limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($skill >= POT::SKILL_FIRST && $skill <= POT::SKILL_LAST) { // skills
|
||||||
|
if ($db->hasColumn('players', 'skill_fist')) {// tfs 1.0
|
||||||
|
$skill_ids = array(
|
||||||
|
POT::SKILL_FIST => 'skill_fist',
|
||||||
|
POT::SKILL_CLUB => 'skill_club',
|
||||||
|
POT::SKILL_SWORD => 'skill_sword',
|
||||||
|
POT::SKILL_AXE => 'skill_axe',
|
||||||
|
POT::SKILL_DIST => 'skill_dist',
|
||||||
|
POT::SKILL_SHIELD => 'skill_shielding',
|
||||||
|
POT::SKILL_FISH => 'skill_fishing',
|
||||||
|
);
|
||||||
|
|
||||||
|
$query
|
||||||
|
->addSelect($skill_ids[$skill] . ' as value')
|
||||||
|
->orderByDesc($skill_ids[$skill] . '_tries');
|
||||||
|
} else {
|
||||||
|
$query
|
||||||
|
->join('player_skills', 'player_skills.player_id', '=', 'players.id')
|
||||||
|
->where('skillid', $skill)
|
||||||
|
->addSelect('player_skills.value as value');
|
||||||
|
}
|
||||||
|
} else if ($skill == SKILL_FRAGS) // frags
|
||||||
|
{
|
||||||
|
if ($db->hasTable('player_killers')) {
|
||||||
|
$query->addSelect(['value' => PlayerKillers::whereColumn('player_killers.player_id', 'players.id')->selectRaw('COUNT(*)')]);
|
||||||
|
} else {
|
||||||
|
$query->addSelect(['value' => PlayerDeath::unjustified()->whereColumn('player_deaths.killed_by', 'players.name')->selectRaw('COUNT(*)')]);
|
||||||
|
}
|
||||||
|
} else if ($skill == SKILL_BALANCE) // balance
|
||||||
|
{
|
||||||
|
$query
|
||||||
|
->addSelect('players.balance as value');
|
||||||
|
} else {
|
||||||
|
if ($skill == POT::SKILL_MAGIC) {
|
||||||
|
$query
|
||||||
|
->addSelect('players.maglevel as value', 'players.maglevel')
|
||||||
|
->orderByDesc('manaspent');
|
||||||
|
} else { // level
|
||||||
|
$query
|
||||||
|
->addSelect('players.level as value', 'players.experience')
|
||||||
|
->orderByDesc('experience');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $query
|
||||||
->get()
|
->get()
|
||||||
->map(function ($e, $i) {
|
->map(function ($e, $i) {
|
||||||
$row = $e->toArray();
|
$row = $e->toArray();
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ $up = function () use ($db) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$down = function () use ($db) {
|
$up = function () use ($db) {
|
||||||
if (!$db->hasColumn(TABLE_PREFIX . 'screenshots', 'name')) {
|
if (!$db->hasColumn(TABLE_PREFIX . 'screenshots', 'name')) {
|
||||||
$db->addColumn(TABLE_PREFIX . 'screenshots', 'name', 'VARCHAR(30) NOT NULL');
|
$db->addColumn(TABLE_PREFIX . 'screenshots', 'name', 'VARCHAR(30) NOT NULL');
|
||||||
}
|
}
|
||||||
|
|||||||
29
system/pages/#examples/top-5.php
Normal file
29
system/pages/#examples/top-5.php
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Example of using getTopPlayers() function
|
||||||
|
* to display the best players for each skill
|
||||||
|
*/
|
||||||
|
defined('MYAAC') or die('Direct access not allowed!');
|
||||||
|
|
||||||
|
$skills = [
|
||||||
|
'magic', 'level',
|
||||||
|
'balance', 'frags',
|
||||||
|
POT::SKILL_FIST, POT::SKILL_CLUB,
|
||||||
|
POT::SKILL_SWORD, POT::SKILL_AXE,
|
||||||
|
POT::SKILL_DISTANCE, POT::SKILL_SHIELD,
|
||||||
|
POT::SKILL_FISH
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($skills as $skill) {?>
|
||||||
|
<ul>
|
||||||
|
<?php
|
||||||
|
echo '<strong>' . ucwords(is_string($skill) ? $skill : getSkillName($skill)) . '</strong>';
|
||||||
|
foreach (getTopPlayers(5, $skill) as $player) {?>
|
||||||
|
<li><?= $player['rank'] . '. ' . $player['name'] . ' - ' . $player['value']; ?></li>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</ul>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
@@ -176,9 +176,7 @@ if (empty($highscores)) {
|
|||||||
POT::SKILL_FISH => 'skill_fishing',
|
POT::SKILL_FISH => 'skill_fishing',
|
||||||
);
|
);
|
||||||
|
|
||||||
$query
|
$query->addSelect($skill_ids[$skill] . ' as value');
|
||||||
->addSelect($skill_ids[$skill] . ' as value')
|
|
||||||
->orderByDesc($skill_ids[$skill] . '_tries');
|
|
||||||
} else {
|
} else {
|
||||||
$query
|
$query
|
||||||
->join('player_skills', 'player_skills.player_id', '=', 'players.id')
|
->join('player_skills', 'player_skills.player_id', '=', 'players.id')
|
||||||
@@ -200,11 +198,11 @@ if (empty($highscores)) {
|
|||||||
if ($skill == POT::SKILL__MAGLEVEL) {
|
if ($skill == POT::SKILL__MAGLEVEL) {
|
||||||
$query
|
$query
|
||||||
->addSelect('players.maglevel as value', 'players.maglevel')
|
->addSelect('players.maglevel as value', 'players.maglevel')
|
||||||
->orderByDesc('manaspent');
|
->orderBy('manaspent');
|
||||||
} else { // level
|
} else { // level
|
||||||
$query
|
$query
|
||||||
->addSelect('players.level as value', 'players.experience')
|
->addSelect('players.level as value', 'players.experience')
|
||||||
->orderByDesc('experience');
|
->orderBy('experience');
|
||||||
$list = 'experience';
|
$list = 'experience';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -342,16 +342,6 @@ class Validator
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
global $hooks;
|
|
||||||
|
|
||||||
$params = ['name' => $name, 'error' => ''];
|
|
||||||
$hooks->triggerFilter(HOOK_FILTER_VALIDATE_CHARACTER_NEW_NAME, $params);
|
|
||||||
|
|
||||||
if (!empty($params['error'])) {
|
|
||||||
self::$lastError = $params['error'];
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -108,7 +108,6 @@ define('HOOK_FILTER_ROUTES', ++$i);
|
|||||||
define('HOOK_FILTER_TWIG_DISPLAY', ++$i);
|
define('HOOK_FILTER_TWIG_DISPLAY', ++$i);
|
||||||
define('HOOK_FILTER_TWIG_RENDER', ++$i);
|
define('HOOK_FILTER_TWIG_RENDER', ++$i);
|
||||||
define('HOOK_FILTER_THEME_FOOTER', ++$i);
|
define('HOOK_FILTER_THEME_FOOTER', ++$i);
|
||||||
define('HOOK_FILTER_VALIDATE_CHARACTER_NEW_NAME', ++$i);
|
|
||||||
|
|
||||||
const HOOK_FIRST = HOOK_INIT;
|
const HOOK_FIRST = HOOK_INIT;
|
||||||
define('HOOK_LAST', $i);
|
define('HOOK_LAST', $i);
|
||||||
|
|||||||
Reference in New Issue
Block a user