Page 1 of 1

можно ли сократить?

Posted: 28.08.2012 16:48
by roma777
подскажите пожалуйста можно ли как-то сократить данную строку?

Code: Select all

if (bodid = ti[0]) or (bodid = ti[1]) or (bodid = ti[2]) or (bodid = ti[3]) or (bodid = ti[4]) or (bodid = ti[5]) then

Re: можно ли сократить?

Posted: 28.08.2012 22:35
by Vizit0r

Code: Select all

for i := 0 to 5
  if (bodid = ti[i]) then

Re: можно ли сократить?

Posted: 28.08.2012 23:49
by roma777
Vizit0r wrote:

Code: Select all

for i := 0 to 5
  if (bodid = ti[i]) then
а еще есть варианты? вод код чтоб было понятнее

Code: Select all

begin
 inittibsi;
 bobfilter(findtype($2259,backpack),'all','all','tailoring','all'); 
 terminate := false;
 while terminate = false do
 begin
  save;
  bodid := getgi;
  if count($2258) > 0 then
   if (bodid = ti[0]) or (bodid = ti[1]) or (bodid = ti[2]) or (bodid = ti[3]) or (bodid = ti[4]) or (bodid = ti[5]) then
    moveto(tfchest) // сундук с Female сетом  
   else 
    if (bodid = ti[6]) or (bodid = ti[7]) or (bodid = ti[8]) or (bodid = ti[9]) or (bodid = ti[10]) then
     moveto(tschest) // сундук с Studded сетом
    else  
     if (bodid = ti[11]) or (bodid = ti[12]) or (bodid = ti[13]) or (bodid = ti[14]) or (bodid = ti[15]) or (bodid = ti[16]) then
      moveto(tmchest) // сундук с Male сетом
     else
      if (bodid = ti[17]) or (bodid = ti[18]) or (bodid = ti[19]) or (bodid = ti[20]) or (bodid = ti[21]) then
       moveto(tbchest) // сундук с Bone сетом
      else
       if (bodid = ti[22]) or (bodid = ti[23]) or (bodid = ti[24]) or (bodid = ti[25]) or (bodid = ti[26]) then
        moveto(ttcchest) // сундук с Town Crier сетом 
       else
        if (bodid = ti[27]) or (bodid = ti[28]) or (bodid = ti[29]) then
         moveto(tshchest) // сундук с Обувью
        else
         moveto(tcchest); // сундук с Тканью
  wait(500);
 end; 
 checklag(5000);  
 wait(1000);
 terminate := false;
 bobfilter(findtype($2259,backpack),'all','all','blacksmithing','all'); 
 while terminate = false do
 begin 
  save;
  bodid := getgi;
  if count($2258) > 0 then
   if (bodid = bsi[0]) or (bodid = bsi[1]) or (bodid = bsi[2]) then
    moveto(bscchest) // сундук с Chainmail Set
   else 
    if (bodid = bsi[3]) or (bodid = bsi[4]) or (bodid = bsi[5]) or (bodid = bsi[6]) then
     moveto(bsrchest) // сундук с Ringmail Set
    else  
     if (bodid = bsi[7]) or (bodid = bsi[8]) or (bodid = bsi[9]) or (bodid = bsi[10]) or (bodid = bsi[11]) or (bodid = bsi[12]) then
      moveto(bspchest) // сундук с Platemail Set
     else
      if (bodid = bsi[13]) or (bodid = bsi[14]) or (bodid = bsi[15]) or (bodid = bsi[16]) or (bodid = bsi[17]) or (bodid = bsi[18]) or (bodid = bsi[19]) or (bodid = bsi[20]) or (bodid = bsi[21]) or (bodid = bsi[22]) or (bodid = bsi[23]) then
       moveto(bsoachest) // сундук с Other Armor
      else
       if (bodid = bsi[24]) or (bodid = bsi[25]) then
        moveto(bsbhchest) // сундук с Bardich & Halberd
       else
        moveto(bsowchest); // сундук с Other Weapon
  wait(500);
 end;  
 addtosystemjournal('stop script'); 
 clientprint('stop script'); 
end.

Re: можно ли сократить?

Posted: 28.08.2012 23:57
by Vizit0r
в первой половине - уже массив ti есть, к нему сделать массив из chest'ов, и тогда

Code: Select all

for i := 0 to 5
  if (bodid = ti[i]) then
    begin
      moveto(tchest[i])
      break;
    end;
for i := 6 to 10
но в этом случае неинтересно.

вот только case работает только для констант, поэтому увы.

P.S. попробуй if (bodid in [ti[0]..ti[5])) then
но думается мне ПС выругается на такое, слишком сложно для него

Re: можно ли сократить?

Posted: 29.08.2012 12:34
by roma777
Vizit0r wrote:в первой половине - уже массив ti есть, к нему сделать массив из chest'ов, и тогда

Code: Select all

for i := 0 to 5
  if (bodid = ti[i]) then
    begin
      moveto(tchest[i])
      break;
    end;
for i := 6 to 10
но в этом случае неинтересно.

вот только case работает только для констант, поэтому увы.

P.S. попробуй if (bodid in [ti[0]..ti[5]]) then
но думается мне ПС выругается на такое, слишком сложно для него
ругается :(
а зачем после moveto(tchest) стоит break;?? что он дает, без него тоже все прекрасно работает.

и еще вопрос. что дает команда exit? после ее выполнения скрипт продалжает работать как ни в чем не бывало.

Re: можно ли сократить?

Posted: 29.08.2012 14:21
by Vizit0r
roma777 wrote: а зачем после moveto(tchest) стоит break;?? что он дает, без него тоже все прекрасно работает.

и еще вопрос. что дает команда exit? после ее выполнения скрипт продалжает работать как ни в чем не бывало.


затем - http://delphibasics.ru/Break.php
Exit - http://www.delphisources.ru/pages/faq/f ... t.php.html

от себя добавлю, что Exit в главном блоке (begin - end.) приводит к завершению работы скрипта.

Re: можно ли сократить?

Posted: 29.08.2012 15:32
by roma777
теперь понял. спс большое

Re: можно ли сократить?

Posted: 30.08.2012 16:14
by roma777
roma777 wrote:
Vizit0r wrote:в первой половине - уже массив ti есть, к нему сделать массив из chest'ов, и тогда

Code: Select all

for i := 0 to 5
  if (bodid = ti[i]) then
    begin
      moveto(tchest[i])
      break;
    end;
for i := 6 to 10
зачем в таком варианте делать массив для сундуков? почему не сделать moveto(tshchest) // сундук с Обувью или moveto(tcchest) // сундук с Тканью и т.д.
tshchest и cchest константы.

Re: можно ли сократить?

Posted: 30.08.2012 17:52
by Vizit0r
все по желанию автора ))