Change history
Version 3.5
Released December 19, 2006.
- Binary compatibility with previous versions of SkunkWorks is
broken. Compiled scripts will have to be recompiled. Custom plugins that
interface with SWFilter will also require recompilation.
- The following functions are obsolete and no longer supported.
Scripts using these functions will get
errors.
- skapi.hwndLobby: Specific to the old Zone
launcher.
- skapi.ClickLobbyPlay: Specific to the old Zone
launcher.
- skapi.PdwMemlocFromSz: Decal no longer provides direct
access to memlocs.
- The following values of
skapi.chop are obsolete and no
longer supported. Scripts using these values will get
errors.
- chopAutoShortcut: Now done through keyboard configuration.
- chopRClickMouseLook: Now done through keyboard configuration.
- chopInvertMouseLook: Now stored in UserPreferences.ini.
- chopMuteWhenInactive: Now stored in UserPreferences.ini.
- chopDisableWeather: Not relevant with the new graphics engine.
- Support for Win9X is withdrawn as of
this release. Many functions may continue to work fine on Win9X, but
there are no guarantees.
- Due to a limitation in Decal,
skapi.OutputSz does the same thing
as skapi.OutputLine when sent to
opmChatWnd. For the time being, it is not possible to build up a single,
multi-colored line of output with successive calls to OutputSz. Each such
call will produce a separate line of output.
- Added new output modes opmChatWnd1 through
opmChatWnd4 for sending text output from
skapi.OutputSz and
skapi.OutputLine to the new
floating chat windows.
- Added
skapi.xpLeft3D,
skapi.xpRight3D,
skapi.ypTop3D, and
skapi.ypBottom3D to denote
the coordinate bounds of the 3D view on screen.
- Revamped the way
skapi.AssessAco ID requests
are queued, so that new requests get priority over retries of failed attempts.
AssessAco now accepts an optional fLowPriority argument to allow
you to queue requests at a lower priority than normal.
- Added the following properties to the info provided by
aco.oai and
OnAssessItem:
- ibi.szImbuer:
The name of the player who imbued an item.
- ibi.fSellable:
True if an item can be sold.
- ibi.fIvoryable:
True if Ivory can be applied to an item.
- ibi.fDyeable:
True if an item can be dyed.
- ibi.fUnlimitedUses:
True if an item has unlimited uses.
- ibi.rareid:
The Rare ID of a rare item.
- iei.rgflagsSpell:
Spell flags associated with an enchanted item.
- cbi.raw: An
associative array of raw item properties. This provides a way for scripts to
access newly introduced properties not yet supported natively by
SkunkWorks.
- Added the following events:
- Added the following skapi wrappers for ACHooks methods:
- Added the following data access methods to the
mbuf message buffer object
(useful only to those who do their own message parsing):
- Added
aco.iconOverlay and
aco.iconUnderlay.
- skapi.GoToMaploc
and skapi.TurnToHead no
longer fight you for control of the keyboard. If you press any movement keys
during the execution of these functions, they will yield gracefully and allow
you to control your character manually.
- Added support for dual-logging. Instead of one global message
queue shared by all instances of SkunkWorks, each instance now has its own
queue.
- Keystrokes and mouse commands are now fed directly to the AC
window instead of the global keyboard buffer. This should allow multple
instances of AC and SkunkWorks to coexist without intefering with each other,
and should also improve the behavior of scripts running in the background.
Note however that there may be some issues with using
skapi.Keys to enter text into the
chat buffer in background. Use
skapi.PasteSz instead.
- Changed ACO lifetime management to used Decal's
ObjectDestroyed hook. This is still being tested, so be on the lookout
for memory leak issues.
- Doubled the size of the event queue to account for increased
message volume.
- Fixed a bug in the way buffs were tracked for percentage-based
buff spells such as Asheron's Benediction.
- Fixed a bug that prevented
OnMeleeLastAttacker from
firing properly.
Version 3.4
Released March 25, 2005.
Version 3.3
Released October 15, 2004.
- Added
skapi.SetStackCount to
adjust the stack count of the selected item without using keystrokes.
- Added
aco.fOpen to indicate whether a door
or chest is in the "open" animation state without requiring an assessment.
- Added the following property to the info provided by
aco.oai and
OnAssessItem:
- aco.ioc now updates
properly when you charge or discharge a mana stone.
- Fixed issues with the October patch related to the new
Salvaging skill.
Version 3.2
Released August 14, 2004.
- Added
aco.ioc to indicate which, if any,
colored halo an object's icon displays (e.g. blue for enchantments, red for
healing foods, etc.).
- Added the following events:
- OnChatBoxMessage
fires when a text message of any kind is displayed in the in-game chat window.
- OnTipMessage
fires when a text message is displayed in the upper left corner of the screen.
- Exposed ACHooks methods and events to
Decal-side UI script via the
hooks object.
- Added the following property to the info provided by
aco.oai and
OnAssessItem:
- Made some minor tweaks to the way
skapi.GoToMaploc handles
turning when stopped.
Version 3.1
Released June 11, 2004.
- Added the
OnCraftConfirm event.
- Added cbi.species
to the info provided by aco.oai and
OnAssessItem.
- Added access to extended character options via
skapi.chop2.
- skapi.chop and
skapi.chop2 now immediately reflect
changes made to your character options. You no longer have to relog to get
this information refreshed.
- Similarly,
skapi.rgspellid now reflects
changes made to your spell tabs in a more timely fashion, without requiring a
relog.
- SkunkWorks now tracks and processes client-to-server messages
in addition to the server-to-client message traffic it has always monitored. I
haven't yet exposed any event related to client-to-server messages (so far
they're used purely for internal bookkeeping of changes to spell tabs and
option flags), but it's now possible to use
OnRawServerMessage to trap
client-to-server messages as well. Note that there is no protocol
documentation that I know of for these messages, so you're on your own in terms
of researching and decoding them.
Version 3.0
Released March 11, 2004.
Version 2.9
Released February 25, 2004.
- Fixed the
OnTell/OnTellMisc
confusion introduced by the January chat color changes.
- skapi.fPointerBusy
now works properly again after being broken by the January memloc changes.
- Fixed protocol issues related to the February patch.
- When you ID another player, the server no longer sends
information about that player's loyalty and leadership as part of the ID
message. As a result, the loyalty and leadership fields of
aco.oai.chi no longer contain
meaningful information (but still exist for reasons of COM compatibility).
Version 2.8
Released February 12, 2004.
- Fixed spell table, protocol, and memloc issues related to the
January patch. Memloc names are now compatible with Decal 2.6.1.0.
You must be running Decal 2.6.1.0 or later to use this
version of SkunkWorks.
- Fixed a bug in the calculation of
maploc.lbt.rgz at altitudes above 400
meters.
Version 2.7
Released December 20, 2003.
- You can now define hotkey and timer event handlers in your
Decal-side UI script.
- Added
skapi.SetCombatMode for
entering and leaving combat mode without keystrokes.
- Added
skapi.SetIdleTime to set
the client's inactivity timeout.
- Added an
OnDisconnect event to let your
script know if your server connection has been dropped.
- Added access to Cell.dat terrain info via
maploc.lbt.
- Fixed a bug in which hyphenated character names could appear
in the wrong slot in
skapi.rgszChar.
- Fixed a bug involving false positive returns from
skapi.WaitEvent using
wemSpecific. (Thanks to Blau for tracking this down.)
- Fixed a bug that prevented
OnCommand from firing when bypassing
the console with a COM .EXE. (Thanks to Reficul for this one.)
- Fixed a minor bug in the calculation of
maploc.landblock in
skapi.MaplocFromSz and
skapi.MaplocFromLatLng.
- Fixed the "Spell table decoding error" issue with the December
patch.
Version 2.6
Released November 3, 2003.
- Added skapi.hwndAC
and skapi.hwndLobby.
- Added Decal-side UI scripting
capability, a big complicated new feature that lets you embed some of your
UI-handling code into your XML view schema for fast execution directly under
Decal.
- Added an in-game file
browser to the set of included libraries. You can include this directly in
your own project or study it as a working example of Decal-side UI scripting.
- Added a browse button to the
in-game miniconsole to allow you to
browse for scripts without Alt+Tabbing out to the console.
- Tusker Emporium and Xarabydun (the underground town, not the
Uninhabited Area) now count as dungeons for purposes of
maploc.dungid and
maploc.fInDungeon. However,
coordinates in these walk-in dungeons still follow the global aboveground
coordinate system instead of the local coordinate system used by portal-in
dungeons. So any routes created in Tusker Emporium or Xarabydun should still
work without modification. (If you know of any other large walk-in dungeons
like this, let me know and I'll add them to the list.)
- The Snowmen who sell Poofy Snowballs now count as
ocmMerchant rather than ocmMonster.
- SkunkWorks now works compatibly with the encrypted Memlocs.xml
used by Decal 2.6.0.0 and higher.
Version 2.5
Released August 26, 2003.
- Added
acf.burdenMin and
acf.burdenMax to allow filtering
by burden.
- Added
skapi.fPointerBusy, which
returns True if the mouse pointer is in the hourglass state.
- Added the following property to the info provided by
aco.oai and
OnAssessItem:
- Added
skapi.coacoTradeLeft and
skapi.coacoTradeRight,
representing the contents of the two sides of the Secure Trade window.
- Added
skapi.KeylessFaceHeading
and skapi.KeylessAutorun to
allow crude keyless navigation using Decal's navigation hook functions.
- skapi.TurnToHead
and skapi.GoToMaploc now
pause whenever the chat typein buffer has focus, to avoid garbling your chat
with navigation keystrokes. Navigation automatically resumes when the chat
buffer loses focus again. In the case where skapi.GoToMaploc is called
with fWalk = false, your toon will keep running while the chat
buffer has focus, but will be unable to steer until the chat buffer loses
focus.
- skapi.Keys,
skapi.MouseMove, and
skapi.MouseButton now work
when the game isn't running for sending commands to the Windows desktop. This
should allow for easier automation of the Zone login process. (When the game
is running, these functions continue to work as they always have.)
- skapi.SkidFromSz
was added in version 1.5 but has apparently never worked. Now it does.
- There was a bug (Gol's login bug) in which wearing enchanted
armor or jewelry continuously for more than three weeks of toon time could
cause spell timer decoding errors during login. This in turn led to inventory
and other errors as your script executed. This bug has now been fixed.
- Fixed a bug (Gol's trade bug) in which ACOs in the Secure
Trade window could time out and be garbage collected before the trade was
finalized, resulting in inventory errors with the received items.
- Fixed an inventory bug caused by handing packs of items
directly from player to player (without drop muling or using Secure Trade).
Version 2.4
Released July 19, 2003.
- Added the following new ACO and skapi methods, using newly available
Decal functions. Note that these functions require
Decal 2.5.2.0 or higher.
- aco.AddToTrade
adds an item to the Secure Trade window without using the mouse. The trade
window must already be open.
- aco.AddToUst
adds an item to the Ust window without using the mouse. The Ust window must
already be open.
- aco.Drop
drops an item on the ground.
- aco.Tell
sends an @tell to a specific player (by ACO) without using the keyboard.
- skapi.Tell
sends an @tell to a specific player (by name) without using the keyboard.
- skapi.Chat
sends chat messages of various kinds without using the keyboard.
- skapi.Logout
logs out of the game without using the keyboard or mouse.
- Added an
aco.burden property to return the
weight of an item in burden units without any need to assess it. (Thank you,
Turbine!)
- Added the following new properties to the info provided by
aco.oai and
OnAssessItem:
- ibi.fAttuned:
True if the item is Attuned to your character (no-give).
- ibi.fBonded:
True if the item is Bonded to your character (doesn't drop on death).
- ibi.fRetained:
True if the item is flagged as Retained (can't be sold or salvaged).
- ibi.fDropOnDeath:
True if the item always drops on death.
- ibi.fDestroyOnDeath:
True if the item is destroyed on death.
- Inserted a fix for a bug that sometimes caused nearby ACOs to
be invalid when you emerge from portal space, particularly when portaling into
a dungeon or remote part of the world where you haven't been in a long time. I
believe the problem had to do with newly created ACOs timing out and getting
destroyed again during lengthy Cell.dat downloads. I'm pretty sure I have it
fixed now, but be on the lookout for further flaky behavior of this sort.
Version 2.3
Released June 22, 2003.
- Added
aco.workmanship as a primary
property of the ACO. You no longer need to assess the ACO to get workmanship
info.
- Added
acf.workmanshipMin and
acf.workmanshipMax to allow
filtering by workmanship.
- Added
acf.FMatchAco for testing
individual ACOs to see if they match the filter criteria.
- Added
maploc.fIndoors to indicate
whether a location is indoors or outdoors.
- Added
aco.distApproach, which gives
a rough idea of how close you must approach an object in order to use it.
- Removed aco.oidNoteSeller and
acf.oidNoteSeller. This has actually been broken for several months,
but is now moot since the May patch removed the penalty for cashing notes at
the wrong merchant.
- The otyPK bit of
aco.oty is now updated properly when
your PK status changes.
- Fixed a bug in which items given to NPCs or other players and
then quickly given back again had bogus ACO properties (Vincent's
scroll-passing bug).
- Fixed a bug in which
OnFellowInvite was firing for
confirmations other than fellowship invitations.
Version 2.2
Released March 31, 2003.
- Added the Clear History command to the console's
File menu.
- Added coaco.Clear
to empty a collection.
- Added skill-formula information in the form of
skinfo.attr1,
skinfo.attr2, and
skinfo.divisor.
- Added the following properties to the info provided by
aco.oai and
OnAssessItem:
- skapi.ShowControls now
accepts XML filenames as well as literal XML text.
- Added
skapi.FSpellidInSpellbook,
which tells you whether you know a given spell.
- Added
skapi.burdenFull to calculate
your full (100%) burden capacity in BU.
- Added queuing and retrying logic to
skapi.AssessAco to deal with
changes in the way ID requests are handled in the March game update.
- Added the following properties to the Fellow object used by
skapi.cofellow,
OnFellowCreate, et al.:
- Added the
OnFellowUpdate event to notify
you of server-driven fellowship stat updates.
- Added ocmHook to the set of defined
object categories, to help distinguish
housing hooks from the items hung on the hooks.
- Fixed a bug with
skinfo.lvlCur in which logging
out while buffed mistakenly carried the buffs over to the next character you
logged in.
- Fixed a bug in which DIs dropped from a toon that does not
leave a corpse were not being properly removed from inventory.
- Fixed a bug in which
aco.cpyValue was not being
properly updated as heal kits were used.
Version 2.1
Released February 21, 2003.
- Added the OnNavStop
event and changed skapi.GoToMaploc
to fire it on completion instead of OnActionComplete
or OnSpellFailSelf.
Scripts using the version 2.0 implementation of
skapi.GoToMaploc will have to be changed to detect the new event.
My apologies for the incompatibility, but a separate event seemed like the better
way to go after all.
- skapi.CancelNav
now works to stop all forward motion at any time, whether or not
skapi.GoToMaploc is active. So
for instance you can now use skapi.CancelNav to halt the continuing forward
motion that results when fStopOnArrival is false.
- Improved the documentation of
skapi.GoToMaploc to clarify its
use of held-down keys and the lingering effects of specifying fStopOnArrival
as false.
- Added the following COACO set operations:
- Added {break} (for Ctrl+Break) to the set of
special key names recognized by
skapi.Keys,
skapi.KeyState, and
skapi.Hotkey.
- Fixed a bug in which hotkeys enabled by
skapi.Hotkey remained enabled after
the script exited.
- Changed the default mana conversion modifier reported by
ibi.fractManaConvMod to be zero instead of
one, for consistency with the numbers displayed on the in-game Examine panel.
Version 2.0
Released January 24, 2003.
- Added precise client-side navigation via
skapi.GoToMaploc
and skapi.CancelNav.
(Note that I have not yet updated SkunkNav to use these functions.)
- Added skapi.vRun,
which returns a rough estimate of your running speed.
- Added aco.fExists,
which is the SkunkWorks equivalent of the old ACScript Exists property.
I also added documentation for aco.icon
and aco.model to the skapi section of
the docs. (Previously these were documented only in the ACScript section.)
- Added aco.oai to keep
track of the last received assessment info for that object.
- Added ibi.fractManaConvMod,
ibi.vitalRestored, and ibi.dlvlRestored to the information returned by
OnAssessItem.
- Added console.RunScript
to allow you to programmatically stop your script and start another in its stead.
Note that this is a console API and not a skapi API, since it's available only to
scripts running under the console and not to standalone COM apps.
- Added a Login Script...
option to the console's Configure menu to let you specify a script to be
run automatically on login.
- If your script gets hung in loop with no calls to WaitEvent,
causing the console to become unresponsive, you can now use the in-game
Stop button to terminate the script and regain console control.
- OnHotkey no longer
fires for characters typed into the chat buffer.
- Tusker dungeons on Aphus Lassel and elsewhere should now be reliably
detected as dungeons by maploc.fInDungeon.
(This means any route files you made in those dungeons might need to be updated.)
- Fixed a bug in the initialization of aco.maploc.head for
some objects, including some doors. (A door's heading tells you which direction
you need to face to go through it.)
- Fixed a bug in which skinfo.lvlCur
didn't correctly reflect buffs to unusable skills.
- The installation package now includes a Skapi.idl for use by Delphi
programmers or other COM users who might need it.
Version 1.9
Released November 14, 2002.
- Added skapi.KeyState
for querying the up/down state of keyboard keys.
- Added skapi.Hotkey
and the OnHotkey event for raising events
when specific keys are pressed.
- Added coaco.FContainsAco
for finding out if a given ACO is a member of a given collection.
- Added /swc commands
for starting and stopping scripts from the in-game chat line.
- Added acf.maploc
to allow filtering based on distance from something other than yourself.
- Added the OnFellowInvite
event, which fires when someone invites you into a fellowship. After you
accept the invitation, OnFellowCreate
fires as usual.
- The Command panel no longer
appears as a separate view on the Decal bar. Instead these controls now appear
on a second notebook tab on the
in-game miniconsole. I also changed the
miniconsole's title string from "Script" to "SkunkWorks".
- The miniconsole now comes up immediately when you log in, instead
of waiting until you emerge from portal space.
- The Stop button should work more reliably now on COM DLL
scripts.
- Rename references and
Automatically register are now
turned off by default for new projects. If you're migrating a script from
ACScript, you'll need to turn these back on for that project. For pure SkunkWorks
projects that use no ACScript functions, off is the correct setting.
- Double-clicking a script file in the
Project Options dialog now opens the registered
editor for that file type (usually Notepad).
- Updated and improved SkunkNav.js in various ways:
- Moved the bulk of the SkunkNav documentation out of the
script itself and into a new section of the
main SkunkWorks docs.
- Routes now have an optional
route.csecTimeout
property that you can set to raise an error if the route takes too long
to execute.
- You can now begin a route with an @house recall or
@lifestone command. See
route.szRecall for details.
(Note that recall spells are not supported.
Obviously this would be a cool feature to have, but I consider reliable
spellcasting with fizzle detection, mana replenishment, etc. to be outside
the scope of SkunkNav.)
- route.AddMaploc
and related functions now allow you to optionally insert into the middle of
a route instead of at the end. You can also now delete points from a route
using route.DeleteMaploc.
- For routes that contain recalls or portals, you can now
specify an explicit reverse route for use by
route.RouteReverse.
- You can store more than one route in a given file and
load them individually by passing strings of the form "filename[routename]"
to RouteFromFile.
(This is similar but not identical to Tallinu's tagged route extension.)
- Updated the portal-finding and door-opening code to take
advantage of recently added features such as
skapi.AssessAco and
acf.AcoGetSorted. The
door-opening code should now also be somewhat better at dealing with
doors slammed in your face at just the wrong time.
- Please note that SkunkNav.vbs is no longer
supported and has been removed from the SkunkWorks installation package.
From now on the JScript version will be the only version. You VBScript users can
include SkunkNav.js in your projects to get the identical functionality you got
from the VBScript version, with two exceptions that require you to change your code:
- Where you used to say New RouteCls, you should now
call the RouteNew function instead.
- References to route.rgmaploc should be changed to call
route.MaplocGet instead.
I apologize for these minor incompatibilities; hopefully the new
features will help offset the inconvenience.
- Added a new RouteMaker sample script
to demonstrate new routing features and provide a user-friendly GUI for creating
and editing routes. The old NavSample script still works, and is still included
in the install, but doesn't cover all the new options.
- Fixed a bug in which buffs and debuffs were not being cleared
on death.
- Fixed a bug in which
skapi.cofellow was not being
cleared when you quit or were dismissed from a fellowship.
- Fixed a bug in which earning XP in a buffed skill caused
skinfo.lvlCur to lose track
of your buffed skill level.
- Fixed an off-by-one bug with the lvl argument to
skapi.DexpToLvl.
Version 1.8
Released October 16, 2002.
- Added a Debug menu to
the SkunkWorks console to allow breakpointing and single-stepping of scripts using the
Microsoft Script Debugger. This feature is still somewhat
experimental so expect some rough edges.
- Added the following new ACF filtering criteria:
- Added coaco.Sort
for sorting arbitrary ACO collections, and
acf.CoacoGetSorted
and acf.AcoGetSorted for sorting and
filtering in one step.
- Added mcmSalvageBag to the
mcm definitions in SkapiDefs.
- Expanded the cmid definitions
in SkapiDefs to include all mappable commands.
- Fixed a bug with the iei.csecPerMana value provided
by OnAssessItem.
- Fixed Login and Approach Vendor packet issues related to the
October game update.
Version 1.7
Released September 19, 2002.
- Added the OnRawServerMessage
event to let you do your own decoding of server messages not handled natively by
SkunkWorks.
- Added hooks for two-way communication between scripts and
custom plugins. This lets you run your
UI on the Decal side, with full access to Decal UI features, while still keeping
the bulk of your macro in script form.
- Added SkunkWorks.GetSkapiCls
for use in creating SkunkWorks-aware ActiveX DLLs.
- Added mixed-language support.
You can now include files written in different scripting languages in the same
project (although each file must be all one language).
- Added skapi.SpellInfoFromSpellid
and skapi.CospellFromFamily
to expose more spell information from Portal.dat.
- Added skapi.PdwMemlocFromSz
and skapi.DwReadMemloc
to allow reading from arbitrary addresses in client memory.
- Enhanced skapi.rgspellid
to return spellbook as well as spelltab information.
- Cleared up some confusion with allegiance chat. (Thanks to Blau
for chasing these down.)
- skapi.OnAssessItem
now reports character level wield requirements in
ibi.lvlWieldReq for items such
as Elysa's Favor that require a minimum character level.
- Some of the newer Residential Quarters are now properly recognized
as dungeons by maploc.fInDungeon.
- Fixed an "overflow" error in skapi.MaplocFromSz
for large southern latitudes.
- Fixed a bug in which relogging as a different character could lose
login information, forcing a restart of the game.
Version 1.6
Released September 5, 2002.
- Added console.Clear
to clear the console output window.
- Added skapi.cmsecQueueDelay
to measure message queue lag.
- Added fellow.Assess
and skapi.AssessAco to assess
fellowship members and objects in general without bringing up the Fellowship or Assess
panel. (Based on Decal's GetFellowStats function.)
- Added the following character information properties:
- Added the following new events:
- Keymap changes now take effect immediately on your next login.
You no longer have to quit and restart SkunkWorks to get them noticed.
- If you double-click on a .swx file while the console is running,
or try to start a second console in any other way, the
command line is now passed
to the existing console for execution. You can also stop a running script from
the Windows command prompt.
- skapi.SpellidFromSz
now accepts spell names of the form "Strength Self VII" as valid aliases for the
true level VII spell names such as "Might of the Lugians".
- skapi.OnAssessItem
now reports the wield requirements for high-level weapons and armor in
ibi.skidWieldReq and
ibi.lvlWieldReq.
- Removed the Calibrate command and the code that
implemented it. SkunkWorks nows uses Decal memlocs for navigation, and needs no
calibration beyond the regular monthly update of Memlocs.xml.
- Revamped the implementation of in-game controls to remove the ten-controls-per-type
limit and add support for notebook and list controls. skapi.SetControlProperty
now works with parametrized as well as scalar properties. You can also now
call control methods and interrogate property values using skapi.GetControlProperty and
the new OnControlProperty event.
- Tweaked the project file format slightly to make .swx files more
portable from one computer to another. (Your existing project files will of course
still work with the new code.)
- Fixed a bug that caused files opened by your script to remain open
after you hit Stop.
- Fixed (again) an "out of memory" bug related to overfilling the console
output window.
- Fixed "Could not view file mapping" on Win9X.
- Fixed a bug that locked up the game on event queue overflow.
- Fixed a localization bug in
skapi.MaplocFromSz and
route.Read that made routes unusable in locales that use comma as the
decimal separator. Users in such locales may need to recreate their route files
to get them properly localized.
Version 1.5
Released August 16, 2002.
- Added aco.MoveToStack
for combining stacks of items (based on Decal's MoveItemEx).
- Added the following functions and properties for built-in
translation of spell names to spellids and vice versa. These functions get the
spell info directly from Portal.dat and so are always up to date.
- Added the following functions and properties for accessing the
skill and XP table info in Portal.dat:
- Added the following functions and properties for manipulating ACO
collections:
- Added the following new events:
- skapi.ShowControls
can now be used to activate (restore) or deactivate (minimize) an existing panel
without re-creating it.
- skapi.AcoFromSz,
skapi.AcoFindInInv,
and skapi.CitemOfKindInInv
now search for wildcard patterns as well as exact names.
- OnRemoveFromInventory
now fires properly for items sold to merchants.
- Fixed an "out of memory" bug related to overfilling the console
output window on Win9X.
- Fixed an inventory bug related to items received by secure trade.
- Fixed Login packet issues related to the August game update.
Version 1.4
Released August 3, 2002.
- Added skapi.VkFromCmid,
which you can use to tell if a given command is mapped to a key.
- Added skapi.szFellowship
and skapi.cofellow.
- skapi.CastSpell
now bypasses Decal's CastSpell function and calls the client directly,
allowing any spell to be cast.
- skapi.TurnToHead
did not work properly on systems lacking 3D acceleration hardware. Now it does.
- Removing gear with multiple enchantments now fires
OnSpellExpireSilent instead
of OnSpellExpire.
- Completely redesigned the algorithm for pruning out-of-range
ACOs from the object table. This should clear up most problems with unbounded
collection growth, spurious monsters in dungeons, and the like.
- Fixed a bug in which loot picked up by other players was still
classified as on the ground.
- Fixed a bug in which the iwi argument was not being
passed to OnAssessItem in some
cases.
- Fixed a bug that prevented OnAssessItem from firing on items
with more than ten enchantments.
- Fixed a bug that failed to unequip the last arrow in your
quiver when fired.
- Fixed a bug in which Foci were sometimes improperly inserted
into the main pack instead of a pack slot.
- Fixed a stacking bug in
aco.MoveToPack.
- Fixed a navigation bug when walking slowly in combat/magic
mode.
- Fixed a compatibility bug in ac.GetObject.
- Fixed a bug when clicking Go on the in-game miniconsole
with no script selected.
- Fixed a bug in which the Stop button sometimes took a long time
to stop the script.
Version 1.3
Released July 19, 2002.
Version 1.2
Released June 9, 2002.
- Added the OnActionComplete event.
- Added the OnObjectDestroy event.
- The OnCommand event
can now be triggered by commands typed into the chat buffer as well as by the
Command panel. Also, when using the Command panel, uparrow and downarrow now
cycle through the list of recent commands.
- Added a cmc argument to skapi.OutputSz and skapi.OutputLine to let you control
the color of the chat window output.
- Added aco.oidMonarch.
- Added a console API object
to host the console.StopScript
and console.SetPriority
functions.
- Added Pax's SpellObj.js
to the libraries.
- The acoTarget argument to skapi.CastSpell is now optional,
and defaults to yourself if omitted.
- Implemented a fix for the console crashes some people have been
seeing during game startup or "Rename references".
- Changed skapi.expTotal
and skapi.expUnspent from Longs
to Doubles to accommodate characters with more than 2 billion experience points.
(Yes, apparently there are such characters.)
Similarly, handlers for OnStatSkillExp,
OnStatTotalExp, and
OnStatUnspentExp now receive
Doubles instead of Longs as their exp parameters.
- Changed the interpretation of skapi.WaitEvent(0, wemFullTimeout)
from "wait forever" to "wait zero milliseconds". WaitEvent(0) keeps
its previous meaning of "wait as long as it takes to clear the queue".
- Fixed an inventory bug that occasionally caused items to show up
in the wrong pack, or in two packs at the same time.
- Fixed a bug that caused the login packet to be dropped for
some heavily buffed characters.
- Fixed the "Beer Keg is a monster" bug in skapi.CoacoFromOcm.
- Fixed a bug in the decoding of skapi.szWorld on Darktide.
- Closed some memory-leak loopholes in the object table manager.
- OnMyPlayerKill now fires correctly
when you, as a PK, kill another player. (Thanks to Pax for explaining this.)
- Fixed an ACScript incompatibility in ac.GetObject. When
given a nonexistent OID, it used to return null. Now it returns an object
whose properties are all undefined. (skapi.AcoFromOid, however,
continues to return null in that case.)
- Fixed a compatibility bug in aco.Type as applied to merchant
catalog items.
- Added an ACScript API reference to the
SkunkWorks documentation package. Special thanks to Pax for permission to include
this excerpt from the original ACScript docs.
Version 1.1
Released May 18, 2002.
- skapi.SklvlUnbuffedFromSkid
and skapi.SklvlDefaultFromSkid
now report a skill level of zero for unusable skills. (In 1.0 they were mistakenly
treated as untrained.)
- Added skapi.fInChatBuffer.
- Added skapi.CastSpell.
- Added aco.MoveToPack
and aco.MoveToContainer.
- Added aco.Use
and aco.UseOnAco.
- aco.Exists now properly returns false for objects
that have been destroyed.
- skapi.WaitEvent( )
with no arguments now means the same as skapi.WaitEvent(0). Likewise for
ac.WaitEvent.
- Dead enemies no longer show up as live in the collection returned
by skapi.CoacoFromOcm(ocmMonster).
- Similarly, live players who have portalled out to elsewhere no
longer show up in the collection returned
by skapi.CoacoFromOcm(ocmPlayer).
- Fixed an overflow bug with ac.GetObjectCollection(ciCollectionAll)
and similar cases.
- Fixed a bug the calibration code that prevented it from finding
proper calibration for the May patch,
- Fixed various parameter types in the API for better COM compliance.
- Added support for spell tabs 6 and 7, and removed a 100 spell/tab
limit.
- Using the Decal console to disable the SkunkWorks plugin (but
not the filter) now prevents the SkunkWorks console from launching at game startup.
- The repeating "queue full" message now appears only if the event
queue overflows while a script is running. Shutting down the console in mid-game
no longer triggers this message.
- The Regen Crackers command is now enabled even if you don't have
Visual Basic installed.
- Added several sample scripts, including therkyn's T.js.
Version 1.0
Released May 3, 2002.
Version 1.0 was the first release.