Автоматизация заточки предметов до необходимого уровня by NLObP
Возможности скрипта
--------------------
+ Панель управления;
+ Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим. Один предмет всегда остаётся.
Необходимо затариться оружием, заточками и валерьянкой.
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.
В инвентаре должно быть не менее двух одинаковых затачиваемых вещей, степень заточки значения не имеет
Скрипт распространяется как есть, и я не несу ответственности за то, что ВЫ натворили у себя, его используя.
Если не ошибаюсь команда SORT есть, которая сортирует тестовые файлы.
Код:
SORT [/R] [/+n] [/M килобайтов] [/L язык] [/REC символов]
[[диск1:][путь1]имя_файла1] [/T [диск2:][путь2]]
[/O [диск3:][путь3]имя_файла3]
/+n Задает число символов, n, до начала каждого
сравнения. /+3 показывает, что каждое
сравнение будет начинаться с третьего символа
каждой строки. Строки меньше чем n символов
собираются перед всеми остальными строками.
По умолчанию, сравнение начинается с первого
символа каждой строки.
/L[OCALE] язык Перекрывает установленные в системе по умолчанию
язык и раскладку заданными. Пока существует
возможность только одного выбора: ""C"" -
наиболее быстрый способ упорядочивания
последовательности.
Сортировка всегда идет без учета регистра.
/M[EMORY] килобайтов Задает количество основной памяти, используемой
для сортировки, в килобайтах. Размер памяти
должен быть не менее 160КБ. При явном задании
размера памяти именно это количество будет,
использовано невзирая на то, какое количество
основной памяти доступно в системе.
Наилучшей производительности можно добиться, не
задавая размер памяти. По умолчанию, сортировка
выполняется за один проход (без временного
файла), используя максимально доступный размер
памяти. В остальных случаях, сортировка
выполняется за два прохода (с сохранением
частично отсортированных данных во временном
файле), так что количество памяти, используемой
для обоих проходов, - одинаково. По умолчанию,
максимальный объем памяти равен 90% доступной
основной памяти, если входными и выходными
потоками являются файлы на диске, и 45% доступной
основной памяти - иначе.
/REC[ORD_MAXIMUM] символов Определяет максимальное число символов в записи
(по умолчанию 4096, максимальное 65535).
/R[EVERSE] Обратный порядок сортировки; т.е. сортировка
идет от Я до А, и затем от 9 до 0.
[диск1:][путь1]имя_файла1 Определяет имя сортируемого файла. Если оно
опущено, то будет использоваться стандартный
поток ввода. Явное задание сортируемого файла
работает быстрее, чем перенаправление того же
файла в качестве стандартного потока ввода.
/T[EMPORARY]
[диск2:][путь2] Определяет путь к папке, содержащей рабочие
файлы сортировки, в том случае, когда данные
не помещаются в основной памяти. По умолчанию
используется системная временная папка.
/O[UTPUT]
[диск3:][путь3]имя_файла3 Определяет имя файла, в котором сохраняются
отсортированные результаты. Если оно опущено
данные записываются в стандартный поток вывода.
Явное задание файла вывода работает быстрее чем
перенаправление стандартного потока вывода
в этот же файл.
- вот тут - у меня с каких то недавних серверов осталось - смени на inc(j,36);
...черт его знает насколько верно будет - ето полуночная теоретика все
P.S - это только в наИтемЛист пакет...на апдейт - не смотрел...
Если сумка начнет нормально отображать итемы, то вариант Итемапдейт: Оффтоп
PHP код:
procedure InventoryUpdate; //пакет 21, Создает базу ObjectID по ItemID var i, ii, j, k, ListCount, UpdType : integer; ItemType1, ObjectID, ItemID, LocationSlot, Count, ItemType2, CustomType1, isEquipped, BodyPart, EnchantLevel, CustType2, AugmentationID :integer; additem : boolean; begin additem:=true; ListCount:=ReadH(2); //количество итемов // debugmsg('ListCount='+inttostr(ListCount)); j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален for i:=1 to ListCount do begin UpdType:=ReadH(j); ItemType1:=ReadH(j); ObjectID:=ReadD(j); ItemID:=ReadD(j); LocationSlot:=ReadD(j); Count:=ReadD(j); ItemType2:=ReadH(j); CustomType1:=ReadH(j); isEquipped:=ReadH(j); BodyPart:=ReadD(j); EnchantLevel:=ReadH(j); CustType2:=ReadH(j); AugmentationID:=ReadD(j); case UpdType of 1: k:=0; //добавлен новый предмет 2: k:=ObjectID; //изменен предмет в инвентаре 3: begin //удален for ii:=1 to maxitems do if (BaseItems[ii,2]=ObjectID) then begin //debugmsg('удаляем OID='+inttostr(BaseItems[ii,2])+' ID='+inttostr(BaseItems[ii,3])); for k:=1 to 12 do BaseItems[ii,k]:=0; break; end; end; end; for ii:=1 to maxitems do begin if (BaseItems[ii,2]=k) then begin BaseItems[ii,1]:=ItemType1; //BaseItems[ii,2]:=ObjectID; BaseItems[ii,3]:=ItemID; BaseItems[ii,4]:=LocationSlot; BaseItems[ii,5]:=Count; BaseItems[ii,6]:=ItemType2; BaseItems[ii,7]:=CustomType1; BaseItems[ii,8]:=isEquipped; BaseItems[ii,9]:=BodyPart; BaseItems[ii,10]:=EnchantLevel; BaseItems[ii,11]:=CustType2; BaseItems[ii,12]:=AugmentationID; //debugmsg('доб/изм OID='+inttostr(BaseItems[ii,2])+' ID='+inttostr(BaseItems[ii,3])); break; end; end; inc(j,38); end; end;
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 22.01.2010 в 02:33.
ЗЫ: да сортировка ни при чем - постоянно на ГФШ полукривые структуры пакетов - не соответствующие описанному стандарту - то с сумкой намутят, то с таблицей скилов - считая это (как пишут на сайте сервера) - "100% защитой от ботоводства"...хотя на многих лишь разница в типе (int64\Dword) количества итемов
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 23.01.2010 в 02:35.
На сервере грация парт2
Скрипт на заточку для грации работает, но проблема есть. Дело в том что на сервере безопасная точка равна 3 если точить выше небезопасной точкой, то сломается, НО если точить блесс точкой...то оружие при фэйле становится заточено на 5! И если оружие на 6 точнуть блеской и если будет фэил то оружие не изменится, так и останется на 5.
ПРОБЛЕМА В ТОМ, что я точу блесками...и после пары фэйлов...когда оружие становиться снова 5...скрипт и сама программа L2PacketHack зависает...и клиент окна тоже виснет. Что можно сделать?
По идее должно работать если здесь вставить:
CurEnchLvl:=0;
repeat
ItemOID:=GetItemEnchant(ItemID, CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;
По идее должно работать если здесь вставить:
CurEnchLvl:=0;
repeat
ItemOID:=GetItemEnchant(ItemID, CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;
Увы, не помогло.
Во 1х было бы полезно знать куда вставлять код (CurEnchLvl:=0 встречается несколько раз)
Ну а сама проблемма в том что функция GetItemEnchant не объявлена в скрипте
Какую версию используешь? То я написал для 9, а если ниже то найди этот кусок, и где я красным написал вставь
#$6F: if ready then begin //and (readd(2)=itemid)
//ищем подходящий предмет для заточки
timer.enabled:=false; //отключаем пока не найдем предмет для заточки
CurEnchLvl:=0;
repeat
ItemOID:=GetItem(ItemID,CurEnchLvl);
if ItemOID=0 then begin
inc(CurEnchLvl);
Edit2.text:=inttostr(CurEnchLvl);
end;
until ItemOID<>0;