Выкладываю скрипт для отправки сообщения в разные каналы чата.
Сам скрипт:
Дополнение:
Чтобы писать с определенного персонажа он должен быть в сети. Для отправки без ника id ставьте 0.
Пример работы:
Сам скрипт:
PHP:
<?php
$host = "127.0.0.1";
$port = 29300;
function socketsend($data, $ip,$port)
{
if(!@$sock=socket_create(AF_INET, SOCK_STREAM, SOL_TCP))
{throw new Exception("Не удалось связать сокет"); exit();}
socket_connect($sock,$ip,$port);
socket_set_block($sock);
socket_send($sock, $data, 8192, 0);
socket_recv($sock, $buf, 8192, 0);
socket_set_nonblock($sock);
socket_close($sock);
return $buf;
}
function cuint($data)
{
if($data < 128)
return strrev(pack("C", $data));
else if($data < 16384)
return strrev(pack("S", ($data | 0x8000)));
else if($data < 536870912)
return strrev(pack("I", ($data | 0xC0000000)));
return strrev(pack("c", -32) . pack("i", $data));
}
function PackString($data)
{
$data = iconv("UTF-8", "UTF-16LE", $data);
return cuint(strlen($data)).$data;
}
function PackOctet($data)
{
$data = pack("H*", $data);
return cuint(strlen($data)).$data;
}
function gameChat($user,$msg,$chan,$host,$port)
{
$System = pack("C*",$chan);
$Emotion = pack("C*",0);
$Char = pack("N*",$user);
$Message = PackString($msg);
$data = PackOctet('');
$Packet = $System.$Emotion.$Char.$Message.$data;
$Data = cuint(120).cuint(strlen($Packet)).$Packet;
socketsend($Data, $host,$port);
}
$page = <<<HTML
<FORM METHOD=POST>
<select name=chanel>
<option value=0>Общий</option>
<option value=2>Группа</option>
<option value=3>Клан</option>
<option value=4>Личные сообщения</option>
<option value=7>Торг</option>
<option value=1>Мир</option>
<option value=12>Горн</option>
<option value=9>Системный</option>
</select>
<input name="user" type="text" placeholder="Id персонажа с которого будет отправлено сообщение">
<input name="msg" type="text" placeholder="Текст сообщения">
<input name="submit" type=submit value="Отправить">
</FORM>
HTML;
echo $page;
if (isset($_POST['submit']))
{
gameChat($_POST['user'],$_POST['msg'],$_POST['chanel'],$host,$port);
}
?>
PHP:
<?php
set_time_limit(0);
ignore_user_abort(true);
$host = "127.0.0.1";
$port = 29300;
function socketsend($data, $ip,$port)
{
if(!@$sock=socket_create(AF_INET, SOCK_STREAM, SOL_TCP))
{throw new Exception("Не удалось связать сокет"); exit();}
socket_connect($sock,$ip,$port);
socket_set_block($sock);
socket_send($sock, $data, 8192, 0);
socket_recv($sock, $buf, 8192, 0);
socket_set_nonblock($sock);
socket_close($sock);
return $buf;
}
function cuint($data)
{
if($data < 128)
return strrev(pack("C", $data));
else if($data < 16384)
return strrev(pack("S", ($data | 0x8000)));
else if($data < 536870912)
return strrev(pack("I", ($data | 0xC0000000)));
return strrev(pack("c", -32) . pack("i", $data));
}
function PackString($data)
{
$data = iconv("UTF-8", "UTF-16LE", $data);
return cuint(strlen($data)).$data;
}
function PackOctet($data)
{
$data = pack("H*", $data);
return cuint(strlen($data)).$data;
}
function gameChat($user,$msg,$chan,$host,$port)
{
$System = pack("C*",$chan);
$Emotion = pack("C*",0);
$Char = pack("N*",$user);
$Message = PackString($msg);
$data = PackOctet('');
$Packet = $System.$Emotion.$Char.$Message.$data;
$Data = cuint(120).cuint(strlen($Packet)).$Packet;
socketsend($Data, $host,$port);
}
$page = <<<HTML
<FORM METHOD=POST>
<select name=chanel>
<option value=0>Общий</option>
<option value=2>Группа</option>
<option value=3>Клан</option>
<option value=4>Личные сообщения</option>
<option value=7>Торг</option>
<option value=1>Мир</option>
<option value=12>Горн</option>
<option value=9>Системный</option>
</select>
<input name="user" type="text" placeholder="Id персонажа с которого будет отправлено сообщение">
<input name="msg" type="text" placeholder="Текст сообщения">
<input name="time" type="text" placeholder="Интервал между сообщениями(в секундах)">
<input name="count" type="text" placeholder="Сколько раз отправить">
<input name="submit" type=submit value="Отправить">
</FORM>
HTML;
echo $page;
if (isset($_POST['submit']))
{
$i = 0;
while(true)
{
gameChat($_POST['user'],$_POST['msg'],$_POST['chanel'],$host,$port);
sleep($_POST['time']);
if($_POST['count'] != 0 and $_POST['count']-1 == $i)
{
exit();
}
$i++;
}
}
Пример работы: