Ставим сервер Counter-Strike 1.6

Захотелось мне поднять игровой сервер Counter-Strike в локальной сети с ботами, так в процессе настройки этого самого сервера и появилась эта статья. Нам потребуется машина с установленной на ней фряхой, у меня FreeBSD 7.4, немного времени и прямые руки :). Подготавливаем платформу для сервера - включаем эмуляцию linux, для этого делаем следующее:
  1. # echo 'linux_load="YES"' >> /boot/loader.conf
  2. # kldload linux
  3.  
  4. # sysctl linux.compat.osrelease=2.6.16
  5. # echo 'linux.compat.osrelease=2.6.16' >> /etc/sysctl.conf
  6.  
  7. # echo 'linux_enable="YES"' >> /etc/rc.conf
  8. # /etc/rc.d/abi start
  9.  
  10. # cd /usr/ports/emulators/linux_base-f10
  11. # make install clean
  12.  
  13. # echo 'linproc /compat/linux/proc libprocfs rw 0 0' >> /etc/fstab
  14. # mount /compat/linux/proc
Системный параметр linux.compat.osrelease меняем, чтобы установить порт linux_base-f10 (на FreeBSD 8.0+ этого делать не требуется, там порт встает без проблем). Эта фича требуется для нормальной работы сервера контры. С портом linux_base-fc4 сервер не стал работать, выдав при этом такую ошибку:
  1. [S_API FAIL] SteamAPI_Init() failed; unable to update local steamclient. Continuing with current version anyway.
  2. [S_API FAIL] SteamAPI_Init() failed; unable to locate a running instance of Steam, or a local steamclient.dll.
  3. FATAL ERROR (shutting down): Unable to initialize Steam.
Далее нам нужно создать пользователя, под которым будет работать наш сервер. В принципе сервер можно запускать и от рута, но с точки зрения безопасности это очень плохо, к тому же серверу достаточно привилегий обычного пользователя.
  1. # mkdir /home/steam 
  2. # pw groupadd steam 
  3. # pw useradd steam -g steam -d /home/steam -s /bin/csh -c 'Conter-Strike 1.6 server' 
  4. # chown steam:steam /home/steam 
  5. # chmod 750 /home/steam 
Логинемся под новым юзером или можно сделать так:
  1. # su -l steam 
Качаем с сайта следующую тулзу и даем ей права на запуск:
  1. % wget http://steampowered.com/download/hldsupdatetool.bin 
  2. % chmod +x hldsupdatetool.bin 
Запускаем и соглашаемся с лицензионным соглашением. В результате у нас появится несколько файлов, один из которых будет называться steam, он то нам и нужен. Если у него нет прав на запуск, то даем их. Запускаем его с такими параметрами и ждем, когда закончится скачивание сервера:
  1. % mkdir /home/steam/cs 
  2. % ./steam -command update -game cstrike -dir /home/steam/cs 
  3. Checking bootstrapper version ...
  4. Updating Installation
  5. Checking/Installing 'Counter-Strike Base Content' version 35
  6. Checking/Installing 'Linux Server Engine' version 55
  7. Checking/Installing 'Half-Life Base Content' version 12
  8. HLDS installation up to date
Теперь нам нужно установить несколько дополнений к контре и написать под себя конфиг для сервера. Дополнения, которые нам понадобятся:
  • Metamod - менеджер плагинов, позволяет динамически загружать/выгружать DLL плагины для добавления новых возможностей в движок Half-Life
  • dproto - благодаря ему сервер будет принимать соединения по ротоколу версии 47 и 48
  • PodBot - собственно мод, который добавляет игроков в контру, управляемых компьютером
Скачиваем Metamod, распаковываем архив и правим liblist.gam, чтобы сервер подгружал библиотеку во время запуска:
  1. % pwd
  2. /home/steam/mods/metamod
  3. % tar -xvf metamod-1.19-linux.tar.gz
  4. % cd /home/steam/cs/cstrike
  5. % mkdir -p addons/metamod/dlls && cd addons/metamod/dlls
  6. % mv /home/steam/mods/metamod/metamod_i386.so ./
Теперь правим файл cstrike/liblist.gam, заменяем следующие строки:
  1. gamedll "dlls\mp.dll"
  2. gamedll_linux "dlls/cs_i386.so"
на
  1. gamedll "addons/metamod/dlls/metamod.dll"
  2. gamedll_linux "addons/metamod/dlls/metamod_i386.so"
Плагины описываются в файле plugins.ini, каждая строка в котором имеет следующий формат:
  1. <platform> <filepath> [<description>]
Сам файл должен находиться в cstrike/addons/metamod. Колонки должны разделяться пробелом либо табом.
  • Ключевое слово platform принимает два значения - "linux" или "win32"
  • filepath - путь до динамической библиотеки. Можно указывать как релятивный путь (началом считается директория игры - cstrike), так и абсолютный. В путях могут использоваться слеши только в unix-стиле, даже если сервер работает под windows.
  • description - это не обязательное поле, используется как внутреннее имя плагина, которое отображается в логах и в выводе сообщений на консоль. В этом поле допускается использовать знаки разделения. Двойные или одинарные кавычки не обязательны. Комментарии можно размещать только вначале строки, они могут начинаться с символов - "#" или "//". Пример конфига "cstrike/addons/metamod/plugins.ini":
    1. //linux    dlls/mybot.so
    2. # win32     dlls/mybot-old.dll         Mybot old
    3. win32       dlls/mybot.dll             Mybot current
    4. linux       /tmp/stub_mm_i386.so
    5. win32       /tmp/stub_mm_i386.dll
    6. linux       ../dlls/trace_mm_i386.so
    7. win32       ../dlls/trace_mm_i386.dll
    8. linux       dlls/admin_MM_i386.so
    9. win32       dlls/admin_MM_i386.dll
Учтите, что плагины загружаются в порядке, в котором они указаны в файле. Для некоторых плагинов порядок загрузки может оказаться важным. Файл перечитывается при каждом изменении уровня. Когда файл перечитывается, происходит следующее:
  • загружаются новые плагины, если такие были добавлены
  • выгружаются плагины, которые были удалены из файла. Это работает только для плагинов, которые загружены из ini файла
  • любой плагин перезагружается, если его местоположение на диске было изменено.
Теперь когда с Metamod разобрались, приступим к установке и настройке других плагинов. Скачиваем и устанавливаем dproto.
  1. % pwd
  2. /home/steam/mods/dproto
  3. % unrar e dproto_0_9_87.rar
  4. % cd /home/steam/cs/cstrike/addons
  5. % mkdir dproto && cd dproto
  6. % mv /home/steam/mods/dproto/bin/Linux/dproto_i386.so ./
  7. % cd /home/steam/cs/cstrike
  8. % mv /home/steam/mods/dproto/dproto.cfg ./
Кстати, все распакованные файлы имели права на запуск, я их убрал, потому что для этих файлов они совсем не нужны и для безопасности не хорошо. Так же для этого плагина необходим бинарник сервера собранный с набором инструкций i686 (файл hlds_i686), это важно когда будете запускать сервер. Добавим новый плагин в автозагрузку. Для этого редактируем файл cstrike/addons/metamod/plugins.ini:
  1. linux addons/dproto/dproto_i386.so
Ну вот добрались и до установки ботов. Скачиваем, устанавливаем, настраиваем:
  1. % pwd
  2. /home/steam/mods/podbot
  3. % tar -xvf podbot_full_V3B21.zip
  4. % cd /home/steam/cs/cstrike/addons
  5. % mv /home/steam/mods/podbot/podbot ./
  6. % cd podbot
  7. % find . -type f -exec chmod -x {} \;
После распаковки, файлы тоже имеют права на запуск, я убрал их. Правим конфиг ботов - podbot.cfg. У меня он получился такой:
  1. # Это конфигурационный файл для Pod-Bot (для HL Counter-Strike)
  2. #
  3. # Любая строка, начинающаяся с '#' считается комментарием
  4. #
  5. # Ни одна строка не должна превышать длину в 80 символов
  6. #
  7. # Далее перечислены допустимые команды в файле podbot.cfg:
  8. #
  9. # Все аргументы в квадратных скобках являются не обязательными,
  10. # если вы их не укажите, то будет подставлено случайное значение
  11. #
  12. # pb add [skill [personality [team [model [name]]]]] - добавляет бота:
  13. #      с уровнем мастерства (skill) из диапазона от 0 до 100
  14. #      тактикой (personality) 1 - номальная, 2- агрессивная, 3 - защитная
  15. #      командой (team) 1- террористы, 2 - спецназ, 5 - автовыбор
  16. #      модель (model), это тоже самое что, видит игрок на экране выбора
  17. #      модели
  18. #      имя (name) это конечно же имя бота, отображаемое в игре
  19. #      
  20. #      Если вы опустите аргументы, то будет создан бот со случайным
  21. #      уровнем мастерства (между pb_minbotskil и pb_maxbotskill),
  22. #      так же бот получит случайную модель и случайное имя,
  23. #      взятое из файла "Botnames.txt". Вы можете добавить свои
  24. #      имена для ботов в этот файл.
  25. #      ! Ни в коем случае не удаляйте файл BotChat.txt, он всегда используется !
  26.  
  27. # pb fillserver [skill [personality [team [model]]]] - автоматически
  28. # добавляет ботов на сервер, пока не будет исчерпан лимит
  29. # боты + игроки:
  30. # 1. pb_maxbots, если задана (значение должно быть отлично от 0)
  31. # 2. если предыдущее значение не задано или равно 0, то в роли
  32. #     ограничителя используется значение mp_maxplayers
  33.  
  34. # Этот параметр устанавливает директорию, из которой
  35. # загружаются (или сохраняются) вэйпоинты (относительно
  36. # директории POD-Bot). Не используйте в пути косую черту
  37. # и пробелы. Это не будет работать для первой созданной
  38. # вами игры (она стартует со значением wptdefault). Но когда
  39. # создадите во второй раз или загрузите новую карту, то
  40. # используется, указанная вами директория.
  41. # По умолчанию, занчение этой переменной - wptdefault
  42. pb_wptfolder wptdefault
  43.  
  44. # Установите значение в 1, чтобы отображалось приветствие
  45. # при старте игры
  46. # По умолчанию: 0
  47. pb_welcomemsgs 0
  48.  
  49. # Используйте этот параметр, чтобы вкл/выкл Speech Synthesis.
  50. # По умолчанию: 0 (выключено).
  51. pb_usespeech 0
  52.  
  53. # Следующие два параметра устанавливают минимальное и
  54. # максимальное количество ботов на сервере. Эти значения
  55. # работают вместе с pb fillserver и pb removebots. Актуальное
  56. # количество ботов находится в указанном диапазоне, с помощью
  57. # этих параметров.
  58. # Ботов можно будет добавлять, пока общее количество
  59. # игроков (ботов и людей) не исчерпает значение pb_maxbots.
  60. # Каждый раз, при подключении нового игрока к серверу,
  61. # будет удаляться бот с сервера до тех пор, пока количество
  62. # ботов не достигнет pb_minbots. После того, как игроки
  63. # отключатся от сервера, будут автоматически добавляться боты,
  64. # пока общее число игроков на сервере (боты + люди) снова 
  65. # не исчерпает значение pb_maxbots. Значение pb_maxbots должно
  66. # быть хотя бы на 1 меньше, чем значение maxplayers (иначе никто
  67. # не сможет подключиться к серверу). Вы можете отключить эту
  68. # функцию установив значение pb_maxbots в 0. Так же эта функция
  69. # не будет работать в случае, если значение переменной
  70. # pb_bot_quota_match больше 0 (в этом случае общее количество ботов
  71. # будет вычисляться выражением люди * pb_bot_quota_match - конечно
  72. # с учетом лимитов)
  73. # По умолчанию:
  74. # pb_bot_quota_match = 0.
  75. # pb_minbots = 0,  pb_maxbots = 16.
  76. pb_minbots 0
  77. pb_maxbots 16
  78. pb_bot_quota_match 0
  79.  
  80. # С помощью следующей опции можно указать команду, в которую
  81. # будут добавляться боты. Полезна, если вы хотите иметь одну
  82. # команду, состоящую только из ботов.
  83. # Возможные значения: "ANY", "T", "CT". По умолчанию: "ANY"
  84. pb_bot_join_team "ANY"
  85.  
  86. # С помощью следующей опции можно указать модель, которую
  87. # боты "возьмут" при добавлении. Полезна, если вы хотите, чтобы
  88. # в одной команде имели одинакоые модели.
  89. # Возможные значения: 1,2,3,4 - модели, 5 - по умолчанию, автовыбор
  90. pb_skin 5
  91.  
  92. # Следующие настройки определяют частоту (в секундах) обновления
  93. # некоторых событий в алгоритме работы ботов. Если у вас медленный
  94. # комп, то вы можете увеличить значения для повышения
  95. # производительности
  96. # NOTE: This seriously affects the Bots Perception. If you have a
  97. # fast computer you might try lowering them to get even better
  98. # playing results.
  99. # По умолчанию:
  100. # pb_timer_sound = 0.5
  101. # pb_timer_pickup = 0.3
  102. # pb_timer_grenade = 0.5.
  103. pb_timer_sound 0.5
  104. pb_timer_pickup 0.3
  105. pb_timer_grenade 0.5
  106.  
  107. # Установите этот параметр в 0, чтобы запретить ботам рисовать логотип
  108. pb_spray 1
  109.  
  110. # Установите этот параметр в 1, чтобы боты могли ранить своих
  111. pb_ffa 0
  112.  
  113. # Через этот параметр можно разрешить ботам стрелять через стены
  114. # (так же эото параметр задается в файле "botskill.cfg")
  115. # По умолчанию: 1
  116. pb_shootthruwalls 1
  117.  
  118. # passwordkey - этот параметр нужно задать, чтобы получить доступ к 
  119. # меню ботов. Как в примере ниже, вы должны задать свой
  120. # собственный пароль, вместо стандартного _pbadminpw:
  121. # setinfo _pbadminpw "your_password"
  122. # Вышеуказанная строка должна использоваться в autoexec.cfg 
  123. # на вашем компе, с которого подключаетесь или на сервере:
  124. # в обоих случаях этот файл должен находиться в корне директорий
  125. # cstrike/czero.
  126. pb_passwordkey "_pbadminpw"
  127.  
  128. # Через эту переменную указывается пароль для доступа к меню
  129. # управления ботами. 
  130. pb_password "your_password"
  131.  
  132. # Здесь указывается максимальное количество ботов, которые будут
  133. # следовать за игроков при подаче команды "Follow Me" через радио.
  134. # По умолчанию: 5
  135. pb_numfollowuser 5
  136.  
  137. # Минимально возможный уровень мастерства при добавления бота
  138. # без указания этого параметра.
  139. # По умолчанию: 95
  140. pb_minbotskill 95
  141.  
  142. # Максимально возможный уровень мастерства при добавления бота
  143. # без указания этого параметра.
  144. # По умолчанию: 100
  145. pb_maxbotskill 100
  146.  
  147. # Здесь указывается максимально возможное количество оружия,
  148. # которое бот может поднять за раунд.
  149. # По умолчанию: 10.
  150. pb_maxweaponpickup 10
  151.  
  152. # Задержка, по истечению которой боты начнут добавляться на новую
  153. # карту.
  154. # По умолчанию: 10.
  155. pb_mapstartbotdelay 10
  156.  
  157. # Установите этот параметр в 1, чтобы автоматически убивать ботов,
  158. # если не осталось ниодного живого человека.
  159. # По умолчанию: 0.
  160. pb_autokill 0
  161.  
  162. # Задержка, по истечению которой боты  будут автоматом прибиты,
  163. # если включена предыдущая опция.
  164. # По умолчанию: 45.
  165. pb_autokilldelay 45
  166.  
  167. # Укажите здесь максимально количество времени  секундах, которое
  168. # бот может находиться на одном месте.
  169. # По умолчанию: 30.
  170. pb_maxcamptime 30
  171.  
  172. # Включить/Выключить режим Джэйсона. Это значит, что боты не будут
  173. # покупать оружие и будут драться только на ножах.
  174. # По умолчанию: 0.
  175. pb_jasonmode 0
  176.  
  177. # Здесь настраивается формат имени бота:
  178. # 0 - не показывать уровень мастерства и префикс [POD] в имени бота;
  179. # 1 - показывать уровень мастерсва и префикс [POD] в имени бота;
  180. # 2 - показывать только префикс [POD] в имени бота;
  181. # 3 - показывать только уровень мастерства в имени бота.;
  182. # Префикс бота с агрессивной тактикой будет выглядеть так - [P*D],
  183. # с нормальной - [POD], а с защитной - [P0D] (просто ноль, вместо символа O).
  184. # По умолчанию: 1.
  185. pb_detailnames 1
  186.  
  187. # С помощью следующего параметра можно задать фактор опасности, учитывая
  188. # который боты будут выбирать свой маршрут (проще говоря - они будут учитывать
  189. # места, в которых они были убиты в предыдущем раунде). Высокие значения
  190. # параметра будут значить, что боты будут лучше выбирать свой путь следования
  191. # к какому-либо месту на карте (ну типа будут выбирать более безопасные пути).
  192. # Учтите только, что из-за высоких значений параметра нагрузка на проц возрастет.
  193. # По умолчанию: 2000
  194. pb_dangerfactor 2000
  195.  
  196. # Разрешить ботам чатиться.
  197. # По умолчанию 1.
  198. pb_chat 1
  199.  
  200. # Установите этот параметр в 1, чтобы в таблице результатов в колонке ping 
  201. # отображалась строка "BOT". Если укажите 2, то будет отображен случайный
  202. # пинг. Если 0, то ничего не будет отображено.
  203. # По умолчанию: 2
  204. pb_latencybot 2
  205.  
  206. # Включите, чтобы боты использовали радиокоманды.
  207. # По умолчанию: 1
  208. pb_radio 1
  209.  
  210. # pb_aim_type 1-4 (по умолчанию 4)
  211. # 1 = inhuman turns
  212. # 2 = constant angle velocity
  213. # 3 = botaim1
  214. # 4 = botaim2
  215. pb_aim_type 4
  216.  
  217. # VERTICAL (up/down) spring stiffness of the aiming system. This value affects
  218. # the quickness of the crosshair movement, as well as the frequency of
  219. # the resulting oscillations. (default: 13.0)
  220. pb_aim_spring_stiffness_x 13.0
  221.  
  222. # HORIZONTAL (left/right) spring stiffness of the aiming system. This value
  223. # affects the quickness of the crosshair movement, as well as the frequency of
  224. # the resulting oscillations. (default: 13.0)
  225. pb_aim_spring_stiffness_y       13.0
  226.  
  227. # VERTICAL (up/down) damping coefficient of the aiming system. This value also
  228. # affects the quickness of the crosshair movement, and the amplitude of
  229. # the resulting oscillations. (default: 0.22)
  230. pb_aim_damper_coefficient_x 0.22
  231.  
  232. # HORIZONTAL (left/right) damping coefficient of the aiming system. This value
  233. # also affects the quickness of the crosshair movement, and the amplitude of
  234. # the resulting oscillations. (default: 0.22)
  235. pb_aim_damper_coefficient_y 0.22
  236.  
  237. # VERTICAL (up/down) error margin of the aiming system. This value affects how
  238. # far (in game length units) the bot will allow its crosshair to derivate from
  239. # the ideal direction when not targeting any player in particular.
  240. # (default: 2.0)
  241. pb_aim_deviation_x 2.0
  242.  
  243. # HORIZONTAL (left/right) error margin of the aiming system. This value affects
  244. # how far (in game length units) the bot will allow its crosshair to derivate
  245. # from the ideal direction when not targeting any player in particular.
  246. # (default: 1.0)
  247. pb_aim_deviation_y 1.0
  248.  
  249. # Perpendicular influence of the vertical axis on a HORIZONTAL movement. This
  250. # value affects how much (in fraction of 1) the bot will be disturbed when
  251. # moving its crosshair on an axis by the inherent movement on the other axis.
  252. # (default: 0.25)
  253. pb_aim_influence_x_on_y 0.25
  254.  
  255. # Perpendicular influence of the horizontal axis on a VERTICAL movement. This
  256. # value affects how much (in fraction of 1) the bot will be disturbed when
  257. # moving its crosshair on an axis by the inherent movement on the other axis.
  258. # (default: 0.17)
  259. pb_aim_influence_y_on_x 0.17
  260.  
  261. # Maximal value in seconds after which the aiming system will re-evaluate its
  262. # ideal direction. This affects how often a bot will attempt to correct an
  263. # imprecise crosshair placement by moving the crosshair inside the error
  264. # margin bounds defined by the botaim_deviation CVARs. (default: 1.2)
  265. pb_aim_offset_delay 1.2
  266.  
  267. # Fraction of the full speed the aiming system will adopt as speed when aiming
  268. # at nothing in particular. This affects how slow the bot will move its
  269. # crosshair when targeting nobody, relatively to its full speed capacity.
  270. # (default: 0.5)
  271. pb_aim_notarget_slowdown_ratio 0.5
  272.  
  273. # Fraction of the estimated target's velocity the aiming system will rely on
  274. # when aiming at a moving target. This affects how well the bot will be able
  275. # to track moving targets on the fly, and whether it will have a tendancy
  276. # to aim ahead of it or behind it. (default: 2.2)
  277. pb_aim_target_anticipation_ratio 2.2
  278.  
  279. # Здесь можно задать, какое оружие будет запрещено для покупки ботам.
  280. # В списке указаны номера битов, которые отвечают за нужное ограничение.
  281. # Пистолеты
  282. # 0 - KNIFE
  283. # 1 - USP
  284. # 2 - GLOCK18
  285. # 3 - DEAGLE
  286. # 4 - P228
  287. # 5 - ELITE
  288. # 6 - FIVESEVEN
  289. # Дробовики
  290. # 7 - M3
  291. # 8 - XM1014
  292. # SMG
  293. # 9 - MP5NAVY
  294. # 10 - TMP
  295. # 11 - P90
  296. # 12 - MAC10
  297. # 13 - UMP45
  298. # Винтовки
  299. # 14 - AK47
  300. # 15 - SG552
  301. # 16 - M4A1
  302. # 17 - GALIL
  303. # 18 - FAMAS
  304. # 19 - AUG
  305. # 20 - SCOUT
  306. # 21 - AWP
  307. # 22 - G3SG1
  308. # 23 - SG550
  309. # Пулемет
  310. # 24 - M249
  311. # Щит
  312. # 25 - SHIELD
  313. pb_restrweapons "00000000000000000000000000"
  314.  
  315. # 0 - vest
  316. # 1 - vest and helmet
  317. # 2 - flashbang
  318. # 3 - he grenade
  319. # 4 - smoke grenade
  320. # 5 - defuser
  321. # 6 - night vision googles
  322. # 7 - primary ammo
  323. # 8 - secondary ammo
  324. pb_restrequipammo "000000000"
  325.  
  326. # Следующие строки автоматически добавляют ботов на сервер,
  327. # при создании новой игры.
  328. pb add 100
  329. pb add 100
  330. pb add 100
  331. pb add 100
  332. pb add 100
  333. pb add 100
  334. pb add 100
  335.  
  336. # Как альтернативный вариант - можно раскомментировать этот параметр, 
  337. # чтобы автоматом заполнить все доступные места на сервере.
  338. # pb fillserver 100
  339.  
  340. # Следующий параметр задает клавишу, при нажатии которой будет
  341. # отображено меню управления ботами
  342. bind "=" "pb menu"
Добавим новый плагин в автозагрузку. Для этого редактируем файл cstrike/addons/metamod/plugins.ini:
  1. linux addons/podbot/podbot_mm_i386.so
На этом установка и настройка плагинов закончена, осталось только рихтануть конфиг сервера под себя и можно пробовать запускать сервер. Все параметры при запуске сервера будут браться из файла server.cfg. У меня этот файл выглядит так:
  1. // Используйте этот файл, чтобы настроить ваш сервер.
  2. // Этот файл читается при запуске сервера.
  3.  
  4. // отключить автоприцеливание
  5. sv_aim 0
  6.  
  7. // запретить клиентам ставить игру на паузу
  8. pausable 0
  9.  
  10. // Имя сервера
  11. hostname "Counter-Strike 1.6 Server"
  12.  
  13. // максимальная скорость передвижения игроков
  14. sv_maxspeed 320
  15.  
  16. // время игры на одной карте
  17. mp_timelimit 20
  18. mp_freezytime 1
  19.  
  20. sv_cheats 0
  21.  
  22. // максимальное количество игроков
  23. maxplayers 32
  24. cl_allowdownload "1" // разрешить скачивать с сервера необходимые для игры файлы
  25. // сервер для локальной сети
  26. sv_lan 1
  27. insecure
  28. nomaster
  29.  
  30. // load ban files
  31. exec listip.cfg
  32. exec banned.cfg
  33.  
  34. // первая карта
  35. map de_aztec
Ну вот настал тот момент, когда можно пробовать запустить сервер. Для удобства остановки/запуска сервера я настрогал следующий скрипт:
  1. #!/bin/sh
  2.  
  3. HL_DIR="/home/steam/cs"
  4. HL_RUN="hlds_run"
  5. HL_BIN="hlds_i686"
  6.  
  7. case "$1" in
  8. start)
  9.   if [ -f "hlds.pid" ]; then
  10.     echo "Counter-Strike already running"
  11.     exit 1
  12.   fi
  13.   $HL_DIR/$HL_RUN -binary "$HL_DIR/$HL_BIN" -game cstrike -pidfile hlds.pid -norestart > /dev/null 2>&1 &
  14.   sleep 3
  15.   if [ -f "hlds.pid" ]; then
  16.     echo "Server started..."
  17.   fi
  18.   ;;
  19. stop)
  20.   if [ ! -f "hlds.pid" ]; then
  21.     echo "Counter-Strike not running"
  22.     exit 1
  23.   fi
  24.   kill `cat hlds.pid`
  25.   rm -f hlds.pid
  26.   ;;
  27. restart)
  28.   if [ -f "hlds.pid" ]; then
  29.     kill `cat hlds.pid`
  30.     rm -f hlds.pid
  31.     echo "Server stopped..."
  32.   else
  33.     echo "Server not running..."
  34.   fi
  35.   sleep 3
  36.   $HL_DIR/$HL_RUN -binary "$HL_DIR/$HL_BIN" -game cstrike -pidfile hlds.pid -norestart > /dev/null 2>&1 &
  37.   sleep 3
  38.   if [ -f "hlds.pid" ]; then
  39.     echo "Server started..."
  40.   else
  41.     echo "Server error..."
  42.   fi
  43.   ;;
  44. *)
  45.   echo "hlds {start|stop|restart}"
  46.   ;;
  47. esac
  48.  
  49. exit 0
Запускаем серер и проверяем запустился ли он:
  1. %./hlds.sh start
  2. Server started...
  3. % sockstat -4 -l | grep hlds
  4. steam    hlds_i686  39502 4  udp4   *:27015               *:*
  5. steam    hlds_i686  39502 10 udp4   192.168.7.250:26900   *:*
  6. steam    hlds_i686  39497 4  udp4   *:27015               *:*
  7. steam    hlds_i686  39497 10 udp4   192.168.7.250:26900   *:*
Ну вот контра работает, теперь можно и поиграть... )

Добавить комментарий

Filtered text

CAPTCHA
Этот вопрос предназначен для предотвращения автоматизированной обработки форм.
Fill in the blank.