PDA

Просмотр полной версии : l2ph -> Plugins


Denever
04.02.2012, 09:18
Build
[Error] Project2.dpr(133): Array type required
[Error] Project2.dpr(133): Incompatible types: 'String' and 'Integer'
[Error] Project2.dpr(136): Incompatible types: 'String' and 'Integer'
[Error] Project2.dpr(141): Incompatible types: 'TPacket' and 'String'
[Error] Project2.dpr(150): Statement expected but 'EXPORTS' found

procedure OnPacket(const cnt: Cardinal; const fromServer: Boolean; var pck: TPacket); stdcall;
var
buf: string;
begin
if pck.size<3 then exit; // на случай если предыдущие плагины обнулили пакет
if FromServer and (pck[1]=#$03) and (MyName=0) then // <- 133 строчка
begin
i:=22;
Name:=ps.ReadS(i); // <- 136 строчка
//
//
//
//
pck:=''; // 141 строчка
//
//
//
//
end;

exports // 150 строчка.
GetPluginInfo,
SetStruct,
OnPacket,
OnLoad,
OnFree;
begin
end.

Пробую переделать скрипт в плагин..
Помогите в чём проблема?

xkor
04.02.2012, 13:27
Denever, как минимум в том что TPacket это не string а запись из нескольких вариантов массивов, так что работать с pck как со строкой не выйдет. В 133й строке вместо "pck[1]=#$03" надо как то так "pck.pckId=$03", на 136ой не "ps.ReadS(i)" а "ps.ReadSEx(pck,i+1)", на 141 не "pck:=''" а "pck.size:=0", а что не так 150ой строкой я не совсем понял

Denever
04.02.2012, 14:16
Спасибо

Aries
04.02.2012, 14:18
упс

supernewbie
04.02.2012, 16:38
а что не так 150ой строкой я не совсем понял
дык там end'а в OnPacket'е не хватает

Denever
04.02.2012, 18:06
if FromServer and (pck.pckId=$03) then
begin
i:=22;
Name:=ps.ReadSEx(pck,i); //+1?? Пробывал.
ShowMessage('Найден: '+Name); // debug сообщений есть ли имя?
Почему не определяет имя?

Procedure SendPM(msg:string);
var
buf: string;
begin
with ps do begin
buf:=#$4A;
WriteD(buf,0);
WriteD(buf,10);
WriteS(buf,'');
WriteS(buf,msg);
SendPacketStr(buf,MyID,False);
end;
end;
При отправки данной процедуры я получаю ошибку вместе с сообщением и плагин завершается..
В чём может быть проблема?
// Процедура OnLoad устанавливает:
MyID:=ConnectInfo.ConnectID;