We have DropAll which uses DropPattern (which I prefer to use patterns over the regular and consistent 1, 2, 3 .. 28 dropping) however there is no method to use a pattern whilst excluding certain inventory spots (which, for example, is useful if a script does not want to drop a certain InvSpot which contains equipment or important items).
DropPattern can easily be modified to allow this by changing
toCode:for i:= 0 to 27 do DropItem(Arr[i]);
Also adding a DontDrop parameter.Code:for i:= 0 to 27 do if not InIntArray(DontDrop, Arr[i]) then DropItem(Arr[i]);
To prevent breaking anything, the include could be modified like so:
Comments ? Would you find this useful, or unnecessary ?Code:{******************************************************************************* procedure DropPatternExcept(DontDrop: TIntegerArray; Which: Integer); By: Rasta Magician Description: Drops all items in inventory according to pattern which, ignoring slots in DontDrop. *******************************************************************************} procedure DropPatternExcept(DontDrop: TIntegerArray; Which: Integer); var Col, A, I: Integer; Arr: TIntegerArray; Turn: Boolean; begin SetLength(Arr, 28); A := 0; if (Which = 0) then Which := Random(2) + 1; //ignores complete randomness, unless scripter chooses to use it srl_warn('DropPattern','Dropping by pattern: ' + IntToStr(Which),warn_Debug); case which of dp_UpToDown: for Col := 1 to 4 do if InIntArray([2, 4], Col) then begin for i := 6 Downto 0 do begin Arr[a] := Col + i*4; Inc(a); end; end else for i := 0 to 6 do begin Arr[a] := Col + i*4; Inc(a); end; dp_Snake: repeat if (not Turn) then begin for i:= 1 to 4 do Arr[a + I - 1] := A + I; IncEx(a, 4); Turn := True; end else begin for I := 4 Downto 1 do Arr[a-i+4] := a + i; IncEx(a, 4); Turn := false; end; until (a >= 28); dp_Random: begin DropArray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28]); Exit; end; end; if Random(2) = 1 then InvertTIA(Arr); Gametab(tab_inv); for i:= 0 to 27 do if not InIntArray(DontDrop, Arr[i]) then DropItem(Arr[i]); end; {******************************************************************************* procedure DropPattern(Which: Integer); By: Rasta Magician Description: Drops all items in inventory according to pattern which. *******************************************************************************} procedure DropPattern(Which: Integer); begin DropPatternExcept([], Which); end;




Reply With Quote






