PDA

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


Niksan
17.06.2009, 23:55
етсь два некра. как сделать так, что бы запсутить клиентом одного некра, второго некром прогой, и какой там скрипт нужен, что бы все дейсвтия передовались от клинета основго некра, на второго некра, котрый загружен прогой

хроникни грация парт 2

8tomat8
18.06.2009, 00:17
Niksan, :confused: нифига не понятно! напиши внятние а то никто и не рыпнится помогать

Niksan
18.06.2009, 00:32
хочу гангать двумя некрами, то есть управлять одним некром, а второй дролжен делтаь все то же самое,

Lynx
18.06.2009, 01:27
Такого скрипта нету. Сделать легко. Подключать надо оба окна через phx.
Проверяешь, если пришли пакеты Action, RequestMagicSkillUse, MoveBackwardToLocation и друге по желанию, то отправляешь и другому соединению. Перед тем, как этим заниматься, посмотри, не подходит ли программа wzombie.

Stasrus
18.06.2009, 04:01
второго некром прогой


клиент всеравно нужно запускать

alexteam
18.06.2009, 13:04
если реализовать ответ на нетпинг то его можно пожже и закрыть %)

Niksan
20.06.2009, 13:33
Такого скрипта нету. Сделать легко. Подключать надо оба окна через phx.
Проверяешь, если пришли пакеты Action, RequestMagicSkillUse, MoveBackwardToLocation и друге по желанию, то отправляешь и другому соединению. Перед тем, как этим заниматься, посмотри, не подходит ли программа wzombie.

можно поподробней?))

надо что бы все пакеты отправлялись)

Добавлено через 5 минут
есть же скрипты, типа пишешь в чат еденицу, и второе окно например солит

там что то типа если пакет, содержаший 1 в чате, то второму пакет солить

а тут сразу все пакеты одинаковые посылать надо..

Yegor
20.06.2009, 14:05
если реализовать ответ на нетпинг то его можно пожже и закрыть %)

А если играешь на шоке то и на нет пинг отвечать не надо :D.

Lynx
20.06.2009, 14:19
перед запуском скрипта запусти скрипт отсюда http://coderx.ru/showthread.php?t=206 и выключи второй клиент


begin
if fromclient and not(pck[1]=#$__) then begin //вместо зеленого вставь первый байт пакета netping для твоих хроник.
buf:=pck;
sendtoserverex('имя второго некра');
end;
end.

Niksan
20.06.2009, 18:47
перед запуском скрипта запусти скрипт отсюда http://coderx.ru/showthread.php?t=206 и выключи второй клиент


begin
if fromclient and not(pck[1]=#$__) then begin //вместо зеленого вставь первый байт пакета netping для твоих хроник.
buf:=pck;
sendtoserverex('имя второго некра');
end;
end.

буду пробывать - отпишу пойзже, спасибо за ранее)

Добавлено через 20 минут
//вместо зеленого вставь первый байт пакета netping для твоих хроник.
извините нуба, а где посмотреть, какой у мну первый байт?

alexteam
20.06.2009, 18:56
это просто ответ на нетпинг...
в общем так.. выкладываю скрипт которым пользовался для того чтобы тпшить ботов вслед за основным чаром. т.н. фолловчат.
добавив в него нетпинг, отключение клиентов от пх, фоллов для скилов и следование за основным чаром и будет то что ты хочешь.
писалось для интерлюда. содержит кусок ненужного кода по хранению оайди партимемберов.
//активация social-yes деактивация social-no

var
ControlCharacter : string;
mychars : array [0..100] of string;
objids : array [0..100] of integer;
needFollow : array[0..100] of string;
Charcount : integer;
followchat:boolean;

procedure Init;
var
i : integer;
begin
charcount := 6;
ControlCharacter := 'Panzer';
mychars[0] := 'LastTry';
mychars[1] := 'Dag';
mychars[2] := 'DamageR';
mychars[3] := 'Panzer';
mychars[4] := 'GnoM';
mychars[5] := 'Batarejka';


followchat:= false;
i := 0;
while i < charcount do
begin
objids[i] := 0;
needFollow[i] := '';
inc(i);
end;
end;

procedure Free;
begin

end;

procedure UpdateUserInfo;
var
i : integer;
Character:string;
begin
Character := ReadS(22);
i := 0;
while i < charcount do
begin
if mychars[i] = Character then
objids[i] := readd(18);
inc(I);
end;
end;

function CharacterOID(findname:string):integer;
var
i : integer;
begin
result := 0;
while i < charcount do
begin
if mychars[i] = findname then
begin
result := objids[i];
break;
end;
inc(i);
end;
end;

procedure follow;
var
i : integer;
begin
i := 0;
while i < charcount do
begin
if mychars[i] <> ConnectName then
if objids[i] <> 0 then
needFollow[i] := pck;
inc(i);
end;
end;

var
i:integer;
poz:integer;
text:string;
target:string;

begin
i := 0;
while i < charcount do
begin
if ConnectName = mychars[i] then
if needfollow[i] <> '' then
begin
buf := needfollow[i];
needfollow[i] := '';
SendToServer;
end;
inc(i);
end;

if pck = '' then exit;
if fromserver then
case pck[1] of
#$04:
begin
UpdateUserInfo;
end;

end;


if fromclient then
case pck[1] of
#$04:
begin
if followchat then
Follow;
end;
#$1B:
begin
if ConnectName = ControlCharacter then
if readd(2) = 6 then
followchat := true;
if readd(2) = 5 then
followchat := false;
pck := '';
end;
#$21:
begin
if followchat then
Follow;
end;

end;


end.

i-bell
23.06.2009, 17:17
Перед тем, как этим заниматься, посмотри, не подходит ли программа wzombie.
l2mult ему аналог...
(сорь за отвлечение от темы)

Niksan
23.06.2009, 21:43
это просто ответ на нетпинг...
в общем так.. выкладываю скрипт которым пользовался для того чтобы тпшить ботов вслед за основным чаром. т.н. фолловчат.
добавив в него нетпинг, отключение клиентов от пх, фоллов для скилов и следование за основным чаром и будет то что ты хочешь.
писалось для интерлюда. содержит кусок ненужного кода по хранению оайди партимемберов.
//активация social-yes деактивация social-no

var
ControlCharacter : string;
mychars : array [0..100] of string;
objids : array [0..100] of integer;
needFollow : array[0..100] of string;
Charcount : integer;
followchat:boolean;

procedure Init;
var
i : integer;
begin
charcount := 6;
ControlCharacter := 'Panzer';
mychars[0] := 'LastTry';
mychars[1] := 'Dag';
mychars[2] := 'DamageR';
mychars[3] := 'Panzer';
mychars[4] := 'GnoM';
mychars[5] := 'Batarejka';


followchat:= false;
i := 0;
while i < charcount do
begin
objids[i] := 0;
needFollow[i] := '';
inc(i);
end;
end;

procedure Free;
begin

end;

procedure UpdateUserInfo;
var
i : integer;
Character:string;
begin
Character := ReadS(22);
i := 0;
while i < charcount do
begin
if mychars[i] = Character then
objids[i] := readd(18);
inc(I);
end;
end;

function CharacterOID(findname:string):integer;
var
i : integer;
begin
result := 0;
while i < charcount do
begin
if mychars[i] = findname then
begin
result := objids[i];
break;
end;
inc(i);
end;
end;

procedure follow;
var
i : integer;
begin
i := 0;
while i < charcount do
begin
if mychars[i] <> ConnectName then
if objids[i] <> 0 then
needFollow[i] := pck;
inc(i);
end;
end;

var
i:integer;
poz:integer;
text:string;
target:string;

begin
i := 0;
while i < charcount do
begin
if ConnectName = mychars[i] then
if needfollow[i] <> '' then
begin
buf := needfollow[i];
needfollow[i] := '';
SendToServer;
end;
inc(i);
end;

if pck = '' then exit;
if fromserver then
case pck[1] of
#$04:
begin
UpdateUserInfo;
end;

end;


if fromclient then
case pck[1] of
#$04:
begin
if followchat then
Follow;
end;
#$1B:
begin
if ConnectName = ControlCharacter then
if readd(2) = 6 then
followchat := true;
if readd(2) = 5 then
followchat := false;
pck := '';
end;
#$21:
begin
if followchat then
Follow;
end;

end;


end.



как его переписать под грацию? что нужно заменить? и на что? ссори за нубо вопрос..)

Добавлено через 17 минут
перед запуском скрипта запусти скрипт отсюда http://coderx.ru/showthread.php?t=206 и выключи второй клиент


begin
if fromclient and not(pck[1]=#$__) then begin //вместо зеленого вставь первый байт пакета netping для твоих хроник.
buf:=pck;
sendtoserverex('имя второго некра');
end;
end.

там многа скриптов) каторый иименно?

Добавлено через 4 минуты

begin
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;

if FromClient and (pck[1]=#$1B) and (ReadD(2)=6) then
begin
buf:=#$38;
WriteS('Hello');
WriteD(0);
SendToServer;
end;
end.

вот этот юзал
выходит красная а на полоска, когда запускаю скрипт, на строке NoFreeOnClientDisconnect;

l2phx.3.5.4.105 - юзаю

alexteam
23.06.2009, 22:10
как его переписать под грацию? что нужно заменить? и на что? ссори за нубо вопрос..)
открыть инишки t0.ini и t1.ini....

вот этот юзал
выходит красная а на полоска, когда запускаю скрипт, на строке NoFreeOnClientDisconnect;
http://coderx.ru/showthread.php?t=873

Niksan
24.06.2009, 13:54
открыть инишки t0.ini и t1.ini....


http://coderx.ru/showthread.php?t=873


скинь плз ини файлы в личку

на счет ссылки, я заменил
NoFreeOnServerDisconnect -> NOCLOSECLIENTAFTERSERVERDISCONNECT
NoFreeOnClientDisconnect -> NOCLOSESERVERAFTERCLIENTDISCONNECT

теперь скрипт запускаеться, но после описанного skymanrus'ом

:)
ну я тут попытался их вызвать по нубски типа
procedure NoFreeOnClientDisconnect;
begin
end;

не пашет :(
пишет Ошибка: identifer redeclared 'NoFreeOnClientDisconnect' :cry:

Добавлено спустя 34 минуты 15 секунд:

begin
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;

if FromClient and (pck[1]=#$1B) and (ReadD(2)=6) then
begin
buf:=#$38;
WriteS('Hello');
WriteD(0);
SendToServer;
end;
end.

короч скажу все по порядку вначале загрузил клиент затем грузанул пакет хак зашёл в мир и начал на галочку рядом с этим скриптиком,
скриптик сказал хеллоу когда я нажал YES затем я просто нажал выйти из игры в клиенте и посмотрел на окно пакетхака
а ОН ПРОДОЛЖАЕТ ЛОВИТЬ ПАКЕТЫ !!! И ПАКЕТЫ МОЖНО ДАЖЕ ПОСЫЛАТЬ!!! :shock:
никакие netPING'и пакетхак не останавливают !!!!
и можно вообще о них забыть !
просто наслаждаться !

СПАСИБО xkor !!!! :Yahoo!: :Yahoo!:

короч я в OUT game сижу щас :)

сделал то, что тут написано, но после того как я нажал YES ничгео не произошло, то есть он не сказал Hello, и когда я офф клиент, в пакетхаке написнао что типа соединения нету...
подозреваю что этот срипит напсиан не под грацию?)

Fer123
24.06.2009, 18:30
Но если просто нажать logout то серверу прийдет пакет на запрос logout он отошлет ответ и разорвет соединение и хоть фрейм не закроется пакеты приходить не будут. Чтоб этого небыло надо отослать этот самый ответ клиенту без запроса logout.

Yegor
25.06.2009, 05:34
Но если просто нажать logout то серверу прийдет пакет на запрос logout он отошлет ответ и разорвет соединение и хоть фрейм не закроется пакеты приходить не будут. Чтоб этого небыло надо отослать этот самый ответ клиенту без запроса logout.

Да только клиент на этот самый пакет клиент моментально отвечает серверу пакетом LeaveWorld и сервер все равно разрывает соеденение (проверено). Поэтому надо просто разрывать программно коннект к клиенту и серверу об этом ничего не говорить ;).

NLObP
26.06.2009, 10:41
Вот так в рыбалке у меня сделано, только скрипт после отключения ходить чара заставить не мог, не хватало эмуляции пакетов ValidatePosition от клиента.

if (ConnectName=Name) and FromServer then begin
case pck[1] of
#$D3: begin // D3=NetPing:d(kID) на Нетпинг сервера шлем сохранённый пакет Нетпинга от клиента
if LogOutOk then begin
buf:=NetPing;
SendToServerEx(Name);
end;
end;
end;
end;
//************************************************** **************************
if (ConnectName=Name) and FromClient then begin
case pck[1] of
#$09: begin //C>09=LogoutRequest - выходим ручками из клиента
pck:='';
// шлем s7E=LogOutOk, для отключения клиента
buf:=#$7E;
SendToClientEx(Name);
LogOutOk:=true;
end;
#$A8: begin // C>A8=NetPing:d(kID)d(PING)d(dta)
NetPing:=pck; // запомним его
pck:='';
end;
#$1B: begin
case ReadD(2) of
//социальное действие Yes для начала ловли
6: begin
//не передаем серверу социальное действие
pck:='';
//для версии 3.1.9+ можно отключить клиента
NoFreeOnClientDisconnect;
NoFreeOnServerDisconnect;
LogOutOk:=true;
buf:=#$7E;
SendToClientEx(Name); // отключаем клиент
end;
end;
end;
end;
end;
Ловим пакет пинг от клиента и сохраняем его для дальнейшего использования, после этого можно попробовать отключиться от клиента: стандартно выйти по exit или выполнить соц.действие YES. Скрипт будет отслеживать пакет нетпинг от сервера и слать свой нетпинг в ответ.

Yegor
27.06.2009, 09:50
Мож не в тему просто смешно поэтому напишу. Опять же на Шоке сервер игнорирует пакеты Validateposition и никак на них не отвечает,поэтому в моем миниботе для перемещения достаточно отослать серверу пакет
MoveBackwardToLocation (http://www.la2kings.ru/la2bot/packets.html#MoveBackwardToLocation).