start.php 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <?php
  2. if(!DEFINED('EGP'))
  3. exit(header('Refresh: 0; URL=http://'.$_SERVER['SERVER_NAME'].'/404'));
  4. $sql->query('SELECT `uid`, `slots`, `map_start`, `vac`, `fastdl`, `autorestart`, `tickrate`, `core_fix`, `pingboost` FROM `control_servers` WHERE `id`="'.$sid.'" LIMIT 1');
  5. $server = array_merge($server, $sql->get());
  6. $sql->query('SELECT `address`, `passwd` FROM `control` WHERE `id`="'.$id.'" LIMIT 1');
  7. $unit = $sql->get();
  8. include(LIB.'games/games.php');
  9. // Вывод списка карт
  10. if(isset($url['maps']))
  11. games::maplist($sid, $unit, '/servers/'.$server['uid'].'/csgo/maps', $server['map_start'], false);
  12. // Вывод списка потоков
  13. if(isset($url['core']))
  14. ctrl::cpulist($unit, $server['core_fix']);
  15. // Сохранение
  16. if($go AND $url['save'])
  17. {
  18. $value = isset($url['value']) ? sys::int($url['value']) : sys::outjs(array('s' => 'ok'), $nmch);
  19. switch($url['save'])
  20. {
  21. case 'map':
  22. $map = isset($url['value']) ? trim($url['value']) : sys::outjs(array('s' => 'ok'), $nmch);
  23. if($map != $server['map_start'])
  24. games::maplist($sid, $unit, '/servers/'.$server['uid'].'/csgo/maps', $map, true, $nmch, true);
  25. $mcache->delete('ctrl_server_settings_'.$sid);
  26. sys::outjs(array('s' => 'ok'), $nmch);
  27. case 'address':
  28. if($server['status'] != 'off')
  29. sys::outjs(array('e' => 'Необходимо выключить игровой сервер'), $nmch);
  30. $address = isset($_POST['address']) ? trim($_POST['address']) : $server['address'];
  31. if(sys::valid($address, 'other', $aValid['address']))
  32. sys::outjs(array('e' => 'Адрес игрового сервера имеет неверный формат'), $nmch);
  33. $sql->query('SELECT `id` FROM `control_servers` WHERE `unit`="'.$id.'" AND `address`="'.$address.'" LIMIT 1');
  34. if($sql->num())
  35. sys::outjs(array('e' => 'Данный адрес занят другим сервером'), $nmch);
  36. if($address != $server['address'])
  37. $sql->query('UPDATE `control_servers` set `address`="'.$address.'" WHERE `id`="'.$sid.'" LIMIT 1');
  38. $mcache->delete('ctrl_server_settings_'.$sid);
  39. sys::outjs(array('s' => 'ok'), $nmch);
  40. case 'mod':
  41. if(in_array($value, array(1, 2, 3, 4, 5)))
  42. $sql->query('UPDATE `control_servers` set `pingboost`="'.$value.'" WHERE `id`="'.$sid.'" LIMIT 1');
  43. $mcache->delete('ctrl_server_settings_'.$sid);
  44. sys::outjs(array('s' => 'ok'), $nmch);
  45. case 'vac':
  46. if($value != $server['vac'])
  47. $sql->query('UPDATE `control_servers` set `vac`="'.$value.'" WHERE `id`="'.$sid.'" LIMIT 1');
  48. $mcache->delete('ctrl_server_settings_'.$sid);
  49. sys::outjs(array('s' => 'ok'), $nmch);
  50. case 'core_fix':
  51. $n = ctrl::cpulist($unit, $server['core_fix'], true);
  52. if($value > $n)
  53. sys::outjs(array('e' => 'На физическом сервере нет такого ядра/потока'), $nmch);
  54. if($value < 0)
  55. $value = 0;
  56. if($value != $server['core_fix'])
  57. $sql->query('UPDATE `control_servers` set `core_fix`="'.$value.'" WHERE `id`="'.$sid.'" LIMIT 1');
  58. $mcache->delete('ctrl_server_settings_'.$sid);
  59. sys::outjs(array('s' => 'ok'), $nmch);
  60. case 'slots':
  61. $slots = $value > 64 ? 64 : $value;
  62. $slots = $value < 2 ? 2 : $slots;
  63. if($slots != $server['slots'])
  64. $sql->query('UPDATE `control_servers` set `slots`="'.$slots.'" WHERE `id`="'.$sid.'" LIMIT 1');
  65. $mcache->delete('ctrl_server_settings_'.$sid);
  66. sys::outjs(array('s' => 'ok'), $nmch);
  67. case 'autorestart':
  68. if($value != $server['autorestart'])
  69. $sql->query('UPDATE `control_servers` set `autorestart`="'.$value.'" WHERE `id`="'.$sid.'" LIMIT 1');
  70. $mcache->delete('ctrl_server_settings_'.$sid);
  71. sys::outjs(array('s' => 'ok'), $nmch);
  72. case 'tickrate':
  73. if(in_array($value, array('64', '128')))
  74. $sql->query('UPDATE `control_servers` set `tickrate`="'.$value.'" WHERE `id`="'.$sid.'" LIMIT 1');
  75. $mcache->delete('ctrl_server_settings_'.$sid);
  76. sys::outjs(array('s' => 'ok'), $nmch);
  77. case 'fastdl':
  78. include(LIB.'ssh.php');
  79. if(!$ssh->auth($unit['passwd'], $unit['address']))
  80. sys::outjs(array('e' => sys::text('error', 'ssh')), $nmch);
  81. if($value)
  82. {
  83. $fastdl = 'sv_downloadurl "http://'.$unit['address'].':8080/fast_'.$server['uid'].'"'.PHP_EOL
  84. .'sv_consistency 1'.PHP_EOL
  85. .'sv_allowupload 1'.PHP_EOL
  86. .'sv_allowdownload 1';
  87. // Временый файл
  88. $temp = sys::temp($fastdl);
  89. $ssh->setfile($temp, '/servers/'.$server['uid'].'/csgo/cfg/fastdl.cfg', 0644);
  90. $ssh->set('chown server'.$server['uid'].':servers /servers/'.$server['uid'].'/csgo/cfg/fastdl.cfg;'
  91. .'ln -s /servers/'.$server['uid'].'/csgo /var/nginx/fast_'.$server['uid'].';'
  92. .'sed -i '."'s/exec fastdl.cfg//g'".' /servers/'.$server['uid'].'/csgo/cfg/server.cfg;'
  93. .'echo "exec fastdl.cfg" >> /servers/'.$server['uid'].'/csgo/cfg/server.cfg');
  94. unlink($temp);
  95. }else
  96. $ssh->set('sed -i '."'s/exec fastdl.cfg//g'".' /servers/'.$server['uid'].'/csgo/cfg/server.cfg;'
  97. .'rm /servers/'.$server['uid'].'/csgo/cfg/fastdl.cfg; rm /var/nginx/fast_'.$server['uid']);
  98. $sql->query('UPDATE `control_servers` set `fastdl`="'.$value.'" WHERE `id`="'.$sid.'" LIMIT 1');
  99. $mcache->delete('ctrl_server_settings_'.$sid);
  100. sys::outjs(array('s' => 'ok'), $nmch);
  101. }
  102. }
  103. // Генерация списка слот
  104. $slots = '';
  105. for($slot = 2; $slot <= 64; $slot+=1)
  106. $slots .= '<option value="'.$slot.'">'.$slot.' шт.</option>';
  107. // Античит VAC
  108. $vac = $server['vac'] ? '<option value="1">Включен</option><option value="0">Выключен</option>' : '<option value="0">Выключен</option><option value="1">Включен</option>';
  109. // Быстрая скачака
  110. $fastdl = $server['fastdl'] ? '<option value="1">Включен</option><option value="0">Выключен</option>' : '<option value="0">Выключен</option><option value="1">Включен</option>';
  111. // Авторестарт при зависании
  112. $autorestart = $server['autorestart'] ? '<option value="1">Включен</option><option value="0">Выключен</option>' : '<option value="0">Выключен</option><option value="1">Включен</option>';
  113. $tickrate = '';
  114. foreach(array('64', '128') as $value)
  115. $tickrate .= '<option value="'.$value.'">'.$value.' TickRate</option>';
  116. $core_fix = $server['core_fix'] ? '<option value="1">1 ядро/поток</option>' : '<option value="0">Автоматическое определение</option>';
  117. // Игровой режим
  118. $mods = '<option value="1">Классический обычный</option>'
  119. .'<option value="2">Классический соревновательный</option>'
  120. .'<option value="3">Гонка вооружений</option>'
  121. .'<option value="4">Уничтожение объекта</option>'
  122. .'<option value="5">Бой насмерть</option>';
  123. if(!$server['pingboost'])
  124. $server['pingboost'] = 2;
  125. $mod = str_replace('value="'.$server['pingboost'], 'value="'.$server['pingboost'].'" selected="select', $mods);
  126. $html->get('start', 'sections/control/servers/'.$server['game'].'/settings');
  127. $html->set('id', $id);
  128. $html->set('server', $sid);
  129. $html->set('map', $server['map_start']);
  130. $html->set('address', $server['address']);
  131. $html->set('vac', $vac);
  132. $html->set('fastdl', $fastdl);
  133. $html->set('autorestart', $autorestart);
  134. $html->set('core_fix', $core_fix);
  135. $html->set('mod', $mod);
  136. $html->set('slots', str_replace('"'.$server['slots'].'"', '"'.$server['slots'].'" selected="select"', $slots));
  137. $html->set('tickrate', str_replace($server['tickrate'].'"', $server['tickrate'].'" selected="select"', $tickrate));
  138. $html->pack('start');
  139. ?>