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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 09.02.2012, 20:02   #1
Новичок
 
Регистрация: 20.10.2010
Сообщений: 11
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
Levapishe пока неопределено
По умолчанию Поиск части пакета в пакете!

Добрый день! Обьясните плиз как правильно пользоваться функцией Pos() - поиск подстроки в строке- в моей ситуации или может есть другое решение. Вот сама ситуация:
С сервера приходит пакет. Этот пакет имеет разную длину - она зависит от количества негативных эффектов которые висят на персонаже. я знаю айди конкретного скилла который на меня могут повесить. если на мне нету кроме него никаких негативных эффектов то айди скилла отображается в пакете в начале в определенном месте - к примеру пришел пакет CF 11 22 ВВ ВВ - ВВ ВВ нужный мне айди скилла. в этом случае путем условного оператора If и конкретного ReadD(4) в нашем примере я могу завершить выполнения скрипта - так как все известно.
Теперь проблема - приходит этот же пакет но на мне уже висят негативные ээфекты и пакет может прийти такой CF 11 22 AA BB BB или CF 11 22 ФФ ЙЙ ФФ ВВ ВВ или совсем другой - то есть айди нужного мне скилла ВВ ВВ будет всегда в разном месте и я не могу указать точный ReadD.
Вопрос - как мне определить точное начало расположения скилла? я пробу?если не через Pos то как иначе? Заранее спасибо!
Levapishe вне форума   Ответить с цитированием
Старый 09.02.2012, 22:46   #2
Местный
 
Аватар для J-Fobos
 
Регистрация: 09.06.2008
Сообщений: 867
Сказал Спасибо: 175
Имеет 468 спасибок в 259 сообщенях
J-Fobos пока неопределено
По умолчанию

Можно с помощью pos(), формат функции следующий :
function Pos ( const S1, S2 : string ) : Integer;
Функция возвращает позицию строки S1 в строке S2. Если строка не найдена, возвращается 0.

Более универсальный вариант: в цикле разобрать пакет, на составные части (можно записать их в массив, для дальнейшего использования) и проверить все ид в числовом формате. Лично мне этот вариант нравится больше.
__________________

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

Переходим на протокол нового поколения jabber
J-Fobos вне форума   Ответить с цитированием
За это сообщение J-Fobos нажился 2 спасибками от:
Старый 09.02.2012, 23:58   #3
Новичок
 
Регистрация: 20.10.2010
Сообщений: 11
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
Levapishe пока неопределено
По умолчанию

Хмс спасибо попробую. Я просто думал что через Pos можно узнать с какого байта в пакете начинается айди скилла

Добавлено через 47 минут
C Pos разобрался. еще раз спасибо - думаю это то что надо. теперь другая проблемка как заствить Pos читать весь пакет из переменной PCK?
A:='CC A9';
S:='A9';
if Pos(S,A)=4 then

так функция работает на ура. но как в переменную А вставить значение PCK?

Последний раз редактировалось Levapishe, 09.02.2012 в 23:58. Причина: Добавлено сообщение
Levapishe вне форума   Ответить с цитированием
Старый 10.02.2012, 00:11   #4
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

a := pck;
s := #$a9;

Добавлено через 2 минуты
либо
s := hstr('a9');
__________________
L2Ext - project closed.

Последний раз редактировалось alexteam, 10.02.2012 в 00:11. Причина: Добавлено сообщение
alexteam вне форума   Ответить с цитированием
За это сообщение alexteam нажился 2 спасибками от:
Старый 10.02.2012, 00:19   #5
Новичок
 
Регистрация: 20.10.2010
Сообщений: 11
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
Levapishe пока неопределено
По умолчанию

Сейчас попробую. совсем забыл про #$

УРАА!!! работает)))

Последний раз редактировалось Levapishe, 10.02.2012 в 00:22.
Levapishe вне форума   Ответить с цитированием
Старый 15.02.2012, 00:51   #6
Местный
 
Аватар для Breadfan
 
Регистрация: 29.04.2008
Сообщений: 830
Сказал Спасибо: 80
Имеет 230 спасибок в 169 сообщенях
Breadfan пока неопределено
По умолчанию

pos - плохой вариант...хотя у каждого свое мнение. длина разная пакета с бафами. висеть он может и вначале и в конце строки. да говорили уже - перебрать циклом пакет
__________________
На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."

А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?

Последний раз редактировалось Breadfan, 15.02.2012 в 01:37.
Breadfan вне форума   Ответить с цитированием
За это сообщение Breadfan нажился спасибкой от:
Старый 15.02.2012, 00:56   #7
Новичок
 
Регистрация: 20.10.2010
Сообщений: 11
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
Levapishe пока неопределено
По умолчанию

А какой подскажешь ?
Levapishe вне форума   Ответить с цитированием
Старый 15.02.2012, 01:43   #8
Местный
 
Аватар для Breadfan
 
Регистрация: 29.04.2008
Сообщений: 830
Сказал Спасибо: 80
Имеет 230 спасибок в 169 сообщенях
Breadfan пока неопределено
По умолчанию

конкретнее: что искать, в каком пакете.
__________________
На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."

А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Breadfan вне форума   Ответить с цитированием
Старый 15.02.2012, 10:36   #9
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,224
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию

я так полагаю речь о бафах сопати? то сначала отлавливаем общее количество бафоф, а потом уже сам перебор... где-то у меня был кусочек...

Добавлено через 8 минут
PHP код:
 if FromServer and (pck[1]=#$EE) //перебор бафоф сопати
 
then begin
  
    countbaf
:= readd(10); //количество бафоф
    
baf1:=14;
    
baf2:=15;
    
baf3:=16;
    
baf4:=17;
    
base1baf:=baf1+(10*countbaf);
    
idbafa:=pck[baf1]+pck[baf2]+pck[baf3]+pck[baf4];
    
    
sovpadenie:=0;
    
    
repeat
    
       
if (idbafa=HStr('92 04 00 00'))  //анчор
       
then begin 
          
//buf:=HStr('37 00 00');    //сброс таргета
          //SendToServer;
          
idtela:=pck[6]+pck[7]+pck[8]+pck[9];
          
buf:=HStr('04 ') + idtela;
          
SendToServer;
          
rabota:='anchor';
          
sovpadenie:=1;
       
end;
       
       if ((
idbafa=HStr('2D 04 00 00')) or (idbafa=HStr('49 04 00 00'))) and (idsvitka <> '1')  //сон + орковский сон
       
then begin
         
          
//buf:=HStr('37 00 00');       //сброс таргета
          //SendToServer;  
          
idtela:=pck[6]+pck[7]+pck[8]+pck[9];
          
buf:=HStr('04 ') + idtela;
          
SendToServer;
        
          
rabota:='svitok';
          
sovpadenie:=1;          
       
end;

       
baf1:= baf1 10;
       
baf2:= baf2 10;
       
baf3:= baf3 10;
       
baf4:= baf4 10;
       
idbafa:=pck[baf1]+pck[baf2]+pck[baf3]+pck[baf4];

    
until baf1 base1baf;
    
    
end
с4, примитивно, и таргет например работает "палевно" всего лишь айди таргета кидает, без координат.
айди свитка - это он до этого определил свиток пробуждения и запомнил.
перебирает баф сопати и если видит сон мага или сон орка - берет в таргет этого сопати и тыкает свиток пробуждения. если увидит анчор на чаре - таргет на него, тыкает пурифай. точней не тыкает скилы, а запускает работу по тыканию. суть в том, что если сразу тыкать пурифай сработает одноразово. а например если чар стоят в отдалении? будет акшин фейл и бот встанет тупо. а тут работа - он через каждые n секунд по таймеру тыкает пурифай.
__________________
хочу картинку в подпись!

Последний раз редактировалось SeregaZ, 15.02.2012 в 10:36. Причина: Добавлено сообщение
SeregaZ вне форума   Ответить с цитированием
За это сообщение SeregaZ нажился спасибкой от:
Старый 15.02.2012, 18:46   #10
Новичок
 
Регистрация: 20.10.2010
Сообщений: 11
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
Levapishe пока неопределено
По умолчанию

По началу я думал что понадобится точное расположение айдишки скилла - но в итоге мне понадобилось всего лишь его наличие в составе пакета.
Ну как мне кажется то Pos вполне справился в моем случае - вот кусок кода
if FromServer and (pck[1]=#$XX) then
begin
A:=pck;
S:=#$AA#$DD;
if Pos(S,A)<>0 then

То есть мне нужна была только проверка на наличие #$AA#$DD (айди скилла) в приходящем пакете - если она не равно 0 - значит он есть и это приводит к дальнейшей активации скрипта.
Всем еще раз спасибо за отклик, очень приятно что тут могут помочь советом и кодом)
Levapishe вне форума   Ответить с цитированием
Ответ

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


Опции темы
Опции просмотра

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

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


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

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

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