Rick
2010-08-08 17:52:23
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
to
Also adding a DontDrop parameter.
To prevent breaking anything, the include could be modified like so:
Comments ? Would you find this useful, or unnecessary ?
DropPattern can easily be modified to allow this by changing
for i:= 0 to 27 do
DropItem(Arr[i]);
to
for i:= 0 to 27 do
if not InIntArray(DontDrop, Arr[i]) then
DropItem(Arr[i]);
Also adding a DontDrop parameter.
To prevent breaking anything, the include could be modified like so:
{*******************************************************************************
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;
Comments ? Would you find this useful, or unnecessary ?