Форум работает в тестовом режиме. Все данные были перенесены со старого сайта 2018 года. Некоторая информация может быть недоступна, например вложения или хайды. Просьба сообщать о данных случаях через функционал "Жалоба", прямо под постом, где отсуствуют данные из хайда или проблемы с вложением.
Могут быть проблемы в "выкидыванием" с форума (слетевшей авторизацией). Нужно собрать статистику таких случаев.
Есть Тема, куда можете сообщить о проблемах с сайтом либо просто передать привет.

Engine.SendTOServer

Zubastic

facepalm god
Рег
15 Июл 2016
Сообщения
371
Реакции
0
Собственно интересует пример выполнения этой команды. Раньше я делал вот так:

procedure RequestGiveNickName(ConName, Target, Title:string); // изменить титул чара
begin
buf:=#$0B;
WriteS(Target);
WriteS(Title);
SendToServerEx(ConName);
end;

Это скрипт для phx, хочу переписать под адреналин, однако интересует:
1) как принять пакеты
2) как отправить клиентские пакеты

У меня очень много собственных сорцов, но почему-то документация просто ущербная и приходится собирать информацию по крупицам. (Адреналина у меня нет, пишу для знакомых).

http://forum.lineage2bot.net/viewtopic.php?f=6&t=2672

Вот тут говорили об OnPacket, но ничего конкретного.

Ну и вот такая штука забавна:
http://asiwin.com/api/adrenalin/search-results?search=OnPacket&id=61

Если перейти по линку, то на странице находится целое НИЧЕГО :)
 
А чё не ясного?
Шлём на сервер (или тебе клиент нужен?, ну там разницы минимум).
Набросал класс (только запись, чтение из пакета делается по аналогии).
uses SysUtils;

type
TNetworkPacket = class
public
Current: Integer;
procedure WriteD(value: Cardinal);
procedure WriteH(value: Word);
procedure WriteC(value: Byte);
procedure WriteS(value: String);
function ToHex(): String;
private
data: Array[0..10240] of Byte;
end;

procedure TNetworkPacket.WriteD;
begin
(PCardinal(@data[Current])^):= value;
Current:= Current + sizeof(Cardinal);
end;

procedure TNetworkPacket.WriteH;
begin
(PWord(@data[Current])^):= value;
Current:= Current + sizeof(Word);
end;

procedure TNetworkPacket.WriteC;
begin
(PByte(@data[Current])^):= value;
Current:= Current + sizeof(Byte);
end;

procedure TNetworkPacket.WriteS;
begin
Move(value^, PChar(@data[Current])^, (length(value) + 1) * sizeof(Char));
Current:= Current + (length(value) + 1) * sizeof(Char);
end;

function TNetworkPacket.ToHex;
var
i: Cardinal;
begin
result:= '';
for i:= 0 to Current - 1 do
begin
result:= result + IntToHex(data, 2);
end;
end;

var
packet: TNetworkPacket;
begin
packet:= TNetworkPacket.Create();
packet.WriteC(123{_ID_});
packet.WriteH(12345{_EXID_});
//payload
packet.WriteD(12345);
//send to server:)
Engine.SendToServer(packet.ToHex());
end.

Принимаем
Код:
procedure OnPacket(id, exId: Cardinal; data: PChar; size: Word);
begin
 //do stuff...
end;
 
rsd написал(а):
А чё не ясного?
Неясно то, что с какого-то хрена этого апи нет в официальных доках адреналина, лишь только на форуме, когда уже ноют о том, что нет функционала. Лично у меня такой подход просто вызывает удивление.
За класс спасибо, буду использовать.
 
Zubastic написал(а):
Неясно то, что с какого-то хрена этого апи нет в официальных доках адреналина, лишь только на форуме, когда уже ноют о том, что нет функционала. Лично у меня такой подход просто вызывает удивление.
Поначалу тоже орал, а сейчас почти не пишу под него ничего, поэтому пофиг.
Всё потому мало кто пишет что то серъезнее очередного возврата на спот.
OnPacket точно есть в ScriptHelp-e. Есть еще OnCliPacket(сигнатура такая же), про него я узнал на форуме адрика от какого то левого буржуя :pekatroll:
 
rsd написал(а):
Поначалу тоже орал, а сейчас почти не пишу под него ничего, поэтому пофиг.
Попросили написать, поэтому и ору.
 
Назад
Сверху