сложно ли модифицировать скрипт, чтобы он точил всего 2 веши блессед заточками. допустим поочереди варяца до 13 , 1ая ломается , и точится только она, пока не станет опять 13, и потом опять поочереди?
Скрипт так и задуман. Точатся все предметы начиная с минималоного уровня до самого максимума. Пусть есть 1, 5 и 13 уровня. Точится с 1 до 5, потом два предмета до 13, а затем три с 13 уровня. В конце всегда остается хотябы один предмет.
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;
там нужно поставить "<=", сейчас поднимут сервак проверю.
Добавлено спустя 20 минут 40 секунд:
Re: ДА БУДЕТ БОТ!
именно в это и было дело )
//Автоматизация заточки предметов до необходимого уровня by NLObP
//Затачиваем поочереди все предметы с Weapon ID пока не переломаем или не заточим
//Работа проверена на L2C4 Protocol 660 LocalServer "L2J FORTRESS"
//Необходимо затариться оружием, заточками и валерьянкой
//Открываем инвентарь для инициализации скрипта
//Социальное действие YES начать
//Социальное действие NO остановиться
//Enjoy!
{Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.}
//******************************************************************************
const
Name='DeVolf';
Scroll=959; // ItemID Scroll Enchant Weapon (Grade S)
Weapon=6579; // ItemID Arcana Mace
MaxEnchLvl=10; //max уровень заточки
max=100; //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:=2500; //время задержки
Say('Для инициализации скрипта, откройте инвентарь');
end;
//******************************************************************************
procedure Free; //Вызывается при выключении скрипта
begin
WpnBase:=nil;
ScrlBase:=nil;
timer.Free;
end;
//******************************************************************************
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
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 UseItem(ObjectID: integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
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.
усе подставил всеравно говорить что кончились скролы
Для серверов Интерлюдии, необходимо поправить скрипт в двух метсах, из-за отличий пакетов.
Код:
//Автоматизация заточки предметов до необходимого уровня by NLObP
[skipped]
//******************************************************************************
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
[skipped]
// j:=j+2;
j:=j+10; //заменить на это
[skipped]
end;
//******************************************************************************
procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID
[skipped]
// j:=j+2; //следующее смещение для действия с предметом 1-добавлен 2-изменен 3-удален
j:=j+10; //заменить на это
[skipped]
end;
Скоро писать буду объяснительную.
Ворон ответь плз на вопрос:
в скрипте на качь ботом локомотив есть строка
//MyID:string; //мой ИД
наде ее править? если да, то примерный вид исправленной строки.
Спс за ответ
зачем ее править?
Добавлено спустя 11 минут 8 секунд:
Цитата:
Сообщение от xkor
может сделать каждый скрипт в отдельной теме и все эти темы в новый подфорум положить?, а то первый пост какойто очень большой получается...
да.. наверно так и стоит сделать без шуток... отя я люблю шутитьь но..
при етом в каждом топике будет отдельный скрипт обсуждаться..
тем расплодится- милиоон
и каждая из етих топов просто тупо расплодится
начнутся новые темы...
и старенькие темы со скриптами уедутв в низ ( на вторую или 3-б страницу)
я и ты ето контролировать не можем
единственное что мы можем ето прикрепить тему
но ты хочеш читать там ггде 20 тем прикреплено?
а когда товарищи из топа КУСКИ КОДОВ тоже начнут темы- плодить?
что произойдет?
КОЛАПС!
ТЕРМОЯДЕРНАЯ РЕАКЦИЯ!
__________________
Цитата:
Сообщение от pybukon
прежде чета попросить я немнога раскажу чтоб вы понили как мне плоха
Цитата:
Сообщение от Byrger
А как сделать мой скрипт бесконечным?
Цитата:
Сообщение от XKOR
.. каждый день ионизированной ногой протирает больную)
Цитата:
Сообщение от PsyR
Вылоджите пожалуйста скрипт на рыбалку желательно что бы сам в ВХ клал адаптированый под шоки и так же скрипт на ТТ рец, тоже с диалогами
кому интересно, вот примитивные сурсы на delphi для примитивного бота ловли рыбы в in-game режиме; полезно если на вашем сервере (как на моем бывшем) идет шифрование трафика и такие веши как l2phx бесполезны. пример для ознакомления, полного бота все же не буду выкладывать, кому надо сами доделают, но и этого вполне достаточно для ловли под контролем или для ознакомления.
суть проста, программа перехватывает обработку пакетов рыбалки в engine.dll (приведенные в ней адреса валидны только для клиента С4) и на основе ее "кликает" по панели где расположены значки для ловли рыбки. или просто показывает, что нужно нажать вам, если вы не в автоматическом режиме. да, эта версия не проверяет ID, так что ловите в одиночестве только :)
кому интересно, вот примитивные сурсы на delphi для примитивного бота ловли рыбы в in-game режиме; полезно если на вашем сервере (как на моем бывшем) идет шифрование трафика и такие веши как l2phx бесполезны. пример для ознакомления, полного бота все же не буду выкладывать, кому надо сами доделают, но и этого вполне достаточно для ловли под контролем или для ознакомления.
суть проста, программа перехватывает обработку пакетов рыбалки в engine.dll (приведенные в ней адреса валидны только для клиента С4) и на основе ее "кликает" по панели где расположены значки для ловли рыбки. или просто показывает, что нужно нажать вам, если вы не в автоматическом режиме. да, эта версия не проверяет ID, так что ловите в одиночестве только :)
p.s. если увижу в подполках (читворда или лолчита) это от вашего имени, не сносить кому-то головы, поверте мне :)
Спасибо большое :) А можно еще красивые компонентики TWinXPButton, TL2Button?
А еще лучше конечно же поиметь бы информпацию по клиенту, используемым точкам входам и пр. Я конечно понимаю, что это большая ценность, но вдруг? Вот для сервера С4 например ссылка: http://dll.misie.org/functions.txt
__________________
Цитата:
Сообщение от Stas
...Ну на хрена ты меня посылаешь гууглить или искать 140 страниц описанных где-то комманд, если я уже в сотый раз объясняю, что хочу облегчить труд многим, я же эти доводы подробно описал...