Completed
Push — work-fleets ( 2bd11a...17dd3b )
by SuperNova.WS
06:36
created

includes/update_old.php (2 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
if(!defined('IN_UPDATE') || IN_UPDATE !== true) {
4
  die('Hack attempt');
5
}
6
7
switch($new_version) {
8
  case 0:
9
  case 1:
10
  case 2:
11
  case 3:
12
  case 4:
13
  case 5:
14
  case 6:
15
  case 7:
16
  case 8:
17
  case 9:
18
    upd_log_version_update();
19
20
    upd_alter_table('planets', "ADD `debris_metal` bigint(11) unsigned DEFAULT '0'", !$update_tables['planets']['debris_metal']);
21
    upd_alter_table('planets', "ADD `debris_crystal` bigint(11) unsigned DEFAULT '0'", !$update_tables['planets']['debris_crystal']);
22
23
    upd_alter_table('planets', array(
24
      "ADD `parent_planet` bigint(11) unsigned DEFAULT '0'",
25
      "ADD KEY `i_parent_planet` (`parent_planet`)"
26
    ), !$update_tables['planets']['parent_planet']);
27
    upd_do_query(
28
      "UPDATE `{{planets}}` AS lu
29
        LEFT JOIN `{{planets}}` AS pl
30
          ON pl.galaxy=lu.galaxy AND pl.system=lu.system AND pl.planet=lu.planet AND pl.planet_type=1
31
      SET lu.parent_planet=pl.id WHERE lu.planet_type=3;"
32
    );
33
    upd_drop_table('lunas');
34
35
    if($update_tables['galaxy']) {
36
      upd_do_query(
37
        'UPDATE `{{planets}}`
38
          LEFT JOIN `{{galaxy}}` ON {{galaxy}}.id_planet = {{planets}}.id
39
        SET
40
          {{planets}}.debris_metal = {{galaxy}}.metal,
41
          {{planets}}.debris_crystal = {{galaxy}}.crystal
42
        WHERE {{galaxy}}.metal>0 OR {{galaxy}}.crystal>0;'
43
      );
44
    }
45
    upd_drop_table('galaxy');
46
47
    upd_create_table('counter',
48
      "(
49
        `id` bigint(11) NOT NULL AUTO_INCREMENT,
50
        `time` int(11) NOT NULL DEFAULT '0',
51
        `page` varchar(255) CHARACTER SET utf8 DEFAULT '0',
52
        `user_id` bigint(11) DEFAULT '0',
53
        `ip` varchar(15) DEFAULT NULL,
54
        PRIMARY KEY (`id`),
55
        KEY `i_user_id` (`user_id`),
56
        KEY `i_ip` (`ip`)
57
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
58
    );
59
    upd_alter_table('counter', "ADD `url` varchar(255) CHARACTER SET utf8 DEFAULT ''", !$update_tables['counter']['url']);
60
61
    upd_alter_table('fleets', array(
62
      "ADD KEY `fleet_mess` (`fleet_mess`)",
63
      "ADD KEY `fleet_group` (`fleet_group`)"
64
    ), !$update_indexes['fleets']['fleet_mess']);
65
66
    upd_alter_table('referrals', "ADD `dark_matter` bigint(11) NOT NULL DEFAULT '0' COMMENT 'How much player have aquired Dark Matter'", !$update_tables['referrals']['dark_matter']);
67
    upd_alter_table('referrals', "ADD KEY `id_partner` (`id_partner`)", !$update_indexes['referrals']['id_partner']);
68
69
    upd_check_key('rpg_bonus_divisor', 10);
70
71
    upd_do_query("DELETE FROM {{config}} WHERE `config_name` IN ('BannerURL', 'banner_source_post', 'BannerOverviewFrame',
72
      'close_reason', 'dbVersion', 'ForumUserBarFrame', 'OverviewBanner', 'OverviewClickBanner', 'OverviewExternChat',
73
      'OverviewExternChatCmd', 'OverviewNewsText', 'UserbarURL', 'userbar_source');");
74
75
    $dm_change_legit = true;
76
77
    upd_do_query(
78
      "UPDATE {{referrals}} AS r
79
        LEFT JOIN {{users}} AS u
80
          ON u.id = r.id
81
      SET r.dark_matter = u.lvl_minier + u.lvl_raid;"
82
    );
83
    upd_add_more_time();
84
85
    if($update_tables['users']['rpg_points']) {
86
      upd_do_query(
87
        "UPDATE {{users}} AS u
88
          RIGHT JOIN {{referrals}} AS r
89
            ON r.id_partner = u.id AND r.dark_matter >= " . classSupernova::$config->rpg_bonus_divisor . "
90
        SET u.rpg_points = u.rpg_points + FLOOR(r.dark_matter/" . classSupernova::$config->rpg_bonus_divisor . ");"
91
      );
92
    }
93
94
    $dm_change_legit = false;
95
    upd_do_query('COMMIT;', true);
96
    $new_version = 10;
97
98
  case 10:
99
  case 11:
100
  case 12:
101
  case 13:
102
  case 14:
103
  case 15:
104
  case 16:
105
  case 17:
106
  case 18:
107
  case 19:
108
  case 20:
109
  case 21:
110
    upd_log_version_update();
111
112
    upd_create_table('alliance_requests',
113
      "(
114
        `id_user` int(11) NOT NULL,
115
        `id_ally` int(11) NOT NULL DEFAULT '0',
116
        `request_text` text,
117
        `request_time` int(11) NOT NULL DEFAULT '0',
118
        `request_denied` tinyint(1) unsigned NOT NULL DEFAULT '0',
119
        PRIMARY KEY (`id_user`,`id_ally`)
120
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8;"
121
    );
122
123
    upd_alter_table('announce', "ADD `detail_url` varchar(250) NOT NULL DEFAULT '' COMMENT 'Link to more details about update'", !$update_tables['announce']['detail_url']);
124
125
    upd_alter_table('counter', array("MODIFY `ip` VARCHAR(250) COMMENT 'User last IP'", "ADD `proxy` VARCHAR(250) NOT NULL DEFAULT '' COMMENT 'User proxy (if any)'"), !$update_tables['counter']['proxy']);
126
127
    upd_alter_table('statpoints', array(
128
      "ADD `res_rank` INT(11) DEFAULT 0 COMMENT 'Rank by resources'",
129
      "ADD `res_old_rank` INT(11) DEFAULT 0 COMMENT 'Old rank by resources'",
130
      "ADD `res_points` BIGINT(20) DEFAULT 0 COMMENT 'Resource stat points'",
131
      "ADD `res_count` BIGINT(20) DEFAULT 0 COMMENT 'Old rank by resources'"
132
    ), !$update_tables['statpoints']['res_rank']);
133
134
    upd_alter_table('planets', "ADD `supercargo` bigint(11) NOT NULL DEFAULT '0' COMMENT 'Supercargo ship count'", !$update_tables['planets']['supercargo']);
135
136
    upd_alter_table('users', "DROP COLUMN `current_luna`", $update_tables['users']['current_luna']);
137
    upd_alter_table('users', array("DROP COLUMN `aktywnosc`", "DROP COLUMN `time_aktyw`", "DROP COLUMN `kiler`",
138
      "DROP COLUMN `kod_aktywujacy`", "DROP COLUMN `ataker`", "DROP COLUMN `atakin`"), $update_tables['users']['ataker']);
139
    upd_alter_table('users', "ADD `options` TEXT COMMENT 'Packed user options'", !$update_tables['users']['options']);
140
    upd_alter_table('users', "ADD `news_lastread` int(11) NOT NULL DEFAULT '0' COMMENT 'News last read date'", !$update_tables['users']['news_lastread']);
141
    upd_alter_table('users', array("MODIFY `user_lastip` VARCHAR(250) COMMENT 'User last IP'", "ADD `user_proxy` VARCHAR(250) NOT NULL DEFAULT '' COMMENT 'User proxy (if any)'"), !$update_tables['users']['user_proxy']);
142
143
    upd_drop_table('update');
144
145
    upd_check_key('fleet_speed', classSupernova::$config->fleet_speed / 2500, classSupernova::$config->fleet_speed >= 2500);
146
    upd_check_key('game_counter', 0);
147
    upd_check_key('game_default_language', 'ru');
148
    upd_check_key('game_default_skin', 'skins/EpicBlue/');
149
    upd_check_key('game_default_template', 'OpenGame');
150
    upd_check_key('game_news_overview', 3);
151
    upd_check_key('game_news_actual', 259200);
152
    upd_check_key('game_noob_factor', 5, !isset(classSupernova::$config->game_noob_factor));
153
    upd_check_key('game_noob_points', 5000, !isset(classSupernova::$config->game_noob_points));
154
    upd_check_key('game_speed', classSupernova::$config->game_speed / 2500, classSupernova::$config->game_speed >= 2500);
155
    upd_check_key('int_format_date', 'd.m.Y');
156
    upd_check_key('int_format_time', 'H:i:s', true);
157
    upd_check_key('int_banner_background', 'design/images/banner.png', true);
158
    upd_check_key('int_userbar_background', 'design/images/userbar.png', true);
159
    upd_check_key('player_max_colonies', classSupernova::$config->player_max_planets ? (classSupernova::$config->player_max_planets - 1) : 9);
160
    upd_check_key('url_forum', classSupernova::$config->forum_url, !isset(classSupernova::$config->url_forum));
161
    upd_check_key('url_rules', classSupernova::$config->rules_url, !isset(classSupernova::$config->url_rules));
162
    upd_check_key('url_dark_matter', '', !isset(classSupernova::$config->url_dark_matter));
163
164
    upd_do_query("DELETE FROM {{config}} WHERE `config_name` IN (
165
      'game_date_withTime', 'player_max_planets', 'OverviewNewsFrame', 'forum_url', 'rules_url'
166
    );");
167
168
    upd_do_query('COMMIT;', true);
169
    $new_version = 22;
170
171
  case 22:
172
    upd_log_version_update();
173
174
    upd_alter_table('planets', "ADD `governor` smallint unsigned NOT NULL DEFAULT '0' COMMENT 'Planet governor'", !$update_tables['planets']['governor']);
175
    upd_alter_table('planets', "ADD `governor_level` smallint unsigned NOT NULL DEFAULT '0' COMMENT 'Governor level'", !$update_tables['planets']['governor_level']);
176
    upd_alter_table('planets', "ADD `que` varchar(4096) NOT NULL DEFAULT '' COMMENT 'Planet que'", !$update_tables['planets']['que']);
177
178
    if($update_tables['planets']['b_building']) {
179
      $planet_query = upd_do_query('SELECT * FROM {{planets}} WHERE `b_building` <> 0;');
180
      $const_que_structures = QUE_STRUCTURES;
181
      while($planet_data = db_fetch($planet_query)) {
182
        $old_que = explode(';', $planet_data['b_building_id']);
183
        foreach($old_que as $old_que_item_string) {
184
          if(!$old_que_item_string) {
185
            continue;
186
          }
187
188
          $old_que_item = explode(',', $old_que_item_string);
189
          if($old_que_item[4] == 'build') {
190
            $old_que_item[4] = BUILD_CREATE;
191
          } else {
192
            $old_que_item[4] = BUILD_DESTROY;
193
          }
194
195
          $old_que_item[3] = $old_que_item[3] > $planet_data['last_update'] ? $old_que_item[3] - $planet_data['last_update'] : 1;
196
          $planet_data['que'] = "{$old_que_item[0]},1,{$old_que_item[3]},{$old_que_item[4]},{$const_que_structures};{$planet_data['que']}";
197
        }
198
        upd_do_query("UPDATE {{planets}} SET `que` = '{$planet_data['que']}', `b_building` = '0', `b_building_id` = '0' WHERE `id` = '{$planet_data['id']}' LIMIT 1;", true);
199
      }
200
    }
201
202
    upd_do_query('COMMIT;', true);
203
    $new_version = 23;
204
205
  case 23:
206
  case 24:
207
    upd_log_version_update();
208
209
    upd_create_table('confirmations',
210
      "(
211
        `id` bigint(11) NOT NULL AUTO_INCREMENT,
212
        `id_user` bigint(11) NOT NULL DEFAULT 0,
213
        `type` SMALLINT NOT NULL DEFAULT 0,
214
        `code` NVARCHAR(16) NOT NULL DEFAULT '',
215
        `email` NVARCHAR(64) NOT NULL DEFAULT '',
216
        `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
217
        PRIMARY KEY (`id`),
218
        KEY `i_code_email` (`code`, `email`)
219
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
220
    );
221
222
    if($update_tables['users']['urlaubs_until']) {
223
      upd_alter_table('users', "ADD `vacation` int(11) NOT NULL DEFAULT '0' COMMENT 'Time when user can leave vacation mode'", !$update_tables['users']['vacation']);
224
      upd_do_query('UPDATE {{users}} SET `vacation` = `urlaubs_until` WHERE `urlaubs_modus` <> 0;');
225
      upd_alter_table('users', 'DROP COLUMN `urlaubs_until`, DROP COLUMN `urlaubs_modus`, DROP COLUMN `urlaubs_modus_time`', $update_tables['users']['urlaubs_until']);
226
    }
227
228
    upd_check_key('user_vacation_disable', classSupernova::$config->urlaubs_modus_erz, !isset(classSupernova::$config->user_vacation_disable));
229
    upd_do_query("DELETE FROM {{config}} WHERE `config_name` IN ('urlaubs_modus_erz');");
230
231
    upd_do_query('COMMIT;', true);
232
    $new_version = 25;
233
234
  case 25:
235
    upd_log_version_update();
236
237
    upd_alter_table('rw', array(
238
      "DROP COLUMN `a_zestrzelona`",
239
      "DROP INDEX `rid`",
240
      "ADD COLUMN `report_id` bigint(11) NOT NULL AUTO_INCREMENT FIRST",
241
      "ADD PRIMARY KEY (`report_id`)",
242
      "ADD INDEX `i_rid` (`rid`)"
243
    ), !$update_tables['rw']['report_id']);
244
245
    upd_add_more_time();
246
    upd_create_table('logs_backup', "AS (SELECT * FROM {{logs}});");
247
248
    upd_alter_table('logs', array(
249
      "MODIFY COLUMN `log_id` INT(1)",
250
      "DROP PRIMARY KEY"
251
    ), !$update_tables['logs']['log_timestamp']);
252
253
    upd_alter_table('logs', array(
254
      "DROP COLUMN `log_id`",
255
      "ADD COLUMN `log_timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Human-readable record timestamp' FIRST",
256
      "ADD COLUMN `log_username` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'Username' AFTER `log_timestamp`",
257
      "MODIFY COLUMN `log_title` VARCHAR(64) NOT NULL DEFAULT 'Log entry' COMMENT 'Short description' AFTER `log_username`",
258
      "MODIFY COLUMN `log_page` VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'Page that makes entry to log' AFTER `log_text`",
259
      "CHANGE COLUMN `log_type` `log_code` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `log_page`",
260
      "MODIFY COLUMN `log_sender` BIGINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'User ID which make log record' AFTER `log_code`",
261
      "MODIFY COLUMN `log_time` INT(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Machine-readable timestamp' AFTER `log_sender`",
262
      "ADD COLUMN `log_dump` TEXT NOT NULL DEFAULT '' COMMENT 'Machine-readable dump of variables' AFTER `log_time`",
263
      "ADD INDEX `i_log_username` (`log_username`)",
264
      "ADD INDEX `i_log_time` (`log_time`)",
265
      "ADD INDEX `i_log_sender` (`log_sender`)",
266
      "ADD INDEX `i_log_code` (`log_code`)",
267
      "ADD INDEX `i_log_page` (`log_page`)",
268
      "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"
269
    ), !$update_tables['logs']['log_timestamp']);
270
    upd_do_query('DELETE FROM `{{logs}}` WHERE `log_code` = 303;');
271
272
    if($update_tables['errors']) {
273
      upd_do_query('INSERT INTO `{{logs}}` (`log_code`, `log_sender`, `log_title`, `log_text`, `log_page`, `log_time`) SELECT 500, `error_sender`, `error_type`, `error_text`, `error_page`, `error_time` FROM `{{errors}}`;');
274
      if($update_tables['errors_backup']) {
275
        upd_drop_table('errors_backup');
276
      }
277
      upd_alter_table('errors', ' RENAME TO ' . classSupernova::$config->db_prefix . 'errors_backup');
278
279
      upd_drop_table('errors');
280
    }
281
282
    upd_alter_table('logs', 'ORDER BY log_time');
283
284
    upd_alter_table('logs', array("ADD COLUMN `log_id` SERIAL", "ADD PRIMARY KEY (`log_id`)"), !$update_tables['logs']['log_id']);
285
286
    upd_do_query('UPDATE `{{logs}}` SET `log_timestamp` = FROM_UNIXTIME(`log_time`);');
287
    upd_do_query('UPDATE `{{logs}}` AS l LEFT JOIN `{{users}}` AS u ON u.id = l.log_sender SET l.log_username = u.username WHERE l.log_username IS NOT NULL;');
288
289
    upd_do_query("UPDATE `{{logs}}` SET `log_code` = 190 WHERE `log_code` = 100 AND `log_title` = 'Stat update';");
290
    upd_do_query("UPDATE `{{logs}}` SET `log_code` = 191 WHERE `log_code` = 101 AND `log_title` = 'Stat update';");
291
    upd_do_query("UPDATE `{{logs}}` SET `log_code` = 192 WHERE `log_code` = 102 AND `log_title` = 'Stat update';");
292
    $sys_log_disabled = false;
293
294
    upd_do_query('COMMIT;', true);
295
    $new_version = 26;
296
297
  case 26:
298
    upd_log_version_update();
299
300
    $sys_log_disabled = false;
301
302
    upd_alter_table('planets', "ADD INDEX `i_parent_planet` (`parent_planet`)", !$update_indexes['planets']['i_parent_planet']);
303
    upd_alter_table('messages', "DROP INDEX `owner`", $update_indexes['messages']['owner']);
304
    upd_alter_table('messages', "DROP INDEX `owner_type`", $update_indexes['messages']['owner_type']);
305
    upd_alter_table('messages', "DROP INDEX `sender_type`", $update_indexes['messages']['sender_type']);
306
307
    upd_alter_table('messages', array(
308
      "ADD INDEX `i_owner_time` (`message_owner`, `message_time`)",
309
      "ADD INDEX `i_sender_time` (`message_sender`, `message_time`)",
310
      "ADD INDEX `i_time` (`message_time`)"
311
    ), !$update_indexes['messages']['i_owner_time']);
312
313
    upd_drop_table('fleet_log');
314
315
    upd_do_query("UPDATE `{{planets}}` SET `metal` = 0 WHERE `metal` < 0;");
316
    upd_do_query("UPDATE `{{planets}}` SET `crystal` = 0 WHERE `crystal` < 0;");
317
    upd_do_query("UPDATE `{{planets}}` SET `deuterium` = 0 WHERE `deuterium` < 0;");
318
    upd_alter_table('planets', array(
319
      "DROP COLUMN `b_building`",
320
      "DROP COLUMN `b_building_id`"
321
    ), $update_tables['planets']['b_building']);
322
323
    upd_do_query("DELETE FROM {{config}} WHERE `config_name` IN ('noobprotection', 'noobprotectionmulti', 'noobprotectiontime', 'chat_admin_msgFormat');");
324
325
    upd_do_query("DELETE FROM `{{logs}}` WHERE `log_code` = 501;");
326
    upd_do_query("DELETE FROM `{{logs}}` WHERE `log_title` IN ('Canceling Hangar Que', 'Building Planet Defense');");
327
328
    upd_check_key('chat_admin_highlight', '<font color=purple>$1</font>', !isset(classSupernova::$config->chat_admin_highlight));
329
330
    upd_check_key('int_banner_URL', 'banner.php?type=banner', classSupernova::$config->int_banner_URL == '/banner.php?type=banner');
331
    upd_check_key('int_userbar_URL', 'banner.php?type=userbar', classSupernova::$config->int_userbar_URL == '/banner.php?type=userbar');
332
333
    upd_alter_table('users', 'CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci');
334
335
    if(!$update_tables['shortcut']) {
336
      upd_create_table('shortcut',
337
        "(
338
          `shortcut_id` SERIAL,
339
          `shortcut_user_id` BIGINT(11) UNSIGNED NOT NULL DEFAULT 0,
340
          `shortcut_planet_id` bigint(11) NOT NULL DEFAULT 0,
341
          `shortcut_galaxy` int(3) NOT NULL DEFAULT 0,
342
          `shortcut_system` int(3) NOT NULL DEFAULT 0,
343
          `shortcut_planet` int(3) NOT NULL DEFAULT 0,
344
          `shortcut_planet_type` tinyint(1) NOT NULL DEFAULT 1,
345
          `shortcut_text` NVARCHAR(64) NOT NULL DEFAULT '',
346
347
          PRIMARY KEY (`shortcut_id`),
348
          KEY `i_shortcut_user_id` (`shortcut_user_id`),
349
          KEY `i_shortcut_planet_id` (`shortcut_planet_id`),
350
351
          CONSTRAINT `FK_shortcut_user_id` FOREIGN KEY (`shortcut_user_id`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
352
353
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
354
      );
355
356
      $temp_planet_types = array(PT_PLANET, PT_DEBRIS, PT_MOON);
357
358
      $query = upd_do_query("SELECT id, fleet_shortcut FROM {{users}} WHERE fleet_shortcut > '';");
359
      while($user_data = db_fetch($query)) {
360
        $shortcuts = explode("\r\n", $user_data['fleet_shortcut']);
361
        foreach($shortcuts as $shortcut) {
362
          if(!$shortcut) {
363
            continue;
364
          }
365
366
          $shortcut = explode(',', $shortcut);
367
          $shortcut[0] = db_escape($shortcut[0]);
368
          $shortcut[1] = intval($shortcut[1]);
369
          $shortcut[2] = intval($shortcut[2]);
370
          $shortcut[3] = intval($shortcut[3]);
371
          $shortcut[4] = intval($shortcut[4]);
372
373
          if($shortcut[0] && $shortcut[1] && $shortcut[2] && $shortcut[3] && in_array($shortcut[4], $temp_planet_types)) {
374
            $db_prefix = classSupernova::$config->db_prefix;
375
            upd_do_query("INSERT INTO {$db_prefix}shortcut (shortcut_user_id, shortcut_galaxy, shortcut_system, shortcut_planet, shortcut_planet_type, shortcut_text) VALUES ({$user_data['id']}, {$shortcut[1]}, {$shortcut[2]}, {$shortcut[3]}, {$shortcut[4]}, '{$shortcut[0]}');", true);
376
          }
377
        }
378
      }
379
380
      upd_alter_table('users', 'DROP COLUMN `fleet_shortcut`');
381
    };
382
383
    upd_check_key('url_faq', '', !isset(classSupernova::$config->url_faq));
384
385
    upd_do_query('COMMIT;', true);
386
    $new_version = 27;
387
388
  case 27:
389
    upd_log_version_update();
390
391
    upd_check_key('chat_highlight_moderator', '<font color=green>$1</font>', !isset(classSupernova::$config->chat_highlight_moderator));
392
    upd_check_key('chat_highlight_operator', '<font color=red>$1</font>', !isset(classSupernova::$config->chat_highlight_operator));
393
    upd_check_key('chat_highlight_admin', classSupernova::$config->chat_admin_highlight ? classSupernova::$config->chat_admin_highlight : '<font color=puple>$1</font>', !isset(classSupernova::$config->chat_highlight_admin));
394
395
    upd_do_query("DELETE FROM {{config}} WHERE `config_name` IN ('chat_admin_highlight');");
396
397
    upd_alter_table('banned', array(
398
      "CHANGE COLUMN id ban_id bigint(20) unsigned NOT NULL AUTO_INCREMENT",
399
      "CHANGE COLUMN `who` `ban_user_name` VARCHAR(64) NOT NULL DEFAULT ''",
400
      "CHANGE COLUMN `theme` `ban_reason` VARCHAR(128) NOT NULL DEFAULT ''",
401
      "CHANGE COLUMN `time` `ban_time` int(11) NOT NULL DEFAULT 0",
402
      "CHANGE COLUMN `longer` `ban_until` int(11) NOT NULL DEFAULT 0",
403
      "CHANGE COLUMN `author` `ban_issuer_name` VARCHAR(64) NOT NULL DEFAULT ''",
404
      "CHANGE COLUMN `email` `ban_issuer_email` VARCHAR(64) NOT NULL DEFAULT ''",
405
      "DROP COLUMN who2",
406
      "ADD PRIMARY KEY (`ban_id`)"
407
    ), !$update_tables['banned']['ban_id']);
408
409
    upd_alter_table('alliance', array(
410
      "MODIFY COLUMN `id` SERIAL",
411
      "ADD CONSTRAINT UNIQUE KEY `i_ally_name` (`ally_name`)",
412
      "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci",
413
      "ENGINE=InnoDB"
414
    ), !$update_indexes['alliance']['i_ally_name']);
415
416
    $upd_relation_types = "'neutral', 'war', 'peace', 'confederation', 'federation', 'union', 'master', 'slave'";
417
    upd_create_table('alliance_diplomacy',
418
      "(
419
        `alliance_diplomacy_id` SERIAL,
420
        `alliance_diplomacy_ally_id` bigint(11) UNSIGNED DEFAULT NULL,
421
        `alliance_diplomacy_contr_ally_id` bigint(11) UNSIGNED DEFAULT NULL,
422
        `alliance_diplomacy_contr_ally_name` varchar(32) DEFAULT '',
423
        `alliance_diplomacy_relation` SET({$upd_relation_types}) NOT NULL default 'neutral',
424
        `alliance_diplomacy_relation_last` SET({$upd_relation_types}) NOT NULL default 'neutral',
425
        `alliance_diplomacy_time` INT(11) NOT NULL DEFAULT 0,
426
427
        PRIMARY KEY (`alliance_diplomacy_id`),
428
        KEY (`alliance_diplomacy_ally_id`, `alliance_diplomacy_contr_ally_id`, `alliance_diplomacy_time`),
429
        KEY (`alliance_diplomacy_ally_id`, `alliance_diplomacy_time`),
430
431
        CONSTRAINT  `FK_diplomacy_ally_id`         FOREIGN KEY (`alliance_diplomacy_ally_id`)         REFERENCES `{{alliance}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
432
        ,CONSTRAINT `FK_diplomacy_contr_ally_id`   FOREIGN KEY (`alliance_diplomacy_contr_ally_id`)   REFERENCES `{{alliance}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
433
        ,CONSTRAINT `FK_diplomacy_contr_ally_name` FOREIGN KEY (`alliance_diplomacy_contr_ally_name`) REFERENCES `{{alliance}}` (`ally_name`) ON DELETE CASCADE ON UPDATE CASCADE
434
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;"
435
    );
436
437
    upd_create_table('alliance_negotiation',
438
      "(
439
        `alliance_negotiation_id` SERIAL,
440
        `alliance_negotiation_ally_id` bigint(11) UNSIGNED DEFAULT NULL,
441
        `alliance_negotiation_ally_name` varchar(32) DEFAULT '',
442
        `alliance_negotiation_contr_ally_id` bigint(11) UNSIGNED DEFAULT NULL,
443
        `alliance_negotiation_contr_ally_name` varchar(32) DEFAULT '',
444
        `alliance_negotiation_relation` SET({$upd_relation_types}) NOT NULL default 'neutral',
445
        `alliance_negotiation_time` INT(11) NOT NULL DEFAULT 0,
446
        `alliance_negotiation_propose` TEXT,
447
        `alliance_negotiation_response` TEXT,
448
        `alliance_negotiation_status` SMALLINT NOT NULL DEFAULT 0,
449
450
        PRIMARY KEY (`alliance_negotiation_id`),
451
        KEY (`alliance_negotiation_ally_id`, `alliance_negotiation_contr_ally_id`, `alliance_negotiation_time`),
452
        KEY (`alliance_negotiation_ally_id`, `alliance_negotiation_time`),
453
454
        CONSTRAINT  `FK_negotiation_ally_id`         FOREIGN KEY (`alliance_negotiation_ally_id`)         REFERENCES `{{alliance}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
455
        ,CONSTRAINT `FK_negotiation_ally_name`       FOREIGN KEY (`alliance_negotiation_ally_name`)       REFERENCES `{{alliance}}` (`ally_name`) ON DELETE CASCADE ON UPDATE CASCADE
456
        ,CONSTRAINT `FK_negotiation_contr_ally_id`   FOREIGN KEY (`alliance_negotiation_contr_ally_id`)   REFERENCES `{{alliance}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
457
        ,CONSTRAINT `FK_negotiation_contr_ally_name` FOREIGN KEY (`alliance_negotiation_contr_ally_name`) REFERENCES `{{alliance}}` (`ally_name`) ON DELETE CASCADE ON UPDATE CASCADE
458
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;"
459
    );
460
461
    upd_alter_table('users', array("MODIFY COLUMN `id` SERIAL", "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"), true);
462
    upd_alter_table('planets', array("MODIFY COLUMN `id` SERIAL", "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci"), true);
463
464
    upd_create_table('bashing',
465
      "(
466
        `bashing_id` SERIAL,
467
        `bashing_user_id` bigint(11) UNSIGNED DEFAULT NULL,
468
        `bashing_planet_id` bigint(11) UNSIGNED DEFAULT NULL,
469
        `bashing_time` INT(11) NOT NULL DEFAULT 0,
470
471
        PRIMARY KEY (`bashing_id`),
472
        KEY (`bashing_user_id`, `bashing_planet_id`, `bashing_time`),
473
        KEY (`bashing_planet_id`),
474
        KEY (`bashing_time`),
475
476
        CONSTRAINT  `FK_bashing_user_id`   FOREIGN KEY (`bashing_user_id`)   REFERENCES `{{users}}`   (`id`) ON DELETE CASCADE ON UPDATE CASCADE
477
        ,CONSTRAINT `FK_bashing_planet_id` FOREIGN KEY (`bashing_planet_id`) REFERENCES `{{planets}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
478
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;"
479
    );
480
481
    upd_check_key('fleet_bashing_war_delay', 12 * 60 * 60, !isset(classSupernova::$config->fleet_bashing_war_delay));
482
    upd_check_key('fleet_bashing_scope', 24 * 60 * 60, !isset(classSupernova::$config->fleet_bashing_scope));
483
    upd_check_key('fleet_bashing_interval', 30 * 60, !isset(classSupernova::$config->fleet_bashing_interval));
484
    upd_check_key('fleet_bashing_waves', 3, !isset(classSupernova::$config->fleet_bashing_waves));
485
    upd_check_key('fleet_bashing_attacks', 3, !isset(classSupernova::$config->fleet_bashing_attacks));
486
487
    upd_do_query('COMMIT;', true);
488
    $new_version = 28;
489
490
  case 28:
491
  case 28.1:
492
    upd_log_version_update();
493
494
    upd_create_table('quest',
495
      "(
496
        `quest_id` SERIAL,
497
        `quest_name` VARCHAR(255) DEFAULT NULL,
498
        `quest_description` TEXT,
499
        `quest_conditions` TEXT,
500
        `quest_rewards` TEXT,
501
        `quest_type` TINYINT DEFAULT NULL,
502
        `quest_order` INT NOT NULL DEFAULT 0,
503
504
        PRIMARY KEY (`quest_id`)
505
        ,KEY (`quest_type`, `quest_order`)
506
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;"
507
    );
508
509
    upd_create_table('quest_status',
510
      "(
511
        `quest_status_id` SERIAL,
512
        `quest_status_quest_id` bigint(20) UNSIGNED DEFAULT NULL,
513
        `quest_status_user_id` bigint(20) UNSIGNED NOT NULL DEFAULT '0',
514
        `quest_status_progress` VARCHAR(255) NOT NULL DEFAULT '',
515
        `quest_status_status` TINYINT NOT NULL DEFAULT 1,
516
517
        PRIMARY KEY (`quest_status_id`)
518
        ,KEY (`quest_status_user_id`, `quest_status_quest_id`, `quest_status_status`)
519
        ,CONSTRAINT `FK_quest_status_quest_id` FOREIGN KEY (`quest_status_quest_id`) REFERENCES `{{quest}}` (`quest_id`) ON DELETE CASCADE ON UPDATE CASCADE
520
        ,CONSTRAINT `FK_quest_status_user_id`  FOREIGN KEY (`quest_status_user_id`)  REFERENCES `{{users}}` (`id`)       ON DELETE CASCADE ON UPDATE CASCADE
521
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;"
522
    );
523
524
    upd_check_key('quest_total', 0, !isset(classSupernova::$config->quest_total));
525
526
    for($i = 0; $i < 25; $i++) {
527
      upd_alter_table('alliance', array("DROP INDEX `id_{$i}`",), $update_indexes['alliance']["id_{$i}"]);
528
      upd_alter_table('users', array("DROP INDEX `id_{$i}`",), $update_indexes['users']["id_{$i}"]);
529
      upd_alter_table('planets', array("DROP INDEX `id_{$i}`",), $update_indexes['planets']["id_{$i}"]);
530
    }
531
532
    upd_alter_table('alliance', array('DROP INDEX `id`',), $update_indexes['alliance']['id']);
533
    upd_alter_table('alliance', array('DROP INDEX `ally_name`',), $update_indexes['alliance']['ally_name']);
534
    upd_alter_table('alliance', array('ADD UNIQUE INDEX `i_ally_tag` (`ally_tag`)',), !$update_indexes['alliance']['i_ally_tag']);
535
    upd_alter_table('alliance', array('MODIFY COLUMN `ranklist` TEXT',), true);
536
537
    upd_alter_table('users', array('DROP INDEX `id`',), $update_indexes['users']['id']);
538
    upd_alter_table('users', "CHANGE COLUMN `rpg_points` `dark_matter` int(11) DEFAULT 0", $update_tables['users']['rpg_points']);
539
540
    upd_alter_table('users', array(
541
      'DROP COLUMN `ally_request`',
542
      'DROP COLUMN `ally_request_text`',
543
    ), $update_tables['users']['ally_request_text']);
544
545
    upd_alter_table('users', array(
546
      'ADD INDEX `i_ally_id` (`ally_id`)',
547
      'ADD INDEX `i_ally_name` (`ally_name`)',
548
    ), !$update_indexes['users']['i_ally_id']);
549
550
    upd_alter_table('users', array(
551
      "ADD `msg_admin` bigint(11) unsigned DEFAULT '0' AFTER mnl_buildlist"
552
    ), !$update_tables['users']['msg_admin']);
553
554
    if(!$update_foreigns['users']['FK_users_ally_id']) {
555
      upd_alter_table('users', array(
556
        'MODIFY COLUMN `ally_name` VARCHAR(32) DEFAULT NULL',
557
        'MODIFY COLUMN `ally_id` BIGINT(20) UNSIGNED DEFAULT NULL',
558
      ), strtoupper($update_tables['users']['ally_id']['Type']) != 'BIGINT(20) UNSIGNED');
559
560
      upd_do_query('DELETE FROM {{alliance}} WHERE id NOT IN (SELECT ally_id FROM {{users}} GROUP BY ally_id);');
561
      upd_do_query("UPDATE {{users}} SET `ally_id` = NULL, ally_name = NULL, ally_register_time = 0, ally_rank_id = 0 WHERE `ally_id` NOT IN (SELECT id FROM {{alliance}});");
562
      upd_do_query("UPDATE {{users}} AS u LEFT JOIN {{alliance}} AS a ON u.ally_id = a.id SET u.ally_name = a.ally_name, u.ally_tag = a.ally_tag WHERE u.ally_id IS NOT NULL;");
563
564
      upd_alter_table('users', array(
565
        "ADD CONSTRAINT `FK_users_ally_id` FOREIGN KEY (`ally_id`) REFERENCES `{{alliance}}` (`id`) ON DELETE SET NULL ON UPDATE CASCADE",
566
        "ADD CONSTRAINT `FK_users_ally_name` FOREIGN KEY (`ally_name`) REFERENCES `{{alliance}}` (`ally_name`) ON DELETE SET NULL ON UPDATE CASCADE",
567
      ), !$update_foreigns['users']['FK_users_ally_id']);
568
    }
569
570
    upd_alter_table('planets', array(
571
      "MODIFY COLUMN `debris_metal` BIGINT(20) UNSIGNED DEFAULT 0",
572
      "MODIFY COLUMN `debris_crystal` BIGINT(20) UNSIGNED DEFAULT 0",
573
    ), strtoupper($update_tables['planets']['debris_metal']['Type']) != 'BIGINT(20) UNSIGNED');
574
575
    $illegal_moon_query = upd_do_query("SELECT id FROM `{{planets}}` WHERE `id_owner` <> 0 AND `planet_type` = 3 AND `parent_planet` <> 0 AND `parent_planet` NOT IN (SELECT `id` FROM {{planets}} WHERE `planet_type` = 1);");
576
    while($illegal_moon_row = db_fetch($illegal_moon_query)) {
577
      upd_do_query("DELETE FROM {{planets}} WHERE id = {$illegal_moon_row['id']} LIMIT 1;", true);
578
    }
579
580
    upd_check_key('allow_buffing', isset(classSupernova::$config->fleet_buffing_check) ? !classSupernova::$config->fleet_buffing_check : 0, !isset(classSupernova::$config->allow_buffing));
581
    upd_check_key('ally_help_weak', 0, !isset(classSupernova::$config->ally_help_weak));
582
583
    upd_do_query('COMMIT;', true);
584
    $new_version = 29;
585
586
  case 29:
587
    upd_log_version_update();
588
589
    upd_check_key('game_email_pm', 0, !isset(classSupernova::$config->game_email_pm));
590
    upd_check_key('player_vacation_time', 2 * 24 * 60 * 60, !isset(classSupernova::$config->player_vacation_time));
591
    upd_check_key('player_delete_time', 45 * 24 * 60 * 60, !isset(classSupernova::$config->player_delete_time));
592
593
    upd_create_table('log_dark_matter',
594
      "(
595
        `log_dark_matter_id` SERIAL,
596
        `log_dark_matter_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Human-readable record timestamp',
597
        `log_dark_matter_username` varchar(64) NOT NULL DEFAULT '' COMMENT 'Username',
598
        `log_dark_matter_reason` INT(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Reason ID for dark matter adjustment',
599
        `log_dark_matter_amount` INT(10) NOT NULL DEFAULT 0 COMMENT 'Amount of dark matter change',
600
        `log_dark_matter_comment` TEXT COMMENT 'Comments',
601
        `log_dark_matter_page` varchar(512) NOT NULL DEFAULT '' COMMENT 'Page that makes entry to log',
602
        `log_dark_matter_sender` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT 'User ID which make log record',
603
604
        PRIMARY KEY (`log_dark_matter_id`),
605
        KEY `i_log_dark_matter_sender_id` (`log_dark_matter_sender`, `log_dark_matter_id`),
606
        KEY `i_log_dark_matter_reason_sender_id` (`log_dark_matter_reason`, `log_dark_matter_sender`, `log_dark_matter_id`),
607
        KEY `i_log_dark_matter_amount` (`log_dark_matter_amount`)
608
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;"
609
    );
610
    upd_do_query('COMMIT;', true);
611
612
    $records = 1;
613
    while($records) {
614
      upd_do_query('START TRANSACTION;', true);
615
      $query = upd_do_query("SELECT * FROM {{LOGS}} WHERE log_code = 102 ORDER BY log_id LIMIT 1000;");
616
      $records = classSupernova::$db->db_num_rows($query);
617
      while($row = db_fetch($query)) {
618
        $result = preg_match('/^Player ID (\d+) Dark Matter was adjusted with (\-?\d+). Reason: (.+)$/', $row['log_text'], $matches);
619
620
        $reason = RPG_NONE;
621
        $comment = $matches[3];
622
        switch($matches[3]) {
623
          case 'Level Up For Structure Building':
624
            $reason = RPG_STRUCTURE;
625
          break;
626
627
          case 'Level Up For Raiding':
628
          case 'Level Up For Raids':
629
            $reason = RPG_RAID;
630
            $comment = 'Level Up For Raiding';
631
          break;
632
633
          case 'Expedition Bonus':
634
            $reason = RPG_EXPEDITION;
635
          break;
636
637
          default:
638
            if(preg_match('/^Using Black Market page (\d+)$/', $comment, $matches2)) {
639
              $reason = RPG_MARKET;
640
            } elseif(preg_match('/^Spent for officer (.+) ID (\d+)$/', $comment, $matches2)) {
641
              $reason = RPG_MERCENARY;
642
              $comment = "Spent for mercenary {$matches2[1]} GUID {$matches2[2]}";
643
            } elseif(preg_match('/^Incoming From Referral ID\ ?(\d+)$/', $comment, $matches2)) {
644
              $reason = RPG_REFERRAL;
645
              $comment = "Incoming from referral ID {$matches[1]}";
646
            } elseif(preg_match('/^Through admin interface for user .* ID \d+ (.*)$/', $comment, $matches2)) {
647
              $reason = RPG_ADMIN;
648
              $comment = $matches2[1];
649
            }
650
          break;
651
        }
652
653
        if($matches[2]) {
654
          $row['log_username'] = db_escape($row['log_username']);
655
          $row['log_page'] = db_escape($row['log_page']);
656
          $comment = db_escape($comment);
657
658
          upd_do_query(
659
            "INSERT INTO {{log_dark_matter}} (`log_dark_matter_timestamp`, `log_dark_matter_username`, `log_dark_matter_reason`,
660
              `log_dark_matter_amount`, `log_dark_matter_comment`, `log_dark_matter_page`, `log_dark_matter_sender`)
661
            VALUES (
662
              '{$row['log_timestamp']}', '{$row['log_username']}', {$reason},
663
              {$matches[2]}, '{$comment}', '{$row['log_page']}', {$row['log_sender']});"
664
            , true);
665
        }
666
      }
667
668
      upd_do_query("DELETE FROM {{LOGS}} WHERE log_code = 102 LIMIT 1000;", true);
669
      upd_do_query('COMMIT;', true);
670
    }
671
672
    foreach($update_tables as $table_name => $cork) {
673
      $row = db_fetch(upd_do_query("SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA = '" . db_escape(classSupernova::$db_name) . "' AND TABLE_NAME = '" . classSupernova::$config->db_prefix . "{$table_name}';", true));
674
      if($row['ENGINE'] != 'InnoDB') {
675
        upd_alter_table($table_name, 'ENGINE=InnoDB', true);
676
      }
677
      if($row['TABLE_COLLATION'] != 'utf8_general_ci') {
678
        upd_alter_table($table_name, 'CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci', true);
679
      }
680
    }
681
682
    upd_do_query('COMMIT;', true);
683
    $new_version = 30;
684
685
  case 30:
686
    upd_log_version_update();
687
688
    upd_alter_table('users', array(
689
      "ADD `player_que` TEXT"
690
    ), !$update_tables['users']['player_que']);
691
692
    upd_alter_table('planets', array(
693
      "CHANGE COLUMN `governor` `PLANET_GOVERNOR_ID` SMALLINT(5) NOT NULL DEFAULT 0",
694
      "CHANGE COLUMN `governor_level` `PLANET_GOVERNOR_LEVEL` SMALLINT(5) NOT NULL DEFAULT 0",
695
    ), !$update_tables['planets']['PLANET_GOVERNOR_ID']);
696
697
    if($update_tables['users']['rpg_geologue']) {
698
      classSupernova::$db->doUpdate("UPDATE `{{users}}` SET `dark_matter` = `dark_matter` + (`rpg_geologue` + `rpg_ingenieur` + `rpg_constructeur` + `rpg_technocrate` + `rpg_scientifique` + `rpg_defenseur`) * 3;");
699
700
      upd_alter_table('users', array(
701
        "DROP COLUMN `rpg_geologue`",
702
        "DROP COLUMN `rpg_ingenieur`",
703
        "DROP COLUMN `rpg_constructeur`",
704
        "DROP COLUMN `rpg_technocrate`",
705
        "DROP COLUMN `rpg_scientifique`",
706
        "DROP COLUMN `rpg_defenseur`",
707
      ), $update_tables['users']['rpg_geologue']);
708
    }
709
710 View Code Duplication
    if($update_tables['users']['rpg_bunker']) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
711
      classSupernova::$db->doUpdate("UPDATE {{users}} SET `dark_matter` = `dark_matter` + (`rpg_bunker`) * 3;");
712
713
      upd_alter_table('users', array(
714
        "DROP COLUMN `rpg_bunker`",
715
      ), $update_tables['users']['rpg_bunker']);
716
    }
717
718
    upd_alter_table('users', array(
719
      "DROP COLUMN `p_infligees`",
720
      "MODIFY COLUMN `dark_matter` BIGINT(20) DEFAULT '0' AFTER `lvl_raid`",
721
    ), $update_tables['users']['p_infligees']);
722
723
    upd_alter_table('users', array(
724
      "ADD COLUMN `mrc_academic` SMALLINT(3) DEFAULT 0",
725
    ), !$update_tables['users']['mrc_academic']);
726
727
    upd_alter_table('users', array(
728
      "DROP COLUMN `db_deaktjava`",
729
      "DROP COLUMN `kolorminus`",
730
      "DROP COLUMN `kolorplus`",
731
      "DROP COLUMN `kolorpoziom`",
732
      "DROP COLUMN `deleteme`",
733
734
      "MODIFY COLUMN `xpraid` BIGINT(20) UNSIGNED DEFAULT '0'",
735
      "MODIFY COLUMN `xpminier` BIGINT(20) UNSIGNED DEFAULT '0'",
736
      "MODIFY COLUMN `raids` BIGINT(20) UNSIGNED DEFAULT '0'",
737
      "MODIFY COLUMN `raidsloose` BIGINT(20) UNSIGNED DEFAULT '0'",
738
      "MODIFY COLUMN `raidswin` BIGINT(20) UNSIGNED DEFAULT '0'",
739
740
      "MODIFY COLUMN `register_time` INT(10) UNSIGNED DEFAULT '0'",
741
      "MODIFY COLUMN `onlinetime` INT(10) UNSIGNED DEFAULT '0'",
742
      "MODIFY COLUMN `news_lastread` INT(10) UNSIGNED DEFAULT '0'",
743
      "MODIFY COLUMN `deltime` INT(10) UNSIGNED DEFAULT '0'",
744
      "MODIFY COLUMN `banaday` INT(10) UNSIGNED DEFAULT '0'",
745
      "MODIFY COLUMN `vacation` INT(10) UNSIGNED DEFAULT '0'",
746
    ), strtoupper($update_tables['users']['xpraid']['Type']) != 'BIGINT(20) UNSIGNED');
747
748
    upd_alter_table('users', array(
749
      "ADD COLUMN `total_rank` INT(10) UNSIGNED NOT NULL DEFAULT 0",
750
      "ADD COLUMN `total_points` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0",
751
    ), !isset($update_tables['users']['total_rank']));
752
    classSupernova::$db->doUpdate("UPDATE {{users}} AS u JOIN {{statpoints}} AS sp ON sp.id_owner = u.id AND sp.stat_code = 1 AND sp.stat_type = 1 SET u.total_rank = sp.total_rank, u.total_points = sp.total_points;");
753
754
    upd_alter_table('alliance', array(
755
      "ADD COLUMN `total_rank` INT(10) UNSIGNED NOT NULL DEFAULT 0",
756
      "ADD COLUMN `total_points` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0",
757
    ), !isset($update_tables['alliance']['total_rank']));
758
    classSupernova::$db->doUpdate("UPDATE {{alliance}} AS a JOIN {{statpoints}} AS sp ON sp.id_owner = a.id AND sp.stat_code = 1 AND sp.stat_type = 2 SET a.total_rank = sp.total_rank, a.total_points = sp.total_points;");
759
760
    if(!isset($update_tables['users']['ally_tag'])) {
761
      upd_alter_table('users', array(
762
        "ADD COLUMN `ally_tag` varchar(8) DEFAULT NULL AFTER `ally_id`",
763
      ), !isset($update_tables['users']['ally_tag']));
764
      classSupernova::$db->doUpdate("UPDATE {{users}} AS u LEFT JOIN {{alliance}} AS a ON a.id = u.ally_id SET u.ally_tag = a.ally_tag, u.ally_name = a.ally_name;");
765
      classSupernova::$db->doUpdate("UPDATE {{users}} AS u LEFT JOIN {{alliance}} AS a ON a.id = u.ally_id SET u.ally_id = NULL, u.ally_tag = NULL, u.ally_name = NULL, u.ally_register_time = 0, ally_rank_id = 0 WHERE a.id IS NULL;");
766
      upd_alter_table('users', array(
767
        "ADD CONSTRAINT `FK_users_ally_tag` FOREIGN KEY (`ally_tag`) REFERENCES `{{alliance}}` (`ally_tag`) ON DELETE SET NULL ON UPDATE CASCADE",
768
      ), !$update_foreigns['users']['FK_users_ally_tag']);
769
    }
770
771
    upd_alter_table('users', array(
772
      "ADD COLUMN `player_artifact_list` TEXT",
773
    ), !isset($update_tables['users']['player_artifact_list']));
774
775
    if(!isset($update_tables['users']['player_rpg_tech_xp'])) {
776
      upd_check_key('eco_scale_storage', 1, !isset(classSupernova::$config->eco_scale_storage));
777
778
      upd_alter_table('users', array(
779
        "ADD COLUMN `player_rpg_tech_level` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 AFTER `dark_matter`",
780
        "ADD COLUMN `player_rpg_tech_xp` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 AFTER `dark_matter`",
781
      ), !isset($update_tables['users']['player_rpg_tech_xp']));
782
783
      classSupernova::$db->doUpdate("UPDATE {{users}} AS u LEFT JOIN {{statpoints}} AS s ON s.id_owner = u.id AND s.stat_type = 1 AND s.stat_code = 1 SET u.player_rpg_tech_xp = s.tech_points;");
784
    }
785
786
    upd_alter_table('planets', array(
787
      "ADD COLUMN `planet_cargo_hyper` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 AFTER `big_ship_cargo`",
788
    ), !isset($update_tables['planets']['planet_cargo_hyper']));
789
790
    upd_do_query('COMMIT;', true);
791
    $new_version = 31;
792
793
  case 31:
794
    upd_log_version_update();
795
796
    upd_alter_table('aks', array(
797
      "MODIFY COLUMN `planet_type` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0",
798
    ), strtoupper($update_tables['aks']['planet_type']['Type']) != 'TINYINT(1) UNSIGNED');
799
800
    upd_alter_table('alliance', array(
801
      "MODIFY COLUMN `ally_request_notallow` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0",
802
      "MODIFY COLUMN `ally_owner` BIGINT(20) UNSIGNED DEFAULT NULL",
803
    ), strtoupper($update_tables['alliance']['ally_owner']['Type']) != 'BIGINT(20) UNSIGNED');
804
805 View Code Duplication
    if(strtoupper($update_tables['alliance_diplomacy']['alliance_diplomacy_ally_id']['Type']) != 'BIGINT(20) UNSIGNED') {
806
      upd_alter_table('alliance_diplomacy', array(
807
        "DROP FOREIGN KEY `FK_diplomacy_ally_id`",
808
        "DROP FOREIGN KEY `FK_diplomacy_contr_ally_id`"
809
      ), true);
810
811
      upd_alter_table('alliance_diplomacy', array(
812
        "MODIFY COLUMN `alliance_diplomacy_ally_id` BIGINT(20) UNSIGNED DEFAULT NULL",
813
        "MODIFY COLUMN `alliance_diplomacy_contr_ally_id` BIGINT(20) UNSIGNED DEFAULT NULL",
814
815
        "ADD CONSTRAINT `FK_diplomacy_ally_id`       FOREIGN KEY (`alliance_diplomacy_ally_id`)       REFERENCES `{{alliance}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
816
        "ADD CONSTRAINT `FK_diplomacy_contr_ally_id` FOREIGN KEY (`alliance_diplomacy_contr_ally_id`) REFERENCES `{{alliance}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
817
      ), true);
818
    }
819
820 View Code Duplication
    if(strtoupper($update_tables['alliance_negotiation']['alliance_negotiation_ally_id']['Type']) != 'BIGINT(20) UNSIGNED') {
821
      upd_alter_table('alliance_negotiation', array(
822
        "DROP FOREIGN KEY `FK_negotiation_ally_id`",
823
        "DROP FOREIGN KEY `FK_negotiation_contr_ally_id`"
824
      ), true);
825
826
      upd_alter_table('alliance_negotiation', array(
827
        "MODIFY COLUMN `alliance_negotiation_status` TINYINT(1) NOT NULL DEFAULT 0",
828
        "MODIFY COLUMN `alliance_negotiation_ally_id` BIGINT(20) UNSIGNED DEFAULT NULL",
829
        "MODIFY COLUMN `alliance_negotiation_contr_ally_id` BIGINT(20) UNSIGNED DEFAULT NULL",
830
831
        "ADD CONSTRAINT `FK_negotiation_ally_id`       FOREIGN KEY (`alliance_negotiation_ally_id`)       REFERENCES `{{alliance}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
832
        "ADD CONSTRAINT `FK_negotiation_contr_ally_id` FOREIGN KEY (`alliance_negotiation_contr_ally_id`) REFERENCES `{{alliance}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
833
      ), true);
834
    }
835
836 View Code Duplication
    if(strtoupper($update_tables['alliance_requests']['id_user']['Type']) != 'BIGINT(20) UNSIGNED') {
837
      upd_do_query('DELETE FROM {{alliance_requests}} WHERE id_user NOT IN (SELECT id FROM {{users}}) OR id_ally NOT IN (SELECT id FROM {{alliance}});', true);
838
839
      upd_alter_table('alliance_requests', array(
840
        "MODIFY COLUMN `id_user` BIGINT(20) UNSIGNED DEFAULT NULL",
841
        "MODIFY COLUMN `id_ally` BIGINT(20) UNSIGNED DEFAULT NULL",
842
843
        "ADD KEY `I_alliance_requests_id_ally` (`id_ally`, `id_user`)",
844
845
        "ADD CONSTRAINT `FK_alliance_request_user_id` FOREIGN KEY (`id_user`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
846
        "ADD CONSTRAINT `FK_alliance_request_ally_id` FOREIGN KEY (`id_ally`) REFERENCES `{{alliance}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
847
      ), true);
848
    }
849
850 View Code Duplication
    if(strtoupper($update_tables['annonce']['id']['Type']) != 'BIGINT(20) UNSIGNED') {
851
      upd_do_query('DELETE FROM {{annonce}} WHERE USER NOT IN (SELECT username FROM {{users}});', true);
852
853
      upd_alter_table('annonce', array(
854
        "MODIFY COLUMN `id` SERIAL",
855
        "MODIFY COLUMN `user` VARCHAR(64) DEFAULT NULL",
856
857
        "ADD KEY `I_annonce_user` (`user`, `id`)",
858
859
        "ADD CONSTRAINT `FK_annonce_user` FOREIGN KEY (`user`) REFERENCES `{{users}}` (`username`) ON DELETE CASCADE ON UPDATE CASCADE",
860
      ), true);
861
    }
862
863 View Code Duplication
    if(strtoupper($update_tables['bashing']['bashing_user_id']['Type']) != 'BIGINT(20) UNSIGNED') {
864
      upd_alter_table('bashing', array(
865
        "DROP FOREIGN KEY `FK_bashing_user_id`",
866
        "DROP FOREIGN KEY `FK_bashing_planet_id`",
867
      ), true);
868
869
      upd_alter_table('bashing', array(
870
        "MODIFY COLUMN `bashing_user_id` BIGINT(20) UNSIGNED DEFAULT NULL",
871
        "MODIFY COLUMN `bashing_planet_id` BIGINT(20) UNSIGNED DEFAULT NULL",
872
873
        "ADD CONSTRAINT `FK_bashing_user_id`   FOREIGN KEY (`bashing_user_id`)   REFERENCES `{{users}}`   (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
874
        "ADD CONSTRAINT `FK_bashing_planet_id` FOREIGN KEY (`bashing_planet_id`) REFERENCES `{{planets}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
875
      ), true);
876
    }
877
878 View Code Duplication
    if(strtoupper($update_tables['buddy']['id']['Type']) != 'BIGINT(20) UNSIGNED') {
879
      upd_do_query('DELETE FROM {{buddy}} WHERE sender NOT IN (SELECT id FROM {{users}}) OR OWNER NOT IN (SELECT id FROM {{users}});', true);
880
881
      upd_alter_table('buddy', array(
882
        "MODIFY COLUMN `id` SERIAL",
883
        "MODIFY COLUMN `sender` BIGINT(20) UNSIGNED DEFAULT NULL",
884
        "MODIFY COLUMN `owner` BIGINT(20) UNSIGNED DEFAULT NULL",
885
        "MODIFY COLUMN `active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0",
886
887
        "ADD KEY `I_buddy_sender` (`sender`)",
888
        "ADD KEY `I_buddy_owner` (`owner`)",
889
890
        "ADD CONSTRAINT `FK_buddy_sender_id` FOREIGN KEY (`sender`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
891
        "ADD CONSTRAINT `FK_buddy_owner_id`  FOREIGN KEY (`owner`)  REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
892
      ), true);
893
    }
894
895
    upd_alter_table('chat', array(
896
      "MODIFY COLUMN `messageid` SERIAL",
897
    ), strtoupper($update_tables['chat']['messageid']['Type']) != 'BIGINT(20) UNSIGNED');
898
899
    upd_alter_table('counter', array(
900
      "CHANGE COLUMN `id` `counter_id` SERIAL",
901
902
      "MODIFY COLUMN `user_id` BIGINT(20) UNSIGNED DEFAULT 0",
903
904
      "ADD COLUMN `user_name` VARCHAR(64) DEFAULT '' AFTER `user_id`",
905
906
      "ADD KEY `I_counter_user_name` (`user_name`)",
907
    ), strtoupper($update_tables['counter']['counter_id']['Type']) != 'BIGINT(20) UNSIGNED');
908
909
    upd_alter_table('fleets', array(
910
      "MODIFY COLUMN `fleet_id` SERIAL",
911
      "MODIFY COLUMN `fleet_resource_metal` DECIMAL(65,0) DEFAULT '0'",
912
      "MODIFY COLUMN `fleet_resource_crystal` DECIMAL(65,0) DEFAULT '0'",
913
      "MODIFY COLUMN `fleet_resource_deuterium` DECIMAL(65,0) DEFAULT '0'",
914
    ), strtoupper($update_tables['fleets']['fleet_resource_metal']['Type']) != 'DECIMAL(65,0)');
915
916
    if(strtoupper($update_tables['iraks']['fleet_owner']['Type']) != 'BIGINT(20) UNSIGNED') {
917
      upd_do_query('DELETE FROM {{iraks}} WHERE OWNER NOT IN (SELECT id FROM {{users}}) OR zielid NOT IN (SELECT id FROM {{users}});', true);
918
919
      upd_alter_table('iraks', array(
920
        "CHANGE COLUMN `zeit` `fleet_end_time` INT(11) UNSIGNED NOT NULL DEFAULT 0",
921
        "CHANGE COLUMN `zielid` `fleet_target_owner` BIGINT(20) UNSIGNED DEFAULT NULL",
922
        "CHANGE COLUMN `owner` `fleet_owner` BIGINT(20) UNSIGNED DEFAULT NULL",
923
        "CHANGE COLUMN `anzahl` `fleet_amount` BIGINT(20) UNSIGNED DEFAULT 0",
924
        "CHANGE COLUMN `galaxy_angreifer` `fleet_start_galaxy` INT(2) UNSIGNED DEFAULT 0",
925
        "CHANGE COLUMN `system_angreifer` `fleet_start_system` INT(4) UNSIGNED DEFAULT 0",
926
        "CHANGE COLUMN `planet_angreifer` `fleet_start_planet` INT(2) UNSIGNED DEFAULT 0",
927
928
        "CHANGE COLUMN `galaxy` `fleet_end_galaxy` INT(2) UNSIGNED DEFAULT 0",
929
        "CHANGE COLUMN `system` `fleet_end_system` INT(4) UNSIGNED DEFAULT 0",
930
        "CHANGE COLUMN `planet` `fleet_end_planet` INT(2) UNSIGNED DEFAULT 0",
931
932
        "ADD KEY `I_iraks_fleet_owner` (`fleet_owner`)",
933
        "ADD KEY `I_iraks_fleet_target_owner` (`fleet_target_owner`)",
934
935
        "ADD CONSTRAINT `FK_iraks_fleet_owner` FOREIGN KEY (`fleet_owner`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
936
        "ADD CONSTRAINT `FK_iraks_fleet_target_owner` FOREIGN KEY (`fleet_target_owner`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
937
      ), true);
938
    }
939
940 View Code Duplication
    if(strtoupper($update_tables['notes']['owner']['Type']) != 'BIGINT(20) UNSIGNED') {
941
      upd_do_query('DELETE FROM {{notes}} WHERE OWNER NOT IN (SELECT id FROM {{users}});', true);
942
943
      upd_alter_table('notes', array(
944
        "MODIFY COLUMN id SERIAL",
945
        "MODIFY COLUMN `owner` BIGINT(20) UNSIGNED DEFAULT NULL",
946
947
        "ADD KEY `I_notes_owner` (`owner`)",
948
949
        "ADD CONSTRAINT `FK_notes_owner` FOREIGN KEY (`owner`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
950
      ), true);
951
    }
952
953
    upd_alter_table('planets', array(
954
      "MODIFY COLUMN `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT",
955
      "MODIFY COLUMN `name` VARCHAR(64) DEFAULT 'Planet' NOT NULL",
956
      "MODIFY COLUMN `id_owner` BIGINT(20) UNSIGNED DEFAULT NULL",
957
      "MODIFY COLUMN `galaxy` SMALLINT NOT NULL DEFAULT '0'",
958
      "MODIFY COLUMN `system` SMALLINT NOT NULL DEFAULT '0'",
959
      "MODIFY COLUMN `planet` SMALLINT NOT NULL DEFAULT '0'",
960
      "MODIFY COLUMN `planet_type` TINYINT NOT NULL DEFAULT '1'",
961
962
      "MODIFY COLUMN `metal` DECIMAL(65,5) NOT NULL DEFAULT '0'",
963
      "MODIFY COLUMN `crystal` DECIMAL(65,5) NOT NULL DEFAULT '0' AFTER `metal`",
964
      "MODIFY COLUMN `deuterium` DECIMAL(65,5) NOT NULL DEFAULT '0' AFTER `crystal`",
965
      "MODIFY COLUMN `energy_max` DECIMAL(65,0) NOT NULL DEFAULT '0' AFTER `deuterium`",
966
      "MODIFY COLUMN `energy_used` DECIMAL(65,0) NOT NULL DEFAULT '0' AFTER `energy_max`",
967
968
      "MODIFY COLUMN `metal_mine` SMALLINT NOT NULL DEFAULT '0'",
969
      "MODIFY COLUMN `crystal_mine` SMALLINT NOT NULL DEFAULT '0'",
970
      "MODIFY COLUMN `deuterium_sintetizer` SMALLINT NOT NULL DEFAULT '0'",
971
      "MODIFY COLUMN `solar_plant` SMALLINT NOT NULL DEFAULT '0'",
972
      "MODIFY COLUMN `fusion_plant` SMALLINT NOT NULL DEFAULT '0'",
973
      "MODIFY COLUMN `robot_factory` SMALLINT NOT NULL DEFAULT '0'",
974
      "MODIFY COLUMN `nano_factory` SMALLINT NOT NULL DEFAULT '0'",
975
      "MODIFY COLUMN `hangar` SMALLINT NOT NULL DEFAULT '0'",
976
      "MODIFY COLUMN `metal_store` SMALLINT NOT NULL DEFAULT '0'",
977
      "MODIFY COLUMN `crystal_store` SMALLINT NOT NULL DEFAULT '0'",
978
      "MODIFY COLUMN `deuterium_store` SMALLINT NOT NULL DEFAULT '0'",
979
      "MODIFY COLUMN `laboratory` SMALLINT NOT NULL DEFAULT '0'",
980
      "MODIFY COLUMN `nano` SMALLINT DEFAULT '0' AFTER `laboratory`",
981
      "MODIFY COLUMN `terraformer` SMALLINT NOT NULL DEFAULT '0'",
982
      "MODIFY COLUMN `ally_deposit` SMALLINT NOT NULL DEFAULT '0'",
983
      "MODIFY COLUMN `silo` SMALLINT NOT NULL DEFAULT '0'",
984
      "MODIFY COLUMN `mondbasis` SMALLINT NOT NULL DEFAULT '0' AFTER `silo`",
985
      "MODIFY COLUMN `phalanx` SMALLINT NOT NULL DEFAULT '0' AFTER `mondbasis`",
986
      "MODIFY COLUMN `sprungtor` SMALLINT NOT NULL DEFAULT '0' AFTER `phalanx`",
987
      "MODIFY COLUMN `last_jump_time` int(11) NOT NULL DEFAULT '0' AFTER `sprungtor`",
988
989
      "MODIFY COLUMN `small_ship_cargo` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
990
      "MODIFY COLUMN `big_ship_cargo` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
991
      "MODIFY COLUMN `supercargo` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Supercargo ship count' AFTER `big_ship_cargo`",
992
      "MODIFY COLUMN `planet_cargo_hyper` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' AFTER `supercargo`",
993
      "MODIFY COLUMN `recycler` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' AFTER `planet_cargo_hyper`",
994
      "MODIFY COLUMN `colonizer` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' AFTER `recycler`",
995
      "MODIFY COLUMN `spy_sonde` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' AFTER `colonizer`",
996
      "MODIFY COLUMN `solar_satelit` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' AFTER `spy_sonde`",
997
998
      "MODIFY COLUMN `light_hunter` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
999
      "MODIFY COLUMN `heavy_hunter` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1000
      "MODIFY COLUMN `crusher` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1001
      "MODIFY COLUMN `battle_ship` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1002
      "MODIFY COLUMN `bomber_ship` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1003
      "MODIFY COLUMN `battleship` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' AFTER `bomber_ship`",
1004
      "MODIFY COLUMN `destructor` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1005
      "MODIFY COLUMN `dearth_star` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1006
      "MODIFY COLUMN `supernova` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1007
1008
      "MODIFY COLUMN `misil_launcher` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1009
      "MODIFY COLUMN `small_laser` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1010
      "MODIFY COLUMN `big_laser` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1011
      "MODIFY COLUMN `gauss_canyon` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1012
      "MODIFY COLUMN `ionic_canyon` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1013
      "MODIFY COLUMN `buster_canyon` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1014
1015
      "MODIFY COLUMN `small_protection_shield` tinyint(1) NOT NULL DEFAULT '0'",
1016
      "MODIFY COLUMN `big_protection_shield` tinyint(1) NOT NULL DEFAULT '0'",
1017
      "MODIFY COLUMN `planet_protector` tinyint(1) NOT NULL DEFAULT '0'",
1018
1019
      "MODIFY COLUMN `interceptor_misil` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1020
      "MODIFY COLUMN `interplanetary_misil` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0'",
1021
1022
      "MODIFY COLUMN `metal_perhour` INT NOT NULL DEFAULT '0' AFTER `interplanetary_misil`",
1023
      "MODIFY COLUMN `crystal_perhour` INT NOT NULL DEFAULT '0' AFTER `metal_perhour`",
1024
      "MODIFY COLUMN `deuterium_perhour` INT NOT NULL DEFAULT '0' AFTER `crystal_perhour`",
1025
1026
      "MODIFY COLUMN `metal_mine_porcent` TINYINT UNSIGNED NOT NULL DEFAULT '10'",
1027
      "MODIFY COLUMN `crystal_mine_porcent` TINYINT UNSIGNED NOT NULL DEFAULT '10'",
1028
      "MODIFY COLUMN `deuterium_sintetizer_porcent` TINYINT UNSIGNED NOT NULL DEFAULT '10'",
1029
      "MODIFY COLUMN `solar_plant_porcent` TINYINT UNSIGNED NOT NULL DEFAULT '10'",
1030
      "MODIFY COLUMN `fusion_plant_porcent` TINYINT UNSIGNED NOT NULL DEFAULT '10'",
1031
      "MODIFY COLUMN `solar_satelit_porcent` TINYINT UNSIGNED NOT NULL DEFAULT '10'",
1032
1033
      "MODIFY COLUMN `que` TEXT COMMENT 'Planet que' AFTER `solar_satelit_porcent`",
1034
//      "MODIFY COLUMN `b_tech` INT(11) NOT NULL DEFAULT 0 AFTER `que`",
1035
//      "MODIFY COLUMN `b_tech_id` SMALLINT NOT NULL DEFAULT 0 AFTER `b_tech`",
1036
      "MODIFY COLUMN `b_hangar` INT(11) NOT NULL DEFAULT '0' AFTER `que`",
1037
      "MODIFY COLUMN `b_hangar_id` TEXT AFTER `b_hangar`",
1038
      "MODIFY COLUMN `last_update` INT(11) DEFAULT NULL AFTER `b_hangar_id`",
1039
1040
      "MODIFY COLUMN `image` varchar(64) NOT NULL DEFAULT 'normaltempplanet01' AFTER `last_update`",
1041
      "MODIFY COLUMN `points` bigint(20) DEFAULT '0' AFTER `image`",
1042
      "MODIFY COLUMN `ranks` bigint(20) DEFAULT '0' AFTER `points`",
1043
      "MODIFY COLUMN `id_level` TINYINT NOT NULL DEFAULT '0' AFTER `ranks`",
1044
      "MODIFY COLUMN `destruyed` int(11) NOT NULL DEFAULT '0' AFTER `id_level`",
1045
      "MODIFY COLUMN `diameter` int(11) NOT NULL DEFAULT '12800' AFTER `destruyed`",
1046
      "MODIFY COLUMN `field_max` SMALLINT UNSIGNED NOT NULL DEFAULT '163' AFTER `diameter`",
1047
      "MODIFY COLUMN `field_current` SMALLINT UNSIGNED NOT NULL DEFAULT '0' AFTER `field_max`",
1048
      "MODIFY COLUMN `temp_min` SMALLINT NOT NULL DEFAULT '0' AFTER `field_current`",
1049
      "MODIFY COLUMN `temp_max` SMALLINT NOT NULL DEFAULT '40' AFTER `temp_min`",
1050
1051
      "MODIFY COLUMN `metal_max` DECIMAL(65,0) DEFAULT '100000' AFTER `temp_max`",
1052
      "MODIFY COLUMN `crystal_max` DECIMAL(65,0) DEFAULT '100000' AFTER `metal_max`",
1053
      "MODIFY COLUMN `deuterium_max` DECIMAL(65,0) DEFAULT '100000' AFTER `crystal_max`",
1054
1055
      "MODIFY COLUMN `debris_metal` bigint(20) unsigned DEFAULT '0'",
1056
      "MODIFY COLUMN `debris_crystal` bigint(20) unsigned DEFAULT '0'",
1057
      "MODIFY COLUMN `PLANET_GOVERNOR_ID` SMALLINT NOT NULL DEFAULT '0'",
1058
      "MODIFY COLUMN `PLANET_GOVERNOR_LEVEL` SMALLINT NOT NULL DEFAULT '0'",
1059
1060
      "MODIFY COLUMN `parent_planet` BIGINT(20) unsigned DEFAULT '0'",
1061
1062
      "DROP COLUMN `b_hangar_plus`",
1063
    ), isset($update_tables['planets']['b_hangar_plus']));
1064
1065 View Code Duplication
    if(strtoupper($update_tables['referrals']['id_partner']['Type']) != 'BIGINT(20) UNSIGNED') {
1066
      upd_do_query('DELETE FROM {{referrals}} WHERE id NOT IN (SELECT id FROM {{users}}) OR id_partner NOT IN (SELECT id FROM {{users}});', true);
1067
1068
      upd_alter_table('referrals', array(
1069
        "MODIFY COLUMN `id` BIGINT(20) UNSIGNED DEFAULT NULL",
1070
        "MODIFY COLUMN `id_partner` BIGINT(20) UNSIGNED DEFAULT NULL",
1071
        "MODIFY COLUMN `dark_matter` DECIMAL(65,0) NOT NULL DEFAULT '0'",
1072
1073
        "ADD CONSTRAINT `FK_referrals_id` FOREIGN KEY (`id`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
1074
        "ADD CONSTRAINT `FK_referrals_id_partner` FOREIGN KEY (`id_partner`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
1075
      ), true);
1076
    }
1077
1078
    upd_alter_table('rw', array(
1079
      "MODIFY COLUMN `report_id` SERIAL",
1080
      "MODIFY COLUMN `id_owner1` BIGINT(20) UNSIGNED",
1081
      "MODIFY COLUMN `id_owner2` BIGINT(20) UNSIGNED",
1082
    ), strtoupper($update_tables['rw']['id_owner1']['Type']) != 'BIGINT(20) UNSIGNED');
1083
1084 View Code Duplication
    if(strtoupper($update_tables['shortcut']['shortcut_user_id']['Type']) != 'BIGINT(20) UNSIGNED') {
1085
      upd_do_query('DELETE FROM {{shortcut}} WHERE shortcut_user_id NOT IN (SELECT id FROM {{users}}) OR shortcut_planet_id NOT IN (SELECT id FROM {{planets}});', true);
1086
1087
      upd_alter_table('shortcut', array(
1088
        "MODIFY COLUMN `shortcut_id` SERIAL",
1089
        "MODIFY COLUMN `shortcut_user_id` BIGINT(20) UNSIGNED DEFAULT NULL",
1090
        "MODIFY COLUMN `shortcut_planet_id` BIGINT(20) UNSIGNED DEFAULT NULL",
1091
        "MODIFY COLUMN `shortcut_galaxy` TINYINT UNSIGNED DEFAULT 0",
1092
        "MODIFY COLUMN `shortcut_system` SMALLINT UNSIGNED DEFAULT 0",
1093
        "MODIFY COLUMN `shortcut_planet` TINYINT UNSIGNED DEFAULT 0",
1094
1095
        "ADD CONSTRAINT `FK_shortcut_planet_id` FOREIGN KEY (`shortcut_planet_id`) REFERENCES `{{planets}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
1096
      ), true);
1097
    }
1098
1099
    if(strtoupper($update_tables['statpoints']['id_owner']['Type']) != 'BIGINT(20) UNSIGNED') {
1100
      upd_do_query('DELETE FROM {{statpoints}} WHERE id_owner NOT IN (SELECT id FROM {{users}}) OR id_ally NOT IN (SELECT id FROM {{alliance}});', true);
1101
1102
      upd_alter_table('statpoints', array(
1103
        "MODIFY COLUMN `stat_date` int(11) NOT NULL DEFAULT '0' FIRST",
1104
        "MODIFY COLUMN `id_owner` BIGINT(20) UNSIGNED DEFAULT NULL",
1105
        "MODIFY COLUMN `id_ally` BIGINT(20) UNSIGNED DEFAULT NULL",
1106
        "MODIFY COLUMN `stat_type` TINYINT UNSIGNED DEFAULT 0",
1107
        "MODIFY COLUMN `stat_code` TINYINT UNSIGNED NOT NULL DEFAULT '0'",
1108
1109
        "MODIFY COLUMN `tech_rank` INT(11) UNSIGNED NOT NULL DEFAULT '0'",
1110
        "MODIFY COLUMN `tech_old_rank` INT(11) UNSIGNED NOT NULL DEFAULT '0'",
1111
        "MODIFY COLUMN `tech_points` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT '0'",
1112
        "MODIFY COLUMN `tech_count` DECIMAL(65,0) UNSIGNED UNSIGNED NOT NULL DEFAULT '0'",
1113
1114
        "MODIFY COLUMN `build_rank` INT(11) UNSIGNED NOT NULL DEFAULT '0'",
1115
        "MODIFY COLUMN `build_old_rank` INT(11) UNSIGNED NOT NULL DEFAULT '0'",
1116
        "MODIFY COLUMN `build_points` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT '0'",
1117
        "MODIFY COLUMN `build_count` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT '0'",
1118
1119
        "MODIFY COLUMN `defs_rank` INT(11) UNSIGNED NOT NULL DEFAULT '0'",
1120
        "MODIFY COLUMN `defs_old_rank` INT(11) UNSIGNED NOT NULL DEFAULT '0'",
1121
        "MODIFY COLUMN `defs_points` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT '0'",
1122
        "MODIFY COLUMN `defs_count` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT '0'",
1123
1124
        "MODIFY COLUMN `fleet_rank` INT(11) UNSIGNED NOT NULL DEFAULT '0'",
1125
        "MODIFY COLUMN `fleet_old_rank` INT(11) UNSIGNED NOT NULL DEFAULT '0'",
1126
        "MODIFY COLUMN `fleet_points` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT '0'",
1127
        "MODIFY COLUMN `fleet_count` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT '0'",
1128
1129
        "MODIFY COLUMN `res_rank` INT(11) UNSIGNED DEFAULT '0' COMMENT 'Rank by resources' AFTER `fleet_count`",
1130
        "MODIFY COLUMN `res_old_rank` INT(11) UNSIGNED DEFAULT '0' COMMENT 'Old rank by resources'AFTER `res_rank`",
1131
        "MODIFY COLUMN `res_points` DECIMAL(65,0) UNSIGNED DEFAULT '0' COMMENT 'Resource stat points' AFTER `res_old_rank`",
1132
        "MODIFY COLUMN `res_count` DECIMAL(65,0) UNSIGNED DEFAULT '0' COMMENT 'Resource count' AFTER `res_points`",
1133
1134
        "MODIFY COLUMN `total_rank` INT(11) UNSIGNED NOT NULL DEFAULT '0'",
1135
        "MODIFY COLUMN `total_old_rank` INT(11) UNSIGNED NOT NULL DEFAULT '0'",
1136
        "MODIFY COLUMN `total_points` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT '0'",
1137
        "MODIFY COLUMN `total_count` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT '0'",
1138
1139
        "ADD KEY `I_stats_id_ally` (`id_ally`)",
1140
1141
        "ADD CONSTRAINT `FK_stats_id_owner` FOREIGN KEY (`id_owner`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
1142
        "ADD CONSTRAINT `FK_stats_id_ally` FOREIGN KEY (`id_ally`) REFERENCES `{{alliance}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
1143
      ), true);
1144
    }
1145
1146
    upd_alter_table('users', array(
1147
      "MODIFY COLUMN `authlevel` tinyint unsigned NOT NULL DEFAULT '0' AFTER `username`",
1148
      "MODIFY COLUMN `vacation` int(11) unsigned DEFAULT '0' AFTER `authlevel`",
1149
      "MODIFY COLUMN `banaday` int(11) unsigned DEFAULT '0' AFTER `vacation`",
1150
      "MODIFY COLUMN `dark_matter` bigint(20) DEFAULT '0' AFTER `banaday`",
1151
      "MODIFY COLUMN `spy_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1152
      "MODIFY COLUMN `computer_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1153
      "MODIFY COLUMN `military_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1154
      "MODIFY COLUMN `defence_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1155
      "MODIFY COLUMN `shield_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1156
      "MODIFY COLUMN `energy_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1157
      "MODIFY COLUMN `hyperspace_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1158
      "MODIFY COLUMN `combustion_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1159
      "MODIFY COLUMN `impulse_motor_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1160
      "MODIFY COLUMN `hyperspace_motor_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1161
      "MODIFY COLUMN `laser_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1162
      "MODIFY COLUMN `ionic_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1163
      "MODIFY COLUMN `buster_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1164
      "MODIFY COLUMN `intergalactic_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1165
      "MODIFY COLUMN `expedition_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1166
      "MODIFY COLUMN `colonisation_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1167
      "MODIFY COLUMN `graviton_tech` SMALLINT UNSIGNED NOT NULL DEFAULT '0'",
1168
      "MODIFY COLUMN `player_artifact_list` text AFTER `graviton_tech`",
1169
      "MODIFY COLUMN `ally_id` bigint(20) unsigned DEFAULT NULL AFTER `player_artifact_list`",
1170
      "MODIFY COLUMN `ally_tag` varchar(8) DEFAULT NULL AFTER `ally_id`",
1171
      "MODIFY COLUMN `ally_name` varchar(32) DEFAULT NULL AFTER `ally_tag`",
1172
      "MODIFY COLUMN `ally_register_time` int(11) NOT NULL DEFAULT '0' AFTER `ally_name`",
1173
      "MODIFY COLUMN `ally_rank_id` int(11) NOT NULL DEFAULT '0' AFTER `ally_register_time`",
1174
      "MODIFY COLUMN `player_que` text AFTER `ally_rank_id`",
1175
      "MODIFY COLUMN `lvl_minier` bigint(20) unsigned NOT NULL DEFAULT '1'",
1176
      "MODIFY COLUMN `xpminier` bigint(20) unsigned DEFAULT '0' AFTER `lvl_minier`",
1177
      "MODIFY COLUMN `player_rpg_tech_xp` bigint(20) unsigned NOT NULL DEFAULT '0'",
1178
      "MODIFY COLUMN `player_rpg_tech_level` bigint(20) unsigned NOT NULL DEFAULT '0'",
1179
      "MODIFY COLUMN `lvl_raid` bigint(20) unsigned NOT NULL DEFAULT '1' AFTER `player_rpg_tech_level`",
1180
      "MODIFY COLUMN `xpraid` bigint(20) unsigned DEFAULT '0'",
1181
      "MODIFY COLUMN `raids` bigint(20) unsigned DEFAULT '0'",
1182
      "MODIFY COLUMN `raidsloose` bigint(20) unsigned DEFAULT '0'",
1183
      "MODIFY COLUMN `raidswin` bigint(20) unsigned DEFAULT '0'",
1184
      "MODIFY COLUMN `new_message` int(11) NOT NULL DEFAULT '0' AFTER `raidswin`",
1185
      "MODIFY COLUMN `mnl_alliance` int(11) NOT NULL DEFAULT '0'",
1186
      "MODIFY COLUMN `mnl_joueur` int(11) NOT NULL DEFAULT '0'",
1187
      "MODIFY COLUMN `mnl_attaque` int(11) NOT NULL DEFAULT '0'",
1188
      "MODIFY COLUMN `mnl_spy` int(11) NOT NULL DEFAULT '0'",
1189
      "MODIFY COLUMN `mnl_exploit` int(11) NOT NULL DEFAULT '0'",
1190
      "MODIFY COLUMN `mnl_transport` int(11) NOT NULL DEFAULT '0'",
1191
      "MODIFY COLUMN `mnl_expedition` int(11) NOT NULL DEFAULT '0'",
1192
      "MODIFY COLUMN `mnl_buildlist` int(11) NOT NULL DEFAULT '0'",
1193
      "MODIFY COLUMN `msg_admin` bigint(11) unsigned DEFAULT '0'",
1194
//      "MODIFY COLUMN `b_tech_planet` int(11) NOT NULL DEFAULT '0' AFTER `msg_admin`",
1195
      "MODIFY COLUMN `deltime` int(10) unsigned DEFAULT '0'",
1196
      "MODIFY COLUMN `news_lastread` int(10) unsigned DEFAULT '0'",
1197
      "MODIFY COLUMN `total_rank` int(10) unsigned NOT NULL DEFAULT '0'",
1198
      "MODIFY COLUMN `total_points` bigint(20) unsigned NOT NULL DEFAULT '0'",
1199
      "MODIFY COLUMN `password` varchar(64) NOT NULL DEFAULT '' AFTER `total_points`",
1200
      "MODIFY COLUMN `email` varchar(64) NOT NULL DEFAULT '' AFTER `password`",
1201
      "MODIFY COLUMN `email_2` varchar(64) NOT NULL DEFAULT '' AFTER `email`",
1202
      "MODIFY COLUMN `lang` varchar(8) NOT NULL DEFAULT 'ru' AFTER `email_2`",
1203
      "MODIFY COLUMN `sex` char(1) DEFAULT NULL AFTER `lang`",
1204
      "MODIFY COLUMN `avatar` varchar(255) NOT NULL DEFAULT '' AFTER `sex`",
1205
      "MODIFY COLUMN `sign` mediumtext AFTER `avatar`",
1206
      "MODIFY COLUMN `id_planet` int(11) NOT NULL DEFAULT '0' AFTER `sign`",
1207
      "MODIFY COLUMN `galaxy` int(11) NOT NULL DEFAULT '0' AFTER `id_planet`",
1208
      "MODIFY COLUMN `system` int(11) NOT NULL DEFAULT '0' AFTER `galaxy`",
1209
      "MODIFY COLUMN `planet` int(11) NOT NULL DEFAULT '0' AFTER `system`",
1210
      "MODIFY COLUMN `current_planet` int(11) NOT NULL DEFAULT '0' AFTER `planet`",
1211
      "MODIFY COLUMN `user_agent` mediumtext NOT NULL AFTER `current_planet`",
1212
      "MODIFY COLUMN `user_lastip` varchar(250) DEFAULT NULL COMMENT 'User last IP' AFTER `user_agent`",
1213
      "MODIFY COLUMN `user_proxy` varchar(250) NOT NULL DEFAULT '' COMMENT 'User proxy (if any)' AFTER `user_lastip`",
1214
      "MODIFY COLUMN `register_time` int(10) unsigned DEFAULT '0' AFTER `user_proxy`",
1215
      "MODIFY COLUMN `onlinetime` int(10) unsigned DEFAULT '0' AFTER `register_time`",
1216
      "MODIFY COLUMN `dpath` varchar(255) NOT NULL DEFAULT '' AFTER `onlinetime`",
1217
      "MODIFY COLUMN `design` tinyint(4) unsigned NOT NULL DEFAULT '1' AFTER `dpath`",
1218
      "MODIFY COLUMN `noipcheck` tinyint(4) unsigned NOT NULL DEFAULT '1' AFTER `design`",
1219
      "MODIFY COLUMN `options` mediumtext COMMENT 'Packed user options' AFTER `noipcheck`",
1220
      "MODIFY COLUMN `planet_sort` tinyint(1) unsigned NOT NULL DEFAULT '0' AFTER `options`",
1221
      "MODIFY COLUMN `planet_sort_order` tinyint(1) unsigned NOT NULL DEFAULT '0' AFTER `planet_sort`",
1222
      "MODIFY COLUMN `spio_anz` tinyint(1) unsigned NOT NULL DEFAULT '1' AFTER `planet_sort_order`",
1223
      "MODIFY COLUMN `settings_tooltiptime` tinyint(1) unsigned NOT NULL DEFAULT '5' AFTER `spio_anz`",
1224
      "MODIFY COLUMN `settings_fleetactions` tinyint(1) unsigned NOT NULL DEFAULT '0' AFTER `settings_tooltiptime`",
1225
      "MODIFY COLUMN `settings_esp` tinyint(1) unsigned NOT NULL DEFAULT '1' AFTER `settings_allylogo`",
1226
      "MODIFY COLUMN `settings_wri` tinyint(1) unsigned NOT NULL DEFAULT '1' AFTER `settings_esp`",
1227
      "MODIFY COLUMN `settings_bud` tinyint(1) unsigned NOT NULL DEFAULT '1' AFTER `settings_wri`",
1228
      "MODIFY COLUMN `settings_mis` tinyint(1) unsigned NOT NULL DEFAULT '1' AFTER `settings_bud`",
1229
      "MODIFY COLUMN `settings_rep` tinyint(1) unsigned NOT NULL DEFAULT '0' AFTER `settings_mis`",
1230
    ), strtoupper($update_tables['users']['id_owner']['Type']) != 'BIGINT(20) UNSIGNED');
1231
1232
    upd_do_query('COMMIT;', true);
1233
    $new_version = 32;
1234
1235
  case 32:
1236
    upd_log_version_update();
1237
1238
    upd_check_key('avatar_max_width', 128, !isset(classSupernova::$config->avatar_max_width));
1239
    upd_check_key('avatar_max_height', 128, !isset(classSupernova::$config->avatar_max_height));
1240
1241
    upd_alter_table('users', array(
1242
      "MODIFY COLUMN `avatar` tinyint(1) unsigned NOT NULL DEFAULT '0'",
1243
    ), strtoupper($update_tables['users']['avatar']['Type']) != 'TINYINT(1) UNSIGNED');
1244
1245
    upd_alter_table('alliance', array(
1246
      "MODIFY COLUMN `ally_image` tinyint(1) unsigned NOT NULL DEFAULT '0'",
1247
    ), strtoupper($update_tables['alliance']['ally_image']['Type']) != 'TINYINT(1) UNSIGNED');
1248
1249
    upd_alter_table('users', array(
1250
      "DROP COLUMN `settings_allylogo`",
1251
    ), isset($update_tables['users']['settings_allylogo']));
1252
1253
    if(!isset($update_tables['powerup'])) {
1254
      upd_do_query("DROP TABLE IF EXISTS {{mercenaries}};");
1255
1256
      upd_create_table('powerup',
1257
        "(
1258
          `powerup_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
1259
          `powerup_user_id` bigint(20) UNSIGNED NULL DEFAULT NULL,
1260
          `powerup_planet_id` bigint(20) UNSIGNED NULL DEFAULT NULL,
1261
          `powerup_category` SMALLINT NOT NULL DEFAULT 0,
1262
          `powerup_unit_id` MEDIUMINT UNSIGNED NOT NULL DEFAULT '0',
1263
          `powerup_unit_level` SMALLINT UNSIGNED NOT NULL DEFAULT '0',
1264
          `powerup_time_start` int(11) NOT NULL DEFAULT '0',
1265
          `powerup_time_finish` int(11) NOT NULL DEFAULT '0',
1266
1267
          PRIMARY KEY (`powerup_id`),
1268
          KEY `I_powerup_user_id` (`powerup_user_id`),
1269
          KEY `I_powerup_planet_id` (`powerup_planet_id`),
1270
          KEY `I_user_powerup_time` (`powerup_user_id`, `powerup_unit_id`, `powerup_time_start`, `powerup_time_finish`),
1271
          KEY `I_planet_powerup_time` (`powerup_planet_id`, `powerup_unit_id`, `powerup_time_start`, `powerup_time_finish`),
1272
1273
          CONSTRAINT `FK_powerup_user_id` FOREIGN KEY (`powerup_user_id`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
1274
          CONSTRAINT `FK_powerup_planet_id` FOREIGN KEY (`powerup_planet_id`) REFERENCES `{{planets}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
1275
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
1276
      );
1277
1278
      upd_check_key('empire_mercenary_temporary', 0, !isset(classSupernova::$config->empire_mercenary_temporary));
1279
      upd_check_key('empire_mercenary_base_period', PERIOD_MONTH, !isset(classSupernova::$config->empire_mercenary_base_period));
1280
1281
      $update_query_template = "UPDATE {{users}} SET id = id %s WHERE id = %d LIMIT 1;";
1282
      $user_list = upd_do_query("SELECT * FROM {{users}};");
1283
      while($user_row = db_fetch($user_list)) {
1284
        $update_query_str = '';
1285
        foreach(sn_get_groups('mercenaries') as $mercenary_id) {
1286
          $mercenary_data_name = get_unit_param($mercenary_id, P_NAME);
1287
          if($mercenary_level = $user_row[$mercenary_data_name]) {
1288
            $update_query_str = ", `{$mercenary_data_name}` = 0";
1289
            upd_do_query("DELETE FROM {{powerup}} WHERE powerup_user_id = {$user_row['id']} AND powerup_unit_id = {$mercenary_id} LIMIT 1;");
1290
            upd_do_query("INSERT {{powerup}} SET powerup_user_id = {$user_row['id']}, powerup_unit_id = {$mercenary_id}, powerup_unit_level = {$mercenary_level};");
1291
          }
1292
        }
1293
1294
        if($update_query_str) {
1295
          upd_do_query(sprintf($update_query_template, $update_query_str, $user_row['id']));
1296
        }
1297
      }
1298
    }
1299
1300
    if(!isset($update_tables['universe'])) {
1301
      upd_create_table('universe',
1302
        "(
1303
          `universe_galaxy` SMALLINT UNSIGNED NOT NULL DEFAULT '0',
1304
          `universe_system` SMALLINT UNSIGNED NOT NULL DEFAULT '0',
1305
          `universe_name` varchar(32) NOT NULL DEFAULT '',
1306
          `universe_price` bigint(20) NOT NULL DEFAULT 0,
1307
1308
          PRIMARY KEY (`universe_galaxy`, `universe_system`)
1309
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
1310
      );
1311
1312
      upd_check_key('uni_price_galaxy', 10000, !isset(classSupernova::$config->uni_price_galaxy));
1313
      upd_check_key('uni_price_system', 1000, !isset(classSupernova::$config->uni_price_system));
1314
    }
1315
1316
    // ========================================================================
1317
    // Ally player
1318
    // Adding config variable
1319
    upd_check_key('ali_bonus_members', 10, !isset(classSupernova::$config->ali_bonus_members));
1320
1321
    // ------------------------------------------------------------------------
1322
    // Modifying tables
1323 View Code Duplication
    if(strtoupper($update_tables['users']['user_as_ally']['Type']) != 'BIGINT(20) UNSIGNED') {
1324
      upd_alter_table('users', array(
1325
        "ADD COLUMN user_as_ally BIGINT(20) UNSIGNED DEFAULT NULL",
1326
1327
        "ADD KEY `I_user_user_as_ally` (`user_as_ally`)",
1328
1329
        "ADD CONSTRAINT `FK_user_user_as_ally` FOREIGN KEY (`user_as_ally`) REFERENCES `{{alliance}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
1330
      ), true);
1331
1332
      upd_alter_table('alliance', array(
1333
        "ADD COLUMN ally_user_id BIGINT(20) UNSIGNED DEFAULT NULL",
1334
1335
        "ADD KEY `I_ally_user_id` (`ally_user_id`)",
1336
1337
        "ADD CONSTRAINT `FK_ally_ally_user_id` FOREIGN KEY (`ally_user_id`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
1338
      ), true);
1339
    }
1340
1341
    // ------------------------------------------------------------------------
1342
    // Creating players for allies
1343
    $ally_row_list = classSupernova::$db->doSelect("SELECT `id`, `ally_tag` FROM {{alliance}} WHERE ally_user_id IS NULL;");
1344 View Code Duplication
    while($ally_row = db_fetch($ally_row_list)) {
1345
      $ally_user_name = db_escape("[{$ally_row['ally_tag']}]");
1346
      classSupernova::$db->doInsert("INSERT INTO {{users}} SET `username` = '{$ally_user_name}', `register_time` = " . SN_TIME_NOW . ", `user_as_ally` = {$ally_row['id']};");
1347
      $ally_user_id = classSupernova::$db->db_insert_id();
1348
      classSupernova::$db->doUpdate("UPDATE {{alliance}} SET ally_user_id = {$ally_user_id} WHERE id = {$ally_row['id']} LIMIT 1;");
1349
    }
1350
    // Renaming old ally players TODO: Remove on release
1351
    upd_do_query("UPDATE {{users}} AS u LEFT JOIN {{alliance}} AS a ON u.user_as_ally = a.id SET u.username = CONCAT('[', a.ally_tag, ']') WHERE u.user_as_ally IS NOT NULL AND u.username = '';");
1352
    // Setting last online time to old ally players TODO: Remove on release
1353
    upd_do_query("UPDATE {{users}} SET `onlinetime` = " . SN_TIME_NOW . " WHERE onlinetime = 0;");
1354
1355
    // ------------------------------------------------------------------------
1356
    // Creating planets for allies
1357
    $ally_user_list = classSupernova::$db->doSelect("SELECT `id`, `username` FROM {{users}} WHERE `user_as_ally` IS NOT NULL AND `id_planet` = 0;");
1358 View Code Duplication
    while($ally_user_row = db_fetch($ally_user_list)) {
1359
      $ally_planet_name = db_escape($ally_user_row['username']);
1360
      classSupernova::$db->doInsert("INSERT INTO {{planets}} SET `name` = '{$ally_planet_name}', `last_update` = " . SN_TIME_NOW . ", `id_owner` = {$ally_user_row['id']};");
1361
      $ally_planet_id = classSupernova::$db->db_insert_id();
1362
      classSupernova::$db->doUpdate("UPDATE {{users}} SET `id_planet` = {$ally_planet_id} WHERE `id` = {$ally_user_row['id']} LIMIT 1;");
1363
    }
1364
1365
    upd_do_query("UPDATE {{users}} AS u LEFT JOIN {{alliance}} AS a ON u.ally_id = a.id SET u.ally_name = a.ally_name, u.ally_tag = a.ally_tag WHERE u.ally_id IS NOT NULL;");
1366
1367
    upd_alter_table('users', array(
1368
      "DROP COLUMN `rpg_amiral`",
1369
      "DROP COLUMN `mrc_academic`",
1370
      "DROP COLUMN `rpg_espion`",
1371
      "DROP COLUMN `rpg_commandant`",
1372
      "DROP COLUMN `rpg_stockeur`",
1373
      "DROP COLUMN `rpg_destructeur`",
1374
      "DROP COLUMN `rpg_general`",
1375
      "DROP COLUMN `rpg_raideur`",
1376
      "DROP COLUMN `rpg_empereur`",
1377
1378
      "ADD COLUMN `metal` decimal(65,5) NOT NULL DEFAULT '0.00000'",
1379
      "ADD COLUMN `crystal` decimal(65,5) NOT NULL DEFAULT '0.00000'",
1380
      "ADD COLUMN `deuterium` decimal(65,5) NOT NULL DEFAULT '0.00000'",
1381
    ), $update_tables['users']['rpg_amiral']);
1382
1383
1384
    // ========================================================================
1385
    // User que
1386
    // Adding db field
1387
    upd_alter_table('users', "ADD `que` varchar(4096) NOT NULL DEFAULT '' COMMENT 'User que'", !$update_tables['users']['que']);
1388
    // Converting old data to new one and dropping old fields
1389
    if($update_tables['users']['b_tech_planet']) {
1390
      $query = classSupernova::$db->doSelect("SELECT * FROM `{{planets}}` WHERE `b_tech_id` <> 0;");
1391
      while($planet_row = db_fetch($query)) {
1392
        $que_item_string = "{$planet_row['b_tech_id']},1," . max(0, $planet_row['b_tech'] - SN_TIME_NOW) . "," . BUILD_CREATE . "," . QUE_RESEARCH;
1393
        classSupernova::$db->doUpdate("UPDATE {{users}} SET `que` = '{$que_item_string}' WHERE `id` = {$planet_row['id_owner']} LIMIT 1;");
1394
      }
1395
1396
      upd_alter_table('planets', array(
1397
        "DROP COLUMN `b_tech`",
1398
        "DROP COLUMN `b_tech_id`",
1399
      ), $update_tables['planets']['b_tech']);
1400
1401
      upd_alter_table('users', "DROP COLUMN `b_tech_planet`", $update_tables['users']['b_tech_planet']);
1402
    }
1403
1404 View Code Duplication
    if(!$update_tables['powerup']['powerup_category']) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
1405
      upd_alter_table('powerup', "ADD COLUMN `powerup_category` SMALLINT NOT NULL DEFAULT 0 AFTER `powerup_planet_id`", !$update_tables['powerup']['powerup_category']);
1406
1407
      classSupernova::$db->doUpdate("UPDATE {{powerup}} SET powerup_category = " . BONUS_MERCENARY);
1408
    }
1409
1410
    upd_check_key('rpg_cost_info', 10000, !isset(classSupernova::$config->rpg_cost_info));
1411
    upd_check_key('tpl_minifier', 0, !isset(classSupernova::$config->tpl_minifier));
1412
1413
    upd_check_key('server_updater_check_auto', 0, !isset(classSupernova::$config->server_updater_check_auto));
1414
    upd_check_key('server_updater_check_period', PERIOD_DAY, !isset(classSupernova::$config->server_updater_check_period));
1415
    upd_check_key('server_updater_check_last', 0, !isset(classSupernova::$config->server_updater_check_last));
1416
    upd_check_key('server_updater_check_result', SNC_VER_NEVER, !isset(classSupernova::$config->server_updater_check_result));
1417
    upd_check_key('server_updater_key', '', !isset(classSupernova::$config->server_updater_key));
1418
    upd_check_key('server_updater_id', 0, !isset(classSupernova::$config->server_updater_id));
1419
1420
    upd_check_key('ali_bonus_algorithm', 0, !isset(classSupernova::$config->ali_bonus_algorithm));
1421
    upd_check_key('ali_bonus_divisor', 10000000, !isset(classSupernova::$config->ali_bonus_divisor));
1422
    upd_check_key('ali_bonus_brackets', 10, !isset(classSupernova::$config->ali_bonus_brackets));
1423
    upd_check_key('ali_bonus_brackets_divisor', 50, !isset(classSupernova::$config->ali_bonus_brackets_divisor));
1424
1425
    if(!classSupernova::$config->db_loadItem('rpg_flt_explore')) {
1426
      $inflation_rate = 1000;
1427
1428
      classSupernova::$config->db_saveItem('rpg_cost_banker', classSupernova::$config->rpg_cost_banker * $inflation_rate);
1429
      classSupernova::$config->db_saveItem('rpg_cost_exchange', classSupernova::$config->rpg_cost_exchange * $inflation_rate);
1430
      classSupernova::$config->db_saveItem('rpg_cost_pawnshop', classSupernova::$config->rpg_cost_pawnshop * $inflation_rate);
1431
      classSupernova::$config->db_saveItem('rpg_cost_scraper', classSupernova::$config->rpg_cost_scraper * $inflation_rate);
1432
      classSupernova::$config->db_saveItem('rpg_cost_stockman', classSupernova::$config->rpg_cost_stockman * $inflation_rate);
1433
      classSupernova::$config->db_saveItem('rpg_cost_trader', classSupernova::$config->rpg_cost_trader * $inflation_rate);
1434
1435
      classSupernova::$config->db_saveItem('rpg_exchange_darkMatter', classSupernova::$config->rpg_exchange_darkMatter / $inflation_rate * 4);
1436
1437
      classSupernova::$config->db_saveItem('rpg_flt_explore', $inflation_rate);
1438
1439
      classSupernova::$db->doUpdate("UPDATE {{users}} SET `dark_matter` = `dark_matter` * {$inflation_rate};");
1440
1441
      $query = classSupernova::$db->doSelect("SELECT * FROM `{{quest}}`");
1442
      while($row = db_fetch($query)) {
1443
        $query_add = '';
1444
        $quest_reward_list = explode(';', $row['quest_rewards']);
1445
        foreach($quest_reward_list as &$quest_reward) {
1446
          list($reward_resource, $reward_amount) = explode(',', $quest_reward);
1447
          if($reward_resource == RES_DARK_MATTER) {
1448
            $quest_reward = "{$reward_resource}," . $reward_amount * 1000;
1449
          }
1450
        }
1451
        $new_rewards = implode(';', $quest_reward_list);
1452
        if($new_rewards != $row['quest_rewards']) {
1453
          classSupernova::$db->doUpdate("UPDATE {{quest}} SET `quest_rewards` = '{$new_rewards}' WHERE quest_id = {$row['quest_id']} LIMIT 1;");
1454
        }
1455
      }
1456
    }
1457
1458
    upd_check_key('rpg_bonus_minimum', 10000, !isset(classSupernova::$config->rpg_bonus_minimum));
1459
    upd_check_key('rpg_bonus_divisor',
1460
      !isset(classSupernova::$config->rpg_bonus_divisor) ? 10 : (classSupernova::$config->rpg_bonus_divisor >= 1000 ? floor(classSupernova::$config->rpg_bonus_divisor / 1000) : classSupernova::$config->rpg_bonus_divisor),
1461
      !isset(classSupernova::$config->rpg_bonus_divisor) || classSupernova::$config->rpg_bonus_divisor >= 1000);
1462
1463
    upd_check_key('var_news_last', 0, !isset(classSupernova::$config->var_news_last));
1464
1465
    upd_do_query('COMMIT;', true);
1466
    $new_version = 33;
1467
1468
  case 33:
1469
    upd_log_version_update();
1470
1471
    upd_alter_table('users', array(
1472
      "ADD `user_birthday` DATE DEFAULT NULL COMMENT 'User birthday'",
1473
      "ADD `user_birthday_celebrated` DATE DEFAULT NULL COMMENT 'Last time where user got birthday gift'",
1474
1475
      "ADD KEY `I_user_birthday` (`user_birthday`, `user_birthday_celebrated`)",
1476
    ), !$update_tables['users']['user_birthday']);
1477
1478
    upd_check_key('user_birthday_gift', 0, !isset(classSupernova::$config->user_birthday_gift));
1479
    upd_check_key('user_birthday_range', 30, !isset(classSupernova::$config->user_birthday_range));
1480
    upd_check_key('user_birthday_celebrate', 0, !isset(classSupernova::$config->user_birthday_celebrate));
1481
1482
    if(!isset($update_tables['payment'])) {
1483
      upd_alter_table('users', array(
1484
        "ADD KEY `I_user_id_name` (`id`, `username`)",
1485
      ), !$update_indexes['users']['I_user_id_name']);
1486
1487
      upd_create_table('payment',
1488
        "(
1489
          `payment_id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Internal payment ID',
1490
          `payment_user_id` BIGINT(20) UNSIGNED DEFAULT NULL,
1491
          `payment_user_name` VARCHAR(64) DEFAULT NULL,
1492
          `payment_amount` DECIMAL(60,5) DEFAULT 0 COMMENT 'Amount paid',
1493
          `payment_currency` VARCHAR(3) DEFAULT '' COMMENT 'Payment currency',
1494
          `payment_dm` DECIMAL(65,0) DEFAULT 0 COMMENT 'DM gained',
1495
          `payment_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'Payment server timestamp',
1496
          `payment_comment` TEXT COMMENT 'Payment comment',
1497
1498
          `payment_module_name` VARCHAR(255) DEFAULT '' COMMENT 'Payment module name',
1499
          `payment_internal_id` VARCHAR(255) DEFAULT '' COMMENT 'Internal payment ID in payment system',
1500
          `payment_internal_date` DATETIME COMMENT 'Internal payment timestamp in payment system',
1501
1502
          PRIMARY KEY (`payment_id`),
1503
          KEY `I_payment_user` (`payment_user_id`, `payment_user_name`),
1504
          KEY `I_payment_module_internal_id` (`payment_module_name`, `payment_internal_id`),
1505
1506
          CONSTRAINT `FK_payment_user` FOREIGN KEY (`payment_user_id`, `payment_user_name`) REFERENCES `{{users}}` (`id`, `username`) ON UPDATE CASCADE ON DELETE NO ACTION
1507
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
1508
      );
1509
1510
      upd_check_key('payment_currency_default', 'UAH', !isset(classSupernova::$config->payment_currency_default));
1511
    }
1512
    upd_check_key('payment_lot_size', 1000, !isset(classSupernova::$config->payment_lot_size));
1513
    upd_check_key('payment_lot_price', 1, !isset(classSupernova::$config->payment_lot_price));
1514
1515
    // Updating category for Mercenaries
1516
    upd_do_query("UPDATE {{powerup}} SET powerup_category = " . UNIT_MERCENARIES . " WHERE powerup_unit_id > 600 AND powerup_unit_id < 700;");
1517
1518
    // Convert Destructor to Death Star schematic
1519
    upd_do_query("UPDATE {{powerup}}
1520
      SET powerup_time_start = 0, powerup_time_finish = 0, powerup_category = " . UNIT_PLANS . ", powerup_unit_id = " . UNIT_PLAN_SHIP_DEATH_STAR . "
1521
      WHERE (powerup_time_start = 0 OR powerup_time_finish >= UNIX_TIMESTAMP()) AND powerup_unit_id = 612;");
1522
    // Convert Assasin to SuperNova schematic
1523
    upd_do_query("UPDATE {{powerup}}
1524
      SET powerup_time_start = 0, powerup_time_finish = 0, powerup_category = " . UNIT_PLANS . ", powerup_unit_id = " . UNIT_PLAN_SHIP_SUPERNOVA . "
1525
      WHERE (powerup_time_start = 0 OR powerup_time_finish >= UNIX_TIMESTAMP()) AND powerup_unit_id = 614;");
1526
1527
    upd_alter_table('iraks', array(
1528
      "ADD `fleet_start_type` SMALLINT NOT NULL DEFAULT 1",
1529
      "ADD `fleet_end_type` SMALLINT NOT NULL DEFAULT 1",
1530
    ), !$update_tables['iraks']['fleet_start_type']);
1531
1532
1533 View Code Duplication
    if(!$update_tables['payment']['payment_status']) {
1534
      upd_alter_table('payment', array(
1535
        "ADD COLUMN `payment_status` INT DEFAULT 0 COMMENT 'Payment status' AFTER `payment_id`",
1536
1537
        "CHANGE COLUMN `payment_dm` `payment_dark_matter_paid` DECIMAL(65,0) DEFAULT 0 COMMENT 'Real DM paid for'",
1538
        "ADD COLUMN `payment_dark_matter_gained` DECIMAL(65,0) DEFAULT 0 COMMENT 'DM gained by player (with bonuses)' AFTER `payment_dark_matter_paid`",
1539
1540
        "CHANGE COLUMN `payment_internal_id` `payment_external_id` VARCHAR(255) DEFAULT '' COMMENT 'External payment ID in payment system'",
1541
        "CHANGE COLUMN `payment_internal_date` `payment_external_date` DATETIME COMMENT 'External payment timestamp in payment system'",
1542
        "ADD COLUMN `payment_external_lots` decimal(65,5) NOT NULL DEFAULT '0.00000' COMMENT 'Payment system lot amount'",
1543
        "ADD COLUMN `payment_external_amount` decimal(65,5) NOT NULL DEFAULT '0.00000' COMMENT 'Money incoming from payment system'",
1544
        "ADD COLUMN `payment_external_currency` VARCHAR(3) NOT NULL DEFAULT '' COMMENT 'Payment system currency'",
1545
      ), !$update_tables['payment']['payment_status']);
1546
    }
1547
1548
    upd_do_query("UPDATE {{powerup}} SET powerup_time_start = 0, powerup_time_finish = 0 WHERE powerup_category = " . UNIT_PLANS . ";");
1549
1550
    upd_check_key('server_start_date', date('d.m.Y', SN_TIME_NOW), !isset(classSupernova::$config->server_start_date));
1551
    upd_check_key('server_que_length_structures', 5, !isset(classSupernova::$config->server_que_length_structures));
1552
    upd_check_key('server_que_length_hangar', 5, !isset(classSupernova::$config->server_que_length_hangar));
1553
1554
    upd_check_key('chat_highlight_moderator', '<span class="nick_moderator">$1</span>', classSupernova::$config->chat_highlight_admin == '<font color=green>$1</font>');
1555
    upd_check_key('chat_highlight_operator', '<span class="nick_operator">$1</span>', classSupernova::$config->chat_highlight_admin == '<font color=red>$1</font>');
1556
    upd_check_key('chat_highlight_admin', '<span class="nick_admin">$1</span>', classSupernova::$config->chat_highlight_admin == '<font color=purple>$1</font>');
1557
1558
    upd_check_key('chat_highlight_premium', '<span class="nick_premium">$1</span>', !isset(classSupernova::$config->chat_highlight_premium));
1559
1560
    upd_do_query("UPDATE {{planets}} SET `PLANET_GOVERNOR_LEVEL` = CEILING(`PLANET_GOVERNOR_LEVEL`/2) WHERE PLANET_GOVERNOR_ID = " . MRC_ENGINEER . " AND `PLANET_GOVERNOR_LEVEL` > 8;");
1561
1562
1563
    upd_do_query('COMMIT;', true);
1564
    $new_version = 34;
1565
1566
  case 34:
1567
    upd_log_version_update();
1568
1569
    upd_alter_table('planets', array(
1570
      "ADD COLUMN `planet_teleport_next` INT(11) NOT NULL DEFAULT 0 COMMENT 'Next teleport time'",
1571
    ), !$update_tables['planets']['planet_teleport_next']);
1572
1573
    upd_check_key('planet_teleport_cost', 50000, !isset(classSupernova::$config->planet_teleport_cost));
1574
    upd_check_key('planet_teleport_timeout', PERIOD_DAY * 1, !isset(classSupernova::$config->planet_teleport_timeout));
1575
1576
    upd_check_key('planet_capital_cost', 25000, !isset(classSupernova::$config->planet_capital_cost));
1577
1578
    upd_alter_table('users', array(
1579
      "ADD COLUMN `player_race` INT(11) NOT NULL DEFAULT 0 COMMENT 'Player\'s race'",
1580
    ), !$update_tables['users']['player_race']);
1581
1582
    upd_alter_table('chat', array(
1583
      "MODIFY COLUMN `user` TEXT COMMENT 'Chat message user name'",
1584
    ), strtoupper($update_tables['chat']['user']['Type']) != 'TEXT');
1585
1586
    upd_alter_table('planets', array(
1587
      "ADD `ship_sattelite_sloth` bigint(20) NOT NULL DEFAULT '0' COMMENT 'Terran Sloth'",
1588
      "ADD `ship_bomber_envy` bigint(20) NOT NULL DEFAULT '0' COMMENT 'Lunar Envy'",
1589
      "ADD `ship_recycler_gluttony` bigint(20) NOT NULL DEFAULT '0' COMMENT 'Mercurian Gluttony'",
1590
      "ADD `ship_fighter_wrath` bigint(20) NOT NULL DEFAULT '0' COMMENT 'Venerian Wrath'",
1591
      "ADD `ship_battleship_pride` bigint(20) NOT NULL DEFAULT '0' COMMENT 'Martian Pride'",
1592
      "ADD `ship_cargo_greed` bigint(20) NOT NULL DEFAULT '0' COMMENT 'Republican Greed'",
1593
    ), !$update_tables['planets']['ship_sattelite_sloth']);
1594
1595
    upd_alter_table('planets', array(
1596
      "ADD `ship_sattelite_sloth_porcent` TINYINT(3) UNSIGNED NOT NULL DEFAULT '10' COMMENT 'Terran Sloth production'",
1597
      "ADD KEY `I_ship_sattelite_sloth` (`ship_sattelite_sloth`, `id_level`)",
1598
      "ADD KEY `I_ship_bomber_envy` (`ship_bomber_envy`, `id_level`)",
1599
      "ADD KEY `I_ship_recycler_gluttony` (`ship_recycler_gluttony`, `id_level`)",
1600
      "ADD KEY `I_ship_fighter_wrath` (`ship_fighter_wrath`, `id_level`)",
1601
      "ADD KEY `I_ship_battleship_pride` (`ship_battleship_pride`, `id_level`)",
1602
      "ADD KEY `I_ship_cargo_greed` (`ship_cargo_greed`, `id_level`)",
1603
    ), !$update_tables['planets']['ship_sattelite_sloth_porcent']);
1604
1605
    upd_check_key('stats_hide_admins', 1, !isset(classSupernova::$config->stats_hide_admins));
1606
    upd_check_key('stats_hide_player_list', '', !isset(classSupernova::$config->stats_hide_player_list));
1607
1608
    upd_check_key('adv_seo_meta_description', '', !isset(classSupernova::$config->adv_seo_meta_description));
1609
    upd_check_key('adv_seo_meta_keywords', '', !isset(classSupernova::$config->adv_seo_meta_keywords));
1610
1611
    upd_check_key('stats_hide_pm_link', '0', !isset(classSupernova::$config->stats_hide_pm_link));
1612
1613
    upd_alter_table('notes', array(
1614
      "ADD INDEX `I_owner_priority_time` (`owner`, `priority`, `time`)",
1615
    ), !$update_indexes['notes']['I_owner_priority_time']);
1616
1617
    if(!$update_tables['buddy']['BUDDY_ID']) {
1618
      upd_alter_table('buddy', array(
1619
        "CHANGE COLUMN `id` `BUDDY_ID` SERIAL COMMENT 'Buddy\Buddy table row ID'",
1620
        "CHANGE COLUMN `active` `BUDDY_STATUS` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Buddy\Buddy request status'",
1621
        "CHANGE COLUMN `text` `BUDDY_REQUEST` TINYTEXT DEFAULT '' COMMENT 'Buddy\Buddy request text'", // 255 chars
1622
1623
        "DROP INDEX `id`",
1624
1625
        "DROP FOREIGN KEY `FK_buddy_sender_id`",
1626
        "DROP FOREIGN KEY `FK_buddy_owner_id`",
1627
        "DROP INDEX `I_buddy_sender`",
1628
        "DROP INDEX `I_buddy_owner`",
1629
      ), !$update_tables['buddy']['BUDDY_ID']);
1630
1631
      upd_alter_table('buddy', array(
1632
        "CHANGE COLUMN `sender` `BUDDY_SENDER_ID` BIGINT(20) UNSIGNED NULL DEFAULT NULL COMMENT 'Buddy\Buddy request sender ID'",
1633
        "CHANGE COLUMN `owner` `BUDDY_OWNER_ID` BIGINT(20) UNSIGNED NULL DEFAULT NULL COMMENT 'Buddy\Buddy request recipient ID'",
1634
      ), !$update_tables['buddy']['BUDDY_SENDER']);
1635
1636
      $query = upd_do_query("SELECT `BUDDY_ID`, `BUDDY_SENDER_ID`, `BUDDY_OWNER_ID` FROM {{buddy}} ORDER BY `BUDDY_ID`;");
1637
      $found = $lost = array();
1638
      while($row = db_fetch($query)) {
1639
        $index = min($row['BUDDY_SENDER_ID'], $row['BUDDY_OWNER_ID']) . ';' . max($row['BUDDY_SENDER_ID'], $row['BUDDY_OWNER_ID']);
1640
        if(!isset($found[$index])) {
1641
          $found[$index] = $row['BUDDY_ID'];
1642
        } else {
1643
          $lost[] = $row['BUDDY_ID'];
1644
        }
1645
      }
1646
      $lost = implode(',', $lost);
1647
      if($lost) {
1648
        upd_do_query("DELETE FROM {{buddy}} WHERE `BUDDY_ID` IN ({$lost})");
1649
      }
1650
1651
      upd_alter_table('buddy', array(
1652
        "ADD KEY `I_BUDDY_SENDER_ID` (`BUDDY_SENDER_ID`, `BUDDY_OWNER_ID`)",
1653
        "ADD KEY `I_BUDDY_OWNER_ID` (`BUDDY_OWNER_ID`, `BUDDY_SENDER_ID`)",
1654
1655
        "ADD CONSTRAINT `FK_BUDDY_SENDER_ID` FOREIGN KEY (`BUDDY_SENDER_ID`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
1656
        "ADD CONSTRAINT `FK_BUDDY_OWNER_ID` FOREIGN KEY (`BUDDY_OWNER_ID`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
1657
      ), !$update_indexes['buddy']['I_BUDDY_SENDER_ID']);
1658
    }
1659
1660
    upd_do_query('COMMIT;', true);
1661
    $new_version = 35;
1662
1663
  case 35:
1664
    upd_log_version_update();
1665
1666
    upd_do_query("UPDATE {{users}} SET `ally_name` = NULL, `ally_tag` = NULL, ally_register_time = 0, ally_rank_id = 0 WHERE `ally_id` IS NULL");
1667
1668
    if(!$update_tables['ube_report']) {
1669
      upd_create_table('ube_report',
1670
        "(
1671
          `ube_report_id` SERIAL COMMENT 'Report ID',
1672
1673
          `ube_report_cypher` CHAR(32) NOT NULL DEFAULT '' COMMENT '16 char secret report ID',
1674
1675
          `ube_report_time_combat` DATETIME NOT NULL COMMENT 'Combat time',
1676
          `ube_report_time_process` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Time when combat was processed',
1677
          `ube_report_time_spent` DECIMAL(11,8) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Time in seconds spent for combat calculations',
1678
1679
          `ube_report_mission_type` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Mission type',
1680
          `ube_report_combat_admin` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Does admin participates in combat?',
1681
1682
          `ube_report_combat_result` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Combat outcome',
1683
          `ube_report_combat_sfr` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Small Fleet Reconnaissance',
1684
1685
          `ube_report_planet_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Player planet ID',
1686
          `ube_report_planet_name` VARCHAR(64) NOT NULL DEFAULT 'Planet' COMMENT 'Player planet name',
1687
          `ube_report_planet_size` SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Player diameter',
1688
          `ube_report_planet_galaxy` SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Player planet coordinate galaxy',
1689
          `ube_report_planet_system` SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Player planet coordinate system',
1690
          `ube_report_planet_planet` SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Player planet coordinate planet',
1691
          `ube_report_planet_planet_type` TINYINT NOT NULL DEFAULT 1 COMMENT 'Player planet type',
1692
1693
          `ube_report_moon` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Moon result: was, none, failed, created, destroyed',
1694
          `ube_report_moon_chance` DECIMAL(9,6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Moon creation chance',
1695
          `ube_report_moon_size` SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Moon size',
1696
          `ube_report_moon_reapers` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Moon reapers result: none, died, survived',
1697
          `ube_report_moon_destroy_chance` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Moon destroy chance',
1698
          `ube_report_moon_reapers_die_chance` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Moon reapers die chance',
1699
1700
          `ube_report_debris_metal` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Metal debris',
1701
          `ube_report_debris_crystal` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Crystal debris',
1702
1703
          PRIMARY KEY (`ube_report_id`),
1704
          KEY `I_ube_report_cypher` (`ube_report_cypher`)
1705
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
1706
      );
1707
    }
1708
1709
    if(!$update_tables['ube_report_player']) {
1710
      upd_create_table('ube_report_player',
1711
        "(
1712
          `ube_report_player_id` SERIAL COMMENT 'Record ID',
1713
          `ube_report_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Report ID',
1714
          `ube_report_player_player_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Player ID',
1715
1716
          `ube_report_player_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'Player name',
1717
          `ube_report_player_attacker` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Is player an attacker?',
1718
1719
          `ube_report_player_bonus_attack` DECIMAL(11,2) NOT NULL DEFAULT 0 COMMENT 'Player attack bonus', -- Only for statistics
1720
          `ube_report_player_bonus_shield` DECIMAL(11,2) NOT NULL DEFAULT 0 COMMENT 'Player shield bonus', -- Only for statistics
1721
          `ube_report_player_bonus_armor` DECIMAL(11,2) NOT NULL DEFAULT 0 COMMENT 'Player armor bonus', -- Only for statistics
1722
1723
          PRIMARY KEY (`ube_report_player_id`),
1724
          KEY `I_ube_report_player_player_id` (`ube_report_player_player_id`),
1725
          CONSTRAINT `FK_ube_report_player_ube_report` FOREIGN KEY (`ube_report_id`) REFERENCES `{{ube_report}}` (`ube_report_id`) ON UPDATE CASCADE ON DELETE CASCADE
1726
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
1727
      );
1728
    }
1729
1730
    if(!$update_tables['ube_report_fleet']) {
1731
      upd_create_table('ube_report_fleet',
1732
        "(
1733
          `ube_report_fleet_id` SERIAL COMMENT 'Record DB ID',
1734
1735
          `ube_report_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Report ID',
1736
          `ube_report_fleet_player_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Owner ID',
1737
          `ube_report_fleet_fleet_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Fleet ID',
1738
1739
          `ube_report_fleet_planet_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Player attack bonus',
1740
          `ube_report_fleet_planet_name` VARCHAR(64) NOT NULL DEFAULT 'Planet' COMMENT 'Player planet name',
1741
          `ube_report_fleet_planet_galaxy` SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Player planet coordinate galaxy',
1742
          `ube_report_fleet_planet_system` SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Player planet coordinate system',
1743
          `ube_report_fleet_planet_planet` SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Player planet coordinate planet',
1744
          `ube_report_fleet_planet_planet_type` TINYINT NOT NULL DEFAULT 1 COMMENT 'Player planet type',
1745
1746
          `ube_report_fleet_bonus_attack` DECIMAL(11,2) NOT NULL DEFAULT 0 COMMENT 'Fleet attack bonus', -- Only for statistics
1747
          `ube_report_fleet_bonus_shield` DECIMAL(11,2) NOT NULL DEFAULT 0 COMMENT 'Fleet shield bonus', -- Only for statistics
1748
          `ube_report_fleet_bonus_armor` DECIMAL(11,2) NOT NULL DEFAULT 0 COMMENT 'Fleet armor bonus',   -- Only for statistics
1749
1750
          `ube_report_fleet_resource_metal` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Fleet metal amount',
1751
          `ube_report_fleet_resource_crystal` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Fleet crystal amount',
1752
          `ube_report_fleet_resource_deuterium` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Fleet deuterium amount',
1753
1754
          PRIMARY KEY (`ube_report_fleet_id`),
1755
          CONSTRAINT `FK_ube_report_fleet_ube_report` FOREIGN KEY (`ube_report_id`) REFERENCES `{{ube_report}}` (`ube_report_id`) ON UPDATE CASCADE ON DELETE CASCADE
1756
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
1757
      );
1758
    }
1759
1760
    if(!$update_tables['ube_report_unit']) {
1761
      // TODO: Сохранять так же имя корабля - на случай конструкторов - не, хуйня. Конструктор может давать имена разные на разных языках
1762
      // Может сохранять имена удаленных кораблей долго?
1763
1764
      // round SIGNED!!! -1 например - для ауткома
1765
      upd_create_table('ube_report_unit',
1766
        "(
1767
          `ube_report_unit_id` SERIAL COMMENT 'Record DB ID',
1768
1769
          `ube_report_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Report ID',
1770
          `ube_report_unit_player_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Owner ID',
1771
          `ube_report_unit_fleet_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Fleet ID',
1772
          `ube_report_unit_round` TINYINT NOT NULL DEFAULT 0 COMMENT 'Round number',
1773
1774
          `ube_report_unit_unit_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit ID',
1775
          `ube_report_unit_count` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit count',
1776
          `ube_report_unit_boom` SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit booms',
1777
1778
          `ube_report_unit_attack` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit attack',
1779
          `ube_report_unit_shield` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit shield',
1780
          `ube_report_unit_armor` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit armor',
1781
1782
          `ube_report_unit_attack_base` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit base attack',
1783
          `ube_report_unit_shield_base` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit base shield',
1784
          `ube_report_unit_armor_base` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit base armor',
1785
1786
          `ube_report_unit_sort_order` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit pass-through sort order to maintain same output',
1787
1788
          PRIMARY KEY (`ube_report_unit_id`),
1789
          KEY `I_ube_report_unit_report_round_fleet_order` (`ube_report_id`, `ube_report_unit_round`, `ube_report_unit_fleet_id`, `ube_report_unit_sort_order`),
1790
          KEY `I_ube_report_unit_report_unit_order` (`ube_report_id`, `ube_report_unit_sort_order`),
1791
          KEY `I_ube_report_unit_order` (`ube_report_unit_sort_order`),
1792
          CONSTRAINT `FK_ube_report_unit_ube_report` FOREIGN KEY (`ube_report_id`) REFERENCES `{{ube_report}}` (`ube_report_id`) ON UPDATE CASCADE ON DELETE CASCADE
1793
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
1794
      );
1795
    }
1796
1797
    if(!$update_tables['ube_report_outcome_fleet']) {
1798
      upd_create_table('ube_report_outcome_fleet',
1799
        "(
1800
          `ube_report_outcome_fleet_id` SERIAL COMMENT 'Record DB ID',
1801
1802
          `ube_report_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Report ID',
1803
          `ube_report_outcome_fleet_fleet_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Fleet ID',
1804
1805
          `ube_report_outcome_fleet_resource_lost_metal` DECIMAL(65,0) NOT NULL DEFAULT 0 COMMENT 'Fleet metal loss from units',
1806
          `ube_report_outcome_fleet_resource_lost_crystal` DECIMAL(65,0) NOT NULL DEFAULT 0 COMMENT 'Fleet crystal loss from units',
1807
          `ube_report_outcome_fleet_resource_lost_deuterium` DECIMAL(65,0) NOT NULL DEFAULT 0 COMMENT 'Fleet deuterium loss from units',
1808
1809
          `ube_report_outcome_fleet_resource_dropped_metal` DECIMAL(65,0) NOT NULL DEFAULT 0 COMMENT 'Fleet metal dropped due reduced cargo',
1810
          `ube_report_outcome_fleet_resource_dropped_crystal` DECIMAL(65,0) NOT NULL DEFAULT 0 COMMENT 'Fleet crystal dropped due reduced cargo',
1811
          `ube_report_outcome_fleet_resource_dropped_deuterium` DECIMAL(65,0) NOT NULL DEFAULT 0 COMMENT 'Fleet deuterium dropped due reduced cargo',
1812
1813
          `ube_report_outcome_fleet_resource_loot_metal` DECIMAL(65,0) NOT NULL DEFAULT 0 COMMENT 'Looted/Lost from loot metal',
1814
          `ube_report_outcome_fleet_resource_loot_crystal` DECIMAL(65,0) NOT NULL DEFAULT 0 COMMENT 'Looted/Lost from loot crystal',
1815
          `ube_report_outcome_fleet_resource_loot_deuterium` DECIMAL(65,0) NOT NULL DEFAULT 0 COMMENT 'Looted/Lost from loot deuterium',
1816
1817
          `ube_report_outcome_fleet_resource_lost_in_metal` DECIMAL(65,0) NOT NULL DEFAULT 0 COMMENT 'Fleet total resource loss in metal',
1818
1819
          PRIMARY KEY (`ube_report_outcome_fleet_id`),
1820
          KEY `I_ube_report_outcome_fleet_report_fleet` (`ube_report_id`, `ube_report_outcome_fleet_fleet_id`),
1821
          CONSTRAINT `FK_ube_report_outcome_fleet_ube_report` FOREIGN KEY (`ube_report_id`) REFERENCES `{{ube_report}}` (`ube_report_id`) ON UPDATE CASCADE ON DELETE CASCADE
1822
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
1823
      );
1824
    }
1825
1826
    if(!$update_tables['ube_report_outcome_unit']) {
1827
      upd_create_table('ube_report_outcome_unit',
1828
        "(
1829
          `ube_report_outcome_unit_id` SERIAL COMMENT 'Record DB ID',
1830
1831
          `ube_report_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Report ID',
1832
          `ube_report_outcome_unit_fleet_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Fleet ID',
1833
1834
          `ube_report_outcome_unit_unit_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit ID',
1835
          `ube_report_outcome_unit_restored` DECIMAL(65,0) NOT NULL DEFAULT 0 COMMENT 'Unit restored',
1836
          `ube_report_outcome_unit_lost` DECIMAL(65,0) NOT NULL DEFAULT 0 COMMENT 'Unit lost',
1837
1838
          `ube_report_outcome_unit_sort_order` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit pass-through sort order to maintain same output',
1839
1840
          PRIMARY KEY (`ube_report_outcome_unit_id`),
1841
          KEY `I_ube_report_outcome_unit_report_order` (`ube_report_id`, `ube_report_outcome_unit_sort_order`),
1842
          CONSTRAINT `FK_ube_report_outcome_unit_ube_report` FOREIGN KEY (`ube_report_id`) REFERENCES `{{ube_report}}` (`ube_report_id`) ON UPDATE CASCADE ON DELETE CASCADE
1843
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
1844
      );
1845
    }
1846
1847
    if(!$update_tables['unit']) {
1848
      upd_create_table('unit',
1849
        "(
1850
          `unit_id` SERIAL COMMENT 'Record ID',
1851
1852
          `unit_player_id` BIGINT(20) UNSIGNED DEFAULT NULL COMMENT 'Unit owner',
1853
          `unit_location_type` TINYINT NOT NULL DEFAULT 0 COMMENT 'Location type: universe, user, planet (moon?), fleet',
1854
          `unit_location_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Location ID',
1855
          `unit_type` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit type',
1856
          `unit_snid` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit SuperNova ID',
1857
          `unit_level` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit level or count - dependent of unit_type',
1858
1859
          PRIMARY KEY (`unit_id`),
1860
          KEY `I_unit_player_location_snid` (`unit_player_id`, `unit_location_type`, `unit_location_id`, `unit_snid`),
1861
          CONSTRAINT `FK_unit_player_id` FOREIGN KEY (`unit_player_id`) REFERENCES `{{users}}` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
1862
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
1863
      );
1864
    }
1865
1866
    if(!$update_tables['captain']) {
1867
      upd_create_table('captain',
1868
        "(
1869
          `captain_id` SERIAL COMMENT 'Record ID',
1870
          `captain_unit_id` BIGINT(20) UNSIGNED DEFAULT NULL COMMENT 'Link to `unit` record',
1871
1872
          `captain_xp` DECIMAL(65,0) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Captain expirience',
1873
          `captain_level` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Captain level so far', -- Дублирует запись в unit
1874
1875
          `captain_shield` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Captain shield bonus level',
1876
          `captain_armor` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Captain armor bonus level',
1877
          `captain_attack` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Captain defense bonus level',
1878
1879
          PRIMARY KEY (`captain_id`),
1880
          KEY `I_captain_unit_id` (`captain_unit_id`),
1881
          CONSTRAINT `FK_captain_unit_id` FOREIGN KEY (`captain_unit_id`) REFERENCES `{{unit}}` (`unit_id`) ON UPDATE CASCADE ON DELETE CASCADE
1882
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
1883
      );
1884
    }
1885
1886 View Code Duplication
    if(!$update_tables['fleets']['fleet_start_planet_id']) {
1887
      upd_alter_table('fleets', array(
1888
        "ADD `fleet_start_planet_id` BIGINT(20) UNSIGNED DEFAULT NULL COMMENT 'Fleet start planet ID' AFTER `fleet_start_time`",
1889
        "ADD `fleet_end_planet_id` BIGINT(20) UNSIGNED DEFAULT NULL COMMENT 'Fleet end planet ID' AFTER `fleet_end_stay`",
1890
1891
        "ADD KEY `I_fleet_start_planet_id` (`fleet_start_planet_id`)",
1892
        "ADD KEY `I_fleet_end_planet_id` (`fleet_end_planet_id`)",
1893
1894
        "ADD CONSTRAINT `FK_fleet_planet_start` FOREIGN KEY (`fleet_start_planet_id`) REFERENCES `{{planets}}` (`id`) ON DELETE SET NULL ON UPDATE CASCADE",
1895
        "ADD CONSTRAINT `FK_fleet_planet_end` FOREIGN KEY (`fleet_end_planet_id`) REFERENCES `{{planets}}` (`id`) ON DELETE SET NULL ON UPDATE CASCADE",
1896
      ), !$update_tables['fleets']['fleet_start_planet_id']);
1897
1898
      upd_do_query("
1899
        UPDATE {{fleets}} AS f
1900
         LEFT JOIN {{planets}} AS p_s ON p_s.galaxy = f.fleet_start_galaxy AND p_s.system = f.fleet_start_system AND p_s.planet = f.fleet_start_planet AND p_s.planet_type = f.fleet_start_type
1901
         LEFT JOIN {{planets}} AS p_e ON p_e.galaxy = f.fleet_end_galaxy AND p_e.system = f.fleet_end_system AND p_e.planet = f.fleet_end_planet AND p_e.planet_type = f.fleet_end_type
1902
        SET f.fleet_start_planet_id = p_s.id, f.fleet_end_planet_id = p_e.id
1903
      ");
1904
    }
1905
1906
    upd_alter_table('fleets', array("DROP COLUMN `processing_start`"), $update_tables['fleets']['processing_start']);
1907
1908
    if(!$update_tables['chat_player']) {
1909
      upd_create_table('chat_player',
1910
        "(
1911
          `chat_player_id` SERIAL COMMENT 'Record ID',
1912
1913
          `chat_player_player_id` BIGINT(20) UNSIGNED DEFAULT NULL COMMENT 'Chat player record owner',
1914
          `chat_player_activity` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Last player activity in chat',
1915
          `chat_player_invisible` TINYINT NOT NULL DEFAULT 0 COMMENT 'Player invisibility',
1916
          `chat_player_muted` INT(11) NOT NULL DEFAULT 0 COMMENT 'Player is muted',
1917
          `chat_player_mute_reason` VARCHAR(256) NOT NULL DEFAULT '' COMMENT 'Player mute reason',
1918
1919
          PRIMARY KEY (`chat_player_id`),
1920
1921
          KEY `I_chat_player_id` (`chat_player_player_id`),
1922
1923
          CONSTRAINT `FK_chat_player_id` FOREIGN KEY (`chat_player_player_id`) REFERENCES `{{users}}` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
1924
1925
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
1926
      );
1927
    }
1928
1929
    upd_alter_table('chat', array(
1930
      "ADD `chat_message_sender_id` BIGINT(20) UNSIGNED DEFAULT NULL COMMENT 'Message sender ID' AFTER `messageid`",
1931
      "ADD `chat_message_recipient_id` BIGINT(20) UNSIGNED DEFAULT NULL COMMENT 'Message recipient ID' AFTER `user`",
1932
1933
      "ADD KEY `I_chat_message_sender_id` (`chat_message_sender_id`)",
1934
      "ADD KEY `I_chat_message_recipient_id` (`chat_message_recipient_id`)",
1935
1936
      "ADD CONSTRAINT `FK_chat_message_sender_user_id` FOREIGN KEY (`chat_message_sender_id`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
1937
      "ADD CONSTRAINT `FK_chat_message_sender_recipient_id` FOREIGN KEY (`chat_message_recipient_id`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
1938
    ), !$update_tables['chat']['chat_message_sender_id']);
1939
1940
    upd_alter_table('chat', array(
1941
      "ADD `chat_message_sender_name` VARCHAR(64) DEFAULT '' COMMENT 'Message sender name' AFTER `chat_message_sender_id`",
1942
      "ADD `chat_message_recipient_name` VARCHAR(64) DEFAULT '' COMMENT 'Message sender name' AFTER `chat_message_recipient_id`",
1943
    ), !$update_tables['chat']['chat_message_sender_name']);
1944
1945
    upd_alter_table('users', array(
1946
      "MODIFY COLUMN `banaday` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'User ban status'",
1947
    ), strtoupper($update_tables['users']['banaday']['Null']) == 'YES');
1948
1949
    upd_alter_table('banned', array(
1950
      "ADD `ban_user_id` BIGINT(20) UNSIGNED DEFAULT NULL COMMENT 'Banned user ID' AFTER `ban_id`",
1951
      "ADD `ban_issuer_id` BIGINT(20) UNSIGNED DEFAULT NULL COMMENT 'Banner ID' AFTER `ban_until`",
1952
1953
      "ADD KEY `I_ban_user_id` (`ban_user_id`)",
1954
      "ADD KEY `I_ban_issuer_id` (`ban_issuer_id`)",
1955
1956
      "ADD CONSTRAINT `FK_ban_user_id` FOREIGN KEY (`ban_user_id`) REFERENCES `{{users}}` (`id`) ON DELETE SET NULL ON UPDATE CASCADE",
1957
      "ADD CONSTRAINT `FK_ban_issuer_id` FOREIGN KEY (`ban_issuer_id`) REFERENCES `{{users}}` (`id`) ON DELETE SET NULL ON UPDATE CASCADE",
1958
    ), !$update_tables['banned']['ban_user_id']);
1959
1960
    upd_do_query('COMMIT;', true);
1961
    $new_version = 36;
1962
1963
  case 36:
1964
    upd_log_version_update();
1965
1966
    upd_alter_table('payment', array(
1967
      "DROP FOREIGN KEY `FK_payment_user`",
1968
    ), $update_foreigns['payment']['FK_payment_user']);
1969
1970
    if($update_foreigns['chat']['FK_chat_message_sender_user_id'] != 'chat_message_sender_id,users,id;') {
1971
      upd_alter_table('chat', array(
1972
        "DROP FOREIGN KEY `FK_chat_message_sender_user_id`",
1973
        "DROP FOREIGN KEY `FK_chat_message_sender_recipient_id`",
1974
      ), true);
1975
1976
      upd_alter_table('chat', array(
1977
        "ADD CONSTRAINT `FK_chat_message_sender_user_id` FOREIGN KEY (`chat_message_sender_id`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
1978
        "ADD CONSTRAINT `FK_chat_message_sender_recipient_id` FOREIGN KEY (`chat_message_recipient_id`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
1979
      ), true);
1980
    }
1981
1982
    upd_alter_table('users', array(
1983
      "ADD `user_time_diff` INT(11) DEFAULT NULL COMMENT 'User time difference with server time' AFTER `onlinetime`",
1984
      "ADD `user_time_diff_forced` TINYINT(1) DEFAULT 0 COMMENT 'User time difference forced with time zone selection flag' AFTER `user_time_diff`",
1985
    ), !$update_tables['users']['user_time_diff']);
1986
1987
    upd_alter_table('planets', array(
1988
      "ADD `ship_orbital_heavy` bigint(20) NOT NULL DEFAULT '0' COMMENT 'HOPe - Heavy Orbital Platform'",
1989
    ), !$update_tables['planets']['ship_orbital_heavy']);
1990
1991
    upd_check_key('chat_refresh_rate', 5, !isset(classSupernova::$config->chat_refresh_rate));
1992
1993
    upd_alter_table('chat_player', array(
1994
      "ADD `chat_player_refresh_last`  INT(11) NOT NULL DEFAULT 0 COMMENT 'Player last refresh time'",
1995
1996
      "ADD KEY `I_chat_player_refresh_last` (`chat_player_refresh_last`)",
1997
    ), !$update_tables['chat_player']['chat_player_refresh_last']);
1998
1999
    upd_alter_table('ube_report', array(
2000
      "ADD KEY `I_ube_report_time_combat` (`ube_report_time_combat`)",
2001
    ), !$update_indexes['ube_report']['I_ube_report_time_combat']);
2002
2003
    if(!$update_tables['unit']['unit_time_start']) {
2004
      upd_alter_table('unit', array(
2005
        "ADD COLUMN `unit_time_start` DATETIME NULL DEFAULT NULL COMMENT 'Unit activation start time'",
2006
        "ADD COLUMN `unit_time_finish` DATETIME NULL DEFAULT NULL COMMENT 'Unit activation end time'",
2007
      ), !$update_tables['unit']['unit_time_start']);
2008
2009
      upd_do_query(
2010
        "INSERT INTO {{unit}}
2011
          (unit_player_id, unit_location_type, unit_location_id, unit_type, unit_snid, unit_level, unit_time_start, unit_time_finish)
2012
        SELECT
2013
          `powerup_user_id`, " . LOC_USER . ", `powerup_user_id`, `powerup_category`, `powerup_unit_id`, `powerup_unit_level`
2014
          , IF(`powerup_time_start`, FROM_UNIXTIME(`powerup_time_start`), NULL), IF(`powerup_time_finish`, FROM_UNIXTIME(`powerup_time_finish`), NULL)
2015
        FROM {{powerup}}"
2016
      );
2017
    }
2018
2019
    if(!$update_tables['que']) {
2020
      upd_create_table('que',
2021
        "(
2022
          `que_id` SERIAL COMMENT 'Internal que id',
2023
2024
          `que_player_id` BIGINT(20) UNSIGNED NULL DEFAULT NULL COMMENT 'Que owner ID',
2025
          `que_planet_id` BIGINT(20) UNSIGNED NULL DEFAULT NULL COMMENT 'Which planet this que item belongs',
2026
          `que_planet_id_origin` BIGINT(20) UNSIGNED NULL DEFAULT NULL COMMENT 'Planet spawner ID',
2027
          `que_type` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Que type',
2028
          `que_time_left` DECIMAL(20,5) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Build time left from last activity',
2029
2030
          `que_unit_id` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit ID',
2031
          `que_unit_amount` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Amount left to build',
2032
          `que_unit_mode` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Build/Destroy',
2033
2034
          `que_unit_level` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Unit level. Informational field',
2035
          `que_unit_time` DECIMAL(20,5) NOT NULL DEFAULT 0 COMMENT 'Time to build one unit. Informational field',
2036
          `que_unit_price` VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'Price per unit - for correct trim/clear in case of global price events',
2037
2038
          PRIMARY KEY (`que_id`),
2039
          KEY `I_que_player_type_planet` (`que_player_id`, `que_type`, `que_planet_id`, `que_id`), -- For main search
2040
          KEY `I_que_player_type` (`que_player_id`, `que_type`, `que_id`), -- For main search
2041
          KEY `I_que_planet_id` (`que_planet_id`), -- For constraint
2042
2043
          CONSTRAINT `FK_que_player_id` FOREIGN KEY (`que_player_id`) REFERENCES `{{users}}` (`id`) ON UPDATE CASCADE ON DELETE CASCADE,
2044
          CONSTRAINT `FK_que_planet_id` FOREIGN KEY (`que_planet_id`) REFERENCES `{{planets}}` (`id`) ON UPDATE CASCADE ON DELETE CASCADE,
2045
          CONSTRAINT `FK_que_planet_id_origin` FOREIGN KEY (`que_planet_id_origin`) REFERENCES `{{planets}}` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
2046
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
2047
      );
2048
    }
2049
2050
    // Конвертирум очередь исследований
2051
    if($update_tables['users']['que']) {
2052
      $que_lines = array();
2053
      $que_query = upd_do_query("SELECT * FROM {{users}} WHERE `que`");
2054
      while($que_row = db_fetch($que_query)) {
2055
        $que_data = explode(',', $que_row['que']);
2056
2057
        if(!in_array($que_data[QI_UNIT_ID], sn_get_groups('tech'))) {
2058
          continue;
2059
        }
2060
2061
        $que_data[QI_TIME] = $que_data[QI_TIME] >= 0 ? $que_data[QI_TIME] : 0;
2062
        // Если планета пустая - ставим главку
2063
        $que_data[QI_PLANET_ID] = $que_data[QI_PLANET_ID] ? $que_data[QI_PLANET_ID] : $que_row['id_planet'];
2064
        if($que_data[QI_PLANET_ID]) {
2065
          $que_planet_check = db_fetch(upd_do_query("SELECT `id` FROM {{planets}} WHERE `id` = {$que_data[QI_PLANET_ID]}"));
2066
          if(!$que_planet_check['id']) {
2067
            $que_data[QI_PLANET_ID] = $que_row['id_planet'];
2068
            $que_planet_check = db_fetch(upd_do_query("SELECT `id` FROM {{planets}} WHERE `id` = {$que_data[QI_PLANET_ID]}"));
2069
            if(!$que_planet_check['id']) {
2070
              $que_data[QI_PLANET_ID] = 'NULL';
2071
            }
2072
          }
2073
        } else {
2074
          $que_data[QI_PLANET_ID] = 'NULL';
2075
        }
2076
2077
        $unit_info = get_unit_param($que_data[QI_UNIT_ID]);
2078
        $unit_level = $que_row[$unit_info[P_NAME]];
2079
        $unit_factor = $unit_info[P_COST][P_FACTOR] ? $unit_info[P_COST][P_FACTOR] : 1;
2080
        $price_increase = pow($unit_factor, $unit_level);
2081
        $unit_level++;
2082
        $unit_cost = array();
2083
        foreach($unit_info[P_COST] as $resource_id => $resource_amount) {
2084
          if($resource_id === P_FACTOR || $resource_id == RES_ENERGY || !($resource_cost = $resource_amount * $price_increase)) {
2085
            continue;
2086
          }
2087
          $unit_cost[] = $resource_id . ',' . floor($resource_cost);
2088
        }
2089
        $unit_cost = implode(';', $unit_cost);
2090
2091
        $que_lines[] = "({$que_row['id']},{$que_data[QI_PLANET_ID]}," . QUE_RESEARCH . ",{$que_data[QI_TIME]},{$que_data[QI_UNIT_ID]},1," .
2092
          BUILD_CREATE . ",{$unit_level},{$que_data[QI_TIME]},'{$unit_cost}')";
2093
      }
2094
2095
      if(!empty($que_lines)) {
2096
        upd_do_query('INSERT INTO `{{que}}` (`que_player_id`,`que_planet_id_origin`,`que_type`,`que_time_left`,`que_unit_id`,`que_unit_amount`,`que_unit_mode`,`que_unit_level`,`que_unit_time`,`que_unit_price`) VALUES ' . implode(',', $que_lines));
2097
      }
2098
2099
      upd_alter_table('users', array(
2100
        "DROP COLUMN `que`",
2101
      ), $update_tables['users']['que']);
2102
    }
2103
2104
2105
    upd_check_key('server_que_length_research', 1, !isset(classSupernova::$config->server_que_length_research));
2106
2107
2108
    // Ковертируем технологии в таблицы
2109
    if($update_tables['users']['graviton_tech']) {
2110
      upd_do_query("DELETE FROM {{unit}} WHERE unit_type = " . UNIT_TECHNOLOGIES);
2111
2112
      $que_lines = array();
2113
      $user_query = upd_do_query("SELECT * FROM {{users}}");
2114
      upd_add_more_time(300);
2115
      $sn_group_tech = sn_get_groups('tech');
2116
      while($user_row = db_fetch($user_query)) {
2117
        foreach($sn_group_tech as $tech_id) {
2118
          if($tech_level = intval($user_row[get_unit_param($tech_id, P_NAME)])) {
2119
            $que_lines[] = "({$user_row['id']}," . LOC_USER . ",{$user_row['id']}," . UNIT_TECHNOLOGIES . ",{$tech_id},{$tech_level})";
2120
          }
2121
        }
2122
      }
2123
2124
      if(!empty($que_lines)) {
2125
        upd_do_query("INSERT INTO {{unit}} (unit_player_id, unit_location_type, unit_location_id, unit_type, unit_snid, unit_level) VALUES " . implode(',', $que_lines));
2126
      }
2127
2128
      upd_alter_table('users', array(
2129
        "DROP COLUMN `graviton_tech`",
2130
      ), $update_tables['users']['graviton_tech']);
2131
    }
2132
2133
    if(!$update_indexes['unit']['I_unit_record_search']) {
2134
      upd_alter_table('unit', array(
2135
        "ADD KEY `I_unit_record_search` (`unit_snid`,`unit_player_id`,`unit_level` DESC,`unit_id`)",
2136
      ), !$update_indexes['unit']['I_unit_record_search']);
2137
2138
      foreach(sn_get_groups(array('structures', 'fleet', 'defense')) as $unit_id) {
2139
        $planet_units[get_unit_param($unit_id, P_NAME)] = 1;
2140
      }
2141
      $drop_index = array();
2142
      $create_index = &$drop_index; // array();
2143
      foreach($planet_units as $unit_name => $unit_create) {
2144
        if($update_indexes['planets']['I_' . $unit_name]) {
2145
          $drop_index[] = "DROP KEY I_{$unit_name}";
2146
        }
2147
        if($update_indexes['planets']['i_' . $unit_name]) {
2148
          $drop_index[] = "DROP KEY i_{$unit_name}";
2149
        }
2150
2151
        if($unit_create) {
2152
          $create_index[] = "ADD KEY `I_{$unit_name}` (`id_owner`, {$unit_name} DESC)";
2153
        }
2154
      }
2155
      upd_alter_table('planets', $drop_index, true);
2156
    }
2157
2158
    upd_alter_table('users', array(
2159
      "ADD `user_time_utc_offset` INT(11) DEFAULT NULL COMMENT 'User time difference with server time' AFTER `user_time_diff`",
2160
    ), !$update_tables['users']['user_time_utc_offset']);
2161
2162
    if(!$update_foreigns['alliance']['FK_alliance_owner']) {
2163
      upd_do_query("UPDATE {{alliance}} SET ally_owner = NULL WHERE ally_owner NOT IN (SELECT id FROM {{users}})");
2164
2165
      upd_alter_table('alliance', array(
2166
        "ADD CONSTRAINT `FK_alliance_owner` FOREIGN KEY (`ally_owner`) REFERENCES `{{users}}` (`id`) ON DELETE SET NULL ON UPDATE CASCADE",
2167
      ), !$update_foreigns['alliance']['FK_alliance_owner']);
2168
2169
      upd_do_query("DELETE FROM {{alliance_negotiation}} WHERE alliance_negotiation_ally_id NOT IN (SELECT id FROM {{alliance}}) OR alliance_negotiation_contr_ally_id NOT IN (SELECT id FROM {{alliance}})");
2170
2171
      upd_do_query("DELETE FROM {{alliance_negotiation}} WHERE alliance_negotiation_ally_id = alliance_negotiation_contr_ally_id");
2172
      upd_do_query("DELETE FROM {{alliance_diplomacy}} WHERE alliance_diplomacy_ally_id = alliance_diplomacy_contr_ally_id");
2173
    }
2174
2175
    upd_alter_table('fleets', array(
2176
      'MODIFY COLUMN `fleet_owner` BIGINT(20) UNSIGNED DEFAULT NULL',
2177
      "ADD CONSTRAINT `FK_fleet_owner` FOREIGN KEY (`fleet_owner`) REFERENCES `{{users}}` (`id`) ON DELETE CASCADE ON UPDATE CASCADE",
2178
    ), strtoupper($update_tables['fleets']['fleet_owner']['Type']) != 'BIGINT(20) UNSIGNED');
2179
2180
    upd_check_key('chat_highlight_developer', '<span class="nick_developer">$1</span>', !classSupernova::$config->chat_highlight_developer);
2181
2182
    if(!$update_tables['player_name_history']) {
2183
      upd_check_key('game_user_changename_cost', 100000, !classSupernova::$config->game_user_changename_cost);
2184
      upd_check_key('game_user_changename', SERVER_PLAYER_NAME_CHANGE_PAY, classSupernova::$config->game_user_changename != SERVER_PLAYER_NAME_CHANGE_PAY);
2185
2186
      upd_alter_table('users', array(
2187
        "CHANGE COLUMN `username` `username` VARCHAR(32) NOT NULL DEFAULT '' COMMENT 'Player name'",
2188
      ));
2189
2190
      upd_create_table('player_name_history',
2191
        "(
2192
          `player_id` BIGINT(20) UNSIGNED NULL DEFAULT NULL COMMENT 'Player ID',
2193
          `player_name` VARCHAR(32) NOT NULL COMMENT 'Historical player name',
2194
          `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'When player changed name',
2195
2196
          PRIMARY KEY (`player_name`),
2197
          KEY `I_player_name_history_id_name` (`player_id`, `player_name`),
2198
2199
          CONSTRAINT `FK_player_name_history_id` FOREIGN KEY (`player_id`) REFERENCES `{{users}}` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
2200
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
2201
      );
2202
2203
      upd_do_query("REPLACE INTO {{player_name_history}} (`player_id`, `player_name`) SELECT `id`, `username` FROM {{users}} WHERE `user_as_ally` IS NULL;");
2204
    }
2205
2206
    upd_alter_table('planets', array(
2207
      "ADD `density` SMALLINT NOT NULL DEFAULT 5500 COMMENT 'Planet average density kg/m3'",
2208
      "ADD `density_index` TINYINT NOT NULL DEFAULT " . PLANET_DENSITY_STANDARD . " COMMENT 'Planet cached density index'",
2209
    ), !$update_tables['planets']['density_index']);
2210
2211
    if($update_tables['users']['player_artifact_list']) {
2212
      upd_alter_table('unit', "DROP KEY `unit_id`", $update_indexes['unit']['unit_id']);
2213
2214
      upd_alter_table('unit', "ADD KEY `I_unit_player_location_snid` (`unit_player_id`, `unit_location_type`, `unit_location_id`, `unit_snid`)", !$update_indexes['unit']['I_unit_player_location_snid']);
2215
      upd_alter_table('unit', "DROP KEY `I_unit_player_id_temporary`", $update_indexes['unit']['I_unit_player_id_temporary']);
2216
2217
      $sn_data_artifacts = sn_get_groups('artifacts');
2218
      $db_changeset = array();
2219
2220
      $query = upd_do_query("SELECT `id`, `player_artifact_list` FROM {{users}} WHERE `player_artifact_list` IS NOT NULL AND `player_artifact_list` != '' FOR UPDATE");
2221
      while($row = db_fetch($query)) {
2222
        $artifact_list = explode(';', $row['player_artifact_list']);
2223
        if(!$row['player_artifact_list'] || empty($artifact_list)) {
2224
          continue;
2225
        }
2226
        foreach($artifact_list as $key => &$value) {
2227
          $value = explode(',', $value);
2228
          if(!isset($value[1]) || $value[1] <= 0 || !isset($sn_data_artifacts[$value[0]])) {
2229
            unset($artifact_list[$key]);
2230
            continue;
2231
          }
2232
          $db_changeset['unit'][] = upd_db_unit_changeset_prepare($value[0], $value[1], $row);
2233
        }
2234
      }
2235
      upd_db_changeset_apply($db_changeset);
2236
2237
      upd_alter_table('users', "DROP COLUMN `player_artifact_list`", $update_tables['users']['player_artifact_list']);
2238
    }
2239
2240
    upd_alter_table('users', array(
2241
      "DROP COLUMN `spy_tech`",
2242
      "DROP COLUMN `computer_tech`",
2243
      "DROP COLUMN `military_tech`",
2244
      "DROP COLUMN `defence_tech`",
2245
      "DROP COLUMN `shield_tech`",
2246
      "DROP COLUMN `energy_tech`",
2247
      "DROP COLUMN `hyperspace_tech`",
2248
      "DROP COLUMN `combustion_tech`",
2249
      "DROP COLUMN `impulse_motor_tech`",
2250
      "DROP COLUMN `hyperspace_motor_tech`",
2251
      "DROP COLUMN `laser_tech`",
2252
      "DROP COLUMN `ionic_tech`",
2253
      "DROP COLUMN `buster_tech`",
2254
      "DROP COLUMN `intergalactic_tech`",
2255
      "DROP COLUMN `expedition_tech`",
2256
      "DROP COLUMN `colonisation_tech`",
2257
    ), $update_tables['users']['spy_tech']);
2258
2259
    upd_check_key('payment_currency_exchange_dm_', 2500, !classSupernova::$config->payment_currency_exchange_dm_ || classSupernova::$config->payment_currency_exchange_dm_ == 1000);
2260
    upd_check_key('payment_currency_exchange_eur', 0.09259259259259, !classSupernova::$config->payment_currency_exchange_eur);
2261
    upd_check_key('payment_currency_exchange_rub', 4.0, !classSupernova::$config->payment_currency_exchange_rub);
2262
    upd_check_key('payment_currency_exchange_usd', 0.125, !classSupernova::$config->payment_currency_exchange_usd);
2263
    upd_check_key('payment_currency_exchange_wme', 0.0952380952381, !classSupernova::$config->payment_currency_exchange_usd);
2264
    upd_check_key('payment_currency_exchange_wmr', 4.1, !classSupernova::$config->payment_currency_exchange_wmr);
2265
    upd_check_key('payment_currency_exchange_wmu', 1.05, !classSupernova::$config->payment_currency_exchange_wmu);
2266
    upd_check_key('payment_currency_exchange_wmz', 0.126582278481, !classSupernova::$config->payment_currency_exchange_wmz);
2267
2268
    upd_do_query('COMMIT;', true);
2269
    $new_version = 37;
2270
2271
}
2272