вопрос номер 1.
Что нужно написать в скрипте что бы это выполнялось.
я хочу совместить скрипт на автоматическую заточку оружия, с автомотической обмена КОЛоф на аденки и покупкой Ы вип свитков
вот сам собственно скрипт на заточку оружия:
PHP код:
//Автоматизация заточки предметов до необходимого уровня
program zatochka_IL;
{Затачиваем поочереди все предметы с WeaponID пока не переломаем или не заточим
Работа проверена на локальном Интерлюда сервере
Необходимо затариться оружием, заточками и валерьянкой.
Социальное действие YES - начать заточку предметов
Социальное действие NO - остановиться
Enjoy!
Скрипт распространяется как есть, и я не несу ответственности за то, что
ВЫ натворили у себя, его используя.}
const
Name='Niksan'; //Вписать сюда имя чара
ScrollID=6577; //957 ScrollID скролла заточки
ItemID=6580; //129 ItemIDID затачиваемого предмета
MaxEnchLvl=15; //уровень заточки который требуется достич
max=200; //количество слотов в инвентаре чара, максимально - 250
var
ItemBase: array[1..2,1..max] of integer; //ItemID ObjID, lvl
ScrollBase: array[1..max] of integer; //Scroll
add: boolean; //прошла заточка?
timer: TTimer;
CurEnchLvl, ColvoItem, ColvoScrl, CurItem, CurScrl: integer;
SocialID:integer; // вспомогательная
procedure Init; //Вызывается при включении скрипта
var
i:integer;
begin
//Enchant:=false;
CurEnchLvl:=0;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimerHP;
timer.enabled:=false;
timer.interval:=1500; //время задержки
add:=false;
for i:=1 to max do begin
//очищаем масив
//Say('очищаем масив');
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
end;
//******************************************************************************
procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID
var
i, ss, ww, j, ObjID, ItmID, 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
ItmID:=ReadD(j); //ItemID
j:=j+14;
Lvl:=ReadD(j); //Level
case ItmID of
ScrollID: begin
ScrollBase[ss]:=ObjID;
inc(ss);
Say('ColvoScrl='+IntToStr(ss));
end;
ItemID: begin
ItemBase[1,ww]:=ObjID;
ItemBase[2,ww]:=lvl;
inc(ww);
Say('ColvoItem='+IntToStr(ww));
end;
end;
j:=j+10;
end;
ColvoItem:=ww-1;
ColvoScrl:=ss-1;
Say('>ColvoItem='+IntToStr(ColvoItem)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl));
end;
//******************************************************************************
procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID
var
i, ii, j, ss, ww, ObjID, ItmID, 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);
ItmID:=ReadD(j);
j:=j+14;
Lvl:=ReadH(j);
Say('Предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
case UpdType of
1:case ItmID of
ItemID: begin
ColvoItem:=ColvoItem+1;
Say('Добавили предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
for ii:=1 to max do
if ItemBase[1,ii]=0 then begin ItemBase[1,ii]:=ObjID; ItemBase[2,ii]:=lvl; end;
end;
ScrollID: begin
ss:=ss+1;
Say('Добавили скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ScrollID));
for ii:=1 to max do if ScrollBase[ii]=0 then ScrollBase[ii]:=ObjID;
end;
end;
2:case ItmID of
ItemID:
for ii:=1 to max do
if ItemBase[1,ii]=ObjID then ItemBase[2,ii]:=lvl;
ScrollID:
Say('Внимание! Изменения в скролле!?');
end;
//удален
3:case ItmID of
ItemID: begin
ColvoItem:=ColvoItem-1;
for ii:=1 to max do
if ItemBase[1,ii]=ObjID then begin ItemBase[1,ii]:=0; ItemBase[2,ii]:=0; end;
Say('Удаляем предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID));
end;
ScrollID: begin
ColvoScrl:=ColvoScrl-1;
for ii:=1 to max do
if ScrollBase[ii]=ObjID then ScrollBase[ii]:=0;
Say('Удаляем скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ScrollID));
end;
end;
end;
j:=j+10; //следующее смещение для действия с предметом 1-добавлен 2-изменен 3-удален
end;
Say('>>ColvoItem='+IntToStr(ColvoItem)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl));
end;
//******************************************************************************
function GetNextItemID: 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 (ItemBase[1,i]<>0) and (ItemBase[2,i]<=CurEnchLvl) then begin
Result:=ItemBase[1,i];
exit;
end;
end;
inc(CurEnchLvl);
Result:=-3;
end;
//******************************************************************************
function GetNextScroll: integer;
//Выдает ObjID скролла, если предмет не найден в базе, выдает -1
var
i: integer;
begin
Result:=-1;
for i:=1 to max do begin
//находим первый подходящий предмет
if (ScrollBase[i]<>0) then begin
Result:=ScrollBase[i];
exit;
end;
end;
end;
//******************************************************************************
procedure UseItem(ObjectID: integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;
//******************************************************************************
procedure RequestEnchantItem(ObjectID: integer);
begin
buf:=#$58;
WriteD(ObjectID);
SendToServerEx(Name);
end;
//******************************************************************************
procedure OnTimerHP(Sender: TObject);
var
Item, scrl:integer;
begin
if ColvoScrl=0 then begin
Say('Кончились скроллы! Прервано!');
timer.enabled:=false;
exit;
end;
if ColvoItem=1 then begin
Say('Остался последний предмет! Прервано!');
timer.enabled:=false;
exit;
end;
Scrl:=GetNextScroll;
if scrl=-1 then begin
Say('Нет такой заточки! Прервано!');
timer.enabled:=false;
exit;
end;
Item:=GetNextItemID;
case Item 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);
RequestEnchantItem(Item);
//************************************************
Say('Заточили предмет! ItemID='+IntToStr(Item));
end;
//******************************************************************************
// вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
//****************************************************************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//****************************************************************************
if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
SocialID:=ReadD(2);
case SocialID of
//социальное действие Yes для начала затачивания
6: begin
CurEnchLvl:=0;
Say('Команда Старт!!!');
timer.enabled:=true;
exit;
end;
//социальное действие No для окончания
5: begin
Say('Команда Стоп!!!');
timer.enabled:=false;
exit;
end;
end;
end;
//****************************************************************************
if FromServer then
case pck[1] of
//Пакет ItemList
#$1B: CreateItemBase; //создание базы предметов
//если удалили предметы, стираем в базе предметов пары ObjectID - ItemID
#$27: UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета
end;
end.
теперь вопрос номер 2. как это осуществить.
Я думаю что по истечению заточек (я точу тоьлко блэзами) нужно что бы КОЛы поменялись на аденки, а на аденки купились точки, и потом снова началось заточка оружия.... Зацикливание если будет, мне как то это мало волнует...))) (думаю в коцне скрипта (уже после очередной закупки точек) можно поставить соц действия YES , и он о5 начнет точить)
//Автоматизация заточки предметов до необходимого уровня program zatochka_IL;
{Затачиваем поочереди все предметы с WeaponID пока не переломаем или не заточим
Работа проверена на локальном Интерлюда сервере
Необходимо затариться оружием, заточками и валерьянкой.
Социальное действие YES - начать заточку предметов Социальное действие NO - остановиться
Enjoy!
Скрипт распространяется как есть, и я не несу ответственности за то, что ВЫ натворили у себя, его используя.}
const Name='Niksan'; //Вписать сюда имя чара ScrollID=6577; //957 ScrollID скролла заточки ItemID=6580; //129 ItemIDID затачиваемого предмета MaxEnchLvl=15; //уровень заточки который требуется достич max=200; //количество слотов в инвентаре чара, максимально - 250
var ItemBase: array[1..2,1..max] of integer; //ItemID ObjID, lvl ScrollBase: array[1..max] of integer; //Scroll add: boolean; //прошла заточка? timer: TTimer; CurEnchLvl, ColvoItem, ColvoScrl, CurItem, CurScrl: integer; SocialID:integer; // вспомогательная
procedure Init; //Вызывается при включении скрипта var i:integer; begin //Enchant:=false; CurEnchLvl:=0; timer:=TTimer.Create(nil); timer.OnTimer:=@OnTimerHP; timer.enabled:=false; timer.interval:=1500; //время задержки add:=false; for i:=1 to max do begin //очищаем масив //Say('очищаем масив'); ItemBase[1,i]:=0; ItemBase[2,i]:=0; end;
//****************************************************************************** procedure CreateItemBase; //пакет 1B, Создает базу ObjectID по ItemID var i, ss, ww, j, ObjID, ItmID, 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 ItmID:=ReadD(j); //ItemID j:=j+14; Lvl:=ReadD(j); //Level case ItmID of ScrollID: begin ScrollBase[ss]:=ObjID; inc(ss); Say('ColvoScrl='+IntToStr(ss)); end; ItemID: begin ItemBase[1,ww]:=ObjID; ItemBase[2,ww]:=lvl; inc(ww); Say('ColvoItem='+IntToStr(ww)); end; end; j:=j+10; end; ColvoItem:=ww-1; ColvoScrl:=ss-1; Say('>ColvoItem='+IntToStr(ColvoItem)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl)); end;
//****************************************************************************** procedure UpdateItemBase; //пакет 27, Создает базу ObjectID по ItemID var i, ii, j, ss, ww, ObjID, ItmID, 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); ItmID:=ReadD(j); j:=j+14; Lvl:=ReadH(j); Say('Предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID)); case UpdType of 1:case ItmID of ItemID: begin ColvoItem:=ColvoItem+1; Say('Добавили предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID)); for ii:=1 to max do if ItemBase[1,ii]=0 then begin ItemBase[1,ii]:=ObjID; ItemBase[2,ii]:=lvl; end; end; ScrollID: begin ss:=ss+1; Say('Добавили скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ScrollID)); for ii:=1 to max do if ScrollBase[ii]=0 then ScrollBase[ii]:=ObjID; end; end; 2:case ItmID of ItemID: for ii:=1 to max do if ItemBase[1,ii]=ObjID then ItemBase[2,ii]:=lvl; ScrollID: Say('Внимание! Изменения в скролле!?'); end; //удален 3:case ItmID of ItemID: begin ColvoItem:=ColvoItem-1; for ii:=1 to max do if ItemBase[1,ii]=ObjID then begin ItemBase[1,ii]:=0; ItemBase[2,ii]:=0; end; Say('Удаляем предмет! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ItemID)); end; ScrollID: begin ColvoScrl:=ColvoScrl-1; for ii:=1 to max do if ScrollBase[ii]=ObjID then ScrollBase[ii]:=0; Say('Удаляем скролл! ObjectID='+IntToStr(ObjID)+' ItemID='+IntToStr(ScrollID)); end; end; end; j:=j+10; //следующее смещение для действия с предметом 1-добавлен 2-изменен 3-удален end; Say('>>ColvoItem='+IntToStr(ColvoItem)+' ColvoScrl='+IntToStr(ColvoScrl)+' CurEnchLvl='+IntToStr(CurEnchLvl)); end;
//****************************************************************************** function GetNextItemID: 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 (ItemBase[1,i]<>0) and (ItemBase[2,i]<=CurEnchLvl) then begin Result:=ItemBase[1,i]; exit; end; end; inc(CurEnchLvl); Result:=-3; end;
//****************************************************************************** function GetNextScroll: integer; //Выдает ObjID скролла, если предмет не найден в базе, выдает -1 var i: integer; begin Result:=-1; for i:=1 to max do begin //находим первый подходящий предмет if (ScrollBase[i]<>0) then begin Result:=ScrollBase[i]; exit; end; end; end;
//****************************************************************************** procedure UseItem(ObjectID: integer); begin buf:=#$14; WriteD(ObjectID); WriteD(0); SendToServerEx(Name); end;
//****************************************************************************** procedure RequestEnchantItem(ObjectID: integer); begin buf:=#$58; WriteD(ObjectID); SendToServerEx(Name); end;
//****************************************************************************** procedure OnTimerHP(Sender: TObject); var Item, scrl:integer; begin if ColvoScrl=0 then begin ///Say('Кончились скроллы! Прервано!'); timer.enabled:=false; buf:=('A7 47 F4 10 00 40 0D 03 00 01 00 00 00 00 00 00 00 00 00 00 00 ') /// покупает Адену (продает 1 КОЛ) SendToServer; buf:=('Пакет на покупку скролов'); SendToServer; exit; end; if ColvoItem=1 then begin Say('Остался последний предмет! Прервано!'); timer.enabled:=false; exit; end; Scrl:=GetNextScroll; if scrl=-1 then begin Say('Нет такой заточки! Прервано!'); timer.enabled:=false; exit; end; Item:=GetNextItemID; case Item 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); RequestEnchantItem(Item); //************************************************ Say('Заточили предмет! ItemID='+IntToStr(Item)); end;
//****************************************************************************** // вызывается при приходе каждого пакета, если скрипт включен //****************************************************************************** begin //**************************************************************************** //не обрабатываем пустые пакеты if pck='' then exit;
//**************************************************************************** if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin SocialID:=ReadD(2); case SocialID of //социальное действие Yes для начала затачивания 6: begin CurEnchLvl:=0; Say('Команда Старт!!!'); timer.enabled:=true; exit; end; //социальное действие No для окончания 5: begin Say('Команда Стоп!!!'); timer.enabled:=false; exit; end; end; end;
//**************************************************************************** if FromServer then case pck[1] of //Пакет ItemList #$1B: CreateItemBase; //создание базы предметов //если удалили предметы, стираем в базе предметов пары ObjectID - ItemID #$27: UpdateItemBase; //Обновление базы, если принят пакет на удаление предмета end;
end.
Так Должно работать, токо я не понимаю что это за странный пакет?Оо чото в нем не правильно. Купи на 1 КОЛ столько сколько возможно точек и выложи пакет сюда, только покупай за 1 раз, а не по одной!
Добавлено через 1 минуту
Этот скрипт не закончеН!!! там надо поставить пакет на покупку, жду
Последний раз редактировалось 8tomat8, 16.02.2009 в 00:26.
Причина: Добавлено сообщение
суть вот в чем ) там точки покупаются не на колы, а на Аденки.. А аденки можно получить только когда обменяю колы на них (1 кол = 1кккк аден) в инвтаре там место типо мало ) я решил проблему на счет закупки заточек))... у меня теперь другая проблема =)))
как сделать так, чтобы он точил до 4 обычной точкой, а после 4 блэзовской ?? имеется в виду срипте как это сделать =))) то етсь в скрипте уже не надо предусматривать автоматической закпуки точек))
p.s. осуществил заупку точек и обмен колов с помощью посылки пакетов через определенное время)) просто умножил кол-во точек которое можно купить на время задержки)) и норм получилось