Автоматизация заточки предметов до необходимого уровня by NLObP
Возможности скрипта
--------------------
+ Панель управления;
+ Затачиваем по очереди все предметы с ItemID пока не переломаем
или не заточим. Один предмет всегда остаётся.
Необходимо затариться оружием, заточками и валерьянкой.
Name='NLObP'; //Вписать сюда имя чара
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
Внимание!
Из комбобокса обязательно надо выбрать вещь, чтобы скрипт узнал
ID и количество, только потом ставить напротив галочку.
Галочки снимать не надо, если кончились заточки/вещи - можно сразу идти
покупать и продолжать заточку.
В инвентаре должно быть не менее двух одинаковых затачиваемых вещей, степень заточки значения не имеет
Скрипт распространяется как есть, и я не несу ответственности за то, что ВЫ натворили у себя, его используя.
На пульсе ставь задержку 800 мс, это вроде бы оптимальная, меньше уже начитнает пропускать, а больше - дольше Ну и как ходят слухи то что маг пухи точяться хуже У меня S двуручник заточился до 10 через 30-40 штук примерно, а id лучше смотреть мне кажеться через инвентарь.
Добавлено через 1 минуту
Ещё проще если выкидываешь и поднимаешь вещь, смотришь пакет дропитем, там есть id того что поднял!
__________________
Всё можно починить, если вертеть в руках достаточно долго!
Последний раз редактировалось Denis63RUS, 05.06.2008 в 09:12.
Причина: Добавлено сообщение
За это сообщение Denis63RUS нажился 3 спасибками от:
Народ по делу писать можно и нужно ) если сообщение не будет флудом то оно будет опубликовано и скорей всего сразу будет и ответ
только не надо про шанс точки петь, конкретно в чём проблема и как изменили скрипт, выкладывайте посмотрим
Когда запускаю скрипт (поставил там свой ник и максимальное количество вещей в инвенторе (у моего гнома их 80)), то скрипт выдаёт такую ошибку
Если поставлю другое число в количестве слотов в инвенторе то такую
Не 100%, но проведённой проверкой выяснилось, что вся проблемя в itemsid.ini из комплекта пакетхака. Он не соответствует данным клиента. Я выкладываю в архиве со скриптом правленный под себя itemsid.ini. Дополнительно внесены проверки в скрипт для исключения ошибок.
Добавлено через 2 минуты
Цитата:
Сообщение от Grinch
гы а я думал чё гномик базальт из штанов не достаёт )
Это что-то другое. Опиши подробнее.
Добавлено через 10 минут
Цитата:
Сообщение от shizzza
Простите за глупый вопрос, но подскажите как настроить автозаточку, а точнее скрипт, чтобы точился один weapon, но блесс точками, до определенного значения заточки!
Необходимо затариться оружием, заточками.
1) Name='NLObP'; <---------Вписать сюда имя чара
2) установить константу Interlude в зависимости от типа игры (C4 - false или Интерлюд - true).
3) Сохраняем скрипт и ставим напротив него галочку.
4) Выбираем из списка предмет для заточки и чем точить.
Скрипту всё равно блессед или нет заточка.
5) Ставим напротив галочки, подтверждая выбор (убедитесь в соответствии ItemID и количества!).
6) Жмем кнопку "Start".
Скрипт запускается, если в инвентаре более, чем один выбранный предмет, и точит эти предметы по очереди, до выставленного макс. уровня. В конце всегда остается один предмет.
Добавлено через 4 минуты
Цитата:
Сообщение от Muffler
NLObP, сделай !пожалуйста! возможность редактирования полей "ID предмета" и "Кол-во"! Иначе косяк на двух серверах, у них в пакете неправильно чтото выставлено, не так как ты определяешь и кол-во определяется неправильно. Да и с ID былобы удобнее! Пожалуйста! А то так невозможно ничего делать.
Смысл скрипта тогда теряется. Используй мой предыдущий скрипт без панели управления.
Цитата:
Сообщение от Muffler
Если кто-нибудь знает как это сделать в уже существующем коде подскажите пожалуйста! А то он мне показывает просто космические цифры - количество предметов.
Все данные беруться из серверного пакета 1B=ItemListPacket, надо посмотреть что там приходит. Может быть шифрование трафика?
Добавлено через 2 минуты
Цитата:
Сообщение от Morier
Какие строки нужно изменять кроме Name и max ?
Нужно ли изменять строки типа этой
Код:
ScrollID, ScrollOID:integer;
и если надо, то оставлять параметр integer или как?
Изменять надо только две строчки:
Name='Вписать сюда имя чара';
//установить константу в зависимости от типа игры (С4 или Интерлюд)
interlude=true; //Interlude - true, C4 - false
Как максимум можно увеличить таймер:
timer.interval:=800; //время задержки, уже самый минимум
Всё остальное управление осуществляется с панели.
Добавлено через 1 минуту
Выложил исправленную версию скрипта, и мой itemsid.ini
Добавлено через 18 часов 4 минуты Miler, попробуй сделать свой собственный из данных клиента itemsid.ini, скрипт сообщает тебе, что нет предметов в его itemsid.ini
Список в комбобоксах один и тот же, он должен соответствовать инвентарю.
Добавлено через 1 минуту
Цитата:
Сообщение от Morier
При попытке запуска скрипта вылетает ошибка
Скрипт настроил как в описании написано? Если не ошибаюсь константа NAME не определена, она должна быть равна имени твоего чара, для которого запущен скрипт.
Добавлено через 1 минуту
Цитата:
Сообщение от Morier
А скрипт тестировался на сервере Kamael?
Нет. Потестируй и расскажи нам. Как минимум packets.ini нет для Камаэля.
Добавлено через 1 час 31 минуту
Выложил скрипт с небольшими исправлениями. Тестируйте.
PS: Проверял скрипт на Абисс х300. Инвентарь видит правильно. Сам процесс точки не проверял, нет столько денег.
Добавлено через 3 минуты nikolas666, что именно не работает на твоем сервере? Задавай вопросы. Попробую подсказать, что смогу.
Добавлено через 40 минут
Цитата:
Сообщение от nikolas666
народ я чтото немогу понять что у меня не так, вписываю ид итемов в срипт и сразу весь скрипт летит((подскажите плз что надо исправить чтоб я мог точилку включать- сервер http://la2fantasy.net/index.php?id=reg_false
Не понял вопроса.
Куда вписываешь ID?
У тебя сервер Интерлюд или С4?
Надо исправить константу -> Name='вписать имя чара';
и константу, в зависимости от типа сервера -> Interlude=true/false;
Больше ничего в скрипте не надо исправлять!!!
Если конечно понимашь, что делаешь, то можно.
Дальше, запускаешь скрипт и всё управление идет из панельки. Что у тебя не так, какие ошибки или другое что?
PS: Не выкладывай весь текст скрипта, зачем?! Если, что не понятно, выкладывай непонятный кусок, я объясню.
Добавлено через 7 минут abyabar, попробуй скрипт версии 0.3 с изменениями. Вроде один и тот же предмет раньше точило если маленькая задержка была. Ты таймер не изменял?
Добавлено через 2 минуты
Цитата:
Сообщение от Miler
теперь всё норм тока, когда запускаю скрипт один раз точиться пуха, а на второй пишет что я отминил дейсвие заточки. Если тыкаю сам на заточку то пуха автоматом точиться.
Мне не хватает информации, почему так. Сервер интерлюд? Таймер менял?
Добавлено через 26 минут
Цитата:
Сообщение от nikolas666
вот пишет при запуске точилки все сделал как ты сказал все ровно выдает
Access violation at address 0052b420 in module 'l2phx' read of address 2c30392c
Если не ошибаюсь, такая ошибка появляется, если скрипт запущен не для того чара, который в Name прописан, то есть в клиенте один чар, а скрипт для другого.
Цитата:
Сообщение от nikolas666
но открывает точилку и там я ставлю галочки и опять вылетает ошибки
Variant or safe arry index out of bounds
Галочки надо ставить для подтверждения выбора в комбобоксах, а там я как понимаю нечего выбирать, вот и ошибка.
Скриншот клиента и пакетхака с панелью управления кинь, как выше выкладывали (не весь экран, вырежи лишнее). Может и увижу где ошибка.
Добавлено через 3 минуты
PS: Может наоборот слишком маленькое время таймера стоит, у кого один предмет точит. Поставте побольше в этом месте число
delphi Код:
timer.interval:=800; //время задержки, уже самый минимум
Добавлено через 53 минуты nikolas666, я не вижу, чтобы ты клиент запускал, это ведь не бот.
Запускаешь клиент, доходишь до выбора сервера. Запускаешь пакетхак. В клиенте, выбираешь сервер, чара с именем xXxAfinAxXx, покупаешь оружие, заточки. В пакетхаке, ставишь галочку перед скриптом enchant.
Если всё в порядке то в выборе предмет/заточка будет перечислен твой инвентарь. Выбери предмет - поставь галочку, выбери заточку - поставь галочку. В Уровень Макс.: поставь желаемый максимум заточки. Нажми кнопку START. Сиди смотри. После остановки скрипта докупай оружие/заточки. Нажми кнопку START. Пока не заточишь до нужного уровня.
PS: константу MAX сделай равной 250 а не 4! --->>> max=250;
Добавлено через 1 минуту
А сервер у тебя С4? Я к сожалению не проверял на С4 и 100% работы не гарантирую.
Последний раз редактировалось NLObP, 24.06.2008 в 02:31.
Причина: Добавлено сообщение
procedure Free; //Вызывается при выключении скрипта
begin
ItemBase:=nil;
timer.Free;
end;
procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;
procedure CreateItemBase; //Создает базу ObjectID и ItemID, опять же не проверяет пакет на правильность для экономия ресурсов
var
i,j: integer;
begin
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов
//ItemList:w(window)w(ListCount)w(itemType1:0-wpn/rng/ear/nckl,1-arm/shld,4-itm/qitm/adn)h(ObjectId)i(ItemID)d(count)w(itemType2:0-wpn 1-shld/arm 2-rng/ear/nckl 3-qitm 4-adn 5-itm)w(CustType1)w(isEquipped)h(BodyPart)w(EnchantL evel)w(CustType2)
SetLength(ItemBase,ListCount*2); //размер массива должен быть в 2 раза больше, чем итемов
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем пары ObjectID - ItemID
for i:=0 to ListCount-1 do begin
ItemBase[i*2]:=ReadD(j); //ObjectID
ItemBase[i*2+1]:=ReadD(j); //ItemID
// SendMsg('ObjectID='+IntToStr(ItemBase[i*2])+' ItemID='+IntToStr(ItemBase[i*2+1]));
j:=j+20; //21?
end;
Dump;
end;
procedure UpdateItemBase; //Создает базу ObjectID и ItemID, опять же не проверяет пакет на правильность для экономия ресурсов
var
i, ii, tmp, j, Count, ObjID, ItID, UpdType: integer;
begin
Count:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - ItemID
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
// SendMsg('UpdateItemBase!');
for i:=0 to Count-1 do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j);
ItID:=ReadD(j);
SendMsg('UpdType='+IntToStr(UpdType)+' ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItID));
if (UpdType=3) then begin
for ii:=0 to ListCount-1 do begin
// SendMsg('Проход по ItemBase!');
//находим подходящий предмет
if (ItemBase[ii*2]=ObjID) then begin
ItemBase[ii*2]:=0;
ItemBase[ii*2+1]:=0;
SendMsg('Стираем данные! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItID));
end;
end;
end
else begin
for ii:=0 to ListCount-1 do begin
if (UpdType=1) and (ItemBase[ii*2]=0) then begin
ItemBase[ii*2]:=ObjID;
ItemBase[ii*2+1]:=ItID;
SendMsg('Вносим данные! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItID));
add:=false;
Dump;
exit;
end else if (UpdType=1) then add:=true;
end;
end;
// SendMsg('Проход по UpdateItem!');
j:=j+18; //следующее смещение для действия с предметом 1-добавлен 2-изменен 3-удален
end;
if add=true then begin
ListCount:=ListCount+1; //количество итемов
SetLength(ItemBase,ListCount*2); //размер массива должен быть в 2 раза больше, чем итемов
ItemBase[(ListCount-1)*2]:=ObjID;
ItemBase[(ListCount-1)*2+1]:=ItID;
SendMsg('Добавляем данные! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItID));
add:=false;
end;
Dump;
end;
procedure Dump; //показать базу
var
i,j: integer;
begin
for i:=0 to ListCount-1 do
SendMsg('i='+IntToStr(i)+': ObjID='+IntToStr(ItemBase[i*2])+' - ItemID='+IntToStr(ItemBase[i*2+1]));
end;
function GetObjID(ItemID:integer): integer; //Выдает ObjectID по его ItemID, если ItemID не найден в базе, выдает -1
var
i: integer;
begin
for i:=0 to ListCount-1 do
//находим первый подходящий предмет
if (ItemBase[i*2+1]=ItemID) then begin
Result:=ItemBase[i*2];
Exit;
end;
Result:=-1;
end;
procedure UseItem(ObjectID: integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServer;
end;
procedure RequesEnchantItem(ObjectID: integer);
begin
buf:=#$58;
WriteD(ObjectID);
SendToServer;
end;
procedure TryEnchantWeapon;
begin
if GetObjID(Scroll)=-1 then begin
SendMsg('Нет такого скролла! Прервано!');
timer.enabled:=false;
exit;
end;
UseItem(GetObjID(Scroll));
SendMsg('Scroll='+IntToStr(GetObjID(Scroll)));
if GetObjID(Weapon)=-1 then begin
SendMsg('Нет такого оружия! Прервано!');
timer.enabled:=false;
exit;
end;
RequesEnchantItem(GetObjID(Weapon));
SendMsg('Заточили предмет! Weapon='+IntToStr(GetObjID(Weapon)));
end;
procedure OnTimerHP(Sender: TObject);
begin
TryEnchantWeapon;
end;
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
//социальное действие yes для начало точки
if FromClient and (pck=HStr('1B 06 00 00 00')) then begin
SendMsg('Начинаем точить всё оружие!!!');
timer.enabled:=true;
end;
//социальное действие no для начало точки
if FromClient and (pck=HStr('1B 05 00 00 00')) then begin
SendMsg('Окончили точить всё оружие!!!');
timer.enabled:=false;
end;
//ItemList
if FromServer and (pck[1]=#$1B) then CreateItemBase; //создание базы предметов
if (length(ItemBase)=0) then exit; //если нет базы итемов, скрипт дальше не пустит
//если удалились предметы, стираем в базе предметов пары ObjectID - ItemID
if FromServer and (pck[1]=#$27) then UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета
//************************************************** ***************
//Команды отладки
//************************************************** ***************
//пакет Say2
if FromClient and (pck[1]=#$38) then begin
Cmd:=ReadS(2);
case Cmd of
'1':
begin
pck:='';
Dump;
end;
'2':
begin
pck:='';
TryEnchantWeapon;
Dump;
end;
end;
exit;
end;
//************************************************** ***************
end.
//Автоматизация заточки предметов до необходимого уровня by NLObP
{Затачиваем поочереди все предметы с Weapon ID пока не переломаем или не заточим
Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS"
Необходимо затариться оружием и заточками
Открываем инвентарь для инициализации скрипта
Социальное действие YES начать
Социальное действие NO остановиться
Скрипт распространяется как есть, и я не несу ответственности за то,
что ВЫ натворили у себя, его используя.}
const
Name='NLObP';
Scroll=957; // 957 - ItemID Crystall Scroll Enchant Weapon (Grade D)
Weapon=129; // 129 - ItemID Sword of Revolution
MaxEnchLvl=20; //max уровень заточки
max=250; //max количество предметов в базе
var
// WpnObjID: array[1..maxwpn,1..maxwpn] of integer; //Weapon ObjID
WpnBase: array[1..2,1..max] of integer; //Weapon ObjID,lvl
ScrlBase: array[1..max] of integer; //Scroll ObjID
add: boolean; //прошла заточка?
timer: TTimer;
CurEnchLvl, ColvoWpn, ColvoScrl, CurWpn, CurScrl: integer;
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimerHP;
timer.enabled:=false;
timer.interval:=50; //время задержки
add:=false;
for i:=1 to max do begin
//очищаем масив
WpnBase[1,i]:=0;
WpnBase[2,i]:=0;
end;
//************************************************** ****************************
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
var
i, ss, ww, j, ObjID, ItemID, lvl, ListCount: integer;
begin
ss:=1; //индекс в массиве скроллов
ww:=1; //индекс в массиве предметов
j:=4; //смещение для ListCount
ListCount:=ReadH(j); //количество итемов не должно превышать max!
if ListCount>max then ListCount:=max;
j:=8; //смещение для ObjectID
//Пробегаем по Инвентарю и сохраняем ObjectID соответствующие необходимым ItemID
for i:=1 to ListCount do begin
ObjID:=ReadD(j); //ObjectID
ItemID:=ReadD(j); //ItemID
j:=j+14;
Lvl:=ReadD(j); //Level
case ItemID of
scroll: begin
ScrlBase[ss]:=ObjID;
ss:=ss+1;
//Say('ColvoScrl='+IntToStr(ss));
end;
weapon: begin
WpnBase[1,ww]:=ObjID;
WpnBase[2,ww]:=lvl;
ww:=ww+1;
//Say('ColvoWpn='+IntToStr(ww));
end;
end;
j:=j+2;
end;
ColvoWpn:=ww-1;
ColvoScrl:=ss-1;
Say('>ColvoWpn='+IntToStr(ColvoWpn)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl));
end;
//************************************************** ****************************
procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID
var
i, ii, j, ss, ww, ObjID, ItemID, Lvl, ListCount, UpdType: integer;
begin
ListCount:=ReadH(2); //количество итемов
//Пробегаем по Инвентарю и сохраняем пары ObjectID - Lvl
j:=4; //смещение для действия с предметом 1-добавлен 2-изменен 3-удален
// Say('Апдейт базы!');
for i:=1 to ListCount do begin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j);
ItemID:=ReadD(j);
j:=j+14;
Lvl:=ReadH(j);
// Say('Предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
case UpdType of
1:case ItemID of
weapon: begin
ColvoWpn:=ColvoWpn+1;
//Say('Добавили предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(weapon));
for ii:=1 to max do
if WpnBase[1,ii]=0 then begin WpnBase[1,ii]:=ObjID; WpnBase[2,ii]:=lvl; end;
end;
scroll: begin
ss:=ss+1;
//Say('Добавили скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(scroll));
for ii:=1 to max do
if ScrlBase[ii]=0 then ScrlBase[ii]:=ObjID;
end;
end;
2:case ItemID of
weapon:
for ii:=1 to max do
if WpnBase[1,ii]=ObjID then WpnBase[2,ii]:=lvl;
scroll:
//Say('Внимание! Изменения в скролле!?');
end;
//удален
3:case ItemID of
weapon: begin
ColvoWpn:=ColvoWpn-1;
for ii:=1 to max do
if WpnBase[1,ii]=ObjID then begin WpnBase[1,ii]:=0; WpnBase[2,ii]:=0; end;
//Say('Удаляем предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(weapon));
end;
scroll: begin
ColvoScrl:=ColvoScrl-1;
for ii:=1 to max do
if ScrlBase[ii]=ObjID then ScrlBase[ii]:=0;
//Say('Удаляем скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(scroll));
end;
end;
end;
j:=j+2; //следующее смещение для действия с предметом 1-добавлен 2-изменен 3-удален
end;
Say('>>ColvoWpn='+IntToStr(ColvoWpn)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl));
end;
//************************************************** ****************************
function GetNextWeapon: integer; //Выдает ObjID предмета, если не найден в базе, выдает -1,
//достигли макс уровня заточки -2, подбираем мин текущий уровень заточки -3
var
i: integer;
begin
Result:=-1;
if CurEnchLvl>=MaxEnchLvl then begin
Result:=-2;
exit;
end;
for i:=1 to max do begin
//находим первый подходящий предмет
if (WpnBase[1,i]<>0) and (WpnBase[2,i]=CurEnchLvl) then begin
Result:=WpnBase[1,i];
exit;
end;
end;
CurEnchLvl:=CurEnchLvl+1;
Result:=-3;
end;
//************************************************** ****************************
function GetNextScroll: integer; //Выдает ObjID скролла, если не найден в базе, выдает -1
var
i: integer;
begin
Result:=-1;
for i:=1 to max do begin
//находим первый подходящий предмет
if (ScrlBase[i]<>0) then begin
Result:=ScrlBase[i];
exit;
end;
end;
end;
//************************************************** ****************************
procedure RequesEnchantItem(ObjectID: integer);
begin
buf:=#$58;
WriteD(ObjectID);
SendToServerEx(Name);
end;
//************************************************** ****************************
procedure OnTimerHP(Sender: TObject);
var
wpn, scrl:integer;
begin
if ColvoScrl=0 then begin
Say('Кончились скроллы! Прервано!');
timer.enabled:=false;
exit;
end;
if ColvoWpn=1 then begin
Say('Остался последний предмет! Прервано!');
timer.enabled:=false;
exit;
end;
Scrl:=GetNextScroll;
if scrl=-1 then begin
Say('Нет такой заточки! Прервано!');
timer.enabled:=false;
exit;
end;
Wpn:=GetNextWeapon;
case wpn of
-1: begin
Say('Нет такого предмета! Прервано!');
timer.enabled:=false;
exit;
end;
-2: begin
Say('Достигли максимальный уровень заточки! Прервано!');
timer.enabled:=false;
exit;
end;
-3: begin
//Say('Подбираем текущий уровень заточки!');
timer.enabled:=true;
exit;
end;
end;
//************************************************
UseItem(Scrl);
RequesEnchantItem(Wpn);
//************************************************
Say('Заточили предмет! Weapon='+IntToStr(Wpn));
end;
//************************************************** ****************************
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ****************************
begin
//************************************************** **************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//************************************************** **************************
//социальное действие yes для начало точки
if FromClient and (ConnectName=Name) and (pck=HStr('1B 06 00 00 00')) then begin
CurEnchLvl:=0;
Say('Команда Старт!!!');
timer.enabled:=true;
end;
//************************************************** **************************
//социальное действие no для начало точки
if FromClient and (ConnectName=Name) and (pck=HStr('1B 05 00 00 00')) then begin
Say('Команда Стоп!!!');
timer.enabled:=false;
end;
//************************************************** **************************
//ItemList
if FromServer and (ConnectName=Name) and (pck[1]=#$1B) then CreateItemBase; //создание базы предметов
// if (ColvoWpn=0) or (ColvoScrl=0) then exit; //если нет базы итемов, скрипт дальше не пустит
//************************************************** **************************
//если удалились предметы, стираем в базе предметов пары ObjectID - ItemID
if FromServer and (ConnectName=Name) and (pck[1]=#$27) then UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета
end.
Неизвестные вещи пишет без описания.
Добавлять вещи в itemsid.ini можно непосредственно во время игры, если скрипт включить, то описание добавленной вещи появиться в списке.
Если одежду (оружие) одеть/снять, то скрипт напишет в окне сообщений itemid этой вещи.
Для С4, надо внести изменения в procedure CreateItemBase;
...
было --> if interlude then inc(j,12) else inc(j,8);
надо --> if interlude then inc(j,12) else inc(j,4); //для С4 проверено, спасибо Mulder
Последний раз редактировалось NLObP, 05.07.2008 в 01:32.