PDA

Просмотр полной версии : Скрипт на закупку семян. Помогите плз


Doberman
30.06.2009, 21:15
Меня интересует такой вопрос: можно ли использовать(дописать,переделать) скрип на здачу манора для закупки семян ?
Если есть у кого готовый выложите плиз,я в написание 0,но учимся :D

Breadfan
01.07.2009, 10:34
Я где-то выкладывал - ищи на сайте....и еще - хроники уточни свои и серв

Doberman
01.07.2009, 21:07
Смотрел,пока нечего не нашол.

сервер ц4

Добавлено через 23 минуты
Посмотрите,будет работать на скупку?
var
PaketManora: string; //Пакет на сдачу манора, который мы отправим серваку зараннее с помощью клиента
// и запомним его для того чтобы вручную не формировать его кодом.
//важно что оправлять его нужно после после объявления об олимпиаде.
//так как в пакете манора используются ИД сессии, которые изменяются
//каждый ровный час.

timer1: TTimer; //таймер контролирующий системное время

StartTime: TDateTime;
EndTime: TDateTime;


x:integer;

procedure Init; //Вызывается при включении скрипта
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer; //
timer1.enabled:=false; // таймер по умолчанию выключен
timer1.interval:=300; // через каждые 0,3сек будем засекать контрольное время сдачи манора

x:=0;
end;

procedure Free; //Вызывается при выключении скрипта
begin
timer1.Free; //освобождаем занимаемую память таймером
end;

//вызывается при срабатывании таймера
procedure OnTimer(Sender: TObject);
begin
//если наступило время сдавать манор и скрипт пока еще не отправил 10 попыток его сдать то
if (time >= EndTime) and (x<11) then
begin
//пишем сами себе в чат - что "ПОПЫТКА"
buf:=hstr('4A AB F6 A0 48 02 00 00 00 2D 00 3E 00 56 00 4F 00 52 00 4F 00 4E 00 37 00 00 00 3F 04 3E 04 3F 04 4B 04 42 04 3A 04 30 04 20 00 41 04 34 04 30 04 42 04 4C 04 00 00');
SendToClient;
// отправляем пакет на сдачу манора.
buf:=PaketManora;
SendToServer;
//счетчик попыток
x:=x+1;
end;
end;


begin

//если перехвачен пакет на покупку семян то
if FromClient and (ConnectName = 'NAME') and (pck[1]=#$C4) then
begin
//запоминаем его полностью
PaketManora:=pck;
end;

//если получен пакет об начале олимпиады то
if FromServer and (pck[1]=#$64) and (pck[2]=#$69) and (pck[3]=#$06) then
begin
//засекаем текущее время
StartTime:=time;
//вычисляем время сдачи манора (прибавляем нужное время которое нужно засеч после получения сообщения об илимпиаде)
EndTime:=StartTime + EncodeTime(0,5,52,0); // изменяем и корректируем ето число в формате (ЧЧ,ММ,СС,МС)
//активируем таймер
timer1.enabled:=true;
//а ето- отправка сам себе сообщения о том что ВРЕМЯ ПОШЛО
buf:=hstr('4A AB F6 A0 48 02 00 00 00 2D 00 3E 00 56 00 4F 00 52 00 4F 00 4E 00 37 00 00 00 32 04 40 04 35 04 3C 04 4F 04 20 00 3F 04 3E 04 48 04 3B 04 3E 04 00 00');
SendToClient;
end;

end.


Добавлено через 3 часа 15 минут
не катит блин (((
Как его переписать можно для закупки?
А то поправил в нём
//если перехвачен пакет на покупку семян то
if FromClient and (ConnectName = 'NAME') and (pck[1]=#$C4) then
begin
Но он серовно пытается не купить семена а здать манор и потом повисает вместе с игрой ((

Doberman
05.07.2009, 03:37
Ребят помогите,ужэ 1.5 недели немогу скупать семена((((

Yegor
05.07.2009, 04:06
всё правильно, и что значит пытается сдать? что пишет?

После строчки где запоминает пакет здачи поставь строку оповещения в чат чтобы быть уверенным что точно запомнено то что нужно.
if FromClient and (ConnectName = 'NAME') and (pck[1]=#$C4) then
begin
//запоминаем его полностью
PaketManora:=pck;
здесь отправка твоего сообщения.

Если не получиться то промониторь пакетхаком что точно шлется на сервер при попытке купить семена.

Doberman
07.07.2009, 12:34
Всё верно.
Ток когда подходит время пишет в личку: попытка задать манор,после чего повисает вместе с игрой ((,хотя покет был на покупку,непойму что не так.

Yegor
07.07.2009, 14:18
Doberman,

Пишет в личку потому что так написано в скрипте
//пишем сами себе в чат - что "ПОПЫТКА"
buf:=hstr('4A AB F6 A0 48 02 00 00 00 2D 00 3E 00 56 00 4F 00 52 00 4F 00 4E 00 37 00 00 00 3F 04 3E 04 3F 04 4B 04 42 04 3A 04 30 04 20 00 41 04 34 04 30 04 42 04 4C 04 00 00');
SendToClient;


а вот почему при отправке этого зависает это хз значит неверный пакет, сравни в пакетхаке с реальным
// отправляем пакет на сдачу манора.
buf:=PaketManora;
SendToServer;

Doberman
16.07.2009, 21:32
Чтот не понятно(
Мож в скрипте чтот поправить над?
// отправляем пакет на сдачу манора.
buf:=PaketManora;
SendToServer;
Этожэ идёт на продажу манора а надо на покупку (или без разницы?)

Yegor
17.07.2009, 05:01
Doberman, разницы нет, я непойму почему только скрипт зависает. Какой сервер?

Doberman
17.07.2009, 12:25
Сервер ц4
http://la2club.com/?act=vote_bonus
Я эт скрипт использую на сдачу манора ток с строкою
//если перехвачен пакет на сдачу манора то
if FromClient and (pck[1]=#$D0) and (pck[2]=#$09) and (pck[3]=#$00) then
begin
//запоминаем его полностью
PaketManora:=pck;
end;
Здаёт идеально,а вот изменив его на покупку он почемуто зависает.

Yegor
17.07.2009, 13:32
Doberman, мистика однако. Я понимаю что оно не здавало бы, но вот почему оно зависает?
Попробуй сделать для проверки следующее.
Перехвати пакет на покупку и сразу же его отошли, проверим зависнет или нет. Ты в скрипте точно больше ничего не менял? Такое ощущение, что то ты намудрил с таймером. Приведи финальный вариант твоего скрипта.
//QaK:если скрипт большой - сделай вложением.

Doberman
17.07.2009, 14:12
Так,вот скрипт в своём орегинале(им задаю манор)
var
PaketManora: string; //Пакет на сдачу манора, который мы отправим серваку зараннее с помощью клиента
// и запомним его для того чтобы вручную не формировать его кодом.
//важно что оправлять его нужно после после объявления об олимпиаде.
//так как в пакете манора используются ИД сессии, которые изменяются
//каждый ровный час.

timer1: TTimer; //таймер контролирующий системное время

StartTime: TDateTime;
EndTime: TDateTime;


x:integer;

procedure Init; //Вызывается при включении скрипта
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer; //
timer1.enabled:=false; // таймер по умолчанию выключен
timer1.interval:=300; // через каждые 0,3сек будем засекать контрольное время сдачи манора

x:=0;
end;

procedure Free; //Вызывается при выключении скрипта
begin
timer1.Free; //освобождаем занимаемую память таймером
end;

//вызывается при срабатывании таймера
procedure OnTimer(Sender: TObject);
begin
//если наступило время сдавать манор и скрипт пока еще не отправил 10 попыток его сдать то
if (time >= EndTime) and (x<11) then
begin
//пишем сами себе в чат - что "ПОПЫТКА"
buf:=hstr('4A AB F6 A0 48 02 00 00 00 2D 00 3E 00 56 00 4F 00 52 00 4F 00 4E 00 37 00 00 00 3F 04 3E 04 3F 04 4B 04 42 04 3A 04 30 04 20 00 41 04 34 04 30 04 42 04 4C 04 00 00');
SendToClient;
// отправляем пакет на сдачу манора.
buf:=PaketManora;
SendToServer;
//счетчик попыток
x:=x+1;
end;
end;


begin

//если перехвачен пакет на сдачу манора то
if FromClient and (pck[1]=#$D0) and (pck[2]=#$09) and (pck[3]=#$00) then
begin
//запоминаем его полностью
PaketManora:=pck;
end;

//если получен пакет об начале олимпиады то
if FromServer and (pck[1]=#$64) and (pck[2]=#$69) and (pck[3]=#$06) then
begin
//засекаем текущее время
StartTime:=time;
//вычисляем время сдачи манора (прибавляем нужное время которое нужно засеч после получения сообщения об илимпиаде)
EndTime:=StartTime + EncodeTime(0,5,52,0); // изменяем и корректируем ето число в формате (ЧЧ,ММ,СС,МС)
//активируем таймер
timer1.enabled:=true;
//а ето- отправка сам себе сообщения о том что ВРЕМЯ ПОШЛО
buf:=hstr('4A AB F6 A0 48 02 00 00 00 2D 00 3E 00 56 00 4F 00 52 00 4F 00 4E 00 37 00 00 00 32 04 40 04 35 04 3C 04 4F 04 20 00 3F 04 3E 04 48 04 3B 04 3E 04 00 00');
SendToClient;
end;

end.

в нём заменил строчку
//если перехвачен пакет на сдачу манора то
if FromClient and (pck[1]=#$D0) and (pck[2]=#$09) and (pck[3]=#$00) then
begin
//запоминаем его полностью
PaketManora:=pck;
end;

на
//если перехвачен пакет на покупку семян то
if FromClient and (ConnectName = 'NAME') and (pck[1]=#$C4) then
begin
//запоминаем его полностью
PaketManora:=pck;
end;
И бльше ничего нетрогал

Yegor
17.07.2009, 15:37
Doberman, понятно почему зависает, твое условие:
if FromClient and (ConnectName = 'NAME') and (pck[1]=#$C4) никогда не выполняется, и когда приходит время программа пытается отправить переменную PaketManora в котрой хз что сейчас находиться. Ты бы добавил:
//если перехвачен пакет на покупку семян то
if FromClient and (ConnectName = 'NAME') and (pck[1]=#$C4) then
begin
//запоминаем его полностью
PaketManora:=pck;
// отправляем клиенту что пакет запомнен
buf:=hstr('4A AB F6 A0 48 02 00 00 00 2D 00 3E 00 56 00 4F 00 52 00 4F 00 4E 00 37 00 00);
writes(buf, 'пакет на покупку запомнен!);
SendToClient;
end;

И ты точно не забыл вместо 'NAME' поставить имя твоего чара?

Doberman
23.07.2009, 02:23
Оки, попробую)

Breadfan
23.07.2009, 09:41
const
bufer='';

var
PaketManora: string;

timer1: TTimer;

StartTime: TDateTime;
EndTime: TDateTime;

x:integer;

procedure Init;
begin
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer;
timer1.enabled:=false;
timer1.interval:=100;

x:=0;
end;

procedure Free;
begin
timer1.Free;
end;

procedure OnTimer(Sender: TObject);
begin

if (time >= EndTime) and (x<600) then
begin
//пишем сами себе в чат - что "ПОПЫТКА"
buf:=hstr('4A AB F6 A0 48 02 00 00 00 2D 00 3E 00 56 00 4F 00 52 00 4F 00 4E 00 37 00 00 00 3F 04 3E 04 3F 04 4B 04 42 04 3A 04 30 04 20 00 41 04 34 04 30 04 42 04 4C 04 00 00');
SendToClientex(bufer);

buf:=PaketManora;
SendToServerex(bufer);

x:=x+1;
end;
end;

begin

if FromClient and (ConnectName=bufer) and (pck[1]=#$C4) then
begin

PaketManora:=pck;
end;

if FromServer and (ConnectName=bufer) and (pck[1]=#$64) and (pck[2]=#$69) and (pck[3]=#$06) then
begin

StartTime:=time;

EndTime:=StartTime + EncodeTime(0,5,40,0);

timer1.enabled:=true;

buf:=hstr('4A AB F6 A0 48 02 00 00 00 2D 00 3E 00 56 00 4F 00 52 00 4F 00 4E 00 37 00 00 00 32 04 40 04 35 04 3C 04 4F 04 20 00 3F 04 3E 04 48 04 3B 04 3E 04 00 00');
SendToClientex(bufer);
end;

end.


Вот такой у меня работал когда-то, сделанный на базе скрипта от Voron