Capricorn
2011-01-08 12:19:35
Procedure R_ReturnItem(Item: Variant; var ItemIDs: TIntegerArray; var ItemNames: TStringArray);
var
ItemIDArray: TIntegerArray;
ItemNameArray: TStringArray;
I, arrC: Integer;
begin
ItemIDArray := [];
ItemNameArray := [];
SetArrayLength(ItemIDs, 1000);
SetArrayLength(ItemNames, 1000);
case VarType(Item) of
varInteger: For I:=0 to High(ItemIDs) do
if (ItemIDArray[I] = Item) then
begin
ItemIDs[arrC] := Item;
ItemNames[arrC] := ItemNameArray[I];
Inc(arrC);
end;
varString: For I:=0 to High(ItemIDs) do
if (LowerCase(ItemNameArray[I]) = LowerCase(Item)) then
begin
ItemIDs[arrC] := ItemIDArray[I];
ItemNames[arrC] := Item;
Inc(arrC);
end;
else
writeln ('[R_ReturnItem] Warning: Unsupported data type (you must enter an integer or string)');
end;
SetArrayLength(ItemIDs, arrC);
SetArrayLength(ItemNames, arrC);
end;This is broken, after you go to far in the array (past 1000 I would imagine) it always returns -1 or '' depending if you want the ID or name.
It works if you set
SetArrayLength(ItemIDs, 1000);
SetArrayLength(ItemNames, 1000);to SetArrayLength(ItemIDs, 3334);
SetArrayLength(ItemNames, 3334);However that requires the person to change that every time new items are added so perhaps SetArrayLength(ItemIDs, GetArrayLength(ItemIDArray));
SetArrayLength(ItemNames, GetArrayLength(ItemNameArray));Would be better.(I think you may have to subtract one from GetArrayLength, not sure :))