Скрипты только автоматизируют пакетное дело (заблокировать, изменить, отослать свой).
Чтобы писать скрипты нужно начать с концепта, идеи. Далее нужно думать как это реализовать. Если разбираешься в пакетном протоколе игры, то уже примерно знаешь какие пакеты тебе нужны, как они составлены итд. Если же разбираешься не очень, то можно посмотреть описание пакета в
WPPC[IMG]http://img41.**************/img41/3499/wppc.gif[/IMG]
или в разделе
Пакетный уровень, но я советую отловить нужный пакет и самому разобраться какую информацию несут эти байты.
Далее переходим непосредственно к скриптописанию. Скрипты в WPPC пишутся на языке FS который имеет синтаксис Delphi (
можно посмотреть примеры использования).
Функции и процедуры поддерживаемые движком описаны в документации (с примерами). Она находятся в папке с WPPC (папка doc). В принципе тут можно заканчивать, но дам несколько советов.
Tips and tricks
Для началаВ большинстве скриптов будут нужны функции перевода из одного типа в другой : IntToStr BufToHex итд запоминаем в первую очередь.
Далее функции преобразования строк (т.к. пакет по сути это строка) Delete, Insert, copy.
Функции составления пакетов FormatPck, FormatPck5 очень нужны когда используем переменные в пакете.
Ну и куда же без gSys.SendC, gSys.SendS, gBlockPacket для отправки и блокировки.
Байты в пакете идут задом наперед, т.е. если мы отловили пакет
PHP код:
09 00 17 07 00 01 00 00 00
то ID пакета будет $0717 ($ означает что это шестнадцатеричная система счисления)
Используйте циклы (say no to copy paste)Такую схему
PHP код:
BEGIN
...
gSys.EnSendS(HStr('09 00 17 07 00 01 00 00 00'));
gSys.EnSendS(HStr('09 00 17 07 01 01 00 00 00'));
gSys.EnSendS(HStr('09 00 17 07 02 01 00 00 00'));
gSys.EnSendS(HStr('09 00 17 07 03 01 00 00 00'));
...
можно оптимизировать так
PHP код:
for i := 0 to 3 do gSys.EnSendS(FormatPck5('%hcd',$0717,chr(i),1));
Пишите функции и процедуры
PHP код:
procedure MsgInfo(msg : string); //Выводит информацию в пм
begin
gSys.SendC(FormatPck('%hcdacca',***91;$0A02,02,0,'***91;@***93;'+FStr(16),01,Length(msg),msg+#0***93;));
end;
...
MsgInfo('Hello world!');
..
Матерые скриптеры могут поиграться с объектом gDLL
Цитата:
|
объект gDLL используется для подгрузки внешних DLL и вызова их ф-ций.
|
PHP код:
var hl : handle;
procedure OnCreate;
begin
hl := gDLL.LoadLib('User32.dll');//Используем системную библиотеку
gSys.SetTimer(1,20);
end;
procedure OnDestroy;
begin
gDLL.FreeLib(hl);
end;
function OnTimer(ntimer, count : integer) : boolean;
begin
if Key($61) then ... //Тут ваш код, установка флага, или отправка пакета
...
...
if Key($69) then ...
result := true;
end;
function Key(key:integer):boolean; //Нажата ли клавиша?
begin
result:= gDLL.CallFunc3(hl, 'GetAsyncKeyState', key, null,null) and $FFFF = $8001;
end;
Делайте скрипты универсальными
С FG обвязкой, поддержкой разных апов итп.
Вот скелет который я использую в своих скриптах для рфки
PHP код:
//Скрипт пишется как для сервера без FG
//В случае использования процедур посылки пакетов сначала используем функцию FG() с желаемым пакетом как аргумент
//gSys.EnSendC(FG(тут могла бы быть ваша реклама));
var PID : integer; //Здесь объявляем свои переменные и константы
const fgFlag = true; //Меняем в зависимости от протокола
function FG(s:string): string;
begin
if fgFlag then result := FormatPck5('%sd',s,4)
else result := s;
end;
procedure OnCreate;
begin
//Тут код который надо выполнить до начала работы скрипта, например выставить флаг
end;
procedure OnDestroy;
begin
//Тут код который надо выполнить по завершению скрипта, например освободить память
end;
BEGIN
if fgFlag then _gBuff := copy(_gBuff,3,GInt(_gBuff,3,2));//Если FG разворачиваем
if length(_gBuff) < 4 then exit; //Размер меньше 4 байт. Это не RFО_о
PID := GInt(_gBuff,3,2); //Сохраним ID
if _gFromServ then //Пакеты от сервера
case PID of
$XXXX: begin
//Извращаемся над пакетом как хотим
end;
$AAAA,$BBBB: if thisthing = otherthing then
begin
//А эти только с условием
end;
end
else //Пакеты от клиента
case PID of
$YYYY: begin
//Снова извращения
end;
end;
end;
_gOutBuff := FG(_gOutBuff);//Если FG заворачиваем
END.
Может показаться слишком, но при скрипте в пару тысяч строк оно того стоит
Для тренировки могу посоветовать посмотреть на названия тем скриптов в этом разделе и попробовать написать свой (без подглядывания

)
Ах да, чуть не забыл
Комментируй код блеать, чтоб через месяц не было FFFFFFFUUUUUUU