polserver/docs/archive/core-changes-old.txt
Gabriele Tozzi 0d2237bbbf More on line endings normalization
Blame myself :P
2016-02-12 11:39:51 +01:00

1915 lines
90 KiB
Text

10/28/1999 - POLC085
==========
Fixed a bug where dragging part of a stack from the ground would
misplace the remainder.
Items that are 'SaveOnExit 0' and in a container will no longer be saved.
10/25/1999 - POLC084
==========
script compiler: '\' will function as an escape character in strings
- \n and \t are defined as special characters
script compiler: *.hsr files are ASP-like source pages
(see files in the experimental files section for examples)
added http::WriteHtmlRaw(str) for .hsr/.asp pages
script scheduler uses a priority divider now; will be testing to see
if this can help with lag in some instances
polcore().set_priority_divide( newvalue ) added
polcore().priority_divide (read-only)
script compiler will generate a wordlist file if '-W' option is passed.
added mobile.criminal property
when loading, 1 dot will print per 1000 objects loaded.
Fixed a bug in array.insert(index,value) where it was impossible
to insert at the end of an array, or into an empty array.
Added array.append(value), array.reverse(), and array.sort() methods
Inactivity timer added: warning after 4 minutes, disconnect after 5 mins
MaxCallDepth for scripts can be specified in pol.cfg (default 100)
!! Decreased system load time. Please BACK UP your datafiles!
IgnoreLoadErrors=1 in pol.cfg will ignore (most) load errors and start server
Script listfiles generated with -l with always contain source and
file/line information, even if -i is not specified
(it's best not to use -i, in fact -- less overhead)
Added polcore().script_profiles property:
returns array of { name, instr, invocations, instr_per_invoc, instr_percent }
- same data as output by .log_profile
Added polcore().clear_script_profile_counters() method.
array.insert() functions properly again
Overhauled the client item manipulation system (getting,dropping,equipping items):
- LOS is now checked when picking up an item
- LOS is checked when dropping an item
- range must be <= 2 to pick up an item
- drop-item range increased to 2
- picked up items are marked 'inuse'
Note this causes some easy resource-use exploits until scripts mark
items in-use. But that's better than crashing.
Added uo::ReserveItem(item) and uo::ReleaseItem(item)
- these mark an item as inuse for this script only to use.
- all reserved items will be released on script exit if ReleaseItem is not called.
'inuse' items have special rules:
- they cannot be picked up (not even part of a stack)
- they cannot be added to, if they're a stack.
- they cannot be used as reagents
- they cannot be used as projectiles
- they cannot be spent at a vendor
- they cannot be sold to a vendor
- they will not decay
- if a stack, they cannot be added to if a like item is bought at a vendor
- The following functions will not operate on inuse items, unless the calling
script reserved the item for its use with ReserveItem
- DestroyItem
- SubtractAmount
- MoveItem
- MoveItemToContainer
- EquipItem
This means most scripts that have to check for materials twice (typically
before and after doing sound effects and delays) can just reserve the items
before checking for materials.
I'm considering whether inuse items should be doubleclickable, and
whether or not the doubleclick script should start out with the
item already reserved.
MoveCharacterToLocation and login will generate EVID_ENTEREDAREA events
Ghosts will no longer use nor require stamina for movement
10/07/1999 - POLC083
==========
Lots of items down there. The highlights:
- secure trading (but see important note about enabling)
- stamina costs for movement
Startup output -- error messages, etc will be logged to 'start.log'.
Disabled the following internal text commands, because a replacement
script exists, or they're rarely used and a script could be written.
(They still exist; renamed to i_[cmd] in case you really need them)
.ident
.setusescript
Added polcore() members:
log_profile( clear )
text command script names can now contain underscores
New config file - config/servspecopt.cfg, for Server Specific Options
- DefaultDoubleclickRange, which is used if DoubleclickRange isn't
specified for an objtype in itemdesc.cfg
The default doubleclick range (if not specified there) is now 2
GMs should still see ghosts after they drop out of warmode
added mobile.enable( privilege ), mobile.disable( privilege )
- for enabling/disabling privileges
Added functions to the NPC module:
WalkTowardLocation( x, y );
WalkAwayFromLocation( x, y );
RunTowardLocation( x, y );
RunAwayFromLocation( x, y );
TurnTowardLocation( x, y );
TurnAwayFromLocation( x, y );
polcore().itemcount will now decrease
Added 'ipmatch' property to servers.cfg, so localhost and LAN servers
can be made to only show up if you connect from localhost or the lan.
Added the 'all' privilege which effectively gives you..all the privileges!
Added the 'dblclickany' privilege which lets you doubleclick any
doubleclickable object regardless of range
itemdesc.cfg has a 'Weight' entry which can specify whole weights
or fractional weights ("1/50" etc) in stones
Item weights will be tracked. No limits or stamina effects yet.
added 'object.weight' member
Fixed an integrity problem if doors were on a zone boundary
Fixed a crash bug if a house component was destroyed before the house was.
Items will not decay on multis unless "DecayOnMultis 1" is set in itemdesc.cfg
! (Note this should be set for corpses in particular)
Gave boats some TLC: (some scripts+config files need updated to use this)
- corpses created on a boat will move with it.
- items dropped on the boat when a corpse decays will move with it
- the remainder of a stack half-removed from a deck will move with the boat
- NPCs created directly on boats will move with it
- added the rest of the boat definitions to config/boats.cfg
- walkon scripts will fire if the item's Z is 0 or 1-z below the walker
(specifically so that boat planks can have walkon scripts)
- massaged the data from client files so long boats don't have a hole in
the middle.
- fixed the "Deck is not empty" bug on boat destruction
- characters who log off on a boat will be moved when the boat moves
- added member 'boat.has_offline_mobiles'
- added method 'boat.move_offline_mobiles(x,y,z)' for moving the offline
mobiles carried by a ship somewhere. This function is very trusting
regarding the coordinates you pass it. As long as they're within the
world bounds, it'll move the mobiles there.
"walkon" scripts have more parameters. the full declaration:
program walkon( who, what, lastx, lasty, lastz )
the 'last' coordinates are the coordinates the walker is coming from.
MoveCharacterToLocation takes a 5th parameter, 'flags'
if MOVEMOB_FLAG_FORCELOCATION included, force z-location
(ignore any obstacles)
Added polcore().packages() - array of installed package names
Added polcore().compiledate - text string
Added polcore().compiletime - text string
Incorporated Beosil's latest crypto code to deal with the 21036-bytes bug
Fixed a bug with gump-dialog handling for dialogs with many textentry fields
Package start scripts will run under the Linux build
Added basics of secure trading:
Enabled if EnableSecureTrading=1 is set in pol.cfg.
Items can be added to the secure trade window
Items cannot be removed except through cancelling the trade
Items in the secure trade window can be singleclicked
Unlocked containers in your side of the trade window can be
doubleclicked, and will open for both trading parties
stacks currently cannot be added to.
If either party disconnects, trade will be cancelled.
Traded items which will not fit in your backpack will fall to your feet.
All secure trades will be cancelled before saving data or shutting down.
! This entry must be added to config/itemdesc.cfg:
Container 0xFF01
{
Name SecureTradeContainer
graphic 0x1E5E
Gump 0x003C
MinX 0
MaxX 66
MinY 0
MaxY 33
}
Added servspecopt.cfg property: MovementUsesStamina=0/1
If this is set, you will need config/movecost.cfg
Note movement cost code is still being developed.
ecompile: option -l (ell) will cause a listfile to be generated, which
contains the internal instructions in the compiled file. In conjunction
with '-i' (include debug info) you may have a fighting chance at seeing
where your script corresponds to the instructions. May be useful
for debugging or profiling, or for just being nosy.
Added runaway script detection. RunawayScriptThreshold in pol.cfg specifies
how many instructions a script can execute without sleeping before being
reported as a runaway. The default is 5000 instructions. Reports will
be logged to log/script.log
spellbook weight will no longer include weight of contained scrolls
corrected an error in container-weight handling
added polcore().running_scripts
returns an array of structures { name, instr_cycles, consec_cycles, PC, call_depth, num_globals },
one element per running script. See scripts/www/running_scripts.src
pol.cfg can specify WebServerPassword=username:password, to restrict access
If this is used, nothing can be accessed without the password.
A more flexible password scheme is in design.
09/09/1999 - POLC082
==========
Added 'hearghosts' privilege
Support added for UO client 1.26.1
- key constants are specified in a key file, so maybe next time
this won't require a rebuild.
- pol.cfg must have "Keyfile=crypto/v1_26_1.key"
09/05/1999 - POLC081
==========
Added cfgfile::LoadTusScpFile(basename) - loads TUS .SCP format files
so they can be accessed like a POL .cfg file
(not an importer - an importer will be built upon this)
New characters will start with clothing that matches what the new
client displays.
mobile.concealed can be set to anywhere between 0 and mobile.cmdlevel
mobile.concealed is now saved with game state
added array.erase( index ) - erases an element in an array
added array.size() - returns number of elements in an array
added array.shrink( nelems ) - erases all but the first 'nelems' elements
added array.insert( index, value ) - inserts an new element
NPC masters will be saved with game state
packages can contain npcdesc.cfg and ai scripts.. ".createnpc :pkg:npctype"
Encryption keys changed to support client 1.26b (Thanks Beosil!)
Added some code to get more information on a particular crash bug
Fixed an AV condition when equipping an NPC that isn't strong enough
".integ_item" will write problem information to the logfile
a stack backtrace will be logged on assertion failure
Corrected an error in house destruction which could cause corruption
added os::events_waiting() - returns number of events in script's event queue
added direct stat modification:
mobile.setstr( newstrength )
mobile.setdex( newdexterity )
mobile.setint( newintelligence )
08/28/1999 - POLC080
==========
POL now supports the new UO Client (v 1.26)
startloc.cfg must be changed to list cities in a particular order.
(Yew, Minoc, Britain, Moonglow, Trinsic, Magincia, Jhelom, Skara Brae, Vesper)
Armor now has quality, hp, and maxhp. This means Armor entries in
itemdesc.cfg must have a MaxHP entry!
Added polcore().version (79,80,81 etc)
Added polcore().verstr ("POL080", "POL080X1" etc)
POL version string will be written to log file on startup
Added CreateAccount( acctname, password, enabled )
- returns an accountref (see docs/objref/account.htm)
character.acct added
Account object created; gives the ability to ban,unban, disable, enable,
change the account name, and change the account password, from scripts.
Large shards will want to set UseNewStaticsFile=1 in pol.cfg. This will
create files 'statics0.pol' and 'staidx0.pol', which are smaller versions
of statics0.mul and staidx0.mul. These files are then loaded wholly into
memory for very fast access for walking height and LOS checks.
If this option is enabled, POL uses an additional 11 MB memory
NPC movement anchors can be set; call npc::SetAnchor() (see npc.em)
Movement anchors are only in effect when NPC isn't in warmode
".unload" will now unload all scripts whos name contains the parameter
".unload ai" will unload all scripts whos name contains 'ai', for example.
Fixed an access violation if a mobile died with a full backpack and
worn items. (bug introduced in the 'newbie items' update)
Added weather effects, using static regions (regions/weather.cfg)
Armor will now take damage during combat
stackable weapons/armor in vendor inventories
(merchant.src must be changed to call CreateItemInInventory)
New priv/settings: seehidden, seeghosts
added character.setlightlevel( lightlevel, duration ) (mylight.src tests)
- sets personal light level for a period of time (duration in seconds)
DestroyMulti can destroy boats now (but use BoatFromItem..see destroyboat.src)
Fixed an object leak on house destruction
Paperdolls will only be opened for humans, ghosts, GMs, Lord British,
Lord Blackthorne, and Dupre
chrdeath.src has a second parameter, the character's ghost
Added chr.squelch(duration) - duration in seconds. -1=forever, 0=off
added chr.squelched
"[invulnerable]", "[frozen]", and "[squelched]" tags will display
over affected mobiles when singleclicked.
Added SetRegionWeatherLevel(regionname,type,severity,aux,lightoverride)
- test/setweather.src tests
08/16/1999 - POLC079
==========
items on others' paperdolls within visual ranged can be singleclicked
If an equipped item can't be equipped on load, it'll be stuffed into the backpack
If the backpack is full, the server will refuse to start.
More error messages will print hex serial numbers now
It will be impossible to assign a blank name to a mobile, or a name
that begins with whitespace (this traps all-whitespace names)
All the houses should be creatable now.
Made a change that seems to help lag when lots of mobiles are on-screen at once
http::WriteHtml calls are now handled more efficiently
corrected anims for nonhumans using projectile weapons
'StrRequired' (Strength Requirement to Equip Item) can be specified in itemdesc.cfg
item.newbie added; 'newbie' items will stay with the ghost.
'Newbie' can be specified in itemdesc.cfg. This is the default 'newbie' flag
for items of this type. Typically set for spellbooks.
- newbie items stay with the ghost
- newbie stacks split turn into two newbie stacks
- a non-newbie item added to a newbie stack contaminates the newbie stack,
making it non-newbie
- the various CreateInContainer functions will not add to an existing newbie stack
- vendors won't buy newbie items
'BlocksCastingIfInHand' can be specified in itemdesc.cfg. Both hands will be checked
for items after reagents are consumed but before mana is consumed
RequireSpellbooks can be specified in pol.cfg; default is 1
- Spellbooks, with scrolls, are required in order to cast spells if this is set.
08/10/1999 - POLC078
==========
added character.acctname
added weapon.dmg_mod (-32768 to +32767, but be gentle :)
added armor.ar_mod
Note if you change ar_mod on equipped armor, it won't reflect in your displayed
AR until you take the armor off and put it back on, but the change will
increase or decrease your protection immediately.
added armor.ar (adjusted by ar_mod)
added armor.ar_base (unadjusted)
added nocast regions (will work for spells and scrolls, if they use StartSpellEffect)
SaveWorldState() will return an error if an exception occurs during world save
(instead of aborting the calling script)
added weapon.maxhp_mod
Scaled back optimizations so that crash dumps can give more information
Included more debug checks in the release version, to search for odd problems
corrected an out-of-bounds condition for mobiles near the edges of the world
Fixed a bug where boats could go off one side of the world a couple of tiles.
It is now impossible to use a skill or item during a casting delay
Houses can sit on slightly uneven ground; the z-coord can differ by up to 2
added item.sellprice; used instead of 'VendorSellsFor' if nonzero.
sellprice on a stack is the price for one unit
TwoHanded (0/1) can be set in itemdesc.cfg for weapons
Started on z-coord problems, but the map seems to sit above some statics *sigh*
Target() will accept TGTOPT_HARMFUL, TGTOPT_NEUTRAL, and TGT_HELPFUL in its
'options' parameter. Harmful actions mark you criminal or aggressor according
to normal flagging rules. Helpful actions on a criminal will mark you a criminal.
The criminal query window will pop up when appropriate if enabled on the client.
NPCs will get "enteredarea" and "leftarea" events when they move
alignment (good, neutral, evil) can be specified in npcdesc.cfg
actions for/against yourself or your pets will not affect criminal flags, etc
harmful actions against good-alignment NPCs will mark you criminal
helpful actions against evil-alignment NPCs will mark you criminal
internal command target cursors shouldn't interfere with script target cursors
Scripts have a 'controller' attached. This is set to the spellcaster, or the
character doubleclicking the item, etc. ApplyDamage and ApplyRawDamage now
send an EVID_DAMAGED event using the controller as ev.source
Added uo::SetScriptController(who) - should be used to set controllers for
traps and such
EVID_ENGAGED events will be sent to NPCs targetted with hostile actions
justice zone "entering" and "leaving" messages won't print if switching between
zones where the messages are the same
If 'enabled.pkg' exists in a package directory, the package will be enabled
regardless of Enabled=1/0 in pkg.cfg. If 'disabled.pkg' exists, both these
will be ignored, and the package will be disabled.
It's now possible to set a mobile's colors above 0xfff
added mobile.cmdlevel; read-write, set to 0-5 (0-player, 5=test)
07/27/1999 - POLC077
==========
weapon skills, tactics, and parry will cause stat gain from combat
- note this is from ANY combat - GMs on rabbits, whatever.
transmission buffer size increased to handle huge gump dialogs
save time improved; tests show over 2x faster on Win98, almost 2x faster on WinNT
Fixed the "you are already holding an item" bug on disconnect while dragging an item
Unicode speech is now handled (ASCII character set only)
Tooltip text can be specified in itemdesc.cfg
'Name' can be specified as 'ObjtypeName' in itemdesc.cfg. 'ObjtypeName' is
preferred. 'Name' is deprecated, and will not be supported after core 079
Entries in pol.log will be timestamped
Added logging for login/logout (with IP), and incorrect password presentation.
new polcore() variables:
uptime: system uptime in seconds
sysload: system load, 0-100
Limited the crash stack backtrace to 100 frames
LogSysload=1 in pol.cfg will cause sysload to be logged each minute
Corrected an error which could cause CPU usage to rise to 100% until shutdown
Removed dump of message type 0x69
New internal text command: "log_profile" logs script profile data
New internal text command: "log_profile_clear" logs script profile data, clears counters
new polcore() variables: bytes_sent, bytes_received
SendEvent now functions as advertised
new members for multis: multi.items and multi.mobiles
- arrays of supported items/mobiles
Names of scripts that cause access violations will now be logged.
Fixed an AV condition on skills with no script defined
Target() takes an 'options' parameter. This should be either TGTOPT_CHECK_LOS or
TGTOPT_NOCHECK_LOS. The default is TGTOPT_CHECK_LOS. Some scripts currently
call Target( someone, "" ) -- this should be changed to Target( someone ) ASAP.
For now, this is treated the same as TGTOPT_CHECK_LOS.
Corrected another cause of client i/o thread infinite loops.
Autodefense will target an attackable opponent or hostile, rather than
exclusively trying to hit your opponent.
Added the beginnings of aggressor and criminal flagging.
Supported:
- criminal flagging (2 minutes) for attacking an innocent
- aggressor flagging (2 minutes) for attacking first
- extension of these timeouts for continued behavior
- pets ordered to attack will affect their owner's flags
- attacking a pet is like attacking the owner, as far as flagging is concerned
- name coloring
Not supported:
- any repercussions whatsoever for being a criminal
(except that others can attack you without becoming criminal)
- any repercussions whatsoever for being an aggressor
(except that those you are an aggressor to can attack you freely)
Corrected an error in the task scheduler, discovered while coding aggressor flagging.
This may also affect autodefense.
Ships will no longer be able to sail off the map
07/06/1999 - POL076
==========
data/accounts.txt will be re-read after it has been modified (must remain
unchanged for 10-40 seconds).
basic::pack( expr ) and basic::unpack( string ) added.
Config/Data file parser modified to handle arbitrarily long properties
(mostly for very large stored arrays)
Trailing spaces in config/data files will be trimmed.
arrays will display their contents when printed, instead of "<objarray>"
Weapons will have a 1% chance (was 25%) per swing of losing 1 HP
Temporary kludge for combat skill gain:
On each swing:
attacker gets 30 raw skill points in his weapon skill
attacker gets 15 raw skill points in tactics
defender gets 15 raw skill points in tactics
defender gets 30 points in parry, if a shield is equipped
GetObjProperty/SetObjProperty etc can store arrays of integers, strings, reals, and arrays
arrays can be tested for equality.
Fixed two memory leaks in the script compiler
Skill points will always be awarded for skills with <= 10.0 value
items which are 'SaveOnExit 0' will use a different serial number pool,
from 0x4F000000 to 0x4FFFFFFF
bugfix: fixed some problems with LOS checks on doubleclick (and others)
if you stood in the same place as, say, an iron ingot, you couldn't
open a container in your backpack; this has been fixed.
ecompile can take '-r directory' as a parameter, will compile .src files in
directory and all subdirectories
bugfix: 'npctemplate' custom prop on corpses will now work.
Adding support for packages: see also polcore/docs/packages.txt for detail.:
- 'item.usescript' can specify ':pkgname:script' format scriptnames
- PKG.CFG can specify 'version', 'requires pkgname version', and 'conflicts pkgname'
- AppendConfigFileElem and UnloadConfigFile will accept ":pkgname:cfgfile" syntax
- Anywhere you can specify 'script' that would specify a script in a package,
you can now specify ':pkgname:script' to reference a script in another package
- Spells can be put in packages (put a spells.cfg in package directory)
- Packages can contain 'skills.cfg'
- ReadConfigFile( "::itemdesc" ) will access data in main itemdesc.cfg as well
as all package itemdesc.cfg files. Same for "::skills.cfg" and "::spells.cfg"
- ReadConfigFile handles new formats to specify a config file in another package
05/31/1999 - POL075
==========
DoubleclickRange can be specified in itemdesc.cfg
(archery buttes will be broken until their configuration uses this)
Linux build: Ctrl-C and 'kill [pid]' are caught for save/shutdown
Added uo::polcore() - returns an object that can be used to query system data
- itemcount
- mobilecount
regions/regions.cfg defines justice regions - only enter/leave messages are printed.
regions/regions.cfg defines music regions
ListMobilesInLineOfSight will not return mobile passed as the center
Linux build: fixed bug which was causing 100% cpu usage always
Startup output for start.src will be shorter
Line of sight to items changed: will be from head of mobile to center of item
Doubleclick limits added: must be range <= 1, and have LOS.
~IN[spellnum] can be used to cast spells
Spells above the standard 64 can be defined (use ~IN to invoke)
NPCs have a 'setmaster(master)' method, which right now only allows renaming
Events sent to an NPC will be discarded if more than 30 events are currently queued
web server can now serve .gif, .jpg, and .jpeg files
scripts: "var" can be used instead of "global" and "local"
scripts: object methods are here - doors will have them first.
scripts: "array(2, 54)" syntax is deprecated in favor of "{ 2, 54 }"
scripts: C-style " /* */ " comments will function again
scripts: old, non-"fully bracketed" syntax will no longer compile.
Custom properties prefixed with '#' will not be saved with game state.
SendDialogGump now returns an 'integer hash' with the results.
var x := SendDialogGump(...);
x[0] is the exit-button pressed
x[button id] returns 1 if that button was pressed/selected
x[text entry id] returns the string contents of a textentry field
x.keys returns an array of all the keys
See scripts/textcmd/test/exgump.*
Added GetWorldHeight(x,y) - returns lowest point above map and lowest statics
(It's supposed to, anyway. It actually returns the point atop the
highest static, but it works for most dungeon teleporters, so I'm leaving
it broken for a while.)
internal changes to resource region stuff; more testing before X3
mid() is now unavailable (has always been broken)
ghosts will speak ghostspeech (no hooks for spirit speak yet)
doors are scriptable; door.src autocloses, and plays sound effects.
- door objects have an 'isopen' property
- door objects have 'open()', 'close()', and 'toggle()' methods
- 'isopen': reports if the door is open or closed
- 'open()': opens the door ("door.open();" in script would open it)
- same for 'close()' and 'toggle()' - they change the state of the door.
Not sure how well this interface will work, or how intuitive it'll be.
bugfix: SetObjProperty etc now work with Multis
SystemFindObjectBySerial will find multis
05/18/1999 - POL074
==========
Spawner rewritten; basic spawn limiting is in place.
EVID_ITEM_GIVEN event added for items dragged onto NPCs
Wrestling will no longer do 0 damage after being used a few times
item colors set by scripts will be limited to 0-0xFFF
The following types of scripts run at priority 100, instead of critical:
- spells
- item use
- walk on
- skill use
- text commands
The following types of scripts still run critical:
- character creation
DestroyMulti will destroy houses, moving their contents to the ground.
NPCs will have a ".npctemplate" member
"CacheInteractiveScripts" in pol.cfg forces disk reloads on use for some scripts:
- text commands
- item use
- walk on
- character creation
- www pages
- spells
- skill use
Added uo::StartSpellEffect(who,spellid): start the spell script
Added uo::GetSpellDifficulty(spellid)
Added uo::SpeakPowerWords(who,spellid)
Corrected an error where config file/elem variables couldn't be passed to functions
spawns.cfg can take 'rect' entries
combat.cfg has a param for displaying a message on successful parry.
Multithread mode is stable.
CDbl(val) added - convert to double
".setskill" now takes base-values instead of raw-values, so
".setskill 25 60" will set Magery to 60. It'll actually set it to
59.9, because of a base->raw conversion bug, so don't panic.
Fixed a resource leak if you set 'decayat' on an object...don't ask.
More stuff for houses:
- Empty space is required between houses:
- 2 tiles east-west
- 6 tiles north-south
- Houses cannot be built on top of mobiles or items.
- Houses must sit on level ground.
- Houses cannot sit on trees, rocks etc, or have them directly adjacent to it.
- Note, it's still possible to create houses in annoying places.. *sigh*
'cprop' and 'strprop' entries in itemdesc.cfg will be added to new items
Internal clock granularity is now 1/100th second.
CreateMultiAtLocation will function for houses, and will create doors and signs.
- house.components will be an array of all these items
- each component will have a 'house_serial' custom prop with the serial #
of the house.
05/09/1999 - POL073
==========
Rudimentary web server added. Set WebServer=1, WebServerPort=8080 in pol.cfg,
then go to http://localhost:8080. The default website only has a
"show online characters" page, but that's just the beginning!
This only works in multithread mode, which is unstable on exit,
so this is really only for playing around at this point.
Default operations allows access only from localhost.
Weapon animations can be set - 'Anim' in wepndesc.cfg
Weapon sounds can be set - 'HitSound', 'MissSound' in wepndesc.cfg
NPCs will no longer step into the same tile as another NPC.
WebServerLocalOnly (defaults to 1) in pol.cfg will restrict web server access
"AttackHitSound" and "AttackMissSound" can be specified in npcdesc.cfg
- Note that to do this, you have to have an AttackSpeed entry too
Added uo::SendTextEntryGump() - used for those input box thingies
- see uo.em for parameters and constants
- Added ".testtextentry" to play with it
- numerical mode isn't tested yet, but will for sure return result as a string
Added uo::SendDialogGump( who, layout, textlines ) - see uo.em and testgump.src
We need more 'testgump' scripts for radio buttons etc
RandomInt() will return an error if its parameter is <= 0
Performance enhancements to PC movement with lots of ingame items
The following functions will automatically convert a 'name' to an 'objtype'
(they automatically call GetObjtypeByName if a string is passed)
- CreateItemAtLocation
- AddMenuItem
- ListItemsNearLocationOfType
- CreateItemInContainer
- CreateRootItemInStorageArea
- FindObjtypeInContainer
- CreateItemInBackpack
".createstack" can take an objname
"Movable" property added to itemdesc.cfg - overrides client datafiles
Item descriptions in merchant windows will no longer include redundant amounts
"Desc" property in itemdesc.cfg will now be used
"MOVEITEM_FORCELOCATION" can be added to the z-coordinate in
MoveItemToLocation to force acceptance of the position.
ControlScript in itemdesc.cfg is now functional
CreateScript in itemdesc.cfg fill now run for:
- CreateItemAtLocation
- CreateItemInContainer
- CreateItemInBackpack
If the CreateScript succeeds (returns a 'true' value, or nothing) creation
will be allowed; if it returns a 'false' value, creation will fail.
DestroyItem will consult the DestroyScript, if any
Decay will consult DestroyScript, if any. Decay counter is not reset;
checks will continue on each decay sweep.
os::parameter() is gone
Added os::set_priority( priority ) - set script priority from 1 to 255
- higher priority scripts will get more CPU time
- in CS terms, priority is just quanta
04/29/1999 - POL072 (ouch, too many changes! sorry!)
==========
dot-commands will no longer unhide the character issuing them
'stealthsteps' member added to mobiles
GameMasters and ghosts can walk through doors
GM is defined as graphic == 0x3db, not humans wearing a GM robe
NPC stats in NPCDESC will be specified in die-roll, base values
(to come: hp, mana, stamina default to associated attributes)
'Unhides' property added to skills.cfg, mainly for stealth
Fixed an AV condition if a stat window was opened on a just-dead NPC
Skill values in NPCDESC.CFG are now 'base' values, dieroll-form
Skill values in NPCDESC.CFG can be named using Skill Name (skills.cfg)
rather than skillid (for example, Wrestling instead of Skill43)
Skill values in PCS.TXT and NPCS.TXT will use skill names (and raw values)
'concealed' flag added to mobiles. Similar to 'hidden', but is only
cleared explicitly (who.concealed := 0). Only effective against
mobiles below your command level - so Admins can always see GMs, etc.
The following functions will _always_ exclude 'concealed' mobiles:
ListMobilesNearLocationEx
ListMobilesNearLocation
ListMobilesInLineOfSight
ListHostiles
Note that these affect spells cast by higher-level beings.
Speech code modified to accomodate 'concealed' flag. A side effect is
that speech by non-warmode ghosts should no longer be seen by non-ghosts
Some events will not be generated for hidden and concealed mobiles:
- speech
- entered area, left area
- opponent moved
'frozen' and 'paralyzed' members added to mobiles
- paralyzed is cleared when ApplyRawDamage is called
- paralyzed and frozen are cleared upon death and resurrection
- either block:
- walking and running (MoveCharacter() functions will still work)
- casting
- skill use
- item doubleclick (except paperdoll)
- targetting of any kind
'.freeze' and '.thaw' GM commands added
armor.cfg moved to armrdesc.cfg
format merged with itemdesc.cfg
".armor" is gone = ".create" can do it now.
weapon.cfg moved to wepndesc.cfg
format merged with itemdesc.cfg
ripples to:
equipfromtemplate
".weapon" is gone - ".create" should be able to do it now
Instead of WeaponTemplate names, weapons can just use different objtypes
to have different capabilities with the same graphic
This opens the door for magic weapons etc.
Experimental multithreading mode: Multithread=1 in pol.cfg
It's pretty unstable, typically crashing on exit. Singlethread (default)
mode is unaffected.
Config properties can be accessed with "." syntax, rather than using
"GetConfigInt", "GetConfigString" etc. Types (integer, string, real)
determined automatically.
Config files can be searched for elements with "[]" syntax:
config[6] searches by integer key, config["WarAxe"] searches by string
SendSellWindow() sort of works; any merchant will buy and item with a
nonzero "VendorBuysFor" price in itemdesc.cfg.
!! Be sure to recompile merchant.src
MoveToward etc will move around simple obstacles
04/13/1999 - POL071
==========
files in data/ will use ".txt" extension
existing .dat files will be converted automatically
Boats are no longer broken (objtype/graphic holdover)
Boat components will be created non-movable
Both attacker and defender must be visible for attacks to occur
Weapon templates can now share the same objtype
(this is a temporary solution, pending a bit of rework)
Holds use the correct gump (itemdesc.cfg)
Script scheduler modified to improve performance
Item decay scheduling modified
04/09/1999 - POL070
==========
Added npc::Wander() - moves, usually forward, sometimes turns
Added ai/killpcs.src, made default_AI redirect to these for some monsters
Another try at making corpses unmovable.
NPCs will be default only pay attention to spoken text @ 1 pace away
Boat components will be set for no-decay :)
Boats should respond to "right", "left", "drift right", and "drift left"
Tests for 'walk-on' scripts will no longer depend on the uo client files
Merchants will run critical, to be more responsive
SendBuyWindow should handle larger inventories
Output trimmed in several scripts
coun, seer, and gm textcmd directories now exist
MoveToward/RunToward will now try adjacent moves if a direct move is blocked
(doesn't work yet..oops! take a look, it's funny)
Client encryption keys are now read from POL.CFG.
Client 37 supported; core now supports RemoveTrap and Stealth skills.
'invul' priv/setting added.
PC corpse decay will dump contents to the ground; all others will not.
The server should cope with T2A installations with no VERDATA.MUL
Added uo::GetObjtypeByName( name ) - uses NAME prop from itemdesc.cfg
Doors are now configured in itemdesc.cfg
CreateItem.. functions will refuse to create a nonstackable with amount > 1
Items now have a ".decayat" member. Set to zero to disable decay,
or gameclock() + number_of_seconds to make an item decay in the future.
Added uo::GetEquipmentByLayer( character, layer )
0x3ff will be the highest allowed mobile graphic
non-'movable' items will no longer decay.
03/30/1999 - POLC069
==========
NPC corpses will contain an "npctemplate" property (use GetObjProperty)
".destroy" text command moved to a script
"misc/oncreate.src" will run critical on character creation.
- this is where initial equipment should be created.
"item.movable" added - default depends on item type
Added option to POL.CFG: "LogScriptCycles" If set to 1, a breakdown of
how many instructions per script were executed will be written to pol.log
Item decay is in. Specify 'DecayTime' in minutes in itemdesc.cfg per
object type. The default is 10 minutes.
Corpses are no longer "SaveOnExit 0"
Split OBJECTS.DAT into POL.DAT, PCS.DAT, PCEQUIP.DAT, NPCS.DAT,
NPCEQUIP.DAT, and ITEMS.DAT. Each of these contains a descriptive comment.
Added uo::ListHostiles( character, range, flags );
"--lan--" in servers.cfg will use your LAN IP address (192.168.*, 10.*)
'const' declarations can be specified in .EM files
03/23/1999 - POLC068
==========
Added "character.ar_mod" AR modifier (use same as strength_mod, etc)
Added ".setarmod" text command to test
Added uo::DisconnectClient( character ) [note still no way to ban]
Added ".kick" text command to admin
Scripts waiting for a menu selection will return if the client disconnects
Added "character.weapon" returns weaponref to equipped weapon
Added "weapon.skillid" returns SkillId for a weapon
Corpses should be immovable, by clients and scripts
[I'm not sure what happens if a corpse is on a moving boat --
has anyone tried?]
".create" implemented as a script (builtin renamed to ".i_create")
The structure returned by SelectMenuItem2() will contain the color
Tweaked loot.inc so it doesn't create hundreds of individual gold pieces
03/19/1999 - POLC067
==========
SaveOnExit logic will now use objtype, not graphic
Objtype is specified in the key-position in itemdesc.cfg
This means only one objtype can be specified per element.
Itemdesc.cfg still has the ObjType 0xHHHH entries, for compatibility.
object.facing is now writable.
Added cfgfile::GetConfigStringArray
You can buy stuff from merchants. Try ".createnpc merchant"
- See merchant.src, mrcspawn.src, mrcspawn.inc, mrcspawn.cfg
- It's not complete/perfect yet, but works for the basics.
- The whole merchant inventory spawn thing is overly complex; considering
making each merchant NPC AI script respawn its own inventory, but
that's all scriptside, so easy to change later
03/09/1999 - POLC066
==========
Fixed server AV on skills window opening
Added uo::GetRegionString() for config data per resource-region.
Reordered parameters of GetHarvestDifficulty and HarvestResource.
Character creation will be rejected if a stat was specified < 10
Stats will be stored as raw values, same scale as skills.
StrAdv, IntAdv, and DexAdv can be specified in skills.cfg.
- Format is "chance points", where chance is a percentage, and
points is a die-roll specification. Examples: "1.5 1d4", "75 1"
- advancement is done, but sometimes doesn't display the new value
Some additions to error messages displayed for bad die-roll specifiers.
Starting skills will start near (known bug) values specified.
02/05/1999 - POLC065
==========
Spells.cfg entries can specify "animation", the spell casting animation.
The default is 0x10
Added uo::PlayStationaryEffect( x,y,z, effect, speed, loop );
Added uo::DestroyRootItemInStorageArea( itemname );
Added os::system_rpm();
Weapons have 'quality' and 'hp' read-write properties.
Weapons also have a readonly 'maxhp' property, which is the calculation of
(template MaxHp) * (weapon quality)
Damage done is now (random damage) * hp / (template maxhp)
Added ".smember" test textcmd. ".smember quality", then target, will
show you "[targetted].quality" for example.
Non-projectile weapons will take 1 hp damage occasionally when they hit
(25% chance)
Movement will reset the swing timer if you have a projectile weapon equipped
02/03/1999 - POLC064
==========
Maps will display now, if they have a location set.
(see textcmd/test/makemap.src)
Map items have xwest,ynorth,xeast,ysouth,gumpheight,gumpwidth properties
Some fixes for boat creation.
Added uo::GetMapInfo(x,y)
Resource types are now defined in regions/resource.cfg, so others can be added.
02/01/1999 - POLC063 - Pol Core 063
==========
ecompile will check the environment for ECOMPILE_PATH_EM and
ECOMPILE_PATH_INC. If .em or .inc files are not found by
searching from the current directory, these paths will be
searched.
Objtype and Graphic ID are split; 'graphic' is now read/write,
while 'objtype' is read-only. 'objtype' can be anything from
0x0000 to 0xFFFF; Values above 0xF000 are reserved by the system.
'include/extobj.inc' defines some values.
Doors will use objtypes 0xF000 - 0xF003. These open in different
ways; it should now be possible to create all types of doors.
Ship components will use objtypes from 0xF010 to 0xF013.
Existing ship planks and holds will no longer function.
It is now possible to create objects with objtypes >= 0x5000
01/27/1999 - POLC062X - Pol Core 062 (Experimental)
==========
Added 'enum' facility to script compiler (see above, and docs)
Added array( 1,5,9,... ) syntax to script compiler/executor
- scripts which use this will only work with Core V062+
- Note, 'local a := array' now obsoletes 'local a array'
Next non-experimental release after a script/config release can
be made.
01/26/1999 - POLC061X - Pol Core 061 (Experimental)
==========
Added ConsumeMana( who, spellid )
Added ConsumeReagents( who, spellid )
Added AppendConfigFileElement( configfile, elemtype, elemkey, properties );
Added UnloadConfigFile( configfile );
Added ListEquippedItems( who );
Added ListObjectsInBox(x1,y1,z1,x2,y2,z2);
Added ".writequip [tag]", writes your equipment to equip.cfg
Added to textcmd/test: ".consmana", ".consreg", ".listbox"
01/24/1999 - POL060Ex - Experimental, dev-only release
==========
That means, doesn't go to any test system! developer machines only.
Performance enhancements to ListMobilesInLineOfSight
Added uo::SendPacket( to_whom, packet_hex_string );
Added ".sendpacket" to test this
Reorganized locations of scripts.
AI scripts go in ai/
Skill-window skill scripts go in skills/
Item-use scripts go in items/
Startup scripts go in startup/
4 leftover scripts go in misc/
.inc files go in include/
(many .inc files are still in util/ - they'll be okay there for a while)
The only script in /scripts is start.src
Changes made to segment map into zones for item/mobile existence,
so 'search near' and line-of-sight type stuff will take far less time.
(This is why it's devel-only - we need to beat on this)
Only a few functions take advantage of this - the first step is to get
all the items and mobiles into the segmented storage.
01/23/1999 - POL059
==========
New event types: EVID_ENTEREDAREA, EVID_LEFTAREA, EVID_OPPONENT_MOVED
- More to do yet on these, but they will tell you whenever anything
enters or leaves a given range threshold
- See CSTGUARD.SRC, as always :)
spawner.src rewritten somewhat - more to come
It should be impossible to set an item's color to a color that will
cause a client crash.
Added cfgfile::GetConfigMaxIntKey(config_file)
uo::EnableEventType renamed to EnableEvents, takes an optional 'range'
Added uo::DisableEvents
Tachometer added. ".rpm" to view last minute's game-loop iteration count.
- "WatchRpm=1" in pol.cfg will display every minute, also.
- My P133/Win98 gets around 300, P166/WinNT gets around 560
(hmm, those are debug build.. release: ~800 P133/Win98)
- This number is highly dependent upon # of NPCs
Pirate.src changed to use EVID_ constants from include/eventid.inc
01/21/1999 - POL058
==========
Inscription updated to build smaller menus, and other fixes (DT)
Scripts updated to correct boolean-return values: (DT)
- tinkering
- creature_spellcast
- carpentry
Alchemy re-implemented as OSI-style. (DT)
Text commands split into command levels.
- textcmd has five subdirectories: admin gm seer coun player
- Characters can have a CmdLevel property in OBJECTS.DAT, which specifies
which of these they fall under. 'player' is the default.
CmdLevel _must_ be one of these, or not specified.
- All text commands moved to textcmd/admin
- All "built-in" text commands assumed to be admin level.
Client V 0.36+ (until they change again :) only will be accepted.
Equip.cfg now detects decimal/hex values for objtype and color, like everywhere else.
(hex only was by design, but not commented, and different from all else, so..)
Fixed a crash bug in compiler if ';' was the first effective statement
AI updated, consolidated further into default_AI with new natures (rje)
Several AI scripts removed; use default_AI instead.
Energy bolt unbroken (DC)
Healers will heal poison and damage (DC)
Field spells updated for different orientations (DT)
Fire field, poison field use walk-on scripts (DT)
Spellbook.src updated to put the scrolls in the spellbook (DT)
01/18/1999 - POL057
==========
Added SplitWords( text ): returns array of words in a string
(space-delimited only, no commas, sorry)
NPCs will have their template name follow "NPC" in objects.dat
NPC Templates can specify AttackSpeed, AttackDamage, and AttackSkillId
these are exactly the same as Speed, Damage, and SkillId properties in
weapon.cfg; in fact, a weapon template is generated for each NPC.
This has some repurcussions if you, say, create an ettin, then edit
npcdesc.cfg to change damage, then create another ettin. The new
values won't take effect until a system restart.
SelectMenuItem will return an error if the menu is too large.
AR can be specified in NPC templates, in standard die form. This will be
"rolled" on creation, then saved with each individual creature.
Spellbooks may be opened with the Open Spellbook macro, if the spellbook
is equipped or in the top level of your backpack.
Spells may be cast directly from spellbooks.
Formulas, animations updated for spells:
- Agility
- Bless (plays anim on caster?)
- Clumsy
- Cunning
- Curse
- Feeblemind
- Mass Curse
- Strength
- Weaken
- Greater Heal
Explosion spell added
01/17/1999 - POL056
==========
RequestInput( character, item, text ) - displays message, gets next input line
ReadGameClock() - elapsed game seconds counter
Alchemy, Inscription, Blacksmithy, Carpentry, Tinkering updated (DT)
Loot script updated (DT)
Recall rune double-click script added
Compiler updated; would sometimes not emit the "implicit return" at end of functions.
- this affected make_blacksmith_items, at least.
make_blacksmith_items updated to use (menuselection.objtype) (ES)
Script profiling info will only be displayed if ProfileScripts is set in watch.cfg
default_AI changed to kill creatures with unknown natures.
Corpses will have all the custom properties that the creature had when living.
Limited skill delay added.
- Set a "Delay" property in skills.cfg. Other skill use will
be disabled until 'n' seconds after the initial skill was begun. Note, we
may want to change this timer to start after the skill is complete,
or after the skill script calls Detach().
- Only Hiding has a skill delay at this time.
- No attempt is made to disable skill use in item-use scripts.
(So, you could hide, then turn around and use a hammer etc)
Net-negative stat modifiers should be handled correctly.
- If they would modify the stat below 1, it is assumed to be 1.
- the real modifier is "hidden" so scripts don't have to do anything special.
Fixed stat-modifying scripts (durations,amounts to be debated) (ES)
- Agility
- Bless
- Clumsy
- Cunning
- Curse
- Feeblemind
- Mass Curse (pretty major rewrite)
- Strength
- Weaken
The fix made was to change the stats by an amount, then change
them back by the same amount - this way, curse can cancel
bless, etc, but a weak curse will only partially cancel
a strong bless.
No attempt was made to fix the animations, which don't appear.
Added animations, sounds to the following spells:
- Cure
- Dispel Field
- Mana Drain (also, uses resist vs magery)
- Mana Vampire (also, uses resist vs magery)
- Mind Blast
- Flame Strike
Fireball spell added
Heal spell added
Greater Heal spell added
Damage changed on the following spells:
- Magic Arrow
- Lightning Bolt
- Harm
- Flame Strike
Damage messages for Earthquake are sent private (Thank you!)
strength, intelligence, and dexterity object members will reflect
the modified values, not underlying values.
Chain Lightning moved back to 7th circle
Meteor Swarm moved back to 7th circle
Docs updated for new UO.EM functions
'.objtype' is writable for mobiles. If world state is saved with this
modified, such modifications will become undone when the system reloads.
".setobjtype", ".showstats", ".powerup" added
01/16/1999 - POL055
==========
Timer granularity improved (scripts, combat timers, casting delay timers)
npc::Move/Run functions use the following formula for timeout:
after moving, sleep (1000 - dexterity * 3) milliseconds
minimum is 250 milliseconds.
If running, halve this (min. 125 ms)
Give me a better formula, and I'll use it.
os::sleepms( milliseconds ) added.
Castle Guards always run critical.
util/skillid.inc filled in. Scripts modified to use.
Pirate script added, equip.cfg updated with an outfit (Rob)
default_AI updated (trapper) (Rob)
Access violations will be written to the log file. Email any
that hit you to syzygy@pobox.com
"showadv" privilege/setting will show raw skill updates as they occur.
Comments at the top of OBJECTS.DAT will show mobile/toplevel item count.
Game time counter added (can't access from scripts yet)
01/15/1999 - POL054
==========
"SelectTimeout" option in POL.CFG. Set to 0 to hog the processor.
Added EquipFromTemplate(npc,template) - equips from EQUIP.CFG by name
Internal: build mode changed to multithreaded.
"--ip--" can be substituted for IP in SERVERS.CFG; uses the first
non-127.*, 192.168.*, 10.* IP address found.
Compiler bug fixed, where in some cases functions would be called incorrectly.
This afflicted skeleton and default_AI, and likely others, resulting in
ever-increasing memory usage and incorrect behaviour.
Telekinesis added (DC)
(I notice it's a bit too powerful: can take equipped items,
and items in any container - syz)
Detect Hidden to pit Detect Hidden versus Hiding (DC)
Skills updated to use non-difficulty-based CheckSkill:
Eval Int, Fletching, Healing, Item ID, Musicianship, Spirit Speak,
Taste ID, Tracking, Hiding
"Point Value" also increased on these.
(lumberjacking is and should be difficulty-based, due to resources)
Casting delay added. Delay, in milliseconds, can be set in CIRCLES.CFG.
Note, the delay is rounded to seconds ((delay+500)/1000).
This will be true until timer granularity in general is improved.
Also note, the animation isn't played long enough.
Client disconnect with target cursor active handled appropriately.
Added GrantPrivilege( chr, priv ), ".grantpriv priv" + target
Added RevokePrivilege( chr, priv ),".revokepriv priv" + target
(see docs for info on privileges/settings)
!!! Script "case" syntax modified to disallow bare-string tags. Misspellings
of things like UOBJ_PURPLE_POTION were being seen as strings, and
not flagged as errors. All scripts that used the offending syntax updated.
Changes to carpentry, tinkering, blacksmithy for repair
Loot on corpses added
01/12/1999 - POL053
==========
"color" is now read-write, for mobiles and items.
".mycolor", ".showcolor", ".setcolor" text commands added.
"name" is now read-write, for mobiles and items.
".setname" text command added.
If CheckSkill is passed a negative value for difficulty, it will make a
non-difficulty based skill check. If successful, 100% of points are awarded.
The percentage chance will be the effective skill (min 2, max 98).
In the future, perhaps different curves will be defined in SKILLS.CFG.
Characters can be deleted.
Mining updated (DT)
alchemy.src, alchemy2.src, drink_potion, eat, poison_skill updated (DT)
taming.src updated (DT)
Docs on Alchemy, Blacksmithy, Inscription, Tinkering added (DT)
Start of resource system - local depletions only, so far (see lumberjack.src)
Added GetHarvestDifficulty()
Added HarvestResource()
01/10/1999 - POL052
==========
"TemplateName" in NPCDESC is gone. The tag now follows "NpcTemplate", so NPCDESC.CFG
can be accessed through the CFGFILE module.
Updated all entries in NPCDESC.CFG to follow this format.
(Note many entries in NPCDESC still don't have "natures" matching default_AI,
so they just exit, and so stand around)
Added a default: clause to default_AI which syslogs when an unknown nature comes up.
".script" read-write property added to NPCs. (writing doesn't restart the script)
Added uo::RestartScript( npc )
Detect Hidden skill added (DC)
Earthquake spell added (DC)
Mana Drain spell added (DC)
Mana Vampire spell added (DC)
Object reference added to docs (help welcome, class hierarchy visuals esp.)
01/09/1999 - POL051
==========
Documentation added for 26 script functions
Changed many script names in NPCDESC to default_AI per Rob's instructions
Speech event types will be "speech", not "Speech"
Scripts updated to check for either of the above possibilities
Script errors in functions will display the line # of the error, not the function.
"engage" and "disengage" event types added (see docs)
Added EnableEventType( eventtype )
"damage" event type added
npc::move() can take a number. 0=N,1=NE,2=E, ..., 7=NW, 8=N, ...
(so, move( self().facing-2 ) turns left, for example)
See CSTGUARD.SRC for an example of a script using the new events.
01/08/1999 - POL050
==========
Internal: STLport used rather than MS STL
Added MoveItemToLocation( item, x, y, z )
Added MoveItemToContainer( item, container, x := -1, y := -1 )
Added boat::SystemFindBoatBySerial( serial )
Added EquipItem( character, item )
Added ".whereship" command (target ship deed)
Added ".equip" command
Added ".moveitem" command
Added ".movetocont" command
Items in bankboxes should be targettable
Light levels will be resent even if you don't move between transportation
Scripts that execute 500 or more "instructions" will have profiling information logged.
Files in the devel distribution will no longer be read-only
Script .ECL files will be included in the devel distribution.
AI scripts reorganized (Rob)
01/07/1999 - POL049
==========
Ship holds are now locked on creation, and associated with the keys.
First attempt at character logout on disconnect (no timeouts yet)
Scripts must now use program foo(param,param,..) .. endprogram to get arguments
SPELCAST.EM, SKILLUSE.EM, and ITEMUSE.EM are all history.
text command scripts can use program .. endprogram to get arguments.
All scripts converted to use program..endprogram to get args.
Hiding skill added (DC)
Healers added (DC)
Invisibility spell added (DT)
01/07/1999 - POL048
==========
All scripts updated to use function .. endfunction
".makeshipdeed" script added - creates a ship deed in your backpack (only 0x4000)
ship deeds can be used to place ships. They create keys and a deed certifying ownership.
the "." member operator will have higher precedence than the unary operators.
script functions can be called before they are defined.
unused script functions will not be included in .ECL files.
Corrected a precedence error in compiler - ev.text["bank"] will work correctly now.
01/05/1999 - POL047
==========
Fixed a compiler bug where 'default:' followed by 'endcase' would be flagged an error
os::syslog( text ) function added - logs to pol.log and prints to console
Entries in ITEMDESC.CFG can have more than one OBJTYPE property. Note that
the 'name' property in ITEMDESC.CFG is not used.
".objtype" is writable, for non-multi items only. Use with caution! This should not be
used to convert, say, an apple to a container.
Object types and serial numbers will be stored in hex format in data files.
"death" script will be executed on NPC death
"chrdeath" script will be executed on player character death.
- os::parameter() will return the corpse for each.
Many AI scripts updated (Rob)
SystemFindObjectBySerial( serial ) added - searches everywhere.
Hidden characters who take damage will become unhidden.
ListMobilesNearLocationEx(x,y,z, range, flags) added
Add together constants in LISTEX.INC to build flags.
CreateItemInContainer( container, objtype, amount ) added - almost forgot!
01/03/1999 - POL046
==========
Some changes to resurrection so the rezzed won't see peacemode ghosts
Newly killed characters should now see nearby ghosts.
Beginnings of a hidden flag - ".hidden" property added to mobiles
The following functions ignore hidden characters:
- ListMobilesNearLocation
This means firefield etc won't affect hidden characters,
for the time being.
- ListMobilesInLineOfSight
The following actions unhide a character:
- Movement
- Speech
- Casting a spell
- Using a skill
- Double-clicking any item that 'RequiresAttention'
(this isn't quite right - just a quick fix to allow container use)
Note again that this is just a start - it doesn't take much thinking for
me to come up with something that won't work right with hiding. But
here's something to bang on.
".hideme" text command added.
01/02/1999 - POL045
==========
case..endcase script construct added
Taste Identification script updated to use case..endcase
01/01/1999 - POL044
==========
foreach..endforeach script construct added
Local variables in nested blocks can override local variables in their parent blocks.
Major performance improvement to script engine
01/01/1999 - POL043
==========
Added ListMobilesInLineOfSight(object,range) - lists non-ghosts in line of sight
within 'range' squares of object.
ListMobilesNearLocation will no longer include ghosts
Added ListGhostsNearLocation(x,y,z,range)
Performance updates to script engine. Scripts must be recompiled to benefit.
Converted reflect_spell.src to reflect_spell1.inc
Made ebolt use reflect_spell1.inc
Added ListItemsNearLocationOfType(x,y,z,range,type)
01/01/1999
==========
Rob:
Tidied up creature include files, plus gave a makeover to
default creatures.
No guarantees that the pack predators work as expected -- I
didn't fix any bugs. This was a code cleanup only, but the
default_pack_predator is still a mess.
12/31/1998
==========
Rob:
added strprops to npcdesc.cfg:
leaderText
buddyText
targetText
aggression (to replace the 'p' strprop)
(by the way, critters now also use strprops "nature" and "alignment")
split up creatureRoutines.inc into:
spawn.inc
conflicts.inc
buddies.inc
creature.inc
all of these conform to the new eScript syntax.
changed my scripts to conform to the new compiler, etc:
robs_prey.src
robs_predator.src
skeleton.src
robs_pack_predator -- has bugs (Dan?)
added harm spell (untested)
12/31/1998 - POL042 (compiler only)
==========
Changed the order of cleanup on shutdown, to correct an AV condition.
Fully-bracketed syntax now for all constructs:
WHILE .. ENDWHILE
REPEAT .. UNTIL (replaces DO .. WHILE due to ambiguity)
FOR .. ENDFOR
FUNCTION .. ENDFUNCTION
Scripts must use one form or the other, per type.
Non-bracketed forms are deprecated. All tests in testsuite have been
converted to use the new forms.
Some escript docs updated
Default parameters for functions can consist of any optimizable expression.
12/30/1998 - POL041
==========
Added Distance( obj1, obj2 )
NPCs will now get their scripts from the script repository, rather than
each loading their own copy of the .ECL file.
12/30/1998 - ecompile.exe only
==========
Compiler change - 'const' variables will be treated as constants. They are also
now case-sensitive. This broke a few of the AI scripts.
This has made .ECL files smaller, and will result in lower memory usage.
Compiler changed to better handle expressions within brackets
12/29/1998 - POL040
==========
"LOS blocked by" diagnostic messages removed
Start script and spawned scripts have access to cfgfile module
Light regions can be defined in regions/light.cfg
Added SetRegionLightLevel( LightRegionName, LightLevel )
Added SetGlobalProperty( PropertyName, PropertyValue )
Added GetGlobalProperty( PropertyName )
Added EraseGlobalProperty( PropertyName )
Added EraseObjProperty( Object, PropertyName )
Added ".setlight", ".getglobal", ".setglobal", ".eraseglobal",
".eraseobjproperty" commands.
12/29/1998
==========
added lotsa NPCs
added default_pack and default_pack_predator
added .kill command
modified .createnpc to give target
added Skeleton (Rob)
added .goto command (.goto character_name)
DefaultAI now has tamed commands built in. Most are working (except Guard)
added summon creature,summon daemon,blade spirit,e-vortex, and summon elemental spells
added a bit 'o text to the tillerman in boat.src (Rob)
added vortexAI -- chases the smartest guy around, and won't retreat
added a 10-minute autosave
12/29/1998 - POL039
==========
SaveWorldState() added
".savenow" command added
Implemented a possible fix for server crashes on NPC death.
Fixed a server crash bug when an NPC script resulted in its death.
12/28/1998
==========
create musicianship skill (Rac)
fixed healing (Rac)
12/27/1998 - POL038a [ecompile.exe only]
==========
Fixed a bug in the compiler. Scripts which used FOR loops would not clean up
correctly, resulting in ever increasing memory usage if scripts ran a long time
(ie NPC control scripts)
12/27/1998 - POL038
==========
SetObjProperty now accepts value types of String, Integer, and Real.
GetObjProperty will return the same type of object as was Set (String, Integer, or Real)
MARK.SRC, GATE.SRC, and MOONGATE.SRC have been updated. Note CInt() is still used when
reading marked runes, in order to work with old marked runes.
All properties previously created are assumed to be Strings.
Skill## properties are optional in OBJECTS.DAT, and default to 0 if unspecified.
Skill## properties are not written if they are 0.
Found and fixed resource leak exposed by NPC death.
12/26/1998 (DT)
==========
created default_predator, default_prey, and default_mean_predator AI:
default_predator: depending on hunger level, will attack prey, non-predators, or other predators. Eats the meat whn done
default_prey: runs from all predators
default_mean_predator: like default_predator, but will always attack humans. (use for ettin, ogre, etc)
added a bunch of creatures based on these scripts
modofoed .makeregs to do all the regs
12/26/1998 - POL037
==========
Fixed nasty server halt bug exposed by "NPCs don't make ghosts" update.
12/26/1998 - POL036
==========
Killed NPCs will be destroyed, rather than sticking around as ghosts
-- this sometimes leaves an orphan (leaked) object, but that's a smaller
leak than _always_ leaving an entire ghost, with running script. :)
Added RawSkillToBaseSkill();
Added BaseSkillToRawSkill();
-- note, both of these use a different "skill" scale from GetSkill.
if the skill is 12.4, the "base skill" is 124. (GetSkill would return 12)
GetSkill returns _effective_ skill, which is just a simplified number from
0 to 100+, modified by stats etc.
-- These are slightly broken - RawSkillToBaseSkill(BaseSkillToRawSkill(x)) should
always evaluate to x, but often evaluates to x-1. Not sure what to do about this.
IN operator for arrays added. "if (5 in arrvar)".
".ident", ".where" ".action", ".bcast" text commands moved to script
".resme" moved to script
os::set_debug() function added. "ecompile -i xx.src" to use.
uo::CreateNpcFromTemplate( template, x, y, z, override_properties ) added.
see textcmd/createnpc.src for an example
12/23/1998
==========
added clumsy, weaken, feeblemind, strength, agility, cunning (really the same spell)
added a few items to itemdesc so they'd disappear on shutdown
added bless, curse, mass curse
added tracking
created default_AI, default_mean_ai, and default_meek_ai. default is to attack only if there's a human nearby and hp < maxhp. Mean automatically attacks humans; meek automatically runs from humans
12/22/1998 - POL035
==========
Simple import facility added - imports and deletes data/import.dat if
present. misc/world.dor.dat is appropriate for this.
Itemdesc.cfg: "SaveOnExit" property, if specified as 0, will force a given
item type not to be saved with game state.
Boats can turn. They even convert tillermen and gangplanks, and rotate
passengers - but not items.
Boat scripts auto-start.
Boats respond to the following commands: (see BOAT.SRC)
forward, backward, turn right, turn left,
come about, furl sail, unfurl sail
12/21/1998 - POL034a
==========
Script compiler works again.
12/21/1998 (DT)
==========
added locked chests in carpentry
added restore mana potions in alchemy
added digging for clay (shovel on swamp)
added Hellfire potion
added stamina potion
12/20/1998 - POL034
==========
You can now open containers even if a skill or spell script hasn't Detach()ed.
Items can fire scripts when walked upon. Set WalkOnScript in ITEMDESC.CFG
Implemented Gate (see SPELLS/GATE.SRC and MOONGATE.SRC)
Duplicates in ITEMDESC.CFG are now detected; commented duplicates out.
Added ".createstack" text command
Added ".setskill" text command
Added ".makeregs" text command
Added uo::GetRawSkill(character,skillid);
Added uo::SetRawSkill(character,skillid,rawskill);
Enhancements to script execution engine to speed start-times.
Script compiler will look into 'include' files to determine if IF..ENDIF is used.
Script compiler will no longer include source code in output .ECL files.
Further optimizations to script compiler to reduce the size of .ECL files
The boat control script is underway.
Added boat::MoveBoatRelative( boat, relative_direction );
Added uo::RegisterForSpeechEvents( at_object, range );
Added uo::EnumerateOnlineCharacters();
Changes to properties for mobiles:
mana and stamina are now writable. Be nice!
strength_mod, intelligence_mod, and dexterity_mod added (read/write).
These are not saved with game state, so use for temporary changes.
I may yet add a "SetTempStatMod(chr,stat,howlong)" function, which the
system would automatically maintain. The advantage there is that faulty
scripts won't permanently grant stat mods, and stat mods _could_ be
recalculated from scratch.
12/19/1998 - POL033
==========
Projectile weapons now consume projectiles
Stackable items dropped into a container will be added to an existing
stack if the combined stack would be <= 60000 in size.
RandomDiceRoll() function added to UTIL.EM
Hex() function added to BASIC.EM
Doors are lockable, just as with containers.
Dropped items will have their Z-coordinate calculated, rather than believing the client.
Dropped items must be placed in an adjacent tile that the character could have walked to.
If you try to put an item somewhere, and it appears at your feet, it means the server
thought you weren't allowed to put it there.
Items dropped on boats will now move with the boat.
(There are still some oddities with items that are picked up, where an attempt
is made to put them somewhere invalid; but these are longstanding anyway)
Walking on water is no longer allowed, so it should be impossible to get stuck on the mast.
12/17/1998 - POL032
==========
Boats automatically figure out they should move you if you walk onto one
or teleport onto one. (Dropped items aren't handled yet) (If you .createnpc
an NPC on a boat, it won't move with the boat either, I just realized)
"locked" property (read/write) available on containers
(Should ITEMDESC include a "lockable" property for containers?)
locked containers will not be searched for reagents, and cannot be accessed.
"corpsetype" property available on corpses - the object type of the corpse when alive
Added PrintTextAbove( above_object, text );
Added PrintTextAbovePrivate( above_object, text, character ); // send only to character.
12/17/98
==========
Tinkering can now be used to make jewelry. Melt gold coins on a forge to make
gold bars, then use tinker's tools.
Tinkering can also do clay items. Use tinker tools on clay
Added jewelry enchantment (use inscription on jewelry, then gems for charges)
added corpse carving/chopping
12/16/1998 - POL031
==========
Numerous sweeping changes to support multis, particularly boats.
(hopefully this won't be called the "instability patch" ;)
Orcs won't blink when they attack or are hit. This is a temporary fix,
until that stuff is config-file driven.
MoveCharacterToLocation calculates the correct z-coordinate, based on the input
Z-coordinate. It is impossible to MoveCharacterToLocation to "under the map."
MoveCharacterToLocation will refuse to move a character into a blocked location
(blocked by a static object, a dynamic blocking object, or a multi)
npc::move() will refuse to move an NPC into walls.
some errors in z-calculation corrected.
Multi-handling added for Z-coordinates.
Multis are stored in MULTIS.DAT
TO UPDATE:
move all MULTIS to MULTIS.DAT
12/16/1998
==========
Got a start on glass working. Use 0x1036 (hay, soon to be called sand) on a forge,
and you get glass. Use tinkers tools on raw glass to make stuff. Tomorrow I'll
have shovels work on beaches to make sand.
Orcs work, sorta. Orcs will fight for dominance in the pack,
then start wandering around after their leader. They run away
when they get hurt. Next I want to add some speech, to see
if my speech system works for them. They still have the blinkies, though.
12/14/1998
==========
use_stuff modified:. Previously the config file key was just the
objtype that you double-clicked. I changed it so it looks for a
string of used.objtype + use_on.objtype. The problem is that
cstr(objtype) results are decimal, so the key for a skull
(objtype 0x1dae) used on a kettle (0x09ed) is "7598+2541".
This way you can have a many-to-many relationship with items.
A head on a kettle, a head on a guard (for a bounty), a
head on a stick (for a headcicle) etc.
cooking skill added
Set up an npc_speech script. This script checks 2 config files:
npc_speech and npc_speech_limits, and returns an array.
Element 1 of the return is the string containing the speech,
and element2 is a sound for the creature. If it can't find an
appropriate element it looks for a default phrase/sound for the
creature and returns that.
npc_speech has 2 elements: speech an dsound. The key to npc_speech
is multi-part: the objtype of the creature, the event, and an
index (so a creature can have multiple sayings for each event).
npc_speech_limits sets the range of this index.
12/13/1998
==========
bladed will carve kindling from trees
12/12/1998 - POL030
==========
Spells will consume reagents.
TargetCoordinates result will contain a ".item" member if an item was selected,
or a ".mobile" member if a mobile was selected.
It is no longer necessary to put "_OptionBracketed" at the beginning of scripts.
CreateItemInBackpack will add to an existing stack, if the objtype is stackable
and the resulting stack size would be <= 60000.
Changed "verdata" handling, which sped up startup considerable.
Added "multi" data loading, which slowed startup down again (but not as bad as before!)
".where", ".tele", ".bcast" - scripted text commands.
12/12/98
==========
Added fishing, mining, and lumberjacking
Made some changes to bladed to support carving of fish, and (eventually) kindling
12/11/1998 - POL029
==========
Spell words will be spoken, and "cast spell" animation will be played, on casting.
"include" script directive added for module inclusion. See CSTGUARD.SRC, DIST.INC
text commands are now scriptable. Put scripts in scripts/textcmd.
keys in config files may now be strings. All config file elements may be referenced
by string value; only those beginning in a digit (0-9) can be referenced by number.
character.backpack - access to a character's backpack.
target.objtype added to struct returned from TargetCoordinates
(should be useful for fishing, mining, lumberjacking)
12/10/1998 - POL028
==========
The script compiler will display the line number where errors are detected.
12/09/1998 - POL027
==========
Added functions to 'npc' module:
- WalkToward( object );
- WalkAwayFrom( object );
- RunToward( object );
- RunAwayFrom( object );
- TurnToward( object );
- TurnAwayFrom( object );
Added functions to 'uo' module:
- ApplyDamage( character, damage : real or integer );
// chooses armor, reduces damage, halves damage, applies what's left.
// plays "i'm hit" animation, and kills if out of HP.
Support for Tips added - create .TXT files in the TIPS/ directory.
script names passed to start_script and run_script_to_completion may
no longer have ".ecl" at the end.
12/09/98
==========
Created a magic reflect script. To use it set the parms, then do a
start_script( "spells/reflect_spell",parms) INSTEAD OF
doing animation and damage in your own script. The parms are an array as follows:
parms[1] = caster
parms[2] = cast_on
parms[3] = moving_effect
parms[4] = object_centered_effect
parms[5] = speed //for animatiom
parms[6] = loop //for animation
parms[7] = explode //for moving animation
parms[8] = rawdamage \
parms[9] = thedamage / don't use both of these, or both will be applied
parms[10] = scriptname
parms[11] = script_parms*
*Please Note!! If you use parms[11] -- the parameters to be passed to a script -- make sure script_parms[1] is the caster, and script_parms[2] is the target. These 2 parameters will be reversed if the spell is reflected. If you don't want them reversed, use a different array element!
Also, this won't work with lightening, so you'll have to do that one yourself.
Should I do the sound as well?
I still need to work on the animation timings.
updated meteor_swarm, ebolt, magic arrow, poison, flamestrike to use this script
added spell reflection spell
12/07/1998 - POL026
==========
Added functions to 'cfgfile' module:
- GetConfigString() - same as, replaces, GetElemProperty()
- GetConfigInt() - returns integer property, or an error
- GetConfigReal() - returns real property, or an error
os::start_script and os::run_script_to_completion now take a 'parameter' parameter.
os::parameter() added; access to parameter passed. See poisondamage.src
!!! start.src must be recompiled - for good measure, recompile everything.
Script functions will start return 'error' objects, which evaluate 'false'
and have a ".errortext" member. The three new cfgfile functions are the only
ones that will do so, so far.
Updated poisonfield.src, cure.src. Added poisondamage.src. They're not complete yet,
but mostly work.
Changed Wrestling's OBJTYPE in WEAPON.CFG so 'unused' tiles don't halt startup
CreateItem...(): ObjType limited to 2..0x3fff, Amount to 1..60000
added inscription
added firefield, poisonfield, wall of stone, and energy field
added dispel field
12/06/1998 - POL025
==========
Added NPC functions:
- SetOpponent( character );
- SetWarMode( boolean );
See CSTGUARD.SRC. Try asking a castle guard to fight!
(more stuff is on the way, but just to show what's possible now)
Added OS function:
- set_critical( critical ); - sets a script's critical flag
( if true, script runs until it blocks )
NPCs ignore speech of dead PCs.
sleep() and wait_for_event() return absolutely immediately if 0 passed as timeout.
12/06/1998 - POL024
==========
".goto x y z" text command added - transports you anywhere.
Dynamic Menus added: (see test/dynmenu.src)
- CreateMenu( title )
- AddMenuItem( menu, objtype, text );
- NOTE, the object type of a mobile can't be used in a menu.
Special values are required; see tracking.cfg
I may add a function to convert from mobile objtype to menu objtype.
Internal changes to menu selection to support dynamic menus
Changed how map height is calculated; .wheretest now tests equal for all current test cases.
Fixed Mark spell (DC)
Recall Spell added (DC)
12/05/1998 - POL023
==========
Updated a bunch of scripts for the distribution.
Filled in SPELLS.CFG, and moved some spell scripts from SCRIPTS to SCRIPTS/SPELLS
Fixed bug in SelectMenuItem so you can use menus more than once again.
Docs updated for new functions (not the three below though)
Docs on structures and arrays added
Added
- CheckLosAt( character, x, y, z ) can character see (x,y,z)? - see teleport.src
- Thinking of calling this CheckLosToLocation.
- CreateItemAtLocation( x,y,z, objtype, amount ) - see test/createat.src
- MoveCharacterToLocation( character, x, y, z ) - see teleport.src
12/05/1998
==========
Meteor Swarm spell added. (DC)
Chain Lightning spell added. (DC)
12/04/1998
==========
finally got the damned frame relay back up :P
fixed a bug in alchemy2.src
added success_sound and failure_sound to use_stuff
added detatch() to all applicable scripts
heal and greater heal added
12/03/1998 - POL022
==========
Added:
- Detach() - allows character to perform other actions.
- see sspeak.src for an example.
Internal changes to SelectMenuItem to allow Detach to work.
Discovered two key (and old!) classes had nonvirtual destructors; Fixed.
This will kill some tiny leaks, but may expose other bugs.. Just FYI.
Created a generic use_stuff script for use when item1 used on item2 = item3. This checks the use_stuff.cfg file for information on how
and what to use items on. You still need to associate the item with teh use_item script in itemdesc.cfg
(see use_stuff.cfg for details)
added Eval Int, camping, Mark spell
added Protection from Poison potion
12/02/1998 - POL021
==========
Added:
- TargetCoordinates() returns struct(x,y,z)
- EnumerateItemsInContainer(container) includes unlocked subcontainers
- ListItemsNearLocation(x,y,z,range)
- ApplyRawDamage (deprecates Damage)
- HealDamage()
see healdmg.src, listcont.src, listnear.src for examples
Added "desc" read-only property to Item - the same as from singleclicking.
Internal changes to single-click text formatting
Internal changes to target cursor handling to allow targetting equipped items
12/02/1998 - POL020
==========
Added:
- ListItemsAtLocation(x,y,z), returns array of items
- ListMobilesNearLocation(x,y,z,range), returns array of mobiles
- 10 used for z-range
Internal changes to Target to support (later) multiple active action scripts.
12/01/1998 - POL019
==========
Spell fizzle sounds, animation added (only on skill failure)
POL.LG2 will start recording script errors.
(I think you can't read this file while the program is running,
which may make it useless, unfortunately)
some fixes to script substring comparisons.
12/1/98
==========
added Poison spell
Alchemy was working, then I broke it again :P
11/30/98
==========
alchemy starting to work. Use mortar on reagent, then select a flask. Contents added to flask (use .props) to check. Click on flask and select brazier to condense potion.
For some reason I never got a success on skill check, so may be a bug.
11/29/1998 - POL018 Minirelease
==========
Added:
- PlayObjectCenteredEffect() (for flamestrike)
- PlayLightningBoltEffect()
11/25/1998
==========
Dave's Ebolt added (use mine) (Rac)
Lightening added (Rac)
Ebolt, CreateFood, Cure, ArchCure added (DT)
ItemID and Armslore added -- need some changes (DT)
Eating added (that was a tough one!) (DT)
Created a "zapper" item (0x0379f) to test Item ID skill
11/24/1998 - POL017 Minirelease
==========
Skill use and spell casting scripts can now access the 'cfgfile' module
11/24/1998 - POL016
==========
".log [text]" command added - writes a message to the log file
Items can now have unique scripts which fire on double-click instead of
their ITEMDESC.CFG script. These are called a "use script"
(better name anyone? action script?)
".setusescript scriptname" command added - sets a "use script" for an item
New property added to ITEMs: 'usescript'. This is read/write.
So, you can do stuff like:
item.usescript := "whatever"; // <-- MUST be a string. others ignored.
to make enchanted items or whatever.
See SHOWSTUFF.SRC and SETSHOWSTUFF.SRC for examples.
Added some more checking to configuration file reading; now, translations
(like SkillId in weapon.cfg) will flag an error if text is misspelled.
Also, poorly formed numbers will be flagged in error.
Added item quality and exceptional items to blacksmithy, carpentry, and tinkering (DT)
Added the rest of weapons and armor to config files (DT)
Added Armslore skill, but it's not quite working (DT)
11/23/1998 - POL015
==========
moved explosion potion into drink_potion, and fixed the sound so Rac wouldn't hit me ;) (DT)
added batch file to archive all files in pol tree to \pol\pol.zip Mon-Fri at 5:30 PM EST (DT)
updated tinkering to include complex items(DT)
Added lockable chest creation with carpentry (DT)
Added trap creatoin with tinkering (failure has 1 in 10 chance of hurting craftsman) (DT)
objects, items, and characters can now have their properties
queried in scripts with "dot" syntax:
character.serial
item.objtype
and so on.
properties in a UOBJECT:
x
y
z
objtype
color
serial
height
facing
properties in an ITEM (in addition to those in UOBJECT):
amount
layer
container
properties in a CHARACTER (in addition to those in UOBJECT):
name
warmode
gender
truecolor
hp
maxhp
mana
maxmana
stamina
maxstamina
strength
dexterity
intelligence
dead
ar
NOTES:
(1) these are case-sensitive.
(2) The compiler won't notice if you misspell them.
(3) These are read-only.
(4) The compiler won't notice if you try to assign to them.
(5) POL won't log if you do (2) or (4)
(6) (1) won't change. (2) probably will some day, (3) will for some properties,
(4) probably will some day, (5) will change.
(7) I have only tested item.objtype and character.name (see BLADED.SRC)
Also note, these functions, which were added, are now basically obsolete:
(good thing they were trivial to write :)
GetPosition() added
GetStats() added
GetStatus() added
11/22/1998 - POL014
==========
".constat" command added (connection status)
11/22/1998 - POL013
==========
CheckLineOfSight() added
SetName() added
DestroyItem() added
11/22/1998 - POL012
==========
Added ".destroy" text command to destroy items.
I'll be uploading a .ZIP file with new releases. This will contain
the executable, the CONFIG, SCRIPTS, and DOCS directories, but
not POL.CFG or the DATA directory.
11/22/1998 - POL011
==========
bugfix: script target cursors targetted on characters will no longer AV.
( I don't think this actually happened to anyone..)
compiler change: all function calls require parenthesis, even those that
take 0 or 1 parameters (notably: print)
compiler change: module functions can define default parameter values now,
so scripts don't have to pass explicitly.
See scripts/spells/magicarrow.src for details
Scripted spells are in (magic arrow is the first)
- note for now, you have to call Target on your own.
GetSkill() added
PlayMovingEffect() added
11/21/1998 - POL010
==========
Scripts can now be tied to skills - see anatomy.src, skills.cfg.
11/20/1998 - POL009
==========
tinkering added (DT)
setup working.txt in /pol directory to track current projects
Added .props text command to list all object custom properties (ES)
GetObjProperty, SetObjProperty added (ES)
CStr() added (ES)
Added a bit of range checking to Damage (ES)
11/19/1998 - POL008
==========
SelectMenuItem returns struct( ObjType, Index ) rather than ObjType
- temporarily called SelectMenuItem2, to force script updates.
- I haven't written any scripts that use the Index member.
RandomInt( N ) added, returns random int less than N.
- untested as yet.
GetMenuObjTypes( menuname ) script-callable function added.
(not real useful yet)
PlaySoundEffect added. Currently, effects can only be centered on
characters. Sound names and numbers can be found in
docs/escript/sndlist.txt
Added carpentry (use saw 0x1035 on logs 0x1bdd) (DT)
11/18/1998 - POL007
==========
Added .UNLOAD SCRIPTNAME command - so you can try new scripts without
restarting
.CREATE (armor or weapon) will now associate the object with its
armor template or weapon template.
Added blacksmithy and beginnings of alchemy (DT)
11/17/1998
==========
smelting of ingots added (DT)
Added config file access for scripts - see DOCS/ESCRIPT/CFGFILE.HTM
11/09/1998
==========
.CREATE takes a second parameter, a count. Creates separate items, not stacked.
Added scripted fletcher skill - shafts/feathers into arrows.
Added .BCAST command
Added .ONLINE command
Added .ARMOR command - list your armor
11/03/1998
==========
Armor, shields, parrying added.
Error in skill advancement corrected.
Error in skill display corrected.