а в чем проблемато ? создаем масив стринговый состоящий из перехваченых пакетов исходящих.. все пакеты сохраняет и килем.. не пропускаем их.. при нажатии на чета- запускаем таймер с маленьким интервалом- который из сохранненного масива всё серверу отдаст.. разве так нельзя?
Добавлено спустя 25 минут 37 секунд:
Re:
Цитата:
Сообщение от mazx
Есть пакет npcinfo начинающийся на 16 потом идет обж ид (как я понял pck[2-5])а за ним номер НПС (как я понял pck[6-9])...
я делаю так
var
a:string
if (FromServer) and (pck[1]=#$16) then begin
дальше нужно получить из шестнадцатиричного десятичное число - номер нпc и присвоить строке, как это сделать?
есть идея ...но не знаю верна ли - a:=inttostr(ReadD(6));
и еще вопрос - подскажите код чтобы при target присвоить переменной номер нпc (не обжект,а npcid вроде)
|
я перевожу из 16 в 10 так:
пример рабочий из самописнаго скрипта.. применяю для мониторинга ХП и МП..:
/*************************СЛЕДИМ ЗА ХП******************************************
//следим за ХП
if FromServer and (pck[1]=#$0e) and (ConnectName = NameKom) then
if (pck[2] + pck[3] + pck[4] + pck[5] = IDKomandos) and (pck[6]=#$04) then
begin
//СОБСТВЕННО ЕТО И ЕСТЬ КОЛ-ВО ХП В ФОРМАТЕ ИНИГЕР ПЕРЕВОД в 10 из 16
CurHPKom:=(ord(pck[15]) * 256 + ord(pck[14]));
//если ХП меньше 70% от шкалы то ХП ЛЬЁТ БАФЕР
if (CurHPKom < round(MaxHPKom*0.7)) then
if (tick1 = 1) then
begin
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
buf:=hstr('2F C1 04 00 00 00 00 00 00 00');
SendToServerEX(NameBot1);
delay(500);
buf:=hstr('04') + IDKomandos + Bot1X + Bot1Y + Bot1Z + hstr('00');
SendToServerEX(NameBot1);
end;
Добавлено спустя 10 минут 34 секунды:
а вот если 4-х байтный стринг содержащий закодированое число может принимать отрицателььное значение то немного сложней.. яделаю так:
CentrKachXex:= ord(CentrKachX[3])*256*256 + ord(CentrKachX[2]) * 256 + ord(CentrKachX[1]);
CentrKachYex:= ord(CentrKachY[3])*256*256 + ord(CentrKachY[2]) * 256 + ord(CentrKachY[1]);
if (CentrKachX[4] = #$FF) then CentrKachXex:=16777215-CentrKachXex;
if (CentrKachY[4] = #$FF) then CentrKachYex:=16777215-CentrKachYex;
4-й байт указатель на минус..
хранить такие числа надо в формате ЕКСЕНДИТ- ето 8-ми байтный интегер учитывающий минус. с ним можно выполнять все функции придуманные для ИНТЕГЕРА.. + - / *
жэлаю удачи
функцию INTTOSTR(xx) применять собственно тут нельзя.. для понимания надо понимать-) о как загнул.. стринговый пакет - что ето?? ето не 16-тиричные числа а набор символов.. ето для простоты визуализации он в 16 системе мониторится.. а так как он имеет формат стринг- значит он в памяти хранится в виде "G@KKK(*&%#45GJKhdмсадвыр7:%;%:@" что то типа таково.. поетому работать с ним с использованием INTTOSTR- нельзя..
жэлаю удачи