Автоматизация заточки предметов до необходимого уровня by NLObP
Возможности скрипта
--------------------
+ Панель управления;
+ Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим. Один предмет всегда остаётся.
Необходимо затариться оружием, заточками и валерьянкой.
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.
В инвентаре должно быть не менее двух одинаковых затачиваемых вещей, степень заточки значения не имеет
Скрипт распространяется как есть, и я не несу ответственности за то, что ВЫ натворили у себя, его используя.
я с начала читал, просто в скрипты не вглядывался. Не смотрел, что переделывали в выложенных NLObPом скриптах на точку.
Цитата:
Сообщение от Breadfan
нет похоже там же сказано - "его дополнения, изменения" .....там вообще блока объявления переменных нету - что является инновацией в области языков программирования...компилятор сам догадывается что, и как ему использовать
да, не была задана CurEnchLvl, моя ошибка не посмотрел. А весь скрипт толку выкладывать, копипастом заниматься???
Цитата:
Сообщение от PeageHT
плз обьесните скрипт работает но када блесками пыхает дальше нехочет работать и все зависает P.S. скидываеться не на 0 а на 3
Я же написал ::::
Цитата:
Сообщение от newworld
Решил проблему по примерам со 3й страницы!!!
Вообщем PeageHT прочитай первые страницы и в скрипты изменненые вглядись может тебе тоже в голову придет что-то
Последний раз редактировалось newworld, 15.01.2010 в 13:43.
да, не была задана CurEnchLvl, моя ошибка не посмотрел. А весь скрипт толку выкладывать, копипастом заниматься???
- вообще-то, необходимо полностью, мало ли - ты гдето просто опечатку допустил и все, объявил переменную, но имя чуть другое дал - этого не увидеть без просмотра скрипта целиком
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Тему я прочитал но решение свой проблемы я так и не нашол..
Заключается она в следующем: криво отображается инвентарь в ComboBox, присудствую пустые строки и не существующие предметы, нужных мне предметов вообще нету.
Использую клиент Gracia Final, хочу заточить "Забытый клинок"(их 30 штук в сумке) обычными свитками(их 1000).
Имя в скрипте я поменял на свое, количество слотов в инвентаре тоже поменял.
В процессе изучения темы нашол следующие ошибки и пути их решеня: itemsID.ini не найден.
Заметил что в L2PacketHack версии 3.5.3 фаилик ItemsID лежит не в крневой папке (как в предыдущих версиях), а в папке \settings. В скрипте добавил следующее:
Код:
ItemsName:=TStringList.Create;
try
ItemsName.LoadFromFile('.\settings\itemsid.ini');
except
msg.Lines.Add('itemsid.ini не найден!');
exit;
end;
ошибка ушла но итемы все равно не видет.
Далее предлогалось проверить ItemsID в L2PacketHack на соответствие с клиентом:
Вытащил из файла клиента itemname-ru.dat следующие строки..
959 Свиток: Зачаровать Оружие (S) "Улучшает оружие Ранга S. Одноручный меч, одноручная дубина, кинжал, копье: Ф. Атк. +5. Двуручный меч, двуручная дубина, парные клинки, кастеты: Ф. Атк. +6. Луки: Ф. Атк +10. Все оружие: М. Атк. +4. При улучшении оружия до +4 и выше бонус к Ф. Атк. и М. Атк. удваивается. Безопасное улучшение: +3." -1 0 0 0 0 0 1
сравнил найденное с ItemsID.ini в L2PacketHack
Код:
959=Свиток: Зачаровать Оружие (S)
6583=Забытый Клинок Фокусировка
Далее говорилось об ошибках в пакетах ItemList
вот мой ItemList:
Код:
0x11 (ItemList)
Размер: 2117+2
Время прихода: 12:15:14:281
0002 h ShowWindow: 1 (0x0001)
0004 h ItemCount: 33 (0x0021)
[Начало повторяющегося блока 1/33]
0006 h ItemTypeID: 4 (0x0004)
0008 d ObjectID: 268577286 (0x10022A06)
000C d ItemID: Адена ID:57 (0x0039) (0x00000039)
0010 d LocationSlot: 0 (0x00000000)
0014 q Amount: 36860000000
001C h ItemType2: 4 (0x0004)
001E h CustomType1: 0 (0x0000)
0020 h isEquipped: 0 (0x0000)
0022 d BodyPart: 0 (0x00000000)
0026 h EnchantLevel: 0 (0x0000)
0028 h CustType2: 0 (0x0000)
002A d AugmentID: 0 (0x00000000)
002E d Mana: -1 (0xFFFFFFFF)
0032 h AttackElement: 65534 (0xFFFE)
0034 h AttackElementPower: 0 (0x0000)
0036 h FireDefElementPower: 0 (0x0000)
0038 h WaterDefElementPower: 0 (0x0000)
003A h WindDefElementPower: 0 (0x0000)
003C h EarthDefElementPower: 0 (0x0000)
003E h HolyDefElementPower: 0 (0x0000)
0040 h UnholyDefElementPower: 0 (0x0000)
0042 d RemainingTime: -1 (0xFFFFFFFF)
0046
[Конец повторяющегося блока 1/33]
[Начало повторяющегося блока 2/33]
0046 h ItemTypeID: 4 (0x0004)
0048 d ObjectID: 268495620 (0x1000EB04)
004C d ItemID: Свиток: Зачаровать оружие (S) ID:959 (0x03BF) (0x000003BF)
0050 d LocationSlot: 1 (0x00000001)
0054 q Amount: 1008
005C h ItemType2: 5 (0x0005)
005E h CustomType1: 0 (0x0000)
0060 h isEquipped: 0 (0x0000)
0062 d BodyPart: 0 (0x00000000)
0066 h EnchantLevel: 0 (0x0000)
0068 h CustType2: 0 (0x0000)
006A d AugmentID: 0 (0x00000000)
006E d Mana: -1 (0xFFFFFFFF)
0072 h AttackElement: 65534 (0xFFFE)
0074 h AttackElementPower: 0 (0x0000)
0076 h FireDefElementPower: 0 (0x0000)
0078 h WaterDefElementPower: 0 (0x0000)
007A h WindDefElementPower: 0 (0x0000)
007C h EarthDefElementPower: 0 (0x0000)
007E h HolyDefElementPower: 0 (0x0000)
0080 h UnholyDefElementPower: 0 (0x0000)
0082 d RemainingTime: -1 (0xFFFFFFFF)
[Конец повторяющегося блока 2/33]
[Начало повторяющегося блока 3/33]
0086 h ItemTypeID: 0 (0x0000)
0088 d ObjectID: 268578422 (0x10022E76)
008C d ItemID: Забытый Клинок ID:6583 (0x19B7) (0x000019B7)
0090 d LocationSlot: 2 (0x00000002)
0094 q Amount: 1
009C h ItemType2: 0 (0x0000)
009E h CustomType1: 0 (0x0000)
00A0 h isEquipped: 0 (0x0000)
00A2 d BodyPart: 128 (0x00000080)
00A6 h EnchantLevel: 2 (0x0002)
00A8 h CustType2: 0 (0x0000)
00AA d AugmentID: 0 (0x00000000)
00AE d Mana: -1 (0xFFFFFFFF)
00B2 h AttackElement: 65534 (0xFFFE)
00B4 h AttackElementPower: 0 (0x0000)
00B6 h FireDefElementPower: 0 (0x0000)
00B8 h WaterDefElementPower: 0 (0x0000)
00BA h WindDefElementPower: 0 (0x0000)
00BC h EarthDefElementPower: 0 (0x0000)
00BE h HolyDefElementPower: 0 (0x0000)
00C0 h UnholyDefElementPower: 0 (0x0000)
00C2 d RemainingTime: -1 (0xFFFFFFFF)
[Конец повторяющегося блока 3/33]
[Начало повторяющегося блока 4/33]
00C6 h ItemTypeID: 0 (0x0000)
00C8 d ObjectID: 268578354 (0x10022E32)
00CC d ItemID: Забытый Клинок ID:6583 (0x19B7) (0x000019B7)
00D0 d LocationSlot: 3 (0x00000003)
00D4 q Amount: 1
00DC h ItemType2: 0 (0x0000)
00DE h CustomType1: 0 (0x0000)
00E0 h isEquipped: 0 (0x0000)
00E2 d BodyPart: 128 (0x00000080)
00E6 h EnchantLevel: 3 (0x0003)
00E8 h CustType2: 0 (0x0000)
00EA d AugmentID: 0 (0x00000000)
00EE d Mana: -1 (0xFFFFFFFF)
00F2 h AttackElement: 65534 (0xFFFE)
00F4 h AttackElementPower: 0 (0x0000)
00F6 h FireDefElementPower: 0 (0x0000)
00F8 h WaterDefElementPower: 0 (0x0000)
00FA h WindDefElementPower: 0 (0x0000)
00FC h EarthDefElementPower: 0 (0x0000)
00FE h HolyDefElementPower: 0 (0x0000)
0100 h UnholyDefElementPower: 0 (0x0000)
0102 d RemainingTime: -1 (0xFFFFFFFF)
0106
[Конец повторяющегося блока 4/33]
не до конца конечно, но там вроде одно и тоже...
Каки здесь могут быть ошибки и как их исправить???
И какие есть еще способы решения?
И еще eL2Walker инвентарь види также криво
кусок своего скрипта на заточку - в котором читается инвентарь и его апдейт - выложи
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Это кусок где отправляется пакет запрос списка инвентаря, а сама процедура чтения инвентаря здесь - procedure ItemList, а его апдейт здесь - procedure InventoryUpdate;
procedure ItemList;
{Создаем базу Items}
//11=ItemList:h(ShowWindow)h(ListSize:Loop.01.0021)h(ItemType1)d(ObjectID)
// d(ItemID:Get.Func01)d(LocationSlot)d(Count)h(ItemType2)h(CustomType1)
// h(isEquipped)d(BodyPart)h(EnchantLevel)h(CustType2)d(AugmentationID)
// d(Mana)d(AttackAttrElement)d(AttackAttrElementVal)d(DefAttrFire)
// d(DefAttrWater)d(DefAttrWind)d(DefAttrEarth)d(DefAttrHoly)d(DefAttrUnholy)
var
i, j, k: integer;
ListCount: integer;
begin
и
Код:
procedure InventoryUpdate; //пакет 27, Создает базу 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
procedure ItemList;
{Создаем базу Items}
//11=ItemList:h(ShowWindow)h(ListSize:Loop.01.0021)h(ItemType1)d(ObjectID)
// d(ItemID:Get.Func01)d(LocationSlot)d(Count)h(ItemType2)h(CustomType1)
// h(isEquipped)d(BodyPart)h(EnchantLevel)h(CustType2)d(AugmentationID)
// d(Mana)d(AttackAttrElement)d(AttackAttrElementVal)d(DefAttrFire)
// d(DefAttrWater)d(DefAttrWind)d(DefAttrEarth)d(DefAttrHoly)d(DefAttrUnholy)
var
i, j, k: integer;
ListCount: integer;
begin
эти куски?
- вот это вот целиком, если можно - именно эта процедура создает твой список итемов в сумке, вторая отвечает только за апдейт. И уточни насколько полностью не видит итемлист - весь абсолютно или начиная со 2го итема в списке ошибочно выводит?
Добавлено через 10 минут
Я нашел вроде чегото у себя - но не факт что это именно от финала, выглядит довольно жутко:
rocedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
//1B=ItemListPacket:w(window)w(ListCount)w(itemType1)h(ObjectID)i(ItemID)d(count)w(itemType2)w(CustType1)w(isEquipped)d(BodyPart)w(EnchantLevel)w(CustType2)d(Augment)d(--)
var
i, j, ListCount: integer;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase[1,i]:=0; //OID
ItemBase[2,i]:=0; //ID
ItemBase[3,i]:=0; //kol-vo
ItemBase[4,i]:=0; //lvl
end;
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов не должно превышать max!
//if ListCount>maxitems then msg.Lines.Add('Внимание! Не все вещи влезли в массив. ListCount>Max='+IntToStr(ListCount)+'/'+IntToStr(maxitems));
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
for i:=1 to ListCount do begin
itemBase[1,i]:=ReadD(j); //OID
itemBase[2,i]:=ReadD(j); //ItemID
//-------Изменен формат пакета в камаеле
ReadD(j);
//---------------------------------
itemBase[3,i]:=ReadD(j); //кол-во
inc(j,10);
itemBase[4,i]:=ReadH(j);//EnchantLevel
msg.Lines.Add('i='+inttostr(i)+' ItemOID='+IntToStr(ItemBase[1,i])+' ItemID='+IntToStr(ItemBase[2,i])+' ItemKol='+IntToStr(ItemBase[3,i])+' ItemLVL='+IntToStr(ItemBase[4,i]));
if interlude then inc(j,44) else inc(j,8); // так же изменены смещения в связи с добавлением новых свойств итемов
msg.Lines.Add('j='+inttostr(j));
end;
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(ItemBase[2,i])]); //записываем название вещей из инвентаря
except;
msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(ItemBase[2,i])+' в itemsid.ini');
end
end;
except;
msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
msg.Lines.Add(inttostr(ItemBase[2,i]));
exit;
end;
if not CheckBoxItem.Checked then begin //наполняем комбобокс
with ComboBoxItem do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
if not CheckBoxScroll.Checked then begin //наполняем комбобокс
with ComboBoxScroll do
begin
Items.Clear;
Items.Assign(StringList);
ItemIndex:=0;
end;
end;
end;
PS: никогда не доверяйте комментариям в скрипте
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 19.01.2010 в 02:16.
Причина: Добавлено сообщение