Issues (1369)

classes/classConfig.php (1 issue)

Labels
Severity
1
<?php
2
/**
3
 * Created by Gorlum 29.10.2016 10:16
4
 */
5
6
7
/**
8
 *
9
 * This class is used to handle server configuration
10
 *
11
 * @package supernova
12
 *
13
 * @property string $db_prefix                     - REMOVE! Just for compatibility!
14
 *
15
 * @property int    $debug
16
 *
17
 * @property bool   $DEBUG_SQL_FILE_LOG            => 0 // Полный дамп запросов в рил-тайме. Подойдет любое значение
18
 * @property bool   $DEBUG_SQL_ERROR               => 0 // Выводить в сообщении об ошибке так же полный дамп запросов за сессию. Подойдет любое значение. Подразумевает `DEBUG_SQL_COMMENT`
19
 * @property bool   $DEBUG_SQL_COMMENT_LONG        => 0 // Добавлять SQL запрос длинные комментарии. Подойдет любое значение. Подразумевает `DEBUG_SQL_COMMENT`
20
 * @property bool   $DEBUG_SQL_COMMENT             => 0 // Добавлять комментарии прямо в SQL запрос. Подойдет любое значение
21
 *
22
 * @property string $db_version
23
 * @property int    $db_manual_lock_enabled
24
 *
25
 * @property string $admin_http_key                => '', // Use this key to access some admin functionality via HTTP - say, in script
26
 *
27
 * @property string $ali_bonus_members             => 10, // Minimum alliance size to start using bonus
28
 *
29
 * @property string $auth_vkontakte_app_id
30
 * @property string $auth_vkontakte_app_key
31
 * @property string     $auth_vkontakte_token
32
 * @property int        $auth_vkontakte_token_expire
33
 *
34
 * @property int        $BuildLabWhileRun              => 0, // Allow to build lab/Nanolab while tech researching AND allowing research tech while lab/Nanolab
35
 *
36
 * @property string     $COOKIE_NAME                   => 'SuperNova'
37
 *
38
 * @property int        $empire_mercenary_base_period  => PERIOD_MONTH, // Base hire period for price calculations
39
 * @property int        $empire_mercenary_temporary    => 0, // Temporary empire-wide mercenaries
40
 *
41
 * @property float      $fleet_update_dispatch_time    => 3           // (float), seconds Maximum seconds fleet dispatch can run, Default 3s
42
 * @property int        $fleet_update_interval         => 4 second    // how often fleet dispatch worker should run
43
 * @property int        $fleet_update_max_run_time     => 30,         // (int), seconds. How long fleet dispatch worker can run. Should be 1 second or more
44
 * @property int        $fleet_update_last             => SN_TIME_NOW // unixtime - when fleet was updated last
45
 * @property int        $fleet_update_lock             => ''          // SQL time when lock was acquired
46
 *
47
 * @property string     $game_adminEmail               => 'root@localhost',    // Admin email to show to users
48
 *
49
 * @property string     $game_default_language         => 'ru'
50
 * @property string     $game_default_skin             => 'skins/EpicBlue/'
51
 * @property string     $game_default_template         => 'OpenGame'
52
 *
53
 * @property int        $game_installed                => 0 - is game installed
54
 * @property int        $game_disable                  => GAME_DISABLE_INSTALL - Current game status - see GAME_DISABLE_xxx
55
 * @property string     $game_disable_reason           => 'SuperNova is in maintenance mode! Please return later!' - Status for custom disable reason
56
 *
57
 * @property int        $game_maxGalaxy                => 5
58
 * @property int        $game_maxSystem                => 199
59
 * @property int        $game_maxPlanet                => 15
60
 *
61
 * @property string     $game_name                     Server's name as it would be seen through game
62
 *
63
 * @property string     $game_watchlist
64
 *
65
 * @property int        $metal_basic_income            => 40,
66
 * @property int        $crystal_basic_income          => 20,
67
 * @property int        $deuterium_basic_income        => 0,
68
 * @property int        $energy_basic_income           => 0,
69
 *
70
 * @property int        $game_news_actual              How long announcement would be marked as "New". In seconds. Default - 3 days PERIOD_DAY_3
71
 * @property int        $game_news_overview            How much last news to show in Overview page. Default - 3
72
 * @property int        $game_news_overview_show       How long news will be shown in Overview page in seconds. Default - 2 weeks. 0 - show all
73
 *
74
 * @property int        $game_noob_factor              => 5    // Multiplier to divide "stronger" and "weaker" users
75
 * @property int        $game_noob_points              => 5000 // Below this point user treated as noob. 0 to disable
76
 *
77
 * @property string     $int_format_date               => 'd.m.Y' // Date default format
78
 * @property string     $int_format_time               => 'H:i:s' // Time default format
79
 *
80
 * @property int        $menu_server_name_disabled     => 0
81
 * @property int        $menu_launch_date_disabled     => 0
82
 * @property int        $menu_server_logo              => MENU_SERVER_LOGO_DEFAULT
83
 * @property int        $menu_server_logo_disabled     => 0
84
 *
85
 * @property string     $payment_currency_default      => 'USD',
86
 * @property float      $payment_currency_exchange_dm_ => 20000,
87
 * @property float      $payment_currency_exchange_mm_ => 20000,
88
 * @property float      $payment_currency_exchange_eur => 0.90,
89
 * @property float      $payment_currency_exchange_rub => 60,
90
 * @property float      $payment_currency_exchange_uah => 30,
91
 * @property float      $payment_currency_exchange_usd => 1,
92
 * @property float      $payment_currency_exchange_wmb => 18000,
93
 * @property float      $payment_currency_exchange_wme => 0.9,
94
 * @property float      $payment_currency_exchange_wmr => 60,
95
 * @property float      $payment_currency_exchange_wmu => 30,
96
 * @property float      $payment_currency_exchange_wmz => 1,
97
 *
98
 * @property int        $tutorial_first_item           ID of first item of tutorial
99
 *
100
 * @property string $url_faq                 URL of FAQ root
101
 * @property string $url_purchase_metamatter URL to purchase MM for servers w/o payment modules
102
 * @property string $url_forum               '',
103
 * @property string $url_rules               '',
104
 *
105
 * @property int        $users_amount                  => 1,                // Total users count
106
 * @property int        $game_users_online_timeout     => PERIOD_MINUTE_15, // How long user should consider ONLINE for online counter (seconds)
107
 * @property int        $game_users_update_online      => 30,               // How often user online should be refreshed (seconds)
108
 * @property int        $var_online_user_time          => 0,                // When last time user online was refreshed (Unix timestamp)
109
 * @property int        $var_online_user_count         => 0,                // Last calculated online user count
110
 * @property int        $server_log_online             => 0,                // Log online user count
111
 *
112
 * @property int        $quest_total                   => 0, // Total number of quests
113
 *
114
 * @property float      $resource_multiplier           => 1, // aka Mining speed
115
 * @property float      $game_speed                    => 1, // Game speed aka Building/Research speed
116
 * @property float      $fleet_speed                   => 1, // Fleet speed
117
 * @property float      $game_speed_expedition         => 1, // Game expedition rate aka Game expedition speed
118
 *
119
 * @property int        $tpl_minifier                  => 0, // Template minifier
120
 * @property int        $tpl_allow_php                 => 0, // PTL allow INCLUDEPHP and PHP tags
121
 *
122
 * @property int        $uni_galaxy_distance           => 20000, // Distance between galaxies
123
 *
124
 * @property int        $user_birthday_celebrate       => 0, // When last time celebrations (i.e. gift-giving) was made
125
 * @property int        $user_birthday_gift            => 0, // User birthday gift - DM points
126
 * @property int        $user_birthday_range           => PERIOD_MONTH, // How far in past can be user birthday for giving him gift
127
 *
128
 * ----- Player settings
129
 * @property int        $player_metamatter_immortal    => 200000, // MM amount to reward account with Immortal status
130
 *
131
 * @property int        $game_user_changename          => 2, // Is user allowed to change name after registration?
132
 * @property int        $game_user_changename_cost     => 100000, // Change name cost for paid changename
133
 *
134
 * @property int        $user_vacation_disable         => 0, // Disable vacation mode for players
135
 * @property int        $player_vacation_time          => PERIOD_WEEK, // Minimal vacation length in seconds
136
 * @property int        $player_vacation_timeout       => PERIOD_WEEK, // Timeout after leaving vacation to start new one in seconds
137
 *
138
 * @property string     $player_levels                 => '', // JSON-encoded array of [(int)level => (float)maxPointsForLevel]
139
 * @property string     $player_levels_calculated      => '2000-01-01 00:00:00', // Date and time when player level was calculated last
140
 *
141
 * @property int        $player_delete_time            => 3888000, //
142
 *
143
 *
144
 *
145
 * ----- Planet settings
146
 * @property int        $LastSettedGalaxyPos           => 1,
147
 * @property int        $LastSettedPlanetPos           => 1,
148
 * @property int        $LastSettedSystemPos           => 1,
149
 *
150
 * @property int        $eco_planet_starting_crystal   => 500,
151
 * @property int        $eco_planet_starting_deuterium => 0,
152
 * @property int        $eco_planet_starting_metal     => 500,
153
 * @property int        $eco_planet_storage_crystal    => 500000,
154
 * @property int        $eco_planet_storage_deuterium  => 500000,
155
 * @property int        $eco_planet_storage_metal      => 500000,
156
 *
157
 * @property int        $planet_capital_cost           => 25000, // Cost in DM to move Capital to current planet
158
 * @property float      $planet_capital_mining_rate    => 2.0,   // Capital Mining rates
159
 * @property float      $planet_capital_building_rate  => 2.0,   // Capital Building rates
160
 * @property int        $planet_teleport_cost          => 50000, // Cost of planet teleportation
161
 * @property int        $planet_teleport_timeout       => 86400, // Timeout for next teleportation
162
 *
163
 * @property string     $server_updater_check_auto     => 0, // Server auto-check version
164
 * @property int        $server_updater_check_last     => 0, // Server last check time
165
 * @property int        $server_updater_check_period   => PERIOD_DAY, // Server auto-check period
166
 * @property int        $server_updater_check_result   => SNC_VER_NEVER, // Server last check result
167
 * @property int|string $server_updater_id             => 0, // Server ID on update server
168
 * @property string     $server_updater_key            => '', // Server key on update server
169
 *
170
 * @property int        $stats_hide_admins             => 1,  // Hide admins accounts from stat and stat of admins
171
 * @property string     $stats_hide_player_list        => '', // Comma separated list of player IDs which stat to hide. Used for bots, for example
172
 * @property int        $stats_hide_pm_link            => 0,  // Hide PM link from stat screen
173
 * @property int        $stats_history_days            => 14, // За сколько дней хранить статистику в базе
174
 * @property string     $stats_minimal_interval        => STATS_RUN_INTERVAL_MINIMUM -  Minimal interval between stat runs in seconds. Default - 600s aka 10 minutes
175
 * @property string     $stats_schedule                => '04:00:00' - Schedule for running stat updates - see readme.txt
176
 * @property string     $stats_php_memory              => ???????????????
177
 *
178
 * @property int        $upd_lock_time                 => Update lock time
179
 *
180
 * @property string     $server_cypher                 => Internally generated cypher for in-server communications
181
 *
182
 *
183
 * @property string            $var_db_update                 => '0' - SQL_DATE_TIME
184
 * @property string            $var_db_update_end             => '0' - SQL_DATE_TIME
185
 *
186
 * @property string            $var_stat_update               => '0' - SQL_DATE_TIME - when stat update was started
187
 * @property string            $var_stat_update_end           => '0' - SQL_DATE_TIME - ?????????
188
 * @property string            $var_stat_update_admin_forced  => '0' - SQL_DATE_TIME - Last time when update was triggered from admin console
189
 * @property string            $var_stat_update_next          => ''  - SQL_DATE_TIME - Next time when stat update scheduled to run
190
 * @property string            $var_stat_update_msg           => 'Update never started' - Last stat update message
191
 *
192
 * @property string            $var_news_last                 => 0, // Last news post time
193
 *
194
 * @property int    $allow_buffing           => 0, // Disable buffing check for TRANSPORT missions
195
 * @property int    $ally_help_weak          => 0, // Allow strong players to HOLD on weak co-ally planets
196
 * @property int    $game_email_pm           => 0, // Is allowed forwarding messages from PM to e-mail?
197
 * @property int    $rpg_exchange_metal      => 1,
198
 * @property int    $rpg_exchange_crystal    => 2,
199
 * @property int    $rpg_exchange_deuterium  => 4,
200
 * @property int    $rpg_exchange_darkMatter => 400,
201
 * @property int    $initial_fields          => 163,
202
 * @property int    $chat_refresh_rate       => 5, // in seconds. Chat AJAX refresh rate
203
 * @property int    $chat_timeout            => 900, // in seconds. Default = 15 min
204
 * @property int    $game_counter            => 0,  // Does built-in page hit counter is on?
205
 * @property string $geoip_whois_url         => '',
206
 * @property int    $advGoogleLeftMenuIsOn   => 0,
207
 * @property string $advGoogleLeftMenuCode   => '(Place here code for banner)',
208
 * @property int    $uni_price_galaxy        => 10000,
209
 * @property int    $uni_price_system        => 1000,
210
 * @property int               $fleet_bashing_attacks   => 3,      // Max amount of attack per wave - 3 by default
211
 * @property int               $fleet_bashing_interval  => 1800,   // Maximum interval between attacks when they still count as one wave - 30m by default
212
 * @property int               $fleet_bashing_scope     => 86400,  // Interval on which bashing waves counts - 24h by default
213
 * @property int               $fleet_bashing_war_delay => 43200,  // Delay before start bashing after declaring war to alliance - 12h by default
214
 * @property int               $fleet_bashing_waves     => 3,      // Max amount of waves per day - 3 by default
215
 * @property int               $player_max_colonies     => -1, // Max player planet count (NOT including main planet)
216
 * @property int               $eco_scale_storage       => 1,
217
 * @property int               $game_mode               => 0,           // 0 - SuperNova, 1 - oGame
218
 *
219
 *
220
 * @property string            $cache_prefix Temporary for updater
221
 *
222
 * @property mixed|string|null $rpg_cost_exchange => 1000, // Exchange allows resource trade between players
223
 */
224
class classConfig extends classPersistent {
225
  const DATE_TYPE_UNIX = 0;
226
  const DATE_TYPE_SQL_STRING = 1;
227
228
  const FLEET_UPDATE_RUN_LOCK = 'fleet_update_run_lock';
229
  const FLEET_UPDATE_MAX_RUN_TIME = 'fleet_update_max_run_time';
230
231
  /**
232
   * Internal cypher string for server/server communication
233
   *
234
   * @var string $cypher
235
   */
236
  protected $cypher = '';
237
238
  protected $defaults = array(
239
    'geoip_whois_url' => '',
240
241
    'db_manual_lock_enabled' => 0,
242
243
    'admin_http_key'  => '',
244
245
    // Debug
246
    'DEBUG_SQL_FILE_LOG'     => 0, // Полный дамп запросов в отдельный файл. Подойдет любое значение
247
    'DEBUG_SQL_ERROR'        => 0, // Выводить в сообщении об ошибке так же полный дамп запросов за сессию. Подойдет любое значение. Подразумевает `DEBUG_SQL_COMMENT`
248
    'DEBUG_SQL_COMMENT_LONG' => 0, // Добавлять SQL запрос длинные комментарии. Подойдет любое значение. Подразумевает `DEBUG_SQL_COMMENT`
249
    'DEBUG_SQL_COMMENT'      => 0, // Добавлять комментарии прямо в SQL запрос. Подойдет любое значение
250
251
    // SEO meta
252
    'adv_conversion_code_payment'  => '',
253
    'adv_conversion_code_register' => '',
254
    'adv_seo_meta_description'     => '',
255
    'adv_seo_meta_keywords'        => '',
256
    'adv_seo_javascript'           => '',
257
258
    // Advert banner
259
    'advGoogleLeftMenuIsOn'        => 0,
260
    'advGoogleLeftMenuCode'        => '(Place here code for banner)',
261
262
    // Alliance bonus calculations
263
    'ali_bonus_algorithm'          => 0,  // Bonus calculation algorithm
264
    'ali_bonus_brackets'           => 10, // Brackets count for ALI_BONUS_BY_RANK
265
    'ali_bonus_brackets_divisor'   => 10,// Bonus divisor for ALI_BONUS_BY_RANK
266
    'ali_bonus_divisor'            => 10000000, // Rank divisor for ALI_BONUS_BY_POINTS
267
    'ali_bonus_members'            => 10, // Minimum alliance size to start using bonus
268
269
    'allow_buffing'  => 0, // Disable buffing check for TRANSPORT missions
270
    'ally_help_weak' => 0, // Allow strong players to HOLD on weak co-ally planets
271
272
    'auth_vkontakte_app_id'       => '',
273
    'auth_vkontakte_app_key'      => '',
274
    'auth_vkontakte_token'        => '',
275
    'auth_vkontakte_token_expire' => '2000-01-01',
276
277
    // User avatar and alliance logo
278
    'avatar_max_height'           => 128, // Maximum height
279
    'avatar_max_width'            => 128, // Maximum width
280
281
    'BuildLabWhileRun'         => 0, // Allow to build lab/Nanolab while tech researching AND allowing research tech while lab/Nanolab
282
283
    // Chat settings
284
    // Nick highlighting
285
    'chat_highlight_developer' => '<span class=\"nick_developer\">$1</span>', // Developer nick
286
    'chat_highlight_admin'     => '<span class=\"nick_admin\">$1</span>', // Admin nick
287
    'chat_highlight_moderator' => '<span class=\"nick_moderator\">$1</span>', // Moderator nick
288
    'chat_highlight_operator'  => '<span class=\"nick_operator\">$1</span>', // Operator nick
289
    'chat_highlight_premium'   => '<span class=\"nick_premium\">$1</span>', // Premium nick
290
    // Other chat settings
291
    'chat_refresh_rate'        => 5, // in seconds. Chat AJAX refresh rate
292
    'chat_timeout'             => 900, // in seconds. Default = 15 min
293
294
    'COOKIE_NAME' => 'SuperNova',
295
    'debug'       => 0,
296
    'Defs_Cdr'    => 30,
297
298
    'eco_planet_starting_crystal'   => 500,
299
    'eco_planet_starting_deuterium' => 0,
300
    'eco_planet_starting_metal'     => 500,
301
    'eco_planet_storage_crystal'    => 500000,
302
    'eco_planet_storage_deuterium'  => 500000,
303
    'eco_planet_storage_metal'      => 500000,
304
305
    'eco_scale_storage'            => 1,
306
    'eco_stockman_fleet'           => '', // Black Market - Starting amount of s/h ship merchant to sell
307
    'eco_stockman_fleet_populate'  => 1,  // Populate empty Stockman fleet with ships or not
308
    'empire_mercenary_base_period' => PERIOD_MONTH, // Base
309
    'empire_mercenary_temporary'   => 0, // Temporary empire-wide mercenaries
310
311
    // Planet basic income
312
    'metal_basic_income'           => 40,
313
    'crystal_basic_income'         => 20,
314
    'deuterium_basic_income'       => 0,
315
    'energy_basic_income'          => 0,
316
317
    // Bashing protection settings
318
    'fleet_bashing_attacks'        => 3,      // Max amount of attack per wave - 3 by default
319
    'fleet_bashing_interval'       => 1800,   // Maximum interval between attacks when they still count as one wave - 30m by default
320
    'fleet_bashing_scope'          => 86400,  // Interval on which bashing waves counts - 24h by default
321
    'fleet_bashing_war_delay'      => 43200,  // Delay before start bashing after declaring war to alliance - 12h by default
322
    'fleet_bashing_waves'          => 3,      // Max amount of waves per day - 3 by default
323
324
    'Fleet_Cdr'   => 30,
325
    'fleet_speed' => 1,
326
327
    'fleet_update_dispatch_time'    => 3,  // (float) Maximum seconds fleet dispatch can run, Default 3s
328
    'fleet_update_interval'         => 4,  // How often fleet dispatch worker should run
329
    self::FLEET_UPDATE_MAX_RUN_TIME => 30, // (int) seconds. How long fleet dispatch worker can run. Should be 1 second or more
330
    'fleet_update_lock'             => '', // SQL time when lock was acquired
331
332
    'game_adminEmail'       => 'root@localhost',    // Admin email to show to users
333
    'game_counter'          => 0,  // Does built-in page hit counter is on?
334
    // Defaults
335
    'game_default_language' => 'ru',
336
    'game_default_skin'     => 'skins/EpicBlue/',
337
    'game_default_template' => 'OpenGame',
338
339
    'game_disable'        => GAME_DISABLE_INSTALL,
340
    'game_disable_reason' => 'SuperNova is in maintenance mode! Please return later!',
341
    'game_email_pm'       => 0, // Is allowed forwarding messages from PM to e-mail?
342
    // Universe size
343
    'game_maxGalaxy'      => 5,
344
    'game_maxSystem'      => 199,
345
    'game_maxPlanet'      => 15,
346
    // Game global settings
347
    'game_mode'           => 0,           // 0 - SuperNova, 1 - oGame
348
    'game_name'           => 'SuperNova', // Server name (would be on banners and on top of left menu)
349
350
    'game_news_actual'        => PERIOD_DAY_3, // How long announcement would be marked as "New". In seconds. Default - 3 days
351
    'game_news_overview'      => 3,    // How much last news to show in Overview page
352
    'game_news_overview_show' => PERIOD_WEEK_2,    // How long news will be shown in Overview page in seconds. Default - 2 weeks
353
    // Noob protection
354
    'game_noob_factor'        => 5,    // Multiplier to divide "stronger" and "weaker" users
355
    'game_noob_points'        => 5000, // Below this point user treated as noob. 0 to disable
356
357
    'game_multiaccount_enabled' => 0, // 1 - allow interactions for players with same IP (multiaccount)
358
359
    'game_speed'            => 1, // Game speed
360
    'game_speed_expedition' => 1, // Game expedition speed
361
362
    'game_user_changename'      => 2, // Is user allowed to change name after registration?
363
    'game_user_changename_cost' => 100000, // Change name cost for paid changename
364
365
    'initial_fields'            => 163,
366
367
    // Interface - UserBanner
368
    'int_banner_background'     => 'design/images/banner.png',
369
    'int_banner_fontInfo'       => 'terminator.ttf',
370
    'int_banner_fontRaids'      => 'klmnfp2005.ttf',
371
    'int_banner_fontUniverse'   => 'cristal.ttf',
372
    'int_banner_showInOverview' => 1,
373
    'int_banner_URL'            => '/banner.php?type=banner',
374
375
    'int_format_date'            => 'd.m.Y', // Date default format
376
    'int_format_time'            => 'H:i:s', // Time default format
377
378
    // Interface - UserBar
379
    'int_userbar_background'     => 'design/images/userbar.png',
380
    'int_userbar_font'           => 'arialbd.ttf',
381
    'int_userbar_showInOverview' => 1,
382
    'int_userbar_URL'            => '/banner.php?type=userbar',
383
384
    'LastSettedGalaxyPos' => 1,
385
    'LastSettedPlanetPos' => 1,
386
    'LastSettedSystemPos' => 1,
387
388
    'locale_cache_disable' => 0, // Disable locale caching
389
390
    'menu_server_name_disabled' => 0,
391
    'menu_launch_date_disabled' => 0,
392
    'menu_server_logo'          => MENU_SERVER_LOGO_DEFAULT,
393
    'menu_server_logo_disabled' => 0,
394
395
    'payment_currency_default'      => 'USD',
396
    'payment_currency_exchange_dm_' => 20000,
397
    'payment_currency_exchange_mm_' => 20000,
398
    'payment_currency_exchange_eur' => 0.90,
399
    'payment_currency_exchange_rub' => 60,
400
    'payment_currency_exchange_uah' => 30,
401
    'payment_currency_exchange_usd' => 1,
402
    'payment_currency_exchange_wmb' => 18000,
403
    'payment_currency_exchange_wme' => 0.9,
404
    'payment_currency_exchange_wmr' => 60,
405
    'payment_currency_exchange_wmu' => 30,
406
    'payment_currency_exchange_wmz' => 1,
407
    'payment_currency_exchange_pln' => 3.86,
408
409
    'payment_lot_price' => 1,     // Lot's price in default currency
410
    'payment_lot_size'  => 2500,  // Lot size. Also service as minimum amount of DM that could be bought with one transaction
411
412
    'planet_capital_cost'          => 25000, // Cost in DM to move Capital to current planet
413
    'planet_capital_mining_rate'   => 2.0,   // Capital Mining rates
414
    'planet_capital_building_rate' => 2.0,   // Capital Building rates
415
    'planet_teleport_cost'         => 50000, // Cost of planet teleportation
416
    'planet_teleport_timeout'      => 86400, // Timeout for next teleportation
417
418
    'player_delete_time'  => 3888000, //
419
    'player_max_colonies' => -1, // Max player planet count (NOT including main planet)
420
421
    'user_vacation_disable'   => 0, // Disable vacation mode for players
422
    'player_vacation_time'    => PERIOD_WEEK, //
423
    'player_vacation_timeout' => PERIOD_WEEK, //
424
425
    'player_metamatter_immortal' => 200000, // MM amount to reward account with Immortal status
426
427
    'player_levels'            => '', // JSON-encoded array of [(int)level => (float)maxPointsForLevel]
428
    'player_levels_calculated' => '2000-01-01 00:00:00', // Date and time when player level was calculated last
429
430
    // Quests
431
    'quest_total'              => 0, // Total number of quests
432
433
    'resource_multiplier'     => 1,
434
435
    //Role play system
436
    'rpg_bonus_divisor'       => 10,    // Amount of DM referral should get for partner have 1 DM bonus
437
    'rpg_bonus_minimum'       => 10000, // Minimum DM amount for starting paying bonuses to affiliate
438
439
    // Black Market - General
440
    'rpg_cost_banker'         => 1000, // Banker can hold some resources
441
    'rpg_cost_exchange'       => 1000, // Exchange allows resource trade between players
442
    'rpg_cost_info'           => 10000, // Infotrader sells valuable information about users, alliances and universe
443
    'rpg_cost_pawnshop'       => 1000, // You can get loan in pawnshop
444
    'rpg_cost_scraper'        => 1000, // Scrapper buys ship for fraction of cost
445
    'rpg_cost_stockman'       => 1000, // Stockman resells ship that was scrapped
446
    'rpg_cost_trader'         => 1000, // Trader trades between resources
447
448
    // Black Market - Resource exchange rates
449
    'rpg_exchange_metal'      => 1,
450
    'rpg_exchange_crystal'    => 2,
451
    'rpg_exchange_deuterium'  => 4,
452
    'rpg_exchange_darkMatter' => 400,
453
454
    'rpg_flt_explore'      => 1000, // DM reward for finding Supernova in expedition
455
456
    // Black Market - Scraper rates for ship pre resource
457
    'rpg_scrape_crystal'   => 0.50,
458
    'rpg_scrape_deuterium' => 0.25,
459
    'rpg_scrape_metal'     => 0.75,
460
461
    'security_ban_extra'               => '',
462
    'security_write_full_url_disabled' => 1, // Disables writing full URLs to counter table
463
464
    'server_que_length_hangar'     => '5', //
465
    'server_que_length_research'   => '1', //
466
    'server_que_length_structures' => '5', //
467
468
    'server_start_date' => '', //
469
470
    'server_updater_check_auto'   => 0, // Server auto-check version
471
    'server_updater_check_last'   => 0, // Server last check time
472
    'server_updater_check_period' => PERIOD_DAY, // Server auto-check period
473
    'server_updater_check_result' => SNC_VER_NEVER, // Server last check result
474
    'server_updater_id'           => 0, // Server ID on update server
475
    'server_updater_key'          => '', // Server key on update server
476
477
    'stats_history_days'     => 14, // За сколько дней хранить статистику в базе
478
    'stats_hide_admins'      => 1,
479
    'stats_hide_player_list' => '',
480
    'stats_hide_pm_link'     => 0,
481
    'stats_minimal_interval' => STATS_RUN_INTERVAL_MINIMUM, // Minimal stats interval
482
    'stats_schedule'         => '04:00:00',
483
    'stats_php_memory'       => '1G',
484
485
    'tpl_minifier'  => 0, // Template minifier
486
    'tpl_allow_php' => 0, // PTL allow INCLUDEPHP and PHP tags
487
488
    'tutorial_first_item' => 1,
489
490
    'uni_galaxy_distance' => UNIVERSE_GALAXY_DISTANCE, // 20000 by default
491
    'uni_price_galaxy'    => 10000,
492
    'uni_price_system'    => 1000,
493
494
    'upd_lock_time' => 300, // How long update will lock table. Also update increment time when it requires
495
496
    'url_faq'                 => '',
497
    'url_forum'               => '',
498
    'url_purchase_metamatter' => '',
499
    'url_rules'               => '',
500
501
    'users_amount'              => 1,                // Total users count
502
    'game_users_online_timeout' => PERIOD_MINUTE_15, // Seconds, How long user should consider ONLINE for online counter
503
    'game_users_update_online'  => 30,               // How often user online should be refreshed (seconds)
504
    'var_online_user_time'      => 0,                // When last time user online was refreshed
505
    'var_online_user_count'     => 0,                // Last calculated online user count
506
    'server_log_online'         => 0,                // Log online user count
507
508
    'user_birthday_celebrate' => 0, // When last time celebrations (i.e. gift-giving) was made - timestamp
509
    'user_birthday_gift'      => 0, // User birthday gift - Dark Matter points
510
    'user_birthday_range'     => PERIOD_MONTH, // How far in past can be user birthday for giving him gift - seconds
511
512
513
    'var_db_update'     => 0, // Time of last DB update
514
    'var_db_update_end' => 0, // Time when last DB update should end. Need to prevent duplicate update
515
516
    'var_news_last'       => 0, // Last news post time
517
518
    // Statistic
519
    'var_stat_update'     => 0,
520
    'var_stat_update_end' => 0,
521
    'var_stat_update_msg' => 'Update never started',
522
523
  );
524
525
  protected $notEmptyFields = [
526
    'upd_lock_time' => 'upd_lock_time',
527
  ];
528
529
  public function __construct($gamePrefix = 'sn_') {
530
    parent::__construct($gamePrefix, 'config');
531
  }
532
533
  public static function getInstance($gamePrefix = 'sn_', $table_name = 'config') {
534
    if (!isset(self::$cacheObject)) {
535
      $className         = get_class();
536
      self::$cacheObject = new $className($gamePrefix, $table_name);
537
    }
538
539
    return self::$cacheObject;
540
  }
541
542
  /**
543
   * @param int|string $date Date ether as Unix timestamp or mySQL timestamp
544
   * @param int        $as   Output format WATCHDOG_TIME_UNIX | WATCHDOG_TIME_SQL
545
   *
546
   * @return false|int|string Will return 0 on invalid string with WATCHDOG_TIME_UNIX and FALSE on invalid value with WATCHDOG_TIME_UNIX
547
   * @see FMT_DATE_TIME_SQL
548
   */
549
  public function dateConvert($date, $as) {
550
    if ($as === self::DATE_TYPE_UNIX && !is_numeric($date)) {
551
      // It is not a TIMESTAMP - maybe it's SQL timestamp or other date-related string? Trying to convert to UNIX
552
      $date = intval(strtotime($date, SN_TIME_NOW));
553
    } elseif ($as === self::DATE_TYPE_SQL_STRING && (!is_string($date) || is_numeric($date))) {
554
      $date = date(FMT_DATE_TIME_SQL, $date);
0 ignored issues
show
It seems like $date can also be of type string; however, parameter $timestamp of date() does only seem to accept integer|null, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

554
      $date = date(FMT_DATE_TIME_SQL, /** @scrutinizer ignore-type */ $date);
Loading history...
555
    }
556
557
    return $date;
558
  }
559
560
  /**
561
   * Will write to DB date as specified format
562
   *
563
   * @param string     $name Config field name
564
   * @param int|string $date Date ether as Unix timestamp or mySQL timestamp
565
   * @param int        $as   Format of field in config table WATCHDOG_TIME_UNIX | WATCHDOG_TIME_SQL
566
   *
567
   * @return classConfig
568
   * @see dateConvert()
569
   */
570
  public function dateWrite($name, $date, $as = self::DATE_TYPE_SQL_STRING) {
571
    $this->pass()[$name] = $this->dateConvert($date, $as);
572
573
    return $this;
574
  }
575
576
  /**
577
   * Will read from DB date and convert it to specified format
578
   *
579
   * @param string $name Config field name
580
   * @param int    $as   Output format WATCHDOG_TIME_UNIX | WATCHDOG_TIME_SQL
581
   *
582
   * @return false|int|string
583
   * @see dateConvert()
584
   */
585
  public function dateRead($name, $as) {
586
    return $this->dateConvert($this->pass()[$name], $as);
587
  }
588
589
  public function getCypher() {
590
    $db = SN::$gc->db;
591
592
    if (empty($this->cypher)) {
593
      $db->transactionStart();
594
      $cypher = $this->pass()->server_cypher;
595
      if (empty($cypher)) {
596
        $cypher = md5(sys_random_string(32));
597
598
        $this->pass()->server_cypher = $cypher;
599
600
        $db->transactionCommit();
601
      } else {
602
        $db->transactionRollback();
603
      }
604
      $this->cypher = $cypher;
605
    }
606
607
    return $this->cypher;
608
  }
609
610
}
611