PDA

Просмотр полной версии : Помогите со скриптом


Imperial2008
15.07.2009, 18:55
Здравствуйте!
Сразу просьба, не писать сообщений типа "посмотри подобные скрипты и напиши сам" - смотрел и не вышло.
Суть скрипта очень простая: при соц действии 1 - посылает на сервер 1 блок пакетов, при соц. действии 2 - посылает на сервер второй блок пакетов. И все, никаких таймеров и тому подобное. Под блоком пакетов имеется ввиду 10-15 пакетов. Не нужно вообще никакой автоматизации.

Чтобы не было лишних вопросов, я пробовал переделывать скрипт точки оружия:
// Ядро от mks.
// Модификация ядра от HORSE.
// Конечный продукт от dev.
// http://coderx.ru/showthread.php?t=1684

// Настройики
const
characterName='dev'; // Имя персоонажа
useEnchant=hstr('19 E6 C0 09 10 00 00 00 00'); // [0x19 (UseItem)]
requestEnchant=hstr('5F E2 22 09 10 00 00 00 00'); // [0x5F (RequestEnchantItem)]
itemID=9421; // ID предмета [0x21 (InventoryUpdate)]
enchant=10; // До сколько скрипт должен заточить указанный предмет
speed=150; // Скорость заточки
start=2; // Соц. действие hello, запускает скрипт
stop=3; // Соц. действие victory, остонавливает скрипт

// Ниже ничего можно не трогать
var
timer:TTimer;
x:byte;

procedure Init;
begin
timer:=TTimer.Create(nil);
timer.interval:=speed;
timer.OnTimer:=@fireTimer;
timer.enabled:=false;
x:=1;
end;

procedure Free;
begin
timer.Free;
end;

procedure fireTimer(Sender: TObject);
begin
case x of
1:begin
buf:=useEnchant;
SendToServerEx(characterName);
inc(x);
end;
2:begin
buf:=requestEnchant;
SendToServerEx(characterName);
x:=1;
end;
end;{case}
end;

begin
if FromClient then
begin
case pck[1] of
#$34: begin
if (ReadD(2)=start) then timer.enabled:=true;
if (ReadD(2)=stop) then timer.enabled:=false;
end;
end;
end;
if FromServer then
begin
case pck[1] of
#$21: begin
if (ReadD(12)=itemID) and (ReadD(34)=Enchant) then timer.enabled:=false;
end;
end;
end;
end.

Только я заменил if (ReadD(2)=start) then timer.enabled:=true; таймер на пакеты, но у меня ничего не вышло( Скрипт не сложный, кто знает что делает)
Я не программер, по этому очень надеюсь на вашу помощь.

TAMBIK
15.07.2009, 19:45
мож так
var
x: integer;
//================================================== =============================
begin
if FromClient and (pck[1]=#$34) and (pck[2]=#$06) then begin//соц.действие- yes
case x of
1: begin
buf:=hstr('пакет № 1');
inc(x);
end;
// и т.д

10: begin
buf:=hstr('пакет № 10');
x:=0;
SendToServer;
end;
end;

Imperial2008
15.07.2009, 20:27
var
x: integer;
//================================================== =============================
begin
if FromClient and (pck[1]=#$34) and (pck[2]=#$06) then begin//соц.действие- yes
case x of
1: begin
buf:=hstr('1F EB 84 00 10 C5 2E 01 00 D4 42 02 00 F6 F1 FF FF 00');
buf:=hstr('23 6E 00 70 00 63 00 5F 00 32 00 36 00 38 00 34 00 36 00 39 00 34 00 38 00 33 00 5F 00 41 00 75 00 67 00 6D 00 65 00 6E 00 74 00 20 00 31 00 00 00');
buf:=hstr('D0 26 00 F4 CE 11 10');
buf:=hstr('D0 28 00 F4 CE 11 10 06 11 19 10 35 10 19 10 19 00 00 00');
buf:=hstr('D0 44 00 F4 CE 11 10 06 11 19 10 35 10 19 10 19 00 00 00');
inc(x);
end;
// и т.д

10: begin
buf:=hstr('пакет № 10');
x:=0;
SendToServer;
end;
end;
Вставил так, но ничего не происходит. Скажите что не так делаю.
Да, еще одно, а какое второе соц. действие?

Добавлено через 24 минуты
begin
if fromclient and (pck=#$34#$06#$00#$00#$00) then
begin
buf:=hstr('1F EB 84 00 10 C5 2E 01 00 D4 42 02 00 F6 F1 FF FF 00');
buf:=hstr('D0 28 00 F4 CE 11 10 06 11 19 10 35 10 19 10 19 00 00 00');
buf:=hstr('D0 44 00 F4 CE 11 10 06 11 19 10 35 10 19 10 19 00 00 00');
SendToServer;
end;
if fromclient and (pck=#$34#$05#$00#$00#$00) then
begin
buf:=hstr('D0 26 00 F4 CE 11 10');
buf:=hstr('D0 26 00 F4 CE 11 10');
buf:=hstr('D0 26 00 F4 CE 11 10');
buf:=hstr('D0 26 00 F4 CE 11 10');
buf:=hstr('D0 26 00 F4 CE 11 10');
buf:=hstr('D0 26 00 F4 CE 11 10');
SendToServer;
end;
end.
Я сделал так) Все работает) Тема закрыта. Сорри что побеспокоил)

dmn-synthet
16.07.2009, 09:16
var
buf:=hstr('1F EB 84 00 10 C5 2E 01 00 D4 42 02 00 F6 F1 FF FF 00');
buf:=hstr('D0 28 00 F4 CE 11 10 06 11 19 10 35 10 19 10 19 00 00 00');
buf:=hstr('D0 44 00 F4 CE 11 10 06 11 19 10 35 10 19 10 19 00 00 00');
SendToServer;

Я сделал так) Все работает) Тема закрыта. Сорри что побеспокоил)
:tease: Не понятна вот эта последовательность присвоений buf:=.
Как же так оно работает?

Imperial2008
16.07.2009, 18:14
:tease: Не понятна вот эта последовательность присвоений buf:=.
Как же так оно работает?

Дело вт ом, что пакетов там больше (15 шт). Работает просто - мне надо было скрипт на агмент (примитивный). Суть в чем: при нажатии одного соц действия - отсылается блок пакетов, который отвечает за агментацию оружия, а при втором соц действии - второй, который удаляет уже ту агментацию. Просто сюда не выложил весь скрипт (лимит символов). Наверное можно было по другому сделать, ввести кучу переменных да и сократить исходный код, но я не программер, да и все работает и довольно просто (как для меня))))

Amorality
17.07.2009, 03:25
Imperial2008,
Вообще твой код равен этому должен быть:
begin
if fromclient and (pck=#$34#$06#$00#$00#$00) then
begin
buf:=hstr('D0 44 00 F4 CE 11 10 06 11 19 10 35 10 19 10 19 00 00 00');
SendToServer;
end;
if fromclient and (pck=#$34#$05#$00#$00#$00) then
begin
buf:=hstr('D0 26 00 F4 CE 11 10');
SendToServer;
end;
end.

Хотя могу ошибаться, просто не понимаю какой смысл присваивать переменной разные значения, когда отправляется только конечное?

Imperial2008
17.07.2009, 10:44
Imperial2008,
Вообще твой код равен этому должен быть:
begin
if fromclient and (pck=#$34#$06#$00#$00#$00) then
begin
buf:=hstr('D0 44 00 F4 CE 11 10 06 11 19 10 35 10 19 10 19 00 00 00');
SendToServer;
end;
if fromclient and (pck=#$34#$05#$00#$00#$00) then
begin
buf:=hstr('D0 26 00 F4 CE 11 10');
SendToServer;
end;
end.

Хотя могу ошибаться, просто не понимаю какой смысл присваивать переменной разные значения, когда отправляется только конечное?

Подожди ка, конечное действие - это нажатие кнопки выполнить и тогда на сервер не поступит информация не о геймстоунах ни о лайфстоунах ни о самом оружии) Если я правильно понимаю. Тут всего лишь три действия как я говорил, поскольку выложить полный скрипт я не смог. Главное что он работает безукоризненно на всех хрониках и сервах (где нету защиты от запуска пакетхака), поскольку он базируется на самом элементарной действии)))

Amorality
17.07.2009, 16:26
А ты попробуй приведенный мной вариант, это одно и тоже, что твой..

Добавлено через 48 секунд
Баф отправляется после сендто, зачем его присваивать без отправки?

Imperial2008
17.07.2009, 19:53
А ты попробуй приведенный мной вариант, это одно и тоже, что твой..

Добавлено через 48 секунд
Баф отправляется после сендто, зачем его присваивать без отправки?

Я извиняюсь, но уже разобрался, что все эти пакеты только закружены в буф, а только 1 действительно отправляется. Но все равно спасибо)