Вход

Просмотр полной версии : Скорость работы скрипта


MaJIou_DoGG
13.07.2010, 02:15
Всегда пользовался скриптом где в боксах выбираются предметы и т д , но при переходе на епилог он перестал определять id части предметов ( некоторые видит а большую чать нет ) Ну дело не в этом , вот нашел другой скрипт , но он оч долго точит , в скриптах я нуб и как в том скрипте надписей delay с цифрами в милисекундах от 400 до 1000 я не нашел, плз подскажите как в этом скрипте ускорить срабатывание (отправку) пакетов, что б он точил порезвее.

// Auto_enchant + 1 - gracia_final_selectskroll - скрипт который мне надо ускорить , я выложил бы его сюда , но я тупорылый бот и не пойму какие фигни надо поставить по краям скрипта что б он прокручивался и я мог вляпать его в эту тему , плз подкажите какими тегами скрипт выделять :sorry:

NLObP
13.07.2010, 04:00
одкажите какими тегами скрипт выделять

[HIGHLIGHT ="delphi"]
...скрипт писать сюда...
[/ HIGHLIGHT]

PS: в тегах пробелы все убрать!
PPS: ещё, этот тег находится справа (решётка), параметр для него - delphi

MaJIou_DoGG
13.07.2010, 13:51
Чтот у меня не получается его втулить т к он 16+к символов, попробую кусками:mad:

// Auto_enchant + 1 - gracia_final_selectskroll
// хроники Грация ФИНАЛ
//===========================================
const
myname='DoGG'; //<<== пишем свой НИК

max=150;//<<== колличество ячеек в рюкзаке

xxx=3;//<<== безопасный уровень заточки

chat = 3;// <<== какой ЧАТ выводить сообщения
// 3 - Party; 4 - Clan; 9 - Alli; 10 - anons ; 17 - Hero;
//==========================================
// в пати чат пишем уровень заточки
// можно менять в процесе работы скрипта
// заточить один предмет чтоб запомнить чем и что точить
// СТАРТ нажать соцдействие ДА
// СТОП нажать соцдействие НЕТ
// включить системные сообщения соцдействие - приветствие \ hello
// выключить системные сообщения соцдействие - победа \ victory
//----------------------------
// возможно использовать скрол до безопасного уровеня заточки
// выше использовать блесс скрол
// для этого заточить предмет один раз скрол и один раз блесс скрол
//----------------------------
// дальше скрипт сам точит до указаного уровня заточки
// все предметы ОДИНАКОВЫЕ с ПЕРВЫМ заточеным
// скрипт точит первый предмет до +1, потом второй до +1 и т.д
// если предмет при заточки блесс скрол слетел на 0 или на уровень как у вас на сервере
// то будет точиться он пока несравняется с остальными
// и т.д
// пока недостигнете заданого уровня заточки
// если предметов более одного : один предмет остается
// АВТОР ==>>>> TAMBIK
//==========================================
var
BaseItems:array[1..max,1..11] of integer;
Baselvl:array[1..max] of integer;
Timer01: TTimer;
Timer02: TTimer;
Timer03: TTimer;

mytext:string;
autostart,start,autoMsg:Boolean;
flag : Boolean;
selectskrol,selectblessedskrol:Boolean;
autoselect:Boolean;
t,l,d,x,y,ii,i:integer;
ListSize,ItemEnch:word;
textID:integer;
enchantObjectID:integer;
enchantID,skrolObjectID,skrolObject:integer;
itemID,objectOID:integer;
sumskroll,sumskrol,sumitemID,sumitem:integer;
maxlvl,minlvl,enchlvl,selectlvl:integer;
ID,skrolID,blessedskrolID:integer;
skrolOID,blessedskrolOID:integer;
index :integer;
//===========================================
procedure SendMsg2(msg:string);
begin
if autoMsg then begin
buf:=#$4A;
WriteD(0);
WriteD(chat);// <<=куда выводить сообщения
WriteS('');
WriteS(msg);
SendToClientEx(myname);
end;
end;
//===========================================
procedure Resultmaxlvl;
var
i:integer;
begin
i:=2;
mytext:=ReadS(i);
textID:=ReadD(i);
if (textID=3) then begin
maxlvl:=StrToInt(mytext);
SendMsg2( ' Установлен МАХ Уровень Заточки: '+IntToStr(maxlvl)+'' );
pck:='';
exit;
end;
end;
//==========================================
procedure ActionUse;
begin
case ReadD(2) of
12:begin autoMsg:=true; end;
13:begin autoMsg:=false; end;
24:begin
if (autostart=false) then SendMsg2( 'предмет незаточен или пакеты неприняты !' );
if (maxlvl=0) then SendMsg2( ' Неуказан Уровень Заточки !' );
SendMsg2( '_______________________________' );
if autostart and (maxlvl>0) then begin
buf:=hstr('14');
SendToServerEx(myname);
SendMsg2( ' ! ! ! П О Е Х А Л И ! ! !' );
SendMsg2( '_______________________________' );
start:=true;
end;
end;
25:begin
SendMsg2( ' ! ! ! С Т О П ! ! ! ' );
stopEnchantItem;// остановка скрипта
end;
end;
end;
//==========
procedure stopEnchantItem;// остановка скрипта
begin
autoMsg:=true;
start:=false;
deleteBase;
enchantID:=0;
ItemEnch:=0;
stopselectskrol;// отмена выбора скролл
SendMsg2 (' ___ О С Т А Н О В Л Е Н О ___ ');
Timer01.enabled:=false;
Timer02.enabled:=false;
Timer03.enabled:=false;
index :=0;
for ii:=1 to max do
Baselvl[ii]:=-1;
end;

MaJIou_DoGG
13.07.2010, 13:52
//.................................................. ............................
procedure ItemList;
var
i, j, k: integer;
count,x:integer;
begin
deleteBase;
count:=0;
x:=0;
y:=0;
j:=4;
ListSize:=ReadH(j);
count:=round((Length(pck)-5) / ListSize);
for i:=1 to ListSize do
if (i<=ListSize) then begin
BaseItems[i,1]:=ReadH(j);
BaseItems[i,2]:=ReadD(j);//ObjectID
BaseItems[i,3]:=ReadD(j);//ItemID
BaseItems[i,4]:=ReadD(j);//LocationSlot
BaseItems[i,5]:=ReadD(j);// Amount:
BaseItems[i,6]:=ReadD(j);// Amount:
BaseItems[i,7]:=ReadH(j);//ItemType2
BaseItems[i,8]:=ReadH(j);// CustomType1
BaseItems[i,9]:=ReadH(j);//isEquipped:
BaseItems[i,10]:=ReadD(j);//BodyPart
BaseItems[i,11]:=ReadH(j);//EnchantLevel
inc(x);
y:=count*x-(j-6);
inc(j,y);
end else for k:=1 to 11 do BaseItems[i,k]:=0;
if start then addenchantitemID;
skrolObject:=0;
sumskrol:=0;
sumskroll:=0;
minlvl:=Baselvl[1];
for ii:=2 to index do
if (Baselvl[ii] < minlvl) then
minlvl:=Baselvl[ii];// мин заточка
//------------------------------
if start and selectskrol and (selectblessedskrol=false) then enchantSkroll;
//------------------------------
if start and selectblessedskrol and (selectskrol=false) then enchantblessedskroll;
//------------------------------
if start and selectskrol and selectblessedskrol then enchantautoSelectSkroll;
end;
//=============================
procedure enchantSkroll;
begin
skrolObject:=skrolOID;
sumskrol:=Getitem(skrolID,3,5);//считаем SKROL
SendMsg2 (' SKROLL ... c ID : '+IntToStr(skrolID)+' = '+IntToStr(sumskrol)+' ШТ ');
if (sumskrol>0) then Timer01.enabled:=true;// вкл таймер выбора свитка
if (sumskrol=0) then begin
autoMsg:=true;
stopEnchantItem;
SendMsg2 ('........ НЕДОСТАТОЧНО SKROLL........ ');
end;
end;
//=============================
procedure enchantblessedskroll;
begin
skrolObject:=blessedskrolOID;
sumskroll:=Getitem(blessedskrolID,3,5);//считаем blessedSKROL
SendMsg2 (' blessed. SKROLL ... c ID : '+IntToStr(blessedskrolID)+' = '+IntToStr(sumskroll)+' ШТ ');
if (sumskroll>0) then Timer01.enabled:=true;// вкл таймер выбора свитка
if (sumskroll=0) then begin
autoMsg:=true;
stopEnchantItem;
SendMsg2 ('........ НЕДОСТАТОЧНО blessed SKROLL........ ');
end;
end;
//=============================
procedure enchantautoSelectSkroll;
begin
SendMsg2(' .........' );
if (minlvl<xxx) then begin
skrolObject:=skrolOID;
sumskrol:=Getitem(skrolID,3,5);//считаем SKROL
SendMsg2 (' ___ БЕЗОПАСНО ___ ');
SendMsg2 (' применяем : ...Просто .. skroll. ');
if (sumskrol>0) then Timer01.enabled:=true;// вкл таймер выбора свитка
SendMsg2 (' SKROLL .. c ID : '+IntToStr(skrolID)+' : = '+IntToStr(sumskrol)+' ШТ ');
if (sumskrol=0) then begin
autoMsg:=true;
stopEnchantItem;
SendMsg2 ('........ НЕДОСТАТОЧНО SKROLL........ ');
end;
end;
if (minlvl>=xxx) then begin
skrolObject:=blessedskrolOID;
sumskroll:=Getitem(blessedskrolID,3,5);//считаем blessedSKROL
SendMsg2 (' ___ О П А С Н О С Т Ь ___ ');
SendMsg2 (' применяем : ...blessed. ... skroll... ');
if (sumskroll>0) then Timer01.enabled:=true;// вкл таймер выбора свитка
SendMsg2 (' blessed. SKROLL .. c ID : '+IntToStr(blessedskrolID)+' = '+IntToStr(sumskroll)+' ШТ ');
if (sumskroll=0) then begin
autoMsg:=true;
stopEnchantItem;
SendMsg2 ('........ НЕДОСТАТОЧНО blessedSKROLL........ ');
end;
end;
end;
//=============================
procedure EnchantResult;
begin
index :=0;
for ii:=1 to max do
Baselvl[ii]:=-1;
end;
//=============================
procedure deleteBase;
var
i,j,k:integer;
begin
for i:=1 to max do
if (BaseItems[i,2] > 0) then begin
BaseItems[i,1]:=0;
BaseItems[i,2]:=0; //ObjectID
BaseItems[i,3]:=0; //ItemID
BaseItems[i,4]:=0;
BaseItems[i,5]:=0;
BaseItems[i,6]:=0;
BaseItems[i,7]:=0;
BaseItems[i,8]:=0;
BaseItems[i,9]:=0;
BaseItems[i,10]:=0;
BaseItems[i,11]:=0;
end;
end;
//===========================
function Getitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0;
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=BaseItems[i,down];
end;
end;
//===========================
function Getsumitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0;
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=Result+BaseItems[i,down];
end;
end;

MaJIou_DoGG
13.07.2010, 13:54
//=============================
// добавляем в базу ЛВЛ заточки
procedure addenchantitemID;
begin
for i:=1 to max do
if (BaseItems[i,3] = itemID) then begin
enchlvl:=BaseItems[i,11];
flag:=false;
for ii:=1 to max do
if (Baselvl[ii] = enchlvl) then begin // текущий уже есть в массиве,
flag := true;
BREAK; { прекращаем цикл }
end;
if (flag = false) then begin
for ii:=1 to max do
if (Baselvl[ii]=-1) then begin // добавим в массив,
Baselvl[ii]:=enchlvl;
index :=ii;
BREAK; { прекращаем цикл }
end;
end;
end;
end;
//==========================
procedure ChooseInventory;
var
OID, lvl:integer;
begin
if (itemID>0) and start then begin
sumitemID:=0;
sumitemID:=Getsumitem(itemID,3,5); // считаем предметы для заточки
SendMsg2(''+IntToStr(sumitem)+' Предметов для заточки с ID : '+IntToStr(itemID)+' = '+IntToStr(sumitemID)+' ШТ');
objectOID:=0;
SendMsg2( '*******************************************' );
SendMsg2(' ---- П О И С К П Р Е Д М Е Т А ----' );
if (sumitemID > sumitem) then objectOID:=GetObjectID(itemID);//находим по ItemID предмет с ObjectID
if (objectOID = 0) then begin
autoMsg:=true;
stopEnchantItem;// остановка скрипта
SendMsg2('Больше предметов c ID : '+IntToStr(itemID)+' для заточки НЕТ ! ! ! ');
SendMsg2('----' );
lvl:=0;
for i:=1 to max do
if (BaseItems[i,3] = itemID) then begin
OID:=BaseItems[i,2];
lvl:=BaseItems[i,11];
SendMsg2(' . . П р е д м е т . .' );
SendMsg2(' ID: '+IntToStr(itemID)+' ObjectID: '+IntToStr(OID)+' заточен до: '+IntToStr(lvl)+' ');
SendMsg2(' .................' );
end;
end;
end;
end;
//=========================
//находим enchantID предмета по ItemID для заточки
function GetObjectID(itemID:integer) : integer;
var
ID,i:integer;
begin
enchantID:= 0;
ItemEnch:=0;
Result:= 0;
if (itemID > 0) then begin
SendMsg2 (' ищем ObjectID предмета с ID : ' +IntToStr(itemID)+' ');
SendMsg2('------------------------------' );
for i:=1 to max do
if (BaseItems[i,3] = itemID) and (BaseItems[i,11] = minlvl) and (BaseItems[i,11] < maxlvl) then begin
enchantID:=BaseItems[i,2];
Result:=BaseItems[i,2];
ItemEnch:=BaseItems[i,11];
SendMsg2(' ..... Найден Предмет для Заточки ..... ');
SendMsg2(' ID : '+IntToStr(itemID)+' и ObjectID : '+IntToStr(enchantID)+' заточен до : '+IntToStr(ItemEnch)+'');
SendMsg2('------------------------------' );
if start and (enchantID>0) then Timer02.enabled:=true;
Break; // прерываем дальнейший перебор массива.
end;
end;
end;
//==========================
procedure stopselectskrol;// отмена выбора скролл
begin
buf:=hstr('D04E00');
SendToServerEx(myname);
end;
//===================================
procedure OnTimer01(Sender: TObject);
begin
buf:=#$19;
WriteD(skrolObject);
WriteD(0);
SendToServerEx(myname);
Timer01.enabled:=false;
end;
//--------------------------
procedure OnTimer02(Sender: TObject);
begin
buf:=hstr('D04C00');
WriteD(enchantID);
SendToServerEx(myname);
Timer02.enabled:=false;
// Timer03.enabled:=true;
end;
procedure OnTimer03(Sender: TObject);
begin
buf:=#$5F;
WriteD(enchantID);
WriteD(0);
SendToServerEx(myname);
Timer03.enabled:=false;
end;

MaJIou_DoGG
13.07.2010, 13:55
//-----------------------------------------
procedure Init;
begin
minlvl:=0; maxlvl:=0; enchlvl:=0; ItemEnch:=0;
sumskrol:=0; sumitem:=0; sumitemID:=0;
objectOID:=0; enchantObjectID:=0;
enchantID:=0; skrolObjectID:=0;
itemID:=0;
ID:=0;skrolID:=0; blessedskrolID:=0;
skrolOID:=0; blessedskrolOID:=0;
skrolObject:=0;
t:=0;l:=0;d:=0;index:=0;

flag:=false;
autostart:=false;
start:=false;
autoMsg:=true;
selectskrol:=false;selectblessedskrol:=false;
autoselect:=false;
Timer01:=TTimer.Create(nil);
Timer01.OnTimer:=@OnTimer01;
Timer01.enabled:=false;
Timer01.interval:=1000; //<<== время выбора свитка

Timer02:=TTimer.Create(nil);
Timer02.OnTimer:=@OnTimer02;
Timer02.enabled:=false;
Timer02.interval:=1000; //<<== время выбора предмета

Timer03:=TTimer.Create(nil);
Timer03.OnTimer:=@OnTimer03;
Timer03.enabled:=false;
Timer03.interval:=2400; //<<== время между заточкой
SendMsg2( ' привет от TAMBIKa' );
SendMsg2( 'в пати чат пишем уровень заточки' );
SendMsg2( ' заточить предмет один раз ! ! !' );
SendMsg2( ' СТАРТ соцдействие ДА ' );
SendMsg2( ' СТОП соцдействие НЕТ' );
SendMsg2('В К Л сообщения соцдействие-приветствие\hello ' );
SendMsg2('ВЫКЛ сообщения соцдействие-победа\victory ' );
SendMsg2( '------------------------------------- ' );
deleteBase;
OpenInventory;//открыть инвентарь
for ii:=1 to max do
Baselvl[ii]:=-1;
end;
procedure Free;
begin
Timer01.free;
Timer02.free;
Timer03.free;
end;
//=========================
procedure OpenInventory;//открыть инвентарь.14=RequestItemList
begin
buf:=hstr('14');
SendToServerEx(myname);
end;
//=========================
procedure addtoskrolID;
begin
OpenInventory;//открыть инвентарь
SendMsg2(' ........ = UseItem = .........' );
skrolObjectID:=ReadD(2);
ID:=0;
ID:=Getitem(skrolObjectID,2,3);//находим по ObjectID скрол с ItemID
if (ID>0) then t:=1;
case ID of
6569..6578:begin
blessedskrolID:=ID;
blessedskrolOID:=skrolObjectID;
SendMsg2(' активирован Blessed SKROLL ID : '+IntToStr(blessedskrolID)+'');
selectblessedskrol:=true;
SendMsg2(' .................' );
end;
729..732,947..962:begin
skrolID:=ID;
skrolOID:=skrolObjectID;
SendMsg2(' активирован SKROLL ID : '+IntToStr(skrolID)+'');
selectskrol:=true;
SendMsg2(' .................' );
end;
end;
end;

//=========================
begin
//не обрабатываем пустые пакеты
if pck='' then exit;
if FromServer and (pck[1]=#$FE) and (pck[2]=#$81) and start then begin
Timer03.enabled:=true;
SendMsg2(' ..... Точим Предмет ..... ');
SendMsg2( ' ID : '+IntToStr(itemID)+' и ObjectID : '+IntToStr(enchantID)+' - до : '+IntToStr(maxlvl)+'' );
SendMsg2( '*******************************************' );end;
if FromServer and (pck[1]=#$87) then EnchantResult;
if FromServer and (pck[1]=#$11) then ItemList;
if FromServer and (pck[1]=#$7C) then ChooseInventory;
if FromClient and (pck[1]=#$49) then begin Resultmaxlvl;end;
if FromClient and (pck[1]=#$56) then begin ActionUse; pck:='';exit;end;
begin
if (start=false) and FromClient then
case pck[1] of
#$19:addtoskrolID;
#$D0:if ReadH(2)=76 then begin
l:=1;
SendMsg2(' выбор ________ предмета ' );
SendMsg2(' .................' );
end;
#$5F:begin
d:=1;
enchantObjectID:=ReadD(2);
if (t=1) and (l=1) and (d=1) then begin
itemID:=0;
itemID:= Getitem(enchantObjectID,2,3);//находим по ObjectID предмет с ItemID
if (itemID > 0) then autostart:=true;
SendMsg2 (' ID предмета : '+IntToStr(itemID)+' для заточки');
sumitem:=0;
sumitemID:=0;
sumitemID:=Getsumitem(itemID,3,5); // считаем предметы для заточки
if (sumitemID > 1) then sumitem:=1;
SendMsg2 (''+IntToStr(sumitem)+' Предметов для заточки с ID : '+IntToStr(itemID)+' = '+IntToStr(sumitemID)+' ШТ ');
SendMsg2(' .................' );
stopselectskrol;
end;
end;
end;
end;
end.

Плз не судите строго если выложил чего не так, это весь скрипт , рубанул его на 4 части

Breadfan
13.07.2010, 14:12
Ну вот же, в 4ом блоке, специально помечены комментарием строки: "//<<== время выбора предмета", "//<<== время выбора свитка", "2400; //<<== время между заточкой " - в данный момент сумма значений приводит к задержке между заточками в 4.4 секунды. Пробуй изменить значения интервалов таймера, и следи за изменениями в работе.

MaJIou_DoGG
13.07.2010, 14:23
Точняк , спс , я несколько раз просматривал не заметил. Болшое спс.

Добавлено через 4 минуты
Изменил все 3 строки на 400мс и сразу же выбило с игры с надписью что админ проинформирован . Играю на Епилоге, какое оптимальное значение посоветуете?

Добавлено через 2 минуты
Поставил 400 400 и время между точками 1000 - вродь пашит ( вдруг кому пригодится)