Автоматизация заточки предметов до необходимого уровня by NLObP
Возможности скрипта
--------------------
+ Панель управления;
+ Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим. Один предмет всегда остаётся.
Необходимо затариться оружием, заточками и валерьянкой.
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.
В инвентаре должно быть не менее двух одинаковых затачиваемых вещей, степень заточки значения не имеет
Скрипт распространяется как есть, и я не несу ответственности за то, что ВЫ натворили у себя, его используя.
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
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов не должно превышать max!
for i:=1 to maxitems do
if (i<=ListCount) then begin
BaseItems[i,1]:=ReadH(j); //ItemType1
BaseItems[i,2]:=ReadD(j); //ObjectID
BaseItems[i,3]:=ReadD(j); //ItemID
BaseItems[i,4]:=ReadD(j); //LocationSlot
BaseItems[i,5]:=ReadD(j); //Count
BaseItems[i,6]:=ReadH(j); //ItemType2
BaseItems[i,7]:=ReadH(j); //CustomType1
BaseItems[i,8]:=ReadH(j); //isEquipped
BaseItems[i,9]:=ReadD(j); //BodyPart
BaseItems[i,10]:=ReadH(j); //EnchantLevel
BaseItems[i,11]:=ReadH(j); //CustType2
BaseItems[i,12]:=ReadD(j); //AugmentationID
//debugmsg('OID='+inttostr(BaseItems[i,2])+' ID='+inttostr(BaseItems[i,3]));
inc(j,40);
end else for k:=1 to 12 do BaseItems[i,k]:=0; // забиваем нулями
//вносим изменения в чекбоксы
StringList.Clear;
try
for i:=1 to ListCount do begin
try
//StringList.Add(ItemsName[ItemBase[2,i]-1]); //записываем название вещей из инвентаря
StringList.Add(ItemsName.Values[IntToStr(BaseItems[i,3])]); //записываем название вещей из инвентаря
except;
//msg.Lines.Add('Пропускаем! Нет ItemID='+inttostr(BaseItems[i,3])+' в itemsid.ini');
end
end;
except;
//msg.Lines.Add('ошибка в CreateItemBase->StringList.Add()');
//msg.Lines.Add(inttostr(BaseItems[i,3]));
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;
Теперь понято, вот кусок из моего скрипта. Предложенный Вами кусок не работает, выделяет красным строку "for i:=1 to max do begin". Теперь дляменя остается загадкой как подогнать эту часть к моему покету "ItemLiist" (см.выше). На сечет инвенторя: при запуске там нет ни чего, но после заточки ручками пишет (Автоматизация заточки by NLObP для Грации!
Улучшили ItemID=0 ItemOID=0 ItemEnchLvl=0) и после появляется в строке выбора следующее: Забытый клинок 2 шт (на самом деле 20шт), Ивовый посох (незнаю что это и в сумке это нет), потом идут 4 пустые строки, опять непонятный итем и т.д. посщитал все строки(пустые и непонятные), по количеству совпадает с количеством итемов в инвентаре.
И еще вопрос://установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false. Что писать? Уменя ведь Грация Финал.
Предложенный Вами кусок не работает, выделяет красным строку "for i:=1 to max do begin".
- ну это и не удивительно - это как раз яркий пример внутривидовой борьбы версий скриптов, за место в ареале обитания...там переменные разноименные используются просто...ты пакет ItemPacket выложил бы уж свой...только не с ".... кучей итемов", достаточно несколько штук в сумке оставить и все.
Цитата:
Сообщение от IceFloe
Что писать? Уменя ведь Грация Финал.
- соответственно - ничего, это просто след старых версий.
Цитата:
Сообщение от IceFloe
На сечет инвенторя: при запуске там нет ни чего
- при запуске скрипта - у перса инвентарь открывается ?
ЗЫ: Флуд разводим только изза того, что 80% пишушим (лень\некогда\...) изначально выложить свой итемлист блин
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 19.01.2010 в 12:14.
IceFloe, попробуй отсортировать итем лист в порядке возрастания ItemID. Когда писал скрипт у меня было сортировано по ID. Может в этом косяк?
PS: скрипт не предназначен для блессед точек.
Как отсортировывать?
Свитки обычные.
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]
адена, свитки и 2 меча
Цитата:
- при запуске скрипта - у перса инвентарь открывается ?
Ошибка скорее всего происходит изза разной размерности типов данных...в скрипте, для определения количества итемов, используется простое DWord - 4 байта (BaseItems[i,5]:=ReadD(j); //Count ), а в том листке что ты выложил (кстати, это совсем не то что я просил) - показано что используется тип данных размерностью в 8 байт...как вариант - можешь просто вставить пустые сдвиги: ---------
ReadD(j); -----> сдвиг указателя на 4 байта
BaseItems[i,5]:=ReadD(j); //Count
--------- только это надо и в CreateBase и в Update делать...
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 20.01.2010 в 11:52.
про размерность - правильно.. за исключением
word = 2 байта
DWord/integer = 4 байта...
инт64 = 8 байт...
- да я вроде так и написал - используется простое DWord - 4 байта - это ты писать рано бросился я поправил потом ))
- и вообще, я слесарь по профессии технологиям не обучен
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 20.01.2010 в 12:08.
че то на ум вдруг пришло из детства: "...коль сапоги начнет тачать пирожник..." ))
Не,не...я настаиваю на простой вставке сдвига указателя - так там проще будет А то ты сгоряча налетел, всех озадачил прям
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 20.01.2010 в 12:28.
А я вобще инженер по охранно сигнализации =) , а от того что вы описываете просто закипает мозг...
Цитата:
вариант - можешь просто вставить пустые сдвиги:
---------
ReadD(j); -----> сдвиг указателя на 4 байта
BaseItems[i,5]:=ReadD(j); //Count
есле не затруднит напишите всю процедуру ItemList и InventoryUpdate с исправлениями, все што для это нужно я постораюсь предоставить. Совсем я нубка оказывается =(
Ну и как бе хотелось бы собсно узнать сразу че там искать то??Что в сумке блин???Только не ложи уникальные итемы в сумку, наподобие "Нагибаторные штаны админа" и прочую чушь. А то сейчас видно - да, есть фб, а что дальше там - хз, и наугад искать тож как-то не совсем приятно
__________________ На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."
А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Последний раз редактировалось Breadfan, 21.01.2010 в 23:31.