mirror of
https://github.com/polserver/polserver
synced 2026-08-13 08:23:08 -04:00
1915 lines
90 KiB
Text
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.
|
|
|