Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Ковка plate mail drw

Only working scripts
Post Reply
alpi
Novice
Novice
Posts: 51
Joined: 02.07.2009 17:37
Contact:

Ковка plate mail drw

Post by alpi »

Скрипт для ковки наборов Plate Mail
Указываем цвет и тип ингот, количество наборов для ковки.
Если инготов недостаточно для ковки нужного количества - кует столько наборов, на сколько хватит ингот.
В константе FemaleMake указывается, какой нагрудник ковать - женский(true) или мужской (false)

Code: Select all

Program Kovka_by_alpik; 

const
  IngotColorName = 'Gold';
  IngotColor = $0000;
  IngotType =  $1BE9;

  sunduk = $4047DD76;
  sumka_ingot = $4047DD76;

  MakeWhat = 'Plate Mail';
  MakeCount = 3;    // сколько комплектов изготовить
  FemaleMake = false; // изготавливать женский или мужской нагрудник
  
  worldmessage = 'World is saving now...';
  hungrymessage = 'You are starving';
  messagetimer = (0.05/(24*60));
  Food = $09BB;   

type maketype = record
  name: string;
  menu: string;
  mincount: byte;
end;  
  
var
  tmp_hammer : cardinal;
  
Procedure CheckState;
  begin 
    if InJournalBetweenTimes(worldmessage,now-2*messagetimer,now) > 0 then begin AddToSystemJournal('Сохранение мира. Ждем 60 секунд'); wait(60000); end;
     if InJournalBetweenTimes(hungrymessage,now-messagetimer,now) > 0 then 
      begin 
       wait(500); 
        FindType(Food,backpack);
         if findcount > 0 then begin UseObject(finditem); AddToSystemJournal('Перекус. Осталось еды в паке: '+IntToStr(GetQuantity(FindType(Food,backpack)))+' шт'); end
         else AddToSystemJournal('Не найдена еда! Положите еду в пак!'); 
      end;
  end;  

function MakeBS( make : string ) : boolean;
  var ingot : cardinal;
      i, j, tmp_make_count : byte ;
	  all_min_count : integer;
	  platearray : array[0..6] of maketype;
	  ctime : TDateTime;
	  sunduk_count, backpack_count, all_count, tmp_count : integer;
	  
  begin
    
	all_min_count := 0;
	
    platearray[0].name:= 'Plate Helmet';
    platearray[0].menu:= '(1)';
    platearray[0].mincount:= 15;
	
	platearray[1].name:= 'Plate Gorget';
	platearray[1].menu:= '(2)';
	platearray[1].mincount:= 10;
	
	platearray[2].name:= 'Plate Gauntlets';
	platearray[2].menu:= '(3)';
	platearray[2].mincount:= 12;
	
	platearray[3].name:= 'Plate Arms';
	platearray[3].menu:= '(4)';
	platearray[3].mincount:= 18;
	
	platearray[4].name:= 'Plate Legs';
	platearray[4].menu:= '(5)';
	platearray[4].mincount:= 20;
	
	if FemaleMake then begin
	  platearray[5].name:= 'Feemale Plate';
	  platearray[5].menu:= '(6)';
	end else begin
	  platearray[5].name:= 'Platemail';
	  platearray[5].menu:= '(7)';
	end;
	platearray[5].mincount:= 25;
	
	platearray[6].name:= 'Plate Heater';
	platearray[6].menu:= 'Heater Shield';
	platearray[6].mincount:= 18;
	
	CheckState;
    for i := 0 to 6 do all_min_count := all_min_count + platearray[i].mincount;
	
	AddToSystemJournal('Приступаем к изготовлению заказа. На один комплект требуется '+IntToStr(all_min_count)+' ингот.');
	
	sunduk_count := CountEx(IngotType,IngotColor,sumka_ingot);
    backpack_count := CountEx(IngotType,IngotColor,backpack);
    all_count := sunduk_count + backpack_count;
    tmp_count := all_count / all_min_count;
    
	if tmp_count >= MakeCount then 
	  begin
        CheckState;	  
	    AddToSystemJournal('Ингот: '+IntToStr(all_count)+', хватит чтобы изготовить '+IntToStr(tmp_count)+' '+MakeWhat+' *без учета физлов*');
		tmp_make_count := MakeCount;
	  end else begin
	    if tmp_count > 0 then AddToSystemJournal('Ингот: '+IntToStr(all_count)+', хватит на изготовление части заказа:'+IntToStr(tmp_count)+' из '+IntToStr(MakeCount)+' *без учета физлов*')
		else AddToSystemJournal('Недостаточно ресурсов для изготовления заказа');
	    tmp_make_count := tmp_count;
	  end;
	  
	result := true;	 
	
	for j := 1 to tmp_make_count do
	begin
	  CheckState;
	  if CountEx(IngotType,IngotColor,backpack) < all_min_count then 
	    begin
		  if CountEx(IngotType,IngotColor,sumka_ingot) < all_min_count then
		    begin 
			  AddToSystemJournal('Недостаточно ресурсов для изготовления комплекта №'+IntToStr(j));
			  exit;
			end else begin
			  wait(500);
			  moveitem(FindTypeEx(IngotType,IngotColor,sumka_ingot,false),all_min_count,backpack,0,0,0);
			end;
	    end;
		
	  for i := 0 to 6 do
	  begin
	    wait(1000);
		CheckState;
        ingot := FindTypeEx(IngotType,IngotColor,backpack,false);
	    if (GetQuantity(ingot) >= platearray[i].mincount) then
	      begin
		    CancelMenu;
	        WaitMenu( 'Black' , 'Armor & Weapon' );
            WaitMenu( 'Armor' , 'Armor' );
            WaitMenu( 'Armor' , 'Plate Armor' );
	        WaitMenu('Plate Armor',platearray[i].menu);
	      
		    ctime := now;
		    UseObject(ingot);
	        wait(10000);
		    if InJournalBetweenTimes('You have failed',ctime,now) > 0 then
		      begin 
			    AddToSystemJournal('Не удалось создать предмет '+platearray[i].name+'. Повтор.');
			    i := i-1;
			  end;
		   end else 
		    if CountEx(IngotType,IngotColor,sumka_ingot) < platearray[i].mincount then
		      begin 
			    AddToSystemJournal('Недостаточно ресурсов для изготовления детали '+platearray[i].name);
			    exit;
			  end else begin
			    CheckState;
			    wait(500);
			    moveitem(FindTypeEx(IngotType,IngotColor,sumka_ingot,false),platearray[i].mincount,backpack,0,0,0);
				i := i-1;
			  end;
		   end;
    end;
  end;
  
Begin

  AddToSystemJournal('*** инициализация скрипта ***');
  AddToSystemJournal('Инготы : '+IngotColorName);
  AddToSystemJournal('Изготавливаем : '+MakeWhat);
  
  UseObject(sunduk); wait(1000);
  UseObject(sumka_ingot); wait(1000);
  
  CheckState;
  tmp_hammer := ObjAtLayerEx(RhandLayer,self);
  if tmp_hammer = 0 then tmp_hammer := FindType($13E3,backpack);
  if tmp_hammer <> 0 then UseObject(tmp_hammer) else AddToSystemJournal('Молоток не найден, ковать не буду :(');
  if TargetPresent then CancelTarget;
  
  AddToSystemJournal('Приняли заказ на изготовление '+IntToStr(MakeCount)+' '+MakeWhat);
  if MakeBS(MakeWhat) then AddToSystemJournal('Изготовление закончено');
  
  CheckState;
  if CountEx(IngotType,IngotColor,backpack) > 0 then moveitem(FindTypeEx(IngotType,IngotColor,backpack,false),999,sumka_ingot,0,0,0);
 
End.
just student
Post Reply