Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг
Войти через OpenID

Скриптинг Форум посвещенный созданию скриптов для L2PacketHack

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 14.03.2010, 21:12   #31
Пользователь
 
Регистрация: 19.02.2010
Сообщений: 49
Сказал Спасибо: 1
Имеет 35 спасибок в 12 сообщенях
Vilson пока неопределено
По умолчанию

Цитата:
Сообщение от 0rfin Посмотреть сообщение
Вот же я спрашивал как инфу выдрать наверно с помощь readd не пойму как он работает. Макс цп 2424
Пакет UserInfo
Ну вот же оно твое сп 78 09 00 00 = 2424 следовательно
MaxCP:=ReadD(657);
CurCP:=ReadD(661);
Vilson вне форума   Ответить с цитированием
Старый 14.03.2010, 21:13   #32
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

Цитата:
MaxCP:=ReadD(657);
CurCP:=ReadD(661);
будет работать только для этого персонажа. и то. пока он титул не сменит. либо кубиков на себя не навешает.
__________________
L2Ext - project closed.

Последний раз редактировалось alexteam, 14.03.2010 в 21:44.
alexteam вне форума   Ответить с цитированием
Старый 14.03.2010, 21:39   #33
Новичок
 
Регистрация: 16.02.2010
Сообщений: 20
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
0rfin пока неопределено
По умолчанию

Заменил в packetsT1.ini ни чо не изменилось, есть еще с4 с5 t0

Добавлено через 11 минут
Цитата:
Сообщение от Vilson Посмотреть сообщение
Ну вот же оно твое сп 78 09 00 00 = 2424 следовательно
MaxCP:=ReadD(657);
CurCP:=ReadD(661);
как ты узнал что 657? это 657 байт по порядку? Я в расшифровке смортю 78 09 00 00 там тупость cudicID какой то

как из StatusUpdate взять?
Код:
18 E0 51 02 10 03 00 00 00 09 00 00 00 E3 12 00 00 0B 00 00 00 8B 07 00 00 21 00 00 00 78 09 00 00

Последний раз редактировалось 0rfin, 14.03.2010 в 21:39. Причина: Добавлено сообщение
0rfin вне форума   Ответить с цитированием
Старый 14.03.2010, 21:50   #34
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

Цитата:
Заменил в packetsT1.ini ни чо не изменилось
молодец. убедись что ты т1 юзаешь, это раз. во вторых, перезапусти пх после правки.. как бэ.

Добавлено через 7 минут
Цитата:
как ты узнал что 657?
при правильном парсинге пакета по инишке детальной расшифровке пакета видно оффсет по которому значение брать.

правда с юзерлист не все так просто.
там 2 строковых типа (имя, титул) и один массив (перечень кубиков на персонаже). т.е. нельзя прописать статически параметр для реадд и чтобы оно работало везде.

да и с статус апдейт тоже не все просто, там цикл. как бэ. т.е. он как минимум может содержать разное кол-во элементов. и не обязательно там будет в наличии цп.
__________________
L2Ext - project closed.

Последний раз редактировалось alexteam, 14.03.2010 в 21:52. Причина: Добавлено сообщение
alexteam вне форума   Ответить с цитированием
Старый 14.03.2010, 22:07   #35
Новичок
 
Регистрация: 16.02.2010
Сообщений: 20
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
0rfin пока неопределено
По умолчанию

В настройках стоит Т1, да я перезапускал л2пх
при правильном парсинге пакета по инишке детальной расшифровке пакета видно оффсет по которому значение брать.
уу как сложно. Ну да видел статус обдейт разный приходит, большой и маленький

Вобще то ищу рабочий или подстоить под свой сервер скрипт автоцп, авто хомяк не пашет, в списке не появляется ник перса

Последний раз редактировалось 0rfin, 14.03.2010 в 22:12.
0rfin вне форума   Ответить с цитированием
Старый 15.03.2010, 04:32   #36
Пользователь
 
Регистрация: 19.02.2010
Сообщений: 49
Сказал Спасибо: 1
Имеет 35 спасибок в 12 сообщенях
Vilson пока неопределено
По умолчанию

Цитата:
Сообщение от alexteam Посмотреть сообщение
да и с статус апдейт тоже не все просто, там цикл. как бэ. т.е. он как минимум может содержать разное кол-во элементов. и не обязательно там будет в наличии цп.
Ну так если не пришло СП в StatusUpdate значит оно и не изменилось, считаем что осталось старое значение.

Цитата:
Сообщение от 0rfin Посмотреть сообщение
как из StatusUpdate взять?
Я же готовый пример выложил как взять.

Добавлено через 3 часа 47 минут
Вобщем не поленился и переписал обработку UserInfo на более универсальную у себя в скриптах, теперь должно работать не зависимо от имени чара, титула и кубиков.

delphi Код:
procedure UserInfo; var   i, CubicsSize, tmpCharObjectId: integer;   tmpMyName, tmpMyTitle: string;    begin   tmpCharObjectId:=ReadD(18);      if CharObjectId=0 then CharObjectId:=tmpCharObjectId;   case tmpCharObjectId of   CharObjectId:   begin     MyCorX:=ReadD(2);    MyCorY:=ReadD(6);    MyCorZ:=ReadD(10);    i:=22;    tmpMyName:=ReadS(i);                 i:=i+48;    MaxHP:=ReadD(i);    CurHP:=ReadD(i);    MaxMP:=ReadD(i);    CurMP:=ReadD(i);           i:= 552 + length(tmpMyName) * 2;    tmpMyTitle:=ReadS(i);    i:= i + 31;    CubicsSize:= ReadH(i);    i:= i + 28 + (CubicsSize * 2);           MaxCP:=ReadD(i);     CurCP:=ReadD(i);              end;       endend;

Последний раз редактировалось Vilson, 15.03.2010 в 04:32. Причина: Добавлено сообщение
Vilson вне форума   Ответить с цитированием
За это сообщение Vilson нажился 4 спасибками от:
Старый 06.04.2010, 16:47   #37
Новичок
 
Регистрация: 20.03.2010
Сообщений: 2
Сказал Спасибо: 3
Имеет 0 спасибок в 0 сообщенях
Infernale пока неопределено
По умолчанию

Из того что нашел на форуме, решил переделать скрипт под эпилог, вот что получилось
delphi Код:
const Name='Infernal'; var    CurHP,MaxHP,CurCP,MaxCP,MyCorX,MyCorY,MyCorZ,MaxMP,CurMP: integer;    CPuse,HPuse,MPuse: string;    i, CubicsSize, CharObjectId, tmpCharObjectId: integer;    tmpMyName, tmpMyTitle: string;            TimerMP,TimerCP,TimerHP: TTimer; procedure Init; //Вызывается при включении скрипта begin   TimerCP:=TTimer.Create(nil);   TimerCP.OnTimer:=@OnTimerCP;   TimerCP.enabled:=false;   TimerCP.interval:=1000//интервал 1сек, т.к. чаще пить CP всеравно не будет, дабы не засорять трафик   TimerMP:=TTimer.Create(nil);   TimerMP.OnTimer:=@OnTimerMP;   TimerMP.enabled:=false;   TimerMP.interval:=1000//интервал 1сек, т.к. чаще пить MP всеравно не будет, дабы не засорять трафик   TimerHP:=TTimer.Create(nil);   TimerHP.OnTimer:=@OnTimerHP;   TimerHP.enabled:=false;   TimerHP.interval:=15000; //интервал 15сек, т.к. действие одной бутылки = 15сек end; procedure OnTimerCP(Sender: TObject); begin   buf:=CPuse;   SendToServerEx(Name); end; procedure OnTimerMP(Sender: TObject); begin   buf:=MPuse;   SendToServerEx(Name); end; procedure OnTimerHP(Sender: TObject); begin   buf:=HPuse;   SendToServerEx(Name); end; procedure Free; //Вызывается при выключении скрипта begin   TimerCP.free;   TimerMP.free;   TimerHP.free;   HPuse:='';   CPuse:=''; end; //основная часть скрипта //вызывается при приходе каждого пакета если скрипт включен begin     //пьем сначала CP, потом HP банку что б запомнить их ID(я решил взять эти пакеты целиком, дабы не усложнять)   if FromClient and  (pck[1]=#$19) and (CPuse='') then CPuse:=pck;   if FromClient and  (pck[1]=#$19) and (CPuse<>pck) and (HPuse='') then HPuse:=pck;   if FromClient and  (pck[1]=#$19) and (CPuse<>pck) and (HPuse<>pck) and (MPuse='') then MPuse:=pck;     if FromServer and (pck[1]=#$32) then   begin     MyCorX:=ReadD(2);    MyCorY:=ReadD(6);    MyCorZ:=ReadD(10);    i:=22;    tmpMyName:=ReadS(i);                 i:=i+48;    MaxHP:=ReadD(i);    CurHP:=ReadD(i);    MaxMP:=ReadD(i);    CurMP:=ReadD(i);           i:= 552 + length(tmpMyName) * 2;    tmpMyTitle:=ReadS(i);    i:= i + 31;    CubicsSize:= ReadH(i);    i:= i + 28 + (CubicsSize * 2);           MaxCP:=ReadD(i);     CurCP:=ReadD(i);              end;        if FromServer and (pck[1]=#$18) then   begin     CurHP:=ReadD(14);     CurCP:=ReadD(30);        CurMP:=ReadD(22);     //   ShowMessage(IntToStr(CurMP)); //если вы используете не грэйтер CP то вместо 200 подставьте кол-во CP сколько восстанавливает 1 банка if (CurCP<MaxCP-200)  then TimerCP.enabled:=true else TimerCP.enabled:=false; if (CurHP<MaxHP)  then TimerHP.enabled:=true else TimerHP.enabled:=false; if (CurMP<MaxMP-2500) then TimerMP.enabled:=true else TimerMP.enabled:=false;      end;   end.
Проблема в том что использование банок начинается не сразу после изменения параметров, а только спустя интервал, заданный в таймере. Для Cp и MP это не критично при задержке в 1 сек, а для HP и в дальнейшем элексиров доставляет неудобства. Как это можно исправить?
Infernale вне форума   Ответить с цитированием
Старый 06.04.2010, 23:11   #38
Местный
 
Аватар для J-Fobos
 
Регистрация: 09.06.2008
Сообщений: 867
Сказал Спасибо: 175
Имеет 468 спасибок в 259 сообщенях
J-Fobos пока неопределено
По умолчанию

Infernale, запустить процедуру юзания банки сразу после/перед включением таймера. Вот так:
Код:
//.........
if (CurMP<MaxMP-2500) then 
beign
OnTimerMP();
TimerMP.enabled:=true;
end 
else 
TimerMP.enabled:=false;
//........

Или еще вариант менять время таймера в самом таймере. Вот так:
Код:
//.........
TimerHP.interval:=1; //интервал 0.001сек
end;

//.........
procedure OnTimerHP(Sender: TObject);
begin
  buf:=HPuse;
  SendToServerEx(Name);
  TimerHP.interval:=15000; //сделали как надо интервал 15сек
end;
//.........
__________________

В любом из нас спит гений. И с каждым днем все крепче.

Переходим на протокол нового поколения jabber

Последний раз редактировалось J-Fobos, 06.04.2010 в 23:22.
J-Fobos вне форума   Ответить с цитированием
За это сообщение J-Fobos нажился спасибкой от:
Старый 07.04.2010, 06:06   #39
Пользователь
 
Регистрация: 19.02.2010
Сообщений: 49
Сказал Спасибо: 1
Имеет 35 спасибок в 12 сообщенях
Vilson пока неопределено
По умолчанию

Два примера тебе уже привели, приведу еще и третий, кусочек из моего скрипта:

delphi Код:
const     MyName           = 'Nooooob';     TargetCheckTime  = 500; //интервал для проверки возможности вернуть таргет после хейта/миража, 0.5 сек             InventorySize    = 180;     GCPReuseTime     = 800;     QHPReuseTime     = 200; //маленький интервал делает практически не убиваемым, 10 юзов * 480 хп = 4800 хп/сек                             //но при этом клиент может тормозить на медленном инете из-за количества быстро отсылаемых пакетов                             //в случае притормаживания надо увеличить интервал срабатывания        GHPReuseTime     = 14500;     MPReuseTime      = 2000;        BSOEReuseTime    = 120000; //!!если в течении двух минут после BSOE ХП не станет больше BSOEUsePercent опять используем BSOE              GCPUsePercent    = 98//% после достижения которого банки перестают использоватся        QHPUsePercent    = 75;        GHPUsePercent    = 97;     MPUsePercent     = 30;     BSOEUsePercent   = 15; //% HP при котором использовать BSOE                                                            //id итемов     GCPItemId        = 5592; //Greater CP Potion          QHPItemId        = 1540; //Quick Healing Potion        GHPItemId        = 1539; //Greater Healing Potion        MPItemId         = 728//Mana Potion     BSOEItemId       = 1538; //BSOE  //............................ procedure StatsUpdate; var   i, tmpMaxHP, tmpCurHP, tmpMaxMP, tmpCurMP, tmpMaxCP, tmpCurCP, tmpCharObjectId :integer; begin   tmpCharObjectId:=ReadD(2);        if (tmpCharObjectId<>CharObjectId) then Exit;   for i:=0 to ReadD(6)-1 do     case pck[i*8+10] of       #$09: tmpCurHP:=ReadD(i*8+14);       #$0A: tmpMaxHP:=ReadD(i*8+14);       #$0B: tmpCurMP:=ReadD(i*8+14);       #$0C: tmpMaxMP:=ReadD(i*8+14);       #$21: tmpCurCP:=ReadD(i*8+14);       #$22: tmpMaxCP:=ReadD(i*8+14);     end;    if (tmpMaxHP<>0) then MaxHP:=tmpMaxHP;    if (tmpCurHP<>0) then CurHP:=tmpCurHP;    if (tmpMaxCP<>0) then MaxCP:=tmpMaxCP;     if (tmpCurCP<>0) then CurCP:=tmpCurCP;           if (tmpMaxMP<>0) then MaxMP:=tmpMaxMP;    if (tmpCurMP<>0) then CurMP:=tmpCurMP;    if (BSOEAutoUse) and (BSOEAmount>1) and (CurHP<>0) and (not TimerBSOE.Enabled) and (CurHP<((MaxHP*BSOEUsePercent)/100)) then    begin     UseItem(MyName, BSOEObjectId);     TimerBSOE.Enabled:=True;       end;              if (PotsAutoUse) then   begin    if (GCPAutoUse) and (GCPAmount>1) and (not TimerGCP.Enabled) and (CurCP<((MaxCP*GCPUsePercent)/100)) then     begin      UseItem(MyName, GCPObjectId);     TimerGCP.Enabled:=True                 end;       if (QHPAutoUse) and (QHPAmount>1) and (CurHP<>0) and (not TimerQHP.Enabled) and (CurHP<((MaxHP*QHPUsePercent)/100)) then    begin     UseItem(MyName, QHPObjectId);     TimerQHP.Enabled:=True                 end;                  if (GHPAutoUse) and (GHPAmount>1) and (CurHP<>0) and (not TimerGHP.Enabled) and (CurHP<((MaxHP*GHPUsePercent)/100)) then    begin            UseItem(MyName, GHPObjectId);     TimerGHP.Enabled:=True;           end;             if (MPAutoUse)   and (MPAmount>1) and (not TimerMP.Enabled) and (CurMP<((MaxMP*MPUsePercent)/100))  then    begin        UseItem(MyName, MPObjectId);     TimerMP.Enabled:=True;           end;              end;              end;

Запостил с секцией const что бы было более понятно о чем речь.

Цитата:
Сообщение от Infernale Посмотреть сообщение
Проблема в том что использование банок начинается
Кстати, при твем "упрощенном" подходе возникнет еще одна проблема - когда у тебя закончатся банки, а скрипт по прежнему будет отправлять ранее сохраненные пакеты на UseItem с уже не существующим id очень велика вероятность схватить бан аккаунта, потому как палево 100%. Советую не упрощать, а делать все по уму с чтением инвентаря, нахождением нужных банок и последующим подсчетом их количества.

Последний раз редактировалось Vilson, 07.04.2010 в 23:07.
Vilson вне форума   Ответить с цитированием
За это сообщение Vilson нажился 3 спасибками от:
Старый 27.04.2010, 00:48   #40
Пользователь
 
Аватар для Liiion911
 
Регистрация: 19.05.2009
Сообщений: 56
Сказал Спасибо: 4
Имеет 3 спасибок в 3 сообщенях
Liiion911 пока неопределено
Смех

Давно не читал форумю понял что щас уже не модно делиться скриптами, каждый ботит и скриптит у себя на ПК и отдать на пользование жалко.

Попробовал написать свое, все что накшел на форуме выкладываю тут:

написал для таких же как 0rfin
запускаем скрипт. либо жмем Соц действие ДА! либо свиток который хз как но появится на паннели во втором ряду в первой ячейке. дальше все по открывшемуся меню ) АЦП забыл, банки небыло.

не пишите что у меня кривые руки.
напишите лучше что сделал не так или сразу выложите готовую версию.

заранее спс ))
Вложения
Тип файла: txt ACP.txt (10.2 Кб, 40 просмотров)

Последний раз редактировалось Liiion911, 27.04.2010 в 00:51.
Liiion911 вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 12:50.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!