DEADSOFTWARE

Fix save game
[cavecraft.git] / src / craft.mpsrc
1 unit craft;
3 interface
4 procedure createCraft(id, mode:integer);
5 function canCreateCraft(id, mode:integer):boolean;
7 implementation
8 uses vars, items, func, player, inv, items_store;
10 procedure createCraft(id, mode:integer);
11 var
12 i, j, tmp_sum, tmp_s, item, sum:integer;
13 begin
14 if canCreateCraft(id, mode)=false then
15 exit;
17 //Выпиливаем все необходимые предметы
18 for i:=0 to 3 do
19 begin
20 tmp_sum:=getCraftInSum(id, i);
21 for j:=0 to INV_SIZE do
22 begin
23 item:=inv.getItem(j);
24 sum:=inv.getSum(j);
26 if getCraftInItem(id, i)=item then
27 begin
28 tmp_s:=tmp_sum-sum;
30 if tmp_s<1 then
31 begin
32 sum:=sum-tmp_sum;
33 inv.setSum(sum, j);
34 inv.fixNull(j);
35 break;
36 end;
37 else
38 begin
39 sum:=0;
40 tmp_sum:=tmp_s;
41 inv.setSum(sum, j);
42 inv.fixNull(j);
43 end;
44 end;
45 end;
46 end;
48 item:=getCraftOutItem(id);
49 sum:=getCraftOutSum(id);
51 sum:=inv.giveItem(item, sum);
52 if sum>0 then
53 player.dropItem(sum, sum);
54 end;
56 //Проверка, может ли игрок сделать этот крафт.
57 function canCreateCraft(id, mode:integer):boolean;
58 var
59 i, j, tmp_sum:integer;
60 canCreate:boolean;
61 begin
62 //Если место крафта подходит, то продолжаем крафт
63 if mode>=getCraftOutFlag(id) then
64 canCreate:=true;
65 else
66 exit;
68 //Проверяем каждую ячейку крафта
69 for i:=0 to 3 do
70 begin
71 //Получаем общуюю сумму подходящего предмета
72 tmp_sum:=0;
73 if getCraftInItem(id, i)>0 then
74 begin
75 for j:=0 to INV_SIZE do
76 begin
77 if getCraftInItem(id, i)=inv.getItem(j) then
78 tmp_sum:=tmp_sum+inv.getSum(j);
79 end;
81 //Проверяем, подходит ли количество предметов
82 if tmp_sum>=getCraftInSum(id, i) then
83 canCreate:=canCreate and true;
84 else
85 exit;
86 end;
87 end;
89 canCreateCraft:=canCreate;
90 end;
92 end.