Ставим сервер 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. log on                   // вести лог сервера
  5. sv_logsdir "logs"        // Директория относительно директории "cstrike", в которой будут сохраняться лог файлы
  6. sv_logbans 1             // записывать в лог баны
  7. sv_logecho 1             // показывать информацию из логов сервера в консоль(сервера)
  8. sv_logfile 1             // записывать логи сервера в файлы
  9. sv_log_onefile 0         // ... в один файл
  10. mp_logmessages 1         // писать в лог чат игроков для последующих разборок
  11. mp_logdetail 3           // записывать в лог повреждения от: 0 - выключено; 1 - противников; 2 - своих; 3 - и от противников и от своих.
  12. writeid                  // записываем SteamID игроков
  13. writeip                  // записываем IP игроков
  14.  
  15. // Имя сервера
  16. hostname "Counter-Strike 1.6 Server"
  17. maxplayers 32
  18. mapcyclefile "mapcycle.txt"     // Файл со списком карт для автоматической смены карты по окончанию mp_timelimit или кол-ва побед/раундов.
  19. motdfile "motd.txt"             // имя файла, отображающее текст в окне перед тем, как выбрать команду
  20. hpk_maxsize 16                  // Максимальный размер файла custom.hpk (максимальный размер суммы всех игровых логотипов на сервере, в мегабайтах)
  21.  
  22. // команды управления поведением игрока на карте
  23. mp_allowNPCs 1        // разрешить NPC на сервере
  24. mp_allowspectators 1  // разрешить игрокам после смерти наблюдать за чужими игроками
  25. mp_autocrosshair 0    // разрешить автоприцеливание
  26. mp_autokick 0         // разрешить автокик за убийство игроков своей команды?
  27. mp_autoteambalance 1  // разрешить автоматическую балансировку команд
  28. mp_buytime 0.5        // время покупки в минутах
  29. mp_c4timer 35         // время таймера бомбы
  30. mp_chattime 10        // время, в течении которого игроки смогут разговаривать между собой после окончания текущей карты
  31. mp_decals 200         // Колличество разрешённых декалей (спреи, пятна крови, пулевые отверстия)
  32. mp_fadetoblack 0      // после смерти экран становится чёрным, не давая игроку смотреть за другими игроками в режиме спектатора
  33. mp_falldamage 1       // урон от падения
  34. mp_flashlight 1       // разрешить фонарик
  35. mp_forcecamera 1      // разрешить переключения камер в режиме спектатора
  36. mp_forcechasecam 1    // после смерти игрок может следить только за своей командой
  37. mp_fraglimit 0        // максимальное колличество фрагов, при достижении которого определённым игроком карта сменится на следующую
  38. mp_freezetime 2       // начальный отсчёт времени в начале каждого раунда(для покупки), в секундах
  39. mp_footsteps 1        // слышимость звуков шагов
  40. mp_friendlyfire 0     // возможность атаковать своих
  41. mp_hostagepenalty 0   // кикает террориста при убийстве заданного лимита заложников
  42. mp_limitteams 1       // максимальное количество превышения игроков одной команды над другой (от 1 и до бесконечности )
  43. mp_mapvoteratio 0.51  // для смены карты нужно 51% голосов
  44. mp_maxrounds 0        // максимальное количество раундов, при достижении которого игра на карте будет считаться законченной
  45. mp_playerid 1         // контролирует информацию которую игрок видет на панели статуса: 0 все имена; 1 только имена игроков своей команды; 2 без имён
  46. mp_spawnprotectiontime 10 // кикает игроков которые убивают членов своей команды в течении # секунд после перезапуска раунда
  47. mp_roundtime 3        // длина раунда в минутах
  48. mp_startmoney 800     // колличество начальных денег у игроков
  49. mp_timelimit 20       // ограничение по времени на карту, в минутах
  50. mp_tkpunish 0         // в следующем раунде убить того, кто убил игрока своей команды
  51. mp_winlimit 32         // количество выигрышей одной команды при достижении которого игра на карте считается законченной
  52.  
  53. // ================================================================
  54. // Server config
  55. // ================================================================
  56. sv_aim 0              // отключить автоприцеливание
  57. sv_airaccelerate 10   // определяет ускорение игрока, когда он находится в воздухе(например падает)
  58. sv_allowdownload 1    // разрешить загрузку с сервера(например карт)
  59. sv_allowupload 1      // разрешить закачку файлов (например decals, спрей-логи, карты) на сервер
  60. sv_cheats 0           // разрешить игровые читы на сервере (пример: noclip)
  61. sv_consistency 1      // предписывает ли сервер последовательность файла для критических файлов
  62. sv_contact "admin@info-x.org" // e-mail администратора сервера
  63. sv_enableoldqueries 0 // разрешить поддержку старого стиля (Half-life 1) серверных запросов
  64. sv_footsteps 1        // использовать звук шагов при передвижении игрока
  65. sv_friction 4         // коэффициент трения в игре
  66. sv_gravity 800        // гравитация в игре
  67. sv_language 0         // Устанавливает язык
  68. sv_maxspectators 8    // Максимальное количество наблюдателей
  69. sv_maxspeed 320       // максимальная скорость игрока
  70. sv_minupdaterate 10   // минимальное колличество обновлений(колличество пакетов) которое разрешено на сервере
  71. sv_pausable 0         // разрешить ставить паузу во время игры
  72. //sv_password 0         // Пароль для входа на сервер
  73. sv_rcon_banpenalty 15 // колличество минут на которое банится игрок пытавшийся подобрать rcon-пароль к серверу
  74. sv_rcon_maxfailures 5 // максимальное колличество попыток при наборе rcon-пароля, после истечения которых игрок будет забанен
  75. sv_rcon_minfailures 5 // колличество попыток при наборе rcon-пароля во время заданное sv_rcon_minfailuretime, после истечения которых игрок будет забанен
  76. sv_rcon_minfailuretime 30 // колличество секунд для определения неверной rcon-аутенфикации
  77. sv_specaccelerate 5   // ускорение при передвижения в режиме spectator
  78. sv_specnoclip 1       // игрок в режиме spectator может пролетать через стены и объекты
  79. sv_specspeed 3        // скорость передвижения в режиме spectator
  80. sv_spectalk 1         // участие спектаторов в общем чате
  81. sv_stats 1            // собирать статистику использования процессора
  82. sv_stepsize 18        // длинна шага в юнитах
  83. sv_stopspeed 75       // минимальная скорость остановки на поверхности
  84. sv_timeout 30         // если сервер не получает отклика от клиента в течении # секунд, клиент отключается от сервера
  85.  
  86. // Голосовые настройки
  87. sv_voicecodec "voice_speex" // Кодек для общения через микрофон
  88. sv_voiceenable 1            // Разрешить использование микрофона (1/0=Вкл/Выкл).
  89. sv_voicequality 5           // качество голоса, от 1 до 5, чем больше, тем лучше, по умолчанию 3
  90. sv_alltalk 0          // разрешить всем слышать переговоры друг друга по микрофону, вне зависимости от команды (даже мертвые)
  91.  
  92.  
  93. // =======================================================================
  94. // сервер для локальной сети
  95. sv_lan 1
  96. insecure
  97. nomaster
  98.  
  99. // load ban files
  100. exec listip.cfg
  101. exec banned.cfg
  102.  
  103. // первая карта
  104. map de_aztec
Ну вот настал тот момент, когда можно пробовать запустить сервер. Для удобства остановки/запуска сервера я настрогал следующий скрипт:
  1. #!/bin/sh
  2.  
  3. HL_DIR="/home/steam/cs16"
  4. HL_RUN="hlds_run"
  5. HL_BIN="hlds_i686"
  6. HL_PID="$HL_DIR/hlds.pid"
  7. HL_LOG="$HL_DIR/hlds_console.log"
  8.  
  9. #PATH="$PATH:$HL_DIR"; export PATH
  10. cd "$HL_DIR"
  11.  
  12. case "$1" in
  13.     start)
  14.       if [ -f "$HL_PID" ]; then
  15.         echo "Counter-Strike already running"
  16.         exit 1
  17.       fi
  18.       #$HL_DIR/$HL_RUN -game cstrike -pidfile "$HL_PID" -norestart > "$HL_LOG" 2>&1 &
  19.       $HL_DIR/$HL_RUN -binary "$HL_DIR/$HL_BIN" -game cstrike -pidfile "$HL_PID" -norestart > "$HL_LOG" 2>&1 &
  20.       sleep 3
  21.       if [ -f "$HL_PID" ]; then
  22.         echo "Server started..."
  23.       fi
  24.       ;;
  25.  
  26.     stop)
  27.       if [ ! -f "$HL_PID" ]; then
  28.         echo "Counter-Strike not running"
  29.         exit 1
  30.       fi
  31.       kill `cat "$HL_PID"`
  32.       rm -f "$HL_PID"
  33.       ;;
  34.  
  35.     restart)
  36.       if [ -f "$HL_PID" ]; then
  37.         kill `cat "$HL_PID"`
  38.         rm -f "$HL_PID"
  39.         echo "Server stopped..."
  40.       else
  41.         echo "Server not running..."
  42.       fi
  43.       sleep 3
  44.       $HL_DIR/$HL_RUN -binary "$HL_DIR/$HL_BIN" -game cstrike -pidfile "$HL_PID" -norestart > "$HL_LOG" 2>&1 &
  45.       sleep 3
  46.       if [ -f "$HL_PID" ]; then
  47.         echo "Server started..."
  48.       else
  49.         echo "Server error..."
  50.  
  51.       fi
  52.       ;;
  53.  
  54.  
  55.     *)
  56.       echo "hlds {start|stop|restart}"
  57.       ;;
  58. esac
  59.  
  60. 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.