I am not sure where to post but since this was the "help" thread, i posted here. Any informatin regarding this fix, id appreciate it :D
MSI_SetupSPS(tmpSurfaces[i], tmpAreas[i]);
Printable View
I am not sure where to post but since this was the "help" thread, i posted here. Any informatin regarding this fix, id appreciate it :D
MSI_SetupSPS(tmpSurfaces[i], tmpAreas[i]);
That's not an error, that's just a line of code.
Errors will appear in the debug box below simba.
If you are getting one, copy/paste it here.
Hey Coh3n since your very familiar with the forums here, do you know where the .99 version of Simba is at? I can't find it, and Simba message box says to download it off the forums.
MSI_SetupSPS(tmpSurfaces[i], tmpAreas[i]); is the line that is highlighted though.
Code:(*
Walking
=======
The Walking file includes functions & procedures that have anything to do with
walking. You'll notice the defines ({$IFDEF REFLECTION}) used throughout these
methods; these are used so MSI will still compile if the user decides to exclude
reflection or if reflection is broken. This file handles walking for both SPS
and reflection.
The source for Walking.simba can be found
`here <https://github.com/SRL/MSI/raw/master/MSI/Core/Walking.simba>`_.
*)
// Represent indexes of MSI_WalkVars
const
DIST_BETWEEN_POINTS = 20; // pixels between points in a path
DIST_FROM_END = 10;
DIST_RANDOMNESS = 5;
// had to be done :'(
function MSI_AtLocation(loc: integer; relocate: boolean): boolean; forward;
(*
MSI_Flag
~~~~~~~~
.. code-block:: pascal
procedure MSI_Flag(FlagDist: Integer);
MSI's custom flag function. It waits until the flag is within 'FlagDist' from
the player. It also works if, for some reason, the flag has gone off the minimap,
but the player is still moving.
.. note::
| Author: The MSI Team
| Last Updated: 04 October 2011 by Coh3n
Example:
.. code-block:: pascal
MSI_Flag(10);
*)
procedure MSI_Flag(FlagDist: Integer);
var
t: integer;
anim: TAnimation;
begin
if (not loggedIn) then
exit;
t := (getSystemTime + 10000);
anim := MSI_GetAnimation(ANIM_IDLE);
while (getSystemTime < t) do
begin
MSI_FindRandoms(false);
MSI_AntiBan(randomRange(200, 400), ANTI_BAN_CHANCE);
// flag is gone and not moving
if (not flagPresent) and (MSI_IsAnimating(anim)) then
break;
// danger zone warnings
if (leaveDangerZone()) then
MSI_SubDebug('Left danger zone');
// if the player is going around an obstacle and the flag goes off the minimap
if (not flagPresent) and (not MSI_IsAnimating(anim)) then
begin
MSI_Antiban(randomRange(500, 1000), ANTI_BAN_CHANCE);
continue;
end;
// close enough to the flag or not moving
if (flagDistance <= flagDist) or (MSI_IsAnimating(anim)) then
break;
//MSI_SubDebug('Flag distance: '+intToStr(flagDistance));
end;
end;
(*
MSI_SetupSPS
~~~~~~~~~~~~
.. code-block:: pascal
procedure MSI_SetupSPS(surface: integer; areas: TStringArray);
An MSI wrapper function for SPS_Setup (sps.simba). Used to avoid needless
repeated code.
.. note::
| Author: Coh3n
| Last Updated: 07 October 2011 by Coh3n
Example:
.. code-block:: pascal
var
script: TScript;
begin
script := MSI_GetPlayerScript();
MSI_SetupSPS(script.pathInfo.spsSurface, script.pathInfo.spsAreas);
.
.
end;
*)
procedure MSI_SetupSPS(surface: integer; areas: TStringArray);
begin
{$IFDEF SPS}
//SPS_Debug := true;
SPS_Setup(surface, areas);
MSI_Debug('MSI_SetupSPS: Surface: '+toStr(SPS_Surface.Name)+', Areas: '+toStr(areas));
{$ELSE}
MSI_Debug('MSI_SetupSPS: SPS isn''t defined');
{$ENDIF}
end;
(*
MSI_WalkToSymbol
~~~~~~~~~~~~~~~~
.. code-block:: pascal
function MSI_WalkToSymbol(symbol: string): boolean;
Returns true if the player walks to the minimap 'symbol.'
.. note::
| Author: Coh3n
| Last Updated: 17 March 2012 by Coh3n
Example:
.. code-block:: pascal
If (MSI_WalkToSymbol('bank')) then
MSI_Debug('Relocating to bank symbol');
*)
function MSI_WalkToSymbol(symbol: string): boolean;
var
x, y: integer;
begin
if (not loggedIn()) then
exit;
MSI_SubDebug('MSI_WalkToSymbol: Trying to walk to '+symbol+' symbol');
symbolAccuracy := 0.4;
if (findSymbol(x, y, symbol)) then
begin
MSI_SubDebug('Found '+symbol+' symbol');
MSI_MultiMouse(x, y, 50, 4, false);
MSI_Flag(0);
result := true;
end else
MSI_SubDebug('MSI_WalkToSymbol: Didn''t find '+symbol+' symbol');
symbolAccuracy := 0.8;
end;
(*
MSI_GetMyPos
~~~~~~~~~~~~
.. code-block:: pascal
function MSI_GetMyPos(): TPoint;
Gets the player's position by using either SPS or reflection depending on how
the user has setup the script.
.. note::
| Author: Coh3n
| Last Updated: 28 August 2011 by Coh3n
Example:
.. code-block:: pascal
var
playerPos: TPoint;
begin
playerPos := MSI_GetMyPos();
...
*)
function MSI_GetMyPos(): TPoint;
begin
{$IFDEF SPS}
result := SPS_GetMyPos();
{$ENDIF}
MSI_SubDebug('MSI_GetMyPos(): '+toStr(result));
end;
(*
MSI_WalkPoint
~~~~~~~~~~~~~
.. code-block:: pascal
function MSI_WalkPoint(P, PlayerPos: TPoint; flagDist: integer): Boolean;
Simply walks to the point 'P' if it's on the minimap.
.. note::
| Author: Nava2
| Last Updated: 04 October 2011 by Nava2
Example:
.. code-block:: pascal
MSI_EnterPoint(point(1234, 4321));
*)
function MSI_WalkPoint(P, PlayerPos: TPoint; flagDist: integer): Boolean;
{$IFDEF SPS}
var
tP: TPoint;
{$ENDIF}
begin
result := false;
{$IFDEF SPS}
tP := Point(MMCX + P.X - PlayerPos.X, MMCY + P.Y - PlayerPos.Y);
result := (distance(tP.x, tP.y, MMCX, MMCY) < DIST_FROM_END);
if (not result) then
if (tP.x > 0) then
begin
mouse(tP.x, tP.y, 3, 3, true);
MSI_Flag(flagDist);
result := true;
end;
{$ENDIF}
end;
(*
MSI_SetPlayerLoc
~~~~~~~~~~~~~~~~
.. code-block:: pascal
procedure MSI_SetPlayerLoc();
Returns a walkable path from the location (loc) record given. Uses the middle
point of each TLocation.SubLocs tile and sps boxes.
.. note::
| Author: Coh3n
| Last Updated: 23 August 2011 by Coh3n
Example:
.. code-block:: pascal
path := MSI_PathFromLoc(MSI_Locations[LOC_VE_MINE]);
*)
function MSI_PathFromLoc(loc: TLocation): TPointArray;
var
i: integer;
begin
if (not loggedIn) then
exit;
setLength(result, length(loc._subLocs));
for i := 0 to high(loc._subLocs) do
result[i] := middleBox(loc._subLocs[i].spsBox);
MSI_SubDebug('MSI_PathFromLoc: '+toStr(result));
end;
(*
MSI_PointOnPath
~~~~~~~~~~~~~~~
.. code-block:: pascal
function MSI_PointOnPath(var Index: integer; Path: TPointArray; P: TPoint; MaxDist: integer): boolean;
Finds the closest point (Index) in a path (Path) within MaxDist of any point in
the path.
.. note::
| Author: Nava2
| Last Updated: 04 October 2011 by Nava2
Example:
.. code-block:: pascal
See MSI_EnterPath in
`Walking.simba <https://github.com/SRL/MSI/raw/master/MSI/Core/Walking.simba>`_.
*)
function MSI_PointOnPath(var Index: integer; Path: TPointArray; P: TPoint; MaxDist: integer): boolean;
var
I, H, DistC, DistS: integer;
begin
H := High(Path);
Index := -1;
if (H < 0) then
Exit;
DistS := Distance(P.x, P.y, Path[0].x, Path[0].y); // distance from player's position to the start of the path
// look for the closest point
for I := 0 to H do
begin
DistC := Distance(P.x, P.y, Path[I].x, Path[I].y);
if DistC <= DistS then
begin
DistS := DistC;
Index := I;
end;
end;
Result := (DistS <= MaxDist);
if (not(Result)) then
Index := -1;
MSI_SubDebug('MSI_PointOnPath: Index = ' + IntToStr(Index));
end;
(*
MSI_FurthestPoint
~~~~~~~~~~~~~~~~~
.. code-block:: pascal
function MSI_FurthestPoint(tPath: TPointArray; P: TPoint): Integer;
Returns the index of the furthest point (that is on the minimap) in a path
between given indices.
.. note::
| Author: Nava2
| Last Updated: 18 October 2011 by Nava2
Example:
.. code-block:: pascal
See MSI_WalkTPA in
`Walking.simba <https://github.com/SRL/MSI/raw/master/MSI/Core/Walking.simba>`_.
*)
function MSI_FurthestPoint(tPath: TPointArray; P: TPoint): Integer;
var
i, h: Integer;
begin
// finds the furthest visible point
h := high(tPath)
for i := h downto 0 do
if (Distance(tPath[i].X, tPath[i].Y, P.X, P.Y) <= 70) then
begin
Result := i;
Exit;
end;
Result := -1;
if (Result = -1) then
MSI_SubDebug('MSI_FurthestPoint: Can''t find a point on the minimap');
end;
(*
MSI_PathBetween
~~~~~~~~~~~~~~~
.. code-block:: pascal
function MSI_PathBetween(fT, tT: TPoint; tDist, Rand: Integer): TPointArray;
Creates a TPA between points (fT and tT), tDist intervals, Rand randonmness.
.. note::
| Author: Nava2
| Last Updated: 04 October 2011 by Nava2
Example:
.. code-block:: pascal
See MSI_EnterPath in
`Walking.simba <https://github.com/SRL/MSI/raw/master/MSI/Core/Walking.simba>`_.
*)
function MSI_PathBetween(fT, tT: TPoint; tDist, Rand: Integer): TPointArray;
var
hyp, xR, yR: Extended;
l: Integer;
begin
if not LoggedIn then
Exit;
// set Result Length and first point at initial Point
SetLength(Result, Ceil(Distance(fT.X, fT.y, tT.X, tT.Y) * 1.0 / tDist) + 1);
Result[0] := fT;
// if no need for intermediate Points then nvm. :)
if (Distance(fT.X, fT.Y, tT.X, tT.Y) <= tDist) then
begin
Result[High(Result)] := tT;
Exit;
end;
// ratios for 'Similar Triangles' maths
hyp := Hypot(fT.X - tT.x, fT.Y - tT.Y);
xR := (tT.X - fT.X) / hyp;
yR := (tT.Y - fT.Y) / hyp;
// set points
for l := High(Result) - 1 downto 1 do
begin
Result[l].X := Round(fT.X + l * tDist * xR) + RandomRange(-Rand, Rand);
Result[l].Y := Round(fT.Y + l * tDist * yR) + RandomRange(-Rand, Rand);
end;
// last point is tT
Result[High(Result)] := tT;
end;
(*
MSI_ExpandPath
~~~~~~~~~~~~~~
.. code-block:: pascal
function MSI_ExpandPath(ctrlPoints: TPointArray; tDist, Randomness: Integer): TPointArray;
Expands ctrlPoints into a path with tDist intervals and Randomness.
.. note::
| Author: Nava2
| Last Updated: 04 October 2011 by Nava2
Example:
.. code-block:: pascal
See MSI_WalkTPA in
`Walking.simba <https://github.com/SRL/MSI/raw/master/MSI/Core/Walking.simba>`_.
*)
function MSI_ExpandPath(ctrlPoints: TPointArray; tDist, Randomness: Integer): TPointArray;
var
i, h: Integer;
t: T2DPointArray;
begin
Result := [];
h := High(ctrlPoints);
SetLength(t, h);
for i := 1 to h do
t[i - 1] := MSI_PathBetween(ctrlPoints[I - 1], ctrlPoints[I], tDist, Randomness);
Result := MergeATPA(t);
end;
(*
MSI_EnterPath
~~~~~~~~~~~~~
.. code-block:: pascal
function MSI_EnterPath(PPos: TPoint; Path: TPointArray; maxDist: integer): boolean;
Simply calls the native SPS path walking method. Will walk to the path if the
player is within maxDist pixels (SPS), but not on the path.
.. note::
| Author: Nava2
| Last Updated: 04 October 2011 by Coh3n
Example:
.. code-block:: pascal
MSI_EnterPath(SPS_GetMyPos, [Point(1234, 4321)], 50);
*)
function MSI_EnterPath(PPos: TPoint; Path: TPointArray; maxDist: integer): boolean;
var
i: integer;
tmpPath: TPointArray;
begin
if (MSI_PointOnPath(i, Path, PPos, maxDist)) then
begin
tmpPath := MSI_PathBetween(PPos, Path[i], DIST_BETWEEN_POINTS, DIST_RANDOMNESS);
{$IFDEF SPS}
result := SPS_WalkPath(tmpPath);
{$ENDIF}
if (result) then
exit;
end;
MSI_SubDebug('MSI_EnterPath: false');
end;
(*
MSI_WalkTPA
~~~~~~~~~~~
.. code-block:: pascal
function MSI_WalkTPA(Path: TPointArray; Destination, MaxDist: Integer): Boolean;
Walks the given path (Path) to the destination index (Distination). Will walk
the entire path if Destination is set to -1. If within a maximum distance
(MaxDist) of any point in the path, will walk to that point and continue with
the rest of the path.
.. note::
| Author: Nava2
| Last Updated: 15 March 2012 by Coh3n
Example:
.. code-block:: pascal
MSI_WalkTPA(somePath, -1, 100);
*)
function MSI_WalkTPA(Path: TPointArray; Destination, MaxDist: Integer): Boolean;
var
playerPos, dPoint: TPoint;
h, d, nextPoint, attempts, dist: integer;
begin
if (not(loggedIn)) then
exit;
if (length(Path) <= 0) then
begin
MSI_SubDebug('MSI_WalkTPA (True): Path has no points');
result := true;
exit;
end;
MSI_AddHeader('MSI_WalkTPA: Path: '+toStr(Path));
playerPos := MSI_GetMyPos();
if (Destination = -1) then
d := high(path)
else
d := Destination;
// expand the path and set the new destination point
dPoint := path[d];
path := MSI_ExpandPath(path, DIST_BETWEEN_POINTS, 3);
MSI_PointOnPath(d, path, dPoint, MaxDist);
h := high(path);
// finds you on a path and attempts to walk to it if possible
if (MSI_EnterPath(playerPos, path, maxDist)) then
begin
// loops through the points and walks :)
while (not result) and (attempts < 15) do
begin
MSI_WaitWhileResting();
MSI_FindRandoms(true);
nextPoint := MSI_FurthestPoint(path, playerPos);
// if the furthest point is found, walk to it!
if (nextPoint > -1) then
begin
MSI_Debug(format('Next Point: %d (%d, %d)', [nextPoint, path[nextPoint].x, path[nextPoint].y]));
if (MSI_WalkPoint(path[nextPoint], playerPos, randomRange(5, 10)*integer(nextPoint<>h))) then
begin
attempts := 0;
wait(100 + random(100));
playerPos := MSI_GetMyPos();
end;
end;
inc(attempts);
dist := distance(path[h].x, path[h].y, playerPos.x, playerPos.y);
MSI_Debug('Distance to the end: '+toStr(dist)+' pixels');
result := (dist <= DIST_FROM_END);
end;
end;
MSI_CloseHeader('MSI_WalkTPA: '+boolToStr(result));
end;
(*
MSI_WalkPath
~~~~~~~~~~~~
.. code-block:: pascal
function MSI_WalkPath(pathInfo: TPath; toLoc: boolean): boolean;
Walks the entire path (PathInfo), including obstacles. Returns true if the
player is at the ending location. 'inverted' is used to determine which
obstacles to load since they may be different depending on the player's
location.
.. note::
| Author: marpis & Coh3n
| Last Updated: 15 March 2012 by Coh3n
Example:
.. code-block:: pascal
MSI_WalkPath(MSI_Scripts[SCRIPT_VE_MINE].PathInfo, true);
*)
function MSI_WalkPath(pathInfo: TPath; toLoc: boolean): boolean;
var
tmpPath: T2DPointArray;
tmpAreas: array of TStringArray;
locPath, tmpLoc: TPointArray;
i, h, endLocation, attempts: integer;
intObs, tmpSurfaces: TIntegerArray;
obs: TObstacle;
legDone: TBooleanArray;
begin
if (not loggedIn) then
exit;
locPath := MSI_PathFromLoc(MSI_Locations[pathInfo.endLoc]);
// set the temporary variables (may need to be inverted)
if (toLoc) then // if walking from the BANK to the LOCATION
begin
MSI_AddHeader('MSI_WalkPath: '+MSI_Locations[pathInfo.startLoc].Name+' to '
+MSI_Locations[pathInfo.endLoc].Name);
endLocation := pathInfo.endLoc;
intObs := pathInfo.obstacles[OBS_LOC_TO];
tmpLoc := locPath;
tmpPath := pathInfo.spsPath;
tmpAreas := pathInfo.spsAreas;
tmpSurfaces := pathInfo.spsSurfaces;
end else begin
MSI_AddHeader('MSI_WalkPath: '+MSI_Locations[pathInfo.endLoc].Name+' to '
+MSI_Locations[pathInfo.startLoc].Name);
endLocation := pathInfo.startLoc;
intObs := pathInfo.obstacles[OBS_LOC_FROM];
// invert the paths
tmpLoc := MSI_MirrorTPA(locPath);
tmpPath := MSI_MirrorATPA(pathInfo.spsPath);
tmpAreas := MSI_MirrorATSA(pathInfo.spsAreas);
tmpSurfaces := MSI_MirrorTIA(pathInfo.spsSurfaces);
end;
// set a defaul maxDist field
if (pathInfo.maxDist <= 0) then
pathInfo.maxDist := 70;
h := high(tmpPath);
setLength(legDone, (h + 1));
while ((not result) and (attempts <= 10)) do
begin
inc(attempts);
MSI_Debug('Walking attempts: '+toStr(attempts));
for i := 0 to h do
begin
// if a leg was successfully completely, we don't want to start over
if (legDone[i]) then
begin
MSI_Debug('Leg '+toStr(i)+' already done, skipping...');
continue;
end;
MSI_SetupSPS(tmpSurfaces[i], tmpAreas[i]);
// attempt to walk the normal path
result := MSI_WalkTPA(tmpPath[i], -1, pathInfo.maxDist);
// try walking through sub-locations, then normal path
if (not result) then
if (MSI_WalkTPA(tmpLoc, -1, pathInfo.maxDist)) then
result := MSI_WalkTPA(tmpPath[i], -1, pathInfo.maxDist)
else
result := MSI_WalkTPA(tmpPath[i], -1, pathInfo.maxDist);
// if walked the final index, result true
if (result) then
begin
legDone[i] := true;
result := (i = h);
end;
// handle the obstacle for this leg of the path
if ((i <> h) and (length(intObs) > 0)) then
begin
obs := MSI_GetObstacle(intObs[i]);
legDone[i] := false;
if (not MSI_SolveObstacle(obs)) then
begin
// try to relocate and solve obstacle again
if ((obs.symbol <> '') and (MSI_WalkToSymbol(obs.symbol))) then
if (MSI_SolveObstacle(obs)) then
continue;
MSI_Players[CurrentPlayer].ReportInfo.FalseReason :=
'Failed to pass obstacle: ' + obs.name;
MSI_Debug('Failed to pass obstacle: ' + obs.name);
attempts := 11; // to break out of the while..do loop
break;
end else
legDone[i] := true;
end;
end;
end;
// need to set the player's location
if (result) then
MSI_Players[CurrentPlayer].Location := endLocation;
MSI_CloseHeader('MSI_WalkPath: ' + boolToStr(result));
end;
(*
MSI_DeathWalk
~~~~~~~~~~~~~~~~
.. code-block:: pascal
function MSI_DeathWalk: Boolean;
Attempts to walk to the starting location for each respective script if the
player is lost. Teleports home and walks back if need be. Keep in mind that
currently this function doesn't support SPS as SPS requires the maps to be
loaded and until we can figure out a fast way to loop through EVERY bitmap, SPS
will not be supported for Death Walking.
.. note::
| Author: NCDS
| Last Updated: 05 November 2011 by Coh3n
Example:
.. code-block:: pascal
if MSI_DeathWalk then
MSI_Debug('Back on track!');
*)
function MSI_DeathWalk: Boolean;
var
script: TScript;
i: integer;
home: boolean;
begin
if (not loggedIn) then
exit;
if (not(MSI_Settings[SETUP_DEATH_WALK])) then
begin
MSI_SubDebug('MSI_DeathWalk: Function disabled');
Exit;
end;
MSI_AddHeader('MSI_DeathWalk');
script := MSI_Scripts[MSI_Players[CurrentPlayer].Scripts[CurrentScript].Name];
with MSI_Locations[script.pathInfo.startLoc] do
begin
if (length(deathPath.spsPath) <= 0) then
begin
MSI_Debug('No death path for location: '+name);
MSI_CloseHeader('MSI_DeathWalk: '+boolToStr(result));
Exit;
end;
result := MSI_WalkPath(deathPath, true);
// teleport home!
if (not result) then
if (MSI_ClickSpell(SPELL_TELE_HOME)) then // teleport home
begin
MSI_Debug('Waiting to spawn in Lumbridge');
for i := 1 to 45 do // 45 seconds
begin
wait(1000);
if (MSI_AtLocation(LOC_LB_SPAWN, false)) then
begin
home := true;
break;
end;
end;
end;
// Walk back to the script's starting location
if (not result) then
if (home) then
begin
ClickNorth(SRL_ANGLE_HIGH);
result := MSI_WalkPath(deathPath, true);
end else begin
MSI_Debug('Didn''t spawn after 45 seconds');
result := false;
end;
end;
if (result) then
MSI_Players[CurrentPlayer].ReportInfo.FalseReason := '';
MSI_CloseHeader('MSI_DeathWalk: '+boolToStr(result));
end;
(*
MSI_PerformWalk
~~~~~~~~~~~~~~~
.. code-block:: pascal
function MSI_PerformWalk(pathInfo: TPath; toLoc: boolean): boolean;
Will walk the path "pathInfo". Takes into consideration both color and
reflection paths depending on the user's preference as well as the current
state of reflection. Also uses MSI's death walking feature.
.. note::
| Author: Coh3n
| Last Updated: 21 July 2011 by Coh3n
Example:
.. code-block:: pascal
// Walks to VE mine only if your player is set to use SCRIPT_VE_MINER
MSI_PerformWalk(MSI_Scripts[SCRIPT_VE_MINE].PathInfo, true);
*)
function MSI_PerformWalk(pathInfo: TPath; toLoc: boolean): boolean;
begin
if (not loggedIn) then
exit;
MSI_FindRandoms(true);
result := MSI_WalkPath(pathInfo, toLoc);
if (not result) then
if (MSI_DeathWalk) then
result := MSI_WalkPath(pathInfo, toLoc);
if (not result) then
// in case it's already set
if (MSI_Players[CurrentPlayer].ReportInfo.FalseReason = '') then
if (toLoc) then
MSI_Players[CurrentPlayer].ReportInfo.FalseReason := 'Failed walk from '+
MSI_Locations[pathInfo.startLoc].Name+' to '+
MSI_Locations[pathInfo.endLoc].Name
else
MSI_Players[CurrentPlayer].ReportInfo.FalseReason := 'Failed walk from '+
MSI_Locations[pathInfo.endLoc].Name+' to '+
MSI_Locations[pathInfo.startLoc].Name;
end;
http://puu.sh/nXJT
You see where it says the exp and stuff?
That's the debug box, you must post what is says in there.
Simba section. ;)
http://villavu.com/forum/forumdisplay.php?f=308
Thanks for the new link of .99 :D i appreciate it:D
Error: Out Of Range at line 696
The following DTMs were not freed: [Bronze Pickaxe, Iron Pickaxe, Steel Pickaxe, Mithril Pickaxe, Adamant Pickaxe, Rune Pickaxe, Dragon Pickaxe, Bronze Hatchet, Iron Hatchet, Steel Hatchet, Mithril Hatchet, Adamant Hatchet, Rune Hatchet, Dragon Hatchet, Normal Logs, Oak Logs, Willow Logs, Maple Logs, Yew Logs, Magic Logs, Clay Ore, Copper Ore, Tin Ore, Iron Ore, Silver Ore, Coal Ore, Gold Ore, Mithril Ore, Adamantite Ore, Runite Ore, Small Fishing Net, Crayfish Cage, Fishing Rod, Fishing Bait, Fly Fishing Rod, Harpoon, Barb-Tail Harpoon, Lobster Pot, Raw Shrimps, Raw Crayfish, Raw Sardines, Raw Anchovies, Raw Herring, Raw Trout, Raw Pike, Raw Salmon, Raw Tuna, Raw Lobster, Raw Swordfish, Raw Monkfish, Raw Shark, Cooked Shrimps, Cooked Crayfish, Cooked Sardines, Cooked Anchovies, Cooked Herring, Cooked Trout, Cooked Pike, Cooked Salmon, Cooked Tuna, Cooked Lobster, Cooked Swordfish, Cooked Monkfish, Cooked Shark, Uncut Sapphire, Uncut Emerald, Uncut Ruby, Uncut Diamond, Bird'S Nest, Feather, Staff Of Air, Staff Of Water, Staff Of Earth, Staff Of Fire, Air Rune, Body Rune, Mind Rune, Earth Rune, Fire Rune, Water Rune, Chaos Rune, Law Rune, Cosmic Rune, Death Rune, Nature Rune, Blood Rune, Soul Rune, Astral Rune, Rune Essence, Pure Essence, Soft Clay, Vial, Vial Of Water, Jug, Jug Of Water, Bowl, Bowl Of Water, Bucket, Bucket Of Water, Air Tiara, Body Tiara, Mind Tiara, Earth Tiara, Fire Tiara, Water Tiara, Dwarven Army Axe, Coal Bag, SRL - Lamp bitmap, 108]
The following bitmaps were not freed: [SRL - Mod bitmap, SRL - Admin bitmap, SRL - Flag bitmap]
File[C:\Simba\Includes\MSI\Debug Logs\04-04-12 at 11 30 34 PM.txt] has not been freed in the script, freeing it now.
Which script are you trying to run? It looks like something in the TScript record isn't set correctly.
It's when I try to run the Catherby/Fishing Guild script. "MSI" format
What do you mean, "MSI format"? It happens when you run both of them? What about other scripts for other skills?
E: This is fixed in the next version.