Как да направим сървър на cs 1.6

Locked
User avatar
human
Гуру
Гуру
Posts: 2747
Joined: Thu Jul 13, 2006 6:09 pm
Answers: 214
Location: София, България
Contact:

Как да направим сървър на cs 1.6

Post by human » Thu Dec 14, 2006 7:17 pm

Значи сега ще ви покажа как да си направим сървар на counter-strike 1.6. Първото което трябва да направите е да свалите amx mod от Официалния БГ сайт DownLoaD (трябва да сте регистрирани в сайта) . След това качвате тези файлове в папка cstrike в папката на cs.(трябва да се качи папка addons).Този мод не е задължителен, това е този който показва Ранк-а на играча, който казва GodLike и т.н. След това влизате в папката на cs(не cstrike,a предишната) и пускате hlds.exe .Когато го пуснете ще ви се покаже един прозорец : Image .Най горе му давате Counter-strike(мойто е condition zero, но това е от цс-а който свалих) .На второто пишете името на сървара,на третото давате картата, на четвъртото мрежата (на ЛАН могат да влизат и хора от др мрежа , но май и на internet става) . След това давате колко човека максимално да играят в сървара(по-добре по-малко защото ще лагва) .След това давате порта.Пишете 27015, ако не стане 27016. После пишете паролата на сървара(използва се с командата rcon_password .Давате Start Server и сте готово .

Не забравяйте, трябва да сте с реално IP за да могат други хора да влизат в сървара!






Долното е написано от потребител Rk8752 и обяснява как
да си вкарате данните от сървъра да излизат в сайта.


http://web-tourist.net/login/login/view.php?st=3007


Гледах, че много CS маняци питат как да си направят сървъра да им излиза в сайта.
Името, играчите, ИП-то, Картата, и Статуса.
Та реших да направя урочето и който го интересува да погледне и да си го направи :)

Та да не губим време да започваме :)

Както винаги започваме с главната страница:
index.php
Там ще сложим кода който ще извежда картинката и надписите на нея :)
Така съм приготвил 1 картинка не много сложна елементарна на който му харесва може да я ползва на която ще излиза информацията за сървъра.

bg.png:
Image

index.php:

Code: Select all

<?php 
header&#40;"Content-type&#58; image/png; charset=windows-1251"&#41;; 
require_once&#40;"inc.php"&#41;; 
$ip_port = array&#40; 
1 => "85.187.32.205&#58;27015" //Тук пишеш IP адресът и портът 
&#41;; 

$rand = rand&#40;1, count&#40;$ip_port&#41;&#41;; 
$getip_port = explode&#40;"&#58;", $ip_port&#91;$rand&#93;&#41;; 

$ip = $getip_port&#91;0&#93;; 
$port = $getip_port&#91;1&#93;; 

$s = &new serverinfo&#40;$ip, $port&#41;; 
$s->getServerData&#40;&#41;; 
$hostname = $s->serverData&#91;'hostname'&#93;; // Име на сървъра
$players = $s->serverData&#91;'players'&#93;; //Броя на играчите 
$maxplayers = $s->serverData&#91;'maxplayers'&#93;; //Максималния брой на играчи 
$map = $s->serverData&#91;'map'&#93;; //Картата 


$image = imagecreatefrompng&#40;"bg.png"&#41;; //Тук пишеш пътя до картинката за фон. Хубаво е да е в същата папка или поне на същия сървър 
$black = imagecolorallocate&#40;$image, 0, 255, 255&#41;; //Създаваме черен цвят 
$red = imagecolorallocate&#40;$image, 255, 0, 0&#41;; //Създаваме червен цвят 
$green = imagecolorallocate&#40;$image, 0, 255, 0&#41;; //Създаваме зелен цвят 
$fontsize = 3; //Може да бъде число от 1 до 5. Определя големината на шрифта 

imagestring&#40;$image, $fontsize, 585, 27, "" . $players ." / ".$maxplayers, $black&#41;; //x = 10, y = 10 
imagestring&#40;$image, $fontsize, 310, 74, "" . $ip_port&#91;1&#93;, $black&#41;; //x = 10, y = 30 
imagestring&#40;$image, $fontsize, 460, 26, "" . $map, $black&#41;; //x = 10, y = 50 
imagestring&#40;$image, $fontsize, 290, 26, "" . $name, $black&#41;; //x = 10, y = 50 
if&#40;$s->getStatus&#40;&#41;&#41; &#123; 
imagestring&#40;$image, $fontsize, 10, 90, "", $red&#41;; //x = 10, y = 70 
imagestring&#40;$image, $fontsize, 540, 74, "Online", $green&#41;; //x = 80, y = 70 
&#125; else &#123; 
imagestring&#40;$image, $fontsize, 10, 90, "", $red&#41;; //x = 10, y = 70 
imagestring&#40;$image, $fotnsize, 540, 74, "Offline", $red&#41;; //x = 80, y = 70 
&#125; 

imagepng&#40;$image&#41;; 
imagedestroy&#40;$image&#41;; 
?>
Там кадето пише ИП-то на неготово място слагате вашето ИП:
1 => "85.187.32.205:27015" //Тук пишеш IP адресът и портът
Задължително е да се сложи ИП+Порт за да няма магарий :D

Там където виждате тези редове
[] imagestring($image, $fontsize, 585, 27, "" . $players ." / ".$maxplayers, $black); //x = 10, y = 10
imagestring($image, $fontsize, 310, 74, "" . $ip_port[1], $black); //x = 10, y = 30
imagestring($image, $fontsize, 460, 26, "" . $map, $black); //x = 10, y = 50
imagestring($image, $fontsize, 290, 26, "" . $hostname, $black); //x = 10, y = 50
if($s->getStatus()) {
imagestring($image, $fontsize, 10, 90, "", $red); //x = 10, y = 70
imagestring($image, $fontsize, 540, 74, "Online", $green); //x = 80, y = 70
} else {
imagestring($image, $fontsize, 10, 90, "", $red); //x = 10, y = 70
imagestring($image, $fotnsize, 540, 74, "Offline", $red); //x = 80, y = 70

На за да преместитте текста променяте цифрите който се намират след $fontsize

На редовете
$image = imagecreatefrompng("bg.png"); //Тук пишеш пътя до картинката за фон. Хубаво е да е в същата папка или поне на същия сървър
$black = imagecolorallocate($image, 0, 255, 255); //Създаваме черен цвят
$red = imagecolorallocate($image, 255, 0, 0); //Създаваме червен цвят
$green = imagecolorallocate($image, 0, 255, 0); //Създаваме зелен цвят
$fontsize = 3; //Може да бъде число от 1 до 5. Определя големината на шрифта

Да започнем с реда където взема картинката bg.png ако случайно искате да ви се намира картинката в папката imagesпред нея напишете images/за да се получи images/bg.png
По надоло []$back, $red, $green[] това са цветовете който можете да ползвате разбира се може да добавите и ваши или да ги промените като смените цифрите след []$image[]
И накрая остана []$fontsize[] това е големина та на буквите можете да го промените от 1 до 5 както пише но за препоръка е да си стои 3 :)

Ето и следващия файл че стана много дълъг урока :)

inc.php

Code: Select all

<?php 
class serverinfo 
&#123; 
var $ip; 
var $port; 

var $fp; 
var $timeout; 

var $serverData; 
var $playerData; 


function serverinfo&#40;$ip, $port, $timeout = 3&#41; 
&#123; 
$this->ip = $ip; 
$this->port = $port; 

$this->fp = fsockopen&#40;"udp&#58;//" . $ip, $port&#41;; 
$this->timeout = $timeout; 
&#125; 


function getServerData&#40;&#41; 
&#123; 
$this->writeData&#40;$this->getQuery&#40;"A2S_INFO"&#41;&#41;; 

$this->getData&#40;"byte"&#41;; 
$this->getString&#40;&#41;; 
$this->serverData&#91;'hostname'&#93; = $this->getString&#40;&#41;; 
$this->serverData&#91;'map'&#93; = $this->getString&#40;&#41;; 
$this->getString&#40;&#41;; 
$this->serverData&#91;'mod'&#93; = $this->getString&#40;&#41;; 
$this->serverData&#91;'players'&#93; = $this->getData&#40;"byte"&#41;; 
$this->serverData&#91;'maxplayers'&#93; = $this->getData&#40;"byte"&#41;; 
$this->getData&#40;"byte"&#41;; 
$this->serverData&#91;'servertype'&#93; = &#40;chr&#40;$this->getData&#40;"byte"&#41;&#41; == "d"&#41; ? "Dedicated" &#58; "Listen"; 
$this->serverData&#91;'server_os'&#93; = &#40;chr&#40;$this->getData&#40;"byte"&#41;&#41; == "w"&#41; ? "Windows" &#58; "Linux"; 
$this->serverData&#91;'password'&#93; = $this->getData&#40;"byte"&#41;; 
$this->getData&#40;"byte"&#41;; 
$this->getString&#40;&#41;; 
$this->getString&#40;&#41;; 
$this->getString&#40;&#41;; 
$this->getData&#40;"long"&#41;; 
$this->getData&#40;"long"&#41;; 
$this->getData&#40;"byte"&#41;; 
$this->getData&#40;"byte"&#41;; 
$this->serverData&#91;'vac'&#93; = $this->getData&#40;"byte"&#41;; 
$this->getData&#40;"byte"&#41;; 
&#125; 


function getPlayerData&#40;&#41; 
&#123; 
$this->writeData&#40;$this->getQuery&#40;"A2S_PLAYER"&#41;&#41;; 

fread&#40;$this->fp, 4&#41;; 
$this->getData&#40;"byte"&#41;; 

$count = $this->getData&#40;"byte"&#41;; 

for&#40;$i = 0; $i < $count; $i++&#41; 
&#123; 
$this->playerData&#91;$i&#93;&#91;'id'&#93; = $this->getData&#40;"byte"&#41;; 
$this->playerData&#91;$i&#93;&#91;'name'&#93; = $this->getString&#40;&#41;; 
$this->playerData&#91;$i&#93;&#91;'frags'&#93; = $this->getData&#40;"long"&#41;; 
$this->playerData&#91;$i&#93;&#91;'time'&#93; = round&#40;$this->getData&#40;"float"&#41;&#41;; 
&#125; 
&#125; 


function getQuery&#40;$queryType&#41; 
&#123; 
switch&#40;$queryType&#41; 
&#123; 
case "A2S_SERVERQUERY_GETCHALLENGE"&#58; 
return "\xFF\xFF\xFF\xFF\x57"; 
break; 

case "A2S_INFO"&#58; 
return "\xFF\xFF\xFF\xFFTSource Engine Query\x00"; 
break; 

case "A2S_PLAYER"&#58; 
return sprintf&#40;"\xFF\xFF\xFF\xFFU%s", $this->getChallenge&#40;&#41;&#41;; 
break; 
&#125; 
&#125; 


function getChallenge&#40;&#41; 
&#123; 
$this->writeData&#40;$this->getQuery&#40;"A2S_SERVERQUERY_GETCHALLENGE"&#41;&#41;; 

return substr&#40;fread&#40;$this->fp, 16&#41;, 5, 9&#41;; 
&#125; 


function getData&#40;$type&#41; 
&#123; 
switch&#40;$type&#41; 
&#123; 
case "long"&#58; 
$data = unpack&#40;"L", fread&#40;$this->fp, 4&#41;&#41;; 
return $data&#91;1&#93;; 
break; 

case "byte"&#58; 
return ord&#40;fread&#40;$this->fp, 1&#41;&#41;; 
break; 

case "char"&#58; 
return fread&#40;$this->fp, 1&#41;; 
break; 

case "float"&#58; 
$data = unpack&#40;"f", fread&#40;$this->fp, 4&#41;&#41;; 
return $data&#91;1&#93;; 
break; 
&#125; 
&#125; 


function getString&#40;&#41; 
&#123; 
$string = ''; 
$loop = TRUE; 

while&#40;$loop&#41; 
&#123; 
$_fp = $this->getData&#40;"char"&#41;; 

if&#40; ord&#40;$_fp&#41; != 0 &#41; 
&#123; 
$string .= $_fp; 
&#125; 
else &#123; $loop = FALSE; &#125; 
&#125; 

return $string; 
&#125; 


function writeData&#40;$input&#41; 
&#123; 
if&#40; !$this->fp &#41; 
&#123; 
exit&#40;"Error&#58; Couldn't connect to server."&#41;; 
&#125; 
else &#123; 
fwrite&#40;$this->fp, $input&#41;; 
socket_set_timeout&#40;$this->fp, $this->timeout&#41;; 
&#125; 
&#125; 


function setTimeFormat&#40;$format, $input&#41; 
&#123; 
$hours = floor&#40;$input / 3600&#41;; 
$input = $input % 3600; 

$minutes = floor&#40;$input / 60&#41;; 
$input = $input % 60; 

$seconds = round&#40;$input&#41;; 

return sprintf&#40;$format, $hours, $minutes, $seconds&#41;; 
&#125; 


function sortPlayers&#40;$sort = "time", $type = "desc"&#41; 
&#123; 
if&#40;isset&#40;$this->playerData&#91;0&#93;&#91;$sort&#93;&#41;&#41; 
&#123; 
for&#40;$i = 0; $i < count&#40;$this->playerData&#41;; $i++&#41; 
&#123; 
$temp&#91;&#93; = $this->playerData&#91;$i&#93;&#91;$sort&#93;; 
&#125; 

switch&#40;$sort&#41; 
&#123; 
case "name"&#58; 
uasort&#40;$temp, "strcasecmp"&#41;; 
break; 

default&#58; 
if&#40;$type == "desc"&#41; &#123; 
arsort&#40;$temp&#41;; 
&#125; 
elseif&#40;$type == "asc"&#41; &#123; 
asort&#40;$temp&#41;; 
&#125; 
break; 
&#125; 

foreach&#40;$temp as $key => $value&#41; 
&#123; 
$keys&#91;&#93; = $key; 
&#125; 

foreach&#40;$keys AS $k => $v&#41; 
&#123; 
$tempvar&#91;$k&#93;&#91;'id'&#93; = $this->playerData&#91;$v&#93;&#91;'id'&#93;; 
$tempvar&#91;$k&#93;&#91;'name'&#93; = $this->playerData&#91;$v&#93;&#91;'name'&#93;; 
$tempvar&#91;$k&#93;&#91;'frags'&#93; = $this->playerData&#91;$v&#93;&#91;'frags'&#93;; 
$tempvar&#91;$k&#93;&#91;'time'&#93; = $this->playerData&#91;$v&#93;&#91;'time'&#93;; 
&#125; 

$this->playerData = $tempvar; 
&#125; 
&#125; 

function getStatus&#40;&#41; &#123; 
$status = @fsockopen&#40;$ip, $port, $errno, $errstr, 3&#41;; 
if &#40;!$status&#41; &#123; 
return 1; 
&#125; else &#123; 
return 0; 
&#125; 
&#125; 
&#125; 
?>
Няколко думи за този файл.
От този файл се зема информацитята за сървъра и се извежда в index.php за да няма проблеми по добре не го барайте ако не го разбирате :)

Ако имате въпроси или проблеми задайте ги в коментарите или на ЛС също така най-добре в форума има хора който разбират повече от мене и те могат също да ви помогнат :)

Locked