1<?php
2 if (!defined('ZNOTE_OS')) {
3 $isWindows = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
4 define('ZNOTE_OS', ($isWindows) ? 'WINDOWS' : 'LINUX');
5 }
6
7 // Optional item browser page.
8 $config['items'] = false;
9
10 // Server engine: TFS_02, TFS_03, OTHIRE, TFS_10, TFS_16, CANARY or BLACKTEK.
11 $config['ServerEngine'] = 'TFS_10';
12 $config['CustomVersion'] = false;
13
14 // Maintenance mode. Both are editable from Admin Panel > Settings, which is
15 // the normal way to use them - visitors see the message, admins keep full
16 // access so you can still work on the site while it is closed.
17 $config['maintenance'] = false;
18 $config['maintenance_message'] = 'The website is down for maintenance. Please come back shortly.';
19
20 $config['site_title'] = 'ZnoteX';
21 $config['site_title_context'] = 'Because open communities are good communities. :3';
22 $config['site_url'] = "https://opengamescommunity.com";
23
24 // Server data folder path, without trailing slash.
25 $config['server_path'] = '';
26
27 // -------- \\
28 // DATABASE \\
29 // -------- \\
30
31 $config['sqlUser'] = 'tfs13';
32 $config['sqlPassword'] = 'tfs13';
33 $config['sqlDatabase'] = 'tfs13';
34 $config['sqlHost'] = '127.0.0.1';
35
36 // -------------------------- \\
37 // CORE WEBSITE SETTINGS \\
38 // -------------------------- \\
39
40 $config['client'] = 1098;
41 $config['client_download'] = 'http://tibiaclient.otslist.eu/download/tibia'. $config['client'] .'.exe';
42 $config['client_download_linux'] = 'http://tibiaclient.otslist.eu/download/tibia'. $config['client'] .'.tgz';
43 $config['downloads'] = array(
44 'entries' => array(
45 array('key' => 'windows_client', 'label' => 'Windows Client', 'section' => 'official', 'enabled' => true, 'url' => '', 'image' => '', 'description' => ''),
46 array('key' => 'linux_client', 'label' => 'Linux Client', 'section' => 'unsupported', 'enabled' => true, 'url' => '', 'image' => '', 'description' => ''),
47 array('key' => 'macos_client', 'label' => 'MacOS Client', 'section' => 'unsupported', 'enabled' => false, 'url' => '', 'image' => '', 'description' => ''),
48 array('key' => 'android_client', 'label' => 'Android Client', 'section' => 'unsupported', 'enabled' => false, 'url' => '', 'image' => '', 'description' => ''),
49 array('key' => 'ios_client', 'label' => 'iOS Client', 'section' => 'unsupported', 'enabled' => false, 'url' => '', 'image' => '', 'description' => ''),
50 array('key' => 'bot', 'label' => 'Bot', 'section' => 'tools', 'enabled' => false, 'url' => '', 'image' => '', 'description' => ''),
51 array('key' => 'minimap', 'label' => 'Minimap', 'section' => 'tools', 'enabled' => false, 'url' => '', 'image' => '', 'description' => ''),
52 array('key' => 'custom_1', 'label' => 'Custom Download 1', 'section' => 'custom', 'enabled' => false, 'url' => '', 'image' => '', 'description' => ''),
53 array('key' => 'custom_2', 'label' => 'Custom Download 2', 'section' => 'custom', 'enabled' => false, 'url' => '', 'image' => '', 'description' => ''),
54 array('key' => 'custom_3', 'label' => 'Custom Download 3', 'section' => 'custom', 'enabled' => false, 'url' => '', 'image' => '', 'description' => ''),
55 array('key' => 'custom_4', 'label' => 'Custom Download 4', 'section' => 'custom', 'enabled' => false, 'url' => '', 'image' => '', 'description' => ''),
56 array('key' => 'custom_5', 'label' => 'Custom Download 5', 'section' => 'custom', 'enabled' => false, 'url' => '', 'image' => '', 'description' => ''),
57 ),
58 );
59
60 // Editable from Admin Panel > Settings > Content. Starts with a few
61 // generic questions about the site itself; replace them with whatever
62 // fits your server.
63 $config['faq'] = array(
64 'entries' => array(
65 array(
66 'question' => 'What is this website?',
67 'answer' => 'This is the official website for our Open Tibia server, built with ZnoteX. Here you can create an account, download the client, check the highscores, read the news and manage everything about your characters.',
68 ),
69 array(
70 'question' => 'How do I start playing?',
71 'answer' => 'Download the client from the Downloads page, create a free account, create a character, then log in with the client using your account name and password.',
72 ),
73 array(
74 'question' => 'I forgot my password, what do I do?',
75 'answer' => 'Use the "Forgot password" link on the login page to recover access to your account.',
76 ),
77 array(
78 'question' => 'How can I support the server?',
79 'answer' => 'Check the Shop page - donations there help keep the server running and usually come with in-game rewards.',
80 ),
81 array(
82 'question' => 'I found a bug or need help, who do I contact?',
83 'answer' => 'Open a ticket on the Support page, or reach out to a staff member listed on the Team page.',
84 ),
85 ),
86 );
87
88 $config['port'] = 7171;
89 $config['account_create_premdays'] = 0;
90
91 $config['status'] = array(
92 'status_check' => false,
93 'status_ip' => '127.0.0.1',
94 'status_port' => '7171',
95 );
96
97 $config['login_web_service'] = true;
98 $config['gameserver'] = array(
99 'ip' => '127.0.0.1',
100 'port' => 7172,
101 'name' => 'Forgotten'
102 );
103
104 // Site language. Falls back to the visitor's browser language, then to this.
105 $config['language'] = 'en';
106
107 // Which flags the language switcher offers. Codes: en, pt_br, es, pl, de.
108 $config['languages_enabled'] = array('en', 'pt_br', 'es', 'pl', 'de');
109
110 // Show the switcher on every theme. Off means only themes that place it.
111 $config['language_selector'] = true;
112
113 // Login web service payload: auto, 11, 12, 13 or 15. auto follows $config['client'].
114 $config['login_protocol'] = 'auto';
115
116 // Canary only. Must match authType in your config.lua: password or session.
117 $config['login_auth_type'] = 'password';
118 $config['login_session_ttl'] = 86400;
119
120 $config['page_admin_access'] = array(
121 'firstaccountName',
122 'secondaccountName',
123 );
124
125 // Optional least-privilege access to the admin panel. Existing entries in
126 // page_admin_access remain owners with unrestricted access. Keys are account
127 // names (or account IDs on OTHIRE); values may contain: auditor, content,
128 // moderator, support, economy and ops. Example:
129 // $config['page_admin_roles']['Helper'] = array('moderator', 'support');
130 $config['page_admin_roles'] = array();
131
132 // Outfit images.
133 $config['show_outfits'] = array(
134 'shop' => true,
135 'highscores' => true,
136 'characterprofile' => true,
137 'onlinelist' => true,
138 'imageServer' => 'https://outfit-images.ots.me/1285/animoutfit.php'
139 );
140
141 // Shop offers are managed from Admin Panel > Shop Manager.
142 $config['shop'] = array(
143 'enabled' => true,
144 'loginToView' => false,
145 'enableShopConfirmation' => true,
146 'showImage' => true,
147 // Item images.
148 'imageServer' => 'items.znote.eu',
149 'imageType' => 'gif',
150 );
151
152 // Vocation IDs, names and which vocation ID they got promoted from
153 $config['vocations'] = array(
154 0 => array(
155 'name' => 'No vocation',
156 'fromVoc' => false
157 ),
158 1 => array(
159 'name' => 'Sorcerer',
160 'fromVoc' => false
161 ),
162 2 => array(
163 'name' => 'Druid',
164 'fromVoc' => false
165 ),
166 3 => array(
167 'name' => 'Paladin',
168 'fromVoc' => false
169 ),
170 4 => array(
171 'name' => 'Knight',
172 'fromVoc' => false
173 ),
174 5 => array(
175 'name' => 'Master Sorcerer',
176 'fromVoc' => 1
177 ),
178 6 => array(
179 'name' => 'Elder Druid',
180 'fromVoc' => 2
181 ),
182 7 => array(
183 'name' => 'Royal Paladin',
184 'fromVoc' => 3
185 ),
186 8 => array(
187 'name' => 'Elite Knight',
188 'fromVoc' => 4
189 ),
190 // -- MONK (Tibia 2025 summer update) --
191 /*
192 9 => array(
193 'name' => 'Monk',
194 'fromVoc' => false
195 ),
196 10 => array(
197 'name' => 'Exalted Monk',
198 'fromVoc' => 9
199 )
200 */
201 );
202
203 /* Vocation stat gains per level
204 - Ordered by vocation ID
205 - Currently used for admin_skills page. */
206 $config['vocations_gain'] = array(
207 0 => array(
208 'hp' => 5,
209 'mp' => 5,
210 'cap' => 10
211 ),
212 1 => array(
213 'hp' => 5,
214 'mp' => 30,
215 'cap' => 10
216 ),
217 2 => array(
218 'hp' => 5,
219 'mp' => 30,
220 'cap' => 10
221 ),
222 3 => array(
223 'hp' => 10,
224 'mp' => 15,
225 'cap' => 20
226 ),
227 4 => array(
228 'hp' => 15,
229 'mp' => 5,
230 'cap' => 25
231 ),
232 5 => array(
233 'hp' => 5,
234 'mp' => 30,
235 'cap' => 10
236 ),
237 6 => array(
238 'hp' => 5,
239 'mp' => 30,
240 'cap' => 10
241 ),
242 7 => array(
243 'hp' => 10,
244 'mp' => 15,
245 'cap' => 20
246 ),
247 8 => array(
248 'hp' => 15,
249 'mp' => 5,
250 'cap' => 25
251 ),
252 // -- MONK (Tibia 2025 summer update) --
253 /*
254 9 => array(
255 'hp' => 10,
256 'mp' => 10,
257 'cap' => 25
258 ),
259 10 => array(
260 'hp' => 10,
261 'mp' => 10,
262 'cap' => 25
263 ),
264 */
265 );
266 // Town ids and names: (In RME map editor, open map, click CTRL + T to view towns, their names and their IDs.
267 // townID => 'townName' ex: [1 => 'Rookgaard']
268 $config['towns'] = array(
269 1 => 'Rookgaard',
270 2 => 'Rookgaard Tutorial Island',
271 3 => 'Island Of Destiny',
272 4 => 'Dawnport',
273 5 => "Ab'Dendriel",
274 6 => 'Carlin',
275 7 => 'Kazordoon',
276 8 => 'Thais',
277 9 => 'Venore',
278 10 => 'Ankrahmun',
279 11 => 'Edron',
280 12 => 'Farmine',
281 13 => 'Darashia',
282 14 => 'Liberty Bay',
283 15 => 'Port Hope',
284 16 => 'Svargrond',
285 17 => 'Yalahar',
286 18 => 'Gray Beach',
287 19 => 'Krailos',
288 20 => 'Rathleton',
289 21 => 'Roshamuul',
290 22 => 'Issavi'
291 );
292
293 // ---------------- \\
294 // Create Character \\
295 // ---------------- \\
296
297 // Max characters on each account:
298 $config['max_characters'] = 7;
299
300 // Available character vocation users can choose (specify vocation ID).
301 // Add 9 for Monk if your server has it: array(1, 2, 3, 4, 9);
302 $config['available_vocations'] = array(1, 2, 3, 4);
303
304 // Available towns (specify town ids, etc: (1, 2, 3); to display 3 town options (town id 1, 2 and 3).
305 // Town IDs are the ones from $config['towns'] array
306 $config['available_towns'] = array(6, 7, 8, 9);
307
308 $config['player'] = array(
309 'base' => array(
310 'level' => 8,
311 'health' => 185,
312 'mana' => 90,
313 'cap' => 470,
314 'soul' => 100
315 ),
316 // Health, mana cap etc are calculated with $config['vocations_gain'] and 'base' values of $config['player']
317 'create' => array(
318 'level' => 8,
319 'novocation' => array( // Vocation id 0 (No vocation) special settings
320 'level' => 1,
321 'forceTown' => true,
322 'townId' => 1
323 ),
324 'skills' => array( // See $config['vocations'] for proper vocation names of these IDs
325 // No vocation
326 0 => array(
327 'magic' => 0,
328 'fist' => 10,
329 'club' => 10,
330 'axe' => 10,
331 'sword' => 10,
332 'dist' => 10,
333 'shield' => 10,
334 'fishing' => 10,
335 ),
336 // Sorcerer
337 1 => array(
338 'magic' => 0,
339 'fist' => 10,
340 'club' => 10,
341 'axe' => 10,
342 'sword' => 10,
343 'dist' => 10,
344 'shield' => 10,
345 'fishing' => 10,
346 ),
347 // Druid
348 2 => array(
349 'magic' => 0,
350 'fist' => 10,
351 'club' => 10,
352 'axe' => 10,
353 'sword' => 10,
354 'dist' => 10,
355 'shield' => 10,
356 'fishing' => 10,
357 ),
358 // Paladin
359 3 => array(
360 'magic' => 0,
361 'fist' => 10,
362 'club' => 10,
363 'axe' => 10,
364 'sword' => 10,
365 'dist' => 10,
366 'shield' => 10,
367 'fishing' => 10,
368 ),
369 // Knight
370 4 => array(
371 'magic' => 0,
372 'fist' => 10,
373 'club' => 10,
374 'axe' => 10,
375 'sword' => 10,
376 'dist' => 10,
377 'shield' => 10,
378 'fishing' => 10,
379 ),
380 // -- MONK (Tibia 2025 summer update) --
381 /*
382 9 => array(
383 'magic' => 0,
384 'fist' => 10,
385 'club' => 10,
386 'axe' => 10,
387 'sword' => 10,
388 'dist' => 10,
389 'shield' => 10,
390 'fishing' => 10,
391 ),
392 */
393 ),
394 'male_outfit' => array(
395 'id' => 128,
396 'head' => 78,
397 'body' => 68,
398 'legs' => 58,
399 'feet' => 76
400 ),
401 'female_outfit' => array(
402 'id' => 136,
403 'head' => 78,
404 'body' => 68,
405 'legs' => 58,
406 'feet' => 76
407 )
408 )
409 );
410
411 // Minimum allowed letters in character name. Ex: 4 letters: "Kare".
412 $config['minL'] = 3;
413 // Maximum allowed letters in character name. Ex: 20 letters: "Bobkareolesofiesberg"
414 $config['maxL'] = 20;
415 // Maximum allowed words in character name. Ex: 2 words = "Bob Kare", 3 words: "Bob Arne Kare" as maximum char name words.
416 $config['maxW'] = 3;
417
418 //////////
419 /// Let players sell, buy and bid on characters.
420 /// Creates a deeper shop economy, encourages players to spend more money in shop for points.
421 /// Pay to win/progress mechanic, but also lets people who can barely afford points to gain it
422 /// by leveling characters to sell. It can also discourages illegal/risky third-party account
423 /// services. Since players can buy officially & support the server, dodgy competitors have to sell for cheaper.
424 /// Without admin interference this is organic to each individual community economy inflation.
425 //////////
426 $config['shop_auction'] = array(
427 'characterAuction' => false, // Enable/disable this system
428 // Account ID of the account that stores players in the auction.
429 // Make sure storage account has a very secure password!
430 'storage_account_id' => 500000, // Separate secure account ID, not your GM.
431 'step' => 5, // Minimum amount someone can raise a bid by
432 'step_duration' => 1 * 60 * 60, // When bidding over someone else, extend bid period by 1 hour.
433 'lowestLevel' => 20, // Minimum level of sold character
434 'lowestPrice' => 10, // Lowest donation points a char can be sold for.
435 'biddingDuration' => 1 * 24 * 60 * 60, // = 1 day, 0 to disable bidding
436 'deposit' => 10 // Seller has to add 10=10% deposit to auction which he gets back later.
437 );
438
439 // Two-factor authentication requires TFS 1.2+.
440 $config['twoFactorAuthenticator'] = false;
441
442 // Website 2FA v2 - independent of the game engine. Stores everything in
443 // znote_2fa* tables, so it works the same on TFS, Canary, otHire or BlackTek.
444 $config['twoFactorV2'] = array(
445 'enabled' => false,
446 'email_otp_enabled' => true, // Lets a player receive a one-time code by e-mail instead of using an authenticator app. Requires mailserver to be configured.
447 'force_admins' => false, // Accounts with panel access (page_admin_access) must set up 2FA v2 before they can use the account.
448 'recovery_codes_count' => 10,
449 'trusted_device_days' => 30, // "Remember this device" duration. 0 disables the option.
450 );
451
452 // Login attempt tracking / IP lockout. Every attempt is logged; an IP that
453 // fails too many times within the window is locked out for a while.
454 $config['login_guard'] = array(
455 'enabled' => true,
456 'threshold' => 5, // Failed attempts allowed in the window below before an IP is locked out.
457 'window_minutes' => 15, // How far back failed attempts are counted.
458 'lockout_minutes' => 15, // How long a locked-out IP has to wait.
459 );
460
461 function getClock($time = false, $format = false, $adjust = true) {
462 if ($time === false) $time = time();
463 $date = "d F Y (H:i)";
464 if ($adjust) $adjust = (1 * 3600);
465 else $adjust = 0;
466 if ($format) return date($date, $time+$adjust);
467 else return $time+$adjust;
468 }
469
470 // --------------- \\
471 // SECURITY STUFF \\
472 // --------------- \\
473 $config['use_token'] = false;
474 // Set up captcha keys on https://www.google.com/recaptcha/
475 $config['use_captcha'] = false;
476 $config['captcha_site_key'] = "Site key";
477 $config['captcha_secret_key'] = "Secret key";
478 $config['captcha_use_curl'] = false; // Set to false if you don't have cURL installed, otherwise set it to true
479
480 // Session prefix, if you are hosting multiple sites, make the session name different to avoid conflict.
481 $config['session_prefix'] = 'znote_';
482
483 $config['session'] = array(
484 'cookie_secure' => null, // If you use Cloudflare or reverse proxy that listen http with apache use true here
485 'cookie_samesite' => 'Lax',
486 'cookie_path' => '/',
487 'cookie_domain' => '',
488 'cookie_lifetime' => 0,
489 );
490
491 // Runtime and browser hardening. Keep HSTS disabled until the public domain
492 // is permanently available over HTTPS; browsers remember that choice.
493 $config['security'] = array(
494 'display_errors' => false,
495 'show_database_errors' => false,
496 'headers_enabled' => true,
497 'content_type_options' => true,
498 'frame_options' => 'SAMEORIGIN',
499 'referrer_policy' => 'strict-origin-when-cross-origin',
500 'permissions_policy' => 'camera=(), microphone=(), geolocation=(), browsing-topics=()',
501 'content_security_policy' => "frame-ancestors 'self'; object-src 'none'; base-uri 'self'",
502 'cross_domain_policy' => true,
503 'hsts' => false,
504 'hsts_max_age' => 31536000,
505 'hsts_include_subdomains' => false,
506 );
507
508 // TFS 1.x powergamers and top online
509 // Before enabling powergamers, make sure that you have added Lua files and added the SQL columns to your server db.
510 // files can be found at Lua folder.
511 $config['powergamers'] = array(
512 'enabled' => false, // Enable or disable page
513 'limit' => 20, // Number of players that it will show.
514 );
515
516 $config['toponline'] = array(
517 'enabled' => false, // Enable or disable page
518 'limit' => 20, // Number of players that it will show.
519 );
520
521 // -- HOUSE AUCTION SYSTEM! (TFS 1.x, TFS 1.6 and Canary)
522 // Not available on OTHIRE, TFS_02 or TFS_03: those schemas have no auction
523 // columns on `houses`. Canary names them differently (internal_bid,
524 // bid_end_date, highest_bid, bidder); houseCol()/houseSelect() in
525 // engine/function/general.php map them, so nothing here changes per engine.
526 $config['houseConfig'] = array(
527 'HouseListDefaultTown' => 8, // Default town id to display when visting house list page page.
528 'minimumBidSQM' => 200, // Minimum bid cost on auction (per SQM)
529 'auctionPeriod' => 24 * 60 * 60, // 24 hours auction time.
530 'housesPerPlayer' => 1,
531 'requirePremium' => false,
532 'levelToBuyHouse' => 8,
533 // Instant buy with shop points
534 'shopPoints' => array(
535 'enabled' => true,
536 // SQM count => points cost
537 'cost' => array(
538 1 => 10,
539 25 => 15,
540 60 => 25,
541 100 => 30,
542 200 => 40,
543 300 => 50,
544 ),
545 ),
546 );
547
548 // Leave on black square in map and player should get teleported to their selected town.
549 // If chars get buggy set this position to a beginner location to force players there.
550 $config['default_pos'] = array(
551 'x' => 5,
552 'y' => 5,
553 'z' => 2,
554 );
555
556 $config['war_status'] = array(
557 0 => 'Pending',
558 1 => 'Accepted',
559 2 => 'Rejected',
560 3 => 'Canceled',
561 4 => 'Ended by kill limit',
562 5 => 'Ended',
563 );
564
565 /* -- SUB PAGES --
566 Some custom layouts/templates have custom pages, they can use
567 this sub page functionality for that.
568 */
569 $config['allowSubPages'] = true;
570
571 // -------------- \\
572 // WEBSITE STUFF \\
573 // -------------- \\
574
575 // News to be displayed per page
576 $config['news_per_page'] = 5;
577
578 // Enable or disable changelog ticker in news page.
579 $config['UseChangelogTicker'] = true;
580
581 $config['credits_enabled'] = true;
582
583 $config['queststatus_enabled'] = false;
584
585 $config['contact_info'] = '';
586
587 // Highscore configuration
588 $config['highscore'] = array(
589 'rows' => 100,
590 'rowsPerPage' => 20,
591 'ignoreGroupId' => 2, // Ignore this and higher group ids (staff)
592 );
593
594 // ONLY FOR TFS 0.2 (TFS 0.3/4 users don't need to care about this, as its fully loaded from db)
595 $config['house'] = array(
596 'house_file' => 'C:\test\Mystic Spirit_0.2.5\data\world\forgotten-house.xml',
597 'price_sqm' => '50', // price per house sqm
598 );
599
600 $config['delete_character_interval'] = '3 DAY'; // Delay after user character delete request is executed, ex: 1 DAY, 2 HOUR, 3 MONTH etc.
601
602 $config['validate_IP'] = false;
603 $config['salt'] = false;
604
605 // Use guild logo system
606 $config['use_guild_logos'] = true;
607
608 // Use country flags
609 $config['country_flags'] = array(
610 'enabled' => true,
611 'highscores' => true,
612 'onlinelist' => true,
613 'characterprofile' => true,
614 'server' => 'http://flag.znote.eu'
615 );
616
617 // Show advanced inventory data in character profile
618 $config['EQ_shower'] = array(
619 'enabled' => true,
620 'equipment' => true,
621 'skills' => true,
622 'outfits' => true,
623 // Player storage (storage_value + outfitId)
624 // used to see if player has outfit.
625 // see Lua scripts folder for otserv code
626 'storage_value' => 10000
627 );
628
629 // Level requirement to create guild? (Just set it to 1 to allow all levels).
630 $config['create_guild_level'] = 8;
631
632 // Change Gender can be purchased in shop, or perhaps you want to allow everyone to change gender for free?
633 $config['free_sex_change'] = false;
634
635 // Do you need to have premium account to create a guild?
636 $config['guild_require_premium'] = true;
637
638 // There is a TFS 1.3 bug related to guild nicks
639 // https://github.com/otland/forgottenserver/issues/2561
640 // So if your using TFS 1.x, you might need to disable guild nicks until the crash has been fixed.
641 $config['guild_allow_nicknames'] = true;
642
643 $config['guildwar_enabled'] = false;
644
645 // Use htaccess rewrite? (basically this makes website.com/username work instead of website.com/characterprofile.php?name=username
646 // Linux users needs to enable mod_rewrite php extention to make it work properly, so set it to false if your lost and using Linux.
647 $config['htwrite'] = true;
648
649 // Unlock all protocol 12 client features? Free premium in config.lua? Then set this to true.
650 $config['freePremium'] = false;
651
652 // How often do you want highscores (cache) to update?
653 $config['cache'] = array(
654 // If you have two instances installed on same server, make each instance prefix unique
655 'prefix' => 'znote_',
656 // 60 * 15; // 15 minutes.
657 'lifespan' => 5,
658 // Store cache in memory/RAM? Requires PHP extension APCu
659 'memory' => true
660 );
661
662 // Built-in FORUM
663 // Enable forum, enable guildboards, level to create threads/post in them
664 // How long do they have to wait to create thread or post?
665 // How to design/display hidden/closed/sticky threads.
666 $config['forum'] = array(
667 'enabled' => true,
668 // Images allowed per post. 0 blocks images entirely.
669 'maxImagesPerPost' => 1,
670 'outfit_avatars' => true, // Show character outfit as forum avatar?
671 'player_position' => true, // Show character position? ex: Tutor, Community Manager, God
672 'guildboard' => true,
673 'level' => 5,
674 'cooldownPost' => 1, // 60,
675 'cooldownCreate' => 1, // 180,
676 'newPostsBumpThreads' => true,
677 'hidden' => '<font color="orange">[H]</font>',
678 'closed' => '<font color="red">[C]</font>',
679 'sticky' => '<font color="green">[S]</font>',
680 );
681
682 // Guilds and guild war pages will do lots of queries on bigger databases.
683 // So its recommended to require login to view them, but you can disable this
684 // If you don't have any problems with load.
685 $config['require_login'] = array(
686 'guilds' => false,
687 'guildwars' => false,
688 );
689
690 // IMPORTANT! Write a character name(that exist) that will represent website bans!
691 // Or remember to create character named "God Website".
692 // If you don't do this, ban from admin panel won't work properly.
693 $config['website_char'] = 'God Website';
694
695 // ---------------- \\
696 // ADVANCED STUFF \\
697 // ---------------- \\
698 // API config
699 $config['api'] = array(
700 'debug' => false,
701 );
702
703 // website.com/gallery.php
704 // website.com/admin/index.php?p=gallery
705 // we use imgur as image host, and need to register app with them and add client/secret id.
706 // https://github.com/Znote/ZnoteAAC/wiki/IMGUR-powered-Gallery-page
707 $config['gallery'] = array(
708 'Client Name' => 'ZnoteAAC-Gallery',
709 'Client ID' => '4dfcdc4f2cabca6',
710 'Client Secret' => '697af737777c99a8c0be07c2f4419aebb2c48ac5'
711 );
712
713 // Email Server configurations (SMTP)
714 /* Please consider using a released stable version of PHPMailer or you may run into issues.
715 Download PHPMailer: https://github.com/PHPMailer/PHPMailer/releases
716 Extract to ZnoteX directory (where this config.php file is located)
717 Rename the folder to "PHPMailer". Then configure this with your SMTP mail settings from your email provider.
718 */
719 $config['mailserver'] = array(
720 'register' => false, // Send activation mail
721 'accountRecovery' => false, // Recover username or password through mail
722 'myaccount_verify_email' => false, // Allow user to verify their email in myaccount page
723 'verify_email_points' => 0, // 0 = disabled. Give users points reward for verifying their email
724 'host' => "mailserver.znote.eu", // Outgoing mail server host.
725 'securityType' => 'ssl', // ssl or tls
726 'port' => 465, // SMTP port number - likely to be 465(ssl) or 587(tls)
727 'email' => 'noreply@znote.eu',
728 'username' => 'noreply@znote.eu', // Likely the same as email
729 'password' => 'emailpassword', // The password.
730 'debug' => false, // Enable debugging if you have problems and are looking for errors.
731 'fromName' => $config['site_title'],
732 );
733
734 // Don't touch this unless you know what you are doing. (modifying these (key value) also requires modifications in OT files data/XML/groups.xml).
735 $config['ingame_positions'] = array(
736 1 => 'Player',
737 2 => 'Tutor',
738 3 => 'Senior Tutor',
739 4 => 'Gamemaster',
740 5 => 'Community Manager',
741 6 => 'God',
742 );
743
744 // Enable OS advanced features? false = no, true = yes
745 $config['os_enabled'] = false;
746
747 // What kind of computer are you hosting this website on?
748 // Available options: LINUX or WINDOWS
749 $config['os'] = ZNOTE_OS; // Use 'ZNOTE_OS' to auto-detect
750
751 // Measure how much players are lagging in-game. (Not completed).
752 $config['ping'] = false;
753
754 // BAN STUFF - Don't touch this unless you know what you are doing.
755 // You can order the lines the way you want, from top to bottom, in which order you
756 // wish for them to be displayed in admin panel. Just make sure key[#] represent your description.
757 $config['ban_type'] = array(
758 4 => 'NOTATION_ACCOUNT',
759 2 => 'NAMELOCK_PLAYER',
760 3 => 'BAN_ACCOUNT',
761 5 => 'DELETE_ACCOUNT',
762 1 => 'BAN_IPADDRESS',
763 );
764
765 // BAN STUFF - Don't touch this unless you know what you are doing.
766 // You can order the lines the way you want, from top to bot, in which order you
767 // wish for them to be displayed in admin panel. Just make sure key[#] represent your description.
768 $config['ban_action'] = array(
769 0 => 'Notation',
770 1 => 'Name Report',
771 2 => 'Banishment',
772 3 => 'Name Report + Banishment',
773 4 => 'Banishment + Final Warning',
774 5 => 'NR + Ban + FW',
775 6 => 'Statement Report',
776 );
777
778 // Ban reasons, for changes beside default values to work with client,
779 // you also need to edit sources (https://github.com/otland/forgottenserver/blob/master/src/enums.h#L29)
780 $config['ban_reason'] = array(
781 0 => 'Offensive Name',
782 1 => 'Invalid Name Format',
783 2 => 'Unsuitable Name',
784 3 => 'Name Inciting Rule Violation',
785 4 => 'Offensive Statement',
786 5 => 'Spamming',
787 6 => 'Illegal Advertising',
788 7 => 'Off-Topic Public Statement',
789 8 => 'Non-English Public Statement',
790 9 => 'Inciting Rule Violation',
791 10 => 'Bug Abuse',
792 11 => 'Game Weakness Abuse',
793 12 => 'Using Unofficial Software to Play',
794 13 => 'Hacking',
795 14 => 'Multi-Clienting',
796 15 => 'Account Trading or Sharing',
797 16 => 'Threatening Gamemaster',
798 17 => 'Pretending to Have Influence on Rule Enforcement',
799 18 => 'False Report to Gamemaster',
800 19 => 'Destructive Behaviour',
801 20 => 'Excessive Unjustified Player Killing',
802 21 => 'Spoiling Auction',
803 );
804
805 // BAN STUFF
806 // Ban time duration selection in admin panel
807 // seconds => description
808 $config['ban_time'] = array(
809 3600 => '1 hour',
810 21600 => '6 hours',
811 43200 => '12 hours',
812 86400 => '1 day',
813 259200 => '3 days',
814 604800 => '1 week',
815 1209600 => '2 weeks',
816 2592000 => '1 month',
817 );
818
819 /* Store visitor data
820 Store visitor data in the database, logging every IP visiting site,
821 and how many times they have visited the site. And sometimes what
822 they do on the site.
823
824 This helps to prevent POST SPAM (like register 1000 accounts in a few seconds)
825 and other things which can stress and slow down the server.
826
827 The only downside is that database can get pretty fed up with much IP data
828 if table never gets flushed once in a while. So I highly recommend you
829 to configure flush_ip_logs if IPs are logged.
830 */
831 $config['log_ip'] = false;
832
833 // Flush IP logs each configured seconds, 60 * 15 = 15 minutes.
834 // Set to false to entirely disable ip log flush.
835 // It is important to flush for optimal performance.
836 $config['flush_ip_logs'] = 59 * 27;
837
838 /* IP SECURTY REQUIRE: $config['log_ip'] = true;
839 Configure how tight this security shall be.
840 Etc: You can max click on anything/refresh page
841 [max activity] 15 times, within time period 10
842 seconds. During time_period, you can also only
843 register 1 account and 1 character.
844 */
845 $config['ip_security'] = array(
846 'time_period' => 10, // In seconds
847 'max_activity' => 10, // page clicks/visits
848 'max_post' => 6, // register, create, highscore, character search and such actions
849 'max_account' => 1, // register
850 'max_character' => 1, // create char
851 'max_forum_post' => 1, // create threads and post in forum
852 );
853
854 // Buy points page. Off hides buypoints.php whichever gateways are configured.
855 $config['buypoints_enabled'] = true;
856
857 //////////////
858 /// PAYPAL ///
859 //////////////
860 // https://www.paypal.com/
861
862 // Write your paypal address here, and what currency you want to receive money in.
863 $config['paypal'] = array(
864 'enabled' => false,
865 'email' => 'edit@me.com', // Example: paypal@mail.com
866 'currency' => 'EUR',
867 'points_per_currency' => 10, // 1 currency = ? points? [ONLY used to calculate bonuses]
868 'success' => "http://".$_SERVER['HTTP_HOST']."/success.php",
869 'failed' => "http://".$_SERVER['HTTP_HOST']."/failed.php",
870 'ipn' => "http://".$_SERVER['HTTP_HOST']."/ipn.php",
871 'showBonus' => true,
872 );
873
874 // Configure the "buy now" buttons prices, first write price, then how many points you get.
875 // Giving some bonus points for higher donations will tempt users to donate more.
876 $config['paypal_prices'] = array(
877 // price => points,
878 1 => 45, // -10% bonus
879 10 => 100, // 0% bonus
880 15 => 165, // +10% bonus
881 20 => 240, // +20% bonus
882 25 => 325, // +30% bonus
883 30 => 420, // +40% bonus
884 );
885
886 //////////////
887 /// STRIPE ///
888 //////////////
889 // https://stripe.com/
890 // Uses hosted Checkout. Points are credited only by payment_webhook.php.
891 $config['stripe'] = array(
892 'enabled' => false,
893 'test_mode' => true,
894 'publishable_key' => '',
895 'secret_key' => '',
896 'webhook_secret' => '',
897 'currency' => 'EUR',
898 'points_per_currency' => 10,
899 'amount_multiplier' => 100, // 100 for EUR/USD/BRL, 1 for zero-decimal currencies.
900 'success' => "http://".$_SERVER['HTTP_HOST']."/success.php",
901 'failed' => "http://".$_SERVER['HTTP_HOST']."/failed.php",
902 'webhook_url' => "http://".$_SERVER['HTTP_HOST']."/payment_webhook.php?provider=stripe",
903 'showBonus' => true,
904 );
905
906 ////////////////////
907 /// MERCADO PAGO ///
908 ////////////////////
909 // https://www.mercadopago.com/
910 // Uses Checkout Pro preferences. Points are credited only by payment_webhook.php.
911 $config['mercadopago'] = array(
912 'enabled' => false,
913 'test_mode' => true,
914 'public_key' => '',
915 'access_token' => '',
916 'webhook_secret' => '',
917 'currency' => 'BRL',
918 'points_per_currency' => 10,
919 'success' => "http://".$_SERVER['HTTP_HOST']."/success.php",
920 'failed' => "http://".$_SERVER['HTTP_HOST']."/failed.php",
921 'webhook_url' => "http://".$_SERVER['HTTP_HOST']."/payment_webhook.php?provider=mercadopago",
922 'showBonus' => true,
923 );
924
925 /////////////////
926 /// PAGSEGURO ///
927 /////////////////
928 // https://pagseguro.uol.com.br/
929
930 // Write your pagseguro address here, and what currency you want to receive money in.
931 $config['pagseguro'] = array(
932 'enabled' => false,
933 'sandbox' => false,
934 'email' => 'edit@me.com', // Example: pagseguro@mail.com
935 'token' => '',
936 'currency' => 'BRL',
937 'product_name' => '',
938 'price' => 100, // 1 real
939 'ipn' => "http://".$_SERVER['HTTP_HOST']."/pagseguro_ipn.php",
940 'urls' => array(
941 'www' => 'pagseguro.uol.com.br',
942 'ws' => 'ws.pagseguro.uol.com.br',
943 'stc' => 'stc.pagseguro.uol.com.br'
944 )
945 );
946
947 if ($config['pagseguro']['sandbox']) {
948 $config['pagseguro']['urls'] = array_map(function ($item) {
949 return str_replace('pagseguro', 'sandbox.pagseguro', $item);
950 }, $config['pagseguro']['urls']);
951 }
952
953 //////////////////
954 /// PAYGOL SMS ///
955 //////////////////
956 // https://www.paygol.com/
957 // !!! Paygol takes 60%~ of the money, and send aprox 40% to your paypal.
958 // You can configure paygol to send each month, then they will send money
959 // to you 1 month after receiving 50+ eur.
960 $config['paygol'] = array(
961 'enabled' => false,
962 'serviceID' => 86648, // Service ID from paygol.com
963 'secretKey' => 'xxxx-xxxx-xxxx-xxxx', // Secret key from paygol.com. Never share your secret key
964 'currency' => 'SEK',
965 'price' => 20,
966 'points' => 20,
967 'name' => '20 points',
968 'returnURL' => "http://".$_SERVER['HTTP_HOST']."/success.php",
969 'cancelURL' => "http://".$_SERVER['HTTP_HOST']."/failed.php"
970 );
971
972 //////////////////////////
973 /// OTServers.eu voting
974 //
975 // Start by creating an account at OTServers.eu and add your server.
976 // You can find your secret token by logging in on OTServers.eu and go to 'MY SERVER' then 'Encourage players to vote'.
977 $config['otservers_eu_voting'] = [
978 'enabled' => false,
979 'simpleVoteUrl' => '', // This url is used if the player isn't logged in.
980 'voteUrl' => 'https://api.otservers.eu/vote_link.php',
981 'voteCheckUrl' => 'https://api.otservers.eu/vote_check.php',
982 'secretToken' => '', // Enter your secret token. Do not share with anyone!
983 'landingPage' => '/voting.php?action=reward', // The user will be redirected to this page after voting
984 'points' => '1' // Amount of points to give as reward
985 ];
986
987 // -------------------- \\
988 // LARGE OPTIONAL LISTS \\
989 // -------------------- \\
990
991 // Achievements example. Add more entries here if achievements are enabled.
992 $config['Ach'] = false;
993 $config['achievements'] = array(
994 35000 => array(
995 'First Dragon',
996 'Rumours say that you will never forget your first Dragon',
997 'points' => '1',
998 'img' => 'https://i.imgur.com/Nk2XDge.gif',
999 ),
1000 );
1001
1002
1003 // ------------------- \\
1004 // CUSTOM SERVER STUFF \\
1005 // ------------------- \\
1006 // Enable / disable Questlog function (true / false)
1007 $config['EnableQuests'] = false;
1008
1009 // array for filling questlog (Questid, max value, name, end of the quest fill 1 for the last part 0 for all others)
1010 $config['quests'] = array(
1011 array(1501,100,"Killing in the Name of",0),
1012 array(1502,150,"Killing in the Name of",0),
1013 array(65001,100,"Killing in the Name of",0),
1014 array(65002,150,"Killing in the Name of",0),
1015 array(65003,300,"Killing in the Name of",0),
1016 array(65004,3,"Killing in the Name of",0),
1017 array(65005,300,"Killing in the Name of",0),
1018 array(65006,150,"Killing in the Name of",0),
1019 array(65007,200,"Killing in the Name of",0),
1020 array(65008,300,"Killing in the Name of",0),
1021 array(65009,300,"Killing in the Name of",0),
1022 array(65010,300,"Killing in the Name of",0),
1023 array(65011,300,"Killing in the Name of",0),
1024 array(65012,300,"Killing in the Name of",0),
1025 array(65013,300,"Killing in the Name of",0),
1026 array(65014,300,"Killing in the Name of",1),
1027 array(12110,2,"The Inquisition",0),
1028 array(12111,7,"The Inquisition",0),
1029 array(12112,3,"The Inquisition",0),
1030 array(12113,6,"The Inquisition",0),
1031 array(12114,3,"The Inquisition",0),
1032 array(12115,3,"The Inquisition",0),
1033 array(12116,3,"The Inquisition",0),
1034 array(12117,5,"The Inquisition",1),
1035 array(330,3,"Sam's Old Backpack",1),
1036 array(12121,3,"The Ape City",0),
1037 array(12122,5,"The Ape City",0),
1038 array(12123,3,"The Ape City",0),
1039 array(12124,3,"The Ape City",0),
1040 array(12125,3,"The Ape City",0),
1041 array(12126,3,"The Ape City",0),
1042 array(12127,4,"The Ape City",0),
1043 array(12128,3,"The Ape City",0),
1044 array(12129,3,"The Ape City",1),
1045 array(12101,1,"The Ancient Tombs",0),
1046 array(12102,1,"The Ancient Tombs",0),
1047 array(12103,1,"The Ancient Tombs",0),
1048 array(12104,1,"The Ancient Tombs",0),
1049 array(12105,1,"The Ancient Tombs",0),
1050 array(12106,1,"The Ancient Tombs",0),
1051 array(12107,1,"The Ancient Tombs",1),
1052 array(12022,3,"Barbarian Test Quest",0),
1053 array(12022,3,"Barbarian Test Quest",0),
1054 array(12022,3,"Barbarian Test Quest",1),
1055 array(12025,3,"The Ice Islands Quest",0),
1056 array(12026,5,"The Ice Islands Quest",0),
1057 array(12027,3,"The Ice Islands Quest",0),
1058 array(12028,2,"The Ice Islands Quest",0),
1059 array(12029,6,"The Ice Islands Quest",0),
1060 array(12030,8,"The Ice Islands Quest",0),
1061 array(12031,3,"The Ice Islands Quest",0),
1062 array(12032,4,"The Ice Islands Quest",0),
1063 array(12033,2,"The Ice Islands Quest",0),
1064 array(12034,2,"The Ice Islands Quest",0),
1065 array(12035,2,"The Ice Islands Quest",0),
1066 array(12036,6,"The Ice Islands Quest",1),
1067 );
1068
1069 // Restricted names
1070 $config['invalidNameTags'] = array(
1071 "owner", "gamemaster", "hoster", "admin", "staff", "tibia", "account", "god", "hitler", "cm", "gm", "game master", "anal", "anus", "arse", "ass", "asses", "assfucker", "assfukka", "asshole", "arsehole", "asswhole", "assmunch", "ballsack", "wanky", "whore", "whoar", "xxx", "xx", "yaoi", "yury", "bastard", "beastial", "bestial", "bellend", "bdsm", "beastiality", "bestiality", "bitch", "bitches", "bitchin", "bitching", "bimbo", "bimbos", "blow job", "blowjob", "blowjobs", "blue waffle", "boob", "boobs", "booobs", "boooobs", "booooobs", "booooooobs", "breasts", "booty call", "brown shower", "brown showers", "boner", "bondage", "buceta", "bukake", "bukkake", "bullshit", "bull shit", "busty", "butthole", "carpet muncher", "cawk", "chink", "cipa", "clit", "clits", "clitoris", "cnut", "cock", "cocks", "cockface", "cockhead", "cockmunch", "cockmuncher", "cocksuck", "cocksucked", "cocksucking", "cocksucks", "cocksucker", "cokmuncher", "coon", "cow girl", "cow girls", "cowgirl", "cowgirls", "crap", "crotch", "cum", "cummer", "cumming", "cuming", "cums", "cumshot", "cunilingus", "cunillingus", "cunnilingus", "cunt", "cuntlicker", "cuntlicking", "cunts", "damn", "dick", "dickhead", "dildo", "dildos", "dink", "dinks", "deepthroat", "deep throat", "dog style", "doggie style", "doggiestyle", "doggy style", "doggystyle", "donkeyribber", "doosh", "douche", "duche", "dyke", "ejaculate", "ejaculated", "ejaculates", "ejaculating", "ejaculatings", "ejaculation", "ejakulate", "erotic", "erotism", "fag", "faggot", "fagging", "faggit", "faggitt", "faggs", "fagot", "fagots", "fags", "fatass", "femdom", "fingering", "footjob", "foot job", "fuck", "fucks", "fucker", "fuckers", "fucked", "fuckhead", "fuckheads", "fuckin", "fucking", "fcuk", "fcuker", "fcuking", "felching", "fellate", "fellatio", "fingerfuck", "fingerfucked", "fingerfucker", "fingerfuckers", "fingerfucking", "fingerfucks", "fistfuck", "fistfucked", "fistfucker", "fistfuckers", "fistfucking", "fistfuckings", "fistfucks", "flange", "fook", "fooker", "fucka", "fuk", "fuks", "fuker", "fukker", "fukkin", "fukking", "futanari", "futanary", "gangbang", "gangbanged", "gang bang", "gokkun", "golden shower", "goldenshower", "gaysex", "goatse", "handjob", "hand job", "hentai", "hooker", "hoer", "homo", "horny", "incest", "jackoff", "jack off", "jerkoff", "jerk off", "jizz", "knob", "kinbaku", "labia", "masturbate", "masochist", "mofo", "mothafuck", "motherfuck", "motherfucker", "mothafucka", "mothafuckas", "mothafuckaz", "mothafucked", "mothafucker", "mothafuckers", "mothafuckin", "mothafucking", "mothafuckings", "mothafucks", "mother fucker", "motherfucked", "motherfucker", "motherfuckers", "motherfuckin", "motherfucking", "motherfuckings", "motherfuckka", "motherfucks", "milf", "muff", "negro", "nigga", "nigger", "nigg", "nipple", "nipples", "nob", "nob jokey", "nobhead", "nobjocky", "nobjokey", "numbnuts", "nutsack", "nude", "nudes", "orgy", "orgasm", "orgasms", "panty", "panties", "penis", "playboy", "pinto", "porn", "porno", "pornography", "pron", "punheta", "pussy", "pussies", "puta", "rape", "raping", "rapist", "rectum", "retard", "rimming", "sadist", "sadism", "schlong", "scrotum", "sex", "semen", "shemale", "she male", "shibari", "shibary", "shit", "shitdick", "shitfuck", "shitfull", "shithead", "shiting", "shitings", "shits", "shitted", "shitters", "shitting", "shittings", "shitty", "shota", "skank", "slut", "sluts", "smut", "smegma", "spunk", "strip club", "stripclub", "tit", "tits", "titties", "titty", "titfuck", "tittiefucker", "titties", "tittyfuck", "tittywank", "titwank", "threesome", "three some", "throating", "twat", "twathead", "twatty", "twunt", "viagra", "vagina", "vulva", "viado", "wank", "wanker",
1072 );
1073 // Comment out the below array if you want to allow players to use creature names:
1074 $config['creatureNameTags'] = array(
1075 "acolyte of the cult", "adept of the cult", "amazon", "ancient scarab", "arachnophobica", "assassin", "azure frog", "badger", "bandit", "banshee", "barbarian bloodwalker", "barbarian brutetamer", "barbarian headsplitter", "barbarian skullhunter", "bat", "bear", "behemoth", "betrayed wraith", "biting book", "black knight", "black sphinx acolyte", "blightwalker", "blood beast", "blood crab", "blood hand", "blood priest", "blue djinn", "boar", "bog frog", "bog raider", "bonebeast", "bonelord", "boogy", "brain squid", "braindeath", "breach brood", "brimstone bug", "burning book", "burning gladiator", "burster spectre", "carniphila", "carrion worm", "cave devourer", "centipede", "chakoya toolshaper", "chakoya tribewarden", "chakoya windcaller", "choking fear", "clay guardian", "clomp", "cobra", "coral frog", "corym charlatan", "corym skirmisher", "corym vanguard", "crab", "crazed beggar", "crazed summer rearguard", "crazed summer vanguard", "crazed winter rearguard", "crazed winter vanguard", "crimson frog", "crocodile", "crypt defiler", "crypt shambler", "crypt warden", "crystal spider", "crystalcrusher", "cult believer", "cult enforcer", "cult scholar", "cyclops", "cyclops drone", "cyclops smith", "dark apprentice", "dark faun", "dark magician", "dark monk", "dark torturer", "dawnfire asura", "death blob", "deathling scout", "deathling spellsinger", "deepling guard", "deepling scout", "deepling spellsinger", "deepling warrior", "deepling worker", "deepworm", "defiler", "demon outcast", "demon skeleton", "demon", "destroyer", "devourer", "diabolic imp", "diamond servant", "diremaw", "dragon hatchling", "dragon lord hatchling", "dragon lord", "dragon", "draken abomination", "draken elite", "draken spellweaver", "draken warmaster", "dread intruder", "drillworm", "dwarf geomancer", "dwarf guard", "dwarf henchman", "dwarf soldier", "dwarf", "dworc fleshhunter", "dworc venomsniper", "dworc voodoomaster", "earth elemental", "efreet", "elder bonelord", "elder wyrm", "elephant", "elf arcanist", "elf scout", "elf", "emerald damselfly", "energetic book", "energy elemental", "enfeebled silencer", "enlightened of the cult", "enraged crystal golem", "eternal guardian", "falcon knight", "falcon paladin", "faun", "fire devil", "fire elemental", "firestarter", "forest fury", "fox", "frazzlemaw", "frost dragon hatchling", "frost dragon", "frost flower asura", "fury", "gargoyle", "gazer spectre", "ghastly dragon", "ghost", "ghoul", "giant spider", "gladiator", "gloom wolf", "glooth bandit", "glooth blob", "glooth brigand", "glooth golem", "gnarlhound", "guzzlemaw", "hand of cursed fate", "haunted treeling", "hellhound", "hellflayer", "hellfire fighter", "hellspawn", "hero", "honour guard", "hunter", "hydra", "ice golem", "ice witch", "infernalist", "juggernaut", "killer caiman", "kongra", "lancer beetle", "lamassu", "lich", "lizard chosen", "lizard dragon priest", "lizard high guard", "lizard legionnaire", "lizard sentinel", "lizard snakecharmer", "lizard templar", "lizard zaogun", "lost soul", "lumbering carnivor", "mad scientist", "mammoth", "marid", "marsh stalker", "medusa", "menacing carnivor", "mercury blob", "merlkin", "metal gargoyle", "midnight asura", "minotaur amazon", "minotaur archer", "minotaur cult follower", "minotaur cult prophet", "minotaur cult zealot", "minotaur guard", "minotaur hunter", "minotaur mage", "minotaur", "monk", "mooh'tah warrior", "moohtant", "mummy", "mutated bat", "mutated human", "mutated rat", "mutated tiger", "necromancer", "nightmare scion", "nightmare", "nightstalker", "nomad", "novice of the cult ", "nymph", "omnivora", "orc berserker", "orc leader", "orc rider", "orc shaman", "orc warlord", "orc warrior", "orc", "pirate buccaneer", "pirate corsair", "pirate cutthroat", "pirate ghost", "pirate marauder", "pirate skeleton", "pixie", "plaguesmith", "priestess", "pooka", "ravenous lava lurker", "renegade knight", "retching horror", "ripper spectre", "roaring lion", "rot elemental", "rotworm", "rustheap golem", "scarab", "scorpion", "sea serpent", "serpent spawn", "sibang", "silencer", "skeleton elite warrior", "souleater", "spectre", "spiky carnivor", "stone golem", "stonerefiner", "swamp troll", "tarantula", "terramite", "thornback tortoise", "toad", "tortoise", "twisted pooka", "undead elite gladiator", "undead gladiator", "valkyrie", "vampire bride", "vampire viscount", "vampire", "vexclaw", "vicious squire", "vile grandmaster", "vulcongra", "wailing widow", "war golem", "war wolf", "warlock", "wasp", "water elemental", "weakened frazzlemaw", "werebadger", "werebear", "wereboar", "werefox", "werewolf", "worm priestess", "wolf", "wyrm", "wyvern", "yielothax", "young sea serpent", "zombie", "adult goanna", "black sphinx acolyte", "burning gladiator", "cobra assassin", "cobra scout", "cobra vizier", "crypt warden", "feral sphinx", "lamassu", "manticore", "ogre rowdy", "ogre ruffian", "ogre sage", "priestess of the wild sun", "sphinx", "sun-marked goanna", "young goanna", "cursed prospector", "evil prospector", "flimsy lost soul", "freakish lost soul", "mean lost soul", "a shielded astral glyph", "abyssador", "an astral glyph", "ascending ferumbras", "annihilon", "apocalypse", "apprentice sheng", "arachir the ancient one", "armenius", "azerus", "barbaria", "baron brute", "battlemaster zunzu", "bazir", "big boss trolliver", "bones", "boogey", "bretzecutioner", "brokul", "bruise payne", "brutus bloodbeard", "bullwark", "chizzoron the distorter", "coldheart", "countess sorrow", "deadeye devious", "deathbine", "deathstrike", "demodras", "dharalion", "diblis the fair", "dirtbeard", "diseased bill", "diseased dan", "diseased fred", "doomhowl", "dracola", "dreadwing", "ekatrix", "energized raging mage", "esmeralda", "ethershreck", "evil mastermind", "fatality", "fazzrah", "fernfang", "feroxa", "ferumbras", "flameborn", "fleshcrawler", "fleshslicer", "fluffy", "foreman kneebiter", "freegoiz", "fury of the emperor", "furyosa", "gaz'haragoth", "general murius", "ghazbaran", "glitterscale", "gnomevil", "golgordan", "grand mother foulscale", "groam", "grorlam", "gorgo", "hairman the huge", "haunter", "hellgorak", "hemming", "heoni", "hide", "hirintror", "horadron", "horestis", "incineron", "infernatil", "inky", "jaul", "kerberos", "koshei the deathless", "kraknaknork's demon", "kraknaknork", "kroazur", "latrivan", "lethal lissy", "leviathan", "lisa", "lizard abomination", "lord of the elements", "mad mage", "mad technomancer", "madareth", "man in the cave", "massacre", "mawhawk", "menace", "mephiles", "minishabaal", "monstor", "morgaroth", "morik the gladiator", "mr. punish", "munster", "mutated zalamon", "necropharus", "obujos", "orshabaal", "paiz the pauperizer", "raging mage", "ribstride", "rocko", "ron the ripper", "rottie the rotworm", "rotworm queen", "scarlett etzel", "scorn of the emperor", "shardhead", "sharptooth", "sir valorcrest", "snake god essence", "snake thing", "spider queen", "spite of the emperor", "splasher", "stonecracker", "sulphur scuttler", "tanjis", "terofar", "teleskor", "the abomination", "the axeorcist", "the blightfather", "the bloodtusk", "the bloodweb", "the book of death", "the collector", "the count", "the weakened count", "the dreadorian", "the evil eye", "the frog prince", "the handmaiden", "the horned fox", "the keeper", "the imperor", "the many", "the noxious spawn", "the old widow", "the pale count", "the plasmother", "the snapper", "the distorted astral source", "the astral source", "thul", "tiquandas revenge", "tirecz", "tyrn", "tormentor", "tremorak", "tromphonyte", "ungreez", "ushuriel", "verminor", "versperoth", "warlord ruzad", "white pale", "wrath of the emperor", "xenia", "yaga the crone", "yakchal", "zanakeph", "zavarash", "zevelon duskbringer", "zomba", "zoralurk", "zugurosh", "zushuka", "zulazza the corruptor", "glooth bomb", "bibby bloodbath", "doctor perhaps", "mooh'tah master", "the welter"
1076 );
1077
1078 // ------------------------------------------------------------------ \
1079 // LAYOUT REPOSITORY \
1080 // ------------------------------------------------------------------ \
1081 // Lets Admin Panel > Layout > Browse themes list themes hosted outside
1082 // this install and install them with one click.
1083 //
1084 // A theme is PHP that runs on your server, so downloading one is running
1085 // someone else's code. Only ever point this at a repository you trust.
1086 // Downloads are refused unless the URL is https and its host is in
1087 // allowed_hosts below.
1088 $config['layout_repository'] = array(
1089 'enabled' => true,
1090
1091 // JSON catalogue of downloadable themes. See layouts/README.md for its shape.
1092 'index' => 'https://raw.githubusercontent.com/Open-Games-Community/ZnoteX/layouts/index.json',
1093
1094 // Nothing is downloaded from a host that is not on this list.
1095 'allowed_hosts' => array(
1096 'raw.githubusercontent.com',
1097 'codeload.github.com',
1098 'github.com',
1099 'objects.githubusercontent.com',
1100 ),
1101
1102 // How long the catalogue is kept before being fetched again, in seconds.
1103 'cache_time' => 3600,
1104
1105 // Largest theme archive accepted, in megabytes.
1106 'max_size_mb' => 64,
1107 );
1108
1109 // Plugin repository
1110 $config['plugin_repository'] = array(
1111 'enabled' => true,
1112
1113 // JSON catalogue of downloadable plugins. See plugins/README.md for its shape.
1114 'index' => 'https://raw.githubusercontent.com/Open-Games-Community/ZnoteX/plugins/index.json',
1115
1116 'allowed_hosts' => array(
1117 'raw.githubusercontent.com',
1118 'codeload.github.com',
1119 'github.com',
1120 'objects.githubusercontent.com',
1121 ),
1122
1123 'cache_time' => 3600,
1124 'max_size_mb' => 64,
1125 );
1126
1127 // -------------------------------------------------------------------- \
1128 // LOCAL OVERRIDES \
1129 // -------------------------------------------------------------------- \
1130 // config.local.php holds the values specific to THIS install - database
1131 // credentials, server engine, site name, admin names. The installer writes
1132 // it, and it is included last so it wins over everything above.
1133 //
1134 // The point is that config.php stays replaceable: a ZnoteX update can ship
1135 // a new one without touching your settings. Keep config.local.php out of
1136 // version control and out of backups you share.
1137 if (is_file(__DIR__ . '/config.local.php')) {
1138 require __DIR__ . '/config.local.php';
1139 }
1140