mirror of
				https://github.com/slawkens/myaac.git
				synced 2025-11-03 09:26:22 +01:00 
			
		
		
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			v1.6
			...
			feature/ac
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					9d976256c3 | ||
| 
						 | 
					3c1210fefa | ||
| 
						 | 
					45af46b3c1 | ||
| 
						 | 
					58feff50c6 | 
							
								
								
									
										4
									
								
								.github/workflows/cypress.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.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' ]
 | 
					        php-versions: [ '8.1', '8.2', '8.3' ]
 | 
				
			||||||
        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:
 | 
				
			||||||
@@ -146,7 +146,6 @@ jobs:
 | 
				
			|||||||
          with:
 | 
					          with:
 | 
				
			||||||
            name: cypress-screenshots-${{ matrix.php-versions }}-${{ matrix.ots }}
 | 
					            name: cypress-screenshots-${{ matrix.php-versions }}-${{ matrix.ots }}
 | 
				
			||||||
            path: cypress/screenshots
 | 
					            path: cypress/screenshots
 | 
				
			||||||
            if-no-files-found: ignore
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        - name: Upload Cypress Videos
 | 
					        - name: Upload Cypress Videos
 | 
				
			||||||
          uses: actions/upload-artifact@v4
 | 
					          uses: actions/upload-artifact@v4
 | 
				
			||||||
@@ -154,7 +153,6 @@ jobs:
 | 
				
			|||||||
          with:
 | 
					          with:
 | 
				
			||||||
            name: cypress-videos-${{ matrix.php-versions }}-${{ matrix.ots }}
 | 
					            name: cypress-videos-${{ matrix.php-versions }}-${{ matrix.ots }}
 | 
				
			||||||
            path: cypress/videos
 | 
					            path: cypress/videos
 | 
				
			||||||
            if-no-files-found: ignore
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        - name: Upload PHP Logs
 | 
					        - name: Upload PHP Logs
 | 
				
			||||||
          uses: actions/upload-artifact@v4
 | 
					          uses: actions/upload-artifact@v4
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								.github/workflows/phpstan.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/phpstan.yml
									
									
									
									
										vendored
									
									
								
							@@ -14,7 +14,7 @@ jobs:
 | 
				
			|||||||
    strategy:
 | 
					    strategy:
 | 
				
			||||||
      fail-fast: false
 | 
					      fail-fast: false
 | 
				
			||||||
      matrix:
 | 
					      matrix:
 | 
				
			||||||
        php-versions: [ '8.1', '8.2', '8.3', '8.4' ]
 | 
					        php-versions: [ '8.1', '8.2', '8.3' ]
 | 
				
			||||||
    steps:
 | 
					    steps:
 | 
				
			||||||
      - name: "Checkout"
 | 
					      - name: "Checkout"
 | 
				
			||||||
        uses: "actions/checkout@v4"
 | 
					        uses: "actions/checkout@v4"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@
 | 
				
			|||||||
	Options -MultiViews
 | 
						Options -MultiViews
 | 
				
			||||||
</IfModule>
 | 
					</IfModule>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<FilesMatch "^(.*\.md|.*\.json|.*\.dist|.*\.sql|CHANGELOG|README|composer\.lock)$">
 | 
					<FilesMatch "^(CHANGELOG\.md|README\.md|composer\.json|composer\.lock|package\.json|package-lock\.json|cypress\.env\.json)$">
 | 
				
			||||||
	Require all denied
 | 
						Require all denied
 | 
				
			||||||
</FilesMatch>
 | 
					</FilesMatch>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,115 +1,5 @@
 | 
				
			|||||||
# Changelog
 | 
					# Changelog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## [1.6 - 03.06.2025]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Added
 | 
					 | 
				
			||||||
* Add new setting/configurable: site_url, prevents domain spoofing (https://github.com/slawkens/myaac/commit/d8a6090be382c35c19117cfef964b594ed02b8d4)
 | 
					 | 
				
			||||||
* Add new account coins setting (https://github.com/slawkens/myaac/commit/28886551e86fe562172c4c7f2afb89a2e7672c2e)
 | 
					 | 
				
			||||||
* autoload: settings/install/init.php (https://github.com/slawkens/myaac/commit/e5749437074c3b3556628a2aeb5bad2edf97bde0, https://github.com/slawkens/myaac/commit/7d213f479a7e40c6254069b5fc4e578dc32bf8d9, https://github.com/slawkens/myaac/commit/207d6bc69120aba1af2b51808f17e0059b571fed)
 | 
					 | 
				
			||||||
* Protect against csrf in more places (accounts & guilds & forums pages) (https://github.com/slawkens/myaac/commit/6eda38603c8ed7e99b92a78a4600b1245377f74d, https://github.com/slawkens/myaac/commit/e776bd52beb3064a9e694efd1b9021ec972ee2f6, https://github.com/slawkens/myaac/commit/84d502bf105f2a789481fba1acc820d236b4de66)
 | 
					 | 
				
			||||||
* Added two new hooks for pages loaded from database (custom pages): HOOK_BEFORE_PAGE_CUSTOM, HOOK_AFTER_PAGE_CUSTOM (https://github.com/slawkens/myaac/commit/c961a1ebf837f2ab1734a825ff2c57b4937610c9)
 | 
					 | 
				
			||||||
* Add global variables into $hooks->executeFilter (https://github.com/slawkens/myaac/commit/8fdea943768b20193eede99d60313ee84511a0be)
 | 
					 | 
				
			||||||
* Add getNPCsCount() to OTS_InfoRespond (https://github.com/slawkens/myaac/commit/7d435ff6433ef1fb2295ee79ed043ee10dc725e9)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Fixed
 | 
					 | 
				
			||||||
* Allow [] in character name (https://github.com/slawkens/myaac/commit/de6603a51347b9e656c58637ed9971fffdd7cedd)
 | 
					 | 
				
			||||||
* Do not allow access to tools/ folder after install (https://github.com/slawkens/myaac/commit/6e0f5913831f8dba69fd2d1505be3e2a303c6324)
 | 
					 | 
				
			||||||
* Fix CHANGELOG-1.x.md loading in admin panel (https://github.com/slawkens/myaac/commit/4a30fb495dbfbe1d434e8d52419eaf44fe517aee)
 | 
					 | 
				
			||||||
* Fix links not working in admin dashboard modules (https://github.com/slawkens/myaac/commit/be7b27c31aa3bbd6c0289c34d1e61139a3fe015c)
 | 
					 | 
				
			||||||
* Fix twig variables: logged + account_logged being not set directly after login (https://github.com/slawkens/myaac/commit/1e9b10d6489c488cadf7f6ed17b42f1ea6c767a8)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Changed
 | 
					 | 
				
			||||||
* OTS_ServerInfo -> move setTimeout out of class - Possibility to use the class without MyAAC (https://github.com/slawkens/myaac/commit/40d65a6613149fda51bdceb82c807e5301a3388b)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## [1.5 - 14.05.2025]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Added
 | 
					 | 
				
			||||||
* Feature/twig hooks filters (#258)
 | 
					 | 
				
			||||||
* Add latest client versions (14.00 - 15.01) (https://github.com/slawkens/myaac/commit/5367df23812c6182863353c9a39fd7fb0b743f4b)
 | 
					 | 
				
			||||||
* db variable to twig (https://github.com/slawkens/myaac/commit/5ed1aec28e146b871a75597411d12e42a067f4e6)
 | 
					 | 
				
			||||||
* New filter: HOOK_FILTER_ROUTES (https://github.com/slawkens/myaac/commit/9b75011224f385db8b27e109bfeb28e75b9d779c)
 | 
					 | 
				
			||||||
* Allow optionally separate folder for views (thanks @Scrollog for idea) (https://github.com/slawkens/myaac/commit/03e275213901a89edb0ebb8974b776a992ab391f)
 | 
					 | 
				
			||||||
* Add float & double types to the Settings (https://github.com/slawkens/myaac/commit/67ab425bb9796d9d123296e3fda542fa8f7f05ee)
 | 
					 | 
				
			||||||
* Add optional param _page_only for single-page apps etc. (https://github.com/slawkens/myaac/commit/113473f2560aab6d364c301cc14a8b5ba8f309f4)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Changed
 | 
					 | 
				
			||||||
* Change OTS_Account->getPremDays to not return -1 in case of freePremium (https://github.com/slawkens/myaac/commit/3befde2a1e4d24a011311e785f15185db57e19b8)
 | 
					 | 
				
			||||||
* Add note about highscores being updated x minutes + allow ttl 0 to disable cache (https://github.com/slawkens/myaac/commit/a161cff00329da6f970f3a70967fe8346fe92bbc)
 | 
					 | 
				
			||||||
* Better monster images (no image not found anymore) + use cache (https://github.com/slawkens/myaac/commit/73a5829974ceca3f02d7925d5cfbd5fa50b1bbd2)
 | 
					 | 
				
			||||||
* Rename server-info -> ots-info, changelog -> change-log (Due to conflict with apache2 server-info mod) (https://github.com/slawkens/myaac/commit/3949d84e5d7631f332111b6d00278bddbd0ad10a)
 | 
					 | 
				
			||||||
* Move rules page to admin panel (https://github.com/slawkens/myaac/commit/3949d84e5d7631f332111b6d00278bddbd0ad10a)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Fixed
 | 
					 | 
				
			||||||
* php 8.4 warnings
 | 
					 | 
				
			||||||
* Visitors counter not working properly on dev mode (https://github.com/slawkens/myaac/commit/da151051186c913dd0dd091aabe893649c2b9ee7)
 | 
					 | 
				
			||||||
* Fix login.php boosted creature & boss (not sure exact version, but should be 14.12 or around) (https://github.com/slawkens/myaac/commit/c48b8006319f6c3b5f082befd16785420bb98110)
 | 
					 | 
				
			||||||
* Fix installMenus when theme/template was removed from disc (https://github.com/slawkens/myaac/commit/c24c580796bccd54bf9e95b864763f4642684d55)
 | 
					 | 
				
			||||||
* Fix if user removes the menu category (https://github.com/slawkens/myaac/commit/dbea69f31478391dacfbbc02c8353c39b4245daf)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Updated:
 | 
					 | 
				
			||||||
* Update cypress from version ^13.17.0 to ^14.3.3 (https://github.com/slawkens/myaac/commit/629fd18ea166860d5898a822f44f9277da6ce43d)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## [1.4 - 22.04.2025]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Added
 | 
					 | 
				
			||||||
* feat: admin-pages (can add admin pages through plugins) (https://github.com/slawkens/myaac/commit/ceaa0639e66d31e8177ff90791463470367aa45d)
 | 
					 | 
				
			||||||
	* just place the page in admin-pages folder in the plugin
 | 
					 | 
				
			||||||
	* Also, possibility to overwrite default myaac admin pages
 | 
					 | 
				
			||||||
* Add db->hasTableAndColumns(table, columns), credits to @opentibiabr Team (https://github.com/slawkens/myaac/commit/82a533d88c8a342076891d132b4b409ed9a1fe72)
 | 
					 | 
				
			||||||
* Add noSubmit option to buttons.base (https://github.com/slawkens/myaac/commit/64f6d3abcada3bf9fd7599f50d2fac0a1367f383)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Fixed
 | 
					 | 
				
			||||||
* Fix: display 404 error instead of 500 when page has been removed from filesystem (https://github.com/slawkens/myaac/commit/c2bf94fb2370d2009a2eb907f818955132cf8611)
 | 
					 | 
				
			||||||
* Fix headline.php: change image format to .png cause of black background (https://github.com/slawkens/myaac/commit/b618084d50918539d9a70abd97e764137b966067)
 | 
					 | 
				
			||||||
* Clear cache on plugin enable/disable, fixes some issues with plugin pages being cached (https://github.com/slawkens/myaac/commit/1d0c173e7d000aecbd432800941fc3e38a0e50f2)
 | 
					 | 
				
			||||||
* Do not autoload sub-folders if autoload pages is disabled (https://github.com/slawkens/myaac/commit/d47195a7878095336f9c9edc6f96244257f67eec)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Changed
 | 
					 | 
				
			||||||
* SQL Syntax Standardization (by @JoaozinhoBrasil, #298)
 | 
					 | 
				
			||||||
* Pages in theme/template folder will now have precedence over normal pages (https://github.com/slawkens/myaac/commit/6d8f4718a1d349fba8f0ebc39cfd3a1a84d104b0)
 | 
					 | 
				
			||||||
* Small changes in account.login.html.twig (https://github.com/slawkens/myaac/commit/f40b986b59d4c8fa89ab4745731bf366f8619976)
 | 
					 | 
				
			||||||
* Plugin name is required, version is optional (https://github.com/slawkens/myaac/commit/e6f05a2731c61d931be49e121c068e49c0ad5e01)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## [1.3.3 - 04.04.2025]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Fixed
 | 
					 | 
				
			||||||
* Fix uninstall plugin when plugin is disabled (https://github.com/slawkens/myaac/commit/6c568fd36a271270684fc412ccd556b230273a6d)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Changed
 | 
					 | 
				
			||||||
* Display more useful info when error parsing config.lua (https://github.com/slawkens/myaac/commit/fa6b6aa153ffc131e0d1631a4dcd9012a5850c2e)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Other
 | 
					 | 
				
			||||||
* Small adjustments (https://github.com/slawkens/myaac/commit/35e2483de86e295bdf089cceffa25842eeb2e34c, https://github.com/slawkens/myaac/commit/ae639d65b0bfa491e747e907e2ebc77f83f47981)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## [1.3.2 - 01.04.2025]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Fixed
 | 
					 | 
				
			||||||
* Fix debugBar/admin panel menu when using custom base_dir (https://github.com/slawkens/myaac/commit/65696f63e3aac02ff952ea81279e7cb2fa7570fb)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Changed
 | 
					 | 
				
			||||||
* Settings: Show/hide IP Ban Protection options depending on the value (enabled/disabled) (https://github.com/slawkens/myaac/commit/dbf73d0b61b45601ae95e51b23c051c2704169c5)
 | 
					 | 
				
			||||||
* Do not require init.php in cache:clear command (https://github.com/slawkens/myaac/commit/d25c71857f767834239bbffacd00fdc671adb157)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## [1.3.1 - 19.03.2025]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Fixed
 | 
					 | 
				
			||||||
* Fixed migrate:run command (https://github.com/slawkens/myaac/commit/1a5771ad51e595fe13368a0721b059c4ecefb17d)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Changed
 | 
					 | 
				
			||||||
* Small adjustments (https://github.com/slawkens/myaac/commit/6fac883659f581baac1361826d046410156f1e58, https://github.com/slawkens/myaac/commit/4a6896b4469968b9904292734cf6c14ba5eeef14)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## [1.3 - 10.03.2025]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Changed
 | 
					 | 
				
			||||||
* Use latest outfit-images host from @gesior (https://github.com/slawkens/myaac/commit/529bdcf016dd0f9dffbc34d81f99a046a9ddb70d)
 | 
					 | 
				
			||||||
* Change monster link to $_GET ?name= (https://github.com/slawkens/myaac/commit/4c5cc8b573b2b3e7ec00a22b7ede30a68083a924)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Fixed
 | 
					 | 
				
			||||||
* Fixed house links (https://github.com/slawkens/myaac/commit/887b5068ad11c4cdab614afd34525caba785ce13)
 | 
					 | 
				
			||||||
* Fixed long title on headline.php (https://github.com/slawkens/myaac/commit/3e3f4bb5a514158ec8777684ca6c7f1c2a37bed5)
 | 
					 | 
				
			||||||
* Fixed menu colors once again, plus add !important tag (https://github.com/slawkens/myaac/commit/aa52df6e2ec92cafc25b655ae907bf2e1746d9cc)
 | 
					 | 
				
			||||||
* Fix: add possibility to remove all menu items in admin panel (https://github.com/slawkens/myaac/commit/00fe1adc15ea7646596d755f6e6e1f7854ffc1d5, https://github.com/slawkens/myaac/commit/9239a4f4198c3ad260802ac3b47e9c41b80b754e)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## [1.2 - 09.02.2025]
 | 
					## [1.2 - 09.02.2025]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Added
 | 
					### Added
 | 
				
			||||||
							
								
								
									
										35
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								README.md
									
									
									
									
									
								
							@@ -1,6 +1,6 @@
 | 
				
			|||||||
# [MyAAC](https://my-aac.org)
 | 
					# [MyAAC](https://my-aac.org)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MyAAC is a free and open-source Automatic Account Creator (AAC) for Open Tibia Servers written in PHP. It is a fork of the [Gesior](https://github.com/gesior/Gesior2012) project. It supports only MySQL databases.
 | 
					MyAAC is a free and open-source Automatic Account Creator (AAC) written in PHP. It is a fork of the [Gesior](https://github.com/gesior/Gesior2012) project. It supports only MySQL databases.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Official website: https://my-aac.org
 | 
					Official website: https://my-aac.org
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -10,19 +10,12 @@ Official website: https://my-aac.org
 | 
				
			|||||||
[](https://discord.gg/2J39Wus)
 | 
					[](https://discord.gg/2J39Wus)
 | 
				
			||||||
[](https://github.com/slawkens/myaac/issues?q=is%3Aissue+is%3Aclosed)
 | 
					[](https://github.com/slawkens/myaac/issues?q=is%3Aissue+is%3Aclosed)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| Version | Status                 | Branch  | Requirements   |
 | 
					| Version | Status                 | Branch | Requirements   |
 | 
				
			||||||
|:--------|:-----------------------|:--------|:---------------|
 | 
					|:--------|:-----------------------|:-------|:---------------|
 | 
				
			||||||
| 2.x     | Experimental features  | develop | PHP >= 8.1     |
 | 
					| **1.x** | **Active development** | master | **PHP >= 8.1** |
 | 
				
			||||||
| **1.x** | **Active development** | main    | **PHP >= 8.1** |
 | 
					| 0.9.x   | Not developed anymore  | 0.9    | PHP >= 7.2.5   |
 | 
				
			||||||
| 0.9.x   | Not developed anymore  | 0.9     | PHP >= 7.2.5   |
 | 
					| 0.8.x   | Active support         | 0.8    | PHP >= 7.2.5   |
 | 
				
			||||||
| 0.8.x   | Active support         | 0.8     | PHP >= 7.2.5   |
 | 
					| 0.7.x   | End Of Life            | 0.7    | PHP >= 5.3.3   |
 | 
				
			||||||
| 0.7.x   | End Of Life            | 0.7     | PHP >= 5.3.3   |
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The recommended version to install is 1.x, which can be found at releases page - [https://github.com/slawkens/myaac/releases](https://github.com/slawkens/myaac/releases).
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Documentation
 | 
					 | 
				
			||||||
* [docs.my-aac.org](https://docs.my-aac.org)
 | 
					 | 
				
			||||||
* [my-aac.org - FAQ](https://my-aac.org/faqs/)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Requirements
 | 
					### Requirements
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -54,23 +47,23 @@ The recommended version to install is 1.x, which can be found at releases page -
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Configuration
 | 
					### Configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Check *config.php* to get more information. (Notice: MyAAC 1.0+ doesn't use config.php anymore, it has been moved to Admin Panel - Settings page).
 | 
					Check *config.php* to get more informations. (Notice: MyAAC 1.0+ doesn't use config.php anymore, it has been moved to Admin Panel - Settings page).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Use *config.local.php* for your local configuration changes.
 | 
					Use *config.local.php* for your local configuration changes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Branches
 | 
					### Branches
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This repository follows the Git Flow Workflow.
 | 
					This repository follows the Git Flow Workflow.
 | 
				
			||||||
Cheatsheet: [Git-Flow-Cheatsheet](https://danielkummer.github.io/git-flow-cheatsheet)
 | 
					Cheatsheet: [Git-Flow-Cheetsheet](https://danielkummer.github.io/git-flow-cheatsheet)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
That means, we use:
 | 
					That means, we use:
 | 
				
			||||||
* main branch, for current stable release
 | 
					* master branch, for current stable release
 | 
				
			||||||
* develop branch, for development version (next release)
 | 
					* develop branch, for development version (next release)
 | 
				
			||||||
* feature branches, for features etc.
 | 
					* feature branches, for features etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Known Problems
 | 
					### Known Problems
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Some compatibility issues with some exotic distributions.
 | 
					- Some compatibility issues with some exotical distibutions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Contributing
 | 
					### Contributing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -80,11 +73,11 @@ Pull requests should be made to the *develop* branch as that is the working bran
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Bug fixes to current release should be done to master branch.
 | 
					Bug fixes to current release should be done to master branch.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Look: [Contributing](https://docs.my-aac.org/misc/contributing) in our wiki.
 | 
					Look: [Contributing](https://github.com/otsoft/myaac/wiki/Contributing) in our wiki.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Other Notes
 | 
					### Other Notes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you have a great idea or want to contribute to the project - visit our website at https://www.my-aac.org
 | 
					If you have a great idea or want contribute to the project - visit our website at https://www.my-aac.org
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Project supported by JetBrains
 | 
					## Project supported by JetBrains
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -95,4 +88,4 @@ Many thanks to Jetbrains for kindly providing a license for me to work on this a
 | 
				
			|||||||
### License
 | 
					### License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This program and all associated files are released under the GNU Public License.  
 | 
					This program and all associated files are released under the GNU Public License.  
 | 
				
			||||||
See [LICENSE](https://github.com/slawkens/myaac/blob/main/LICENSE) for details.
 | 
					See [LICENSE](https://github.com/slawkens/myaac/blob/master/LICENSE) for details.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ $hooks->register('debugbar_admin_head_end', HOOK_ADMIN_HEAD_END, function ($para
 | 
				
			|||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$debugBarRenderer = $debugBar->getJavascriptRenderer(BASE_URL . 'vendor/maximebf/debugbar/src/DebugBar/Resources/');
 | 
						$debugBarRenderer = $debugBar->getJavascriptRenderer();
 | 
				
			||||||
	echo $debugBarRenderer->renderHead();
 | 
						echo $debugBarRenderer->renderHead();
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
$hooks->register('debugbar_admin_body_end', HOOK_ADMIN_BODY_END, function ($params) {
 | 
					$hooks->register('debugbar_admin_body_end', HOOK_ADMIN_BODY_END, function ($params) {
 | 
				
			||||||
@@ -17,6 +17,6 @@ $hooks->register('debugbar_admin_body_end', HOOK_ADMIN_BODY_END, function ($para
 | 
				
			|||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$debugBarRenderer = $debugBar->getJavascriptRenderer(BASE_URL . 'vendor/maximebf/debugbar/src/DebugBar/Resources/');
 | 
						$debugBarRenderer = $debugBar->getJavascriptRenderer();
 | 
				
			||||||
	echo $debugBarRenderer->render();
 | 
						echo $debugBarRenderer->render();
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,6 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// few things we'll need
 | 
					// few things we'll need
 | 
				
			||||||
use MyAAC\Plugins;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
require '../common.php';
 | 
					require '../common.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const ADMIN_PANEL = true;
 | 
					const ADMIN_PANEL = true;
 | 
				
			||||||
@@ -44,21 +42,15 @@ if(!$logged || !admin()) {
 | 
				
			|||||||
	$page = 'login';
 | 
						$page = 'login';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$pluginsAdminPages = Plugins::getAdminPages();
 | 
					// include our page
 | 
				
			||||||
if(isset($pluginsAdminPages[$page]) && file_exists(BASE . $pluginsAdminPages[$page])) {
 | 
					$file = __DIR__ . '/pages/' . $page . '.php';
 | 
				
			||||||
	$file = BASE . $pluginsAdminPages[$page];
 | 
					if(!@file_exists($file)) {
 | 
				
			||||||
}
 | 
						if (str_contains($page, 'plugins/')) {
 | 
				
			||||||
else {
 | 
							$file = BASE . $page;
 | 
				
			||||||
	// include our page
 | 
						}
 | 
				
			||||||
	$file = __DIR__ . '/pages/' . $page . '.php';
 | 
						else {
 | 
				
			||||||
	if(!@file_exists($file)) {
 | 
							$page = '404';
 | 
				
			||||||
		if (str_contains($page, 'plugins/')) {
 | 
							$file = SYSTEM . 'pages/404.php';
 | 
				
			||||||
			$file = BASE . $page;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		else {
 | 
					 | 
				
			||||||
			$page = '404';
 | 
					 | 
				
			||||||
			$file = SYSTEM . 'pages/404.php';
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,7 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use MyAAC\Models\Account as AccountModel;
 | 
					use MyAAC\Models\Account as AccountModel;
 | 
				
			||||||
 | 
					use MyAAC\Models\AccountAction;
 | 
				
			||||||
use MyAAC\Models\Player;
 | 
					use MyAAC\Models\Player;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
defined('MYAAC') or die('Direct access not allowed!');
 | 
					defined('MYAAC') or die('Direct access not allowed!');
 | 
				
			||||||
@@ -466,9 +467,8 @@ else if (isset($_REQUEST['search'])) {
 | 
				
			|||||||
									</thead>
 | 
														</thead>
 | 
				
			||||||
									<tbody>
 | 
														<tbody>
 | 
				
			||||||
										<?php
 | 
															<?php
 | 
				
			||||||
											$accountActions = \MyAAC\Models\AccountAction::where('account_id', $account->getId())->orderByDesc('date')->get();
 | 
																$accountActions = AccountAction::where('account_id', $account->getId())->orderByDesc('date')->get();
 | 
				
			||||||
											foreach ($accountActions as $i => $log):
 | 
																foreach ($accountActions as $i => $log):
 | 
				
			||||||
												$log->ip = ($log->ip != 0 ? long2ip($log->ip) : inet_ntop($log->ipv6));
 | 
					 | 
				
			||||||
												?>
 | 
																	?>
 | 
				
			||||||
											<tr>
 | 
																<tr>
 | 
				
			||||||
												<td><?php echo $i + 1; ?></td>
 | 
																	<td><?php echo $i + 1; ?></td>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,12 +11,12 @@
 | 
				
			|||||||
defined('MYAAC') or die('Direct access not allowed!');
 | 
					defined('MYAAC') or die('Direct access not allowed!');
 | 
				
			||||||
$title = 'MyAAC Changelog';
 | 
					$title = 'MyAAC Changelog';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (!file_exists(BASE . 'CHANGELOG-1.x.md')) {
 | 
					if (!file_exists(BASE . 'CHANGELOG.md')) {
 | 
				
			||||||
	echo 'File CHANGELOG.md doesn\'t exist.';
 | 
						echo 'File CHANGELOG.md doesn\'t exist.';
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$changelog = file_get_contents(BASE . 'CHANGELOG-1.x.md');
 | 
					$changelog = file_get_contents(BASE . 'CHANGELOG.md');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$Parsedown = new Parsedown();
 | 
					$Parsedown = new Parsedown();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,11 +27,11 @@ $pluginThemes = Plugins::getThemes();
 | 
				
			|||||||
if (isset($_POST['template'])) {
 | 
					if (isset($_POST['template'])) {
 | 
				
			||||||
	$template = $_POST['template'];
 | 
						$template = $_POST['template'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (isset($_POST['save'])) {
 | 
						if (isset($_POST['menu'])) {
 | 
				
			||||||
		$post_menu = $_POST['menu'] ?? [];
 | 
							$post_menu = $_POST['menu'];
 | 
				
			||||||
		$post_menu_link = $_POST['menu_link'] ?? [];
 | 
							$post_menu_link = $_POST['menu_link'];
 | 
				
			||||||
		$post_menu_blank = $_POST['menu_blank'] ?? [];
 | 
							$post_menu_blank = $_POST['menu_blank'];
 | 
				
			||||||
		$post_menu_color = $_POST['menu_color'] ?? [];
 | 
							$post_menu_color = $_POST['menu_color'];
 | 
				
			||||||
		if (count($post_menu) != count($post_menu_link)) {
 | 
							if (count($post_menu) != count($post_menu_link)) {
 | 
				
			||||||
			echo 'Menu count is not equal menu links. Something went wrong when sending form.';
 | 
								echo 'Menu count is not equal menu links. Something went wrong when sending form.';
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
@@ -135,7 +135,7 @@ if (isset($_POST['template'])) {
 | 
				
			|||||||
	<form method="post" id="menus-form" action="?p=menus">
 | 
						<form method="post" id="menus-form" action="?p=menus">
 | 
				
			||||||
		<?php csrf(); ?>
 | 
							<?php csrf(); ?>
 | 
				
			||||||
		<input type="hidden" name="template" value="<?php echo $template ?>"/>
 | 
							<input type="hidden" name="template" value="<?php echo $template ?>"/>
 | 
				
			||||||
		<button type="submit" name="save" class="btn btn-info">Save</button><br/><br/>
 | 
							<button type="submit" class="btn btn-info">Save</button><br/><br/>
 | 
				
			||||||
		<div class="row">
 | 
							<div class="row">
 | 
				
			||||||
			<?php foreach ($config['menu_categories'] as $id => $cat): ?>
 | 
								<?php foreach ($config['menu_categories'] as $id => $cat): ?>
 | 
				
			||||||
				<div class="col-md-12 col-lg-6">
 | 
									<div class="col-md-12 col-lg-6">
 | 
				
			||||||
@@ -168,7 +168,7 @@ if (isset($_POST['template'])) {
 | 
				
			|||||||
		</div>
 | 
							</div>
 | 
				
			||||||
		<div class="row pb-2">
 | 
							<div class="row pb-2">
 | 
				
			||||||
			<div class="col-md-12">
 | 
								<div class="col-md-12">
 | 
				
			||||||
				<button type="submit" name="save" class="btn btn-info">Save</button>
 | 
									<button type="submit" class="btn btn-info">Save</button>
 | 
				
			||||||
				<?php
 | 
									<?php
 | 
				
			||||||
				echo '<button type="button" class="btn btn-danger float-right" value="Cancel" onclick="window.location = \'' . ADMIN_URL . '?p=menus\';"><i class="fas fa-cancel"></i> Cancel</button>';
 | 
									echo '<button type="button" class="btn btn-danger float-right" value="Cancel" onclick="window.location = \'' . ADMIN_URL . '?p=menus\';"><i class="fas fa-cancel"></i> Cancel</button>';
 | 
				
			||||||
				?>
 | 
									?>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ defined('MYAAC') or die('Direct access not allowed!');
 | 
				
			|||||||
$balance = 0;
 | 
					$balance = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if ($db->hasColumn('players', 'balance')) {
 | 
					if ($db->hasColumn('players', 'balance')) {
 | 
				
			||||||
	$balance = Player::orderByDesc('balance')->limit(10)->get(['id', 'name', 'balance'])->toArray();
 | 
						$balance = Player::orderByDesc('balance')->limit(10)->get(['balance', 'id','name', 'level'])->toArray();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$twig->display('balance.html.twig', array(
 | 
					$twig->display('balance.html.twig', array(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,12 +7,7 @@ defined('MYAAC') or die('Direct access not allowed!');
 | 
				
			|||||||
$coins = 0;
 | 
					$coins = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if ($db->hasColumn('accounts', 'coins')) {
 | 
					if ($db->hasColumn('accounts', 'coins')) {
 | 
				
			||||||
	$whatToGet = ['id', 'coins'];
 | 
						$coins = Account::orderByDesc('coins')->limit(10)->get(['coins', (USE_ACCOUNT_NAME ? 'name' : 'id')])->toArray();
 | 
				
			||||||
	if (USE_ACCOUNT_NAME) {
 | 
					 | 
				
			||||||
		$whatToGet[] = 'name';
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	$coins = Account::orderByDesc('coins')->limit(10)->get($whatToGet)->toArray();
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$twig->display('coins.html.twig', array(
 | 
					$twig->display('coins.html.twig', array(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ defined('MYAAC') or die('Direct access not allowed!');
 | 
				
			|||||||
$players = 0;
 | 
					$players = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if ($db->hasColumn('players', 'lastlogin')) {
 | 
					if ($db->hasColumn('players', 'lastlogin')) {
 | 
				
			||||||
	$players = Player::orderByDesc('lastlogin')->limit(10)->get(['id', 'name', 'level', 'lastlogin'])->toArray();
 | 
						$players = Player::orderByDesc('lastlogin')->limit(10)->get(['name', 'level', 'lastlogin'])->toArray();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$twig->display('lastlogin.html.twig', array(
 | 
					$twig->display('lastlogin.html.twig', array(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@
 | 
				
			|||||||
						{% set i = i + 1 %}
 | 
											{% set i = i + 1 %}
 | 
				
			||||||
						<tr>
 | 
											<tr>
 | 
				
			||||||
							<th>{{ i }}</th>
 | 
												<th>{{ i }}</th>
 | 
				
			||||||
							<td><a href="?p=players&id={{ result.id }}">{{ result.name }}</a></td>
 | 
												<td><a href="?p=players&search_name={{ result.name }}">{{ result.name }}</a></td>
 | 
				
			||||||
							<td>{{ result.balance }}</td>
 | 
												<td>{{ result.balance }}</td>
 | 
				
			||||||
						</tr>
 | 
											</tr>
 | 
				
			||||||
					{% endfor %}
 | 
										{% endfor %}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@
 | 
				
			|||||||
						{% set i = i + 1 %}
 | 
											{% set i = i + 1 %}
 | 
				
			||||||
						<tr>
 | 
											<tr>
 | 
				
			||||||
							<th>{{ i }}</th>
 | 
												<th>{{ i }}</th>
 | 
				
			||||||
							<td><a href="?p=accounts&id={{ result.id }}">{{ result.name ?? result.id }}</a></td>
 | 
												<td><a href="?p=accounts&search_name={{ result.name }}">{{ result.name }}</a></td>
 | 
				
			||||||
							<td>{{ result.coins }}</td>
 | 
												<td>{{ result.coins }}</td>
 | 
				
			||||||
						</tr>
 | 
											</tr>
 | 
				
			||||||
					{% endfor %}
 | 
										{% endfor %}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@
 | 
				
			|||||||
						{% set i = i + 1 %}
 | 
											{% set i = i + 1 %}
 | 
				
			||||||
						<tr>
 | 
											<tr>
 | 
				
			||||||
							<th>{{ i }}</th>
 | 
												<th>{{ i }}</th>
 | 
				
			||||||
							<td><a href="?p=players&id={{ result.id }}">{{ result.name }}</a></td>
 | 
												<td><a href="?p=players&search_name={{ result.name }}">{{ result.name }}</a></td>
 | 
				
			||||||
							<td>{{ result.lastlogin|date("M d Y, H:i:s") }}</td>
 | 
												<td>{{ result.lastlogin|date("M d Y, H:i:s") }}</td>
 | 
				
			||||||
						</tr>
 | 
											</tr>
 | 
				
			||||||
					{% endfor %}
 | 
										{% endfor %}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@
 | 
				
			|||||||
						{% set i = i + 1 %}
 | 
											{% set i = i + 1 %}
 | 
				
			||||||
						<tr>
 | 
											<tr>
 | 
				
			||||||
							<th>{{ i }}</th>
 | 
												<th>{{ i }}</th>
 | 
				
			||||||
							<td><a href="?p=accounts&id={{ result.id }}">{{ result.name }}</a></td>
 | 
												<td><a href="?p=accounts&search_name={{ result.name }}">{{ result.name }}</a></td>
 | 
				
			||||||
							<td>{{ result.premium_points }}</td>
 | 
												<td>{{ result.premium_points }}</td>
 | 
				
			||||||
						</tr>
 | 
											</tr>
 | 
				
			||||||
					{% endfor %}
 | 
										{% endfor %}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@ csrfProtect();
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
$use_datatable = true;
 | 
					$use_datatable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (!setting('core.admin_plugins_manage_enable')) {
 | 
					if (!getBoolean(setting('core.admin_plugins_manage_enable'))) {
 | 
				
			||||||
	warning('Plugin installation and management is disabled in Settings.<br/>If you wish to enable, go to Settings and enable <strong>Enable Plugins Manage</strong>.');
 | 
						warning('Plugin installation and management is disabled in Settings.<br/>If you wish to enable, go to Settings and enable <strong>Enable Plugins Manage</strong>.');
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
else {
 | 
					else {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										46
									
								
								common.php
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								common.php
									
									
									
									
									
								
							@@ -26,8 +26,8 @@
 | 
				
			|||||||
if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is required.');
 | 
					if (version_compare(phpversion(), '8.1', '<')) die('PHP version 8.1 or higher is required.');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const MYAAC = true;
 | 
					const MYAAC = true;
 | 
				
			||||||
const MYAAC_VERSION = '1.6';
 | 
					const MYAAC_VERSION = '1.2';
 | 
				
			||||||
const DATABASE_VERSION = 45;
 | 
					const DATABASE_VERSION = 44;
 | 
				
			||||||
const TABLE_PREFIX = 'myaac_';
 | 
					const TABLE_PREFIX = 'myaac_';
 | 
				
			||||||
define('START_TIME', microtime(true));
 | 
					define('START_TIME', microtime(true));
 | 
				
			||||||
define('MYAAC_OS', stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : (strtoupper(PHP_OS) === 'DARWIN' ? 'MAC' : 'LINUX'));
 | 
					define('MYAAC_OS', stripos(PHP_OS, 'WIN') === 0 ? 'WINDOWS' : (strtoupper(PHP_OS) === 'DARWIN' ? 'MAC' : 'LINUX'));
 | 
				
			||||||
@@ -122,28 +122,36 @@ if (!IS_CLI) {
 | 
				
			|||||||
	session_start();
 | 
						session_start();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (file_exists(BASE . 'config.local.php')) {
 | 
					// basedir
 | 
				
			||||||
	require BASE . 'config.local.php';
 | 
					$basedir = '';
 | 
				
			||||||
}
 | 
					$tmp = explode('/', $_SERVER['SCRIPT_NAME']);
 | 
				
			||||||
 | 
					$size = count($tmp) - 1;
 | 
				
			||||||
 | 
					for($i = 1; $i < $size; $i++)
 | 
				
			||||||
 | 
						$basedir .= '/' . $tmp[$i];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require SYSTEM . 'base.php';
 | 
					$basedir = str_replace(['/' . ADMIN_PANEL_FOLDER, '/install', '/tools'], '', $basedir);
 | 
				
			||||||
define('BASE_DIR', $baseDir);
 | 
					define('BASE_DIR', $basedir);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(!IS_CLI) {
 | 
					if(!IS_CLI) {
 | 
				
			||||||
	if (isset($config['site_url'])) {
 | 
						if (isset($_SERVER['HTTP_HOST'][0])) {
 | 
				
			||||||
		$hasSlashAtEnd = ($config['site_url'][strlen($config['site_url']) - 1] == '/');
 | 
							$baseHost = $_SERVER['HTTP_HOST'];
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
		define('SERVER_URL', $config['site_url']);
 | 
							if (isset($_SERVER['SERVER_NAME'][0])) {
 | 
				
			||||||
		define('BASE_URL', SERVER_URL . ($hasSlashAtEnd ? '' : '/'));
 | 
								$baseHost = $_SERVER['SERVER_NAME'];
 | 
				
			||||||
		define('ADMIN_URL', SERVER_URL . ($hasSlashAtEnd ? '' : '/') . ADMIN_PANEL_FOLDER . '/');
 | 
							} else {
 | 
				
			||||||
 | 
								$baseHost = $_SERVER['SERVER_ADDR'];
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
					 | 
				
			||||||
		define('SERVER_URL', 'http' . (isHttps() ? 's' : '') . '://' . $baseHost);
 | 
					 | 
				
			||||||
		define('BASE_URL', SERVER_URL . BASE_DIR . '/');
 | 
					 | 
				
			||||||
		define('ADMIN_URL', SERVER_URL . BASE_DIR . '/' . ADMIN_PANEL_FOLDER . '/');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		//define('CURRENT_URL', BASE_URL . $_SERVER['REQUEST_URI']);
 | 
						define('SERVER_URL', 'http' . (isHttps() ? 's' : '') . '://' . $baseHost);
 | 
				
			||||||
	}
 | 
						define('BASE_URL', SERVER_URL . BASE_DIR . '/');
 | 
				
			||||||
 | 
						define('ADMIN_URL', SERVER_URL . BASE_DIR . '/' . ADMIN_PANEL_FOLDER . '/');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//define('CURRENT_URL', BASE_URL . $_SERVER['REQUEST_URI']);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (file_exists(BASE . 'config.local.php')) {
 | 
				
			||||||
 | 
						require BASE . 'config.local.php';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/** @var array $config */
 | 
					/** @var array $config */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@ describe('Check Public Pages', () => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	it('Go to changelog page', () => {
 | 
						it('Go to changelog page', () => {
 | 
				
			||||||
		cy.visit({
 | 
							cy.visit({
 | 
				
			||||||
			url: Cypress.env('URL') + '/change-log',
 | 
								url: Cypress.env('URL') + '/changelog',
 | 
				
			||||||
			method: 'GET',
 | 
								method: 'GET',
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
@@ -132,7 +132,7 @@ describe('Check Public Pages', () => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	it('Go to server info page', () => {
 | 
						it('Go to server info page', () => {
 | 
				
			||||||
		cy.visit({
 | 
							cy.visit({
 | 
				
			||||||
			url: Cypress.env('URL') + '/ots-info',
 | 
								url: Cypress.env('URL') + '/server-info',
 | 
				
			||||||
			method: 'GET',
 | 
								method: 'GET',
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,11 +31,11 @@ require_once 'common.php';
 | 
				
			|||||||
require_once SYSTEM . 'functions.php';
 | 
					require_once SYSTEM . 'functions.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$uri = $_SERVER['REQUEST_URI'];
 | 
					$uri = $_SERVER['REQUEST_URI'];
 | 
				
			||||||
if(str_contains($uri, 'index.php')) {
 | 
					if(false !== strpos($uri, 'index.php')) {
 | 
				
			||||||
	$uri = str_replace_first('/index.php', '', $uri);
 | 
						$uri = str_replace_first('/index.php', '', $uri);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(str_starts_with($uri, '/')) {
 | 
					if(0 === strpos($uri, '/')) {
 | 
				
			||||||
	$uri = str_replace_first('/', '', $uri);
 | 
						$uri = str_replace_first('/', '', $uri);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -168,7 +168,6 @@ if ($logged && admin()) {
 | 
				
			|||||||
		'username' => USE_ACCOUNT_NAME ? $account_logged->getName() : $account_logged->getId()
 | 
							'username' => USE_ACCOUNT_NAME ? $account_logged->getName() : $account_logged->getId()
 | 
				
			||||||
	]);
 | 
						]);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
$title_full =  (isset($title) ? $title . ' - ' : '') . $config['lua']['serverName'];
 | 
					$title_full =  (isset($title) ? $title . ' - ' : '') . $config['lua']['serverName'];
 | 
				
			||||||
require $template_path . '/' . $template_index;
 | 
					require $template_path . '/' . $template_index;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,9 +26,6 @@ if(!isset($error) || !$error) {
 | 
				
			|||||||
		$config['database_type'] = $config['lua']['database_type'];
 | 
							$config['database_type'] = $config['lua']['database_type'];
 | 
				
			||||||
	else if(isset($config['lua']['sql_type'])) // otserv
 | 
						else if(isset($config['lua']['sql_type'])) // otserv
 | 
				
			||||||
		$config['database_type'] = $config['lua']['sql_type'];
 | 
							$config['database_type'] = $config['lua']['sql_type'];
 | 
				
			||||||
	else {
 | 
					 | 
				
			||||||
		$config['database_type'] = '';
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$config['database_type'] = strtolower($config['database_type']);
 | 
						$config['database_type'] = strtolower($config['database_type']);
 | 
				
			||||||
	if(empty($config['database_type'])) {
 | 
						if(empty($config['database_type'])) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,35 +1,35 @@
 | 
				
			|||||||
SET @myaac_database_version = 45;
 | 
					SET @myaac_database_version = 43;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_account_actions`
 | 
					CREATE TABLE `myaac_account_actions`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`account_id` int NOT NULL,
 | 
						`id` INT(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`ip` int unsigned NOT NULL DEFAULT 0,
 | 
						`account_id` INT(11) NOT NULL,
 | 
				
			||||||
	`ipv6` binary(16) NOT NULL DEFAULT 0,
 | 
						`ip` VARCHAR(45) NOT NULL DEFAULT '',
 | 
				
			||||||
	`date` int NOT NULL DEFAULT 0,
 | 
						`date` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`action` varchar(255) NOT NULL DEFAULT '',
 | 
						`action` VARCHAR(255) NOT NULL DEFAULT '',
 | 
				
			||||||
	KEY (`account_id`)
 | 
						PRIMARY KEY (`id`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_admin_menu`
 | 
					CREATE TABLE `myaac_admin_menu`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` INT(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`name` varchar(255) NOT NULL DEFAULT '',
 | 
						`name` VARCHAR(255) NOT NULL DEFAULT '',
 | 
				
			||||||
	`page` varchar(255) NOT NULL DEFAULT '',
 | 
						`page` VARCHAR(255) NOT NULL DEFAULT '',
 | 
				
			||||||
	`ordering` int NOT NULL DEFAULT 0,
 | 
						`ordering` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`flags` int NOT NULL DEFAULT 0,
 | 
						`flags` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`enabled` int NOT NULL DEFAULT 1,
 | 
						`enabled` INT(1) NOT NULL DEFAULT 1,
 | 
				
			||||||
	PRIMARY KEY (`id`)
 | 
						PRIMARY KEY (`id`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_changelog`
 | 
					CREATE TABLE `myaac_changelog`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` INT(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`body` varchar(500) NOT NULL DEFAULT '',
 | 
						`body` VARCHAR(500) NOT NULL DEFAULT '',
 | 
				
			||||||
	`type` tinyint NOT NULL DEFAULT 0 COMMENT '1 - added, 2 - removed, 3 - changed, 4 - fixed',
 | 
						`type` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - added, 2 - removed, 3 - changed, 4 - fixed',
 | 
				
			||||||
	`where` tinyint NOT NULL DEFAULT 0 COMMENT '1 - server, 2 - site',
 | 
						`where` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - server, 2 - site',
 | 
				
			||||||
	`date` int NOT NULL DEFAULT 0,
 | 
						`date` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`player_id` int NOT NULL DEFAULT 0,
 | 
						`player_id` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`hide` tinyint NOT NULL DEFAULT 0,
 | 
						`hide` TINYINT(1) NOT NULL DEFAULT 0,
 | 
				
			||||||
	PRIMARY KEY (`id`)
 | 
						PRIMARY KEY (`id`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -37,9 +37,9 @@ INSERT INTO `myaac_changelog` (`id`, `type`, `where`, `date`, `body`, `hide`) VA
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_config`
 | 
					CREATE TABLE `myaac_config`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` INT(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`name` varchar(30) NOT NULL,
 | 
						`name` VARCHAR(30) NOT NULL,
 | 
				
			||||||
	`value` varchar(1000) NOT NULL,
 | 
						`value` VARCHAR(1000) NOT NULL,
 | 
				
			||||||
	PRIMARY KEY (`id`),
 | 
						PRIMARY KEY (`id`),
 | 
				
			||||||
	UNIQUE (`name`)
 | 
						UNIQUE (`name`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
@@ -48,24 +48,24 @@ INSERT INTO `myaac_config` (`name`, `value`) VALUES ('database_version', @myaac_
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_faq`
 | 
					CREATE TABLE `myaac_faq`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` INT(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`question` varchar(255) NOT NULL DEFAULT '',
 | 
						`question` VARCHAR(255) NOT NULL DEFAULT '',
 | 
				
			||||||
	`answer` varchar(1020) NOT NULL DEFAULT '',
 | 
						`answer` VARCHAR(1020) NOT NULL DEFAULT '',
 | 
				
			||||||
	`ordering` int NOT NULL DEFAULT 0,
 | 
						`ordering` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`hide` tinyint NOT NULL DEFAULT 0,
 | 
						`hide` TINYINT(1) NOT NULL DEFAULT 0,
 | 
				
			||||||
	PRIMARY KEY (`id`)
 | 
						PRIMARY KEY (`id`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_forum_boards`
 | 
					CREATE TABLE `myaac_forum_boards`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` INT(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`name` varchar(32) NOT NULL,
 | 
						`name` VARCHAR(32) NOT NULL,
 | 
				
			||||||
	`description` varchar(255) NOT NULL DEFAULT '',
 | 
						`description` VARCHAR(255) NOT NULL DEFAULT '',
 | 
				
			||||||
	`ordering` int NOT NULL DEFAULT 0,
 | 
						`ordering` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`guild` int NOT NULL DEFAULT 0,
 | 
						`guild` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`access` int NOT NULL DEFAULT 0,
 | 
						`access` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`closed` tinyint NOT NULL DEFAULT 0,
 | 
						`closed` TINYINT(1) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`hide` tinyint NOT NULL DEFAULT 0,
 | 
						`hide` TINYINT(1) NOT NULL DEFAULT 0,
 | 
				
			||||||
	PRIMARY KEY (`id`)
 | 
						PRIMARY KEY (`id`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`, `closed`) VALUES (NULL, 'News', 'News commenting', 0, 1);
 | 
					INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`, `closed`) VALUES (NULL, 'News', 'News commenting', 0, 1);
 | 
				
			||||||
@@ -76,100 +76,100 @@ INSERT INTO `myaac_forum_boards` (`id`, `name`, `description`, `ordering`) VALUE
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_forum`
 | 
					CREATE TABLE `myaac_forum`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` int(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`first_post` int NOT NULL DEFAULT 0,
 | 
						`first_post` int(11) NOT NULL default '0',
 | 
				
			||||||
	`last_post` int NOT NULL DEFAULT 0,
 | 
						`last_post` int(11) NOT NULL default '0',
 | 
				
			||||||
	`section` int NOT NULL DEFAULT 0,
 | 
						`section` int(3) NOT NULL default '0',
 | 
				
			||||||
	`replies` int NOT NULL DEFAULT 0,
 | 
						`replies` int(20) NOT NULL default '0',
 | 
				
			||||||
	`views` int NOT NULL DEFAULT 0,
 | 
						`views` int(20) NOT NULL default '0',
 | 
				
			||||||
	`author_aid` int NOT NULL DEFAULT 0,
 | 
						`author_aid` int(20) NOT NULL default '0',
 | 
				
			||||||
	`author_guid` int NOT NULL DEFAULT 0,
 | 
						`author_guid` int(20) NOT NULL default '0',
 | 
				
			||||||
	`post_text` text NOT NULL,
 | 
						`post_text` text NOT NULL,
 | 
				
			||||||
	`post_topic` varchar(255) NOT NULL DEFAULT '',
 | 
						`post_topic` varchar(255) NOT NULL DEFAULT '',
 | 
				
			||||||
	`post_smile` tinyint NOT NULL DEFAULT 0,
 | 
						`post_smile` tinyint(1) NOT NULL default '0',
 | 
				
			||||||
	`post_html` tinyint NOT NULL DEFAULT 0,
 | 
						`post_html` tinyint(1) NOT NULL default '0',
 | 
				
			||||||
	`post_date` int NOT NULL DEFAULT 0,
 | 
						`post_date` int(20) NOT NULL default '0',
 | 
				
			||||||
	`last_edit_aid` int NOT NULL DEFAULT 0,
 | 
						`last_edit_aid` int(20) NOT NULL default '0',
 | 
				
			||||||
	`edit_date` int NOT NULL DEFAULT 0,
 | 
						`edit_date` int(20) NOT NULL default '0',
 | 
				
			||||||
	`post_ip` varchar(45) NOT NULL DEFAULT '0.0.0.0',
 | 
						`post_ip` varchar(45) NOT NULL default '0.0.0.0',
 | 
				
			||||||
	`sticked` tinyint NOT NULL DEFAULT 0,
 | 
						`sticked` tinyint(1) NOT NULL DEFAULT '0',
 | 
				
			||||||
	`closed` tinyint NOT NULL DEFAULT 0,
 | 
						`closed` tinyint(1) NOT NULL DEFAULT '0',
 | 
				
			||||||
	PRIMARY KEY (`id`),
 | 
						PRIMARY KEY (`id`),
 | 
				
			||||||
	KEY `section` (`section`)
 | 
						KEY `section` (`section`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_menu`
 | 
					CREATE TABLE `myaac_menu`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` INT(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`template` varchar(255) NOT NULL,
 | 
						`template` VARCHAR(255) NOT NULL,
 | 
				
			||||||
	`name` varchar(255) NOT NULL,
 | 
						`name` VARCHAR(255) NOT NULL,
 | 
				
			||||||
	`link` varchar(255) NOT NULL,
 | 
						`link` VARCHAR(255) NOT NULL,
 | 
				
			||||||
	`blank` tinyint NOT NULL DEFAULT 0,
 | 
						`blank` TINYINT(1) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`color` varchar(6) NOT NULL DEFAULT '',
 | 
						`color` VARCHAR(6) NOT NULL DEFAULT '',
 | 
				
			||||||
	`category` int NOT NULL DEFAULT 1,
 | 
						`category` INT(11) NOT NULL DEFAULT 1,
 | 
				
			||||||
	`ordering` int NOT NULL DEFAULT 0,
 | 
						`ordering` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`enabled` int NOT NULL DEFAULT 1,
 | 
						`enabled` INT(1) NOT NULL DEFAULT 1,
 | 
				
			||||||
	PRIMARY KEY (`id`)
 | 
						PRIMARY KEY (`id`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_monsters` (
 | 
					CREATE TABLE `myaac_monsters` (
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` int(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`hide` tinyint NOT NULL DEFAULT 0,
 | 
						`hide` tinyint(1) NOT NULL default 0,
 | 
				
			||||||
	`name` varchar(255) NOT NULL,
 | 
						`name` varchar(255) NOT NULL,
 | 
				
			||||||
	`mana` int NOT NULL DEFAULT 0,
 | 
						`mana` int(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`exp` int NOT NULL,
 | 
						`exp` int(11) NOT NULL,
 | 
				
			||||||
	`health` int NOT NULL,
 | 
						`health` int(11) NOT NULL,
 | 
				
			||||||
	`look` varchar(255) NOT NULL DEFAULT '',
 | 
						`look` VARCHAR(255) NOT NULL DEFAULT '',
 | 
				
			||||||
	`speed_lvl` int NOT NULL DEFAULT 1,
 | 
						`speed_lvl` int(11) NOT NULL default 1,
 | 
				
			||||||
	`use_haste` tinyint NOT NULL,
 | 
						`use_haste` tinyint(1) NOT NULL,
 | 
				
			||||||
	`voices` text NOT NULL,
 | 
						`voices` text NOT NULL,
 | 
				
			||||||
	`immunities` varchar(255) NOT NULL,
 | 
						`immunities` varchar(255) NOT NULL,
 | 
				
			||||||
	`elements` text NOT NULL,
 | 
						`elements` TEXT NOT NULL,
 | 
				
			||||||
	`summonable` tinyint NOT NULL,
 | 
						`summonable` tinyint(1) NOT NULL,
 | 
				
			||||||
	`convinceable` tinyint NOT NULL,
 | 
						`convinceable` tinyint(1) NOT NULL,
 | 
				
			||||||
	`pushable` tinyint NOT NULL DEFAULT 0,
 | 
						`pushable` TINYINT(1) NOT NULL DEFAULT '0',
 | 
				
			||||||
	`canpushitems` tinyint NOT NULL DEFAULT 0,
 | 
						`canpushitems` TINYINT(1) NOT NULL DEFAULT '0',
 | 
				
			||||||
	`canwalkonenergy` tinyint NOT NULL DEFAULT 0,
 | 
						`canwalkonenergy` TINYINT(1) NOT NULL DEFAULT '0',
 | 
				
			||||||
	`canwalkonpoison` tinyint NOT NULL DEFAULT 0,
 | 
						`canwalkonpoison` TINYINT(1) NOT NULL DEFAULT '0',
 | 
				
			||||||
	`canwalkonfire` tinyint NOT NULL DEFAULT 0,
 | 
						`canwalkonfire` TINYINT(1) NOT NULL DEFAULT '0',
 | 
				
			||||||
	`runonhealth` tinyint NOT NULL DEFAULT 0,
 | 
						`runonhealth` TINYINT(1) NOT NULL DEFAULT '0',
 | 
				
			||||||
	`hostile` tinyint NOT NULL DEFAULT 0,
 | 
						`hostile` TINYINT(1) NOT NULL DEFAULT '0',
 | 
				
			||||||
	`attackable` tinyint NOT NULL DEFAULT 0,
 | 
						`attackable` TINYINT(1) NOT NULL DEFAULT '0',
 | 
				
			||||||
	`rewardboss` tinyint NOT NULL DEFAULT 0,
 | 
						`rewardboss` TINYINT(1) NOT NULL DEFAULT '0',
 | 
				
			||||||
	`defense` int NOT NULL DEFAULT 0,
 | 
						`defense` INT(11) NOT NULL DEFAULT '0',
 | 
				
			||||||
	`armor` int NOT NULL DEFAULT 0,
 | 
						`armor` INT(11) NOT NULL DEFAULT '0',
 | 
				
			||||||
	`canpushcreatures` tinyint NOT NULL DEFAULT 0,
 | 
						`canpushcreatures` TINYINT(1) NOT NULL DEFAULT '0',
 | 
				
			||||||
	`race` varchar(255) NOT NULL,
 | 
						`race` varchar(255) NOT NULL,
 | 
				
			||||||
	`loot` text NOT NULL,
 | 
						`loot` text NOT NULL,
 | 
				
			||||||
	`summons` text NOT NULL,
 | 
						`summons` TEXT NOT NULL,
 | 
				
			||||||
	PRIMARY KEY (`id`)
 | 
						PRIMARY KEY (`id`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_news`
 | 
					CREATE TABLE `myaac_news`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` INT(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`title` varchar(100) NOT NULL,
 | 
						`title` VARCHAR(100) NOT NULL,
 | 
				
			||||||
	`body` text NOT NULL,
 | 
						`body` TEXT NOT NULL,
 | 
				
			||||||
	`type` tinyint NOT NULL DEFAULT 0 COMMENT '1 - news, 2 - ticker, 3 - article',
 | 
						`type` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - news, 2 - ticker, 3 - article',
 | 
				
			||||||
	`date` int NOT NULL DEFAULT 0,
 | 
						`date` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`category` tinyint NOT NULL DEFAULT 0,
 | 
						`category` TINYINT(1) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`player_id` int NOT NULL DEFAULT 0,
 | 
						`player_id` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`last_modified_by` int NOT NULL DEFAULT 0,
 | 
						`last_modified_by` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`last_modified_date` int NOT NULL DEFAULT 0,
 | 
						`last_modified_date` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`comments` varchar(50) NOT NULL DEFAULT '',
 | 
						`comments` VARCHAR(50) NOT NULL DEFAULT '',
 | 
				
			||||||
	`article_text` varchar(300) NOT NULL DEFAULT '',
 | 
						`article_text` VARCHAR(300) NOT NULL DEFAULT '',
 | 
				
			||||||
	`article_image` varchar(100) NOT NULL DEFAULT '',
 | 
						`article_image` VARCHAR(100) NOT NULL DEFAULT '',
 | 
				
			||||||
	`hide` tinyint NOT NULL DEFAULT 0,
 | 
						`hide` TINYINT(1) NOT NULL DEFAULT 0,
 | 
				
			||||||
	PRIMARY KEY (`id`)
 | 
						PRIMARY KEY (`id`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_news_categories`
 | 
					CREATE TABLE `myaac_news_categories`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` INT(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`name` varchar(50) NOT NULL DEFAULT "",
 | 
						`name` VARCHAR(50) NOT NULL DEFAULT "",
 | 
				
			||||||
	`description` varchar(50) NOT NULL DEFAULT "",
 | 
						`description` VARCHAR(50) NOT NULL DEFAULT "",
 | 
				
			||||||
	`icon_id` int NOT NULL DEFAULT 0,
 | 
						`icon_id` INT(2) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`hide` tinyint NOT NULL DEFAULT 0,
 | 
						`hide` TINYINT(1) NOT NULL DEFAULT 0,
 | 
				
			||||||
	PRIMARY KEY (`id`)
 | 
						PRIMARY KEY (`id`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -181,39 +181,39 @@ INSERT INTO `myaac_news_categories` (`id`, `icon_id`) VALUES (NULL, 4);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_notepad`
 | 
					CREATE TABLE `myaac_notepad`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` INT(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`account_id` int NOT NULL,
 | 
						`account_id` INT(11) NOT NULL,
 | 
				
			||||||
	/*`name` varchar(30) NOT NULL,*/
 | 
						/*`name` VARCHAR(30) NOT NULL,*/
 | 
				
			||||||
	`content` text NOT NULL,
 | 
						`content` TEXT NOT NULL,
 | 
				
			||||||
	/*`public` tinyint NOT NULL DEFAULT 0*/
 | 
						/*`public` TINYINT(1) NOT NULL DEFAULT 0*/
 | 
				
			||||||
	PRIMARY KEY (`id`)
 | 
						PRIMARY KEY (`id`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_pages`
 | 
					CREATE TABLE `myaac_pages`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` INT NOT NULL AUTO_INCREMENT,
 | 
						`id` INT NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`name` varchar(30) NOT NULL,
 | 
						`name` VARCHAR(30) NOT NULL,
 | 
				
			||||||
	`title` varchar(30) NOT NULL,
 | 
						`title` VARCHAR(30) NOT NULL,
 | 
				
			||||||
	`body` text NOT NULL,
 | 
						`body` TEXT NOT NULL,
 | 
				
			||||||
	`date` int NOT NULL DEFAULT 0,
 | 
						`date` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`player_id` int NOT NULL DEFAULT 0,
 | 
						`player_id` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`php` tinyint NOT NULL DEFAULT 0 COMMENT '0 - plain html, 1 - php',
 | 
						`php` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '0 - plain html, 1 - php',
 | 
				
			||||||
	`enable_tinymce` tinyint NOT NULL DEFAULT 1 COMMENT '1 - enabled, 0 - disabled',
 | 
						`enable_tinymce` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1 - enabled, 0 - disabled',
 | 
				
			||||||
	`access` tinyint NOT NULL DEFAULT 0,
 | 
						`access` TINYINT(2) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`hide` tinyint NOT NULL DEFAULT 0,
 | 
						`hide` TINYINT(1) NOT NULL DEFAULT 0,
 | 
				
			||||||
	PRIMARY KEY (`id`),
 | 
						PRIMARY KEY (`id`),
 | 
				
			||||||
	UNIQUE (`name`)
 | 
						UNIQUE (`name`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_gallery`
 | 
					CREATE TABLE `myaac_gallery`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` INT(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`comment` varchar(255) NOT NULL DEFAULT '',
 | 
						`comment` VARCHAR(255) NOT NULL DEFAULT '',
 | 
				
			||||||
	`image` varchar(255) NOT NULL,
 | 
						`image` VARCHAR(255) NOT NULL,
 | 
				
			||||||
	`thumb` varchar(255) NOT NULL,
 | 
						`thumb` VARCHAR(255) NOT NULL,
 | 
				
			||||||
	`author` varchar(50) NOT NULL DEFAULT '',
 | 
						`author` VARCHAR(50) NOT NULL DEFAULT '',
 | 
				
			||||||
	`ordering` int NOT NULL DEFAULT 0,
 | 
						`ordering` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`hide` tinyint NOT NULL DEFAULT 0,
 | 
						`hide` TINYINT(1) NOT NULL DEFAULT 0,
 | 
				
			||||||
	PRIMARY KEY (`id`)
 | 
						PRIMARY KEY (`id`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -221,51 +221,51 @@ INSERT INTO `myaac_gallery` (`id`, `ordering`, `comment`, `image`, `thumb`, `aut
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_settings`
 | 
					CREATE TABLE `myaac_settings`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` int(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`name` varchar(255) NOT NULL DEFAULT '',
 | 
						`name` VARCHAR(255) NOT NULL DEFAULT '',
 | 
				
			||||||
	`key` varchar(255) NOT NULL DEFAULT '',
 | 
						`key` VARCHAR(255) NOT NULL DEFAULT '',
 | 
				
			||||||
	`value` text NOT NULL,
 | 
						`value` TEXT NOT NULL,
 | 
				
			||||||
	PRIMARY KEY (`id`),
 | 
						PRIMARY KEY (`id`),
 | 
				
			||||||
	KEY `key` (`key`)
 | 
						KEY `key` (`key`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_spells`
 | 
					CREATE TABLE `myaac_spells`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL AUTO_INCREMENT,
 | 
						`id` INT(11) NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
	`spell` varchar(255) NOT NULL DEFAULT '',
 | 
						`spell` VARCHAR(255) NOT NULL DEFAULT '',
 | 
				
			||||||
	`name` varchar(255) NOT NULL,
 | 
						`name` VARCHAR(255) NOT NULL,
 | 
				
			||||||
	`words` varchar(255) NOT NULL DEFAULT '',
 | 
						`words` VARCHAR(255) NOT NULL DEFAULT '',
 | 
				
			||||||
	`category` tinyint NOT NULL DEFAULT 0 COMMENT '1 - attack, 2 - healing, 3 - summon, 4 - supply, 5 - support',
 | 
						`category` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - attack, 2 - healing, 3 - summon, 4 - supply, 5 - support',
 | 
				
			||||||
	`type` tinyint NOT NULL DEFAULT 0 COMMENT '1 - instant, 2 - conjure, 3 - rune',
 | 
						`type` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1 - instant, 2 - conjure, 3 - rune',
 | 
				
			||||||
	`level` int NOT NULL DEFAULT 0,
 | 
						`level` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`maglevel` int NOT NULL DEFAULT 0,
 | 
						`maglevel` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`mana` int NOT NULL DEFAULT 0,
 | 
						`mana` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`soul` tinyint NOT NULL DEFAULT 0,
 | 
						`soul` TINYINT(3) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`conjure_id` int NOT NULL DEFAULT 0,
 | 
						`conjure_id` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`conjure_count` tinyint NOT NULL DEFAULT 0,
 | 
						`conjure_count` TINYINT(3) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`reagent` int NOT NULL DEFAULT 0,
 | 
						`reagent` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`item_id` int NOT NULL DEFAULT 0,
 | 
						`item_id` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`premium` tinyint NOT NULL DEFAULT 0,
 | 
						`premium` TINYINT(1) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`vocations` varchar(100) NOT NULL DEFAULT '',
 | 
						`vocations` VARCHAR(100) NOT NULL DEFAULT '',
 | 
				
			||||||
	`hide` tinyint NOT NULL DEFAULT 0,
 | 
						`hide` TINYINT(1) NOT NULL DEFAULT 0,
 | 
				
			||||||
	PRIMARY KEY (`id`),
 | 
						PRIMARY KEY (`id`),
 | 
				
			||||||
	UNIQUE (`name`)
 | 
						UNIQUE (`name`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_visitors`
 | 
					CREATE TABLE `myaac_visitors`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`ip` varchar(45) NOT NULL,
 | 
						`ip` VARCHAR(45) NOT NULL,
 | 
				
			||||||
	`lastvisit` int NOT NULL DEFAULT 0,
 | 
						`lastvisit` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`page` varchar(2048) NOT NULL,
 | 
						`page` VARCHAR(2048) NOT NULL,
 | 
				
			||||||
	`user_agent` varchar(255) NOT NULL DEFAULT '',
 | 
						`user_agent` VARCHAR(255) NOT NULL DEFAULT '',
 | 
				
			||||||
	UNIQUE (`ip`)
 | 
						UNIQUE (`ip`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE `myaac_weapons`
 | 
					CREATE TABLE `myaac_weapons`
 | 
				
			||||||
(
 | 
					(
 | 
				
			||||||
	`id` int NOT NULL,
 | 
						`id` INT(11) NOT NULL,
 | 
				
			||||||
	`level` int NOT NULL DEFAULT 0,
 | 
						`level` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`maglevel` int NOT NULL DEFAULT 0,
 | 
						`maglevel` INT(11) NOT NULL DEFAULT 0,
 | 
				
			||||||
	`vocations` varchar(100) NOT NULL DEFAULT '',
 | 
						`vocations` VARCHAR(100) NOT NULL DEFAULT '',
 | 
				
			||||||
	PRIMARY KEY (`id`)
 | 
						PRIMARY KEY (`id`)
 | 
				
			||||||
) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
					) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8mb4;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,14 +10,6 @@ foreach($config['clients'] as $client) {
 | 
				
			|||||||
	$clients[$client] = $client_version;
 | 
						$clients[$client] = $client_version;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (empty($_SESSION['var_site_url'])) {
 | 
					 | 
				
			||||||
	//require SYSTEM . 'base.php';
 | 
					 | 
				
			||||||
	$serverUrl = 'http' . (isHttps() ? 's' : '') . '://' . $baseHost;
 | 
					 | 
				
			||||||
	$siteURL = $serverUrl . $baseDir;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	$_SESSION['var_site_url'] = $siteURL;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$twig->display('install.config.html.twig', array(
 | 
					$twig->display('install.config.html.twig', array(
 | 
				
			||||||
	'clients' => $clients,
 | 
						'clients' => $clients,
 | 
				
			||||||
	'timezones' => DateTimeZone::listIdentifiers(),
 | 
						'timezones' => DateTimeZone::listIdentifiers(),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -195,4 +195,13 @@ if(!isset($_SESSION['installed'])) {
 | 
				
			|||||||
	$_SESSION['installed'] = true;
 | 
						$_SESSION['installed'] = true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foreach($_SESSION as $key => $value) {
 | 
				
			||||||
 | 
						if(strpos($key, 'var_') !== false)
 | 
				
			||||||
 | 
							unset($_SESSION[$key]);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					unset($_SESSION['saved']);
 | 
				
			||||||
 | 
					if(file_exists(CACHE . 'install.txt')) {
 | 
				
			||||||
 | 
						unlink(CACHE . 'install.txt');
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$hooks->trigger(HOOK_INSTALL_FINISH_END);
 | 
					$hooks->trigger(HOOK_INSTALL_FINISH_END);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,11 +7,6 @@ require SYSTEM . 'functions.php';
 | 
				
			|||||||
require BASE . 'install/includes/functions.php';
 | 
					require BASE . 'install/includes/functions.php';
 | 
				
			||||||
require BASE . 'install/includes/locale.php';
 | 
					require BASE . 'install/includes/locale.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(isset($config['installed']) && $config['installed'] && !isset($_SESSION['saved'])) {
 | 
					 | 
				
			||||||
	warning($locale['already_installed']);
 | 
					 | 
				
			||||||
	return;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$error = false;
 | 
					$error = false;
 | 
				
			||||||
require BASE . 'install/includes/config.php';
 | 
					require BASE . 'install/includes/config.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,11 +17,11 @@ ini_set('max_execution_time', 300);
 | 
				
			|||||||
ob_implicit_flush();
 | 
					ob_implicit_flush();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
header('X-Accel-Buffering: no');
 | 
					header('X-Accel-Buffering: no');
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
if(isset($config['installed']) && $config['installed'] && !isset($_SESSION['saved'])) {
 | 
					if(isset($config['installed']) && $config['installed'] && !isset($_SESSION['saved'])) {
 | 
				
			||||||
	warning($locale['already_installed']);
 | 
						warning($locale['already_installed']);
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require SYSTEM . 'init.php';
 | 
					require SYSTEM . 'init.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -54,13 +54,12 @@ if ($db->hasTable('players')) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Plugins::installMenus('kathrine', require TEMPLATES . 'kathrine/menus.php');
 | 
				
			||||||
 | 
					Plugins::installMenus('tibiacom', require TEMPLATES . 'tibiacom/menus.php');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DataLoader::setLocale($locale);
 | 
					DataLoader::setLocale($locale);
 | 
				
			||||||
DataLoader::load();
 | 
					DataLoader::load();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// add menus entries
 | 
					 | 
				
			||||||
require_once SYSTEM . 'migrations/17.php';
 | 
					 | 
				
			||||||
$up();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// update config.highscores_ids_hidden
 | 
					// update config.highscores_ids_hidden
 | 
				
			||||||
require_once SYSTEM . 'migrations/20.php';
 | 
					require_once SYSTEM . 'migrations/20.php';
 | 
				
			||||||
$up();
 | 
					$up();
 | 
				
			||||||
@@ -79,10 +78,6 @@ $up();
 | 
				
			|||||||
require_once SYSTEM . 'migrations/31.php';
 | 
					require_once SYSTEM . 'migrations/31.php';
 | 
				
			||||||
$up();
 | 
					$up();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// rules page
 | 
					 | 
				
			||||||
require_once SYSTEM . 'migrations/45.php';
 | 
					 | 
				
			||||||
$up();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if(ModelsFAQ::count() == 0) {
 | 
					if(ModelsFAQ::count() == 0) {
 | 
				
			||||||
	ModelsFAQ::create([
 | 
						ModelsFAQ::create([
 | 
				
			||||||
		'question' => 'What is this?',
 | 
							'question' => 'What is this?',
 | 
				
			||||||
@@ -94,17 +89,6 @@ $hooks->trigger(HOOK_INSTALL_FINISH);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
$db->setClearCacheAfter(true);
 | 
					$db->setClearCacheAfter(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// cleanup
 | 
					 | 
				
			||||||
foreach($_SESSION as $key => $value) {
 | 
					 | 
				
			||||||
	if(str_contains($key, 'var_')) {
 | 
					 | 
				
			||||||
		unset($_SESSION[$key]);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
unset($_SESSION['saved']);
 | 
					 | 
				
			||||||
if(file_exists(CACHE . 'install.txt')) {
 | 
					 | 
				
			||||||
	unlink(CACHE . 'install.txt');
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$locale['step_finish_desc'] = str_replace('$ADMIN_PANEL$', generateLink(str_replace('tools/', '',ADMIN_URL), $locale['step_finish_admin_panel'], true), $locale['step_finish_desc']);
 | 
					$locale['step_finish_desc'] = str_replace('$ADMIN_PANEL$', generateLink(str_replace('tools/', '',ADMIN_URL), $locale['step_finish_admin_panel'], true), $locale['step_finish_desc']);
 | 
				
			||||||
$locale['step_finish_desc'] = str_replace('$HOMEPAGE$', generateLink(str_replace('tools/', '', BASE_URL), $locale['step_finish_homepage'], true), $locale['step_finish_desc']);
 | 
					$locale['step_finish_desc'] = str_replace('$HOMEPAGE$', generateLink(str_replace('tools/', '', BASE_URL), $locale['step_finish_homepage'], true), $locale['step_finish_desc']);
 | 
				
			||||||
$locale['step_finish_desc'] = str_replace('$LINK$', generateLink('https://my-aac.org', 'https://my-aac.org', true), $locale['step_finish_desc']);
 | 
					$locale['step_finish_desc'] = str_replace('$LINK$', generateLink('https://my-aac.org', 'https://my-aac.org', true), $locale['step_finish_desc']);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								login.php
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								login.php
									
									
									
									
									
								
							@@ -86,25 +86,12 @@ switch ($action) {
 | 
				
			|||||||
		die(json_encode(['eventlist' => $eventlist, 'lastupdatetimestamp' => time()]));
 | 
							die(json_encode(['eventlist' => $eventlist, 'lastupdatetimestamp' => time()]));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case 'boostedcreature':
 | 
						case 'boostedcreature':
 | 
				
			||||||
		$clientVersion = (int)setting('core.client');
 | 
							$boostedCreature = BoostedCreature::latest();
 | 
				
			||||||
 | 
					 | 
				
			||||||
		// 14.00 and up
 | 
					 | 
				
			||||||
		if ($clientVersion >= 1400) {
 | 
					 | 
				
			||||||
			$creatureBoost = $db->query("SELECT * FROM " . $db->tableName('boosted_creature'))->fetchAll();
 | 
					 | 
				
			||||||
			$bossBoost     = $db->query("SELECT * FROM " . $db->tableName('boosted_boss'))->fetchAll();
 | 
					 | 
				
			||||||
			die(json_encode([
 | 
					 | 
				
			||||||
				'boostedcreature' => true,
 | 
					 | 
				
			||||||
				'creatureraceid'  => intval($creatureBoost[0]['raceid']),
 | 
					 | 
				
			||||||
				'bossraceid'      => intval($bossBoost[0]['raceid'])
 | 
					 | 
				
			||||||
			]));
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// lower clients
 | 
					 | 
				
			||||||
		$boostedCreature = BoostedCreature::first();
 | 
					 | 
				
			||||||
		die(json_encode([
 | 
							die(json_encode([
 | 
				
			||||||
			'boostedcreature' => true,
 | 
								'boostedcreature' => true,
 | 
				
			||||||
			'raceid' => $boostedCreature->raceid
 | 
								'raceid' => $boostedCreature->raceid
 | 
				
			||||||
		]));
 | 
							]));
 | 
				
			||||||
 | 
						break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case 'login':
 | 
						case 'login':
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -156,7 +143,7 @@ switch ($action) {
 | 
				
			|||||||
			if ($limiter->exceeded($ip)) {
 | 
								if ($limiter->exceeded($ip)) {
 | 
				
			||||||
				sendError($ban_msg);
 | 
									sendError($ban_msg);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								
 | 
				
			||||||
			sendError(($inputEmail != false ? 'Email' : 'Account name') . ' or password is not correct.');
 | 
								sendError(($inputEmail != false ? 'Email' : 'Account name') . ' or password is not correct.');
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
server {
 | 
					server {
 | 
				
			||||||
	listen 80;
 | 
						listen 80;
 | 
				
			||||||
	root /var/www/html;
 | 
						root /home/otserv/www/public;
 | 
				
			||||||
	index index.php;
 | 
						index index.php;
 | 
				
			||||||
	server_name your-domain.com;
 | 
						server_name your-domain.com;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -14,7 +14,7 @@ server {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	# block .htaccess, CHANGELOG.md, composer.json etc.
 | 
						# block .htaccess, CHANGELOG.md, composer.json etc.
 | 
				
			||||||
	# this is to prevent finding software versions
 | 
						# this is to prevent finding software versions
 | 
				
			||||||
	location ~\.(ht|md|json|dist|sql)$ {
 | 
						location ~\.(ht|md|json|dist)$ {
 | 
				
			||||||
		deny all;
 | 
							deny all;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										169
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										169
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -14,13 +14,24 @@
 | 
				
			|||||||
        "tinymce": "^7.2.0"
 | 
					        "tinymce": "^7.2.0"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "devDependencies": {
 | 
					      "devDependencies": {
 | 
				
			||||||
        "cypress": "^14.3.3"
 | 
					        "cypress": "^13.17.0"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "node_modules/@colors/colors": {
 | 
				
			||||||
 | 
					      "version": "1.5.0",
 | 
				
			||||||
 | 
					      "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
 | 
				
			||||||
 | 
					      "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
 | 
				
			||||||
 | 
					      "dev": true,
 | 
				
			||||||
 | 
					      "license": "MIT",
 | 
				
			||||||
 | 
					      "optional": true,
 | 
				
			||||||
 | 
					      "engines": {
 | 
				
			||||||
 | 
					        "node": ">=0.1.90"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/@cypress/request": {
 | 
					    "node_modules/@cypress/request": {
 | 
				
			||||||
      "version": "3.0.8",
 | 
					      "version": "3.0.7",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.8.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.7.tgz",
 | 
				
			||||||
      "integrity": "sha512-h0NFgh1mJmm1nr4jCwkGHwKneVYKghUyWe6TMNrk0B9zsjAJxpg8C4/+BAcmLgCPa1vj1V8rNUaILl+zYRUWBQ==",
 | 
					      "integrity": "sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "Apache-2.0",
 | 
					      "license": "Apache-2.0",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
@@ -37,7 +48,7 @@
 | 
				
			|||||||
        "json-stringify-safe": "~5.0.1",
 | 
					        "json-stringify-safe": "~5.0.1",
 | 
				
			||||||
        "mime-types": "~2.1.19",
 | 
					        "mime-types": "~2.1.19",
 | 
				
			||||||
        "performance-now": "^2.1.0",
 | 
					        "performance-now": "^2.1.0",
 | 
				
			||||||
        "qs": "6.14.0",
 | 
					        "qs": "6.13.1",
 | 
				
			||||||
        "safe-buffer": "^5.1.2",
 | 
					        "safe-buffer": "^5.1.2",
 | 
				
			||||||
        "tough-cookie": "^5.0.0",
 | 
					        "tough-cookie": "^5.0.0",
 | 
				
			||||||
        "tunnel-agent": "^0.6.0",
 | 
					        "tunnel-agent": "^0.6.0",
 | 
				
			||||||
@@ -376,9 +387,9 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/call-bind-apply-helpers": {
 | 
					    "node_modules/call-bind-apply-helpers": {
 | 
				
			||||||
      "version": "1.0.2",
 | 
					      "version": "1.0.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
 | 
				
			||||||
      "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
 | 
					      "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "MIT",
 | 
					      "license": "MIT",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
@@ -390,14 +401,14 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/call-bound": {
 | 
					    "node_modules/call-bound": {
 | 
				
			||||||
      "version": "1.0.4",
 | 
					      "version": "1.0.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
 | 
				
			||||||
      "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
 | 
					      "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "MIT",
 | 
					      "license": "MIT",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "call-bind-apply-helpers": "^1.0.2",
 | 
					        "call-bind-apply-helpers": "^1.0.1",
 | 
				
			||||||
        "get-intrinsic": "^1.3.0"
 | 
					        "get-intrinsic": "^1.2.6"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "engines": {
 | 
					      "engines": {
 | 
				
			||||||
        "node": ">= 0.4"
 | 
					        "node": ">= 0.4"
 | 
				
			||||||
@@ -493,9 +504,9 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/cli-table3": {
 | 
					    "node_modules/cli-table3": {
 | 
				
			||||||
      "version": "0.6.1",
 | 
					      "version": "0.6.5",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz",
 | 
				
			||||||
      "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==",
 | 
					      "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "MIT",
 | 
					      "license": "MIT",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
@@ -505,7 +516,7 @@
 | 
				
			|||||||
        "node": "10.* || >= 12.*"
 | 
					        "node": "10.* || >= 12.*"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "optionalDependencies": {
 | 
					      "optionalDependencies": {
 | 
				
			||||||
        "colors": "1.4.0"
 | 
					        "@colors/colors": "1.5.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/cli-truncate": {
 | 
					    "node_modules/cli-truncate": {
 | 
				
			||||||
@@ -552,17 +563,6 @@
 | 
				
			|||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "MIT"
 | 
					      "license": "MIT"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/colors": {
 | 
					 | 
				
			||||||
      "version": "1.4.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "license": "MIT",
 | 
					 | 
				
			||||||
      "optional": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=0.1.90"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/combined-stream": {
 | 
					    "node_modules/combined-stream": {
 | 
				
			||||||
      "version": "1.0.8",
 | 
					      "version": "1.0.8",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
 | 
				
			||||||
@@ -619,14 +619,14 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/cypress": {
 | 
					    "node_modules/cypress": {
 | 
				
			||||||
      "version": "14.3.3",
 | 
					      "version": "13.17.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/cypress/-/cypress-14.3.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-1Rz7zc9iqLww6BysaESqUhtIuaFHS7nL3wREovAKYsNhLTfX3TbcBWHWgEz70YimH2NkSOsm4oIcJJ9HYHOlew==",
 | 
					      "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "hasInstallScript": true,
 | 
					      "hasInstallScript": true,
 | 
				
			||||||
      "license": "MIT",
 | 
					      "license": "MIT",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "@cypress/request": "^3.0.8",
 | 
					        "@cypress/request": "^3.0.6",
 | 
				
			||||||
        "@cypress/xvfb": "^1.2.4",
 | 
					        "@cypress/xvfb": "^1.2.4",
 | 
				
			||||||
        "@types/sinonjs__fake-timers": "8.1.1",
 | 
					        "@types/sinonjs__fake-timers": "8.1.1",
 | 
				
			||||||
        "@types/sizzle": "^2.3.2",
 | 
					        "@types/sizzle": "^2.3.2",
 | 
				
			||||||
@@ -637,9 +637,9 @@
 | 
				
			|||||||
        "cachedir": "^2.3.0",
 | 
					        "cachedir": "^2.3.0",
 | 
				
			||||||
        "chalk": "^4.1.0",
 | 
					        "chalk": "^4.1.0",
 | 
				
			||||||
        "check-more-types": "^2.24.0",
 | 
					        "check-more-types": "^2.24.0",
 | 
				
			||||||
        "ci-info": "^4.1.0",
 | 
					        "ci-info": "^4.0.0",
 | 
				
			||||||
        "cli-cursor": "^3.1.0",
 | 
					        "cli-cursor": "^3.1.0",
 | 
				
			||||||
        "cli-table3": "0.6.1",
 | 
					        "cli-table3": "~0.6.1",
 | 
				
			||||||
        "commander": "^6.2.1",
 | 
					        "commander": "^6.2.1",
 | 
				
			||||||
        "common-tags": "^1.8.0",
 | 
					        "common-tags": "^1.8.0",
 | 
				
			||||||
        "dayjs": "^1.10.4",
 | 
					        "dayjs": "^1.10.4",
 | 
				
			||||||
@@ -663,7 +663,7 @@
 | 
				
			|||||||
        "process": "^0.11.10",
 | 
					        "process": "^0.11.10",
 | 
				
			||||||
        "proxy-from-env": "1.0.0",
 | 
					        "proxy-from-env": "1.0.0",
 | 
				
			||||||
        "request-progress": "^3.0.0",
 | 
					        "request-progress": "^3.0.0",
 | 
				
			||||||
        "semver": "^7.7.1",
 | 
					        "semver": "^7.5.3",
 | 
				
			||||||
        "supports-color": "^8.1.1",
 | 
					        "supports-color": "^8.1.1",
 | 
				
			||||||
        "tmp": "~0.2.3",
 | 
					        "tmp": "~0.2.3",
 | 
				
			||||||
        "tree-kill": "1.2.2",
 | 
					        "tree-kill": "1.2.2",
 | 
				
			||||||
@@ -674,7 +674,7 @@
 | 
				
			|||||||
        "cypress": "bin/cypress"
 | 
					        "cypress": "bin/cypress"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "engines": {
 | 
					      "engines": {
 | 
				
			||||||
        "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
 | 
					        "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/cypress/node_modules/fs-extra": {
 | 
					    "node_modules/cypress/node_modules/fs-extra": {
 | 
				
			||||||
@@ -819,9 +819,9 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/es-object-atoms": {
 | 
					    "node_modules/es-object-atoms": {
 | 
				
			||||||
      "version": "1.1.1",
 | 
					      "version": "1.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
 | 
					      "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "MIT",
 | 
					      "license": "MIT",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
@@ -831,22 +831,6 @@
 | 
				
			|||||||
        "node": ">= 0.4"
 | 
					        "node": ">= 0.4"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/es-set-tostringtag": {
 | 
					 | 
				
			||||||
      "version": "2.1.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "license": "MIT",
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "es-errors": "^1.3.0",
 | 
					 | 
				
			||||||
        "get-intrinsic": "^1.2.6",
 | 
					 | 
				
			||||||
        "has-tostringtag": "^1.0.2",
 | 
					 | 
				
			||||||
        "hasown": "^2.0.2"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">= 0.4"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/escape-string-regexp": {
 | 
					    "node_modules/escape-string-regexp": {
 | 
				
			||||||
      "version": "1.0.5",
 | 
					      "version": "1.0.5",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
 | 
				
			||||||
@@ -976,15 +960,14 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/form-data": {
 | 
					    "node_modules/form-data": {
 | 
				
			||||||
      "version": "4.0.2",
 | 
					      "version": "4.0.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
 | 
				
			||||||
      "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
 | 
					      "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "MIT",
 | 
					      "license": "MIT",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "asynckit": "^0.4.0",
 | 
					        "asynckit": "^0.4.0",
 | 
				
			||||||
        "combined-stream": "^1.0.8",
 | 
					        "combined-stream": "^1.0.8",
 | 
				
			||||||
        "es-set-tostringtag": "^2.1.0",
 | 
					 | 
				
			||||||
        "mime-types": "^2.1.12"
 | 
					        "mime-types": "^2.1.12"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "engines": {
 | 
					      "engines": {
 | 
				
			||||||
@@ -1016,18 +999,18 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/get-intrinsic": {
 | 
					    "node_modules/get-intrinsic": {
 | 
				
			||||||
      "version": "1.3.0",
 | 
					      "version": "1.2.7",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz",
 | 
				
			||||||
      "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
 | 
					      "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "MIT",
 | 
					      "license": "MIT",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "call-bind-apply-helpers": "^1.0.2",
 | 
					        "call-bind-apply-helpers": "^1.0.1",
 | 
				
			||||||
        "es-define-property": "^1.0.1",
 | 
					        "es-define-property": "^1.0.1",
 | 
				
			||||||
        "es-errors": "^1.3.0",
 | 
					        "es-errors": "^1.3.0",
 | 
				
			||||||
        "es-object-atoms": "^1.1.1",
 | 
					        "es-object-atoms": "^1.0.0",
 | 
				
			||||||
        "function-bind": "^1.1.2",
 | 
					        "function-bind": "^1.1.2",
 | 
				
			||||||
        "get-proto": "^1.0.1",
 | 
					        "get-proto": "^1.0.0",
 | 
				
			||||||
        "gopd": "^1.2.0",
 | 
					        "gopd": "^1.2.0",
 | 
				
			||||||
        "has-symbols": "^1.1.0",
 | 
					        "has-symbols": "^1.1.0",
 | 
				
			||||||
        "hasown": "^2.0.2",
 | 
					        "hasown": "^2.0.2",
 | 
				
			||||||
@@ -1148,22 +1131,6 @@
 | 
				
			|||||||
        "url": "https://github.com/sponsors/ljharb"
 | 
					        "url": "https://github.com/sponsors/ljharb"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/has-tostringtag": {
 | 
					 | 
				
			||||||
      "version": "1.0.2",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "license": "MIT",
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "has-symbols": "^1.0.3"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">= 0.4"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/sponsors/ljharb"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/hasown": {
 | 
					    "node_modules/hasown": {
 | 
				
			||||||
      "version": "2.0.2",
 | 
					      "version": "2.0.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
 | 
				
			||||||
@@ -1593,9 +1560,9 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/object-inspect": {
 | 
					    "node_modules/object-inspect": {
 | 
				
			||||||
      "version": "1.13.4",
 | 
					      "version": "1.13.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
 | 
				
			||||||
      "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
 | 
					      "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "MIT",
 | 
					      "license": "MIT",
 | 
				
			||||||
      "engines": {
 | 
					      "engines": {
 | 
				
			||||||
@@ -1742,13 +1709,13 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/qs": {
 | 
					    "node_modules/qs": {
 | 
				
			||||||
      "version": "6.14.0",
 | 
					      "version": "6.13.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz",
 | 
				
			||||||
      "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
 | 
					      "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "BSD-3-Clause",
 | 
					      "license": "BSD-3-Clause",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "side-channel": "^1.1.0"
 | 
					        "side-channel": "^1.0.6"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "engines": {
 | 
					      "engines": {
 | 
				
			||||||
        "node": ">=0.6"
 | 
					        "node": ">=0.6"
 | 
				
			||||||
@@ -1827,9 +1794,9 @@
 | 
				
			|||||||
      "license": "MIT"
 | 
					      "license": "MIT"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/semver": {
 | 
					    "node_modules/semver": {
 | 
				
			||||||
      "version": "7.7.1",
 | 
					      "version": "7.6.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
 | 
				
			||||||
      "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
 | 
					      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "ISC",
 | 
					      "license": "ISC",
 | 
				
			||||||
      "bin": {
 | 
					      "bin": {
 | 
				
			||||||
@@ -2064,22 +2031,22 @@
 | 
				
			|||||||
      "license": "GPL-2.0-or-later"
 | 
					      "license": "GPL-2.0-or-later"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/tldts": {
 | 
					    "node_modules/tldts": {
 | 
				
			||||||
      "version": "6.1.86",
 | 
					      "version": "6.1.71",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.71.tgz",
 | 
				
			||||||
      "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==",
 | 
					      "integrity": "sha512-LQIHmHnuzfZgZWAf2HzL83TIIrD8NhhI0DVxqo9/FdOd4ilec+NTNZOlDZf7EwrTNoutccbsHjvWHYXLAtvxjw==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "MIT",
 | 
					      "license": "MIT",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "tldts-core": "^6.1.86"
 | 
					        "tldts-core": "^6.1.71"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "bin": {
 | 
					      "bin": {
 | 
				
			||||||
        "tldts": "bin/cli.js"
 | 
					        "tldts": "bin/cli.js"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/tldts-core": {
 | 
					    "node_modules/tldts-core": {
 | 
				
			||||||
      "version": "6.1.86",
 | 
					      "version": "6.1.71",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.71.tgz",
 | 
				
			||||||
      "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==",
 | 
					      "integrity": "sha512-LRbChn2YRpic1KxY+ldL1pGXN/oVvKfCVufwfVzEQdFYNo39uF7AJa/WXdo+gYO7PTvdfkCPCed6Hkvz/kR7jg==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "MIT"
 | 
					      "license": "MIT"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
@@ -2094,9 +2061,9 @@
 | 
				
			|||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/tough-cookie": {
 | 
					    "node_modules/tough-cookie": {
 | 
				
			||||||
      "version": "5.1.2",
 | 
					      "version": "5.1.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==",
 | 
					      "integrity": "sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg==",
 | 
				
			||||||
      "dev": true,
 | 
					      "dev": true,
 | 
				
			||||||
      "license": "BSD-3-Clause",
 | 
					      "license": "BSD-3-Clause",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    "postinstall": "node ./npm-post-install.js"
 | 
					    "postinstall": "node ./npm-post-install.js"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "cypress": "^14.3.3"
 | 
					    "cypress": "^13.17.0"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@tinymce/tinymce-jquery": "^2.1.0",
 | 
					    "@tinymce/tinymce-jquery": "^2.1.0",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,10 +46,8 @@
 | 
				
			|||||||
	"settings": "plugins/your-plugin-folder/settings.php",
 | 
						"settings": "plugins/your-plugin-folder/settings.php",
 | 
				
			||||||
	"autoload": {
 | 
						"autoload": {
 | 
				
			||||||
		"pages": true,
 | 
							"pages": true,
 | 
				
			||||||
		"pages-sub-folders": false,
 | 
							"pagesSubFolders": false,
 | 
				
			||||||
		"commands": true,
 | 
							"commands": true,
 | 
				
			||||||
		"themes": true,
 | 
							"themes": true
 | 
				
			||||||
		"admin-pages": true,
 | 
					 | 
				
			||||||
		"admin-pages-sub-folders": true,
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 }
 | 
					 }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,21 +0,0 @@
 | 
				
			|||||||
<?php
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$baseDir = '';
 | 
					 | 
				
			||||||
$tmp = explode('/', $_SERVER['SCRIPT_NAME']);
 | 
					 | 
				
			||||||
$size = count($tmp) - 1;
 | 
					 | 
				
			||||||
for($i = 1; $i < $size; $i++)
 | 
					 | 
				
			||||||
	$baseDir .= '/' . $tmp[$i];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$baseDir = str_replace(['/' . ADMIN_PANEL_FOLDER, '/install', '/tools'], '', $baseDir);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if(!IS_CLI) {
 | 
					 | 
				
			||||||
	if (isset($_SERVER['HTTP_HOST'][0])) {
 | 
					 | 
				
			||||||
		$baseHost = $_SERVER['HTTP_HOST'];
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		if (isset($_SERVER['SERVER_NAME'][0])) {
 | 
					 | 
				
			||||||
			$baseHost = $_SERVER['SERVER_NAME'];
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			$baseHost = $_SERVER['SERVER_ADDR'];
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -109,12 +109,4 @@ $config['clients'] = [
 | 
				
			|||||||
	1330,
 | 
						1330,
 | 
				
			||||||
	1332,
 | 
						1332,
 | 
				
			||||||
	1340,
 | 
						1340,
 | 
				
			||||||
 | 
					 | 
				
			||||||
	1400,
 | 
					 | 
				
			||||||
	1405,
 | 
					 | 
				
			||||||
	1410,
 | 
					 | 
				
			||||||
	1411,
 | 
					 | 
				
			||||||
	1412,
 | 
					 | 
				
			||||||
	1500,
 | 
					 | 
				
			||||||
	1501,
 | 
					 | 
				
			||||||
];
 | 
					];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,3 +74,7 @@ function fieldExist($field, $table)
 | 
				
			|||||||
	global $db;
 | 
						global $db;
 | 
				
			||||||
	return $db->hasColumn($table, $field);
 | 
						return $db->hasColumn($table, $field);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function getCreatureImgPath($creature): string {
 | 
				
			||||||
 | 
						return getMonsterImgPath($creature);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -122,10 +122,6 @@ try {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	$eloquentConnection = $capsule->getConnection();
 | 
						$eloquentConnection = $capsule->getConnection();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (isset($twig)) {
 | 
					 | 
				
			||||||
		$twig->addGlobal('db', $db);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
} catch (Exception $e) {
 | 
					} catch (Exception $e) {
 | 
				
			||||||
	if(isset($cache) && $cache->enabled()) {
 | 
						if(isset($cache) && $cache->enabled()) {
 | 
				
			||||||
		$cache->delete('config_lua');
 | 
							$cache->delete('config_lua');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -545,39 +545,33 @@ function template_header($is_admin = false): string
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
function template_footer(): string
 | 
					function template_footer(): string
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	$footer = [];
 | 
						global $views_counter;
 | 
				
			||||||
 | 
						$ret = '';
 | 
				
			||||||
	if(admin()) {
 | 
						if(admin()) {
 | 
				
			||||||
		$footer[] = generateLink(ADMIN_URL, 'Admin Panel', true);
 | 
							$ret .= generateLink(ADMIN_URL, 'Admin Panel', true);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(setting('core.visitors_counter')) {
 | 
						if(setting('core.visitors_counter')) {
 | 
				
			||||||
		global $visitors;
 | 
							global $visitors;
 | 
				
			||||||
		$amount = $visitors->getAmountVisitors();
 | 
							$amount = $visitors->getAmountVisitors();
 | 
				
			||||||
		$footer[] = 'Currently there ' . ($amount > 1 ? 'are' : 'is') . ' ' . $amount . ' visitor' . ($amount > 1 ? 's' : '') . '.';
 | 
							$ret .= '<br/>Currently there ' . ($amount > 1 ? 'are' : 'is') . ' ' . $amount . ' visitor' . ($amount > 1 ? 's' : '') . '.';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(setting('core.views_counter')) {
 | 
						if(setting('core.views_counter')) {
 | 
				
			||||||
		global $views_counter;
 | 
							$ret .= '<br/>Page has been viewed ' . $views_counter . ' times.';
 | 
				
			||||||
		$footer[] = 'Page has been viewed ' . $views_counter . ' times.';
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(setting('core.footer_load_time')) {
 | 
						if(setting('core.footer_load_time')) {
 | 
				
			||||||
		$footer[] = 'Load time: ' . round(microtime(true) - START_TIME, 4) . ' seconds.';
 | 
							$ret .= '<br/>Load time: ' . round(microtime(true) - START_TIME, 4) . ' seconds.';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$settingFooter = setting('core.footer');
 | 
						$settingFooter = setting('core.footer');
 | 
				
			||||||
	if(isset($settingFooter[0])) {
 | 
						if(isset($settingFooter[0])) {
 | 
				
			||||||
		$footer[] = '' . $settingFooter;
 | 
							$ret .= '<br/>' . $settingFooter;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// please respect my work and help spreading the word, thanks!
 | 
						// please respect my work and help spreading the word, thanks!
 | 
				
			||||||
	$footer[] = base64_decode('UG93ZXJlZCBieSA8YSBocmVmPSJodHRwOi8vbXktYWFjLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPk15QUFDLjwvYT4=');
 | 
						return $ret . '<br/>' . base64_decode('UG93ZXJlZCBieSA8YSBocmVmPSJodHRwOi8vbXktYWFjLm9yZyIgdGFyZ2V0PSJfYmxhbmsiPk15QUFDLjwvYT4=');
 | 
				
			||||||
 | 
					 | 
				
			||||||
	global $hooks;
 | 
					 | 
				
			||||||
	$hooks->triggerFilter(HOOK_FILTER_THEME_FOOTER, $footer);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return implode('<br/>', $footer);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function template_ga_code()
 | 
					function template_ga_code()
 | 
				
			||||||
@@ -1018,19 +1012,12 @@ function load_config_lua($filename)
 | 
				
			|||||||
					}
 | 
										}
 | 
				
			||||||
					else
 | 
										else
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						foreach($result as $tmp_key => $tmp_value) { // load values defined by other keys, like: dailyFragsToBlackSkull = dailyFragsToRedSkull
 | 
											foreach($result as $tmp_key => $tmp_value) // load values defined by other keys, like: dailyFragsToBlackSkull = dailyFragsToRedSkull
 | 
				
			||||||
							$value = str_replace($tmp_key, $tmp_value, $value);
 | 
												$value = str_replace($tmp_key, $tmp_value, $value);
 | 
				
			||||||
						}
 | 
											$ret = @eval("return $value;");
 | 
				
			||||||
 | 
											if((string) $ret == '' && trim($value) !== '""') // = parser error
 | 
				
			||||||
						try {
 | 
											{
 | 
				
			||||||
							$ret = eval("return $value;");
 | 
												throw new RuntimeException('ERROR: Loading config.lua file. Line <b>' . ($ln + 1) . '</b> of LUA config file is not valid [key: <b>' . $key . '</b>]');
 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
						catch (Throwable $e) {
 | 
					 | 
				
			||||||
							throw new RuntimeException('ERROR: Loading config.lua file. Line: ' . ($ln + 1) . ' - Unable to parse value "' . $value . '" - ' . $e->getMessage());
 | 
					 | 
				
			||||||
						}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
						if((string) $ret == '' && trim($value) !== '""') {
 | 
					 | 
				
			||||||
							throw new RuntimeException('ERROR: Loading config.lua file. Line ' . ($ln + 1) . ' is not valid [key: ' . $key . ']');
 | 
					 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
						$result[$key] = $ret;
 | 
											$result[$key] = $ret;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
@@ -1578,6 +1565,22 @@ function right($str, $length) {
 | 
				
			|||||||
	return substr($str, -$length);
 | 
						return substr($str, -$length);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function getMonsterImgPath($monster): string
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						$monster_path = setting('core.monsters_images_url');
 | 
				
			||||||
 | 
						$monster_gfx_name = trim(strtolower($monster)) . setting('core.monsters_images_extension');
 | 
				
			||||||
 | 
						if (!file_exists($monster_path . $monster_gfx_name)) {
 | 
				
			||||||
 | 
							$monster_gfx_name = str_replace(" ", "", $monster_gfx_name);
 | 
				
			||||||
 | 
							if (file_exists($monster_path . $monster_gfx_name)) {
 | 
				
			||||||
 | 
								return $monster_path . $monster_gfx_name;
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								return $monster_path . 'nophoto.png';
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							return $monster_path . $monster_gfx_name;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function between($x, $lim1, $lim2) {
 | 
					function between($x, $lim1, $lim2) {
 | 
				
			||||||
	if ($lim1 < $lim2) {
 | 
						if ($lim1 < $lim2) {
 | 
				
			||||||
		$lower = $lim1; $upper = $lim2;
 | 
							$lower = $lim1; $upper = $lim2;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,6 @@ 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\Plugins;
 | 
					 | 
				
			||||||
use MyAAC\Models\Town;
 | 
					use MyAAC\Models\Town;
 | 
				
			||||||
use MyAAC\Settings;
 | 
					use MyAAC\Settings;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -47,11 +46,6 @@ if(isset($config['gzip_output']) && $config['gzip_output'] && isset($_SERVER['HT
 | 
				
			|||||||
global $cache;
 | 
					global $cache;
 | 
				
			||||||
$cache = Cache::getInstance();
 | 
					$cache = Cache::getInstance();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// load plugins init.php
 | 
					 | 
				
			||||||
foreach (Plugins::getInits() as $init) {
 | 
					 | 
				
			||||||
	require $init;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// event system
 | 
					// event system
 | 
				
			||||||
global $hooks;
 | 
					global $hooks;
 | 
				
			||||||
$hooks = new Hooks();
 | 
					$hooks = new Hooks();
 | 
				
			||||||
@@ -144,9 +138,6 @@ $ots = POT::getInstance();
 | 
				
			|||||||
$eloquentConnection = null;
 | 
					$eloquentConnection = null;
 | 
				
			||||||
require_once SYSTEM . 'database.php';
 | 
					require_once SYSTEM . 'database.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$twig->addGlobal('logged', false);
 | 
					 | 
				
			||||||
$twig->addGlobal('account_logged', new \OTS_Account());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// verify myaac tables exists in database
 | 
					// verify myaac tables exists in database
 | 
				
			||||||
if(!defined('MYAAC_INSTALL') && !$db->hasTable('myaac_account_actions')) {
 | 
					if(!defined('MYAAC_INSTALL') && !$db->hasTable('myaac_account_actions')) {
 | 
				
			||||||
	throw new RuntimeException('Seems that the table myaac_account_actions of MyAAC doesn\'t exist in the database. This is a fatal error. You can try to reinstall MyAAC by visiting ' . (IS_CLI ? 'http://your-ip.com/' : BASE_URL) . 'install');
 | 
						throw new RuntimeException('Seems that the table myaac_account_actions of MyAAC doesn\'t exist in the database. This is a fatal error. You can try to reinstall MyAAC by visiting ' . (IS_CLI ? 'http://your-ip.com/' : BASE_URL) . 'install');
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -12,6 +12,8 @@
 | 
				
			|||||||
 * @license http://www.gnu.org/licenses/lgpl-3.0.txt GNU Lesser General Public License, Version 3
 | 
					 * @license http://www.gnu.org/licenses/lgpl-3.0.txt GNU Lesser General Public License, Version 3
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use MyAAC\Models\AccountAction;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * OTServ account abstraction.
 | 
					 * OTServ account abstraction.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
@@ -446,13 +448,16 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
 | 
				
			|||||||
		if(isset($this->data['premium_ends_at']) || isset($this->data['premend'])) {
 | 
							if(isset($this->data['premium_ends_at']) || isset($this->data['premend'])) {
 | 
				
			||||||
			$col = isset($this->data['premium_ends_at']) ? 'premium_ends_at' : 'premend';
 | 
								$col = isset($this->data['premium_ends_at']) ? 'premium_ends_at' : 'premend';
 | 
				
			||||||
			$ret = ceil(($this->data[$col] - time()) / (24 * 60 * 60));
 | 
								$ret = ceil(($this->data[$col] - time()) / (24 * 60 * 60));
 | 
				
			||||||
			return max($ret, 0);
 | 
								return $ret > 0 ? $ret : 0;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if($this->data['premdays'] == 0) {
 | 
							if($this->data['premdays'] == 0) {
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							global $config;
 | 
				
			||||||
 | 
							if(isset($config['lua']['freePremium']) && getBoolean($config['lua']['freePremium'])) return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if($this->data['premdays'] == self::GRATIS_PREMIUM_DAYS){
 | 
							if($this->data['premdays'] == self::GRATIS_PREMIUM_DAYS){
 | 
				
			||||||
			return self::GRATIS_PREMIUM_DAYS;
 | 
								return self::GRATIS_PREMIUM_DAYS;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -1007,26 +1012,16 @@ class OTS_Account extends OTS_Row_DAO implements IteratorAggregate, Countable
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	public function logAction($action)
 | 
						public function logAction($action)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$ip = get_browser_real_ip();
 | 
							AccountAction::create([
 | 
				
			||||||
		if(!str_contains($ip, ":")) {
 | 
								'account_id' => $this->getId(),
 | 
				
			||||||
			$ipv6 = '0';
 | 
								'ip' => get_browser_real_ip(),
 | 
				
			||||||
		}
 | 
								'date' => time(),
 | 
				
			||||||
		else {
 | 
								'action' => $action,
 | 
				
			||||||
			$ipv6 = $ip;
 | 
							]);
 | 
				
			||||||
			$ip = '';
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return $this->db->exec('INSERT INTO `' . TABLE_PREFIX . 'account_actions` (`account_id`, `ip`, `ipv6`, `date`, `action`) VALUES (' . $this->db->quote($this->getId()).', ' . ($ip == '' ? '0' : $this->db->quote(ip2long($ip))) . ', (' . ($ipv6 == '0' ? $this->db->quote('') : $this->db->quote(inet_pton($ipv6))) . '), UNIX_TIMESTAMP(NOW()), ' . $this->db->quote($action).')');
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public function getActionsLog($limit1, $limit2)
 | 
						public function getActionsLog($limit) {
 | 
				
			||||||
	{
 | 
							return AccountAction::where('account_id', $this->data['id'])->orderByDesc('date')->limit($limit)->get()->toArray();
 | 
				
			||||||
		$actions = array();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		foreach($this->db->query('SELECT `ip`, `ipv6`, `date`, `action` FROM `' . TABLE_PREFIX . 'account_actions` WHERE `account_id` = ' . $this->data['id'] . ' ORDER by `date` DESC LIMIT ' . $limit1 . ', ' . $limit2 . '')->fetchAll() as $a)
 | 
					 | 
				
			||||||
			$actions[] = array('ip' => $a['ip'], 'ipv6' => $a['ipv6'], 'date' => $a['date'], 'action' => $a['action']);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return $actions;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns players iterator.
 | 
					 * Returns players iterator.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -234,19 +234,6 @@ class OTS_DB_MySQL extends OTS_Base_DB
 | 
				
			|||||||
		return $this->hasTable($table) && ($this->has_column_cache[$table . '.' . $column] = count($this->query('SHOW COLUMNS FROM `' . $table . "` LIKE '" . $column . "'")->fetchAll()) > 0);
 | 
							return $this->hasTable($table) && ($this->has_column_cache[$table . '.' . $column] = count($this->query('SHOW COLUMNS FROM `' . $table . "` LIKE '" . $column . "'")->fetchAll()) > 0);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public function hasTableAndColumns(string $table, array $columns = []): bool
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (!$this->hasTable($table)) return false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		foreach ($columns as $column) {
 | 
					 | 
				
			||||||
			if (!$this->hasColumn($table, $column)) {
 | 
					 | 
				
			||||||
				return false;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	public function revalidateCache() {
 | 
						public function revalidateCache() {
 | 
				
			||||||
		foreach($this->has_table_cache as $key => $value) {
 | 
							foreach($this->has_table_cache as $key => $value) {
 | 
				
			||||||
			$this->hasTableInternal($key);
 | 
								$this->hasTableInternal($key);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -97,7 +97,7 @@ class OTS_Guild extends OTS_Row_DAO implements IteratorAggregate, Countable
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 * @param IOTS_GuildAction $invites Invites driver (don't pass it to clear driver).
 | 
					 * @param IOTS_GuildAction $invites Invites driver (don't pass it to clear driver).
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
    public function setInvitesDriver(?IOTS_GuildAction $invites = null)
 | 
					    public function setInvitesDriver(IOTS_GuildAction $invites = null)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->invites = $invites;
 | 
					        $this->invites = $invites;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -107,7 +107,7 @@ class OTS_Guild extends OTS_Row_DAO implements IteratorAggregate, Countable
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 * @param IOTS_GuildAction $requests Membership requests driver (don't pass it to clear driver).
 | 
					 * @param IOTS_GuildAction $requests Membership requests driver (don't pass it to clear driver).
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
    public function setRequestsDriver(?IOTS_GuildAction $requests = null)
 | 
					    public function setRequestsDriver(IOTS_GuildAction $requests = null)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->requests = $requests;
 | 
					        $this->requests = $requests;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -60,7 +60,7 @@ class OTS_GuildRank extends OTS_Row_DAO implements IteratorAggregate, Countable
 | 
				
			|||||||
 * @throws PDOException On PDO operation error.
 | 
					 * @throws PDOException On PDO operation error.
 | 
				
			||||||
 * @throws E_OTS_NotLoaded If given <var>$guild</var> object is not loaded.
 | 
					 * @throws E_OTS_NotLoaded If given <var>$guild</var> object is not loaded.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
    public function find($name, ?OTS_Guild $guild = null)
 | 
					    public function find($name, OTS_Guild $guild = null)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $where = '';
 | 
					        $where = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,11 +15,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Wrapper for 'info' respond's DOMDocument.
 | 
					 * Wrapper for 'info' respond's DOMDocument.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * <p>
 | 
					 * <p>
 | 
				
			||||||
 * Note: as this class extends DOMDocument class and contains exacly respond XML tree you can work on it as on normal DOM tree.
 | 
					 * Note: as this class extends DOMDocument class and contains exacly respond XML tree you can work on it as on normal DOM tree.
 | 
				
			||||||
 * </p>
 | 
					 * </p>
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @package POT
 | 
					 * @package POT
 | 
				
			||||||
 * @version 0.1.0
 | 
					 * @version 0.1.0
 | 
				
			||||||
 * @property-read string $tspqVersion Root element version.
 | 
					 * @property-read string $tspqVersion Root element version.
 | 
				
			||||||
@@ -48,257 +48,252 @@ class OTS_InfoRespond extends DOMDocument
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns version of root element.
 | 
					 * Returns version of root element.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return string TSPQ version.
 | 
					 * @return string TSPQ version.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getTSPQVersion()
 | 
					    public function getTSPQVersion()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->documentElement->getAttribute('version');
 | 
					        return $this->documentElement->getAttribute('version');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server uptime.
 | 
					 * Returns server uptime.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return int Uptime.
 | 
					 * @return int Uptime.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getUptime()
 | 
					    public function getUptime()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return (int) $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('uptime');
 | 
					        return (int) $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('uptime');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server IP.
 | 
					 * Returns server IP.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return string IP.
 | 
					 * @return string IP.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getIP()
 | 
					    public function getIP()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('ip');
 | 
					        return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('ip');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server name.
 | 
					 * Returns server name.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return string Name.
 | 
					 * @return string Name.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getName()
 | 
					    public function getName()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('servername');
 | 
					        return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('servername');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server port.
 | 
					 * Returns server port.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return int Port.
 | 
					 * @return int Port.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getPort()
 | 
					    public function getPort()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return (int) $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('port');
 | 
					        return (int) $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('port');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server location.
 | 
					 * Returns server location.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return string Location.
 | 
					 * @return string Location.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getLocation()
 | 
					    public function getLocation()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('location');
 | 
					        return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('location');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server website.
 | 
					 * Returns server website.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return string Website URL.
 | 
					 * @return string Website URL.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getURL()
 | 
					    public function getURL()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('url');
 | 
					        return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('url');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server attribute.
 | 
					 * Returns server attribute.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * I have no idea what the hell is it representing :P.
 | 
					 * I have no idea what the hell is it representing :P.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return string Attribute value.
 | 
					 * @return string Attribute value.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getServer()
 | 
					    public function getServer()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('server');
 | 
					        return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('server');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server version.
 | 
					 * Returns server version.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return string Version.
 | 
					 * @return string Version.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getServerVersion()
 | 
					    public function getServerVersion()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('version');
 | 
					        return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('version');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns dedicated version of client.
 | 
					 * Returns dedicated version of client.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return string Version.
 | 
					 * @return string Version.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getClientVersion()
 | 
					    public function getClientVersion()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('client');
 | 
					        return $this->documentElement->getElementsByTagName('serverinfo')->item(0)->getAttribute('client');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns owner name.
 | 
					 * Returns owner name.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return string Owner name.
 | 
					 * @return string Owner name.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getOwner()
 | 
					    public function getOwner()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->documentElement->getElementsByTagName('owner')->item(0)->getAttribute('name');
 | 
					        return $this->documentElement->getElementsByTagName('owner')->item(0)->getAttribute('name');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns owner e-mail.
 | 
					 * Returns owner e-mail.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return string Owner e-mail.
 | 
					 * @return string Owner e-mail.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getEMail()
 | 
					    public function getEMail()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->documentElement->getElementsByTagName('owner')->item(0)->getAttribute('email');
 | 
					        return $this->documentElement->getElementsByTagName('owner')->item(0)->getAttribute('email');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns current amount of players online.
 | 
					 * Returns current amount of players online.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return int Count of players.
 | 
					 * @return int Count of players.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getOnlinePlayers()
 | 
					    public function getOnlinePlayers()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return (int) $this->documentElement->getElementsByTagName('players')->item(0)->getAttribute('online');
 | 
					        return (int) $this->documentElement->getElementsByTagName('players')->item(0)->getAttribute('online');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns maximum amount of players online.
 | 
					 * Returns maximum amount of players online.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return int Maximum allowed count of players.
 | 
					 * @return int Maximum allowed count of players.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getMaxPlayers()
 | 
					    public function getMaxPlayers()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return (int) $this->documentElement->getElementsByTagName('players')->item(0)->getAttribute('max');
 | 
					        return (int) $this->documentElement->getElementsByTagName('players')->item(0)->getAttribute('max');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns record of online players.
 | 
					 * Returns record of online players.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return int Players online record.
 | 
					 * @return int Players online record.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getPlayersPeak()
 | 
					    public function getPlayersPeak()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return (int) $this->documentElement->getElementsByTagName('players')->item(0)->getAttribute('peak');
 | 
					        return (int) $this->documentElement->getElementsByTagName('players')->item(0)->getAttribute('peak');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns number of all monsters on map.
 | 
					 * Returns number of all monsters on map.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return int Count of monsters.
 | 
					 * @return int Count of monsters.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getMonstersCount(): int
 | 
					    public function getMonstersCount()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return (int) $this->documentElement->getElementsByTagName('monsters')->item(0)->getAttribute('total');
 | 
					        return (int) $this->documentElement->getElementsByTagName('monsters')->item(0)->getAttribute('total');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
	public function getNPCsCount(): int
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		return (int) $this->documentElement->getElementsByTagName('npcs')->item(0)->getAttribute('total');
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns map name.
 | 
					 * Returns map name.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return string Map name.
 | 
					 * @return string Map name.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getMapName()
 | 
					    public function getMapName()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->documentElement->getElementsByTagName('map')->item(0)->getAttribute('name');
 | 
					        return $this->documentElement->getElementsByTagName('map')->item(0)->getAttribute('name');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns map author.
 | 
					 * Returns map author.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return string Mapper name.
 | 
					 * @return string Mapper name.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getMapAuthor()
 | 
					    public function getMapAuthor()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->documentElement->getElementsByTagName('map')->item(0)->getAttribute('author');
 | 
					        return $this->documentElement->getElementsByTagName('map')->item(0)->getAttribute('author');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns map width.
 | 
					 * Returns map width.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return int Map width.
 | 
					 * @return int Map width.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getMapWidth()
 | 
					    public function getMapWidth()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return (int) $this->documentElement->getElementsByTagName('map')->item(0)->getAttribute('width');
 | 
					        return (int) $this->documentElement->getElementsByTagName('map')->item(0)->getAttribute('width');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns map height.
 | 
					 * Returns map height.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @return int Map height.
 | 
					 * @return int Map height.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getMapHeight()
 | 
					    public function getMapHeight()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return (int) $this->documentElement->getElementsByTagName('map')->item(0)->getAttribute('height');
 | 
					        return (int) $this->documentElement->getElementsByTagName('map')->item(0)->getAttribute('height');
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server's Message Of The Day
 | 
					 * Returns server's Message Of The Day
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @version 0.1.0
 | 
					 * @version 0.1.0
 | 
				
			||||||
 * @return string Server MOTD.
 | 
					 * @return string Server MOTD.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getMOTD()
 | 
					    public function getMOTD()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		// look for text node child
 | 
					        // look for text node child
 | 
				
			||||||
		foreach( $this->documentElement->getElementsByTagName('motd')->item(0)->childNodes as $child)
 | 
					        foreach( $this->documentElement->getElementsByTagName('motd')->item(0)->childNodes as $child)
 | 
				
			||||||
		{
 | 
					        {
 | 
				
			||||||
			if($child->nodeType == XML_TEXT_NODE)
 | 
					            if($child->nodeType == XML_TEXT_NODE)
 | 
				
			||||||
			{
 | 
					            {
 | 
				
			||||||
				// found
 | 
					                // found
 | 
				
			||||||
				return $child->nodeValue;
 | 
					                return $child->nodeValue;
 | 
				
			||||||
			}
 | 
					            }
 | 
				
			||||||
		}
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// strange...
 | 
					        // strange...
 | 
				
			||||||
		return '';
 | 
					        return '';
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Magic PHP5 method.
 | 
					 * Magic PHP5 method.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @version 0.1.0
 | 
					 * @version 0.1.0
 | 
				
			||||||
 * @since 0.1.0
 | 
					 * @since 0.1.0
 | 
				
			||||||
 * @param string $name Property name.
 | 
					 * @param string $name Property name.
 | 
				
			||||||
@@ -306,89 +301,89 @@ class OTS_InfoRespond extends DOMDocument
 | 
				
			|||||||
 * @throws OutOfBoundsException For non-supported properties.
 | 
					 * @throws OutOfBoundsException For non-supported properties.
 | 
				
			||||||
 * @throws DOMException On DOM operation error.
 | 
					 * @throws DOMException On DOM operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function __get($name)
 | 
					    public function __get($name)
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		switch($name)
 | 
					        switch($name)
 | 
				
			||||||
		{
 | 
					        {
 | 
				
			||||||
			case 'tspqVersion':
 | 
					            case 'tspqVersion':
 | 
				
			||||||
				return $this->getTSPQVersion();
 | 
					                return $this->getTSPQVersion();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'uptime':
 | 
					            case 'uptime':
 | 
				
			||||||
				return $this->getUptime();
 | 
					                return $this->getUptime();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'ip':
 | 
					            case 'ip':
 | 
				
			||||||
				return $this->getIP();
 | 
					                return $this->getIP();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'name':
 | 
					            case 'name':
 | 
				
			||||||
				return $this->getName();
 | 
					                return $this->getName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'port':
 | 
					            case 'port':
 | 
				
			||||||
				return $this->getPort();
 | 
					                return $this->getPort();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'location':
 | 
					            case 'location':
 | 
				
			||||||
				return $this->getLocation();
 | 
					                return $this->getLocation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'url':
 | 
					            case 'url':
 | 
				
			||||||
				return $this->getURL();
 | 
					                return $this->getURL();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'server':
 | 
					            case 'server':
 | 
				
			||||||
				return $this->getServer();
 | 
					                return $this->getServer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'serverVersion':
 | 
					            case 'serverVersion':
 | 
				
			||||||
				return $this->getServerVersion();
 | 
					                return $this->getServerVersion();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'clientVersion':
 | 
					            case 'clientVersion':
 | 
				
			||||||
				return $this->getClientVersion();
 | 
					                return $this->getClientVersion();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'owner':
 | 
					            case 'owner':
 | 
				
			||||||
				return $this->getOwner();
 | 
					                return $this->getOwner();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'eMail':
 | 
					            case 'eMail':
 | 
				
			||||||
				return $this->getEMail();
 | 
					                return $this->getEMail();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'onlinePlayers':
 | 
					            case 'onlinePlayers':
 | 
				
			||||||
				return $this->getOnlinePlayers();
 | 
					                return $this->getOnlinePlayers();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'maxPlayers':
 | 
					            case 'maxPlayers':
 | 
				
			||||||
				return $this->getMaxPlayers();
 | 
					                return $this->getMaxPlayers();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'playersPeak':
 | 
					            case 'playersPeak':
 | 
				
			||||||
				return $this->getPlayersPeak();
 | 
					                return $this->getPlayersPeak();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'monstersCount':
 | 
					            case 'monstersCount':
 | 
				
			||||||
				return $this->getMonstersCount();
 | 
					                return $this->getMonstersCount();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'mapName':
 | 
					            case 'mapName':
 | 
				
			||||||
				return $this->getMapName();
 | 
					                return $this->getMapName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'mapAuthor':
 | 
					            case 'mapAuthor':
 | 
				
			||||||
				return $this->getMapAuthor();
 | 
					                return $this->getMapAuthor();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'mapWidth':
 | 
					            case 'mapWidth':
 | 
				
			||||||
				return $this->getMapWidth();
 | 
					                return $this->getMapWidth();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'mapHeight':
 | 
					            case 'mapHeight':
 | 
				
			||||||
				return $this->getMapHeight();
 | 
					                return $this->getMapHeight();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'motd':
 | 
					            case 'motd':
 | 
				
			||||||
				return $this->getMOTD();
 | 
					                return $this->getMOTD();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			default:
 | 
					            default:
 | 
				
			||||||
				throw new OutOfBoundsException();
 | 
					                throw new OutOfBoundsException();
 | 
				
			||||||
		}
 | 
					        }
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns string representation of XML.
 | 
					 * Returns string representation of XML.
 | 
				
			||||||
 *
 | 
					 * 
 | 
				
			||||||
 * @version 0.1.0
 | 
					 * @version 0.1.0
 | 
				
			||||||
 * @since 0.1.0
 | 
					 * @since 0.1.0
 | 
				
			||||||
 * @return string String representation of object.
 | 
					 * @return string String representation of object.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function __toString()
 | 
					    public function __toString()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->saveXML();
 | 
					        return $this->saveXML();
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**#@-*/
 | 
					/**#@-*/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -284,7 +284,7 @@ class OTS_Monster extends DOMDocument
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getLook()
 | 
						public function getLook()
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$look = [];
 | 
							$look = array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$element = $this->documentElement->getElementsByTagName('look')->item(0);
 | 
							$element = $this->documentElement->getElementsByTagName('look')->item(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -292,30 +292,14 @@ class OTS_Monster extends DOMDocument
 | 
				
			|||||||
			return $look;
 | 
								return $look;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ($element->hasAttribute('typeex')) {
 | 
							$look['type'] = $element->getAttribute('type');
 | 
				
			||||||
			$look['typeEx'] = (int) $element->getAttribute('typeex');
 | 
							$look['typeex'] = $element->getAttribute('typeex');
 | 
				
			||||||
		}
 | 
							$look['head'] = $element->getAttribute('head');
 | 
				
			||||||
		if ($element->hasAttribute('type')) {
 | 
							$look['body'] = $element->getAttribute('body');
 | 
				
			||||||
			$look['type'] = (int) $element->getAttribute('type');
 | 
							$look['legs'] = $element->getAttribute('legs');
 | 
				
			||||||
		}
 | 
							$look['feet'] = $element->getAttribute('feet');
 | 
				
			||||||
		if ($element->hasAttribute('head')) {
 | 
							$look['addons'] = $element->getAttribute('addons');
 | 
				
			||||||
			$look['head'] = (int) $element->getAttribute('head');
 | 
							$look['corpse'] = $element->getAttribute('corpse');
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if ($element->hasAttribute('body')) {
 | 
					 | 
				
			||||||
			$look['body'] = (int) $element->getAttribute('body');
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if ($element->hasAttribute('legs')) {
 | 
					 | 
				
			||||||
			$look['legs'] = (int) $element->getAttribute('legs');
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if ($element->hasAttribute('feet')) {
 | 
					 | 
				
			||||||
			$look['feet'] = (int) $element->getAttribute('feet');
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if ($element->hasAttribute('addons')) {
 | 
					 | 
				
			||||||
			$look['addons'] = (int) $element->getAttribute('addons');
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if ($element->hasAttribute('corpse')) {
 | 
					 | 
				
			||||||
			$look['corpse'] = (int) $element->getAttribute('corpse');
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return $look;
 | 
							return $look;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2026,7 +2026,7 @@ class OTS_Player extends OTS_Row_DAO
 | 
				
			|||||||
 * @param OTS_GuildRank|null Guild rank (null to clear assign).
 | 
					 * @param OTS_GuildRank|null Guild rank (null to clear assign).
 | 
				
			||||||
 * @throws E_OTS_NotLoaded If passed <var>$guildRank</var> parameter is not loaded.
 | 
					 * @throws E_OTS_NotLoaded If passed <var>$guildRank</var> parameter is not loaded.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function setRank(?OTS_GuildRank $guildRank = null)
 | 
						public function setRank(OTS_GuildRank $guildRank = null)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if(isset($guildRank))
 | 
							if(isset($guildRank))
 | 
				
			||||||
			$this->setRankId($guildRank->getId(), $guildRank->getGuild()->getId());
 | 
								$this->setRankId($guildRank->getId(), $guildRank->getGuild()->getId());
 | 
				
			||||||
@@ -2632,7 +2632,7 @@ class OTS_Player extends OTS_Row_DAO
 | 
				
			|||||||
 * @throws E_OTS_NotLoaded If player is not loaded.
 | 
					 * @throws E_OTS_NotLoaded If player is not loaded.
 | 
				
			||||||
 * @throws PDOException On PDO operation error.
 | 
					 * @throws PDOException On PDO operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function setSlot($slot, ?OTS_Item $item = null, $pid = 0)
 | 
						public function setSlot($slot, OTS_Item $item = null, $pid = 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		static $sid;
 | 
							static $sid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2776,7 +2776,7 @@ class OTS_Player extends OTS_Row_DAO
 | 
				
			|||||||
 * @throws E_OTS_NotLoaded If player is not loaded.
 | 
					 * @throws E_OTS_NotLoaded If player is not loaded.
 | 
				
			||||||
 * @throws PDOException On PDO operation error.
 | 
					 * @throws PDOException On PDO operation error.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function setDepot($depot, ?OTS_Item $item = null, $pid = 0, $depot_id = 0)
 | 
						public function setDepot($depot, OTS_Item $item = null, $pid = 0, $depot_id = 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		static $sid;
 | 
							static $sid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,19 +26,14 @@ class OTS_ServerInfo
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var string
 | 
					 * @var string
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private string $server;
 | 
					    private $server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Connection port.
 | 
					 * Connection port.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var int
 | 
					 * @var int
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private int $port;
 | 
					    private $port;
 | 
				
			||||||
 | 
					 | 
				
			||||||
	/**
 | 
					 | 
				
			||||||
	 * Status timeout
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	private float $timeout = 2.0;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Creates handler for new server.
 | 
					 * Creates handler for new server.
 | 
				
			||||||
@@ -46,11 +41,11 @@ class OTS_ServerInfo
 | 
				
			|||||||
 * @param string $server Server IP/domain.
 | 
					 * @param string $server Server IP/domain.
 | 
				
			||||||
 * @param int $port OTServ port.
 | 
					 * @param int $port OTServ port.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function __construct($server, $port)
 | 
					    public function __construct($server, $port)
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		$this->server = $server;
 | 
					        $this->server = $server;
 | 
				
			||||||
		$this->port = $port;
 | 
					        $this->port = $port;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Sends packet to server.
 | 
					 * Sends packet to server.
 | 
				
			||||||
@@ -59,46 +54,46 @@ class OTS_ServerInfo
 | 
				
			|||||||
 * @return OTS_Buffer|null Respond buffer (null if server is offline).
 | 
					 * @return OTS_Buffer|null Respond buffer (null if server is offline).
 | 
				
			||||||
 * @throws E_OTS_OutOfBuffer When there is read attemp after end of packet stream.
 | 
					 * @throws E_OTS_OutOfBuffer When there is read attemp after end of packet stream.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private function send(OTS_Buffer $packet)
 | 
					    private function send(OTS_Buffer $packet)
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		// connects to server
 | 
					        // connects to server
 | 
				
			||||||
		$socket = @fsockopen($this->server, $this->port, $error, $message, $this->timeout);
 | 
					        $socket = @fsockopen($this->server, $this->port, $error, $message, setting('core.status_timeout'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// if connected then checking statistics
 | 
					        // if connected then checking statistics
 | 
				
			||||||
		if($socket)
 | 
					        if($socket)
 | 
				
			||||||
		{
 | 
					        {
 | 
				
			||||||
			// sets 5 second timeout for reading and writing
 | 
					            // sets 5 second timeout for reading and writing
 | 
				
			||||||
			stream_set_timeout($socket, 5);
 | 
					            stream_set_timeout($socket, 5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// creates real packet
 | 
					            // creates real packet
 | 
				
			||||||
			$packet = $packet->getBuffer();
 | 
					            $packet = $packet->getBuffer();
 | 
				
			||||||
			$packet = pack('v', strlen($packet) ) . $packet;
 | 
					            $packet = pack('v', strlen($packet) ) . $packet;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// sends packet with request
 | 
					            // sends packet with request
 | 
				
			||||||
			// 06 - length of packet, 255, 255 is the comamnd identifier, 'info' is a request
 | 
					            // 06 - length of packet, 255, 255 is the comamnd identifier, 'info' is a request
 | 
				
			||||||
			fwrite($socket, $packet);
 | 
					            fwrite($socket, $packet);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// reads respond
 | 
					            // reads respond
 | 
				
			||||||
			//$data = stream_get_contents($socket);
 | 
					            //$data = stream_get_contents($socket);
 | 
				
			||||||
			$data = '';
 | 
								$data = '';
 | 
				
			||||||
			while (!feof($socket))
 | 
								while (!feof($socket))
 | 
				
			||||||
				$data .= fgets($socket, 1024);
 | 
									$data .= fgets($socket, 1024);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// closing connection to current server
 | 
					            // closing connection to current server
 | 
				
			||||||
			fclose($socket);
 | 
					            fclose($socket);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			// sometimes server returns empty info
 | 
					            // sometimes server returns empty info
 | 
				
			||||||
			if( empty($data) )
 | 
					            if( empty($data) )
 | 
				
			||||||
			{
 | 
					            {
 | 
				
			||||||
				// returns offline state
 | 
					                // returns offline state
 | 
				
			||||||
				return false;
 | 
					                return false;
 | 
				
			||||||
			}
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			return new OTS_Buffer($data);
 | 
					            return new OTS_Buffer($data);
 | 
				
			||||||
		}
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return false;
 | 
					        return false;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Queries server status.
 | 
					 * Queries server status.
 | 
				
			||||||
@@ -113,30 +108,30 @@ class OTS_ServerInfo
 | 
				
			|||||||
 * @example examples/info.php info.php
 | 
					 * @example examples/info.php info.php
 | 
				
			||||||
 * @tutorial POT/Server_status.pkg
 | 
					 * @tutorial POT/Server_status.pkg
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function status()
 | 
					    public function status()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		// request packet
 | 
					        // request packet
 | 
				
			||||||
		$request = new OTS_Buffer();
 | 
					        $request = new OTS_Buffer();
 | 
				
			||||||
		$request->putChar(255);
 | 
					        $request->putChar(255);
 | 
				
			||||||
		$request->putChar(255);
 | 
					        $request->putChar(255);
 | 
				
			||||||
		$request->putString('info', false);
 | 
					        $request->putString('info', false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$status = $this->send($request);
 | 
					        $status = $this->send($request);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// checks if server is online
 | 
					        // checks if server is online
 | 
				
			||||||
		if($status)
 | 
					        if($status)
 | 
				
			||||||
		{
 | 
					        {
 | 
				
			||||||
			// loads respond XML
 | 
					            // loads respond XML
 | 
				
			||||||
			$info = new OTS_InfoRespond();
 | 
					            $info = new OTS_InfoRespond();
 | 
				
			||||||
			if(!$info->loadXML( $status->getBuffer()))
 | 
					            if(!$info->loadXML( $status->getBuffer()))
 | 
				
			||||||
				return false;
 | 
									return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			return $info;
 | 
					            return $info;
 | 
				
			||||||
		}
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// offline
 | 
					        // offline
 | 
				
			||||||
		return false;
 | 
					        return false;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Queries server information.
 | 
					 * Queries server information.
 | 
				
			||||||
@@ -151,26 +146,26 @@ class OTS_ServerInfo
 | 
				
			|||||||
 * @example examples/server.php info.php
 | 
					 * @example examples/server.php info.php
 | 
				
			||||||
 * @tutorial POT/Server_status.pkg
 | 
					 * @tutorial POT/Server_status.pkg
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function info($flags)
 | 
					    public function info($flags)
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		// request packet
 | 
					        // request packet
 | 
				
			||||||
		$request = new OTS_Buffer();
 | 
					        $request = new OTS_Buffer();
 | 
				
			||||||
		$request->putChar(255);
 | 
					        $request->putChar(255);
 | 
				
			||||||
		$request->putChar(1);
 | 
					        $request->putChar(1);
 | 
				
			||||||
		$request->putShort($flags);
 | 
					        $request->putShort($flags);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$status = $this->send($request);
 | 
					        $status = $this->send($request);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// checks if server is online
 | 
					        // checks if server is online
 | 
				
			||||||
		if($status)
 | 
					        if($status)
 | 
				
			||||||
		{
 | 
					        {
 | 
				
			||||||
			// loads respond
 | 
					            // loads respond
 | 
				
			||||||
			return new OTS_ServerStatus($status);
 | 
					            return new OTS_ServerStatus($status);
 | 
				
			||||||
		}
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// offline
 | 
					        // offline
 | 
				
			||||||
		return false;
 | 
					        return false;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Checks player online status.
 | 
					 * Checks player online status.
 | 
				
			||||||
@@ -185,27 +180,27 @@ class OTS_ServerInfo
 | 
				
			|||||||
 * @example examples/server.php info.php
 | 
					 * @example examples/server.php info.php
 | 
				
			||||||
 * @tutorial POT/Server_status.pkg
 | 
					 * @tutorial POT/Server_status.pkg
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function playerStatus($name)
 | 
					    public function playerStatus($name)
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		// request packet
 | 
					        // request packet
 | 
				
			||||||
		$request = new OTS_Buffer();
 | 
					        $request = new OTS_Buffer();
 | 
				
			||||||
		$request->putChar(255);
 | 
					        $request->putChar(255);
 | 
				
			||||||
		$request->putChar(1);
 | 
					        $request->putChar(1);
 | 
				
			||||||
		$request->putShort(OTS_ServerStatus::REQUEST_PLAYER_STATUS_INFO);
 | 
					        $request->putShort(OTS_ServerStatus::REQUEST_PLAYER_STATUS_INFO);
 | 
				
			||||||
		$request->putString($name);
 | 
					        $request->putString($name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$status = $this->send($request);
 | 
					        $status = $this->send($request);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// checks if server is online
 | 
					        // checks if server is online
 | 
				
			||||||
		if($status)
 | 
					        if($status)
 | 
				
			||||||
		{
 | 
					        {
 | 
				
			||||||
			$status->getChar();
 | 
					            $status->getChar();
 | 
				
			||||||
			return (bool) $status->getChar();
 | 
					            return (bool) $status->getChar();
 | 
				
			||||||
		}
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// offline
 | 
					        // offline
 | 
				
			||||||
		return false;
 | 
					        return false;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Magic PHP5 method.
 | 
					 * Magic PHP5 method.
 | 
				
			||||||
@@ -215,24 +210,20 @@ class OTS_ServerInfo
 | 
				
			|||||||
 * @throws OutOfBoundsException For non-supported properties.
 | 
					 * @throws OutOfBoundsException For non-supported properties.
 | 
				
			||||||
 * @throws E_OTS_OutOfBuffer When there is read attemp after end of packet stream.
 | 
					 * @throws E_OTS_OutOfBuffer When there is read attemp after end of packet stream.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function __get($name)
 | 
					    public function __get($name)
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		switch($name)
 | 
					        switch($name)
 | 
				
			||||||
		{
 | 
					        {
 | 
				
			||||||
			case 'status':
 | 
					            case 'status':
 | 
				
			||||||
				return $this->status();
 | 
					                return $this->status();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'info':
 | 
					            case 'info':
 | 
				
			||||||
				return $this->info(OTS_ServerStatus::REQUEST_BASIC_SERVER_INFO | OTS_ServerStatus::REQUEST_OWNER_SERVER_INFO | OTS_ServerStatus::REQUEST_MISC_SERVER_INFO | OTS_ServerStatus::REQUEST_PLAYERS_INFO | OTS_ServerStatus::REQUEST_MAP_INFO | OTS_ServerStatus::REQUEST_PLAYER_STATUS_INFO);
 | 
					                return $this->info(OTS_ServerStatus::REQUEST_BASIC_SERVER_INFO | OTS_ServerStatus::REQUEST_OWNER_SERVER_INFO | OTS_ServerStatus::REQUEST_MISC_SERVER_INFO | OTS_ServerStatus::REQUEST_PLAYERS_INFO | OTS_ServerStatus::REQUEST_MAP_INFO | OTS_ServerStatus::REQUEST_PLAYER_STATUS_INFO);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			default:
 | 
					            default:
 | 
				
			||||||
				throw new OutOfBoundsException();
 | 
					                throw new OutOfBoundsException();
 | 
				
			||||||
		}
 | 
					        }
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
	public function setTimeout($timeout) {
 | 
					 | 
				
			||||||
		$this->timeout = $timeout;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**#@-*/
 | 
					/**#@-*/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,175 +40,175 @@ class OTS_ServerStatus
 | 
				
			|||||||
/**
 | 
					/**
 | 
				
			||||||
 * Basic server info.
 | 
					 * Basic server info.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const REQUEST_BASIC_SERVER_INFO = 1;
 | 
					    const REQUEST_BASIC_SERVER_INFO = 1;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Server owner info.
 | 
					 * Server owner info.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const REQUEST_OWNER_SERVER_INFO = 2;
 | 
					    const REQUEST_OWNER_SERVER_INFO = 2;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Server extra info.
 | 
					 * Server extra info.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const REQUEST_MISC_SERVER_INFO = 4;
 | 
					    const REQUEST_MISC_SERVER_INFO = 4;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Players stats info.
 | 
					 * Players stats info.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const REQUEST_PLAYERS_INFO = 8;
 | 
					    const REQUEST_PLAYERS_INFO = 8;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Map info.
 | 
					 * Map info.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const REQUEST_MAP_INFO = 16;
 | 
					    const REQUEST_MAP_INFO = 16;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Extended players info.
 | 
					 * Extended players info.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const REQUEST_EXT_PLAYERS_INFO = 32;
 | 
					    const REQUEST_EXT_PLAYERS_INFO = 32;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Player status info.
 | 
					 * Player status info.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const REQUEST_PLAYER_STATUS_INFO = 64;
 | 
					    const REQUEST_PLAYER_STATUS_INFO = 64;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Server software info.
 | 
					 * Server software info.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const REQUEST_SERVER_SOFTWARE_INFO = 128;
 | 
					    const REQUEST_SERVER_SOFTWARE_INFO = 128;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Basic server respond.
 | 
					 * Basic server respond.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const RESPOND_BASIC_SERVER_INFO = 0x10;
 | 
					    const RESPOND_BASIC_SERVER_INFO = 0x10;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Server owner respond.
 | 
					 * Server owner respond.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const RESPOND_OWNER_SERVER_INFO = 0x11;
 | 
					    const RESPOND_OWNER_SERVER_INFO = 0x11;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Server extra respond.
 | 
					 * Server extra respond.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const RESPOND_MISC_SERVER_INFO = 0x12;
 | 
					    const RESPOND_MISC_SERVER_INFO = 0x12;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Players stats respond.
 | 
					 * Players stats respond.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const RESPOND_PLAYERS_INFO = 0x20;
 | 
					    const RESPOND_PLAYERS_INFO = 0x20;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Map respond.
 | 
					 * Map respond.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const RESPOND_MAP_INFO = 0x30;
 | 
					    const RESPOND_MAP_INFO = 0x30;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Extended players info.
 | 
					 * Extended players info.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const RESPOND_EXT_PLAYERS_INFO = 0x21;
 | 
					    const RESPOND_EXT_PLAYERS_INFO = 0x21;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Player status info.
 | 
					 * Player status info.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const RESPOND_PLAYER_STATUS_INFO = 0x22;
 | 
					    const RESPOND_PLAYER_STATUS_INFO = 0x22;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Server software info.
 | 
					 * Server software info.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	const RESPOND_SERVER_SOFTWARE_INFO = 0x23;
 | 
					    const RESPOND_SERVER_SOFTWARE_INFO = 0x23;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Server name.
 | 
					 * Server name.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var string
 | 
					 * @var string
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $name;
 | 
					    private $name;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Server IP.
 | 
					 * Server IP.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var string
 | 
					 * @var string
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $ip;
 | 
					    private $ip;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Server port.
 | 
					 * Server port.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var string
 | 
					 * @var string
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $port;
 | 
					    private $port;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Owner name.
 | 
					 * Owner name.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var string
 | 
					 * @var string
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $owner;
 | 
					    private $owner;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Owner's e-mail.
 | 
					 * Owner's e-mail.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var string
 | 
					 * @var string
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $eMail;
 | 
					    private $eMail;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Message of the day.
 | 
					 * Message of the day.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var string
 | 
					 * @var string
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $motd;
 | 
					    private $motd;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Server location.
 | 
					 * Server location.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var string
 | 
					 * @var string
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $location;
 | 
					    private $location;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Website URL.
 | 
					 * Website URL.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var string
 | 
					 * @var string
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $url;
 | 
					    private $url;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Uptime.
 | 
					 * Uptime.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var int
 | 
					 * @var int
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $uptime;
 | 
					    private $uptime;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Status version.
 | 
					 * Status version.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var string
 | 
					 * @var string
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $version;
 | 
					    private $version;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Players online.
 | 
					 * Players online.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var int
 | 
					 * @var int
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $online;
 | 
					    private $online;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Maximum players.
 | 
					 * Maximum players.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var int
 | 
					 * @var int
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $max;
 | 
					    private $max;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Players peak.
 | 
					 * Players peak.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var int
 | 
					 * @var int
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $peak;
 | 
					    private $peak;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Map name.
 | 
					 * Map name.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var string
 | 
					 * @var string
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $map;
 | 
					    private $map;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Map author.
 | 
					 * Map author.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var string
 | 
					 * @var string
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $author;
 | 
					    private $author;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Map width.
 | 
					 * Map width.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var int
 | 
					 * @var int
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $width;
 | 
					    private $width;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Map height.
 | 
					 * Map height.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var int
 | 
					 * @var int
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $height;
 | 
					    private $height;
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Players online list.
 | 
					 * Players online list.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @var array
 | 
					 * @var array
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	private $players = array();
 | 
					    private $players = array();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Server software.
 | 
					 * Server software.
 | 
				
			||||||
@@ -224,277 +224,277 @@ class OTS_ServerStatus
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 * @param OTS_Buffer $info Information packet.
 | 
					 * @param OTS_Buffer $info Information packet.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function __construct(OTS_Buffer $info)
 | 
					    public function __construct(OTS_Buffer $info)
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		// skips packet length
 | 
					        // skips packet length
 | 
				
			||||||
		$info->getShort();
 | 
					        $info->getShort();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		while( $info->isValid() )
 | 
					        while( $info->isValid() )
 | 
				
			||||||
		{
 | 
					        {
 | 
				
			||||||
			switch( $info->getChar() )
 | 
					            switch( $info->getChar() )
 | 
				
			||||||
			{
 | 
					            {
 | 
				
			||||||
				case self::RESPOND_BASIC_SERVER_INFO:
 | 
					                case self::RESPOND_BASIC_SERVER_INFO:
 | 
				
			||||||
					$this->name = $info->getString();
 | 
					                    $this->name = $info->getString();
 | 
				
			||||||
					$this->ip = $info->getString();
 | 
					                    $this->ip = $info->getString();
 | 
				
			||||||
					$this->port = (int) $info->getString();
 | 
					                    $this->port = (int) $info->getString();
 | 
				
			||||||
					break;
 | 
					                    break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				case self::RESPOND_OWNER_SERVER_INFO:
 | 
					                case self::RESPOND_OWNER_SERVER_INFO:
 | 
				
			||||||
					$this->owner = $info->getString();
 | 
					                    $this->owner = $info->getString();
 | 
				
			||||||
					$this->eMail = $info->getString();
 | 
					                    $this->eMail = $info->getString();
 | 
				
			||||||
					break;
 | 
					                    break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				case self::RESPOND_MISC_SERVER_INFO:
 | 
					                case self::RESPOND_MISC_SERVER_INFO:
 | 
				
			||||||
					$this->motd = $info->getString();
 | 
					                    $this->motd = $info->getString();
 | 
				
			||||||
					$this->location = $info->getString();
 | 
					                    $this->location = $info->getString();
 | 
				
			||||||
					$this->url = $info->getString();
 | 
					                    $this->url = $info->getString();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					$uptime = $info->getLong() << 32;
 | 
					                    $uptime = $info->getLong() << 32;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					$this->uptime += $info->getLong() + $uptime;
 | 
					                    $this->uptime += $info->getLong() + $uptime;
 | 
				
			||||||
					$this->version = $info->getString();
 | 
					                    $this->version = $info->getString();
 | 
				
			||||||
					break;
 | 
					                    break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				case self::RESPOND_PLAYERS_INFO:
 | 
					                case self::RESPOND_PLAYERS_INFO:
 | 
				
			||||||
					$this->online = $info->getLong();
 | 
					                    $this->online = $info->getLong();
 | 
				
			||||||
					$this->max = $info->getLong();
 | 
					                    $this->max = $info->getLong();
 | 
				
			||||||
					$this->peak = $info->getLong();
 | 
					                    $this->peak = $info->getLong();
 | 
				
			||||||
					break;
 | 
					                    break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				case self::RESPOND_MAP_INFO:
 | 
					                case self::RESPOND_MAP_INFO:
 | 
				
			||||||
					$this->map = $info->getString();
 | 
					                    $this->map = $info->getString();
 | 
				
			||||||
					$this->author = $info->getString();
 | 
					                    $this->author = $info->getString();
 | 
				
			||||||
					$this->width = $info->getShort();
 | 
					                    $this->width = $info->getShort();
 | 
				
			||||||
					$this->height = $info->getShort();
 | 
					                    $this->height = $info->getShort();
 | 
				
			||||||
					break;
 | 
					                    break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				case self::RESPOND_EXT_PLAYERS_INFO:
 | 
					                case self::RESPOND_EXT_PLAYERS_INFO:
 | 
				
			||||||
					$count = $info->getLong();
 | 
					                    $count = $info->getLong();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					for($i = 0; $i < $count; $i++)
 | 
					                    for($i = 0; $i < $count; $i++)
 | 
				
			||||||
					{
 | 
					                    {
 | 
				
			||||||
						$name = $info->getString();
 | 
					                        $name = $info->getString();
 | 
				
			||||||
						$this->players[$name] = $info->getLong();
 | 
					                        $this->players[$name] = $info->getLong();
 | 
				
			||||||
					}
 | 
					                    }
 | 
				
			||||||
					break;
 | 
					                    break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				case self::RESPOND_SERVER_SOFTWARE_INFO:
 | 
									case self::RESPOND_SERVER_SOFTWARE_INFO:
 | 
				
			||||||
					$this->softwareName = $info->getString();
 | 
										$this->softwareName = $info->getString();
 | 
				
			||||||
					$this->softwareVersion = $info->getString();
 | 
										$this->softwareVersion = $info->getString();
 | 
				
			||||||
					$this->softwareProtocol = $info->getString();
 | 
										$this->softwareProtocol = $info->getString();
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
			}
 | 
					            }
 | 
				
			||||||
		}
 | 
					        }
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server uptime.
 | 
					 * Returns server uptime.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return int Uptime.
 | 
					 * @return int Uptime.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getUptime()
 | 
					    public function getUptime()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->uptime;
 | 
					        return $this->uptime;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server IP.
 | 
					 * Returns server IP.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return string IP.
 | 
					 * @return string IP.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getIP()
 | 
					    public function getIP()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->ip;
 | 
					        return $this->ip;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server name.
 | 
					 * Returns server name.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return string Name.
 | 
					 * @return string Name.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getName()
 | 
					    public function getName()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->name;
 | 
					        return $this->name;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server port.
 | 
					 * Returns server port.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return int Port.
 | 
					 * @return int Port.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getPort()
 | 
					    public function getPort()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->port;
 | 
					        return $this->port;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server location.
 | 
					 * Returns server location.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return string Location.
 | 
					 * @return string Location.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getLocation()
 | 
					    public function getLocation()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->location;
 | 
					        return $this->location;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server website.
 | 
					 * Returns server website.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return string Website URL.
 | 
					 * @return string Website URL.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getURL()
 | 
					    public function getURL()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->url;
 | 
					        return $this->url;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server version.
 | 
					 * Returns server version.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return string Version.
 | 
					 * @return string Version.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getServerVersion()
 | 
					    public function getServerVersion()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->version;
 | 
					        return $this->version;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns owner name.
 | 
					 * Returns owner name.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return string Owner name.
 | 
					 * @return string Owner name.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getOwner()
 | 
					    public function getOwner()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->owner;
 | 
					        return $this->owner;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns owner e-mail.
 | 
					 * Returns owner e-mail.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return string Owner e-mail.
 | 
					 * @return string Owner e-mail.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getEMail()
 | 
					    public function getEMail()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->eMail;
 | 
					        return $this->eMail;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns current amount of players online.
 | 
					 * Returns current amount of players online.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return int Count of players.
 | 
					 * @return int Count of players.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getOnlinePlayers()
 | 
					    public function getOnlinePlayers()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->online;
 | 
					        return $this->online;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns maximum amount of players online.
 | 
					 * Returns maximum amount of players online.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return int Maximum allowed count of players.
 | 
					 * @return int Maximum allowed count of players.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getMaxPlayers()
 | 
					    public function getMaxPlayers()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->max;
 | 
					        return $this->max;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns record of online players.
 | 
					 * Returns record of online players.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return int Players online record.
 | 
					 * @return int Players online record.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getPlayersPeak()
 | 
					    public function getPlayersPeak()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->peak;
 | 
					        return $this->peak;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns map name.
 | 
					 * Returns map name.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return string Map name.
 | 
					 * @return string Map name.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getMapName()
 | 
					    public function getMapName()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->map;
 | 
					        return $this->map;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns map author.
 | 
					 * Returns map author.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return string Mapper name.
 | 
					 * @return string Mapper name.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getMapAuthor()
 | 
					    public function getMapAuthor()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->author;
 | 
					        return $this->author;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns map width.
 | 
					 * Returns map width.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return int Map width.
 | 
					 * @return int Map width.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getMapWidth()
 | 
					    public function getMapWidth()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->width;
 | 
					        return $this->width;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns map height.
 | 
					 * Returns map height.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return int Map height.
 | 
					 * @return int Map height.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getMapHeight()
 | 
					    public function getMapHeight()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->height;
 | 
					        return $this->height;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns server's Message Of The Day
 | 
					 * Returns server's Message Of The Day
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return string Server MOTD.
 | 
					 * @return string Server MOTD.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getMOTD()
 | 
					    public function getMOTD()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->motd;
 | 
					        return $this->motd;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns list of players currently online.
 | 
					 * Returns list of players currently online.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return array List of players in format 'name' => level.
 | 
					 * @return array List of players in format 'name' => level.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getPlayers()
 | 
					    public function getPlayers()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns software name.
 | 
					 * Returns software name.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return string Software name.
 | 
					 * @return string Software name.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getSoftwareName()
 | 
					    public function getSoftwareName()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->softwareName;
 | 
					        return $this->softwareName;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns software version.
 | 
					 * Returns software version.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return string Software version.
 | 
					 * @return string Software version.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getSoftwareVersion()
 | 
					    public function getSoftwareVersion()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->softwareVersion;
 | 
					        return $this->softwareVersion;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Returns software protocol.
 | 
					 * Returns software protocol.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @return string Software protocol.
 | 
					 * @return string Software protocol.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function getSoftwareProtocol()
 | 
					    public function getSoftwareProtocol()
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		return $this->softwareProtocol;
 | 
					        return $this->softwareProtocol;
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Magic PHP5 method.
 | 
					 * Magic PHP5 method.
 | 
				
			||||||
@@ -503,68 +503,68 @@ class OTS_ServerStatus
 | 
				
			|||||||
 * @return mixed Property value.
 | 
					 * @return mixed Property value.
 | 
				
			||||||
 * @throws OutOfBoundsException For non-supported properties.
 | 
					 * @throws OutOfBoundsException For non-supported properties.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
	public function __get($name)
 | 
					    public function __get($name)
 | 
				
			||||||
	{
 | 
					    {
 | 
				
			||||||
		switch($name)
 | 
					        switch($name)
 | 
				
			||||||
		{
 | 
					        {
 | 
				
			||||||
			case 'uptime':
 | 
					            case 'uptime':
 | 
				
			||||||
				return $this->getUptime();
 | 
					                return $this->getUptime();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'ip':
 | 
					            case 'ip':
 | 
				
			||||||
				return $this->getIP();
 | 
					                return $this->getIP();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'name':
 | 
					            case 'name':
 | 
				
			||||||
				return $this->getName();
 | 
					                return $this->getName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'port':
 | 
					            case 'port':
 | 
				
			||||||
				return $this->getPort();
 | 
					                return $this->getPort();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'location':
 | 
					            case 'location':
 | 
				
			||||||
				return $this->getLocation();
 | 
					                return $this->getLocation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'url':
 | 
					            case 'url':
 | 
				
			||||||
				return $this->getURL();
 | 
					                return $this->getURL();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'serverVersion':
 | 
					            case 'serverVersion':
 | 
				
			||||||
				return $this->getServerVersion();
 | 
					                return $this->getServerVersion();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'owner':
 | 
					            case 'owner':
 | 
				
			||||||
				return $this->getOwner();
 | 
					                return $this->getOwner();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'eMail':
 | 
					            case 'eMail':
 | 
				
			||||||
				return $this->getEMail();
 | 
					                return $this->getEMail();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'onlinePlayers':
 | 
					            case 'onlinePlayers':
 | 
				
			||||||
				return $this->getOnlinePlayers();
 | 
					                return $this->getOnlinePlayers();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'maxPlayers':
 | 
					            case 'maxPlayers':
 | 
				
			||||||
				return $this->getMaxPlayers();
 | 
					                return $this->getMaxPlayers();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'playersPeak':
 | 
					            case 'playersPeak':
 | 
				
			||||||
				return $this->getPlayersPeak();
 | 
					                return $this->getPlayersPeak();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'mapName':
 | 
					            case 'mapName':
 | 
				
			||||||
				return $this->getMapName();
 | 
					                return $this->getMapName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'mapAuthor':
 | 
					            case 'mapAuthor':
 | 
				
			||||||
				return $this->getMapAuthor();
 | 
					                return $this->getMapAuthor();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'mapWidth':
 | 
					            case 'mapWidth':
 | 
				
			||||||
				return $this->getMapWidth();
 | 
					                return $this->getMapWidth();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'mapHeight':
 | 
					            case 'mapHeight':
 | 
				
			||||||
				return $this->getMapHeight();
 | 
					                return $this->getMapHeight();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'motd':
 | 
					            case 'motd':
 | 
				
			||||||
				return $this->getMOTD();
 | 
					                return $this->getMOTD();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			case 'players':
 | 
					            case 'players':
 | 
				
			||||||
				return $this->getPlayers();
 | 
					                return $this->getPlayers();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			default:
 | 
					            default:
 | 
				
			||||||
				throw new OutOfBoundsException();
 | 
					                throw new OutOfBoundsException();
 | 
				
			||||||
		}
 | 
					        }
 | 
				
			||||||
	}
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**#@-*/
 | 
					/**#@-*/
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,8 +48,6 @@ $locale['step_config'] = 'Konfiguration';
 | 
				
			|||||||
$locale['step_config_title'] = 'Grundkonfiguration';
 | 
					$locale['step_config_title'] = 'Grundkonfiguration';
 | 
				
			||||||
$locale['step_config_server_path'] = 'Serverpfad';
 | 
					$locale['step_config_server_path'] = 'Serverpfad';
 | 
				
			||||||
$locale['step_config_server_path_desc'] = 'Pfad zu Ihrem TFS-Hauptverzeichnis, in dem sich die config.lua befinden.';
 | 
					$locale['step_config_server_path_desc'] = 'Pfad zu Ihrem TFS-Hauptverzeichnis, in dem sich die config.lua befinden.';
 | 
				
			||||||
$locale['step_config_site_url'] = 'Website URL';
 | 
					 | 
				
			||||||
$locale['step_config_site_url_desc'] = 'Ihre Website-Adresse.';
 | 
					 | 
				
			||||||
$locale['step_config_mail_admin'] = 'Admin E-Mail';
 | 
					$locale['step_config_mail_admin'] = 'Admin E-Mail';
 | 
				
			||||||
$locale['step_config_mail_admin_desc'] = 'Adresse, an die E-Mails aus dem Kontaktformular gesendet werden, z. B. admin@gmail.com';
 | 
					$locale['step_config_mail_admin_desc'] = 'Adresse, an die E-Mails aus dem Kontaktformular gesendet werden, z. B. admin@gmail.com';
 | 
				
			||||||
$locale['step_config_mail_admin_error'] = 'Admin E-Mail ist nicht korrekt.';
 | 
					$locale['step_config_mail_admin_error'] = 'Admin E-Mail ist nicht korrekt.';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,8 +52,6 @@ $locale['step_config'] = 'Configuration';
 | 
				
			|||||||
$locale['step_config_title'] = 'Basic configuration';
 | 
					$locale['step_config_title'] = 'Basic configuration';
 | 
				
			||||||
$locale['step_config_server_path'] = 'Server path';
 | 
					$locale['step_config_server_path'] = 'Server path';
 | 
				
			||||||
$locale['step_config_server_path_desc'] = 'Path to your TFS main directory, where you have config.lua located.';
 | 
					$locale['step_config_server_path_desc'] = 'Path to your TFS main directory, where you have config.lua located.';
 | 
				
			||||||
$locale['step_config_site_url'] = 'Website URL';
 | 
					 | 
				
			||||||
$locale['step_config_site_url_desc'] = 'Your website address.';
 | 
					 | 
				
			||||||
$locale['step_config_mail_admin'] = 'Admin Email';
 | 
					$locale['step_config_mail_admin'] = 'Admin Email';
 | 
				
			||||||
$locale['step_config_mail_admin_desc'] = 'Address where emails from contact form will be delivered, for example admin@gmail.com';
 | 
					$locale['step_config_mail_admin_desc'] = 'Address where emails from contact form will be delivered, for example admin@gmail.com';
 | 
				
			||||||
$locale['step_config_mail_admin_error'] = 'Admin Email is not correct.';
 | 
					$locale['step_config_mail_admin_error'] = 'Admin Email is not correct.';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,8 +52,6 @@ $locale['step_config'] = 'Konfiguracja';
 | 
				
			|||||||
$locale['step_config_title'] = 'Podstawowa konfiguracja';
 | 
					$locale['step_config_title'] = 'Podstawowa konfiguracja';
 | 
				
			||||||
$locale['step_config_server_path'] = 'Ścieżka do serwera';
 | 
					$locale['step_config_server_path'] = 'Ścieżka do serwera';
 | 
				
			||||||
$locale['step_config_server_path_desc'] = 'Ścieżka do Twojego folderu z TFS, gdzie znajduje się plik config.lua.';
 | 
					$locale['step_config_server_path_desc'] = 'Ścieżka do Twojego folderu z TFS, gdzie znajduje się plik config.lua.';
 | 
				
			||||||
$locale['step_config_server_url'] = 'Adres strony';
 | 
					 | 
				
			||||||
$locale['step_config_server_url_desc'] = 'Adres tej strony www.';
 | 
					 | 
				
			||||||
$locale['step_config_mail_admin'] = 'E-Mail admina';
 | 
					$locale['step_config_mail_admin'] = 'E-Mail admina';
 | 
				
			||||||
$locale['step_config_mail_admin_desc'] = 'Na ten adres będą dostarczane E-Maile z formularza kontaktowego, przykładowo admin@gmail.com';
 | 
					$locale['step_config_mail_admin_desc'] = 'Na ten adres będą dostarczane E-Maile z formularza kontaktowego, przykładowo admin@gmail.com';
 | 
				
			||||||
$locale['step_config_mail_admin_error'] = 'E-Mail admina jest niepoprawny.';
 | 
					$locale['step_config_mail_admin_error'] = 'E-Mail admina jest niepoprawny.';
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,13 +10,8 @@ $up = function () use ($db) {
 | 
				
			|||||||
		$db->exec(file_get_contents(__DIR__ . '/17-menu.sql'));
 | 
							$db->exec(file_get_contents(__DIR__ . '/17-menu.sql'));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$themes = ['kathrine', 'tibiacom',];
 | 
						Plugins::installMenus('kathrine', require TEMPLATES . 'kathrine/menus.php');
 | 
				
			||||||
	foreach ($themes as $theme) {
 | 
						Plugins::installMenus('tibiacom', require TEMPLATES . 'tibiacom/menus.php');
 | 
				
			||||||
		$file = TEMPLATES . $theme . '/menus.php';
 | 
					 | 
				
			||||||
		if (is_file($file)) {
 | 
					 | 
				
			||||||
			Plugins::installMenus($theme, require $file);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$down = function () use ($db) {
 | 
					$down = function () use ($db) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,20 +1,27 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @var OTS_DB_MySQL $db
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 2025-05-14
 | 
					// 2025-02-27
 | 
				
			||||||
// update pages links
 | 
					// remove ipv6, change to ip (for both ipv4 + ipv6) as VARCHAR(45)
 | 
				
			||||||
// server-info conflicts with apache2 mod
 | 
					$up = function () use ($db) {
 | 
				
			||||||
// Changelog conflicts with changelog files
 | 
						$db->query("ALTER TABLE `myaac_account_actions` DROP KEY `account_id`;");
 | 
				
			||||||
 | 
						$db->query("ALTER TABLE  `myaac_account_actions` ADD COLUMN `id` INT(11) NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (`id`);");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use MyAAC\Models\Menu;
 | 
						$db->modifyColumn(TABLE_PREFIX . 'account_actions', 'ip', "VARCHAR(45) NOT NULL DEFAULT ''");
 | 
				
			||||||
use MyAAC\Models\Pages;
 | 
						$db->query("UPDATE `" . TABLE_PREFIX . "account_actions` SET `ip` = INET_NTOA(`ip`) WHERE `ip` != '0';");
 | 
				
			||||||
 | 
						$db->query("UPDATE `" . TABLE_PREFIX . "account_actions` SET `ip` = INET6_NTOA(`ipv6`) WHERE `ip` = '0';");
 | 
				
			||||||
$up = function() {
 | 
						$db->dropColumn(TABLE_PREFIX . 'account_actions', 'ipv6');
 | 
				
			||||||
	Menu::where('link', 'server-info')->update(['link' => 'ots-info']);
 | 
					 | 
				
			||||||
	Menu::where('link', 'changelog')->update(['link' => 'change-log']);
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$down = function() {
 | 
					$down = function () use ($db) {
 | 
				
			||||||
	Menu::where('link', 'ots-info')->update(['link' => 'server-info']);
 | 
						$db->query("ALTER TABLE `" . TABLE_PREFIX . "account_actions` DROP `id`;");
 | 
				
			||||||
	Menu::where('link', 'change-log')->update(['link' => 'changelog']);
 | 
						$db->query("ALTER TABLE  `" . TABLE_PREFIX . "account_actions` ADD KEY (`account_id`);");
 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$db->addColumn(TABLE_PREFIX . 'account_actions', 'ipv6', "BINARY(16) NOT NULL DEFAULT 0x00000000000000000000000000000000 AFTER ip");
 | 
				
			||||||
 | 
						$db->query("UPDATE `" . TABLE_PREFIX . "account_actions` SET `ipv6` = INET6_ATON(ip) WHERE NOT IS_IPV4(`ip`);");
 | 
				
			||||||
 | 
						$db->query("UPDATE `" . TABLE_PREFIX . "account_actions` SET `ip` = INET_ATON(`ip`) WHERE IS_IPV4(`ip`);");
 | 
				
			||||||
 | 
						$db->query("UPDATE `" . TABLE_PREFIX . "account_actions` SET `ip` = 0 WHERE `ipv6` != 0x00000000000000000000000000000000;");
 | 
				
			||||||
 | 
						$db->modifyColumn(TABLE_PREFIX . 'account_actions', 'ip', "INT(11) UNSIGNED NOT NULL DEFAULT 0;");
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,32 +0,0 @@
 | 
				
			|||||||
<?php
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 2025-05-14
 | 
					 | 
				
			||||||
// update pages links
 | 
					 | 
				
			||||||
// server-info conflicts with apache2 mod
 | 
					 | 
				
			||||||
// Changelog conflicts with changelog files
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use MyAAC\Models\Pages;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$up = function() {
 | 
					 | 
				
			||||||
	Pages::where('name', 'rules_on_the_page')->update(['hide' => 1]);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	$rules = Pages::where('name', 'rules')->first();
 | 
					 | 
				
			||||||
	if (!$rules) {
 | 
					 | 
				
			||||||
		Pages::create([
 | 
					 | 
				
			||||||
			'name' => 'rules',
 | 
					 | 
				
			||||||
			'title' => 'Server Rules',
 | 
					 | 
				
			||||||
			'body' => '<b>{{ config.lua.serverName }} Rules</b><br/>' . nl2br(file_get_contents(__DIR__ . '/30-rules.txt')),
 | 
					 | 
				
			||||||
			'date' => time(),
 | 
					 | 
				
			||||||
			'player_id' => 1,
 | 
					 | 
				
			||||||
			'php' => 0,
 | 
					 | 
				
			||||||
			'enable_tinymce' => 1,
 | 
					 | 
				
			||||||
			'access' => 0,
 | 
					 | 
				
			||||||
			'hide' => 0,
 | 
					 | 
				
			||||||
		]);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$down = function() {
 | 
					 | 
				
			||||||
	Pages::where('name', 'rules_on_the_page')->update(['hide' => 0]);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -17,8 +17,6 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$email_new_time = $account_logged->getCustomField("email_new_time");
 | 
					$email_new_time = $account_logged->getCustomField("email_new_time");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if($email_new_time > 10) {
 | 
					if($email_new_time > 10) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,8 +20,6 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if(setting('core.account_country'))
 | 
					if(setting('core.account_country'))
 | 
				
			||||||
	require SYSTEM . 'countries.conf.php';
 | 
						require SYSTEM . 'countries.conf.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,8 +17,6 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$new_password = $_POST['newpassword'] ?? NULL;
 | 
					$new_password = $_POST['newpassword'] ?? NULL;
 | 
				
			||||||
$new_password_confirm = $_POST['newpassword_confirm'] ?? NULL;
 | 
					$new_password_confirm = $_POST['newpassword_confirm'] ?? NULL;
 | 
				
			||||||
$old_password = $_POST['oldpassword'] ?? NULL;
 | 
					$old_password = $_POST['oldpassword'] ?? NULL;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,8 +20,6 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$player = null;
 | 
					$player = null;
 | 
				
			||||||
$player_name = isset($_REQUEST['name']) ? stripslashes(urldecode($_REQUEST['name'])) : null;
 | 
					$player_name = isset($_REQUEST['name']) ? stripslashes(urldecode($_REQUEST['name'])) : null;
 | 
				
			||||||
$new_comment = isset($_POST['comment']) ? htmlspecialchars(stripslashes(substr($_POST['comment'],0,2000))) : NULL;
 | 
					$new_comment = isset($_POST['comment']) ? htmlspecialchars(stripslashes(substr($_POST['comment'],0,2000))) : NULL;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,8 +17,6 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$player_id = isset($_POST['player_id']) ? (int)$_POST['player_id'] : NULL;
 | 
					$player_id = isset($_POST['player_id']) ? (int)$_POST['player_id'] : NULL;
 | 
				
			||||||
$name = isset($_POST['name']) ? stripslashes(ucwords(strtolower($_POST['name']))) : NULL;
 | 
					$name = isset($_POST['name']) ? stripslashes(ucwords(strtolower($_POST['name']))) : NULL;
 | 
				
			||||||
if((!setting('core.account_change_character_name')))
 | 
					if((!setting('core.account_change_character_name')))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,8 +17,6 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$sex_changed = false;
 | 
					$sex_changed = false;
 | 
				
			||||||
$player_id = isset($_POST['player_id']) ? (int)$_POST['player_id'] : NULL;
 | 
					$player_id = isset($_POST['player_id']) ? (int)$_POST['player_id'] : NULL;
 | 
				
			||||||
$new_sex = isset($_POST['new_sex']) ? (int)$_POST['new_sex'] : NULL;
 | 
					$new_sex = isset($_POST['new_sex']) ? (int)$_POST['new_sex'] : NULL;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,8 +20,6 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$character_name = isset($_POST['name']) ? stripslashes($_POST['name']) : null;
 | 
					$character_name = isset($_POST['name']) ? stripslashes($_POST['name']) : null;
 | 
				
			||||||
$character_sex = isset($_POST['sex']) ? (int)$_POST['sex'] : null;
 | 
					$character_sex = isset($_POST['sex']) ? (int)$_POST['sex'] : null;
 | 
				
			||||||
$character_vocation = isset($_POST['vocation']) ? (int)$_POST['vocation'] : null;
 | 
					$character_vocation = isset($_POST['vocation']) ? (int)$_POST['vocation'] : null;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,8 +17,6 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$player_name = isset($_POST['delete_name']) ? stripslashes($_POST['delete_name']) : null;
 | 
					$player_name = isset($_POST['delete_name']) ? stripslashes($_POST['delete_name']) : null;
 | 
				
			||||||
$password_verify = isset($_POST['delete_password']) ? $_POST['delete_password'] : null;
 | 
					$password_verify = isset($_POST['delete_password']) ? $_POST['delete_password'] : null;
 | 
				
			||||||
$password_verify = encrypt((USE_ACCOUNT_SALT ? $account_logged->getCustomField('salt') : '') . $password_verify);
 | 
					$password_verify = encrypt((USE_ACCOUNT_SALT ? $account_logged->getCustomField('salt') : '') . $password_verify);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,8 +23,6 @@ if($logged)
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if(setting('core.account_create_character_create')) {
 | 
					if(setting('core.account_create_character_create')) {
 | 
				
			||||||
	$createCharacter = new CreateCharacter();
 | 
						$createCharacter = new CreateCharacter();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -221,14 +219,8 @@ if($save)
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$accountDefaultPremiumPoints = setting('core.account_premium_points');
 | 
							if(setting('core.account_premium_points') && setting('core.account_premium_points') > 0) {
 | 
				
			||||||
		if($accountDefaultPremiumPoints > 0) {
 | 
								$new_account->setCustomField('premium_points', setting('core.account_premium_points'));
 | 
				
			||||||
			$new_account->setCustomField('premium_points', $accountDefaultPremiumPoints);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		$accountDefaultCoins = setting('core.account_coins');
 | 
					 | 
				
			||||||
		if($db->hasColumn('accounts', 'coins') && $accountDefaultCoins > 0) {
 | 
					 | 
				
			||||||
			$new_account->setCustomField('coins', $accountDefaultCoins);
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$tmp_account = $email;
 | 
							$tmp_account = $email;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,8 +18,6 @@ if($logged || !isset($_POST['account_login']) || !isset($_POST['password_login']
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$login_account = $_POST['account_login'];
 | 
					$login_account = $_POST['account_login'];
 | 
				
			||||||
$login_password = $_POST['password_login'];
 | 
					$login_password = $_POST['password_login'];
 | 
				
			||||||
$remember_me = isset($_POST['remember_me']);
 | 
					$remember_me = isset($_POST['remember_me']);
 | 
				
			||||||
@@ -97,8 +95,3 @@ else {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$hooks->trigger(HOOK_ACCOUNT_LOGIN_POST);
 | 
					$hooks->trigger(HOOK_ACCOUNT_LOGIN_POST);
 | 
				
			||||||
 | 
					 | 
				
			||||||
if($logged) {
 | 
					 | 
				
			||||||
	$twig->addGlobal('logged', true);
 | 
					 | 
				
			||||||
	$twig->addGlobal('account_logged', $account_logged);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,8 +34,6 @@ if(isset($_REQUEST['redirect']))
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$groups = new OTS_Groups_List();
 | 
					$groups = new OTS_Groups_List();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$freePremium = isset($config['lua']['freePremium']) && getBoolean($config['lua']['freePremium']) || $account_logged->getPremDays() == OTS_Account::GRATIS_PREMIUM_DAYS;
 | 
					$freePremium = isset($config['lua']['freePremium']) && getBoolean($config['lua']['freePremium']) || $account_logged->getPremDays() == OTS_Account::GRATIS_PREMIUM_DAYS;
 | 
				
			||||||
@@ -87,12 +85,8 @@ if($email_new_time > 1)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$actions = array();
 | 
					$actions = $account_logged->getActionsLog(1000);
 | 
				
			||||||
foreach($account_logged->getActionsLog(0, 1000) as $action) {
 | 
					 | 
				
			||||||
	$actions[] = array('action' => $action['action'], 'date' => $action['date'], 'ip' => $action['ip'] != 0 ? long2ip($action['ip']) : inet_ntop($action['ipv6']));
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
$players = array();
 | 
					 | 
				
			||||||
/** @var OTS_Players_List $account_players */
 | 
					/** @var OTS_Players_List $account_players */
 | 
				
			||||||
$account_players = $account_logged->getPlayersList();
 | 
					$account_players = $account_logged->getPlayersList();
 | 
				
			||||||
$account_players->orderBy('id');
 | 
					$account_players->orderBy('id');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,8 +17,6 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if(isset($_POST['reg_password']))
 | 
					if(isset($_POST['reg_password']))
 | 
				
			||||||
	$reg_password = encrypt((USE_ACCOUNT_SALT ? $account_logged->getCustomField('salt') : '') . $_POST['reg_password']);
 | 
						$reg_password = encrypt((USE_ACCOUNT_SALT ? $account_logged->getCustomField('salt') : '') . $_POST['reg_password']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,8 +17,6 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$_POST['reg_password'] = $_POST['reg_password'] ?? '';
 | 
					$_POST['reg_password'] = $_POST['reg_password'] ?? '';
 | 
				
			||||||
$reg_password = encrypt((USE_ACCOUNT_SALT ? $account_logged->getCustomField('salt') : '') . $_POST['reg_password']);
 | 
					$reg_password = encrypt((USE_ACCOUNT_SALT ? $account_logged->getCustomField('salt') : '') . $_POST['reg_password']);
 | 
				
			||||||
$old_key = $account_logged->getCustomField("key");
 | 
					$old_key = $account_logged->getCustomField("key");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,46 +0,0 @@
 | 
				
			|||||||
<?php
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Changelog
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @package   MyAAC
 | 
					 | 
				
			||||||
 * @author    Slawkens <slawkens@gmail.com>
 | 
					 | 
				
			||||||
 * @copyright 2019 MyAAC
 | 
					 | 
				
			||||||
 * @link      https://my-aac.org
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
defined('MYAAC') or die('Direct access not allowed!');
 | 
					 | 
				
			||||||
$title = 'Changelog';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use MyAAC\Models\Changelog;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$_page = isset($_GET['page']) ? (int)$_GET['page'] : 0;
 | 
					 | 
				
			||||||
$limit = 30;
 | 
					 | 
				
			||||||
$offset = $_page * $limit;
 | 
					 | 
				
			||||||
$next_page = false;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$canEdit = hasFlag(FLAG_CONTENT_NEWS) || superAdmin();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$changelogs = Changelog::isPublic()->orderByDesc('date')->limit($limit + 1)->offset($offset)->get()->toArray();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$i = 0;
 | 
					 | 
				
			||||||
foreach($changelogs as $key => &$log)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if($i < $limit) {
 | 
					 | 
				
			||||||
		$log['type'] = getChangelogType($log['type']);
 | 
					 | 
				
			||||||
		$log['where'] = getChangelogWhere($log['where']);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else {
 | 
					 | 
				
			||||||
		unset($changelogs[$key]);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if ($i >= $limit)
 | 
					 | 
				
			||||||
		$next_page = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	$i++;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$twig->display('changelog.html.twig', array(
 | 
					 | 
				
			||||||
	'changelogs' => $changelogs,
 | 
					 | 
				
			||||||
	'page' => $_page,
 | 
					 | 
				
			||||||
	'next_page' => $next_page,
 | 
					 | 
				
			||||||
	'canEdit' => $canEdit,
 | 
					 | 
				
			||||||
));
 | 
					 | 
				
			||||||
@@ -1,3 +1,46 @@
 | 
				
			|||||||
<?php
 | 
					<?php
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Changelog
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @package   MyAAC
 | 
				
			||||||
 | 
					 * @author    Slawkens <slawkens@gmail.com>
 | 
				
			||||||
 | 
					 * @copyright 2019 MyAAC
 | 
				
			||||||
 | 
					 * @link      https://my-aac.org
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					defined('MYAAC') or die('Direct access not allowed!');
 | 
				
			||||||
 | 
					$title = 'Changelog';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require 'change-log.php';
 | 
					use MyAAC\Models\Changelog;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$_page = isset($_GET['page']) ? (int)$_GET['page'] : 0;
 | 
				
			||||||
 | 
					$limit = 30;
 | 
				
			||||||
 | 
					$offset = $_page * $limit;
 | 
				
			||||||
 | 
					$next_page = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$canEdit = hasFlag(FLAG_CONTENT_NEWS) || superAdmin();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$changelogs = Changelog::isPublic()->orderByDesc('date')->limit($limit + 1)->offset($offset)->get()->toArray();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$i = 0;
 | 
				
			||||||
 | 
					foreach($changelogs as $key => &$log)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if($i < $limit) {
 | 
				
			||||||
 | 
							$log['type'] = getChangelogType($log['type']);
 | 
				
			||||||
 | 
							$log['where'] = getChangelogWhere($log['where']);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else {
 | 
				
			||||||
 | 
							unset($changelogs[$key]);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ($i >= $limit)
 | 
				
			||||||
 | 
							$next_page = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						$i++;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$twig->display('changelog.html.twig', array(
 | 
				
			||||||
 | 
						'changelogs' => $changelogs,
 | 
				
			||||||
 | 
						'page' => $_page,
 | 
				
			||||||
 | 
						'next_page' => $next_page,
 | 
				
			||||||
 | 
						'canEdit' => $canEdit,
 | 
				
			||||||
 | 
					));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,8 +17,6 @@ if(!$canEdit) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$groupsList = new OTS_Groups_List();
 | 
					$groupsList = new OTS_Groups_List();
 | 
				
			||||||
$groups = [
 | 
					$groups = [
 | 
				
			||||||
	['id' => 0, 'name' => 'Guest'],
 | 
						['id' => 0, 'name' => 'Guest'],
 | 
				
			||||||
@@ -32,24 +30,23 @@ foreach ($groupsList as $group) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(!empty($action)) {
 | 
					if(!empty($action)) {
 | 
				
			||||||
	if($action == 'delete_board' || $action == 'edit_board' || $action == 'hide_board' || $action == 'moveup_board' || $action == 'movedown_board') {
 | 
						if($action == 'delete_board' || $action == 'edit_board' || $action == 'hide_board' || $action == 'moveup_board' || $action == 'movedown_board')
 | 
				
			||||||
		$id = $_REQUEST['id'];
 | 
							$id = $_REQUEST['id'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(isset($_REQUEST['access'])) {
 | 
				
			||||||
 | 
							$access = $_REQUEST['access'];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(isset($_POST['access'])) {
 | 
						if(isset($_REQUEST['guild'])) {
 | 
				
			||||||
		$access = $_POST['access'];
 | 
							$guild = $_REQUEST['guild'];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(isset($_POST['guild'])) {
 | 
						if(isset($_REQUEST['name'])) {
 | 
				
			||||||
		$guild = $_POST['guild'];
 | 
							$name = $_REQUEST['name'];
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(isset($_POST['name'])) {
 | 
						if(isset($_REQUEST['description'])) {
 | 
				
			||||||
		$name = $_POST['name'];
 | 
							$description = stripslashes($_REQUEST['description']);
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if(isset($_POST['description'])) {
 | 
					 | 
				
			||||||
		$description = stripslashes($_POST['description']);
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$errors = [];
 | 
						$errors = [];
 | 
				
			||||||
@@ -58,13 +55,12 @@ if(!empty($action)) {
 | 
				
			|||||||
		if(Forum::add_board($name, $description, $access, $guild, $errors)) {
 | 
							if(Forum::add_board($name, $description, $access, $guild, $errors)) {
 | 
				
			||||||
			$action = $name = $description = '';
 | 
								$action = $name = $description = '';
 | 
				
			||||||
			header('Location: ' . getLink('forum'));
 | 
								header('Location: ' . getLink('forum'));
 | 
				
			||||||
			exit;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if($action == 'delete_board') {
 | 
						else if($action == 'delete_board') {
 | 
				
			||||||
		Forum::delete_board($id, $errors);
 | 
							Forum::delete_board($id, $errors);
 | 
				
			||||||
		header('Location: ' . getLink('forum'));
 | 
							header('Location: ' . getLink('forum'));
 | 
				
			||||||
		exit;
 | 
							$action = '';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if($action == 'edit_board')
 | 
						else if($action == 'edit_board')
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -78,27 +74,28 @@ if(!empty($action)) {
 | 
				
			|||||||
		else {
 | 
							else {
 | 
				
			||||||
			Forum::update_board($id, $name, $access, $guild, $description);
 | 
								Forum::update_board($id, $name, $access, $guild, $description);
 | 
				
			||||||
			header('Location: ' . getLink('forum'));
 | 
								header('Location: ' . getLink('forum'));
 | 
				
			||||||
			exit;
 | 
								$action = $name = $description = '';
 | 
				
			||||||
 | 
								$access = $guild = 0;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if($action == 'hide_board') {
 | 
						else if($action == 'hide_board') {
 | 
				
			||||||
		Forum::toggleHide_board($id, $errors);
 | 
							Forum::toggleHide_board($id, $errors);
 | 
				
			||||||
		header('Location: ' . getLink('forum'));
 | 
							header('Location: ' . getLink('forum'));
 | 
				
			||||||
		exit;
 | 
							$action = '';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if($action == 'moveup_board') {
 | 
						else if($action == 'moveup_board') {
 | 
				
			||||||
		Forum::move_board($id, -1, $errors);
 | 
							Forum::move_board($id, -1, $errors);
 | 
				
			||||||
		header('Location: ' . getLink('forum'));
 | 
							header('Location: ' . getLink('forum'));
 | 
				
			||||||
		exit;
 | 
							$action = '';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if($action == 'movedown_board') {
 | 
						else if($action == 'movedown_board') {
 | 
				
			||||||
		Forum::move_board($id, 1, $errors);
 | 
							Forum::move_board($id, 1, $errors);
 | 
				
			||||||
		header('Location: ' . getLink('forum'));
 | 
							header('Location: ' . getLink('forum'));
 | 
				
			||||||
		exit;
 | 
							$action = '';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!empty($errors)) {
 | 
						if(!empty($errors)) {
 | 
				
			||||||
		$twig->display('error_box.html.twig', ['errors' => $errors]);
 | 
							$twig->display('error_box.html.twig', array('errors' => $errors));
 | 
				
			||||||
		$action = '';
 | 
							$action = '';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,9 +23,8 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					if(Forum::canPost($account_logged))
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
if(Forum::canPost($account_logged)) {
 | 
					 | 
				
			||||||
	$post_id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : false;
 | 
						$post_id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : false;
 | 
				
			||||||
	if(!$post_id) {
 | 
						if(!$post_id) {
 | 
				
			||||||
		$errors[] = 'Please enter post id.';
 | 
							$errors[] = 'Please enter post id.';
 | 
				
			||||||
@@ -42,12 +41,12 @@ if(Forum::canPost($account_logged)) {
 | 
				
			|||||||
			$char_id = $post_topic = $text = $smile = $html = null;
 | 
								$char_id = $post_topic = $text = $smile = $html = null;
 | 
				
			||||||
			$players_from_account = $db->query("SELECT `players`.`name`, `players`.`id` FROM `players` WHERE `players`.`account_id` = ".(int) $account_logged->getId())->fetchAll();
 | 
								$players_from_account = $db->query("SELECT `players`.`name`, `players`.`id` FROM `players` WHERE `players`.`account_id` = ".(int) $account_logged->getId())->fetchAll();
 | 
				
			||||||
			$saved = false;
 | 
								$saved = false;
 | 
				
			||||||
			if(isset($_POST['save'])) {
 | 
								if(isset($_REQUEST['save'])) {
 | 
				
			||||||
				$text = stripslashes(trim($_POST['text']));
 | 
									$text = stripslashes(trim($_REQUEST['text']));
 | 
				
			||||||
				$char_id = (int) $_POST['char_id'];
 | 
									$char_id = (int) $_REQUEST['char_id'];
 | 
				
			||||||
				$post_topic = stripslashes(trim($_POST['topic']));
 | 
									$post_topic = stripslashes(trim($_REQUEST['topic']));
 | 
				
			||||||
				$smile = isset($_POST['smile']) ? (int)$_POST['smile'] : 0;
 | 
									$smile = isset($_REQUEST['smile']) ? (int)$_REQUEST['smile'] : 0;
 | 
				
			||||||
				$html = isset($_POST['html']) ? (int)$_POST['html'] : 0;
 | 
									$html = isset($_REQUEST['html']) ? (int)$_REQUEST['html'] : 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (!superAdmin()) {
 | 
									if (!superAdmin()) {
 | 
				
			||||||
					$html = 0;
 | 
										$html = 0;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,17 +23,15 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if(!Forum::isModerator()) {
 | 
					if(!Forum::isModerator()) {
 | 
				
			||||||
	echo 'You are not logged in or you are not moderator.';
 | 
						echo 'You are not logged in or you are not moderator.';
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$save = isset($_POST['save']) && (int)$_POST['save'] == 1;
 | 
					$save = isset($_REQUEST['save']) && (int)$_REQUEST['save'] == 1;
 | 
				
			||||||
if($save) {
 | 
					if($save) {
 | 
				
			||||||
	$post_id = (int)$_POST['id'];
 | 
						$post_id = (int)$_REQUEST['id'];
 | 
				
			||||||
	$board = (int)$_POST['section'];
 | 
						$board = (int)$_REQUEST['section'];
 | 
				
			||||||
	if(!Forum::hasAccess($board)) {
 | 
						if(!Forum::hasAccess($board)) {
 | 
				
			||||||
		$errors[] = "You don't have access to this board.";
 | 
							$errors[] = "You don't have access to this board.";
 | 
				
			||||||
		displayErrorBoxWithBackButton($errors, getLink('forum'));
 | 
							displayErrorBoxWithBackButton($errors, getLink('forum'));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,8 +28,6 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if(Forum::canPost($account_logged)) {
 | 
					if(Forum::canPost($account_logged)) {
 | 
				
			||||||
	$players_from_account = $db->query("SELECT `players`.`name`, `players`.`id` FROM `players` WHERE `players`.`account_id` = ".(int) $account_logged->getId())->fetchAll();
 | 
						$players_from_account = $db->query("SELECT `players`.`name`, `players`.`id` FROM `players` WHERE `players`.`account_id` = ".(int) $account_logged->getId())->fetchAll();
 | 
				
			||||||
	$thread_id = isset($_REQUEST['thread_id']) ? (int) $_REQUEST['thread_id'] : 0;
 | 
						$thread_id = isset($_REQUEST['thread_id']) ? (int) $_REQUEST['thread_id'] : 0;
 | 
				
			||||||
@@ -45,11 +43,11 @@ if(Forum::canPost($account_logged)) {
 | 
				
			|||||||
		echo '<a href="' . getLink('forum') . '">Boards</a> >> <a href="' . getForumBoardLink($thread['section']) . '">'.$sections[$thread['section']]['name'].'</a> >> <a href="' . getForumThreadLink($thread_id) . '">'.htmlspecialchars($thread['post_topic']).'</a> >> <b>Post new reply</b><br /><h3>'.htmlspecialchars($thread['post_topic']).'</h3>';
 | 
							echo '<a href="' . getLink('forum') . '">Boards</a> >> <a href="' . getForumBoardLink($thread['section']) . '">'.$sections[$thread['section']]['name'].'</a> >> <a href="' . getForumThreadLink($thread_id) . '">'.htmlspecialchars($thread['post_topic']).'</a> >> <b>Post new reply</b><br /><h3>'.htmlspecialchars($thread['post_topic']).'</h3>';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$quote = isset($_REQUEST['quote']) ? (int) $_REQUEST['quote'] : NULL;
 | 
							$quote = isset($_REQUEST['quote']) ? (int) $_REQUEST['quote'] : NULL;
 | 
				
			||||||
		$text = isset($_POST['text']) ? stripslashes(trim($_POST['text'])) : NULL;
 | 
							$text = isset($_REQUEST['text']) ? stripslashes(trim($_REQUEST['text'])) : NULL;
 | 
				
			||||||
		$char_id = (int) ($_POST['char_id'] ?? 0);
 | 
							$char_id = (int) ($_REQUEST['char_id'] ?? 0);
 | 
				
			||||||
		$post_topic = isset($_POST['topic']) ? stripslashes(trim($_POST['topic'])) : '';
 | 
							$post_topic = isset($_REQUEST['topic']) ? stripslashes(trim($_REQUEST['topic'])) : '';
 | 
				
			||||||
		$smile = (int)($_POST['smile'] ?? 0);
 | 
							$smile = (int)($_REQUEST['smile'] ?? 0);
 | 
				
			||||||
		$html = (int)($_POST['html'] ?? 0);
 | 
							$html = (int)($_REQUEST['html'] ?? 0);
 | 
				
			||||||
		$saved = false;
 | 
							$saved = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (!superAdmin()) {
 | 
							if (!superAdmin()) {
 | 
				
			||||||
@@ -62,10 +60,10 @@ if(Forum::canPost($account_logged)) {
 | 
				
			|||||||
				$text = '[i]Originally posted by ' . $quoted_post[0]['name'] . ' on ' . date('d.m.y H:i:s', $quoted_post[0]['post_date']) . ':[/i][quote]' . $quoted_post[0]['post_text'] . '[/quote]';
 | 
									$text = '[i]Originally posted by ' . $quoted_post[0]['name'] . ' on ' . date('d.m.y H:i:s', $quoted_post[0]['post_date']) . ':[/i][quote]' . $quoted_post[0]['post_text'] . '[/quote]';
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		elseif(isset($_POST['save'])) {
 | 
							elseif(isset($_REQUEST['save'])) {
 | 
				
			||||||
			$length = strlen($text);
 | 
								$length = strlen($text);
 | 
				
			||||||
			if($length < 1 || strlen($text) > 15000) {
 | 
								if($length < 1 || strlen($text) > 15000) {
 | 
				
			||||||
				$errors[] = "Too short or too long post (Length: $length letters). Minimum 1 letter, maximum 15000 letters.";
 | 
									$errors[] = 'Too short or too long post (Length: $length letters). Minimum 1 letter, maximum 15000 letters.';
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if($char_id == 0) {
 | 
								if($char_id == 0) {
 | 
				
			||||||
@@ -81,14 +79,15 @@ if(Forum::canPost($account_logged)) {
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if(!$player_on_account) {
 | 
									if(!$player_on_account) {
 | 
				
			||||||
					$errors[] = "Player with selected ID $char_id doesn't exist or isn't on your account";
 | 
										$errors[] = 'Player with selected ID ' . $char_id . ' doesn\'t exist or isn\'t on your account';
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if(count($errors) == 0) {
 | 
								if(count($errors) == 0) {
 | 
				
			||||||
				$last_post = 0;
 | 
									$last_post = 0;
 | 
				
			||||||
				$query = $db->query('SELECT post_date FROM ' . FORUM_TABLE_PREFIX . 'forum ORDER BY post_date DESC LIMIT 1');
 | 
									$query = $db->query('SELECT post_date FROM ' . FORUM_TABLE_PREFIX . 'forum ORDER BY post_date DESC LIMIT 1');
 | 
				
			||||||
				if($query->rowCount() > 0) {
 | 
									if($query->rowCount() > 0)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
					$query = $query->fetch();
 | 
										$query = $query->fetch();
 | 
				
			||||||
					$last_post = $query['post_date'];
 | 
										$last_post = $query['post_date'];
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,8 +28,6 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if(Forum::canPost($account_logged)) {
 | 
					if(Forum::canPost($account_logged)) {
 | 
				
			||||||
	$players_from_account = $db->query('SELECT `players`.`name`, `players`.`id` FROM `players` WHERE `players`.`account_id` = '.(int) $account_logged->getId())->fetchAll();
 | 
						$players_from_account = $db->query('SELECT `players`.`name`, `players`.`id` FROM `players` WHERE `players`.`account_id` = '.(int) $account_logged->getId())->fetchAll();
 | 
				
			||||||
	$section_id = $_REQUEST['section_id'] ?? null;
 | 
						$section_id = $_REQUEST['section_id'] ?? null;
 | 
				
			||||||
@@ -40,18 +38,19 @@ if(Forum::canPost($account_logged)) {
 | 
				
			|||||||
			if ($sections[$section_id]['closed'] && !Forum::isModerator())
 | 
								if ($sections[$section_id]['closed'] && !Forum::isModerator())
 | 
				
			||||||
				$errors[] = 'You cannot create topic on this board.';
 | 
									$errors[] = 'You cannot create topic on this board.';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			$text = isset($_POST['text']) ? stripslashes($_POST['text']) : '';
 | 
								$quote = (int)(isset($_REQUEST['quote']) ? $_REQUEST['quote'] : 0);
 | 
				
			||||||
			$char_id = (int)(isset($_POST['char_id']) ? $_POST['char_id'] : 0);
 | 
								$text = isset($_REQUEST['text']) ? stripslashes($_REQUEST['text']) : '';
 | 
				
			||||||
			$post_topic = isset($_POST['topic']) ? stripslashes($_POST['topic']) : '';
 | 
								$char_id = (int)(isset($_REQUEST['char_id']) ? $_REQUEST['char_id'] : 0);
 | 
				
			||||||
			$smile = (isset($_POST['smile']) ? (int)$_POST['smile'] : 0);
 | 
								$post_topic = isset($_REQUEST['topic']) ? stripslashes($_REQUEST['topic']) : '';
 | 
				
			||||||
			$html = (isset($_POST['html']) ? (int)$_POST['html'] : 0);
 | 
								$smile = (isset($_REQUEST['smile']) ? (int)$_REQUEST['smile'] : 0);
 | 
				
			||||||
 | 
								$html = (isset($_REQUEST['html']) ? (int)$_REQUEST['html'] : 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (!superAdmin()) {
 | 
								if (!superAdmin()) {
 | 
				
			||||||
				$html = 0;
 | 
									$html = 0;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			$saved = false;
 | 
								$saved = false;
 | 
				
			||||||
			if (isset($_POST['save'])) {
 | 
								if (isset($_REQUEST['save'])) {
 | 
				
			||||||
				$length = strlen($post_topic);
 | 
									$length = strlen($post_topic);
 | 
				
			||||||
				if ($length < 1 || $length > 60) {
 | 
									if ($length < 1 || $length > 60) {
 | 
				
			||||||
					$errors[] = "Too short or too long topic (Length: $length letters). Minimum 1 letter, maximum 60 letters.";
 | 
										$errors[] = "Too short or too long topic (Length: $length letters). Minimum 1 letter, maximum 60 letters.";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,13 +23,11 @@ if(!$logged) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if(Forum::isModerator()) {
 | 
					if(Forum::isModerator()) {
 | 
				
			||||||
	$id = (int) ($_POST['id'] ?? 0);
 | 
						$id = (int) $_REQUEST['id'];
 | 
				
			||||||
	$post = $db->query("SELECT `id`, `first_post`, `section` FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `id` = ".$id." LIMIT 1")->fetch();
 | 
						$post = $db->query("SELECT `id`, `first_post`, `section` FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `id` = ".$id." LIMIT 1")->fetch();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if($post && $post['id'] == $id && Forum::hasAccess($post['section'])) {
 | 
						if($post['id'] == $id && Forum::hasAccess($post['section'])) {
 | 
				
			||||||
		if($post['id'] == $post['first_post']) {
 | 
							if($post['id'] == $post['first_post']) {
 | 
				
			||||||
			$db->query("DELETE FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `first_post` = ".$post['id']);
 | 
								$db->query("DELETE FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `first_post` = ".$post['id']);
 | 
				
			||||||
			header('Location: ' . getForumBoardLink($post['section']));
 | 
								header('Location: ' . getForumBoardLink($post['section']));
 | 
				
			||||||
@@ -38,7 +36,7 @@ if(Forum::isModerator()) {
 | 
				
			|||||||
			$post_page = $db->query("SELECT COUNT(`" . FORUM_TABLE_PREFIX . "forum`.`id`) AS posts_count FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` AND `" . FORUM_TABLE_PREFIX . "forum`.`id` < ".$id." AND `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".(int) $post['first_post'])->fetch();
 | 
								$post_page = $db->query("SELECT COUNT(`" . FORUM_TABLE_PREFIX . "forum`.`id`) AS posts_count FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` AND `" . FORUM_TABLE_PREFIX . "forum`.`id` < ".$id." AND `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".(int) $post['first_post'])->fetch();
 | 
				
			||||||
			$_page = (int) ceil($post_page['posts_count'] / setting('core.forum_threads_per_page')) - 1;
 | 
								$_page = (int) ceil($post_page['posts_count'] / setting('core.forum_threads_per_page')) - 1;
 | 
				
			||||||
			$db->query("DELETE FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `id` = ".$post['id']);
 | 
								$db->query("DELETE FROM `" . FORUM_TABLE_PREFIX . "forum` WHERE `id` = ".$post['id']);
 | 
				
			||||||
			header('Location: ' . getForumThreadLink($post['first_post'], $_page));
 | 
								header('Location: ' . getForumThreadLink($post['first_post'], (int) $_page));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,7 +33,7 @@ if(!Forum::hasAccess($section_id)) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$_page = (int) ($_REQUEST['page'] ?? 0);
 | 
					$_page = (int) (isset($_REQUEST['page']) ? $_REQUEST['page'] : 0);
 | 
				
			||||||
$threads_count = $db->query("SELECT COUNT(`" . FORUM_TABLE_PREFIX . "forum`.`id`) AS threads_count FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` AND `" . FORUM_TABLE_PREFIX . "forum`.`section` = ".(int) $section_id." AND `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = `" . FORUM_TABLE_PREFIX . "forum`.`id`")->fetch();
 | 
					$threads_count = $db->query("SELECT COUNT(`" . FORUM_TABLE_PREFIX . "forum`.`id`) AS threads_count FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` AND `" . FORUM_TABLE_PREFIX . "forum`.`section` = ".(int) $section_id." AND `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = `" . FORUM_TABLE_PREFIX . "forum`.`id`")->fetch();
 | 
				
			||||||
for($i = 0; $i < $threads_count['threads_count'] / setting('core.forum_threads_per_page'); $i++) {
 | 
					for($i = 0; $i < $threads_count['threads_count'] / setting('core.forum_threads_per_page'); $i++) {
 | 
				
			||||||
	if($i != $_page)
 | 
						if($i != $_page)
 | 
				
			||||||
@@ -50,7 +50,7 @@ if($logged && (!$sections[$section_id]['closed'] || Forum::isModerator())) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo '<br /><br />Page: '.$links_to_pages.'<br />';
 | 
					echo '<br /><br />Page: '.$links_to_pages.'<br />';
 | 
				
			||||||
$last_threads = $db->query("SELECT `players`.`id` as `player_id`, `players`.`name`, `" . FORUM_TABLE_PREFIX . "forum`.`first_post`, `" . FORUM_TABLE_PREFIX . "forum`.`post_text`, `" . FORUM_TABLE_PREFIX . "forum`.`post_topic`, `" . FORUM_TABLE_PREFIX . "forum`.`id`, `" . FORUM_TABLE_PREFIX . "forum`.`last_post`, `" . FORUM_TABLE_PREFIX . "forum`.`replies`, `" . FORUM_TABLE_PREFIX . "forum`.`views`, `" . FORUM_TABLE_PREFIX . "forum`.`post_date` FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` AND `" . FORUM_TABLE_PREFIX . "forum`.`section` = ".$section_id." AND `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = `" . FORUM_TABLE_PREFIX . "forum`.`id` ORDER BY `" . FORUM_TABLE_PREFIX . "forum`.`last_post` DESC LIMIT ".setting('core.forum_threads_per_page')." OFFSET ".($_page * setting('core.forum_threads_per_page')))->fetchAll(PDO::FETCH_ASSOC);
 | 
					$last_threads = $db->query("SELECT `players`.`id` as `player_id`, `players`.`name`, `" . FORUM_TABLE_PREFIX . "forum`.`post_text`, `" . FORUM_TABLE_PREFIX . "forum`.`post_topic`, `" . FORUM_TABLE_PREFIX . "forum`.`id`, `" . FORUM_TABLE_PREFIX . "forum`.`last_post`, `" . FORUM_TABLE_PREFIX . "forum`.`replies`, `" . FORUM_TABLE_PREFIX . "forum`.`views`, `" . FORUM_TABLE_PREFIX . "forum`.`post_date` FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` AND `" . FORUM_TABLE_PREFIX . "forum`.`section` = ".$section_id." AND `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = `" . FORUM_TABLE_PREFIX . "forum`.`id` ORDER BY `" . FORUM_TABLE_PREFIX . "forum`.`last_post` DESC LIMIT ".setting('core.forum_threads_per_page')." OFFSET ".($_page * setting('core.forum_threads_per_page')))->fetchAll();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(isset($last_threads[0])) {
 | 
					if(isset($last_threads[0])) {
 | 
				
			||||||
	echo '<table width="100%">
 | 
						echo '<table width="100%">
 | 
				
			||||||
@@ -67,8 +67,8 @@ if(isset($last_threads[0])) {
 | 
				
			|||||||
	foreach($last_threads as $thread) {
 | 
						foreach($last_threads as $thread) {
 | 
				
			||||||
		echo '<tr bgcolor="' . getStyle($number_of_rows++) . '"><td>';
 | 
							echo '<tr bgcolor="' . getStyle($number_of_rows++) . '"><td>';
 | 
				
			||||||
		if(Forum::isModerator()) {
 | 
							if(Forum::isModerator()) {
 | 
				
			||||||
			echo '<a href="' . getLink('forum') . '?action=move_thread&id=' . $thread['id'] . '" title="Move Thread"><img src="images/icons/arrow_right.gif"/></a>';
 | 
								echo '<a href="' . getLink('forum') . '?action=move_thread&id='.$thread['id'].'"\')"><span style="color:darkgreen">[MOVE]</span></a>';
 | 
				
			||||||
			$twig->display('forum.remove_post.html.twig', ['post' => $thread]);
 | 
								echo '<a href="' . getLink('forum') . '?action=remove_post&id='.$thread['id'].'" onclick="return confirm(\'Are you sure you want remove thread > '.htmlspecialchars($thread['post_topic']).' <?\')"><span style="color: red">[REMOVE]</span></a>  ';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$player->load($thread['player_id']);
 | 
							$player->load($thread['player_id']);
 | 
				
			||||||
@@ -82,13 +82,10 @@ if(isset($last_threads[0])) {
 | 
				
			|||||||
		echo '<a href="' . getForumThreadLink($thread['id']) . '">'.htmlspecialchars($thread['post_topic']). '</a><br /><small>'.($canEditForum ? substr(strip_tags($thread['post_text']), 0, 50) : htmlspecialchars(substr($thread['post_text'], 0, 50))).'...</small></td><td>' . getPlayerLink($thread['name']) . '</td><td>'.(int) $thread['replies'].'</td><td>'.(int) $thread['views'].'</td><td>';
 | 
							echo '<a href="' . getForumThreadLink($thread['id']) . '">'.htmlspecialchars($thread['post_topic']). '</a><br /><small>'.($canEditForum ? substr(strip_tags($thread['post_text']), 0, 50) : htmlspecialchars(substr($thread['post_text'], 0, 50))).'...</small></td><td>' . getPlayerLink($thread['name']) . '</td><td>'.(int) $thread['replies'].'</td><td>'.(int) $thread['views'].'</td><td>';
 | 
				
			||||||
		if($thread['last_post'] > 0) {
 | 
							if($thread['last_post'] > 0) {
 | 
				
			||||||
			$last_post = $db->query("SELECT `players`.`name`, `" . FORUM_TABLE_PREFIX . "forum`.`post_date` FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".(int) $thread['id']." AND `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` ORDER BY `post_date` DESC LIMIT 1")->fetch();
 | 
								$last_post = $db->query("SELECT `players`.`name`, `" . FORUM_TABLE_PREFIX . "forum`.`post_date` FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".(int) $thread['id']." AND `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` ORDER BY `post_date` DESC LIMIT 1")->fetch();
 | 
				
			||||||
 | 
								if(isset($last_post['name']))
 | 
				
			||||||
			if(isset($last_post['name'])) {
 | 
									echo date('d.m.y H:i:s', $last_post['post_date']).'<br />by ' . getPlayerLink($last_post['name']);
 | 
				
			||||||
				echo date('d.m.y H:i:s', $last_post['post_date']) . '<br />by ' . getPlayerLink($last_post['name']);
 | 
								else
 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			else {
 | 
					 | 
				
			||||||
				echo 'No posts.';
 | 
									echo 'No posts.';
 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			echo date('d.m.y H:i:s', $thread['post_date']) . '<br />by ' . getPlayerLink($thread['name']);
 | 
								echo date('d.m.y H:i:s', $thread['post_date']) . '<br />by ' . getPlayerLink($thread['name']);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,7 +35,7 @@ if(!Forum::hasAccess($thread_starter['section'])) {
 | 
				
			|||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$posts_count = $db->query("SELECT COUNT(`" . FORUM_TABLE_PREFIX . "forum`.`id`) AS posts_count FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` AND `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".$thread_id)->fetch();
 | 
					$posts_count = $db->query("SELECT COUNT(`" . FORUM_TABLE_PREFIX . "forum`.`id`) AS posts_count FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` AND `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".(int) $thread_id)->fetch();
 | 
				
			||||||
for($i = 0; $i < $posts_count['posts_count'] / setting('core.forum_threads_per_page'); $i++) {
 | 
					for($i = 0; $i < $posts_count['posts_count'] / setting('core.forum_threads_per_page'); $i++) {
 | 
				
			||||||
	if($i != $_page)
 | 
						if($i != $_page)
 | 
				
			||||||
		$links_to_pages .= '<a href="' . getForumThreadLink($thread_id, $i) . '">'.($i + 1).'</a> ';
 | 
							$links_to_pages .= '<a href="' . getForumThreadLink($thread_id, $i) . '">'.($i + 1).'</a> ';
 | 
				
			||||||
@@ -46,7 +46,7 @@ for($i = 0; $i < $posts_count['posts_count'] / setting('core.forum_threads_per_p
 | 
				
			|||||||
$posts = $db->query("SELECT `players`.`id` as `player_id`, `" . FORUM_TABLE_PREFIX . "forum`.`id`,`" . FORUM_TABLE_PREFIX . "forum`.`first_post`, `" . FORUM_TABLE_PREFIX . "forum`.`section`,`" . FORUM_TABLE_PREFIX . "forum`.`post_text`, `" . FORUM_TABLE_PREFIX . "forum`.`post_topic`, `" . FORUM_TABLE_PREFIX . "forum`.`post_date` AS `date`, `" . FORUM_TABLE_PREFIX . "forum`.`post_smile`, `" . FORUM_TABLE_PREFIX . "forum`.`post_html`, `" . FORUM_TABLE_PREFIX . "forum`.`author_aid`, `" . FORUM_TABLE_PREFIX . "forum`.`author_guid`, `" . FORUM_TABLE_PREFIX . "forum`.`last_edit_aid`, `" . FORUM_TABLE_PREFIX . "forum`.`edit_date` FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` AND `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".$thread_id." ORDER BY `" . FORUM_TABLE_PREFIX . "forum`.`post_date` LIMIT " . setting('core.forum_posts_per_page') . " OFFSET ".($_page * setting('core.forum_posts_per_page')))->fetchAll();
 | 
					$posts = $db->query("SELECT `players`.`id` as `player_id`, `" . FORUM_TABLE_PREFIX . "forum`.`id`,`" . FORUM_TABLE_PREFIX . "forum`.`first_post`, `" . FORUM_TABLE_PREFIX . "forum`.`section`,`" . FORUM_TABLE_PREFIX . "forum`.`post_text`, `" . FORUM_TABLE_PREFIX . "forum`.`post_topic`, `" . FORUM_TABLE_PREFIX . "forum`.`post_date` AS `date`, `" . FORUM_TABLE_PREFIX . "forum`.`post_smile`, `" . FORUM_TABLE_PREFIX . "forum`.`post_html`, `" . FORUM_TABLE_PREFIX . "forum`.`author_aid`, `" . FORUM_TABLE_PREFIX . "forum`.`author_guid`, `" . FORUM_TABLE_PREFIX . "forum`.`last_edit_aid`, `" . FORUM_TABLE_PREFIX . "forum`.`edit_date` FROM `players`, `" . FORUM_TABLE_PREFIX . "forum` WHERE `players`.`id` = `" . FORUM_TABLE_PREFIX . "forum`.`author_guid` AND `" . FORUM_TABLE_PREFIX . "forum`.`first_post` = ".$thread_id." ORDER BY `" . FORUM_TABLE_PREFIX . "forum`.`post_date` LIMIT " . setting('core.forum_posts_per_page') . " OFFSET ".($_page * setting('core.forum_posts_per_page')))->fetchAll();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(isset($posts[0]['player_id'])) {
 | 
					if(isset($posts[0]['player_id'])) {
 | 
				
			||||||
	$db->query("UPDATE `" . FORUM_TABLE_PREFIX . "forum` SET `views`=`views`+1 WHERE `id` = " . $thread_id);
 | 
						$db->query("UPDATE `" . FORUM_TABLE_PREFIX . "forum` SET `views`=`views`+1 WHERE `id` = ".(int) $thread_id);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$lookaddons = $db->hasColumn('players', 'lookaddons');
 | 
					$lookaddons = $db->hasColumn('players', 'lookaddons');
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,11 +12,11 @@ defined('MYAAC') or die('Direct access not allowed!');
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
require __DIR__ . '/base.php';
 | 
					require __DIR__ . '/base.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// set rights in guild
 | 
					//set rights in guild
 | 
				
			||||||
$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
					$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
				
			||||||
$name = isset($_REQUEST['name']) ? stripslashes($_REQUEST['name']) : null;
 | 
					$name = isset($_REQUEST['name']) ? stripslashes($_REQUEST['name']) : null;
 | 
				
			||||||
if(!$logged) {
 | 
					if(!$logged) {
 | 
				
			||||||
	$errors[] = "You are not logged in. You can't accept invitations.";
 | 
						$errors[] = 'You are not logged in. You can\'t accept invitations.';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(!Validator::guildName($guild_name)) {
 | 
					if(!Validator::guildName($guild_name)) {
 | 
				
			||||||
@@ -27,11 +27,11 @@ if(empty($errors)) {
 | 
				
			|||||||
	$guild = new OTS_Guild();
 | 
						$guild = new OTS_Guild();
 | 
				
			||||||
	$guild->find($guild_name);
 | 
						$guild->find($guild_name);
 | 
				
			||||||
	if(!$guild->isLoaded()) {
 | 
						if(!$guild->isLoaded()) {
 | 
				
			||||||
		$errors[] = "Guild with name <b>$guild_name</b> doesn't exist.";
 | 
							$errors[] = 'Guild with name <b>'.$guild_name.'</b> doesn\'t exist.';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
					if(isset($_REQUEST['todo']) && $_REQUEST['todo'] == 'save') {
 | 
				
			||||||
	if(!Validator::characterName($name)) {
 | 
						if(!Validator::characterName($name)) {
 | 
				
			||||||
		$errors[] = 'Invalid name format.';
 | 
							$errors[] = 'Invalid name format.';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -51,7 +51,7 @@ if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
					if(isset($_REQUEST['todo']) && $_REQUEST['todo'] == 'save') {
 | 
				
			||||||
	if(empty($errors)) {
 | 
						if(empty($errors)) {
 | 
				
			||||||
		$is_invited = false;
 | 
							$is_invited = false;
 | 
				
			||||||
		include(SYSTEM . 'libs/pot/InvitesDriver.php');
 | 
							include(SYSTEM . 'libs/pot/InvitesDriver.php');
 | 
				
			||||||
@@ -104,7 +104,7 @@ if(!empty($errors)) {
 | 
				
			|||||||
	));
 | 
						));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
else {
 | 
					else {
 | 
				
			||||||
	if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
						if(isset($_REQUEST['todo']) && $_REQUEST['todo'] == 'save') {
 | 
				
			||||||
		$guild->acceptInvite($player);
 | 
							$guild->acceptInvite($player);
 | 
				
			||||||
		$twig->display('success.html.twig', array(
 | 
							$twig->display('success.html.twig', array(
 | 
				
			||||||
			'title' => 'Accept invitation',
 | 
								'title' => 'Accept invitation',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ defined('MYAAC') or die('Direct access not allowed!');
 | 
				
			|||||||
require __DIR__ . '/base.php';
 | 
					require __DIR__ . '/base.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
					$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
				
			||||||
$rank_name = $_POST['rank_name'] ?? null;
 | 
					$rank_name = isset($_REQUEST['rank_name']) ? $_REQUEST['rank_name'] : null;
 | 
				
			||||||
if(!Validator::guildName($guild_name)) {
 | 
					if(!Validator::guildName($guild_name)) {
 | 
				
			||||||
	$errors[] = Validator::getLastError();
 | 
						$errors[] = Validator::getLastError();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -35,7 +35,7 @@ if(empty($errors)) {
 | 
				
			|||||||
		$rank_list = $guild->getGuildRanksList();
 | 
							$rank_list = $guild->getGuildRanksList();
 | 
				
			||||||
		$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
							$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
				
			||||||
		$guild_leader = false;
 | 
							$guild_leader = false;
 | 
				
			||||||
		$account_players = $account_logged->getPlayersList();
 | 
							$account_players = $account_logged->getPlayers();
 | 
				
			||||||
		foreach($account_players as $player) {
 | 
							foreach($account_players as $player) {
 | 
				
			||||||
			if($guild_leader_char->getId() == $player->getId()) {
 | 
								if($guild_leader_char->getId() == $player->getId()) {
 | 
				
			||||||
				$guild_vice = true;
 | 
									$guild_vice = true;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,5 +15,3 @@ else
 | 
				
			|||||||
	define('GUILD_MEMBERS_TABLE', 'guild_membership');
 | 
						define('GUILD_MEMBERS_TABLE', 'guild_membership');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
define('MOTD_EXISTS', $db->hasColumn('guilds', 'motd'));
 | 
					define('MOTD_EXISTS', $db->hasColumn('guilds', 'motd'));
 | 
				
			||||||
 | 
					 | 
				
			||||||
csrfProtect();
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,7 @@ if(empty($errors)) {
 | 
				
			|||||||
		$rank_list = $guild->getGuildRanksList();
 | 
							$rank_list = $guild->getGuildRanksList();
 | 
				
			||||||
		$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
							$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
				
			||||||
		$guild_leader = false;
 | 
							$guild_leader = false;
 | 
				
			||||||
		$account_players = $account_logged->getPlayersList();
 | 
							$account_players = $account_logged->getPlayers();
 | 
				
			||||||
		foreach($account_players as $player) {
 | 
							foreach($account_players as $player) {
 | 
				
			||||||
			if($guild->getOwner()->getId() == $player->getId()) {
 | 
								if($guild->getOwner()->getId() == $player->getId()) {
 | 
				
			||||||
				$guild_vice = true;
 | 
									$guild_vice = true;
 | 
				
			||||||
@@ -42,8 +42,8 @@ if(empty($errors)) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		$saved = false;
 | 
							$saved = false;
 | 
				
			||||||
		if($guild_leader) {
 | 
							if($guild_leader) {
 | 
				
			||||||
			if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
								if(isset($_REQUEST['todo']) && $_REQUEST['todo'] == 'save') {
 | 
				
			||||||
				$description = htmlspecialchars(stripslashes(substr(trim($_POST['description']),0, setting('core.guild_description_chars_limit'))));
 | 
									$description = htmlspecialchars(stripslashes(substr(trim($_REQUEST['description']),0, setting('core.guild_description_chars_limit'))));
 | 
				
			||||||
				$guild->setCustomField('description', $description);
 | 
									$guild->setCustomField('description', $description);
 | 
				
			||||||
				$saved = true;
 | 
									$saved = true;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,7 +30,7 @@ if(empty($errors)) {
 | 
				
			|||||||
	if($logged) {
 | 
						if($logged) {
 | 
				
			||||||
		$guild_leader_char = $guild->getOwner();
 | 
							$guild_leader_char = $guild->getOwner();
 | 
				
			||||||
		$guild_leader = false;
 | 
							$guild_leader = false;
 | 
				
			||||||
		$account_players = $account_logged->getPlayersList();
 | 
							$account_players = $account_logged->getPlayers();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		foreach($account_players as $player) {
 | 
							foreach($account_players as $player) {
 | 
				
			||||||
			if($guild_leader_char->getId() == $player->getId()) {
 | 
								if($guild_leader_char->getId() == $player->getId()) {
 | 
				
			||||||
@@ -40,13 +40,14 @@ if(empty($errors)) {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if($guild_leader) {
 | 
							if($guild_leader)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
			$max_image_size_b = setting('core.guild_image_size_kb') * 1024;
 | 
								$max_image_size_b = setting('core.guild_image_size_kb') * 1024;
 | 
				
			||||||
			$allowed_ext = array('image/gif', 'image/jpg', 'image/pjpeg', 'image/jpeg', 'image/bmp', 'image/png', 'image/x-png');
 | 
								$allowed_ext = array('image/gif', 'image/jpg', 'image/pjpeg', 'image/jpeg', 'image/bmp', 'image/png', 'image/x-png');
 | 
				
			||||||
			$ext_name = array('image/gif' => 'gif', 'image/jpg' => 'jpg', 'image/jpeg' => 'jpg', 'image/pjpeg' => 'jpg', 'image/bmp' => 'bmp', 'image/png' => 'png', 'image/x-png' => 'png');
 | 
								$ext_name = array('image/gif' => 'gif', 'image/jpg' => 'jpg', 'image/jpeg' => 'jpg', 'image/pjpeg' => 'jpg', 'image/bmp' => 'bmp', 'image/png' => 'png', 'image/x-png' => 'png');
 | 
				
			||||||
			$save_file_name = str_replace(' ', '_', strtolower($guild->getName()));
 | 
								$save_file_name = str_replace(' ', '_', strtolower($guild->getName()));
 | 
				
			||||||
			$save_path = GUILD_IMAGES_DIR . $save_file_name;
 | 
								$save_path = GUILD_IMAGES_DIR . $save_file_name;
 | 
				
			||||||
			if(isset($_POST['todo']) && $_POST['todo'] == 'save')
 | 
								if(isset($_REQUEST['todo']) && $_REQUEST['todo'] == 'save')
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				$file = $_FILES['newlogo'];
 | 
									$file = $_FILES['newlogo'];
 | 
				
			||||||
				if(is_uploaded_file($file['tmp_name']))
 | 
									if(is_uploaded_file($file['tmp_name']))
 | 
				
			||||||
@@ -96,13 +97,13 @@ if(empty($errors)) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			$guild_logo = $guild->getCustomField('logo_name');
 | 
								$guild_logo = $guild->getCustomField('logo_name');
 | 
				
			||||||
			if(empty($guild_logo) || !file_exists(GUILD_IMAGES_DIR . $guild_logo)) {
 | 
								if(empty($guild_logo) || !file_exists(GUILD_IMAGES_DIR . $guild_logo)) {
 | 
				
			||||||
				$guild_logo = 'default.gif';
 | 
									$guild_logo = "default.gif";
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			$twig->display('guilds.change_logo.html.twig', array(
 | 
								$twig->display('guilds.change_logo.html.twig', array(
 | 
				
			||||||
				'guild_logo' => $guild_logo,
 | 
									'guild_logo' => $guild_logo,
 | 
				
			||||||
				'guild' => $guild,
 | 
									'guild' => $guild,
 | 
				
			||||||
				//'max_image_size_b' => $max_image_size_b
 | 
									'max_image_size_b' => $max_image_size_b
 | 
				
			||||||
			));
 | 
								));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,7 @@ if(empty($errors)) {
 | 
				
			|||||||
		$rank_list = $guild->getGuildRanksList();
 | 
							$rank_list = $guild->getGuildRanksList();
 | 
				
			||||||
		$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
							$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
				
			||||||
		$guild_leader = false;
 | 
							$guild_leader = false;
 | 
				
			||||||
		$account_players = $account_logged->getPlayersList();
 | 
							$account_players = $account_logged->getPlayers();
 | 
				
			||||||
		foreach($account_players as $player) {
 | 
							foreach($account_players as $player) {
 | 
				
			||||||
			if($guild->getOwner()->getId() == $player->getId()) {
 | 
								if($guild->getOwner()->getId() == $player->getId()) {
 | 
				
			||||||
				$guild_vice = true;
 | 
									$guild_vice = true;
 | 
				
			||||||
@@ -45,8 +45,8 @@ if(empty($errors)) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		$saved = false;
 | 
							$saved = false;
 | 
				
			||||||
		if($guild_leader) {
 | 
							if($guild_leader) {
 | 
				
			||||||
			if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
								if(isset($_REQUEST['todo']) && $_REQUEST['todo'] == 'save') {
 | 
				
			||||||
				$motd = htmlspecialchars(stripslashes(substr($_POST['motd'],0, setting('core.guild_motd_chars_limit'))));
 | 
									$motd = htmlspecialchars(stripslashes(substr($_REQUEST['motd'],0, setting('core.guild_motd_chars_limit'))));
 | 
				
			||||||
				$guild->setCustomField('motd', $motd);
 | 
									$guild->setCustomField('motd', $motd);
 | 
				
			||||||
				$saved = true;
 | 
									$saved = true;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,15 +20,17 @@ if(!$logged) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$name = isset($_REQUEST['name']) ? stripslashes($_REQUEST['name']) : null;
 | 
					$name = isset($_REQUEST['name']) ? stripslashes($_REQUEST['name']) : null;
 | 
				
			||||||
$new_nick = isset($_POST['nick']) ? stripslashes($_POST['nick']) : null;
 | 
					$new_nick = isset($_REQUEST['nick']) ? stripslashes($_REQUEST['nick']) : null;
 | 
				
			||||||
$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
					$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(!$name) {
 | 
					if(!$name) {
 | 
				
			||||||
	$errors[] = 'Please enter new name.';
 | 
						$errors[] = 'Please enter new name.';
 | 
				
			||||||
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(!$new_nick) {
 | 
					if(!$new_nick) {
 | 
				
			||||||
	$errors[] = 'Please enter new nick.';
 | 
						$errors[] = 'Please enter new nick.';
 | 
				
			||||||
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(empty($errors))
 | 
					if(empty($errors))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,9 +17,8 @@ if(!$logged) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
else {
 | 
					else {
 | 
				
			||||||
	$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
						$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
				
			||||||
	if(!Validator::guildName($guild_name)) {
 | 
						if(!Validator::guildName($guild_name))
 | 
				
			||||||
		$errors[] = Validator::getLastError();
 | 
							$errors[] = Validator::getLastError();
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(empty($errors))
 | 
					if(empty($errors))
 | 
				
			||||||
@@ -43,7 +42,7 @@ $rank_list = $guild->getGuildRanksList();
 | 
				
			|||||||
$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
					$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
				
			||||||
$guild_leader = false;
 | 
					$guild_leader = false;
 | 
				
			||||||
$guild_vice = false;
 | 
					$guild_vice = false;
 | 
				
			||||||
$account_players = $account_logged->getPlayersList();
 | 
					$account_players = $account_logged->getPlayers();
 | 
				
			||||||
foreach($account_players as $player)
 | 
					foreach($account_players as $player)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	$player_rank = $player->getRank();
 | 
						$player_rank = $player->getRank();
 | 
				
			||||||
@@ -66,23 +65,22 @@ foreach($account_players as $player)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if($guild_vice) {
 | 
					if($guild_vice)
 | 
				
			||||||
	if(isset($_POST['todo']) && $_POST['todo'] === 'save') {
 | 
					{
 | 
				
			||||||
 | 
						if(isset($_REQUEST['todo']) && $_REQUEST['todo'] === 'save')
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
		$player_name = stripslashes($_REQUEST['name']);
 | 
							$player_name = stripslashes($_REQUEST['name']);
 | 
				
			||||||
		$new_rank = (int) $_POST['rankid'];
 | 
							$new_rank = (int) $_REQUEST['rankid'];
 | 
				
			||||||
 | 
							if(!Validator::characterName($player_name))
 | 
				
			||||||
		if(!Validator::characterName($player_name)) {
 | 
					 | 
				
			||||||
			$errors[] = 'Invalid player name format.';
 | 
								$errors[] = 'Invalid player name format.';
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		$rank = new OTS_GuildRank();
 | 
							$rank = new OTS_GuildRank();
 | 
				
			||||||
		$rank->load($new_rank);
 | 
							$rank->load($new_rank);
 | 
				
			||||||
		if(!$rank->isLoaded())
 | 
							if(!$rank->isLoaded())
 | 
				
			||||||
			$errors[] = "Rank with this ID doesn't exist.";
 | 
								$errors[] = "Rank with this ID doesn't exist.";
 | 
				
			||||||
		if($level_in_guild <= $rank->getLevel() && !$guild_leader)
 | 
							if($level_in_guild <= $rank->getLevel() && !$guild_leader)
 | 
				
			||||||
			$errors[] = "You can't set ranks with equal or higher level than your.";
 | 
								$errors[] = "You can't set ranks with equal or higher level than your.";
 | 
				
			||||||
 | 
							if(empty($errors))
 | 
				
			||||||
		if(empty($errors)) {
 | 
							{
 | 
				
			||||||
			$player_to_change = new OTS_Player();
 | 
								$player_to_change = new OTS_Player();
 | 
				
			||||||
			$player_to_change->find($player_name);
 | 
								$player_to_change->find($player_name);
 | 
				
			||||||
			if(!$player_to_change->isLoaded())
 | 
								if(!$player_to_change->isLoaded())
 | 
				
			||||||
@@ -110,7 +108,8 @@ if($guild_vice) {
 | 
				
			|||||||
				$errors[] = 'This player has higher rank in guild than you. You can\'t change his/her rank.';
 | 
									$errors[] = 'This player has higher rank in guild than you. You can\'t change his/her rank.';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(empty($errors)) {
 | 
							if(empty($errors))
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
			$player_to_change->setRank($rank);
 | 
								$player_to_change->setRank($rank);
 | 
				
			||||||
			$twig->display('success.html.twig', array(
 | 
								$twig->display('success.html.twig', array(
 | 
				
			||||||
				'title' => 'Rank Changed',
 | 
									'title' => 'Rank Changed',
 | 
				
			||||||
@@ -126,7 +125,7 @@ if($guild_vice) {
 | 
				
			|||||||
	$result = getPlayersWithLowerRank($rank_list, $guild_leader, $db, $level_in_guild, $guild);
 | 
						$result = getPlayersWithLowerRank($rank_list, $guild_leader, $db, $level_in_guild, $guild);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$twig->display('guilds.change_rank.html.twig', array(
 | 
						$twig->display('guilds.change_rank.html.twig', array(
 | 
				
			||||||
		'players' => $result['players'] ?? [],
 | 
							'players' => isset($result['players']) ? $result['players'] : array(),
 | 
				
			||||||
		'guild_name' => $guild->getName(),
 | 
							'guild_name' => $guild->getName(),
 | 
				
			||||||
		'ranks' => $result['ranks']
 | 
							'ranks' => $result['ranks']
 | 
				
			||||||
	));
 | 
						));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,27 +12,33 @@ defined('MYAAC') or die('Direct access not allowed!');
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
require __DIR__ . '/base.php';
 | 
					require __DIR__ . '/base.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(!$logged) {
 | 
					if(!$logged)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
	echo "You are not logged in.";
 | 
						echo "You are not logged in.";
 | 
				
			||||||
	$twig->display('guilds.back_button.html.twig');
 | 
						$twig->display('guilds.back_button.html.twig');
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(admin()) {
 | 
					if(admin())
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
	$players_list = new OTS_Players_List();
 | 
						$players_list = new OTS_Players_List();
 | 
				
			||||||
	$players_list->init();
 | 
						$players_list->init();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
else {
 | 
					else
 | 
				
			||||||
	$players_list = $account_logged->getPlayersList();
 | 
						$players_list = $account_logged->getPlayersList();
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(count($players_list) > 0) {
 | 
					if(count($players_list) > 0)
 | 
				
			||||||
	foreach($players_list as $player) {
 | 
					{
 | 
				
			||||||
 | 
						foreach($players_list as $player)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
		$player_rank = $player->getRank();
 | 
							$player_rank = $player->getRank();
 | 
				
			||||||
		if($player_rank->isLoaded()) {
 | 
							if($player_rank->isLoaded())
 | 
				
			||||||
			if($player_rank->isLoaded()) {
 | 
							{
 | 
				
			||||||
 | 
								if($player_rank->isLoaded())
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
				$rank_guild = $player_rank->getGuild();
 | 
									$rank_guild = $player_rank->getGuild();
 | 
				
			||||||
				if(!$rank_guild->isLoaded()) {
 | 
									if(!$rank_guild->isLoaded())
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
					$player->setRank();
 | 
										$player->setRank();
 | 
				
			||||||
					$player->setGuildNick('');
 | 
										$player->setGuildNick('');
 | 
				
			||||||
					$changed_ranks_of[] = $player->getName();
 | 
										$changed_ranks_of[] = $player->getName();
 | 
				
			||||||
@@ -40,7 +46,8 @@ if(count($players_list) > 0) {
 | 
				
			|||||||
					$player_rank->delete();
 | 
										$player_rank->delete();
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else {
 | 
								else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
				$player->setRank();
 | 
									$player->setRank();
 | 
				
			||||||
				$player->setGuildNick('');
 | 
									$player->setGuildNick('');
 | 
				
			||||||
				$changed_ranks_of[] = $player->getName();
 | 
									$changed_ranks_of[] = $player->getName();
 | 
				
			||||||
@@ -48,20 +55,14 @@ if(count($players_list) > 0) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	echo "<b>Deleted ranks (this ranks guilds doesn't exist [bug fix]):</b>";
 | 
						echo "<b>Deleted ranks (this ranks guilds doesn't exist [bug fix]):</b>";
 | 
				
			||||||
	if(!empty($deleted_ranks)) {
 | 
						if(!empty($deleted_ranks))
 | 
				
			||||||
		foreach ($deleted_ranks as $rank) {
 | 
							foreach($deleted_ranks as $rank)
 | 
				
			||||||
			echo "<li>" . $rank;
 | 
								echo "<li>".$rank;
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	echo "<BR /><BR /><b>Changed ranks of players (rank or guild of rank doesn't exist [bug fix]):</b>";
 | 
						echo "<BR /><BR /><b>Changed ranks of players (rank or guild of rank doesn't exist [bug fix]):</b>";
 | 
				
			||||||
 | 
						if(!empty($changed_ranks_of))
 | 
				
			||||||
	if(!empty($changed_ranks_of)) {
 | 
							foreach($changed_ranks_of as $name)
 | 
				
			||||||
		foreach ($changed_ranks_of as $name) {
 | 
								echo "<li>".$name;
 | 
				
			||||||
			echo "<li>" . $name;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
	echo "0 players found.";
 | 
						echo "0 players found.";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,15 +14,15 @@ use MyAAC\Models\GuildRank;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
require __DIR__ . '/base.php';
 | 
					require __DIR__ . '/base.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$guild_name = isset($_POST['guild']) ? urldecode($_POST['guild']) : NULL;
 | 
					$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : NULL;
 | 
				
			||||||
$name = isset($_POST['name']) ? stripslashes($_POST['name']) : NULL;
 | 
					$name = isset($_REQUEST['name']) ? stripslashes($_REQUEST['name']) : NULL;
 | 
				
			||||||
$todo = isset($_POST['todo']) ? $_POST['todo'] : NULL;
 | 
					$todo = isset($_REQUEST['todo']) ? $_REQUEST['todo'] : NULL;
 | 
				
			||||||
if(!$logged) {
 | 
					if(!$logged) {
 | 
				
			||||||
	$errors[] = 'You are not logged in. You can\'t create guild.';
 | 
						$guild_errors[] = 'You are not logged in. You can\'t create guild.';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$array_of_player_nig = array();
 | 
					$array_of_player_nig = array();
 | 
				
			||||||
if(empty($errors))
 | 
					if(empty($guild_errors))
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	$account_players = $account_logged->getPlayersList(false);
 | 
						$account_players = $account_logged->getPlayersList(false);
 | 
				
			||||||
	foreach($account_players as $player)
 | 
						foreach($account_players as $player)
 | 
				
			||||||
@@ -41,44 +41,45 @@ if(empty($errors))
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
if(empty($todo)) {
 | 
					if(empty($todo)) {
 | 
				
			||||||
	if(count($array_of_player_nig) == 0) {
 | 
						if(count($array_of_player_nig) == 0) {
 | 
				
			||||||
		$errors[] = 'On your account all characters are in guilds, have too low level to create new guild' . (setting('core.guild_need_premium') ? ' or you don\' have a premium account' : '') . '.';
 | 
							$guild_errors[] = 'On your account all characters are in guilds, have too low level to create new guild' . (setting('core.guild_need_premium') ? ' or you don\' have a premium account' : '') . '.';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if($todo == 'save')
 | 
					if($todo == 'save')
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if(!Validator::guildName($guild_name)) {
 | 
						if(!Validator::guildName($guild_name)) {
 | 
				
			||||||
		$errors[] = Validator::getLastError();
 | 
							$guild_errors[] = Validator::getLastError();
 | 
				
			||||||
		$guild_name = '';
 | 
							$guild_name = '';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!Validator::characterName($name)) {
 | 
						if(!Validator::characterName($name)) {
 | 
				
			||||||
		$errors[] = 'Invalid character name format.';
 | 
							$guild_errors[] = 'Invalid character name format.';
 | 
				
			||||||
		$name = '';
 | 
							$name = '';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(empty($errors)) {
 | 
						if(empty($guild_errors)) {
 | 
				
			||||||
		$player = new OTS_Player();
 | 
							$player = new OTS_Player();
 | 
				
			||||||
		$player->find($name);
 | 
							$player->find($name);
 | 
				
			||||||
		if(!$player->isLoaded()) {
 | 
							if(!$player->isLoaded()) {
 | 
				
			||||||
			$errors[] = 'Character <b>'.$name.'</b> doesn\'t exist.';
 | 
								$guild_errors[] = 'Character <b>'.$name.'</b> doesn\'t exist.';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(empty($errors))
 | 
					
 | 
				
			||||||
 | 
						if(empty($guild_errors))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$guild = new OTS_Guild();
 | 
							$guild = new OTS_Guild();
 | 
				
			||||||
		$guild->find($guild_name);
 | 
							$guild->find($guild_name);
 | 
				
			||||||
		if($guild->isLoaded()) {
 | 
							if($guild->isLoaded()) {
 | 
				
			||||||
			$errors[] = 'Guild <b>'.$guild_name.'</b> already exist. Select other name.';
 | 
								$guild_errors[] = 'Guild <b>'.$guild_name.'</b> already exist. Select other name.';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(empty($errors) && $player->isDeleted()) {
 | 
						if(empty($guild_errors) && $player->isDeleted()) {
 | 
				
			||||||
		$errors[] = "Character <b>$name</b> has been deleted.";
 | 
							$guild_errors[] = "Character <b>$name</b> has been deleted.";
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(empty($errors))
 | 
						if(empty($guild_errors))
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$bad_char = true;
 | 
							$bad_char = true;
 | 
				
			||||||
		foreach($array_of_player_nig as $nick_from_list) {
 | 
							foreach($array_of_player_nig as $nick_from_list) {
 | 
				
			||||||
@@ -87,22 +88,22 @@ if($todo == 'save')
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if($bad_char) {
 | 
							if($bad_char) {
 | 
				
			||||||
			$errors[] = 'Character <b>'.$name.'</b> isn\'t on your account or is already in guild.';
 | 
								$guild_errors[] = 'Character <b>'.$name.'</b> isn\'t on your account or is already in guild.';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(empty($errors)) {
 | 
						if(empty($guild_errors)) {
 | 
				
			||||||
		if($player->getLevel() < setting('core.guild_need_level')) {
 | 
							if($player->getLevel() < setting('core.guild_need_level')) {
 | 
				
			||||||
			$errors[] = 'Character <b>'.$name.'</b> has too low level. To create guild you need character with level <b>' . setting('core.guild_need_level') . '</b>.';
 | 
								$guild_errors[] = 'Character <b>'.$name.'</b> has too low level. To create guild you need character with level <b>' . setting('core.guild_need_level') . '</b>.';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if(setting('core.guild_need_premium') && !$account_logged->isPremium()) {
 | 
							if(setting('core.guild_need_premium') && !$account_logged->isPremium()) {
 | 
				
			||||||
			$errors[] = 'Character <b>'.$name.'</b> is on FREE account. To create guild you need PREMIUM account.';
 | 
								$guild_errors[] = 'Character <b>'.$name.'</b> is on FREE account. To create guild you need PREMIUM account.';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(!empty($errors)) {
 | 
					if(!empty($guild_errors)) {
 | 
				
			||||||
	$twig->display('error_box.html.twig', array('errors' => $errors));
 | 
						$twig->display('error_box.html.twig', array('errors' => $guild_errors));
 | 
				
			||||||
	unset($todo);
 | 
						unset($todo);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -45,10 +45,7 @@ if(empty($errors)) {
 | 
				
			|||||||
				$twig->display('success.html.twig', array(
 | 
									$twig->display('success.html.twig', array(
 | 
				
			||||||
					'title' => 'Delete Guild',
 | 
										'title' => 'Delete Guild',
 | 
				
			||||||
					'description' => 'Are you sure you want delete guild <b>' . $guild_name . '</b>?<br/>
 | 
										'description' => 'Are you sure you want delete guild <b>' . $guild_name . '</b>?<br/>
 | 
				
			||||||
				<form action="' . getLink('guilds') . '?guild=' . $guild->getName() . '&action=delete_by_admin" METHOD="post">
 | 
									<form action="' . getLink('guilds') . '?guild=' . $guild->getName() . '&action=delete_by_admin" METHOD="post"><input type="hidden" name="todo" value="save"><input type="submit" value="Yes, delete"></form>',
 | 
				
			||||||
					' . csrf(true) . '
 | 
					 | 
				
			||||||
					<input type="hidden" name="todo" value="save"><input type="submit" value="Yes, delete">
 | 
					 | 
				
			||||||
				</form>',
 | 
					 | 
				
			||||||
					'custom_buttons' => $twig->render('guilds.back_button.html.twig')
 | 
										'custom_buttons' => $twig->render('guilds.back_button.html.twig')
 | 
				
			||||||
				));
 | 
									));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ if(empty($errors)) {
 | 
				
			|||||||
	$guild = new OTS_Guild();
 | 
						$guild = new OTS_Guild();
 | 
				
			||||||
	$guild->find($guild_name);
 | 
						$guild->find($guild_name);
 | 
				
			||||||
	if(!$guild->isLoaded()) {
 | 
						if(!$guild->isLoaded()) {
 | 
				
			||||||
		$errors[] = "Guild with name <b>$guild_name</b> doesn't exist.";
 | 
							$errors[] = 'Guild with name <b>'.$guild_name.'</b> doesn\'t exist.';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -31,7 +31,7 @@ if(empty($errors)) {
 | 
				
			|||||||
		$rank_list = $guild->getGuildRanksList();
 | 
							$rank_list = $guild->getGuildRanksList();
 | 
				
			||||||
		$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
							$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
				
			||||||
		$guild_leader = false;
 | 
							$guild_leader = false;
 | 
				
			||||||
		$account_players = $account_logged->getPlayersList();
 | 
							$account_players = $account_logged->getPlayers();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		foreach($account_players as $player) {
 | 
							foreach($account_players as $player) {
 | 
				
			||||||
			if($guild->getOwner()->getId() == $player->getId()) {
 | 
								if($guild->getOwner()->getId() == $player->getId()) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,43 +15,47 @@ require __DIR__ . '/base.php';
 | 
				
			|||||||
$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
					$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
				
			||||||
$name = stripslashes($_REQUEST['name']);
 | 
					$name = stripslashes($_REQUEST['name']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(!$logged) {
 | 
					if(!$logged)
 | 
				
			||||||
	$errors[] = 'You are not logged in. You can\'t delete invitations.';
 | 
						$errors[] = 'You are not logged in. You can\'t delete invitations.';
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(!Validator::guildName($guild_name)) {
 | 
					if(!Validator::guildName($guild_name))
 | 
				
			||||||
	$errors[] = Validator::getLastError();
 | 
						$errors[] = Validator::getLastError();
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(!Validator::characterName($name)) {
 | 
					if(!Validator::characterName($name))
 | 
				
			||||||
	$errors[] = 'Invalid name format.';
 | 
						$errors[] = 'Invalid name format.';
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(empty($errors)) {
 | 
					if(empty($errors))
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
	$guild = new OTS_Guild();
 | 
						$guild = new OTS_Guild();
 | 
				
			||||||
	$guild->find($guild_name);
 | 
						$guild->find($guild_name);
 | 
				
			||||||
	if(!$guild->isLoaded())
 | 
						if(!$guild->isLoaded())
 | 
				
			||||||
		$errors[] = "Guild with name <b>" . $guild_name . "</b> doesn't exist.";
 | 
							$errors[] = "Guild with name <b>" . $guild_name . "</b> doesn't exist.";
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(empty($errors)) {
 | 
					if(empty($errors))
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
	$rank_list = $guild->getGuildRanksList();
 | 
						$rank_list = $guild->getGuildRanksList();
 | 
				
			||||||
	$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
						$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
				
			||||||
	$guild_leader = false;
 | 
						$guild_leader = false;
 | 
				
			||||||
	$guild_vice = false;
 | 
						$guild_vice = false;
 | 
				
			||||||
	$account_players = $account_logged->getPlayersList();
 | 
						$account_players = $account_logged->getPlayers();
 | 
				
			||||||
	foreach($account_players as $player) {
 | 
						foreach($account_players as $player)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
		$player_rank = $player->getRank();
 | 
							$player_rank = $player->getRank();
 | 
				
			||||||
		if($player_rank->isLoaded()) {
 | 
							if($player_rank->isLoaded())
 | 
				
			||||||
			foreach($rank_list as $rank_in_guild) {
 | 
							{
 | 
				
			||||||
				if($rank_in_guild->getId() == $player_rank->getId()) {
 | 
								foreach($rank_list as $rank_in_guild)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									if($rank_in_guild->getId() == $player_rank->getId())
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
					$players_from_account_in_guild[] = $player->getName();
 | 
										$players_from_account_in_guild[] = $player->getName();
 | 
				
			||||||
					if($player_rank->getLevel() > 1) {
 | 
										if($player_rank->getLevel() > 1)
 | 
				
			||||||
 | 
										{
 | 
				
			||||||
						$guild_vice = true;
 | 
											$guild_vice = true;
 | 
				
			||||||
						$level_in_guild = $player_rank->getLevel();
 | 
											$level_in_guild = $player_rank->getLevel();
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
										if($guild->getOwner()->getId() == $player->getId())
 | 
				
			||||||
					if($guild->getOwner()->getId() == $player->getId()) {
 | 
										{
 | 
				
			||||||
						$guild_vice = true;
 | 
											$guild_vice = true;
 | 
				
			||||||
						$guild_leader = true;
 | 
											$guild_leader = true;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
@@ -60,46 +64,44 @@ if(empty($errors)) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if(!$guild_vice) {
 | 
						if(!$guild_vice)
 | 
				
			||||||
		$errors[] = 'You are not a leader or vice leader of guild <b>' . $guild_name . '</b>.';
 | 
							$errors[] = 'You are not a leader or vice leader of guild <b>' . $guild_name . '</b>.';
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					if(empty($errors))
 | 
				
			||||||
if(empty($errors)) {
 | 
					{
 | 
				
			||||||
	$player = new OTS_Player();
 | 
						$player = new OTS_Player();
 | 
				
			||||||
	$player->find($name);
 | 
						$player->find($name);
 | 
				
			||||||
	if(!$player->isLoaded()) {
 | 
						if(!$player->isLoaded())
 | 
				
			||||||
		$errors[] = "Player with name <b>$name</b> doesn't exist.";
 | 
							$errors[] = 'Player with name <b>' . $name . '</b> doesn\'t exist.';
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(empty($errors)) {
 | 
					if(empty($errors))
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
	include(SYSTEM . 'libs/pot/InvitesDriver.php');
 | 
						include(SYSTEM . 'libs/pot/InvitesDriver.php');
 | 
				
			||||||
	new InvitesDriver($guild);
 | 
						new InvitesDriver($guild);
 | 
				
			||||||
	$invited_list = $guild->listInvites();
 | 
						$invited_list = $guild->listInvites();
 | 
				
			||||||
	if(count($invited_list) > 0) {
 | 
						if(count($invited_list) > 0)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
		$is_invited = false;
 | 
							$is_invited = false;
 | 
				
			||||||
		foreach($invited_list as $invited) {
 | 
							foreach($invited_list as $invited)
 | 
				
			||||||
			if ($invited->getName() == $player->getName()) {
 | 
								if($invited->getName() == $player->getName())
 | 
				
			||||||
				$is_invited = true;
 | 
									$is_invited = true;
 | 
				
			||||||
			}
 | 
							if(!$is_invited)
 | 
				
			||||||
		}
 | 
								$errors[] = '<b>'.$player->getName().'</b> isn\'t invited to your guild.';
 | 
				
			||||||
		if(!$is_invited) {
 | 
					 | 
				
			||||||
			$errors[] = '<b>' . $player->getName() . '</b> isn\'t invited to your guild.';
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else
 | 
				
			||||||
		$errors[] = 'No one is invited to your guild.';
 | 
							$errors[] = 'No one is invited to your guild.';
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					if(!empty($errors))
 | 
				
			||||||
if(!empty($errors)) {
 | 
					{
 | 
				
			||||||
	$twig->display('error_box.html.twig', array('errors' => $errors));
 | 
						$twig->display('error_box.html.twig', array('errors' => $errors));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$twig->display('guilds.back_button.html.twig', array('action' => getLink('guilds') . '?action=show&guild=' . $guild_name));
 | 
						$twig->display('guilds.back_button.html.twig', array('action' => getLink('guilds') . '?action=show&guild=' . $guild_name));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
else {
 | 
					else
 | 
				
			||||||
	if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
					{
 | 
				
			||||||
 | 
						if(isset($_REQUEST['todo']) && $_REQUEST['todo'] == 'save')
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
		$guild->deleteInvite($player);
 | 
							$guild->deleteInvite($player);
 | 
				
			||||||
		$twig->display('success.html.twig', array(
 | 
							$twig->display('success.html.twig', array(
 | 
				
			||||||
			'title' => 'Deleted player invitation',
 | 
								'title' => 'Deleted player invitation',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,27 +13,25 @@ defined('MYAAC') or die('Direct access not allowed!');
 | 
				
			|||||||
require __DIR__ . '/base.php';
 | 
					require __DIR__ . '/base.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
					$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
				
			||||||
$rank_to_delete = isset($_POST['rankid']) ? (int) $_POST['rankid'] : null;
 | 
					$rank_to_delete = isset($_REQUEST['rankid']) ? (int) $_REQUEST['rankid'] : null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(!Validator::guildName($guild_name)) {
 | 
					if(!Validator::guildName($guild_name)) {
 | 
				
			||||||
	$errors[] = Validator::getLastError();
 | 
						$guild_errors[] = Validator::getLastError();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					if(empty($guild_errors)) {
 | 
				
			||||||
if(empty($errors)) {
 | 
					 | 
				
			||||||
	$guild = new OTS_Guild();
 | 
						$guild = new OTS_Guild();
 | 
				
			||||||
	$guild->find($guild_name);
 | 
						$guild->find($guild_name);
 | 
				
			||||||
	if(!$guild->isLoaded()) {
 | 
						if(!$guild->isLoaded()) {
 | 
				
			||||||
		$errors[] = 'Guild with name <b>'.$guild_name.'</b> doesn\'t exist.';
 | 
							$guild_errors[] = 'Guild with name <b>'.$guild_name.'</b> doesn\'t exist.';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					if(empty($guild_errors)) {
 | 
				
			||||||
if(empty($errors)) {
 | 
					 | 
				
			||||||
	if($logged) {
 | 
						if($logged) {
 | 
				
			||||||
		$guild_leader_char = $guild->getOwner();
 | 
							$guild_leader_char = $guild->getOwner();
 | 
				
			||||||
		$rank_list = $guild->getGuildRanksList();
 | 
							$rank_list = $guild->getGuildRanksList();
 | 
				
			||||||
		$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
							$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
				
			||||||
		$guild_leader = false;
 | 
							$guild_leader = false;
 | 
				
			||||||
		$account_players = $account_logged->getPlayersList();
 | 
							$account_players = $account_logged->getPlayers();
 | 
				
			||||||
		foreach($account_players as $player) {
 | 
							foreach($account_players as $player) {
 | 
				
			||||||
			if($guild->getOwner()->getId() == $player->getId()) {
 | 
								if($guild->getOwner()->getId() == $player->getId()) {
 | 
				
			||||||
				$guild_vice = true;
 | 
									$guild_vice = true;
 | 
				
			||||||
@@ -41,21 +39,21 @@ if(empty($errors)) {
 | 
				
			|||||||
				$level_in_guild = 3;
 | 
									$level_in_guild = 3;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					 | 
				
			||||||
		if($guild_leader) {
 | 
							if($guild_leader) {
 | 
				
			||||||
			$rank = new OTS_GuildRank();
 | 
								$rank = new OTS_GuildRank();
 | 
				
			||||||
			$rank->load($rank_to_delete);
 | 
								$rank->load($rank_to_delete);
 | 
				
			||||||
			if(!$rank->isLoaded()) {
 | 
								if(!$rank->isLoaded()) {
 | 
				
			||||||
				$errors2[] = 'Rank with ID '.$rank_to_delete.' doesn\'t exist.';
 | 
									$guild_errors2[] = 'Rank with ID '.$rank_to_delete.' doesn\'t exist.';
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			else {
 | 
								else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
				if($rank->getGuild()->getId() != $guild->getId()) {
 | 
									if($rank->getGuild()->getId() != $guild->getId()) {
 | 
				
			||||||
					$errors2[] = 'Rank with ID '.$rank_to_delete.' isn\'t from your guild.';
 | 
										$guild_errors2[] = 'Rank with ID '.$rank_to_delete.' isn\'t from your guild.';
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					if(count($rank_list) < 2) {
 | 
										if(count($rank_list) < 2) {
 | 
				
			||||||
						$errors2[] = 'You have only 1 rank in your guild. You can\'t delete this rank.';
 | 
											$guild_errors2[] = 'You have only 1 rank in your guild. You can\'t delete this rank.';
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					else
 | 
										else
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
@@ -89,21 +87,19 @@ if(empty($errors)) {
 | 
				
			|||||||
									$player->setRank($new_rank);
 | 
														$player->setRank($new_rank);
 | 
				
			||||||
							}
 | 
												}
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
 | 
					 | 
				
			||||||
						$rank->delete();
 | 
											$rank->delete();
 | 
				
			||||||
						$saved = true;
 | 
											$saved = true;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								if($saved) {
 | 
				
			||||||
			if(isset($saved) && $saved) {
 | 
					 | 
				
			||||||
				$twig->display('success.html.twig', array(
 | 
									$twig->display('success.html.twig', array(
 | 
				
			||||||
					'title' => 'Rank Deleted',
 | 
										'title' => 'Rank Deleted',
 | 
				
			||||||
					'description' => 'Rank <b>'.$rank->getName().'</b> has been deleted. Players with this rank has now other rank.',
 | 
										'description' => 'Rank <b>'.$rank->getName().'</b> has been deleted. Players with this rank has now other rank.',
 | 
				
			||||||
					'custom_buttons' => ''
 | 
										'custom_buttons' => ''
 | 
				
			||||||
				));
 | 
									));
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				$twig->display('error_box.html.twig', array('errors' => $errors2));
 | 
									$twig->display('error_box.html.twig', array('errors' => $guild_errors2));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			$twig->display('guilds.back_button.html.twig', array(
 | 
								$twig->display('guilds.back_button.html.twig', array(
 | 
				
			||||||
@@ -111,16 +107,18 @@ if(empty($errors)) {
 | 
				
			|||||||
				'action' => getLink('guilds') . '?guild='.$guild->getName().'&action=manager'
 | 
									'action' => getLink('guilds') . '?guild='.$guild->getName().'&action=manager'
 | 
				
			||||||
			));
 | 
								));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else
 | 
				
			||||||
			$errors[] = 'You are not a leader of guild!';
 | 
							{
 | 
				
			||||||
 | 
								$guild_errors[] = 'You are not a leader of guild!';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else
 | 
				
			||||||
		$errors[] = 'You are not logged. You can\'t manage guild.';
 | 
						{
 | 
				
			||||||
 | 
							$guild_errors[] = 'You are not logged. You can\'t manage guild.';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
if(!empty($errors)) {
 | 
					if(!empty($guild_errors)) {
 | 
				
			||||||
	$twig->display('error_box.html.twig', array('errors' => $errors));
 | 
						$twig->display('error_box.html.twig', array('errors' => $guild_errors));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	$twig->display('guilds.back_button.html.twig', array(
 | 
						$twig->display('guilds.back_button.html.twig', array(
 | 
				
			||||||
		'new_line' => true,
 | 
							'new_line' => true,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,7 +36,7 @@ if(empty($errors)) {
 | 
				
			|||||||
	$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
						$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
				
			||||||
	$guild_leader = false;
 | 
						$guild_leader = false;
 | 
				
			||||||
	$guild_vice = false;
 | 
						$guild_vice = false;
 | 
				
			||||||
	$account_players = $account_logged->getPlayersList();
 | 
						$account_players = $account_logged->getPlayers();
 | 
				
			||||||
	foreach($account_players as $player) {
 | 
						foreach($account_players as $player) {
 | 
				
			||||||
		$player_rank = $player->getRank();
 | 
							$player_rank = $player->getRank();
 | 
				
			||||||
		if($player_rank->isLoaded()) {
 | 
							if($player_rank->isLoaded()) {
 | 
				
			||||||
@@ -62,7 +62,7 @@ if(!$guild_vice) {
 | 
				
			|||||||
	$errors[] = 'You are not a leader or vice leader of guild <b>'.$guild_name.'</b>.'.$level_in_guild;
 | 
						$errors[] = 'You are not a leader or vice leader of guild <b>'.$guild_name.'</b>.'.$level_in_guild;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
					if(isset($_REQUEST['todo']) && $_REQUEST['todo'] == 'save') {
 | 
				
			||||||
	if(!Validator::characterName($name)) {
 | 
						if(!Validator::characterName($name)) {
 | 
				
			||||||
		$errors[] = 'Invalid name format.';
 | 
							$errors[] = 'Invalid name format.';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -71,7 +71,7 @@ if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
				
			|||||||
		$player = new OTS_Player();
 | 
							$player = new OTS_Player();
 | 
				
			||||||
		$player->find($name);
 | 
							$player->find($name);
 | 
				
			||||||
		if(!$player->isLoaded()) {
 | 
							if(!$player->isLoaded()) {
 | 
				
			||||||
			$errors[] = "Player with name <b>$name</b> doesn't exist.";
 | 
								$errors[] = 'Player with name <b>' . $name . '</b> doesn\'t exist.';
 | 
				
			||||||
		} else if ($player->isDeleted()) {
 | 
							} else if ($player->isDeleted()) {
 | 
				
			||||||
			$errors[] = "Character with name <b>$name</b> has been deleted.";
 | 
								$errors[] = "Character with name <b>$name</b> has been deleted.";
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -102,7 +102,7 @@ if(!empty($errors)) {
 | 
				
			|||||||
	$twig->display('error_box.html.twig', array('errors' => $errors));
 | 
						$twig->display('error_box.html.twig', array('errors' => $errors));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
else {
 | 
					else {
 | 
				
			||||||
	if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
						if(isset($_REQUEST['todo']) && $_REQUEST['todo'] == 'save') {
 | 
				
			||||||
		$guild->invite($player);
 | 
							$guild->invite($player);
 | 
				
			||||||
		$twig->display('success.html.twig', array(
 | 
							$twig->display('success.html.twig', array(
 | 
				
			||||||
			'title' => 'Invite player',
 | 
								'title' => 'Invite player',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,7 +41,7 @@ if(empty($errors)) {
 | 
				
			|||||||
	$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
						$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
				
			||||||
	$guild_leader = false;
 | 
						$guild_leader = false;
 | 
				
			||||||
	$guild_vice = false;
 | 
						$guild_vice = false;
 | 
				
			||||||
	$account_players = $account_logged->getPlayersList();
 | 
						$account_players = $account_logged->getPlayers();
 | 
				
			||||||
	foreach($account_players as $player) {
 | 
						foreach($account_players as $player) {
 | 
				
			||||||
		$player_rank = $player->getRank();
 | 
							$player_rank = $player->getRank();
 | 
				
			||||||
		if($player_rank->isLoaded()) {
 | 
							if($player_rank->isLoaded()) {
 | 
				
			||||||
@@ -102,7 +102,7 @@ if(!empty($errors)) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
						if(isset($_REQUEST['todo']) && $_REQUEST['todo'] == 'save') {
 | 
				
			||||||
		$player->setRank();
 | 
							$player->setRank();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$twig->display('success.html.twig', array(
 | 
							$twig->display('success.html.twig', array(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,7 @@ if(empty($errors)) {
 | 
				
			|||||||
$array_of_player_ig = array();
 | 
					$array_of_player_ig = array();
 | 
				
			||||||
if(empty($errors)) {
 | 
					if(empty($errors)) {
 | 
				
			||||||
	$guild_owner_name = $guild->getOwner()->getName();
 | 
						$guild_owner_name = $guild->getOwner()->getName();
 | 
				
			||||||
	if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
						if(isset($_REQUEST['todo']) && $_REQUEST['todo'] == 'save') {
 | 
				
			||||||
		if(!Validator::characterName($name)) {
 | 
							if(!Validator::characterName($name)) {
 | 
				
			||||||
			$errors[] = 'Invalid name format.';
 | 
								$errors[] = 'Invalid name format.';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -72,7 +72,7 @@ if(empty($errors)) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$account_players = $account_logged->getPlayersList();
 | 
							$account_players = $account_logged->getPlayers();
 | 
				
			||||||
		foreach($account_players as $player_fac) {
 | 
							foreach($account_players as $player_fac) {
 | 
				
			||||||
			$player_rank = $player_fac->getRank();
 | 
								$player_rank = $player_fac->getRank();
 | 
				
			||||||
			if($player_rank->isLoaded()) {
 | 
								if($player_rank->isLoaded()) {
 | 
				
			||||||
@@ -94,7 +94,7 @@ if(!empty($errors)) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
						if(isset($_REQUEST['todo']) && $_REQUEST['todo'] == 'save') {
 | 
				
			||||||
		$player->setRank();
 | 
							$player->setRank();
 | 
				
			||||||
		$twig->display('success.html.twig', array(
 | 
							$twig->display('success.html.twig', array(
 | 
				
			||||||
			'title' => 'Leave guild',
 | 
								'title' => 'Leave guild',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,24 +14,23 @@ defined('MYAAC') or die('Direct access not allowed!');
 | 
				
			|||||||
require __DIR__ . '/base.php';
 | 
					require __DIR__ . '/base.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$guilds_list = new OTS_Guilds_List();
 | 
					$guilds_list = new OTS_Guilds_List();
 | 
				
			||||||
$guilds_list->orderBy('name');
 | 
					$guilds_list->orderBy("name");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$guilds = array();
 | 
					$guilds = array();
 | 
				
			||||||
if(count($guilds_list) > 0) {
 | 
					if(count($guilds_list) > 0)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * @var OTS_Guild $guild
 | 
						 * @var OTS_Guild $guild
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	foreach ($guilds_list as $guild) {
 | 
						foreach ($guilds_list as $guild) {
 | 
				
			||||||
		$guild_logo = $guild->getCustomField('logo_name');
 | 
							$guild_logo = $guild->getCustomField('logo_name');
 | 
				
			||||||
		if (empty($guild_logo) || !file_exists(GUILD_IMAGES_DIR . $guild_logo)) {
 | 
							if (empty($guild_logo) || !file_exists(GUILD_IMAGES_DIR . $guild_logo))
 | 
				
			||||||
			$guild_logo = 'default.gif';
 | 
								$guild_logo = "default.gif";
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$description = $guild->getCustomField('description');
 | 
							$description = $guild->getCustomField('description');
 | 
				
			||||||
		$description_with_lines = str_replace(array("\r\n", "\n", "\r"), '<br />', $description, $count);
 | 
							$description_with_lines = str_replace(array("\r\n", "\n", "\r"), '<br />', $description, $count);
 | 
				
			||||||
		if ($count < setting('core.guild_description_lines_limit')) {
 | 
							if ($count < setting('core.guild_description_lines_limit'))
 | 
				
			||||||
			$description = nl2br($description);
 | 
								$description = nl2br($description);
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		$guildName = $guild->getName();
 | 
							$guildName = $guild->getName();
 | 
				
			||||||
		$guilds[] = array('name' => $guildName, 'logo' => $guild_logo, 'link' => getGuildLink($guildName, false), 'description' => $description);
 | 
							$guilds[] = array('name' => $guildName, 'logo' => $guild_logo, 'link' => getGuildLink($guildName, false), 'description' => $description);
 | 
				
			||||||
@@ -40,6 +39,6 @@ if(count($guilds_list) > 0) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
$twig->display('guilds.list.html.twig', array(
 | 
					$twig->display('guilds.list.html.twig', array(
 | 
				
			||||||
	'guilds' => $guilds,
 | 
						'guilds' => $guilds,
 | 
				
			||||||
	'logged' => $logged ?? false,
 | 
						'logged' => isset($logged) ? $logged : false,
 | 
				
			||||||
	'isAdmin' => admin(),
 | 
						'isAdmin' => admin(),
 | 
				
			||||||
));
 | 
					));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ if(empty($errors)) {
 | 
				
			|||||||
	$guild = new OTS_Guild();
 | 
						$guild = new OTS_Guild();
 | 
				
			||||||
	$guild->find($guild_name);
 | 
						$guild->find($guild_name);
 | 
				
			||||||
	if(!$guild->isLoaded()) {
 | 
						if(!$guild->isLoaded()) {
 | 
				
			||||||
		$errors[] = "Guild with name <b>$guild_name</b> doesn't exist.";
 | 
							$errors[] = 'Guild with name <b>'.$guild_name.'</b> doesn\'t exist.';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -31,7 +31,7 @@ if(empty($errors)) {
 | 
				
			|||||||
		$rank_list = $guild->getGuildRanksList();
 | 
							$rank_list = $guild->getGuildRanksList();
 | 
				
			||||||
		$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
							$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
				
			||||||
		$guild_leader = false;
 | 
							$guild_leader = false;
 | 
				
			||||||
		$account_players = $account_logged->getPlayersList();
 | 
							$account_players = $account_logged->getPlayers();
 | 
				
			||||||
		foreach($account_players as $player) {
 | 
							foreach($account_players as $player) {
 | 
				
			||||||
			if($guild_leader_char->getId() == $player->getId()) {
 | 
								if($guild_leader_char->getId() == $player->getId()) {
 | 
				
			||||||
				$guild_vice = true;
 | 
									$guild_vice = true;
 | 
				
			||||||
@@ -39,22 +39,22 @@ if(empty($errors)) {
 | 
				
			|||||||
				$level_in_guild = 3;
 | 
									$level_in_guild = 3;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					 | 
				
			||||||
		if($guild_leader) {
 | 
							if($guild_leader) {
 | 
				
			||||||
			$twig->display('guilds.manager.html.twig', array(
 | 
								$twig->display('guilds.manager.html.twig', array(
 | 
				
			||||||
				'guild' => $guild,
 | 
									'guild' => $guild,
 | 
				
			||||||
				'rank_list' => $rank_list
 | 
									'rank_list' => $rank_list
 | 
				
			||||||
			));
 | 
								));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
			$errors[] = 'You are not a leader of guild!';
 | 
								$errors[] = 'You are not a leader of guild!';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else
 | 
				
			||||||
		$errors[] = "You are not logged. You can't manage guild.";
 | 
						{
 | 
				
			||||||
 | 
							$errors[] = 'You are not logged. You can\'t manage guild.';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
if(!empty($errors)) {
 | 
					if(!empty($errors)) {
 | 
				
			||||||
	$twig->display('error_box.html.twig', array('errors' => $errors));
 | 
						$twig->display('error_box.html.twig', array('errors' => $errors));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,52 +15,51 @@ require __DIR__ . '/base.php';
 | 
				
			|||||||
$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : NULL;
 | 
					$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : NULL;
 | 
				
			||||||
$pass_to = isset($_REQUEST['player']) ? stripslashes($_REQUEST['player']) : NULL;
 | 
					$pass_to = isset($_REQUEST['player']) ? stripslashes($_REQUEST['player']) : NULL;
 | 
				
			||||||
if(!Validator::guildName($guild_name)) {
 | 
					if(!Validator::guildName($guild_name)) {
 | 
				
			||||||
	$errors[] = Validator::getLastError();
 | 
						$guild_errors[] = Validator::getLastError();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(empty($errors)) {
 | 
					if(empty($guild_errors)) {
 | 
				
			||||||
	$guild = new OTS_Guild();
 | 
						$guild = new OTS_Guild();
 | 
				
			||||||
	$guild->find($guild_name);
 | 
						$guild->find($guild_name);
 | 
				
			||||||
	if(!$guild->isLoaded()) {
 | 
						if(!$guild->isLoaded()) {
 | 
				
			||||||
		$errors[] = "Guild with name <b>" . $guild_name . "</b> doesn't exist.";
 | 
							$guild_errors[] = "Guild with name <b>" . $guild_name . "</b> doesn't exist.";
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					if(empty($guild_errors)) {
 | 
				
			||||||
if(empty($errors)) {
 | 
					 | 
				
			||||||
	if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
						if(isset($_POST['todo']) && $_POST['todo'] == 'save') {
 | 
				
			||||||
		if(!Validator::characterName($pass_to)) {
 | 
							if(!Validator::characterName($pass_to)) {
 | 
				
			||||||
			$errors2[] = 'Invalid player name format.';
 | 
								$guild_errors2[] = 'Invalid player name format.';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if(empty($errors2)) {
 | 
							if(empty($guild_errors2)) {
 | 
				
			||||||
			$to_player = new OTS_Player();
 | 
								$to_player = new OTS_Player();
 | 
				
			||||||
			$to_player->find($pass_to);
 | 
								$to_player->find($pass_to);
 | 
				
			||||||
			if(!$to_player->isLoaded()) {
 | 
								if(!$to_player->isLoaded()) {
 | 
				
			||||||
				$errors2[] = 'Player with name <b>'.$pass_to.'</b> doesn\'t exist.';
 | 
									$guild_errors2[] = 'Player with name <b>'.$pass_to.'</b> doesn\'t exist.';
 | 
				
			||||||
			} else if ($to_player->isDeleted()) {
 | 
								} else if ($to_player->isDeleted()) {
 | 
				
			||||||
				$errors2[] = "Character with name <b>$pass_to</b> has been deleted.";
 | 
									$guild_errors2[] = "Character with name <b>$pass_to</b> has been deleted.";
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if(empty($errors2)) {
 | 
								if(empty($guild_errors2)) {
 | 
				
			||||||
				$to_player_rank = $to_player->getRank();
 | 
									$to_player_rank = $to_player->getRank();
 | 
				
			||||||
				if($to_player_rank->isLoaded()) {
 | 
									if($to_player_rank->isLoaded()) {
 | 
				
			||||||
					$to_player_guild = $to_player_rank->getGuild();
 | 
										$to_player_guild = $to_player_rank->getGuild();
 | 
				
			||||||
					if($to_player_guild->getId() != $guild->getId()) {
 | 
										if($to_player_guild->getId() != $guild->getId()) {
 | 
				
			||||||
						$errors2[] = 'Player with name <b>'.$to_player->getName().'</b> isn\'t from your guild.';
 | 
											$guild_errors2[] = 'Player with name <b>'.$to_player->getName().'</b> isn\'t from your guild.';
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				else {
 | 
									else {
 | 
				
			||||||
					$errors2[] = 'Player with name <b>'.$to_player->getName().'</b> isn\'t from your guild.';
 | 
										$guild_errors2[] = 'Player with name <b>'.$to_player->getName().'</b> isn\'t from your guild.';
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
if(empty($errors) && empty($errors2)) {
 | 
					if(empty($guild_errors) && empty($guild_errors2)) {
 | 
				
			||||||
	if($logged) {
 | 
						if($logged) {
 | 
				
			||||||
		$guild_leader_char = $guild->getOwner();
 | 
							$guild_leader_char = $guild->getOwner();
 | 
				
			||||||
		$guild_leader = false;
 | 
							$guild_leader = false;
 | 
				
			||||||
		$account_players = $account_logged->getPlayersList();
 | 
							$account_players = $account_logged->getPlayers();
 | 
				
			||||||
		foreach($account_players as $player) {
 | 
							foreach($account_players as $player) {
 | 
				
			||||||
			if($guild_leader_char->getId() == $player->getId()) {
 | 
								if($guild_leader_char->getId() == $player->getId()) {
 | 
				
			||||||
				$guild_vice = true;
 | 
									$guild_vice = true;
 | 
				
			||||||
@@ -100,23 +99,23 @@ if(empty($errors) && empty($errors2)) {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			$errors[] = 'You are not a leader of guild!';
 | 
								$guild_errors[] = 'You are not a leader of guild!';
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
		$errors[] = "You are not logged. You can't manage guild.";
 | 
							$guild_errors[] = "You are not logged. You can't manage guild.";
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
if(empty($errors) && !empty($errors2)) {
 | 
					if(empty($guild_errors) && !empty($guild_errors2)) {
 | 
				
			||||||
	$twig->display('error_box.html.twig', array('errors' => $errors2));
 | 
						$twig->display('error_box.html.twig', array('errors' => $guild_errors2));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	echo '<br/><div style="text-align:center"><form action="' . getLink('guilds') . '?guild='.$guild->getName().'&action=pass_leadership" method="post">' . $twig->render('buttons.back.html.twig') . '</form></div>';
 | 
						echo '<br/><div style="text-align:center"><form action="' . getLink('guilds') . '?guild='.$guild->getName().'&action=pass_leadership" method="post">' . $twig->render('buttons.back.html.twig') . '</form></div>';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
if(!empty($errors)) {
 | 
					if(!empty($guild_errors)) {
 | 
				
			||||||
	if(!empty($errors2)) {
 | 
						if(!empty($guild_errors2)) {
 | 
				
			||||||
		$errors = array_merge($errors, $errors2);
 | 
							$guild_errors = array_merge($guild_errors, $guild_errors2);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	$twig->display('error_box.html.twig', array('errors' => $errors));
 | 
						$twig->display('error_box.html.twig', array('errors' => $guild_errors));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	echo '<br/><div style="text-align:center"><form action="' . getLink('guilds') . '" method="post">' . $twig->render('buttons.back.html.twig') . '</form></div>';
 | 
						echo '<br/><div style="text-align:center"><form action="' . getLink('guilds') . '" method="post">' . $twig->render('buttons.back.html.twig') . '</form></div>';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,7 +31,7 @@ if(empty($errors)) {
 | 
				
			|||||||
		$rank_list = $guild->getGuildRanksList();
 | 
							$rank_list = $guild->getGuildRanksList();
 | 
				
			||||||
		$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
							$rank_list->orderBy('level', POT::ORDER_DESC);
 | 
				
			||||||
		$guild_leader = false;
 | 
							$guild_leader = false;
 | 
				
			||||||
		$account_players = $account_logged->getPlayersList();
 | 
							$account_players = $account_logged->getPlayers();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		foreach($account_players as $player) {
 | 
							foreach($account_players as $player) {
 | 
				
			||||||
			if($guild_leader_char->getId() == $player->getId()) {
 | 
								if($guild_leader_char->getId() == $player->getId()) {
 | 
				
			||||||
@@ -61,7 +61,6 @@ if(empty($errors)) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				$rank->save();
 | 
									$rank->save();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					 | 
				
			||||||
			//show errors or redirect
 | 
								//show errors or redirect
 | 
				
			||||||
			if(empty($errors)) {
 | 
								if(empty($errors)) {
 | 
				
			||||||
				header("Location: " . getLink('guilds') . "?action=manager&guild=".$guild->getName());
 | 
									header("Location: " . getLink('guilds') . "?action=manager&guild=".$guild->getName());
 | 
				
			||||||
@@ -74,10 +73,10 @@ if(empty($errors)) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$errors[] = "You are not logged. You can't manage guild.";
 | 
							$errors[] = 'You are not logged. You can\'t manage guild.';
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(!empty($errors)) {
 | 
					if(!empty($errors)) {
 | 
				
			||||||
	$twig->display('error_box.html.twig', ['errors' => $errors]);
 | 
						$twig->display('error_box.html.twig', array('errors' => $errors));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,18 +16,19 @@ $title = 'Guilds';
 | 
				
			|||||||
require __DIR__ . '/base.php';
 | 
					require __DIR__ . '/base.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
					$guild_name = isset($_REQUEST['guild']) ? urldecode($_REQUEST['guild']) : null;
 | 
				
			||||||
if(!Validator::guildName($guild_name)) {
 | 
					if(!Validator::guildName($guild_name))
 | 
				
			||||||
	$errors[] = Validator::getLastError();
 | 
						$errors[] = Validator::getLastError();
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(empty($errors)) {
 | 
					if(empty($errors))
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
	$guild = new OTS_Guild();
 | 
						$guild = new OTS_Guild();
 | 
				
			||||||
	$guild->find($guild_name);
 | 
						$guild->find($guild_name);
 | 
				
			||||||
	if(!$guild->isLoaded())
 | 
						if(!$guild->isLoaded())
 | 
				
			||||||
		$errors[] = 'Guild with name <b>'.$guild_name.'</b> doesn\'t exist.';
 | 
							$errors[] = 'Guild with name <b>'.$guild_name.'</b> doesn\'t exist.';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if(!empty($errors)) {
 | 
					if(!empty($errors))
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
	$twig->display('error_box.html.twig', array('errors' => $errors));
 | 
						$twig->display('error_box.html.twig', array('errors' => $errors));
 | 
				
			||||||
	$twig->display('guilds.back_button.html.twig');
 | 
						$twig->display('guilds.back_button.html.twig');
 | 
				
			||||||
	return;
 | 
						return;
 | 
				
			||||||
@@ -46,8 +47,9 @@ $level_in_guild = 0;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
$players_from_account_in_guild = array();
 | 
					$players_from_account_in_guild = array();
 | 
				
			||||||
$players_from_account_ids = array();
 | 
					$players_from_account_ids = array();
 | 
				
			||||||
if($logged) {
 | 
					if($logged)
 | 
				
			||||||
	$account_players = $account_logged->getPlayersList();
 | 
					{
 | 
				
			||||||
 | 
						$account_players = $account_logged->getPlayers();
 | 
				
			||||||
	foreach($account_players as $player)
 | 
						foreach($account_players as $player)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		$players_from_account_ids[] = $player->getId();
 | 
							$players_from_account_ids[] = $player->getId();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,11 +18,8 @@ defined('MYAAC') or die('Direct access not allowed!');
 | 
				
			|||||||
$title = 'Highscores';
 | 
					$title = 'Highscores';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$settingHighscoresCountryBox = setting('core.highscores_country_box');
 | 
					$settingHighscoresCountryBox = setting('core.highscores_country_box');
 | 
				
			||||||
if(config('account_country') && $settingHighscoresCountryBox) {
 | 
					if(config('account_country') && $settingHighscoresCountryBox)
 | 
				
			||||||
	require SYSTEM . 'countries.conf.php';
 | 
						require SYSTEM . 'countries.conf.php';
 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
$highscoresTTL = setting('core.highscores_cache_ttl');
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
$list = urldecode($_GET['list'] ?? 'experience');
 | 
					$list = urldecode($_GET['list'] ?? 'experience');
 | 
				
			||||||
$page = $_GET['page'] ?? 1;
 | 
					$page = $_GET['page'] ?? 1;
 | 
				
			||||||
@@ -143,7 +140,7 @@ $needReCache = true;
 | 
				
			|||||||
$cacheKey = 'highscores_' . $skill . '_' . $vocation . '_' . $page . '_' . $configHighscoresPerPage;
 | 
					$cacheKey = 'highscores_' . $skill . '_' . $vocation . '_' . $page . '_' . $configHighscoresPerPage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$cache = Cache::getInstance();
 | 
					$cache = Cache::getInstance();
 | 
				
			||||||
if ($cache->enabled() && $highscoresTTL > 0) {
 | 
					if ($cache->enabled()) {
 | 
				
			||||||
	$tmp = '';
 | 
						$tmp = '';
 | 
				
			||||||
	if ($cache->fetch($cacheKey, $tmp)) {
 | 
						if ($cache->fetch($cacheKey, $tmp)) {
 | 
				
			||||||
		$highscores = unserialize($tmp);
 | 
							$highscores = unserialize($tmp);
 | 
				
			||||||
@@ -217,8 +214,8 @@ if (empty($highscores)) {
 | 
				
			|||||||
	})->toArray();
 | 
						})->toArray();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if ($highscoresTTL > 0 && $cache->enabled() && $needReCache) {
 | 
					if ($cache->enabled() && $needReCache) {
 | 
				
			||||||
	$cache->set($cacheKey, serialize($highscores), $highscoresTTL * 60);
 | 
						$cache->set($cacheKey, serialize($highscores), setting('core.highscores_cache_ttl') * 60);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$show_link_to_next_page = false;
 | 
					$show_link_to_next_page = false;
 | 
				
			||||||
@@ -281,10 +278,6 @@ if(setting('core.highscores_frags')) {
 | 
				
			|||||||
if(setting('core.highscores_balance'))
 | 
					if(setting('core.highscores_balance'))
 | 
				
			||||||
	$types['balance'] = 'Balance';
 | 
						$types['balance'] = 'Balance';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if ($highscoresTTL > 0 && $cache->enabled()) {
 | 
					 | 
				
			||||||
	echo '<small>*Note: Highscores are updated every' . ($highscoresTTL > 1 ? ' ' . $highscoresTTL : '') . ' minute' . ($highscoresTTL > 1 ? 's' : '') . '.</small><br/><br/>';
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/** @var Twig\Environment $twig */
 | 
					/** @var Twig\Environment $twig */
 | 
				
			||||||
$twig->display('highscores.html.twig', [
 | 
					$twig->display('highscores.html.twig', [
 | 
				
			||||||
	'highscores' => $highscores,
 | 
						'highscores' => $highscores,
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user