mirror of
https://github.com/slawkens/myaac.git
synced 2025-04-29 10:49:22 +02:00
Rewrite towns loading code, removed OTBM loader (was too slow)
By default load from towns table in db
This commit is contained in:
parent
18bd325a44
commit
c980a09146
@ -12,6 +12,7 @@ use DebugBar\StandardDebugBar;
|
|||||||
use MyAAC\Cache\Cache;
|
use MyAAC\Cache\Cache;
|
||||||
use MyAAC\CsrfToken;
|
use MyAAC\CsrfToken;
|
||||||
use MyAAC\Hooks;
|
use MyAAC\Hooks;
|
||||||
|
use MyAAC\Models\Town;
|
||||||
use MyAAC\Settings;
|
use MyAAC\Settings;
|
||||||
use MyAAC\Towns;
|
use MyAAC\Towns;
|
||||||
|
|
||||||
@ -173,4 +174,17 @@ define('USE_ACCOUNT_NAME', $db->hasColumn('accounts', 'name'));
|
|||||||
define('USE_ACCOUNT_NUMBER', $db->hasColumn('accounts', 'number'));
|
define('USE_ACCOUNT_NUMBER', $db->hasColumn('accounts', 'number'));
|
||||||
define('USE_ACCOUNT_SALT', $db->hasColumn('accounts', 'salt'));
|
define('USE_ACCOUNT_SALT', $db->hasColumn('accounts', 'salt'));
|
||||||
|
|
||||||
Towns::load();
|
$towns = Cache::remember('towns', 10 * 60, function () use ($db) {
|
||||||
|
if ($db->hasTable('towns') && Town::count() > 0) {
|
||||||
|
return Town::orderBy('id', 'ASC')->pluck('name', 'id')->toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
return [];
|
||||||
|
});
|
||||||
|
|
||||||
|
if (count($towns) <= 0) {
|
||||||
|
$towns = setting('core.towns');
|
||||||
|
}
|
||||||
|
|
||||||
|
config(['towns', $towns]);
|
||||||
|
unset($towns);
|
||||||
|
@ -94,7 +94,7 @@ $locale['step_database_loaded_npcs'] = 'NPCs has been loaded...';
|
|||||||
$locale['step_database_error_npcs'] = 'There were some problems loading your NPCs';
|
$locale['step_database_error_npcs'] = 'There were some problems loading your NPCs';
|
||||||
$locale['step_database_loaded_spells'] = 'Spells has been loaded...';
|
$locale['step_database_loaded_spells'] = 'Spells has been loaded...';
|
||||||
$locale['step_database_loaded_towns'] = 'Towns has been loaded...';
|
$locale['step_database_loaded_towns'] = 'Towns has been loaded...';
|
||||||
$locale['step_database_error_towns'] = 'There were some problems loading your towns. You will need to configure them manually in config.';
|
$locale['step_database_error_towns'] = 'There were some problems loading your towns. You will need to configure them manually in Settings.';
|
||||||
$locale['step_database_created_account'] = 'Created admin account...';
|
$locale['step_database_created_account'] = 'Created admin account...';
|
||||||
$locale['step_database_created_news'] = 'Newses has been created...';
|
$locale['step_database_created_news'] = 'Newses has been created...';
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ $locale['step_database_loaded_npcs'] = 'Załadowano NPCs...';
|
|||||||
$locale['step_database_error_npcs'] = 'Wystąpił problem podczas ładowania NPCs';
|
$locale['step_database_error_npcs'] = 'Wystąpił problem podczas ładowania NPCs';
|
||||||
$locale['step_database_loaded_spells'] = 'Załadowano czary (spells)...';
|
$locale['step_database_loaded_spells'] = 'Załadowano czary (spells)...';
|
||||||
$locale['step_database_loaded_towns'] = 'Załadowano miasta (towns)...';
|
$locale['step_database_loaded_towns'] = 'Załadowano miasta (towns)...';
|
||||||
$locale['step_database_error_towns'] = 'Wystąpił problem podczas ładowania miast. Trzeba będzie je skonfigurować manualnie.';
|
$locale['step_database_error_towns'] = 'Wystąpił problem podczas ładowania miast. Trzeba będzie je skonfigurować manualnie w ustawieniach.';
|
||||||
$locale['step_database_created_account'] = 'Utworzono konto admina...';
|
$locale['step_database_created_account'] = 'Utworzono konto admina...';
|
||||||
$locale['step_database_created_news'] = 'Utworzono newsy...';
|
$locale['step_database_created_news'] = 'Utworzono newsy...';
|
||||||
|
|
||||||
|
@ -238,9 +238,8 @@ return [
|
|||||||
'towns' => [
|
'towns' => [
|
||||||
'name' => 'Towns',
|
'name' => 'Towns',
|
||||||
'type' => 'textarea',
|
'type' => 'textarea',
|
||||||
'desc' => "if you use TFS 1.3 with support for 'towns' table in database, then you can ignore this - it will be configured automatically (from MySQL database - Table - towns)<br/>" .
|
'desc' => "If you use TFS 1.3+ with support for 'towns' table in database, then you can ignore this - it will be automatically configured from there.<br/>" .
|
||||||
"otherwise it will try to load from your .OTBM map file<br/>" .
|
"If you don't see towns on website, then you need to fill this out",
|
||||||
"if you don't see towns on website, then you need to fill this out",
|
|
||||||
'default' => "0=No Town\n1=Sample Town",
|
'default' => "0=No Town\n1=Sample Town",
|
||||||
'callbacks' => [
|
'callbacks' => [
|
||||||
'get' => function ($value) {
|
'get' => function ($value) {
|
||||||
|
@ -25,6 +25,9 @@
|
|||||||
|
|
||||||
namespace MyAAC;
|
namespace MyAAC;
|
||||||
|
|
||||||
|
use MyAAC\Cache\Cache;
|
||||||
|
use MyAAC\Models\Town;
|
||||||
|
|
||||||
class DataLoader
|
class DataLoader
|
||||||
{
|
{
|
||||||
private static $locale;
|
private static $locale;
|
||||||
@ -78,7 +81,11 @@ class DataLoader
|
|||||||
|
|
||||||
self::$startTime = microtime(true);
|
self::$startTime = microtime(true);
|
||||||
|
|
||||||
if (Towns::save()) {
|
$cache = Cache::getInstance();
|
||||||
|
$cache->delete('towns'); // will be reloaded after next page load
|
||||||
|
|
||||||
|
global $db;
|
||||||
|
if ($db->hasTable('towns') && Town::count() > 0) {
|
||||||
success(self::$locale['step_database_loaded_towns'] . self::getLoadedTime());
|
success(self::$locale['step_database_loaded_towns'] . self::getLoadedTime());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1,129 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Project: MyAAC
|
|
||||||
* Automatic Account Creator for Open Tibia Servers
|
|
||||||
*
|
|
||||||
* This is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2.1 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @package MyAAC
|
|
||||||
* @author Slawkens <slawkens@gmail.com>
|
|
||||||
* @copyright 2020 MyAAC
|
|
||||||
* @link https://my-aac.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace MyAAC;
|
|
||||||
|
|
||||||
use MyAAC\Models\Town;
|
|
||||||
|
|
||||||
class Towns
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private static $filename = CACHE . 'persistent/' . 'towns.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine towns
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public static function determine()
|
|
||||||
{
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
if($db->hasTable('towns')) {
|
|
||||||
return self::getFromDatabase();
|
|
||||||
}
|
|
||||||
|
|
||||||
return self::getFromOTBM();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load cached towns file
|
|
||||||
*/
|
|
||||||
public static function load()
|
|
||||||
{
|
|
||||||
$towns = config('towns');
|
|
||||||
if (file_exists(self::$filename)) {
|
|
||||||
$towns = require self::$filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
config(['towns', $towns]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save into cache file
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public static function save()
|
|
||||||
{
|
|
||||||
$towns = self::determine();
|
|
||||||
if (count($towns) > 0) {
|
|
||||||
file_put_contents(self::$filename, '<?php return ' . var_export($towns, true) . ';', LOCK_EX);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load from OTBM map file
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public static function getFromOTBM()
|
|
||||||
{
|
|
||||||
$mapName = configLua('mapName');
|
|
||||||
if (!isset($mapName)) {
|
|
||||||
$mapName = configLua('map');
|
|
||||||
$mapFile = config('server_path') . $mapName;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strpos($mapName, '.otbm') === false) {
|
|
||||||
$mapName .= '.otbm';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($mapFile)) {
|
|
||||||
$mapFile = config('data_path') . 'world/' . $mapName;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strpos($mapFile, '.gz') !== false) {
|
|
||||||
$mapFile = str_replace('.gz', '', $mapFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
$towns = [];
|
|
||||||
if (file_exists($mapFile)) {
|
|
||||||
ini_set('memory_limit', '-1');
|
|
||||||
|
|
||||||
$townsReader = new TownsReader($mapFile);
|
|
||||||
$townsReader->load();
|
|
||||||
|
|
||||||
$towns = $townsReader->get();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $towns;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load from database
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public static function getFromDatabase()
|
|
||||||
{
|
|
||||||
return Town::orderBy('id', 'ASC')->pluck('name', 'id')->toArray();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,84 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
This file is part of OTSCMS (http://www.otscms.com/) project.
|
|
||||||
|
|
||||||
Copyright (C) 2005 - 2007 Wrzasq (wrzasq@gmail.com)
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace MyAAC;
|
|
||||||
|
|
||||||
/*
|
|
||||||
This code bases on original OTServ code for .otbm files - file iomapotbm.cpp rev.2141
|
|
||||||
*/
|
|
||||||
class TownsReader
|
|
||||||
{
|
|
||||||
// node bytes
|
|
||||||
const ESCAPE_CHAR = 0xFD;
|
|
||||||
const NODE_START = 0xFE;
|
|
||||||
|
|
||||||
// map node types
|
|
||||||
const OTBM_TOWN = 13;
|
|
||||||
|
|
||||||
// file handler
|
|
||||||
protected $file;
|
|
||||||
|
|
||||||
// towns
|
|
||||||
private $towns = [];
|
|
||||||
|
|
||||||
// loads map .otbm file
|
|
||||||
public function __construct($file)
|
|
||||||
{
|
|
||||||
// opens file for reading
|
|
||||||
$this->file = fopen($file, 'rb');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function load()
|
|
||||||
{
|
|
||||||
// checks if file is opened correctly
|
|
||||||
if ($this->file) {
|
|
||||||
// skips version
|
|
||||||
fseek($this->file, 4);
|
|
||||||
|
|
||||||
// reads nodes chain
|
|
||||||
while (!feof($this->file)) {
|
|
||||||
// reads byte
|
|
||||||
switch (ord(fgetc($this->file))) {
|
|
||||||
// maybe a town node
|
|
||||||
case self::NODE_START:
|
|
||||||
// reads node type
|
|
||||||
if (ord(fgetc($this->file)) == self::OTBM_TOWN) {
|
|
||||||
$id = unpack('L', fread($this->file, 4));
|
|
||||||
$length = unpack('S', fread($this->file, 2));
|
|
||||||
|
|
||||||
// reads town name
|
|
||||||
$this->towns[$id[1]] = fread($this->file, $length[1]);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
// escape next character - it might be NODE_START character which is in fact not
|
|
||||||
case self::ESCAPE_CHAR:
|
|
||||||
fgetc($this->file);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get() {
|
|
||||||
return $this->towns;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user