X-Git-Url: https://deadsoftware.ru/gitweb?p=cavecraft.git;a=blobdiff_plain;f=src%2Ffurnace.mpsrc;h=1cf918517708833839b6c11d2f63fa30883dbf84;hp=7f568dfe10252c743cfc0495de0a26612f5b45e2;hb=HEAD;hpb=1ef13d5bd0592dde48cc837e05b13e93e82db25b diff --git a/src/furnace.mpsrc b/src/furnace.mpsrc index 7f568df..1cf9185 100644 --- a/src/furnace.mpsrc +++ b/src/furnace.mpsrc @@ -5,7 +5,7 @@ interface MAX_FURNACE=31; MAX_FURNACE_CELLS=2; - ITEM_IN_FIRE=10000; + ITEM_IN_FIRE=9950; // <== Костыль "исправляющий" тайминги. Должно быть 10000. FURNACE_IN=0; FURNACE_FUEL=1; @@ -38,8 +38,13 @@ interface function furnaceBurn(i:integer):boolean; function itemBurn(i:integer):boolean; + procedure SaveData; + procedure LoadData; + procedure ResetData; + implementation - uses maps, drop, items_store, items; + uses maps, drop, items_store, jsr75i, func, Items; + var furnace_b: array [0..MAX_FURNACE] of boolean; furnace_item, furnace_sum: array [0..MAX_FURNACE, 0..MAX_FURNACE_CELLS] of integer; @@ -260,9 +265,9 @@ implementation sumOUT:=GetFurSum(FURNACE_OUT, i); recipeOUT:=GetReceptOut(itemIN); - if (itemIN<>0) and (recipeOUT<>FURNACE_ERROR) then - if (itemOUT=0) or ((itemOUT=recipeOUT) and (sumOUT 0) and (recipeOUT <> FURNACE_ERROR) then + if (itemOUT = 0) or ((itemOUT = recipeOUT) and (sumOUT < Items.GetMaximum(itemOUT))) then + canUpdate := true; end; function furnaceBurn(i:integer):boolean; @@ -286,7 +291,7 @@ implementation item:=GetFurItem(FURNACE_FUEL, i); sum:=GetFurSum(FURNACE_FUEL, i); - if getItemDiv(item) then + if Items.IsDividable(item) then begin sum:=sum-1; if sum<0 then @@ -314,7 +319,7 @@ implementation sumOUT:=GetFurSum(FURNACE_OUT, i); recipeOUT:=GetReceptOut(itemIN); - if getItemDiv(itemIN) then + if Items.IsDividable(itemIN) then begin sumIN:=sumIN-1; if sumIN<0 then @@ -366,4 +371,58 @@ implementation UpdateTime; end; + procedure SaveData; + var + i, j : Integer; + begin + for i := 0 to MAX_FURNACE do + begin + writebool(furnace_b[i]); + for j := 0 to MAX_FURNACE_CELLS do + begin + write_byte(furnace_item[i, j]); + writeint(furnace_sum[i, j]); + end; + writeint(furnace_fstart[i]); + writeint(furnace_ftime[i]); + writeint(furnace_prstart[i]); + end; + end; + + procedure LoadData; + var + i, j : Integer; + begin + for i := 0 to MAX_FURNACE do + begin + furnace_b[i] := readbool; + for j := 0 to MAX_FURNACE_CELLS do + begin + furnace_item[i, j] := read_byte; + furnace_sum[i, j] := readint; + end; + furnace_fstart[i] := readint; + furnace_ftime[i] := readint; + furnace_prstart[i] := readint; + end; + end; + + procedure ResetData; + var + i, j : Integer; + begin + for i := 0 to MAX_FURNACE do + begin + furnace_b[i] := false; + for j := 0 to MAX_FURNACE_CELLS do + begin + furnace_item[i, j] := 0; + furnace_sum[i, j] := 0; + end; + furnace_fstart[i] := 0; + furnace_ftime[i] := 0; + furnace_prstart[i] := 0; + end; + end; + end.