Skip to content
Switch branches/tags
Go to file
Cannot retrieve contributors at this time
-- POL100.1.0 --
07-01-2022 Kevin:
Added: Boolean property `item.cursed` and corresponding itemdesc.cfg `Cursed` property. There is no special core handling of cursed items, eg. gold coin objtype 0x0EED that is cursed can still be used for vendor transactions.
06-21-2022 Turley:
Changed: OpenXMLFile(file) returns Error if file does not exists, or any parsing error occurs.
Before it returned XMLRef in an error state, so 'if (!xml)' was and is a way to check for success.
06-16-2022 Kevin:
Fixed: Corrected objref documentation on Character.acct, Character.acctname, and Client.acctname.
Added: client.acct member to return Account object
Fixed: Accessing properties on a Client that do not exist no longer results in a shard crash.
04-29-2022 Kevin:
Fixed: `SendOverallSeason` now checks that connected clients have a character.
04-12-2022 Kevin:
Added: Boolean property `client.disable_inactivity_timeout`.
If true, the client will not be disconnected due to inactivity.
11-08-2021 Brndd:
Fixed: Outgoing packets with text field now correctly encode the text as CP-1252.
11-02-2021 Brndd:
Changed: SetString packet hook method will now write CP-1252 (extended ASCII) encoded text. This is what is used for the majority of packet fields that are not UTF-16.
Added: Added a new SetUtf8String packet hook method which will write UTF-8 encoded text.
09-11-2021 Kevin:
Fixed: party.AddMember(character) will no longer error if the character is a candidate of the party.
Changed: party.AddMember(character) will now error if passed an NPC.
08-30-2021 Nando:
Fixed: Possible infinite recursion of the attack hook if a character was moved by the attack hook
08-14-2021 Kevin:
Fixed: The remaining drop errors (too far away; location blocked) can now be disabled via the ShowWarningItem option.
08-11-2021 Kevin:
Fixed: User Functions that conflict with the same name as Module Functions will now result in a compilation error.
08-03-2021 Turley:
Fixed: loading of npcdesc AttackCProp and ShieldCProp
Fixed: loading of itemdesc NoDrop and NoDropException
Changed: either AttackSpeed or AttackDelay npcdesc entry need to exist for npc weapon creation.
Before only AttackSpeed lead to an creation.
07-22-2021 Turley:
Fixed: Fixed crash when too many items exists an a boat.
07-21-2021 Kevin:
Fixed: Fixed bug where a target couldn't be cancelled in some clients.
06-21-2021 Turley:
Fixed: HSA boat movement packets (0xF7 and 0xF6) overflow logic. It sends now the correct truncated object count and checks visibility of the objects it sends.
04-10-2021 AsYlum:
Fixed: Duplicated internal value for "speedhack" and "losany" privileges. When enabling "speedhack" privilege it also worked as "losany"
so LoS checks always returned true.
03-24-2021 Turley:
Added: os:OpenConnection argument keep_connection
defaults to 0, if set to 1 the connection is kept active on read timeout.
By default (old behaviour) the connection is closed when for 5 seconds no pkt was received (old behaviour).
03-14-2021 Kevin:
Added: Conditional operator: condition ? exprIfTrue : exprIfFalse
This new syntax allows you to efficiently return the result of one of the two expressions, depending on whether the conditon
expression evaluates to true or false.
03-11-2021 Kevin:
Added: Interpolated string expression: $"..."
This new expression syntax allows you to join multiple components into a string. Within the ..., you may specify zero or more:
- normal strings
- escaped characters, eg. \n
- {expression [: format]}, eg. {} or {who.graphic : #x}
- {{ for a { character, and }} for a } character
A complete example:
$"Hello, {}! You are player #{who in EnumerateOnlineCharacters()} online. Your graphic is {who.graphic : #x}."
... can replace an expression like ...
"Hello " + + "! You are player #" + (who in EnumerateOnlineCharacters()) + " online. Your graphic is " + Hex(who.graphic)
... or ...
"Hello {1}! You are player #{2} online. Your graphic is {3:#x}".format(, who in EnumerateOnlineCharacters(), who.graphic)
Since this change introduces new instructions, you **MUST** recompile all your scripts!
03-07-2021 Nando:
Added: RefreshDecayAfterBoatMoves in servspecopt.cfg. Defaults to true to maintain the old behavior. If this setting is true,
the items on deck will be refreshed after each movement or turn. You might want to disable this to implement item decay
on boats. Note that POL doesn't yet handle item decay on boats.
Fixed: HSA boat movement packets (0xF7 and 0xF6) will no longer overflow when too many items are on deck. Note that the packet
will be truncated and might be misinterpreted by the client or leave ghost items behind.
03-05-2021 Kevin:
Removed: The ability to generate the Escript wordlist via the -W argument to ecompile.exe has been removed. The Escript grammar can be
described by the ANTLR .g4 files in the repository.
03-04-2021 Kevin:
Removed: The old compiler has been removed from ecompile in favor of the ANTLR-driven 2020 compiler. This removes the ecompile.cfg
setting UseCompiler2020 as well as the ecompile.exe switches -g and -G. Any value of UseCompiler2020 in ecompile.cfg will be
ignored without warning.
-- POL100.0.0 --
02-28-2021 Nando:
Note: POL 100.0.0 is now officially released. This release marks the beginning of more frequent, rolling releases.
The next release will remove support for the old compiler. This is the *last chance* to test
if your scripts change when compiled with the new compiler. (See entry on 09-15-2020)
02-27-2021 Nando:
Added: Parameter "evmask" to EnableEvents(ev, range := -1, evmask := EVMASK_ALL).
The allowed values are EVMASK_ONLY_PC, EVMASK_ONLY_NPC, or EVMASK_ALL.
When set, an NPC or Item will only receive entered/leftarea events caused by a PC, NPC or all mobiles (the default behavior).
This parameter is useful, for example, to decrease the load when there are too many NPCs in the same area.
Added: Default mimetypes for .png, .js and .ico in the internal webserver
Added: Allow URLs/filenames with a hyphen (-) in the internal webserver
Fixed: Crash in SendPacket(), packet.SendPacket() and DisconnectClient() when the client was not yet logged in. Mostly affects packet hooks.
02-27-2021 Turley, Kevin:
Added: os::GetEnvironmentVariable(name:="")
Returns String value of given environment variable name. If name is empty, returns Dictionary of all allowed environment variables.
The pol.cfg setting AllowedEnvironmentVariablesAccess controls script access to this function. See documentation for more details.
02-22-2021 Kevin:
Fixed: Various compilation issues when using "\\" in scripts.
Fixed: Passing a string for the skill to CheckSkill() now correctly uses the mobile's skill.
12-17-2020 Turley:
Added: AppendConfigFileElem now checks if the file could be opened, returns an error if this fails.
12-9-2020 Turley:
Added: os::LoadExportedScript(scriptname, args:={})
Load and start program part of given script.
The optional args array will be unpacked and passed as single arguments to the program.
Script will be started non-critical or critical depending on the caller's state.
Blocks until the program part ends.
Returns array{ExportScript, return value} return value is the return value of the program or 1 if nothing was returned.
Added: ExportScript object
the script will remain loaded as long as the object exists.
member: .exported_functions array of exported function names
method .call(functionname, args:={})
Calls and blocks current script a exported function and returns the return value or 1 if no return value was given.
Like LoadExportedScript critical state depends on the caller's script.
Args see LoadExportedScript.
Added: packageref.dir member returns directory path
packageref.desc member returns description " (pkg.dir)"
Changed: added optional parameter for syslog "log_verbose" if set to 0 only the text will be logged and printed, not the scriptname.
10-25-2020 Turley:
Changed: updated StrFormatTime to allow all format specifiers see for full list.
Removed restriction of 100 characters.
10-20-2020 Syzygy:
Changed: It is now a syntax error to have a string literal that spans multiple lines.
If you have code like this:
var a := "first line
second line";
change it to something like this (adjust padding as needed):
var a := "first line\n"
+ " second line";
10-17-2020 Syzygy:
Changed: Now using semantic versions for core versions.
polcore().version now returns a string like 100.0.0 rather than an integer like 100
09-15-2020 Syzygy:
Changed: Replaced the eScript compiler. (Added the new compiler, which is used by default)
The intent is that the new compiler will compile every script that used to compile,
and will compile to identical instructions in the .ecl files.
There are a few cases where the old compiler (or "OG compiler") and the new compiler differ:
- Functions that are included but not referenced now have to have valid syntax.
- It is now an error for a "case" statement to specify the same value more than once when selecting which block to execute.
- Some operator precedence levels have changed:
- postfix operators: now have highest precedence.
- bit shift, bitwise or, bitwise and: now have the same precedence as multiplication
- bitwise or, bitwise xor: now have the same precedence as addition
- "in": now has higher precedence than the comparison (< <= >= >) operators
- elvis: now has precedence just below addition, and above "in", and above comparison
- As an example, this means "x & 0xFF == y & 0xFF" no longer needs parentheses to mean "(x & 0xff) == (y & 0xFF)"
- All operator precedence levels are here:
- The ordering of module function declarations (from .em files) and user function definitions:
- the OG compiler orders these in order of use
- the new compiler orders them alphabetically
- On 64-bit windows, the old compiler generates the wrong constant (-1) for hex values with the high bit set.
- Example: const EVENT_PEACEMADE := 0x90000000;
In order to ensure that the behavior of your scripts does not change, please perform the following steps:
- Run "ecompile -f -a -s -l -G" to run both compilers in "comparison mode" against all of your scripts.
- Fix any syntax errors.
- Remove duplicate "case" statement dispatch selector values.
- Add parentheses as needed to account for operator precedence.
- Repeat until both compilers produce the same output.
Here are some examples of changes that I had to make:
The OG compiler is still available. I'll remove it in a later version. If needed, you can use it by doing either of the following:
- pass "-g-" to ecompile
- set "UseCompiler2020 0" in ecompile.cfg
New ecompile.cfg options:
EmParseTreeCacheSize (default 25): The number of .em files to cache. This value is intended to be high enough to cache every .em file.
IncParseTreeCacheSize (default 50): The number of .inc files to cache. You might see a tiny speed boost by increasing this.
UseCompiler2020 (default 1): Whether or not to use the new compiler.
08-27-2020 Nando:
Changed: If "ShowGumpWarnings" in pol.cfg is disabled, it will also disable warnings about
overflow in the gump responses (B1 packet). Those messages may indicates the use of macro
tools or custom clients.
08-18-2020 Nando:
Added: Parameter "max_cmdlevel" to polsys::ListTextCommands(). Indicates the maximum cmdlevel to include in the list.
08-13-2020 Nando:
Changed: item.hitscript and item.onhitscript now always return the full path to the script (":pkgname:scriptname").
Before, if the item was defined on the same package as the script, only "scriptname" was returned.
08-09-2020 Turley:
Added: new argument "outdir" for uoconvert tiles/landtiles/multis this allows to define a different directory then the current workdirectory for the produced cfgs
08-04-2020 AsYlum:
Added: polcore().last_character_serial returns last character serial assigned by core
polcore().last_item_serial returns last item serial assigned by core
08-03-2020 Kevin:
Added: Optional parameter exit_code to uo::Shutdown() to change the pol process' exit code.
08-03-2020 Syzygy:
Added: ecompile.cfg "VerbosityLevel" option (setting this is equivalent to ecompile -vN)
08-01-2020 Turley:
Added: attribute.em CheckSkill() accepts now also the attribute name instead of the skill id.
07-31-2020 Nando:
Fixed: Quality of any item can now be directly assigned from an ItemDescriptor. Before this only worked for Equipment (Armor & Weapons).
Fixed: Stackable items with different values of 'quality' will no longer stack.
07-28-2020 Kevin:
Fixed: Multiple scripts should not be allowed to call uo::SendTextEntryGump on the same character.
07-16-2020 DevGIB:
Added: SwingSpeedIncrease(swing_speed_increase) and SwingSpeedIncreaseMod(swing_speed_increase_mod) to Mobiles and Items allowing people to have a dynamic modifier to the calculated swing speed.
Swing Speed Increase is used as a % modifier to the calculated speed of a weapon, e.g. Weapon speed of 30 * swing speed increase of 100% would make the swing speed 60.
06-14-2020 Syzygy:
Fixed: A compiler optimization bug that could corrupt emitted instructions
if branches of an if statement were optimized out.
06-10-2020 Syzygy:
Changed: It is now a compile error if a script requires a terminator (semicolon, etc)
at its end-of-file. This fixes bug009 in the escript test suite.
05-07-2020 Syzygy:
Changed: Removed the "declare" keyword, which used to forward-declare functions.
It's unlikely that anything still uses this keyword after 17 years, but if
any of your scripts still forward-declare functions this way,
just delete the line.
04-28-2020 Syzygy:
Added: Elvis operator: short-circuit binary operator EXPR_LHS ?: EXPR_RHS
This operator evaluates the left-hand-side operand and keeps its value if it is a true value.
Otherwise, evaluates the right-hand side operand and uses its value instead.
This is a short-circuit operator: if EXPR_LHS is true, the code for EXPR_RHS won't be executed.
These can also be changed: A ?: B ?: C ?: D evaluates to the first true value from left to right.
It has lower precedence than the binary additive operators (+ -), and higher precedence than the binary comparison operators (> >= < <=).
These are equivalent with or without parenthesis:
a ?: b + c a ?: ( b + c ) // lower precedence than addition
a ?: b <= c (a ?: b) <= c // higher precedence than comparison
See also
For example, you could change this:
var difficulty;
difficulty := GetHarvestDifficulty("fish", targetsquare.x, targetsquare.y, targetsquare.objtype, who.realm);
difficulty := GetHarvestDifficulty("fish", targetsquare.x, targetsquare.y, locinfo.landtile, who.realm);
to this:
var difficulty := GetHarvestDifficulty("fish",
targetsquare.x, targetsquare.y,
targetsquare.objtype ?: locinfo.landtile,
04-18-2020 DevGIB:
Added: ShowWarningCursorSequence to pol.cfg to silence "cursor out of sequence" errors.
03-19-2020 Kevin:
Added: New Server Specific Option (servspecopt.cfg) EnableWorldMapPackets. If enabled, the server will respond to client
requests for guild and party member locations. This option is disabled by default.
02-05-2020 Kevin:
Added: New SCRIPTOPT_SURVIVE_ATTACHED_DISCONNECT will keep attached scripts (eg. skill scripts, item use scripts) alive if the
character's client disconnects. Note that by default all references to the character will become invalidated; for example,
GetObjProperty(chr, "prop") will return an error. Enable SCRIPTOPT_CAN_ACCESS_OFFLINE_MOBILES to bypass this.
Fixed: Scripts that have Set_Script_Option(SCRIPTOPT_CAN_ACCESS_OFFLINE_MOBILES) can correctly access offline mobiles.
01-20-2020 Kevin:
Fixed: Huge Performance loss in Lower/Upper String functions.
01-18-2020 DevGIB:
Changed: Return type of XMLFile method .appendxmlnode() now returns the created node on success.
Changed: Return type of XMLNode method .appendxmlnode() now returns the created node on success.
Changed: Return type of XMLNode methods .setxmlattribute() and .removexmlattribute() now returns parent node on success.
01-12-2020 Kevin:
Changed: On Windows, the pol.cfg setting UoDataFileRoot will now default to the directory of the Ultima Online installation found in
the Windows Registry. This setting MUST be set for servers that do not have Ultima Online installed through the operating
system, and MAY be set to use custom a client data files directory.
01-04-2020 Turley:
Fixed: Tabulator and newline chars where disallowed in CChr and the sanitize step of strings. (introduced with unicode support)
01-03-2020 DevGIB:
Changed: POTENTIAL BREAKING CHANGE! Updated AddAmount() function to return the item reference on success instead of 1.
You'll need to check your scripts for AddAmount and make sure its not evaluated against 1 for success.
12-29-2019 Kevin:
Added: Added definitions for packets 0xFA (Open UO Store) and 0xFB (Update View Public House Contents).
12-28-2019 Turley:
Changed: house.house_parts member returns now when in edit mode the current (possible not yet confirmed)
list of parts instead of an error.
Changed: misc/customhousecommit.src no more has a third parameter elements.
Before this parameter was the only option to get the current working list,
but since the client is able to modify the house further especially when the script shows a confirm dialog the given list is outdated.
Its highly recommended in case of an confirm dialog to calculate the price again after gump confirmation!
Changed: syshook CloseCustomHouse now gets also called when client disconnects
Fixed: Several other bugs with custom houses
Thx Pumpkins!
12-28-2019 DevGIB:
Fixed: CustomHouses when no backup existed the foundation vanished on pressing revert.
12-12-2019 Turley:
Fixed: Poison/invul status for newer clients, when mobile didnt move
10-05-2019 Turley:
Changed: ECompile reports warnings and errors to cerr instead of printing everything to cout.
Exit code of ECompile is 1 when at least one file fails to compile.
Added: ecompile.cfg ErrorOnFileCaseMissmatch (default 0)
commandline flag -c
Leads to a compilation error if the capitalization of the include directive does not match the filename.
This has only a meaning on windows.
The existing warning is now an official warning meaning that the error on warning flag leads also to an abort.
Added: pre/post increment/decrement unary operator (++i, i++, --i, i--) for integer and doubles.
++i is the same as writing i+=1 or i:=i+1
i++ returns the old value, thus its equal to j:=i; i+=1;
Since it is an unary operator it can be directly used as function parameter or eg while loops.
Instead of writing
while (i<5)
you can directly write
while (++i<5)
Note: The operators are only implemented for numbers but this includes also eg. arrays or members when it represents a number. So ++a[1], ++who.fire_resist_mod are also valid.
Performance wise is i:=i+1 the slowest then i+=1 then i++ then ++i. (i++ is slower since it returns the old value).
10-03-2019 Turley:
Fixed: min/max damage visualization in the statbar are now cropped between 0 and 65k like damage calculation.
09-30-2019 Nando:
Changed: Changed default of GetProcess(pid) from 0 to -1 due to compatibility issues with scripts using CInt()'s result directly.
PIDs are now enforced to never represent negative numbers. Please update your os.em and recompile your scripts.
09-26-2019 DevGIB:
Added: Script objects now have package member which returns a PackageRef. e.g. = "GuildStone".
09-21-2019 Turley:
Changed: The core is now Unicode aware!
A normal String object can hold unicode.
Files can now be stored in utf8 with or without BOM.
For backward compatibility if invalid unicode is detected while compiling/file reading ISO8859 will be assumed.
CAsc and CAscZ are normally no more needed, most incompatible changes are due to the fact that the old unicode array used for uctext is now replaced by an normal string object.
Changed: The following incompatible changes where made:
OnPublicChat second parameter is now a string object
OnPrivateChat third parameter is now a string object
ChangePublicChat second parameter is now a string object
ChangePrivateChat third parameter is now a string object
RequestInputUC return value no more contains member uc_text
CharRef.clientinfo struct return value member video_description and langcode is now a string
PacketObj.getunicodestring()/getunicodestringflipped() return a string
TextCmd arguments are now (CharRef, String, [langcode=String])
SpeechEvent no more contains uc_text member
scripts/misc/charprofile.ecl fourth parameter is a string
Changed: all places which currently accept an UnicodeArray can now also receive a String (UnicodeArray just for backward compatibility)
cliloc.em SendSysMessageCL, PrintTextAboveCL, PrintTextAbovePrivateCL
npc.em SayUC
party.em SendPartyMsg, SendPrivatePartyMsg
unicode.em BroadcastUC, PrintTextAbovePrivateUC, PrintTextAboveUC, RequestInputUC, SendSysMessageUC
uo.em SendCharProfile
Note: Item/Mobile names need still to be in ASCII format.
Note: In the case of an unicode string as parameter for the following functions the unicode replacement will be automatically used, with ENU as langcode:
Broadcast -> BroadcastUC
PrintTextAbovePrivate -> PrintTextAbovePrivateUC
PrintTextAbove -> PrintTextAboveUC
RequestInput -> RequestInputUC
Say -> SayUC
SendSysMessage -> SendSysMessageUC
08-26-2019 Nando:
Changed: Improved how the debug, www and aux servers handle connections. They should be faster and more stable now. Minor issues fixed.
08-21-2019 DevGIB:
Fixed: Missing default on GetProcess( pid ), this is now GetProcess( pid:= 0 ) to align with docs and functionallity. Please update your os.em file and recompile.
07-12-2019 DevGIB:
Fixed: Initalization error with the new AOS props causing items with no props set to inject random numbers on server boot.
Changed: Fixed issue with moving a character to a shadow realm within the same screen, the core would not correctly send mobile serials to the characters client on relocation and you would still see inaccessible characters in the shadow realm.
Changed: Fixed some incorrect dates on the change log.
06-18-2019 DevGIB:
Changed: Fixed SendQuestArrow() function to use arrow id's rather than an actual object reference. This allows for multiple arrows to be sent to the client and cancelled individually by storing them in a cprop to be recalled later.
When sending SendQuestArrow() the function will return the arrows id for further processing.
06-17-2019 DevGIB:
Changed: Fixed default for OS::Start_Skill_Script on script_name attribute to be string like required.
06-17-2019 DevGIB:
Added: Support for LowerReagentCost, SpellDamageIncrease, FasterCasting, FasterCastRecovery, DefenceIncrease, DefenceIncreaseCap, LowerManaCost, Hitchance,
Luck, FireResistCap, ColdResistCap, EnergyResistCap, PhysicalResistCap, and PoisonResistCap and their subsequent mods to UObject as dynaprops.
Changed: Elevated Luck to UObject and added related LuckMod.
Added: Support for new prop changes to the status bar packet.
Added: Resistances will now be limited to caps by core, unless caps aren't set or are 0.
Added: CoreIgnoresDefenceCaps to servspecopt.cfg which defaults to 0. If set to 1 core will not calculate resistances and defence increase limits set on the mobile.
04-26-2019 Nando:
Changed: Improved connection handling. Linux won't be limited to 1024 clients anymore, recent Windows shouldn't be affected besides some slight performance gain.
Note: POL now requires at least Windows Vista / Server 2008. Let us know if Windows XP was important to you.
Removed: pol.cfg option "ListenPort". It was deprecated since 2012 (and likely didn't work). You should use a Listener in uoclient.cfg.
Removed: pol.cfg option "Multithread". It was deprecated since 2016 and unstable. Also removed the method OS::System_RPM(), which was only useful for singlethreaded POL.
04-26-2019 Turley:
Added: pol.cfg setting "LoginServerTimeout". Defines a timeout for new connections to the loginserver.
Defaults to 10 minutes, should give enough time to select a character.
03-19-2019 Kevin:
Changed: attributes::GetAttribute now accepts an optional parameter to specify the precision of the attribute
value returned. Use ATTRIBUTE_PRECISION_NORMAL (default) to use the existing precision, or
ATTRIBUTE_PRECISION_TENTHS to get the value in tenths.
Since this is a change to the module function's number of arguments, you MUST recompile your scripts.
03-08-2019 Yukiko:
Changed: pol.cfg settings HideWarningGump and HideWarningItem to ShowWarningGump and ShowWarningItem.
This positive logic is consistent with all other console output settings.
Default setting is one (1). The output be displayed by default. Set to zero (0) to suppress.
02-18-2019 Skinny:
Added: pol.cfg HideWarningGump and HideWarningItem.
Many players macros generate warnings messages on the console, causing flooding, especially if you have lots of players online.
You can enable setting HideWarningGump=1 and HideWarningItem=1 in the pol.cfg. Default value is 0.
02-02-2019 Yukiko:
Added: uoconvert.exe will now surface the AnimID for equippables to tiles.cfg. This can be used to look-up the gump pic for wearables that are displayed on the paper doll. Add this number to 50000 for male gumpart or 60000 for female gump art. The resulting number will be the gump art that is displayed in the paper doll.
01-21-2019 Nando:
Changed: account.split() will now return an AccountRef to the new account instead of "true".
01-17-2019 Kevin:
Fixed: Vendor purchases could overflow
01-01-2019 Turley:
Changed: DepletedFunction hook now receives a second parameter: reason
The values are:
0: Regenerate, 1: Damage, 2: Movement, 3: Death, 4: Resurrect, 5: Script
12-30-2018 Turley:
Added: vitals.cfg optional entry DepletedFunction
gets called once the vital reaches 0.
Given Argument is character reference
Like the other entries the syntax is ScriptName:ExportedFunctionName
12-21-2018 Turley:
Fixed: CPU usage of UseSingleThreadLogin
11-27-2018 Nando:
Added: Top-level items can now receive ENTEREDAREA and LEFTAREA events.
11-25-2018 Yukiko:
Changed: The order of a couple of functions listed in uo.em. They were out of alphabetical order.
Added: To uo.em ListItemsInBoxOfObjType( objtype, x1, y1, z1, x2, y2, z2, realm := _DEFAULT_REALM)
The function returns an array of all items in the bounds of the coordinates matching the ObjType specified.
Added: To uo.em ListObjectsInBoxOfClass( POL_Class, x1, y1, z1, x2, y2, z2, realm := _DEFAULT_REALM)
The function returns an array of all items in the bounds of the coordinates matching the POL_Class specified.
10-22-2018 Turley:
Fixed: Undefined behaviour after ~20 days due to overflow in time measurment. This fixes both internal time measurments e.g. for repeating tasks, swing,.. and for the EScript function ReadMilliSecondClock() see below.
Changed: ReadMillisecondClock() returns now a double instead of an integer to allow higher uptimes.
10-13-2018 Turley:
Added: syshook.cfg SystemMethod for defining object class method scripts.
Like itemdesc method scripts overriding builtin methods is possible, the builtin method can be called when prefixing with _.
For UObject classes like shown in the objref docs the inheritance is respected
so methods defined for items will be usable in weapons and methods defined in equipment override uobject methods.
Valid cfg keys are:
uobject, item, equipment, lockable, map, multi, armor, weapon, door, container, boat,
house, spellbook, corpse, npc, character, client, account, party, guild
Itemdesc/Npctemplate specific method scripts will still be first checked.
Note: uoclient.cfg MethodScript entry is deprecated
10-12-2018 DevGIB:
Changed: Added -1 as acceptable return from ConsumeAmmunition hook which will make the core continue with the normal ammunition checks.
10-07-2018 Turley:
Added: array.sorted_insert(obj, sub_index:=0, reverse:=0)
assumes an already sorted array and inserts given obj. sub_index and reverse parameter have to match the sorting criteria of the array.
10-06-2018 DevGIB:
Added: ConsumeAmmunition syshook to hook the cores check for ammunition consumption during combat. Hook should return 1 if combat is to go ahead and 0 if the weapon should not fire.
09-07-2018 DevGIB:
Changed: FindObjtypeInContainer(container, objtype, flags :=0 ) to recurse all containers from base container.
Added: Flags to FindObjtypeInContainer() for only accessing root container, and bypassing locked container checks.
Added: Additional documentation to the Racalac escript guide to include additional information supplied by Yukiko.
07-27-2018 DevGIB:
Added: ListStaticsNearLocationOfType( x, y, z, range, objtype, flags := 0, realm := _DEFAULT_REALM ) to get a struct of statics near a location which match an objtype.
Added: ListStaticsNearLocationWithFlag( x, y, z, range, flags, realm := _DEFAULT_REALM ) to get a struct of statics near a location which have matching flags in the tiledata.
07-29-2018 Turley:
Added: ecompile.cfg NumberOfThreads
forces N number of threads to be used for compilation, default is 0 which like before autodetects the number.
cmd param -T can now be optionally extended with a number to override the cfg setting
07-19-2018 DevGIB:
Added: EncodeBase64(String) and DecodeBase64(String) to basic.em to enable people to encode and decode strings using base64 without requiring an escript function.
04-02-2018 Bodom:
Removed: polcore().compiledate and polcore().compiletime
Added: polcore().compiledatetime
03-19-2018 Nando:
Fixed: Crash at shutdown when POL hasn't been correctly started.
02-26-2018 Nando:
Added: uoconvert now supports UOP files and will use them by default. If there is no
map[N]LegacyMUL.uop in the UODataFileRoot, uoconvert will fall back to the
old map[N].mul files. You can force uoconvert to convert from the old MULs by using
02-10-2018 Nando:
Changed: POL099 is officially released after almost 10 years. Starting the work on POL100.
-- POL099.1 --
02-11-2018 Nando:
Added: range parameter to Accessible(chr, item, range := ACCESSIBLE_DEFAULT).
Valid values: range >= 0, range == ACCESSIBLE_DEFAULT or range == ACCESSIBLE_IGNOREDISTANCE.
The default range will be defined as the servspecopt entry "DefaultAccessibleRange". If that
entry doesn't exist, the "DefaultDoubleclickRange" will be used instead (which defaults to 2).
Fixed: Accessible(chr, item) now checks for the distance to the item. Differently from the distance
of 2 tiles the docs stated, the allowed distance before was about 18 tiles. To recover the old behavior,
-- POL099 --
02-06-2018 Turley:
Fixed: fileaccess.cfg: Not specifying Directory entry behaves like before and gives access to all directories. (broken since 01-05-2018)
02-05-2018 Turley:
Added: Operator @
used to receive a function object, which can later be used to call the underlying function with the same parameters/return value via the method ".call(..)"
Note: This object can only executed in the same script instance where it was created and cannot be saved/loaded from datafiles/cprops.
Note: Use cases:
function genericItemLoop(func)
for item in ...
// complicated checks;
function changecolor(item)
// (fast) function table, instead of "if" cascade
var look=dictionary;
Changed: Version number of ecl files, recompilation needed.
01-07-2018 Kevin:
Added: basic::UnpackJSON(string)
Given a string in JSON format, returns an eScript object representing that JSON value.
Added: basic::PackJSON(expr)
Given an eScript expression (Int, Dbl, String, Array, Struct, Dict), returns a serialization of the object in JSON format.
01-05-2018 Turley:
Added: fileaccess.cfg Directory entry
Can be definied multiple times in package syntax.
::config means config rootfolder, :mypkg:test means subfolder test of mypkg. Has only a meaning if AllowRemote is given. Limits the access to given folder and its subfolders.
Added: New type Boolean
== != ! operators are implemented
use new basic.em function Boolean(1/0) to create such type.
see testsuite/escript/boolean in the sources for detailed scripts of what is possible.
01-04-2018 Kevin:
Added: os::HTTPRequest(url, method := "GET", options := struct{})
Creates an HTTP request, and returns the returned data as a string.
12-23-2017 Turley:
Added: os:PerformanceMeasure(delta_seconds, max_scripts)
Monitors for given number of seconds the instructions of all scripts. Returns:
struct with the following members:
total_number_observed - number of scripts alive in the timespan
total_instructions - sum of all instructions of the observed scripts
scripts - array of structs (max number is given max_scripts param) sorted by instructions amount
each scripts entry has the following members:
name - script name, if attached with name/npctemplate
instructions - number of executed instructions
pid - PID of the script
percent - percent of the total instruction amount
12-20-2017 Turley:
Changed: Doubled the speed of custom method resolution.
10-20-2017 DevGIB:
Changed: Added assume_string flag to OS::OpenConnection() to allow you to force the connection script to run as AUXSVC_ASSUME_STRING script option before the script loads in case of fast responding connections.
10-11-2017 DevGIB:
Changed: Added params to OS::OpenConnection() to allow you to pass parameters to the script that is run for the connection.
09-23-2017 Turley:
Added: array.sort(int sub_index:=0) the optional parameter specifies the index used for sorting in the case of an array of arrays
09-10-2017 Turley:
Added: poltool uncompressgump
unpacks and prints content of a compressed gump
only parameter is a filename, which needs to contain a single 0xDD packetlog
Added: item member no_drop 1/0 r/w (itemdesc NoDrop)
if set no drop of this item is allowed
container/npc member no_drop_exception 1/0 r/w
(itemdesc/npctemplate NoDropException)
if set this container/npc is a valid target even if no_drop is set for the item
08-03-2017 Nando:
Fixed: Shutdown crash when using character method scripts.
07-31-2017 Nando:
Fixed: Interactive commands could cause a crash when used inside a run-to-completion script
(e.g., syshooks, scripts ran via OS::run_script_to_completion() and method scripts). The
interactive commands will now return an error if the script can't be blocked.
(Note: this does not apply to critical scripts, which *can* block).
Affected commands:
UO::Target(), UO::TargetCoordinates(), UO::TargetMultiPlacement(), UO::SelectMenuItem(),
UO::SendDialogGump(), UO::SendGumpMenu(), UO::SendTextEntryGump(), UO::SendInstaResDialog(),
UO::SelectColor(), UO::SendPopupMenu(), UO::RequestInput(), Unicode::RequestInputUC()
07-23-2017 DevGIB:
Added: _DEFAULT_TEXT_REQUIREDCMD := 0 to uo.em which allows to set a minimum cmd level that broadcasts will be sent to.
Changed: Broadcast( text, font := _DEFAULT_TEXT_FONT, color := _DEFAULT_TEXT_COLOR, requiredcmdlevel := _DEFAULT_TEXT_REQUIREDCMD )
adding requiredcmdlevel argument which allows you to set a minimum cmd level that the broadcast will be sent to.
Changed: No longer require a PID for GetProcess( pid := "" ), not selecting a PID will use the PID of the parent script.
07-17-2017 Kevin:
Fixed: PrintTextAbove*CL() now behaves similarly to PrintTextAbove*() functions, displaying the
object's description instead of "System".
05-28-2017 Turley:
Removed: pol.cfg entry to disable assertions. A crash will anyway happen, thus it makes no sense and only hides the real reason.
05-28-2017 Nando:
Fixed: Crash when using SplitWords() in a script that was compiled with outdated .em files.
05-01-2017 Turley:
Fixed: property gets now reset on component remove
11-29-2016 Boberski:
Added: Support for TOL (Time of Legends) expantion.
10-23-2016 Nando:
Added: Member character.carrying_capacity (read only)
Returns the current carrying capacity of a character, defined as:
(40 + 3.5*STR + chr.carrying_capacity_mod)*ssopt.carrying_capacity_mod
Note: Characters can go above their carrying_capacity, but they will spend
much more stamina to move according to movecost.cfg. Don't treat this
as max_weight.
08-28-2016 Turley:
Fixed: Calculation of NPC AOS resistance/damage values
Added: Member object.specific_name
returns 1 if a custom name is set. if its still the original (eg itemdesc) returns 0
03-27-2016 Nando:
Added: Option "ThreadStacktracesWhenStuck" to pol.cfg. Useful to debug the core when
no clock movement occurs for more than 30 seconds. Defaults to false.
03-25-2016 Nando:
Fixed: Crashes when receiving very big packets.
03-24-2016 Nando:
Fixed: Crashes after deleting a component (hold, tillerman, plank) of a boat
03-23-2016 Nando:
Fixed: Possible crashes when a script teminates while executing a SQL command.
03-21-2016 Nando:
Fixed: Possible crashes when handling a client's response to menus
created with CreateMenu()
03-02-2016 Nando:
Changed: POL will default to use multithreading (Multithread = 1 in pol.cfg).
Note: Multithread=0 is deprecated and likely buggy. It's possible that it doesn't
even work at the moment. Because every OS should support threading by now,
we see no reason to maintain two separate systems. Singlethread support will
be removed in the next version.
03-02-2016 Nando & Turley:
Fixed: Possible crashes when sending events to npcs whose event queues were full.
02-29-2016 Nando & Turley:
Fixed: Data races when dealing with clients. Some other not-reproducible crashes
should also go away now.
02-15-2016 Nando:
Changed: UO::SendQuestArrow(x := -1, y := -1, target := "")
This function will now work for HSA clients (version > 7.0.9), which
require a larger packet. Target is ignored for older clients, but is
required (and must be a valid Item or Character reference) for HSA
Added: UO::SingleClick(who, what)
This function will emulate a single-click from the client, sending
the character name, guild and tags or the item description. Note
that the client may display the item description wherever it had
clicked before. "what" can be either a serial, item or character.
01-31-2016 Bodom:
Added: CProp profiler: helps detecting unused CProps.
It can be enabled by using the new pol.cfg option "ProfileCProps".
For better results, should be enabled before startup.
Impacts on performance very slightly, but consumes an average of
300 bytes of extra RAM for every CProp used.
New polsys.em function LogCPropProfile() can be called to dump
the profiling information into cpprofile.log.
01-30-2016 Bodom & Nando:
Fixed: Spoofing prevention on packet 0xD7 (custom housing)
01-22-2016 Bodom:
Fixed: Minor bug in ecompile allowing Double literals in the form "2d4".
These were incorrectly interpreted as "2e4", meaning 20000 and
leading to confusion with dice rolls. The compiler now issues
an error instead.
01-20-2016 Bodom:
Added: New property, returns a reference to the house if the
item is a component of it (listed in House.components()).
This is the intended replacement for the previously removed CProp
"house_serial": use instead of
GetObjProperty(item, "house_serial").
12-27-2015 Bodom & Nando:
Fixed: Linux crash on shutdown
12-26-2015 Bodom:
Fixed: Bug in String.format()
String tags were not correctly processed.
"{name} you hit level {level}".format(struct{name:="Jane Doe", level:=4})
now correctly formats as "Jane Doe you hit level 4" instead of
"Jane Doe you hit level <invalid index: #2>"
12-18-2015 Bodom:
Added: New eScript escape sequence in strings "\xAA". Allows to specify a
single character by its binary value (\x01 to \xFF). The value must
always be 2 digits long, in hex, case insensitive (eg. \xA is not
12-05-2015 Bodom:
Added: Buff Bar support
New Character's addBuff(), delBuff() and clearBuffs() methods,
please see docs for details and explanation.
0xDF packets are automatically sent when needed (eg. at relogin).
Buff Bar status is not saved, maybe it will be in future.
11-28-2015 Bodom:
Added: New Client object properties last_packet_at and last_activity_at
11-01-2015 Bodom:
Added: mysql_query() now supports a third "parameters" (array) argument.
It can be used to safely replace "?" placeholders inside the query
with corresponding array entries.
10-27-2015 Bodom:
Added: New pol.cfg option AllowMultiClientsPerAccount (default: false)
When true, allows multiple characters from the same account to be
logged in at the same time
Fixed: Items' CProps were loaded again from itemdesc.cfg at startup when deleted
10-18-2015 Bodom:
Fixed: MoveItemToContainer could stack non-stackable items in some circumstances
10-07-2015 Bodom:
Removed: "house_serial" CProp is no longer set by core for house components
Fixed: Exception when editing a custom house with components outside of the
10-06-2015 Bodom:
Fixed: Fixed crash condition (stack overflow) when unequipping last armor
piece weared by an NPC and then receiving an hit.
Changed: Intrinsic armor now takes precedence over equipped armor (is was the
opposite before). Anyway, using both of them could lead to unexpected
behavior so it is not a good pratice.
10-02-2015 Bodom:
Added: Intrinsic Shield support, works just like intrinsic weapons
New extobj.cfg entry "Shield" (defaults to 0x1F022)
New item must be defined in itemdesc.cfg
// Intrinsic Shield template - special pseudo Shield for NPCs
Armor 0x1F022
Name intrinsicshield
Graphic 1
MaxHP 1
SaveOnExit 0
09-30-2015 Bodom:
Added: MoveItemToContainer parameter add_to_existing_stack can now be 2 for "auto" behavior
The function will try to add the item to an existing stack and just try move the
item inside the container if no stack is found
09-29-2015 Bodom:
Fixed: When a robe is already equipped before resurrect, no longer destroy it to
equip the death robe
Fixed: When HonorUnequipScriptOnDeath is on, item's unequip and unequiptest scripts
were called twice on death and in the wrong order
09-27-2015 Bodom:
Fixed: Armor were not calculated correctly for NPCs wearing equip
Fixed: Allow changing graphic of equipped items again if the new graphic has the same layer
09-25-2015 Bodom:
Added: New uo.em function SendPopUpMenu( to, above, menu ).
Added: On pop-up menu request (single click) "misc/popupmenu.ecl" is called.
Fixed: When using MapDiff, tiles could disappear in some circumstances
09-24-2015 Bodom:
Added: New keyword AttackCProp on npcdesc.cfg allows defining CProps for
intrinsic weapons.
Fixed: Hp/MaxHp updates to nearby clients were still using the real value
instead of the 1000-based ratio when sending the 0xa1 packet.
Fixed: Hp/MaxHp updates were sent twice to the originating character.
09-12-2015 Bodom:
Fixed: Bug in loading POL098 and older data files: boats were rotated leaving
dynamic elements like plank and tillerman on the old position.
09-08-2015 Bodom:
Fixed: Bug in LAN IP address identification (some IPs in were skipped)
09-06-2015 Nando:
Added: Data integrity check will test if the item serial is valid (serial >= 0x40000000) when loading items.
Fixed: Items could be created with character serials if the wrong values were saved in data/pol.txt.
Note: Character serials must be in the range 1 to 0x3FFFFFF (inclusive), while item serials must
be between 0x40000000 and 0x7FFFFFFF (inclusive).
09-06-2015 Bodom:
Added: New Item.process property
Returns reference to the controlscript, if any running
Changed: Script.attached_to now returns a reference to the Item when called on a ControlScript
Added: New servspecopt.cfg option DefaultCharacterHeight (1-32)
This will be the default (and never changed so far) height of Characters
and NPCs. Default value is 15. Back in the POL095 days is was 9, so consider
9-15 as your "safe" play range. Anything outside that range could cause weird
movement behavior. Even small changes will have a great impact on LOS
calculations and, more in general, on the combat system.
It is also used to calculate wether a Character can fit under a low
passage (e.g. dungeon stairs).
Keep in mind a Titan and a Slime will have the same height.
09-05-2015 Bodom:
Changed: Process ids (pid) no longer start from 1 but from 0x01000000.
This should have no practical effect.
Added: Allow specifying an arbitrary Gump id in SendDialogGump()
Custom gump ids must be in the range 1-0xFFFFFF. If no gumpid is given,
the old behavior of using the pid will still be used (so that this
does not break backward compatibility).
It is now possible to organize the gumpids in a constants file and have
the same gump to always be sent with the same id. This way the client
will recognize it and, if the player moved it last time, it will
reposition it where the player liked it: this should be a nice
interface improvement.
It is now possible to implement the Virtues gump, since it needs a
pre-defined gumpid of 0x01CD to work.
Changed: CloseGump() now accepts a gumpid instead of a pid. For scripts not
using custom gump ids, its behavior is the same as before.
09-03-2015 Bodom:
Added: Item insurance support, new Item.insured property (0/1)
An insured item behaves on death like a newbie item, except that the insured flag gets reset back
to 0 after every death. If the item for some reason (e.g. when backpack is full) will get dropped
instead, the insured flag will be reset anyway. Insured items are not stackable with normal items
but they can still be sold to vendors.
Hint: this feature can also be used in conjunction with CanDie sys hook to determine via script which
items a player will drop on death; since the CanDie hook is called exactly one moment before death you
can use it to insure the items that you don't want to fall on the corpse.
Added: RepSys NameColor and HighLightColor hooks can now return -1 to let the core run the builtin code.
08-27-2015 Bodom:
Added: New eScript keyword: unused
This keyword can now be added before a variable name in function or program block declarations.
It has no effect on the resulting compiled code, but instructs the compiler not to issue a warning if
the following variable will not be used. The compiler will instead fire a warning if the interested
variable will then be used later in the code. Examples:
program onremovescript( character, container, unused item, unused item_amount, movetype )
// Here the variables item and item_amount are needed in the program declaration but will not be used,
// the unused keyword prevents warnings to be triggered
function myfunc( parameter1, unused parameter_for_future_use )
// Same as above: parameter_for_future_use is not used and unused prevents the warning message
07-27-2015 Turley:
Added: array.cycle([count])
will move array backwards or forwards in-place as it were a conveyor belt.
{1, 2, 3}.cycle()
Will make it:
{3, 1, 2}
Accepts a negative value as a shift to move different direction
Changed: string.format()
Now actually faster than string concatenation in eScript
Fixes a bug where {:d} formating could cause an arbitrary number shown instead of a real value
tag errors are slightly more intuitive and compact.
Note: Patches submitted by andenixa
02-08-2015 Turley:
Added: PolCore().memory_usage member, returns current process usage in KB
Changed: 0xF1 Freeshard list pkt is now allowed during login state,
thus its possible to create eg a UOGateway pkthook for this pkt
01-31-2015 Turley:
Added: uo::ListMobilesInBox( x1,y1,z1, x2,y2,z2, realm := _DEFAULT_REALM )
like ListObjectsInBox but returns only mobiles.
Changed: uo::List*InBox functions accept as z parameters LIST_IGNORE_Z
Thx @ andenixa
Added: uo::GetMidpointCircleCoords( xcenter, ycenter, radius )
based on given center coordinates and radius returns array of x,y structs which represent a circle
Thx @ andenixa
The array of coordinates is sorted, which means that its easily possible to only use every second point
09-12-2014 Nando:
Fixed: Client crash with clients older than but newer than, because of wrong size in
boat movement packets.
07-12-2014 Nando:
Fixed: Items were not disappearing from the character's backpack after being moved to the corpse.
Fixed: Items were disappearing from the corpse when an equippable item was moved/inserted into it.
11-13-2014 Nando:
Added: EnforceMountObjtype property in pol.cfg. Will enforce that only items with the mount
objtype (as defined in extobj.cfg, default 0x1F021) can be mounted.
Fixed: Inconsistency when handling mount objects that would trigger an assertion for equipping
items with the mount objtype but a bad graphic.
Note: To be equipped as a mount, the item must be in the mount tiles list of uoconvert.cfg.
This ensures that the item has layer 25 and the equippable flag, otherwise it won't
be considered equippable.
11-05-2014 Nando:
Added: polsys::Realms() will now report how many offline mobiles and multis there are.
Added: "ShowRealmInfo" option in pol.cfg (default to false). Will report every once in a while
the number of items, mobiles and multis per realm.
Added: uo::ListOfflineMobilesInRealm(realm) method to return the list of offline mobiles in a
specific realm. Useful for moving the offline mobiles out of a shadow realm before
deleting it.
Fixed: Crash bug when deleting shadow realms while an offline mobile or a multi were still in it.
Fixed: Top-level items were not properly counted when moved between realms.
10-29-2014 Nando:
Fixed: Crash bug when deleting item directly from a corpse.
10-19-2014 Turley:
Added: AnimXlate.cfg for newer clients
Added: example animxlate.cfg:
defines which graphics support mount translation
and per graphic type how to translate animation from older clients to newer (
see cfg for description of possible entries.
09-23-2014 Nando:
Changed: Corpses will no longer send the full list of contents before being open. Only the equipped
items will be shown. This should decrease slowdowns in areas with many corpses.
09-21-2014 Nando:
Fixed: Corpses will now equip items that are placed on them, even if they don't have an OnInsert script.
Fixed: Possible crash when items having layers larger than 25 were placed/removed from corpses.
06-07-2014 Tomi:
Fixed: using DestroyItem or SubtractAmount on an item 'gotten' it will now first release the item and then destroy it
Fixed: NPCs looks for players for enter/leftarea events when, these were only looking for npcs
- moved with MoveObjectToLocation function
- on every move
- unhide
- npc creation
Fixed: Destroying an equipped item now calls unequip scripts
Fixed: Changing cmdlevel with chr.cmdlevel := or chr.SetCmdLevel() sends updates correctly to see concealed characters
Old Commits:
Changed: pol.cfg MinCmdLevel checked already during the first accountlogin, so now it doesnt let those connections go all the way to char creation anymore.
Fixed: Crash during character creation where equipment realm was not updated and pol crashed when unequipping/equipping.
Fixed: Setting Enter/Left area event listening for npcs on range 32 did never send the left area on distance 33
05-26-2014 Turley:
Added: character.last_textcolor readonly member returns last textcolor of the character. Values are between 2 and 1001. Returns 0 if not yet spoken.
(will not be saved inside of the datafile)
05-06-2014 Tomi:
Added: Realm entry to startlocs.cfg, The earlier MapID still needed for the client to show the map correctly, but realm is needed for the server to put the character during creation in the correct realm, default value "britannia"
04-05-2014 Turley:
Fixed: multi.items returns now all toplevel items inside of the multi
03-15-2014 Turley:
Changed: sql functions connect, select and query perform the communication part in background while script itself
is stopped (like eg Target()). Which means that these time consuming functions do not block the complete shard.
Removed sql module from runecl, since it no more compatible.
03-01-2014 Nando:
Added: Character.temporally_criminal is true when a criminal timer is running on the character.
Note: The old property chr.criminal stays the same: it is true when the character is temporally
criminal or a murderer.
02-27-2014 Tomi:
Fixed: changing cmdlevel now updates correctly which concealed characters you see
Fixed: crashes when parent script is killed before child script returns
Fixed: crashes when reporting error in an armordesc entry defined in config\itemdesc.cfg
02-25-2014 Tomi:
Added: Boat Smooth move for clients which support it ( HSA+ )
Added: boat.em flags ( These flags are ignored for boat movements sent to old than HSA clients )
const BOAT_SPEED_SLOW := 2;
const BOAT_SPEED_FAST := 4;
Changed: boat.em functions
MoveBoat( boat, facing ) to MoveBoat( boat, facing, speed := BOAT_SPEED_ONE_TILE )
MoveBoatRelative( boat, direction ) to MoveBoatRelative( boat, direction, speed := BOAT_SPEED_ONE_TILE )
Note: The same functions are used to move boats for older and never clients, older clients ignore the speed parameter, but the speed paramter is required for smooth move.
The clientversions are checked in core to determine what type of boat movement will be sent
02-01-2014 Tomi:
Fixed: Customhousing exterior stairs delete is now working, commiting does not readd them anymore
Fixed: Customhousing changing floor is now sending a full msg instead of short msg, so no more synch needed after changing floors until you can start working on it
01-20-2014 Nando:
Added: DisableNagle option in pol.cfg to disable Nagle's algorithm, default to 0. In theory, latency should improve if DisableNagle=1.
01-20-2014 Turley:
Fixed: Made the sql module atleast a bit script friendly. Removed the mysql_free_result function since the result objects automatically get destroyed on scope exit.
Passing the sql objects as function parameters is now also possible. mysql_close is now also senseless, but kept it for anyone who wants to directly close the connection.
Boolean check for the connection object performs now a ping and returns false if the connection is lost (eg. timeout)
12-31-2013 Turley:
Added: Print small backtrace on crash/passert failure, should help a bit without the need of the dump.
Works only under Windows 64bit
Changed: optimized world object storage and usage. Should improve eg pkt sends and scales better.
11-03-2013 Tomi:
Fixed: Container Max Weight works now like it did earlier before _mod changes, all values <= 0 sets it as 0xFFFF max weight
10-25-2013 Turley:
Fixed: newbie flagged backpack caused endless loop on death
10-21-2013 Tomi:
Added: polsys::FormatItemDescription( desc, amount := 1, suffix := "" )
This formats the desc using Pols built in Singular/Plular formatter
10-04-2013 Turley:
Fixed: \= operation
10-01-2013 Tomi:
Fixed: Container.locked works again
09-25-2013 Tomi:
Added: character.DisableSkillsFor( duration ) method to disable skills that are started with start_skill_script or by scritps defined in attributes.cfg for duration ( seconds )
This method overrides the default Delay setting in attributes.cfg if used ( for example if on failing a skill you want no delay just set it to 0 )
This can also be used to disable skills for example during an event or pvp
Added: item.name_suffix for adding crafter marks or such
item.desc returns the formatted name and suffix added to it without formatting if it exists does not include this suffix, so that can be used to get the item name without formatting and without suffix
09-21-2013 Tomi:
Changed: Pol doesnt send "I am frozen" messages anymore when paralyzed, now it sends in all those cases "I am paralyzed" messages
09-20-2013 Tomi:
Fixed: Invul changes now sends the healthbar color correctly for UOKR and later clients
Fixed: All repsys changes now send the update correctly to yourself and all client around you
Removed: support for murderer healthbars for UOKR clients.
09-18-2013 Tomi:
Added: cfgfile::GetConfigIntArray, works the same way as GetConfigStringArray but returns an array of ints instead of strings
Changed: now returns itemdesc.Desc without singluar/plural formatting if no name is set and name from tiledata if no itemdesc entry found
09-17-2013 Tomi:
Fixed: Item.SplitStackInto and Item.SplitStackAt methods for non stackable items ( now also works splitting non stackable items 1 by 1 from a stack force created )
Fixed: Mountpieces will not be copied into corpses during character death anymore even if they are non movable
09-03-2013 Tomi:
Changed: Equipment members .maxhp_mod .hp .maxhp and .quality moved to Item
only Weapons and Armors need to have the MaxHP defined in itemdesc because core combat is using it, for all other items there is a default value 1
Added: Weapon RW member .speed_mod ( -32,768 to 32,767 ) as an optional way to delay if you want to use the default speed math and just add to that
Fixed: upper limits using the container members .max_items_mod .max_weight_mod and .max_slots_mod
if max_items >= 3200 it will be set to 3200
if max_weight >= 65535 it will be set to 65535
if max_slots >= 255 it will be set to 255
Note: None of these members can go below zero
09-02-2013 Tomi:
Added: Container RW members .max_items_mod( −32,768 to 32,767 ) .max_weight_mod( −32,768 to 32,767 ) and .max_slots_mod( −128 to 127 ) ( default values 0 )
08-31-2013 Turley
Fixed: EScript memoryleak (eg myvar[blubb]:=othervar)
08-28-2013 Tomi ( based on andenixas patch )
Added: ssopt.MobilesBlockNpcMovement ( default true ) to determine if mobiles block the movement of npcs
Note: Tamed npcs with same master ( npc.master ) still blocks each others movement even with the flag false to not allow them run on top of each others when following the master
08-27-2013 Nando (patch by andenixa, text adapted from forum post):
Added: string.format( args ) - formats a string using the data from args
Accepts the following format:
{:x} for hex representation
{:o} for octal
{:b} for binary
Add a # to get notation prefix:
E.g. "{:x}".format(10) -> "a"
"{:#x}".format(10) -> "0xa"
Parameters can be simple:
"You have {} gold coins".format(120) -> "You have 120 gold coins"
and are unpacked implicitly by their order:
"{} hits {} for {} of damage".format("John", "Bob", 120) -> "John hits Bob for 120 of damage"
However you can specify parameters explicitly (first argument is at 1):
"You hit {2} for {1} damage".format(120, "John Doe") -> "You hit John Doe for 120 damage"
Format allows accessing object members:
"Spell {1.spell_name} requires reagents: {1.reagents}".format(struct{spell_name:="Fire Wrath", "Ba, Bm, Ga"})
-> "Spell Fire Wrath requires reagents: Ba, Bm, Ga"
Implicit members also work:
"{name} you hit level {level}".format(struct{name:="Jane Doe", level:=4})
-> "Jane Doe you hit level 4"
Character or item members are accessed the same way:
"{}, your shield {2.desc} has {2.hp} hp".format(who, who.shield)"
-> "Admin, your shield Buckler of Death has 150 hp"
07-27-2013 Tomi:
Changed: UO::TargetMultiPlacement( character, objtype, flags := 0, xoffset := 0, yoffset := 0, hue := 0 );
New optional hue parameter to show hued multis which are supprted by clients >= 7.0.9 ( HSA )
Older clients ignores this option
06-17-2013 Kevin:
Fixed: adding missing mysql_close() entry to sql.em
Fixed: OpenSellWindow() "Buyable" container wasn't actually restricting what entries showed.
Pass flag VENDOR_BUYABLE_CONTAINER_FILTER to enable this filter.
05-25-2013 Kevin:
Fixed: bug in mysql_select_db() returning error on successful calls
Fixed: adding missing mysql_free_result() entry to sql.em
02-26-2013 Kevin:
Fixed: item.SplitStackInto(container,amount,add_to_existing_stack := 1) no longer requires three parameters and will default
the add_to_existing_stack to 1/true if not present
Fixed: item.SplitStackInto() with add_to_existing_stack == 1 will re-add the removed-portion of stack back to original item
if it cannot add to the existing stack (ie, container's caninsert script returns false)
Changed: item.SplitStackInto() with add_to_existing_stack == 1 will first attempt to add to an existing stack if found, and otherwise
will create a new stack if no existing stack found. This is similar to how the existing CreateItemInContainer() works
02-20-2013 Tomi:
Fixed: When changing graphic of a lightsource item, it now changes correctly the facing too.
Fixed: Status bar now shows for weapon mindamage ( id.mindamage + dmg_mod ) and for maxdamage ( id.maxdamage + dmg_mod )
02-17-2013 Tomi:
Fixed: Changing invul status now updates it for the character itself too, not just all mobiles around
02-15-2013 Tomi:
Fixed: item.SplitStackInto method
01-04-2013 Tomi:
Added: Syshook CanTrade
parameters ( character, drop_on_chr, item )
Note: This syshook runs when dropping an item on a character or when trying to add an item to a tradewindow
12-15-2012 Tomi:
Fixed: Items now get their facing from tiledata flag if no itemdesc entry is found
This fixes wrong lightsources for items such as lampposts
12-08-2012 Tomi:
Fixed: Typo in uo.em with new LISTEX flags
Added: const REALM_BRITANNIA_ALT to uo.em
12-05-2012 Tomi:
Added: Pol now send on invul/murderer status changed for >= KR Clients packet 0x17 to get Yellow or Red color health bars
Changed: UO:ListMobilesNearLocationEx added 2 new flags LISTEX_FLAG_PLAYERS_ONLY and LISTEX_FLAG_NPC_ONLY
Changed: combat.cfg option "SendAttackmsg" to "SendAttackMsg" to match cases of other options
Fixed: UO:MoveItemToContainer doesnt crash anymore when using add_to_exisitng stack parameter
Fixed: item methods .SplitStackAt and .SplitStackInto doesnt crash Pol anymore when using add_to_existing_stack parameter
11-16-2012 Turley:
Added: string methods:
str.length() : returns like len(str) the length of the string
str.upper() : returns like upper(str) the uppercase version and also modifies the str
str.lower() : returns like lower(str) the lowercase version and also modifies the str
str.find(Search,[Start]) : returns like Find(string, search, start) the index of the first occurance of 'search' after 'start' within str
but unlike the basic.em function the Start parameter is optional if not given it searches the whole string
str.join(array) : returns a string which is the concatenation of the array elements, seperated by str
11-14-2012 Turley:
Changed: SplitWords( str, delimiter := " ", max_split := -1 )
it has now an additional parameter max_split, if given it limits the number of times that a string will be split
default: -1 no limit
(Patch submitted by andenixa)
Added: ecompile its now possible to override through the cmdline
GenerateDependencyInfo entry with "-D-"
GenerateDebugInfo entry with "-x-"
11-10-2012 Turley:
Added: uoclient.cfg Listener property "KeepClients" 1/0 default 0
if set to 1 clients keep this listener port even after different gameserver select
Note: actually 1 is the old behaviour and 0 the old behaviour of pol.cfg ListenPort
Added: pol.cfg "UseSingleThreadLogin" 1/0 default 0
if set all prelogin clients are handled inside the listener thread and not inside an extra thread
this will reduce the amount of thread creates and destroys
10-14-2012 Tomi:
Added: SystemHook "WarmodeChange" called when a character changes warmode status either by member .warmode or by clicking the warmode button on the paperdoll
Params CharRef and new_warmode_status
Return value is ignored
10-09-2012 Tomi:
Fixed: packet 0x17 ( poison health bar packet ) was sending 2 bytes with wrong endian when sending to nearby clients
10-08-2012 Turley:
Fixed: secured Shadowrealm delete, it will now iterate through all StorageArea Items and check if old shadowrealm property exists
10-06-2012 Tomi:
Changed: setting an equipped item on NPC to movable 0 will make it visible on the corpse but invisible in the corpse, same as hair and beard have worked until now.
10-05-2012 Turley:
Added: ecompile parameter -wP
Added: ecompile.cfg entry ParanoiaWarnings
Note: since "{}" is valid syntax, only complain about it if ParanoiaWarnings is enabled
09-29-2012 Turley:
Added: ecompile parameter -T
Added: ecompile.cfg entry ThreadedCompilation
Note: if set will use openmp for parallel compilation
09-25-2012 Kevin:
Fixed: Guild and alliance messages no longer send as regular speech messages. They are sent to all guild or alliance members online.
Added: servspecopt.cfg CoreGuildMessages=0/1 default 1 to determine if core should handle guild and alliance messages.
08-29-2012 Turley:
Fixed: Crash if a attached script kills the attached npc
08-27-2012 Tomi:
Changed: MoveItemToContainer( item, container, x := -1, y := -1 ); to MoveItemToContainer( item, container, x := -1, y := -1, add_to_existing_stack := 0 );
Changed: item.SplitStackInto( container, amount ) to item.SplitStackInto( container, amount, add_to_existing_stack := 0 )
Note: The optional add_to_existing_stack parameter defines if the items moved to the container will look for an existing stack and add to it or just add as a new item ( old behaviour )
If add_to_existing_stack == 1 and there is no stack in the container, it will return Error "There is no existing stack", so its up to scripts to check this.
Added: item.HasExistingStack( container ) to allow scripts to check if there is an existing stack in a container or not, returns the ItemRef of the stack if it exists.
08-26-2012 Nando:
Removed: Support for ListenPort in pol.cfg when Multithread is activated. Everyone should
be using uoclients.cfg by now!
08-01-2012 Kevin:
Added: R/W member carrying_capacity_mod for mobiles to modify carrying capacity on a
mobile-per-mobile basis. Is taken into account prior to global ssopt modifier.
08-01-2012 Kevin:
Added: osmod::Debugger() to put current script in debug state to be attached by external
debugging application
Added: stacktrace debug command to print stacktrace. Displays:
<size of stack>
foreach stack element:
<program counter>
<file number>
<line number>
<number of local variables>
foreach local variable:
<variable name> <packed value>
07-12-2012 Tomi:
Added: combat.cfg entry "SendAttackMsg" values 0/1 defaults to 1
setting this to 0 stops the core repsys system sending "is attacking you" messages.
06-03-2012 Tomi:
Added: Readonly members .active_skill and .casting_spell for characters
return values 0/1 if character has an active attached skill or spell script
05-01-2012 Tomi:
Fixed: On equipped items .resist_*_mod members did not update character status window when changed
Patch submitted by Agata
04-15-2012 Tomi:
Added: R/W member editable 0/1 for maps
04-14-2012 Tomi:
Added: Support for new map message packet 0xF5 for clients 7.0.13+
This packet supports the new facetXX.mul files and now can use every different realm for cartography maps and sea charts.
Added: r/w member .facetid for Maps
This has actually nothing to do with realms, the value is the same as in FacetXX.mul file
04-06-2012 Tomi:
Fixed: Roof problem at 4th floor on a custom house.
Patch submitted by Agata
Added: Packet 0xD6 to be ignored for activity ( fixes inactivity logout for ML+ )
Patch submitted by OWHorus
04-05-2012 Kevin:
Added: ecompile.cfg directive "ErrorOnWarning" and ecompile switch -y to treat warnings
on errors during ecompile. Default is 'false'
Fixed: various locations were showing warnings even without the -w switch provided.
03-26-2012 Tomi:
Added: character readonly member .lastcoord returns struct{.lastx, .lasty, .lastz}
03-09-2012 Tomi:
Fixed: uo::SendInstaResDialog() was sending wrong packet
03-07-2012 Tomi:
Added: scripts/misc/dblclickitem.ecl to run a script on every double click on items.
params are (mobile, item)
usefull for removing meditation stuff and such in 1 place instead of every script.
Note: this script will not be attached to the mobile and will run before any usescript.
02-08-2012 Tomi:
Added: character readonly member .tradewindow
return ContainerRef if the char has an active trade and error if no active trade
02-06-2012 MuadDib:
Fixed: Added orphan checks in Character::get_from_ground for both passed serial and items it itr through. Proper logging, returns, and
continue used to keep from attempting movement of orphaned items after log report.
02-05-2012 Tomi:
Changed: AR not required in ArmorDescs for Pol to start anymore, so now if Physical Resist used only no need to define AR 0 in the ArmorDesc.
Changed: AR in ArmorDescs defaults to 0.
02-02-2012 Tomi:
Added: Readonly member .multiid for boats and houses
Fixed: Old boats didnt read the components correctly on server restart
01-21-2012 Tomi:
Removed: Graphic from multis, no graphic entry needed for multis in itemdescs anymore, uoconvert doesnt add a graphic value to multis anymore.
Added: MultiID entry to boats.cfg instead of the ObjType.
Changed: Multi itemdescs now require MultiID to be defined for each multi.
Note: Multi objtypes still need to be > MaxTileID from pol.cfg
Example of a multi entry in itemdesc
Boat 0x10000
Name SmallBoatN
MultiID 0x0
Added: boats.cfg is now shipped with the core too with boats up to date with HSA so just remove what you dont use.
Note: Reconvert of multis.cfg with UOConvert needed
Make sure you have a itemdesc entry for every boat direction
01-21-2012 Turley:
Fixed: RequestInputUC() for eg russian chars
01-16-2012 Turley:
Changed: SpeedUp for uoconvert
01-14-2012 Turley:
Changed: UnicodespeechEvent additional Member "tokens" if speech has (speech.mul) Tokens, gives array of spoken TokenIDs
Added: servspecopt.cfg SeperateSpeechTokens=1/0 default 0 when set RegisterForSpeechEvents() and EnableEvents/DisableEvents behave different
Added: SYSEVENT_TOKEN_SPEECH:=0x4000 and SYSEVENT_TOKEN_GHOST_SPEECH:=0x8000 for uo:EnableEvents/DisableEvents
Note: if SeperateSpeechTokens is set you can control which events you get,
for NPCs you only get speech with tokens if you set SYSEVENT_TOKEN_SPEECH/SYSEVENT_TOKEN_GHOST_SPEECH
for RegisterForSpeechEvents() you get speech with and without Tokens when setting LISTENPT_HEAR_TOKENS and no speech without Tokens
Note: Token and nonToken Eventtype is still the same (SYSEVENT_SPEECH)
01-03-2012 Turley:
Changed: major rewrite of primitive operators +,-,*,/,...
major speedup of +=,-=,...
Added: finally support for +=,-=,*=,/=,%= with objectmembers, like who.resist_fire_mod+=1
Note: if member would return UnInit or Error it does nothing
so its like (only faster and atomic):
var temp:=who.resist_fire_mod;
if (!(TypeOfInt(temp) in {OT_UNINIT,OT_ERROR}))
01-02-2012 Turley:
Added: XMLFile/XMLNode.removexmlnode(int value)
removes node of given index
XMLFile/XMLNode.removexmlnode(XmlNode node)
removes given node
since all NodeObjects get destroyed when the corresponding XmlFileObject is destroyed, use this method to store a node for later use.
12-18-2011 Nando:
Changed: internal handling of intrinsic weapons' unload.
Removed: INTRINSIC property from Weapon template in itemdesc.cfg. An error occurs
if it's set. Some shards might have forgot to set it, which would cause
damage to intrinsic wrestling weapon. This is now handled automatically.
12-17-2011 Nando:
Changed: boats.cfg entries are now "Name Graphic X Y <Z>", where Z is optional and
defaults to zero.
12-17-2011 Tomi:
Added: Support for hued boats, use the normal .color r/w member to change the hue
Patch Submitted by Agata
12-14-2011 Tomi:
Changed: objtype vectors changed to maps to only reserve as much memory as there are
itemdesc entries, not reserving memory for up to 4 billions of objtypes.
Changed: boats.cfg entries changed from "Name Graphic X Y" to "Name Graphic X Y Z"
because some of the new boat components requires different Z levels than the boat
12-13-2011 Austin:
Added: Support for destroy scripts on multis.
12-13-2011 Tomi:
Added: Support for HSA boats ( no smooth move yet, but now all boats are usable )
Changed: boat.cfg to support new entries "Rope", "Wheel", "Hull", "Tiller", "Rudder", "Sails", "Storage", "Weaponslot"
there can be more than 1 of each entry
the old entries "Tillerman", "Hold", "PortGangplankExtended", "PortGangplankRetracted", "StarboarGangplankExtended", "StarboardGangplankRetracted" support just 1 entry each or the boat members get broken
Added: ReadOnly members for boats
.components returns an array of ItemRefs of all the components on the boat
.hull returns an array of ItemRefs of all the hull components on the boat, or empty array if none.
.rope returns an array of ItemRefs of all the rope components on the boat, or empty array if none.
.wheel returns an array of ItemRefs of all the wheel components on the boat, or empty array if none.
.rudder returns an array of ItemRefs of all the rudder components on the boat, or empty array if none.
.tiller returns an array of ItemRefs of all the tiller components on the boat, or empty array if none.
.sails returns an array of ItemRefs of all the sails components on the boat, or empty array if none.
.storage returns an array of ItemRefs of all the storage components on the boat, or empty array if none.
.weaponslot returns an array of ItemRefs of all the weaponslot components on the boat, or empty array if none.
Changed extobj.cfg to support new entries for all the new boat component types and changed the default value of all entries.
extobj.cfg entries with default values:
Note: extobj entries just let you define the objtypes, all of these still have to be defined in itemdescs for boats to work correctly.
extobj.cfg is now shipped with the core.
12-05-2011 Tomi:
Fixed: Door methods .open() and .close() were working opposite what they should.
12-04-2011 Tomi:
Fixed: EA broke the prof.txt with the latest clients adding "Evaluating Intelligence" and "Spirit Speak" with spaces that resulted into skillnumber 0xFF and skillvalue 0
Added: UO::UpdateItem( item );
updates the item to every client in range, good to use for example after returning 1 in some packethook and the item get invisible.
12-01-2011 Nando:
Fixed: Client hanging after having his connection refused on login. I recommend testing
different ways of having a client disconnected, like acct.disable(), .ban() and others.
12-01-2011 MuadDib:
Changed: UoClientGeneral.maxskills changed to unsigned short. Few places in loops with it changed to use same for the loop counter.
11-30-2011 Tomi:
Fixed: Old style spellbooks.
11-29-2011 MuadDib:
Fixed: Fixed a script breaker caused by inserting new TypeOfInt() constants in the middle of the Enum. Moved SQL Types to end of list.
Added: Added SQL entries to the Basic.EM since were missing.
11-29-2011 Tomi:
Added: Opengraphic itemdesc entry for Doors ( optional parameter, no need to define if you dont want to use the built in methods )
Changed: how built in .open() .close() and .toggle() methods works. The now read the graphic what to open to from itemdesc instead of just checking with & 0x1.
this makes those methods works for new doors too and not only T2A era doors.
Changed: basic::CChrz( intarray ) to basic::CChrz( intarray, break_at_first_null := 0 );
if the break_at_first_null parameter is 0 it uses the old behaviour to just skip the nulls and still convert everything
if the break_at_first_null parameter is set to 1 it stops the conversion to string at the first null it finds.
Changed: All Write(ctBeu16( calls for graphics and colors to use WriteFlipped, this seems to have fixed the assertion errors that occured with removal of the color_ext and graphic_ext
11-28-2011 MuadDib:
Removed: UObject->Color_Ext : Removed, and when used is replaced with ctBEu16() calls. This includes read/write of /data files.
Removed: Last of any UOX references for imports. Most was all commented, a few empty refences was also left. All now removed completely.
11-27-2011 MuadDib:
Removed: UObject->Graphic_Ext : Removed, and when used is replaced with ctBEu16() calls. This includes read/write of /data files.
Note: UObject->Serial_Ext will not be removed as previously considered, due to the orphan system making primary use of this.
11-27-2011 Nando:
Fixed: corrected memory leak in cfgfile::GetConfigStringDictionary(...)
11-26-2011 Tomi:
Changed: CascZ( str ) to CascZ( str, nullterm := 0 )
if nullterm 1 it adds the terminating 0 in the end of array.
Note: Recompile of scripts needed.
11-24-2011 Tomi:
Added: Support for Mysticism and BardMasteries spell books
Mysticism Spell ID's 678 -> 693 and BardMasteries spell ID's 701+
11-23-2011 Tomi:
Added: can_insert and on_insert scripts for Tradewindows
11-22-2011 Kevin:
Added: pol/sqlscrobj.cpp pol/sqlscrobj.h
Changed: pol/module/sqlmod.cpp pol/module/sqlmod.h
Add preliminary MySQL database support.
New eScript objects: BSQLConnection, BSQLResultSet, BSQLRow
Added several new sql module functions:
In order to build with MySQL support, define the HAVE_MYSQL preprocessor directive in your build configuration.
You must have the MySQL headers and libraries installed.
Only really tested with dynamically linking mysql libraries on Linux.
Added: pol/network/auxclient.h
Changed: pol/network/auxclient.cpp pol/module/osmod.cpp pol/module/osmod.h clib/socketsvc.cpp clib/socketsvc.h
Moved AuxClient-related classes to its own header file (shared between auxclient.cpp and osmod.cpp)
Implemented os::OpenConnection() to create outgoing TCP/IP connections.
Changed: runecl/runecl.cpp
Added the sql module to runecl to allow quick testing
Changed: pol/uoscrobj.cpp pol/mobile/charactr.cpp pol/mobile/character.h bscript/parser.cpp bscript/objmembers.h
Added read/write property "mountedsteps" for mobiles. Represents number of steps taken while character was mounted.
Changed: bscript/parser.cpp
Declaring an array only using "{}" will show a compiler warning; please explicitly state 'array', 'struct', or 'dictionary'
Changed: pol/pol.cpp
If using Linux, remove on shutdown of pol.
Changed: pol/uoexec.h pol/scrsched.cpp
Added script option "AUXSVC_ASSUME_STRING" which will allow aux service connections to send and receive non-packed strings.
Changed: ecompile/ecompile.cpp
If using Linux, a slash ("/") cannot be used to define ecompile options to allow support for absolute filenames.
Changed: bscript/object.cpp bscript/bobject.h
Implemented array operation MultiSubscript. Will return a splice of an array, eg:
array{"a","b","c","d","e"}[2,4] will return array{"b","c","d"}
11-12-2011 Tomi:
Added: Pol/config/extobj.cfg
Values it accept now and default values are
Note: These values HAVE TO BE > pol.cfg max_tile_id and the same as objtype for them in itemdescs
Added: UOExpansion HSA server sends now 0x387DF
11-11-2011 Tomi:
Changed: Objtypes are now from 2 up to max_objtype from pol.cfg
Note: if objtypes <= pol.cfg max_tile_id and no graphic defined in itemdesc Pol uses objtype as graphic.
Multis and custom items should all be moved to > pol.cfg max_tile_id
Added: support for new 0xA9 packet for clients >=
Changed: startlocs.cfg default values for MapID ( 0 ) and Cliloc ( 1075072 which is the Yew town information )
StartingLocation Yew
City Yew
Description Town Center
Coordinate 535,992,0
MapID 0
Cliloc 1075072
Note: MapID is the same number as in mapX.mul files
Cliloc values are the description of the start locations
Newest clients has max stats during char creation 90
11-06-2011 Tomi:
Added: pol.cfg setting MaxObjtype <default 0x20000>
Note: can be any value between 0x20000 and 0xFFFFFFFF
10-26-2011 Tomi:
Added: support for clients >= ( 2D ) char create packet 0xF8
Enchanced clients still use packet 0x8D
10-15-2011 Austin:
Added: .doubleclickrange for items (read only).
09-03-2011 Turley:
Added: DestroyMulti(house) returns error "House currently being customized."
Added: house.cancelediting(chr, drop_changes) will stop editing mode.
drop_changes 1/0 if true drops all non committed changes
Errors: "House is not custom","House is currently not been edited","Character is not editing this house"
Added: Syshook CloseCustomHouse(mobile, house)
called after client quits editing, or when house.cancelediting() is called
return value is ignored
Added: servspecopt.cfg
"SpeedHack_MountRunDelay" default 80 ms
"SpeedHack_MountWalkDelay" default 180 ms
"SpeedHack_FootRunDelay" default 180 ms
"SpeedHack_FootWalkDelay" default 380 ms
Change them on your own risk
08-08-2011 Austin:
Added: servspecopt.cfg flag "ScriptedMerchantHandlers" default is 0 which results in no change in behavior.
If enabled, the below change will come into effect:
Changed: When a player buys something from a merchant the core will not longer handle taking gold from the player, and moving items to the players pack.
When the event for EVID_MERCHANT_SOLD and EVID_MERCHANT_BOUGHT is sent it will be a struct containing the following struct:
struct.source = player buying
struct.shoppinglist = array( struct.item, struct.amount )
The shopping list items will still be items in the merchant's container.
It is up to the script to split the items from the stacks there and move them to the player's pack.
It is also up to the script to handle gold checks and consumption.
Added: item.SplitStackInto(container, amount)
Will split the item into 2 stacks. Returns a reference to the new stack made from item. Places new stack into the container.
Added: item.SplitStackAt(x, y, z, realm, amount)
Will split the item into 2 stacks. Returns a reference to the new stack made from item. Places new stack at the coordinates.
05-19-2011 Turley:
Added: CustomHousing Support (beta)
officially added uo::SendHousingTool( who, house );
Added: script call of "scripts/misc/customhousecommit.ecl" on commit (noncritical)
params: ( who, house, houseelemarray )
houseelem = struct{graphic,xoffset,yoffset,z}
to get the real coords from an elem add house.x/y
called after client presses the commit button
to accept the changes call new method house.acceptcommit(chr,1) or house.acceptcommit(chr,0) to drop the commit
main purpose should be calculation of cost (with delta support for later changes),
link establishing of houseteleporters (0x181D - 0x1828)
and adding a signhanger/sign if you didnt added it during multifoundation buildup
Doors and Teleporters are added to house components as normal items without any special treatment
so dont forget to add scripts/itemdesc entries
Added: member multi.house_parts
returns array of structs{graphic,xoffset,yoffset,z} or error if not a custom house, or currently been edited
to get the real coords from an elem add house.x/y
Added: method multi.addhousepart(graphic,xoffset,yoffset,z) returns true or error
Added: method multi.erasehousepart(graphic,xoffset,yoffset,z) returns true or error
Added: members multi.house_editing / who.house_editing returns true if house is currently been edited / who is currently editing
Note: house.setcustom(1) is needed before SendHousingTool() works
Note: during editing chr is only allowed to walk inside the house
all components which are not invisible get removed from component list during edit and added to design
(not invisible to give the chance to eg protect a house sign from been removed from the editing char)
any item inside the house will be invisible for the chr
any other mobiles get moved outside the house
Note: param houseelemarray in script call is the current list of houseparts,
multi.house_parts gives you the last stored list
Note: until no house.acceptcommit() is called and start of commitscript no new SendHousingTool() for this house is allowed
05-04-2011 Turley:
Fixed: Questarrow packet
04-30-2011 Turley:
Fixed: enter/leave-events for NPCs (OWHorus)
Fixed: diagonal moves in npc::CanMove() and uo::FindPath() (OWHorus)
04-03-2011 Turley:
Added: uotool param checkmultis
prints infos about used center item
03-12-2011 Turley:
Fixed: npc:SayUC() sends SpeechEvent for do_event==SAY_DOEVENT_ENABLE
Changed: removed warning "No handler for skill.." and changed sysmsg to "That skill cannot be used directly."
since most of the time the behaviour is wanted
Added: basic::TypeOfInt( expr ) + basic.em constants
returns like TypeOf() the type of given parameter, but returns instead of a string an integer (see basic.em constants)
since integer comparison are way faster then string comparison this function should always be used for comparisons
03-10-2011 Turley:
Added: pol.cfg AccountDataSave (default -1)
-1 : old behaviour, saves accounts.txt immediately after an account change
0 : saves only during worldsave (if needed)
>0 : saves every X seconds and during worldsave (if needed)
02-15-2011 Turley:
Changed: "in" keyword now returns the arrayindex or 0 if no match was found
02-05-2011 Turley:
Fixed: no exception will be thrown if region enter/leavescript doesnt exist
Fixed: windows trayicon
10-22-2010 Turley:
Fixed: UOHSA packet changes
Added: mobile.clienttype / client.clienttype HSA flag 0x200
09-06-2010 Turley:
Added: TinyXML based xml reading/writing
Added: file::OpenXMLFile(filename)
opens given filename and returns XMLFile object
fileaccess.cfg is checked
creates an empty XMLFile object
XMLFile.setxmldeclaration(string version, string encoding, string standalone)
sets xmldeclaration eg <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
XMLFile.appendxmlnode(string value, struct{attributes})
appends Node with name value and given attributes (key=name, value=value)
XMLFile.appendxmlcomment(string value)
appends Comment
XMLFile.removexmlnode(string value)
removes first node of given value
XMLFile.savexml(string filename)
saves to filename
fileaccess.cfg is checked
XMLFile.xmltostring([string indent])
returns the xml file as String with given indent string {default "\t"}
XMLFile[string] returns first node of given name
XMLFile[integer] returns node of given index (1-based)
Added: XMLNode object
returns XMLAttributes object
returns type string
(XMLComment, XMLDeclaration, XMLDocument, XMLElement, XMLText, XMLTypeCount, XMLUnknown)
XMLNode.firstxmlchild([string value])
returns first child or first child of given name
XMLNode.nextxmlsibling([string value])
returns next sibling, or next sibling of given name
XMLNode.appendxmlnode(string value, struct{attributes})
appends Node with name value and given attributes (key=name, value=value)
XMLNode.appendxmlcomment(string value)
appends Comment
sets attributes for node
XMLNode.removexmlattribute(string key)
removes attribute of given key
XMLNode.removexmlnode(string value)
removes first node of given value
XMLNode.appendxmltext(string text)
appends text to node
XMLNode[string] returns first node of given name
XMLNode[integer] returns node of given index (1-based)
Added: XMLAttributes object
returns Array of all attribute names
XMLAttributes[string] returns value of given attribute name
Added: foreach loop support:
XMLFile, XMLNode: iterates over all child Nodes
iterator is XMLNode object, "_iterator_iter" is integer index
XMlAttributes: iterates over all attributes
iterator is a struct with key=attributename, value=attributevalue
"_iterator_iter" is integer index
Note: small examples:
one way to read an xml file:
<?xml version="1.0" ?>
<nodetwo i="1" />
var file:=OpenXMLFile("helloworld.xml");
function parsenode(node,i)
foreach blubb in node
syslog(i+cstr(blubb)+" ["+blubb.type+"] ("+cstr(_blubb_iter)+")");
parsenode(blubb,i+" ");
function parseattrib(node,i)
foreach ele in (node.attributes)
syslog(i+cstr(ele)+" ("+_ele_iter+")");
one way how to create such an file:
var file:=CreateXMLFile();
08-20-2010 Turley:
Fixed: util:StrFormatTime() checks if format string is correct and if not returns "Invalid Format String." error
instead of server crash
08-09-2010 Turley:
Fixed: exported function calls a different exported function stops execution (eg repsys functions in same script)
06-22-2010 Turley:
Fixed: uo::RestartScript() wakes up old script so it stops immediately
06-19-2010 Turley:
Fixed: uo::SendDialogGump SENDDIALOGMENU_FORCE_OLD for 2d 7.x clients (UOKR & UOSA clients ignore the flag)
03-27-2010 Turley:
Added: os::Start_Skill_Script( chr, attr_name, script_name := "", param := 0 )
starts for given chr and attr_name definied script (overrideable with param script_name)
param is any UObject given to skill script as second param (first is chr)
performs the same checks like normal skillusage (death,frozen,skilldelay,...)
03-26-2010 Turley:
Changed: uo::DisconnectClient() now accepts client or character object (Tomi)
03-24-2010 Turley:
Added: ClientRef object
pkt.sendpacket() & SendPacket() now accepts client or character
r/o members:
ip, acctname, clientversion, clientinfo, clienttype, clientver_detail, uo_expansion_client
used as prelogin param for packethooks instead of old struct (so you can send packets)
Added: character.client
returns ClientRef object or error
Note: This or next release duplicate members/methods get deleted from chr (except acctname)
03-17-2010 Turley:
Fixed: Trim: left&right doesnt return empty string if complete string has to be trimmed
03-12-2010 Turley:
Fixed: uoconvert - default value of MaxTileID (0x3FFF)
Added: uoconvert param {maxtileid=0x3FFF/0x7FFF} (if uodata= param is given pol.cfg never gets read)
02-20-2010 Turley:
Changed: ListStaticsInBox,ListObjectsInBox,ListMultisInBox now swap x,y,z values if in wrong order
Added: uo::DistanceEuclidean(obj1, obj2) & uo::CoordinateDistanceEuclidean(x1, y1, x2, y2)
returns the Euclidean distance as double ( sqrt(pow(x1-x2,2)+pow(y1-y2,2)) )
02-18-2010 Turley:
Added: (Tomi) Syshook UnHide(mobile)
return values 0 stops the char from unhiding and 1 let the core process it.
Added: (Tomi) "DisableCoreChecks" 0/1 (default 0) to each attribute entry in attribute.cfg
if true the core will not check during skill_use ( from skillwindow ) for active skills,
active spells, frozen, paralyzed or delay
if false core will check everything as it does now.
Changed: Increased Maximum UO SkillID to 57 (default value of uoclient::MaxSkillID)
02-17-2010 Turley:
Fixed: direct usage of struct/dictionary initializer in array/dictionary/struct definition
eg: var dict:=dictionary; dict["blubb"]:=struct{a:=1};
02-16-2010 Turley:
Fixed: StrReplace,SubStrReplace return "Invalid parameter type" instead of crashing if non string object
is given as to_replace, replace_with
Fixed: Several small memoryleaks
02-04-2010 Turley:
Added: polcfg:DiscardOldEvents 1/0 {default 0}
if set instead of discarding new event if queue is full it discards oldest event and adds the new event
Changed: "Event queue is full.." only prints if polcfg.LogLevel >= 11
02-03-2010 Turley:
Added: MethodScript support for mobiles
NPC: npcdesc.cfg MethodScript entry
Character: uoclient.cfg section "General" MethodScript entry
02-01-2010 Turley:
Added: multi create additionally checks for valid realm coord of the corners
Changed: uotool staticdefrag [britannia] (removed "realm=")
Added: uotool formatdesc [desc] little helper prints singular & plural form of given desc
01-22-2010 Turley:
Added: Speedhack Prevention System
Added: ssopt::SpeedhackPrevention 0/1 (default 0)
Added: chr priv "speedhack" disables Speedhack Prevention for chr
01-15-2010 Turley:
Added: (Tomi) chr priv "runwhilestealth" you can run while you are in stealth for as many stealthsteps you have
Added: (Tomi) new npcdesc entry "SaveOnExit" 0/1 ( defaults to 1 )
Note: this also means that SaveOnExit can be definied in the override_properties struct
Changed: vitals::ApplyDamage( mobile, damage, userepsys := DAMAGE_USE_REPSYS, send_damage := DAMAGE_USE_DEFAULT )
vitals::ApplyRawDamage( character, hits, userepsys := DAMAGE_USE_REPSYS, send_damage := DAMAGE_USE_DEFAULT )
const DAMAGE_NO_SHOW := 0;
const DAMAGE_SHOW := 1;
DAMAGE_USE_DEFAULT uses the SendDamagePacket setting from combat.cfg (Tomi)
Added: uo::SendOverallSeason( season_id, playsound := 1 )
Used to send the Season packet 0xBC to all clients logged on.
This function doesnt resend the lightlevel or weather after it sends season, that has to be done by scripts.
chr.setseason( season_id, playsound )
Used to send the Season packet 0xBC to a single character.
This method doesnt resend the lightlevel or weather after it sends season, that has to be done by scripts.
Changed: (Tomi) uo::SpeakPowerWords( who, spellid, font := _DEFAULT_TEXT_FONT, color := _DEFAULT_TEXT_COLOR)
font, color like every speech function
01-14-2010 Turley:
Fixed: (Arkham) ip byteorder for gameserverlist if hostname is given
Changed: (Tomi) gargoyle char create equips 0x1F03 robe
Added: (Tomi) ssopt.NewbieStartingEquipment 1/0 (default 1) to determine if equipped items
created during the character creation should be newbied or not.
Changed: misc/oncreate.src added third param profession
some clients doesnt send skillvalues if profession is given now core doesnt stop char creation,
based on third param you can set the skillvalues in oncreate
Added: more errorchecks to char create, it now checks if hair/beard/face can be equipped (fixes crash with latest OSI
tiledata where facial horn has the same layer as "normal" horn)
Added: Combatcfg:AttackWhileFrozen 1/0 (default 1) if set to false attack checks if chr is frozen or paralyzed
01-12-2010 Turley:
Added: on Profile opening and update request "scripts/misc/charprofile.ecl" is called
params are character, of_who, mode,uctext
if mode==0 (request) uctext is 0
if mode==1 (update) uctext is new unicode array
both modes ignore the return value
- Tomi
Added: uo::SendCharProfile( character, of_who, title, uneditable_text := CHARPROFILE_NO_UNEDITABLE_TEXT, editable_text := CHARPROFILE_NO_EDITABLE_TEXT )
will send the serverside charprofile packet back to client and display it for the player.
uneditable_text & editable_text are unicode arrays
constants are:
- Tomi
Note: Only a script interface for making a fully working CharProfile without packethooks.
Not a fully working charprofile system controlled by the core, ALL text strings still have to be
stored somewhere by scripts.
01-01-2010 Nando:
Added: (Tomi) New itemdesc property "StackLimit", defines the maximum stack
of that item (lower than 60k). If not defined, will default to 60000.
Note: Happy new year. :)
12-21-2009 Turley:
Fixed: call of built-in method with ._methodname if overridden
Added: Multis now support method script
12-18-2009 Turley:
Added: file::CreateDirectory( dirname )
returns 1 on success else error
("Error in dirname descriptor","No parent path traversal please.",
"Directory already exists.","Could not create directory.")
Added: file::ListDirectory( dirname, extension := LISTDIR_ALL_FILES, listdirs := LISTDIR_DONT_LIST_DIRS )
extension param can be extension without "." or file.em constant
file.em constants:
const LISTDIR_LIST_DIRS := 0x1;
const LISTDIR_NO_FILES := "";
const LISTDIR_ALL_FILES := "*";
returns array of strings or error
("Error in dirname descriptor","No parent path traversal please.","Directory not found.")
Note: Both functions doesnt check file access rights
12-17-2009 Turley:
Added: uo::CloseWindow( character, type, object ) - Tomi
possible values for type
const CLOSE_STATUS := 2;
const CLOSE_PROFILE := 8;
const CLOSE_CONTAINER := 12;
Note: if ( type == CLOSE_CONTAINER ) object has to be a ContainerRef, to close the open container gump.
else object has to be a MobRef to close paperdoll, status or profile of the chosen mob.
12-16-2009 Turley:
Added: Encrypted Client support - Tomi
Changed: uoclient.cfg Listener::Encryption and pol.cfg ClientEncryptionVersion now support
ignition = uorice = none, 2.0.0x and due to autocalculation (no patch)
e.g. 7.0.4 for latest client
default for both is "none"
Note: Till OSI changes the encryption type pol now supports every encrypted client without
updating the core (last change was 2.0.4)
12-04-2009 Turley:
Removed: deprecated pol.cfg entries "MasterKey1","MasterKey2","ClientVersion","KeyFile" - Tomi
Added: Gargoyles count as mounted while flying
12-03-2009 Turley:
Added: basic gargoyle flying support (new movemode "F")
Fixed: poison status for newer clients
Note: gargoyles can "fly" on tiles with tiledata flag HOVEROVER (MAPDATA_FLAG_OVERFLIGHT)
rebuilding of all realms is required
currently flymode can only be activated clientside (0xBF:0x32) and if race=RACE_GARGOYLE
12-02-2009 Turley:
Added: 0xF3 packet is send instead of 0x1A for clients >= 7 or UO:SA clients - Tomi
Added: polcfg MaxTileID 0x3FFF / 0x7FFF (default 0x3FFF)
since client item graphic can be definied up to 0x7FFF - Tomi
Added: "SA" for expansion type. This includes sending 0x187DF with packet 0xB9. - Tomi
Added: support of new map TerMur - Tomi
Note: uoconvert param:
realm=termur mapid=5 width=1280 height=4096
uoconvert.cfg new stairs since SA:
0x1de0 0x1de1 0x1de2 0x1de3 0x1de4 0x1de5 0x1de6 0x1de7 0x1de8 0x1de9 0x1dea 0x1deb
Added: Gargoyle support (race = uo:RACE_GARGOYLE)
Note: graphics are:
Added: support of UO:KR/SA char create packet 0x8D
Added: new gargoyle hair & beard 0x4258-0x425F & 0x42AD-0x42B0
Added: UO:KR/SA face support
Added: ssopt.SupportFaces 0/1/2 (default 0)
set it to 1 to support basic faces
set it to 2 to support roleplay faces (sets 0x2000 flag in 0xB9 packet)
Note: Faces are normal items (like hair/beard) with layer 15, objtype 0x3B44-0x3B57
roleplay faces 0x3B4E-0x3B57
11-30-2009 Turley:
Added: polsys::MD5Encrypt(str) returns MD5 hash string.
Fixed: RecalcVitals function for vital changes doesnt check if maximum value changed
11-26-2009 Turley:
Added: Syshook CanDie(mobile)
Called when the mobile is about to die, return 0 to stop death.
11-24-2009 Turley:
Fixed: missing realm check for ListenPoints
11-23-2009 Turley:
Added: uotool param staticdefrag [realm=britannia] to defrag/remove duplicate statics (like fiddler does)
11-20-2009 Turley:
Changed: RecalcVitals( character, calc_attribute := RECALC_INTRINSIC_MOD, calc_vital := RECALC_VITALS )
const RECALC_VITALS := 1;
const RECALC_NO_VITALS := 0;
possible values for calc_attribute:
RECALC_INTRINSIC_MOD - calls for every attribute the GetIntrinsicModFunction (old behaviour)
RECALC_NO_INTRINSIC_MOD - skips the GetIntrinsicModFunction calls
attribute name string - only calls the GetIntrinsicModFunction for given attribute
possible values for calc_vital:
RECALC_VITALS - calls for every vital the RegenRateFunction & MaximumFunction (old behaviour)
RECALC_NO_VITALS - skips the RegenRateFunction & MaximumFunction calls
vital name string - only calls the RegenRateFunction & MaximumFunction for given vital
- based on Tomi
11-19-2009 Turley:
Changed: chr.setlightlevel() now supports endless duration (-1) return is the new gameclock value - Tomi
Added: [paralyzed] & [deafened] @ singleclick packet - Tomi
Added: ServSpecOpt CoreSendsSeason 1/0 (default 1)
Determines if the core should send season packet on char creation/logon/reconnect and realm
change based on the season entry in realm.cfg. - Tomi
Removed: "You cannot insert that item into the container." sysmsg after container CanInsert script
returns 0 - Tomi
Changed: uo::UpdateMobile(who, flags:=UPDATEMOBILE_UPDATE)
if flags is UPDATEMOBILE_UPDATE old behaviour it sends update Mobile packet 0x77,
if set to UPDATEMOBILE_RECREATE it sends recreate packet 0x78 - Tomi
Added: ServSpecOpt CoreHandledTags (default 0xffff)
bitfield to determine which tags are displayed on singleclick, current used bits are:
0x1 [title_guild]
0x2 [frozen]
0x4 [paralyzed]
0x8 [squelched]
0x10 [deafened]
11-17-2009 Turley:
Fixed: possible hang in party system
remove object packet send when container is on a character
several movement code bugs
11-16-2009 Turley:
Added: NPCs receive EnteredArea event on char resurrect
11-11-2009 Turley:
Changed: intern container MaxItems too highest possible value (packet size) its now 3200
Changed: container "can add"-functions to only check weight recursive
10-22-2009 Turley:
Added: Syshook Ouch(mobile,lastx,lasty,lastz)
Called if mobile falls atleast 22 down (fixed Clientside value)
Added: uo::CanWalk(movemode, x1, y1, z1, x2_or_dir, y2 := CANWALK_DIR, realm := _DEFAULT_REALM)
const CANWALK_DIR := -1;
movemode is mobile.movemode string
if y2 is CANWALK_DIR x2 is considered as direction (0-7)
if x2 and y2 is given it calculates the needed direction
returns new z value or error
10-17-2009 Turley:
Added: PrivUpdater for "invul","seeghosts","seehidden" and "seeinvisitems" updates/sends/removes objects
in visual range on enable/disable - Tomi
Changed: .startlog/.stoplog checks now if priv "plogany" is enabled instead of only given - Tomi
Fixed: priv "all" now works as expected if enabled every other priv is also enabled
10-14-2009 MuadDib:
Changed: Methods Char.Squelch() and Char.Deaf() return the gameclock value they are in effect until.
10-14-2009 Turley:
Added: char privilege "canbeheardasghost"
With this privilege everybody can hear you even as a ghost (no 'oO' replacement) - Tomi
Added: pol.cfg TimestampEveryLine 1/0 (default 0) if set every line in pol.log gets timestamp
Added: char.deaf(duration) - duration in seconds. -1=forever, 0=off
Added: char.deafened r/o
10-12-2009 Turley:
Changed: Method/Syshook definitions now supports :pkg: format - Tomi
Added: ServSpecOpt SpeechRange default 12
ServSpecOpt WhisperRange default 2
ServSpecOpt YellRange default 25
- Tomi
10-10-2009 Turley:
Added: new Spellbook methods
book.removespell(id) removes given spellid returns 1/0
book.addspell(id) adds given spellid returns 1/0
10-09-2009 Turley:
Added: new Spellbook methods
book.spells() returns Array of SpellIDs
book.hasspell(id) checks if SpellID is inside the spellbook returns 1/0
10-07-2009 Turley:
Fixed: DestroyItem call inside CanInsert scripts
10-03-2009 MuadDib:
Added: SysHook::CanDecay(item). Return 0, core decay will ignore item and continue on the cycler. If it
returns 1, core decay will handle the item as normal. - Patch submitted by Tomi
Fixed: Useage of plural forms for more than 1 word in the itemdesc desc entry. - Patch by Tomi
09-22-2009 Turley:
Added: Combatcfg:SendDamagePacket 1/0 default 0 if set sends packet 0xB (0xBF sub 0x22 for clients<4.0.7a)
to attacker(ScriptController) and defender on ApplyDamage and ApplyRawDamage
Added: new param to ApplyDamage & ApplyDamage they are now:
ApplyDamage( mobile, damage, userepsys := DAMAGE_USE_REPSYS );
ApplyRawDamage( character, hits, userepsys := DAMAGE_USE_REPSYS );
const DAMAGE_NO_REPSYS := 0;
If userepsys is set to DAMAGE_NO_REPSYS repsys system isnt called (on_attack & on_damage)
09-22-2009 MuadDib:
Changed: NPC/Char ar/ar_mod internal handling rewrote.
Fixed: NPC Elemental Resist/Damage storage issues.
Fixed: Lightlevel resetting in client during Login.
09-20-2009 MuadDib:
Changed: Spell casting no longer unhides. Be sure to update your scripts to unhide.
Changed: SpeakPowerWords() will now check if mob is hidden. If so, it uses Private Say Above.
09-18-2009 MuadDib:
Added: Multi Walk On Script support. Works for player and npc. Just add Walkon itemdesc entry to the house.
Note: This is in early stages. While it is working, not all cases may register and deregister where a mob
gets put onto or removed from a house. If you find cases that do, report to bugtracker.
Removed: Storing scrolls inside spellbooks. Destroyed after insert is complete.
Changed: Pre-AOS Clients still get the same packet they always did when opening a spellbook, built entirely
off the bitflag system for newer spellbooks. So no more keeping scrolls inside of books. :D
Note: As spellbooks are loaded for the first time with newer cores and as added to books, scrolls are
marked SaveOnExit 0. Newly inserted scrolls from then on, are destroyed during insertion after spell
contents are updated on the book.
09-16-2009 Turley:
Removed: char.isUOKR
Added: char.ClientType r/o bitfield
Note: current Flags are:
CLIENTTYPE_4000 = 0x1, // 4.0.0a (new spellbookcontent packet 0xbf:0x1b)
CLIENTTYPE_4070 = 0x2, // 4.0.7a (new damage packet 0x0b instead of 0xbf:0x22)
CLIENTTYPE_5000 = 0x4, // 5.0.0a (compressed gumps)
CLIENTTYPE_5020 = 0x8, // 5.0.2a (Buff/Debuff 0xdf)
CLIENTTYPE_6017 = 0x10, // (Grid locs)
CLIENTTYPE_60142 = 0x20, // (feature enable 0xb9 size change)
CLIENTTYPE_7000 = 0x80, // (Gargoyle race)
Note: Pol will be now compiled with flag /LARGEADDRESSAWARE (win only flag) pol should now be able to consume more memory
09-14-2009 MuadDib:
Removed: All import abilities built in to core for UOX data files. O_O
Note: The file "import.txt" will be loaded each time POL loads, when found in the world data directory. This file's
format is the same as, for example, the ITEMS.TXT file POL saves. You can use this for example, to store all your
doors, decorations, etc, to ensure they are reloaded after a wipe, or loaded every time POL starts. These items
are added to the real world, and saved to items.txt. However, if on load the same objtype is found at the same
x y z as the item in IMPORT.TXT, it destroys that item, and loads the import one.
09-10-2009 Turley:
Added: CompressedGump support packet 0xdd
Added: flag param to SendDialogGump() SENDDIALOGMENU_FORCE_OLD/0 default 0
Note: SendDialogGump sends compressed gump if (client.isUOKR || (!SENDDIALOGMENU_FORCE_OLD && clientversion >=5.0.0a)) else old uncompressed
Note: Patch submitted by Grin
09-09-2009 Turley:
Added: ServSpecOpt CarryingCapacityMod (double default 1.0) as * modifier for mobile max_weight
Note: Formula is (40 + strength * 7 / 2) * ssopt.CarryingCapacityMod
Note: Since ML max weight is send for statusgump
Note: Patch submitted by Tomi
09-05-2009 MuadDib:
Added: POL Linux builds will now create a PID file when loading. Patch submitted by Crazyman
09-05-2009 Turley:
Added: struct .? and .- as shortcut for .exists() and .erase()
09-03-2009 MuadDib:
Changed: CoreHitSounds, ScriptedAttackChecks, ResetSwingOnTurn, SendSwingPacket all moved from SSOPT to Combat CFG.
08-19-2009 Turley:
Added: r/o member character.uo_expansion_client client sends this flag at packet 0x5D charselect and 0x00 createchar
Note: values are:
FLAG_T2A = 0x00,
FLAG_LBR = 0x04,
FLAG_AOS = 0x08,
FLAG_SE = 0x10,
FLAG_SA = 0x20,
FLAG_UO3D = 0x40, // ?
FLAG_3DCLIENT = 0x100 // 3d Client
08-14-2009 Turley:
Changed: Stopped spam of unknown packet for 0xBF.5 & 0xBF.C
08-09-2009 MuadDib:
Fixed: Better handling of sending poison updated to UO:KR Clients.
Changed: UpdateCharacterWeight() now sends correct packets instead of calling on RefreshAR() to
notify client of new weight. Reduces overhead.
08-07-2009 MuadDib:
Fixed: New system in core for handling layers on items and corpses. On mobile death, only items equipped
will be given the Layer prop in the corpse.
Changed: New system for corpses also is affected by insert/remove of items to the corpse by script and
drop into by player. Dropping new items into a corpse will cause it to set the layer accordingly
long as nothing else is already using that layer on the corpse.
Changed: Very small optimization to equip item code for handling the setting of layer.
08-06-2009 MuadDib:
Changed: PasswordOnlyHash removed from core. Now only ClearText and Hashed Passwords will be used.
Default is now PasswordHash instead of ClearText.
Note: Using ClearText is not recommended as it leaves all your account's passwords wide open if
the accounts.txt file is comprimised. You have been warned.
Removed: Account.PasswordHash - This was for the PasswordOnlyHash.
Added: Item.getgottenby Member. Returns CharRef of Player holding item, Error if not being held.
08-06-2009 Turley:
Added: new Methods
sets aggressor/lawfullydamaged for repsys.cfg:AggressorFlagTimeout seconds for given chr
clears aggressor/lawfullydamaged entry for given chr
08-04-2009 MuadDib:
Changed: RecalcVitals() and other internal parts of core that share recalc_vital_stuff() will now check to see if
each vital has changed, before resending it to client. Reduces overhead.
08-03-2009 MuadDib:
Removed: uopacket.cfg::is6017 has been removed.
Added: uopacket.cfg::Version (1 or 2) Default 1
uopacket.cfg::Client (client version string) Default
Read packethooks.txt for details.
07-31-2009 Turley:
Added: ServSpecOpts::ResetSwingOnTurn=true/false default false
Should SwingTimer be reset with projectile weapon on facing change
Added: ServSpecOpts::SendSwingPacket=true/false default true
Should packet 0x2F be send on swing.
Client sends automatically move packet to face the opponent
07-25-2009 MuadDib:
Fixed: Bug blocking equipping when intrinsic weapon was marked as two handed.
07-17-2009 Turley:
Added: "ShadowRealms"
returns 1 or error ("BaseRealm not found.","BaseRealm is a ShadowRealm.","Realmname already defined.")
Creates a new Realm based on an other realm, uses same map and regions
returns 1 or error ("Realm not found.","Realm is not a ShadowRealm.","Mobiles in Realm.","Items in Realm.")
Deletes a ShadowRealm, only if the realm is "clean"
Note: ShadowRealms get saved/loaded in pol.txt
Note: if ServerSpecOpt is set AddRealm/startup creates a Decaythread
Changed: On realm change client gets RemovePacket for all objects inrange
07-16-2009 MuadDib:
Added: Removal of Grid Index to items when Container::remove is called within the core.
Added: ItemDesc::Container::MaxSlots = 1-255, default ServSpecOpts::MaxSlots
Added: ServSpecOpts::UseContainerSlots=true/false, default false.
Added: UseContainerSlots check to can add bulk code to ensure not going over max slot capacity of 255 and a container's max slot capacity.
Changed: DropItem packets now redone for Slot support. Better handling internally, and core will move an item to next available slot
if one sent is not available. Before code is used, it checks if UseContainerSlots is true.
Note*: UseContainerSlots is not yet fully implemented. Will cause core to ignore all grid setting for core moved items.
The purpose of this, is since Legacy 2D clients ignore this setting anyway, you can use this to ignore Max Slots
and allow core to move items into a container regardless of MaxSlots settings (which is kinda like a secondary Max Items).
With this enabled, it will enfore MaxSlots when core and player moves items to containers. If Max Items is not reached,
it will check MaxSlots. If MaxSlots is not reached, allows moving the item into container.
This is being added to allow to turn grid support on and off based on the client versions (and types) that you will be
supporting on your shard.
07-04-2009 Turley:
Added: new Object Class BinaryFile
File::OpenBinaryFile( filename, mode := OPENMODE_IN, endian := LITTLE_ENDIAN );
like the other file functions it checks file access rights (fileaccess.cfg) (Read and/or Write)
mode constants:
const OPENMODE_IN := 0x01; // (input) Allow input operations on the stream
const OPENMODE_OUT := 0x02; // (output) Allow output operations on the stream
const OPENMODE_ATE := 0x04; // (at end) Set the stream's position indicator to the end of the stream on opening
const OPENMODE_APP := 0x08; // (append) Set the stream's position indicator to the end of the stream before each output operation
const OPENMODE_TRUNC := 0x10; // (truncate) Any current content is discarded, assuming a length of zero on opening
endian constants:
const LITTLE_ENDIAN := 0x00;
const BIG_ENDIAN := 0x01;
returns BinaryFile Object or error
Note: implemented BinaryFile comparisons are
true/false (!) checks if filestream is open
== checks if filename is the same
Added: BinaryFile methods:
.close() closes the underlying stream returns 1
.size() returns the filesize or error
.seek(int offset, int seekdir) sets position returns 1/0 or error
seekdir constants:
const SEEKDIR_BEG := 0x00; // beginning of sequence
const SEEKDIR_CUR := 0x01; // current position within sequence
const SEEKDIR_END := 0x02; // end of sequence
.tell() gets current position returns int
.peek() Reads and returns the next byte without extracting it (-1 if eof is reached)
.flush() writes all unwritten chars from buffer to file
.getInt32() gets unsigned 32-bit (4 byte) 1 or error
.getInt16() gets unsigned 16-bit (2 byte) 1 or error
.getInt8() gets unsigned 8-bit (1 byte) 1 or error
.getSInt32() gets signed 32-bit (4 byte) 1 or error
.getSInt16() gets signed 16-bit (2 byte) 1 or error
.getSInt8() gets signed 8-bit (1 byte) 1 or error
.getString(length) gets a string (1-byte characters) string or error
.setInt32() sets unsigned 32-bit (4 byte) 1 or error
.setInt16() sets unsigned 16-bit (2 byte) 1 or error
.setInt8() sets unsigned 8-bit (1 byte) 1 or error
.setSInt32() sets signed 32-bit (4 byte) 1 or error
.setSInt16() sets signed 16-bit (2 byte) 1 or error
.setSInt8() sets signed 8-bit (1 byte) 1 or error
.setString(string string, int nullterminate) sets a string
set nullterminate to 1 to append a 0 terminator 1 or error
07-01-2009 Turley:
Changed: UoConvert now also saves the color of static tiles
Added: ListStatics* return struct member "hue"
Note: Rebuild of all realms is required
06-29-2009 MuadDib:
Added: Additional check in internal grid checks on containers, to speed up handling for full containers.
Added: ServSpecOpt.cfg::MaxContainerSlots=unsigned integer.
This will allow setting the internal overall allowed item count for containers. This is introduced for future KR support.
KR client is only 125, but we are making this here so custom clients later can support more slots.
If you have containers with max item count over 125 and use ONLY 2D, and not KR, set this to your highest amount used!
06-27-2009 Turley:
Fixed: Item creation with ItemDescriptor can now override .Desc
06-25-2009 Turley:
Added: new r/o Members (Array{Struct{"serial","ref","seconds"}})
as interface for core repsyssystem
06-20-2009 Turley:
Added: new r/w Members (Double) default 1.0
used as multiplier see movecost.cfg doc for exact calculation
06-17-2009 Turley:
Added: Method Array.randomentry() shortcut for var entry:=array[RandomInt(array.size())+1];
Added: uo::GetRegionLightLevelAtLocation(x,y,realm) returns the current region lightlevel
05-02-2009 Turley:
Added: new TargetCoordinates return member "multi" with multiref if coords are inside a multi
04-17-2009 Turley:
Changed: SpeechMul SysHook has now an additional parameter with the complete message as string
Added: party hooks:
Note: OnLeaveParty fromwho==who if who removes himself
Added: party General options:
RemoveMemberOnLogoff 1/0 (default 0)
RejoinPartyOnLogon 1/0 (default 0)
Note: RejoinPartyOnLogon is only used if RemoveMemberOnLogoff is true, if partyleader logoffs
the next member becomes the leader
-- POL098.2 --
08-21-2009 Turley:
Fixed: Regions where limited to 128 due to intern (char)id, changed to ushort
07-31-2009 MuadDib:
Fixed: Cleanup crash in shutdown involving characters and combat. Now all clients and characters are disconnected by the
core before any cleanup is intiated. This will begin the cleanup for client and character alike.
07-20-2009 MuadDib:
Fixed: Item::Facing updates were no longer updating surrounding clients.
Fixed: Bug with stackables where graphic and crops may be different, still allowing to combine stack (of same objtype)
07-15-2009 Turley:
Added: Support for client and latest UOKR (this change breaks every older UOKR)
packet 0xB9 has now a length of 5
06-28-2009 MuadDib:
Fixed: Graphic/Layer bug when changing graphic and item is equipped. Now core will block this, returning a Error Struct to the script when attempting
to change the graphic of an item with layer set.
06-27-2009 MuadDib:
Fixed: Layer bug with updating/sending equipped items
-- POL098.1 --
06-20-2009 MuadDib:
Fixed: Reset now occurs for tile_layer internal property when graphic is changed on item class.
Fixed: SetOpponent() for npcs will now once again correctly set the warmode.
05-20-2009 Turley:
Fixed: TypeOf() return of Error
05-14-2009 Turley:
Fixed: some Memoryleaks
04-29-2009 Turley:
Fixed: Exception on mobile.kill() if death/chrdeath.ecl does not exist
04-28-2009 MuadDib:
Fixed: Removal of items from containers not sending destroy object to nearby clients when object removed.
This affects containers when was owned by a character.
04-21-2009 MuadDib:
Fixed: Crash at shutdown during character cleanup involving players that was in combat.
04-20-2009 Turley:
Added: Comparison check == for Boat,Multi,GuildRef
04-19-2009 MuadDib:
Fixed: Endian format for SendPartyMsg().
-- POL098 --
04-06-2009 MuadDib:
Changed: When adding ally/enemy guilds, removing ally/enemy guilds, adding/removing members, core now
updates online members and those around them correctly.
Added: If LogLevel in pol.cfg is higher than 1, new report added to console. If an account has AOS Expansion
and uses a Spellbook, console now reports this if UOFeatureEnable does not contain 0x20 bitflag for
new spellbook system in client. This is due to client issues with books using old methods when still
recieving the AOS flag for an account.
04-05-2009 MuadDib:
Changed: Keys/Seeds for packets 0x8C sent by LoginServer. to, I don't recommend using at all.
0XFEFEFEFD = 6050+ 2D Client
0xFEFEFEFE = Normal 2D client (pre- client)
Note: Change to keys is for passing these details from Loginserver to Gameserver during loginprocess.
Clients disconnect from LoginServer and Connect to Gameserver. This is the easiest method for
identifying the client type connecting to your game server since versions are handled to decide
this on the loginserver connection.
04-04-2009 Nando:
Fixed: Removing an offline member from party was causing POL to crash.
04-04-2009 MuadDib:
Fixed: Issue with resistances and damages from npcdesc.cfg.
Note: NPC's eScript changing/quipping with Resistances/Damages will be rewritten in 099. We are
putting this into 099 due to a Class Rewrite to NPCs that will resolve this issue and allow
better expansions of the NPC class in the core.
04-02-2009 MuadDib:
Fixed: Crash in cleanup of character objects during Shutdown and deletion.
Fixed: Crash involving sending warmode information during disconnect/shutdown.
04-01-2009 Nando:
Fixed: When creating a new char, attributes' caps weren't being set to the default value and
were just set to a random value.
03-30-2009 Nando:
Fixed: Sometimes when casting a spell, a race-condition would make POL end with a
passert( !start_attached || (script_ex == NULL) ) error in chrituse.cpp.
Fixed: Bug in Packet::GetString(offset, len) where it would return a string of 'len' ascii chars,
regardless of having a null-byte in there. Will now limit to len or the first null-byte
found, whichever comes first.
03-30-2009 MuadDib
Fixed: Equipment.quality will now convert plain integers to Double/Float for it when using
item.quality:=2; instead of item.quality:=2.0;
03-28-2009 Turley:
Fixed: Resend party list if remove hooks dont allow it
03-27-2009 Turley:
Fixed: Crash in party speechhandler
03-27-2009 MuadDib:
Fixed: Crash in Basic::Trim(). Now checks explicitly for String as param 1. Errors out if not.
Fixed: Event LeftArea and EnteredArea both being able to be triggered when 1 is actually disabled.
03-25-2009 MuadDib:
Changed: StrReplace() and SubStrReplace() will now accept Dict/Struct/Array/Error as param 1 and converts
them to string format (like when using print() or syslog()) before comparing/converting.
03-24-2009 MuadDib:
Fixed: Crash with StrReplace() allowing to go past end of a string.
Changed: StrReplace() will now allow the replace_with string to be empty, to remove the to_replace
param from the string completely.
Fixed: Crash in onRemove system for removing objects on npc/offline mobiles.
03-22-2009 Nando:
Added: New servspectopt::SendStatLocks (default false) to send the stat locks message.
Beware that this message will only be sent to clients which have major version > 3
(to avoid breaking older ones).
Changed: Canceling of trade window will no longer trigger refreshing of AR/Resistances/Damages.
It will only send the status bar packet to the client for weight updates.
Changed: Updates so refreshing of AR/Resistances/Damages is not called when dropping items unless
to equip them etc as should be.
03-22-2009 MuadDib:
Fixed: Bug with items that use the Resource entry in ItemDesc.Cfg causing crashes on shutdown.
03-20-2009 MuadDib:
Added: Storage system will now ignore all root containers with SaveOnExit set to 0.
03-19-2009 Nando:
Added: UO::PlayMusic( chr, music_id := 0 ), plays the music with music_id
on client. You can find the music id's this uses at your UO FOLDER/Music/Digital/Config.txt
03-19-2009 Turley:
Added: on Chatbutton pressing "scripts/misc/chatbutton.ecl" is called
Note: only simple implementation no Chatsystem!
03-18-2009 MuadDib:
Added: Basic::Compare(str1, str2, pos1_start:=0, pos1_end:=0, pos2_start:=0, pos2_end:=0);
Can be used in 3 overloaded ways. Returns 1 on compare success.
Compare(string1, string2)
Compare(string1, string2, string1_index, string1_length)
Compare(string1, string2, string1_index, string1_length, string2_index, string2_length)
Index is a starting position to begin the compare in the string, and length is the length to
compare from the index. When using the 3rd method, you can compare substrings in both strings
instead of just the substring of string1 to entire string2.
Fixed: Bug with Player Color and their magic underwear in the Race Changer packet handling.
03-18-2009 Nando:
Added: New ssopt option: CoreSendsCaps 0/1 (default 0), makes POL send
attribute cap information in the Send Skills (0x3A) packet.
03-17-2009 Nando:
Added: New ssopt option: DefaultAttributeCap (default 1000), defines
which value POL should use as cap for attributes.
Added: New attributes.cfg option: DefaultCap (default DefaultAttributeCap),
to set the default for each attribute.
Added: GetAttributeCap(who, attr), SetAttributeCap(who, attr, capvalue) and
GetAttributeDefaultCap(attr). The names should explain it all.
Note: Caps are defined in tenths (100.0 -> 1000, 55.2 -> 552), same as
base values.
03-17-2009 MuadDib:
Added: Concealed Updater now also run when changing command levels.
Added: Basic::Trim(string, type, set). Trims whitespaces from strings
String = String to trim from.
Type = TRIM_LEFT, TRIM_RIGHT, TRIM_BOTH. Directions to trim the whitespace from. Default is BOTH.
Set = Character set to trim as whitespace. Default is " ".
Added: Basic::StrReplace(string, to_replace, replace_with). Replace all instances of to_replace in the string
with replace_with.
Added: Basic::SubStrReplace(string, replace_with, start, length:=0). Replace portion of string using replace_with,
beginning at start for length. If length passed is 0 or lower, it replaces from start to end of string.
Error Returns: "Index must not be negative", "Index out of range", "Length out of range", "Length must not
be negative"
03-12-2009 Turley:
Added: repsys.cfg General section "PartyHelpFullCountsAsCriminal 1/0" default 0 if 0 OnHelp does not set
mobile to criminal if helped char is criminal/murderer when they are in the same party
03-11-2009 Turley:
Added: new systemhook script 'OnCast'
function OnCast(who, spellid)
is called if who casts a spell (including macros) before all checks
Return: 0 if you wish POL to perform the checks and casting, 1 if you want to handle it fully scriptside
Note: The two partystatusgump buttons send spellid 11(green) and 29(red) with clientside reserved next target answer
Added: on Paperdoll Guildbutton pressing "scripts/misc/guildbutton.ecl" is called
Added: on Paperdoll Questbutton pressing "scripts/misc/questbutton.ecl" is called
Added: on Paperdoll Virtuebutton (pentagram doubleclick) pressing "scripts/misc/virtuebutton.ecl" is called
Removed: "Client tried to drop item to X,Y,Z but server is putting it at Z=" logmsg
03-09-2009 MuadDib:
Changed: Console will no longer spam about invalid speech color. Instead it adjusts the
color back to the default 1001 color and goes on.
03-08-2009 Turley:
Added: Partysystem
new savefile parties.txt
new em Module party.em
new cfg file config/party.cfg
new Object Class Party
savefile parties:
saves Leader,Members and Cprops
new Char members: r/o returns PartyRef or Error
who.candidate_of_party r/o returns PartyRef or Error
who.partycanloot 1/0 r/o
PartyRef members:
party.members r/o returns Array of OfflineCharRefs
party.candidates r/o returns Array of OfflineCharRefs
party.leader r/o returns OfflineCharRef
PartyRef methods:
party.setleader(CharRef) sets new Leader returns 1/Error
party.addmember(CharRef) adds new Member returns 1/Error
party.addcandidate(CharRef) adds new Candidate returns 1/Error
party.removemember(CharRef) removes Member returns 1/Error
party.removecandidate(CharRef) removes Candidate returns 1/Error
party.setprop/getprop/eraseprop/propnames for cprops
CreateParty( leader, firstmember ); Creates a Party returns 1 or Error
DisbandParty( partyref ); Disbands a Party returns 1 or Error
SendPartyMsg( party, character, uctext ); Sends PartyMsg with Sender=character returns 1/Error
SendPrivatePartyMsg( party, character, tocharacter, uctext ); Sends PrivateMsg with Sender=character
returns 1/Error
//How many chars are allowed in a Party (normal clients only have 10 slots)
[MaxPartyMembers int (default 10)]
//Newer Clients (>=3.0.6e) does not automatically change "/# " to private msg (they use "/t #")
//set to true any public msg will be checked for "# " (0-9 0=slot 10)
[TreatNoAsPrivate (1/0) (default 0)]
//How long is an invite valid befor automatic decline
//set to 0 disables the timeout
[DeclineTimeout int seconds (default 10)]
//Prefix for a private Msg (e.g. P:)
[PrivateMsgPrefix string (default "")]
// CanAddToParty(leader,member) return check true/false
// called when a leader invites someone
// CanRemoveMember(leader,member) return check true/false
// called when leader wants to remove member
// CanLeaveParty (member) return check true/false
// called when member wants to leafe the party
// OnPublicChat(member,uctext) return check none
// called when a member sends a PartyMsg e.g. for logging
// OnPrivateChat(member,tomember,uctext) return check none
// called when a member sends a PrivateMsg e.g. for logging
// OnDisband(partyref) return check none
// called when a Party is about to be disbanded
// ChangePublicChat(member,uctext) return new uctext/true/false
// called when a member sends a PartyMsg return value is the new uctextarray,
// or true for no change, or false to block the msg
// ChangePrivateChat(member,tomember,uctext) return new uctext/true/false
// called when a member sends a PrivateMsg return value is the new uctextarray,
// or true for no change, or false to block the msg
Note: implemented PartyRef comparisons are ! and ==
Note: Candidates are not saved
A party with (candidates+members)<=1 gets disbanded
Note: All msgs send are cliloc's used cliloc numbers are:
1005437, 1005439, 1005440, 1005441, 1005442, 1005444, 1005445, 1005446, 1005447, 1005448,
1005449, 1005450, 1005451, 1005452, 1005453, 1005455, 1008087, 1008089, 1008090, 1008091,
1008092, 1008094, 1008095, 3000211, 3000222, 3000223
03-08-2009 MuadDib:
Fixed: Spacing for all titles and name for mobs in Tooltips and Paperdoll. Also added the
mob.title_guild in the Tooltips string for names of mobiles.
03-08-2009 Nando:
Added: New privilege "moveanydist", will allow moving items regardless of distance (by now,
the only limit to this priv is the client.)
03-07-2009 MuadDib:
Changed: Setting of title_prefix, title_suffix, title_race, title_guild will no trigger an
obj cache to be sent to tooltip enabled clients for updates of tooltips client side.
This does not affect paperdolls. Paperdolls not being updated until Double Clicking
again is an issue client-side.
Added: AOS Extended Statbar members such as followers, followers_max, tithing, and luck will
now cuase the Update packet to be sent to AOS enabled accounts when changed.
Changed: Handling of packet 0x07 (Pick Up Item Request). On success, core now checks for if the
item was equipped on yourself, and refreshes ar and sends stats. If was in a container
not on your character, only refreshes stats. If item was on the ground, only stats. If
on a mobile other than yourself, only stats. If item was inside your own worn items,
it does nothing (since not worn, and no additional weight to send to client). The big
Difference here, was client use to ALWAYS refresh the ar of character and statmsg. This
will eliminate at the least, over 50 loops per pickup when it's not needed, and packets
not being sent, when not needed.
03-06-2009 MuadDib:
Added: Elemental Damage properties added for items and mobiles. These follow the same
rules as all the AOS Resistances. Same details for itemdesc, GetItemDescriptor(),
Mobile.damage_fire, damage_cold, damage_energy, damage_poison, damage_physical R/O
Mobile.damage_fire_mod, etc. R/W
Item.damage_fire, etc. R/O
Item.damage_fire_mod, etc R/W
Itemdesc.cfg: FireDamage, ColdDamage, EnergyDamage, PoisonDamage, PhysicalDamage
ItemDesc entries accept Dice Strings just like resistances.
NPCDesc.Cfg: FireDamage, etc just like ItemDesc.cfg
03-05-2009 Nando:
Changed: Core will no longer spam "out-of-sequence gump command" when closing.
Changed: CloseGump(who, pid, response := 0) will now accept any object to be returned,
and will send '0' as the buttonid in close gump packet.
Added: Statlock change (Extended Stats, 0xBF sub 0x1A) will be handled if
CoreHandledLocks is enabled. It will now send statlock (Extended Stats,
0xBF sub 0x19) on every status update.
03-04-2009 Nando:
Added: UO::CloseGump(who, pid, response := 0), closes gump by sending 0xBF's CLOSE_GUMP,
and returns 'response' for the gump script. 'response' is a LONG. 'pid' is from
the script that issued the SendGumpDialog() command.
03-03-2009 MuadDib:
Changed: Item and Character members for AOS Resistances now report the total of resist and
03-02-2009 MuadDib:
Fixed: eScript's Internal "move" command causing items to get misplaced in wrong realms
on move failed MoveItem* Commands in eScript.
03-02-2009 Nando:
Fixed: When running out of memory, the creation of new threads is not possible. Core
will now check if the thread was properly created to (probably) solve the symptom
of zombie threads. The problem of not having enought memory to create thread is
not solved, though. There will still be logs of this error.
03-01-2009 MuadDib:
Fixed: Issue with Mount Objtype 0xF021 and EquipItem() ignoring setting it's Layer.
Added: Complete packethook support with Clients and higher. This is handled via
the earlier added Is6017 uopacket.cfg entry. This will allow you to specify a
packethook to be triggered ONLY if the client involved is and higher.
It does not have to be a different packet size for this to work, only the client.
Added: "KR" for expansion type. This includes sending the 0x86DB with packet 0xB9.
02-28-2009 MuadDib:
Changed: UO::DestroyItem(). Now sends a Destroy Item packet to the script controller for
the item destroyed. This is in addition to sending in range of the item. Reason
for this, is for Storage Containers across realms.
Added: New flag for uopacket.cfg of "Is6017 0/1". This is show the defined packet entry
is explicity for a and higher packet type. Will let you define packethooks
for the same packet, that is different based on client version.
Added: Character.followers = int. This is for storage for the Followers byte in statmsg
Added: ML Expansion statmsg packet support. If Expansion for account is ML or higher,
and client version is 5.0 or higher (or is KR), sends ML Info Flag and data.
Added: Special Verbose messages (with POL.CFG::Verbose=1) for crypt seed packets
and the UOKR 0xFF Seed Packet.
02-27-2009 MuadDib:
Fixed: Clothing on corpses. COMPLETELY! This age old bug is now 100% fixed. If it was
equipped at time of death, it will be on the corpse until the on remove script
check for the corpse is triggered for taking the item out (on remove, not can)
Added: Base and up Incoming Packet Handling ability to core.
Changed: Packets 0x3C updated for supporting clients and newer.
Changed: Grid index support (KR and for Drop item Packet and sending. Grid
Index is still not set on Container Add by scripts and core yet (since this is
only truly needed for KR support for slotted bags).
Changed: Updated Secure Trade Drop Item packet to support and newer clients.
Changed: Updated sending of packet 0x25 to support and newer clients.
02-26-2009 Nando:
Fixed: Bug where a player / npc moving in a diagonal direction 'd' wasn't blocked by
items on direction 'd+1' and 'd-1'. (For example, moving in direction NE while
having items blocking on N and E was allowed by core, while disallowed by client)
02-26-2009 Turley:
Added: uo::CheckLosBetween( x1, y1, z1, x2, y2, z2, realm := _DEFAULT_REALM )
Same like uo::CheckLosAt and uo::CheckLineOfSight
02-25-2009 Nando:
Added: New attributes.em functions: SetAttributeLock(who, attrname, lockstate) and
GetAttributeLock(who, attrname). With new constants: ATTRIBUTE_LOCK_UP,
02-25-2009 MuadDib:
Added: Support for UOKR Poisoned Status bar updates. Core will now update UOKR clients correctly
when poisoned set to true or false for a character.
02-24-2009 MuadDib:
Changed: SendPacket() now returns an error if packet string passed is not valid size (Divisible
by 2).
Added: SendPacket() buffer size now allows max packet size. No more need to worry bout length.
Fixed: Issue where equipped spellbooks would not open to the correct bookmarked page when opened.
Added: Support of 0x25 Packet (Send item in container) with Client version >=
Added: Support for Grid Index with Trade Container Packet sending.
02-22-2009 MuadDib:
Changed: Updating of worn items will be handled by sending Delete Item packet to those
in range, then sending the worn item packets. This is to address an issue with
client not updating worn items on other players when graphics.color.etc are changed.
Removed: Saving of base AOS Resistances to pcs.txt. This is not truly needed, as core will handle
updating these live based on the armor etc. resist mods only thing needing saved now at
this point. Just like AR. Same with Items.
02-22-2009 Nando:
Added: New servspecopt.cfg option: CoreHandledLocks, default to false. If enabled, core will
handle the change of skill locks and stat locks from the client (setting the attribute
Added: Every Attribute now have a lock state. Later, this lock state will be read/changed via
eScripts methods.
02-21-2009 MuadDib:
Added: Ability to use Dice strings for AOS Resistances in itemdesc.cfg entries.
Fixed: Bug allowing two players to open trade window, walk away, and continue trading. If players
get more than 4 tiles away, it will now cancel the trade upon walking to 5th tile away.
Added: ServSpecOpt::AllowMovingTrade=0/1(default 0). 0 = Disable moving more than 4 tiles with
an open trade window. If you move more than 4 tiles from who trading with, cancels trade.
Removed: UOClient::Listener::Statcap
Added: Character.statcap = Replaces the Listener::Statcap. Default 225 r/w
Character.skillcap = This is for storage, of overall skillcap. Default 700 r/w
Character.followers_max = Max followers for statmsg packet. Default 0 r/w
Character.luck = Luck for statmsg packet. Default 0 r/w
Character.tithing = Tithing for statmsg packet. Default 0 r/w
Added: Min/Max Damage added as per OSI Standards to Statmsg packet. This is done by the min and
max of the dice roll for a weapon before any mods etc.
Fixed: Now cannot request stats for chars not visible to you, concealed from you, and over 20
tiles away.
02-20-2009 MuadDib:
Added: Priv "plogany". Used with new startlog and stoplog commands to activate target cursor.
Changed: Built-in textcommand .startlog and .stoplog for packet logging. If character has the
plogany priv they get a target cursor to select who to set packet logging for.
02-18-2009 MuadDib:
Fixed: Fixed Physical Resist not showing correctly with AOS Resistances in Statbar in place of AR.
02-18-2009 Turley:
Fixed: ..Boat Fix Drunken Coder syndrome?
02-17-2009 MuadDib:
Fixed: Instances where core uses UO::ClearGottenItem() type code caused ghosted item on client
cursor. Will require more feedback from users after publish for remaining instances
where this still occurs (outside of ClearGottenItem()).
02-16-2009 Turley:
Fixed: Hold again part of boat multi
02-07-2009 Turley:
Removed: SystemFindObjectBySerial() flag SYSFIND_SEARCH_STORAGE_AREAS (was obsolete since years)
02-05-2009 MuadDib:
Added: UOClient::Listener::AOSResistances 0/1. This flag aids in deciding which version
of Armor to send in the StatMsg packets. With this enabled, a client who uses
an account with AOS Expansion enabled will see their Physical Resist instead
of AR member.
02-03-2009 MuadDib:
Added: Character.resist_fire_mod/resist_cold_mod/resist_energy_mod/resist_poison_mod
/resist_physical_mod as R/W.
Added: Item.resist_fire_mod/resist_cold_mod/resist_energy_mod/resist_poison_mod
/resist_physical_mod as R/W.
Changed: GetItemDescriptor() Handles new AOS Resistance Entries.
Added: POL Debug Port has access to Mobile/Item resist members.
02-02-2009 MuadDib:
Added: Anytime AR will get refreshed (armor damaged, equip/unequip, etc), Resistances
for Character will also get updated based on the items worn.
Note: UO::EquipItem() and UO::EquipItemFromTemplate() trigger the same Equip Code in
core as dropping it on your paperdoll. So should be up to date with new resistance
code in equipping also.
Note: AOS Physical Resist is NOT the same as AR. Keep that in mind, when writing syshooks
for combat, equip scripts, spells, etc. Eventually Core Combat will differentiate
between these based on Expansion (on which to use for a client or npc). But as of
right now, they will always use AR for combat, etc.
02-01-2009 MuadDib:
Added: Character.resist_fire/resist_cold/resist_energy/resist_poison/resist_physical members
as R/O. All these are for is storage. No core implementation for resists is present.
These ARE sent with the Full Stat Msg packet also, based on Expansion. These are also
stored to pcs.txt.
Added: Item.resist_fire/resist_cold/resist_energy/resist_poison/resist_physical members as R/O.
This was added at item level, to cover armor, weapons, clothing, containers, etc for
broad spectrum use on any item class that could be equipped. Such as Quivers and Totems
in AOS.
Added: NPC.resist_fire/resist_cold/resist_energy/resist_poison/resist_physical members as R/O.
Added: NPCTemplate::FireResist/ColdResist/EnergyResist/PoisonResist/PhysicalResist. These work
just like NPCTemplate::AR. You CAN use diceroll strings for these just like AR, or a set
number for it's amount.
Note: These are only written to file if the amount is != 0.
Added: Itemdesc FireResist/ColdResist/EnergyResist/PoisonResist/PhysicalResist.
01-29-2009 MuadDib:
Added: NPC.saveonexit 0/1. Same as for Items. When set to 0 (1 default), the NPC and all
items contained within it's wornitems container are IGNORED during save.
Fixed: Parry will now only refresh the AR if a shield is equipped, as was intended.
Removed: Some ... Drunken Coder syndromes. :)
01-28-2009 MuadDib:
Changed: Rewrote ObjCache Building. Now constructs the packet for uokr/aos once when sending
to a group (send to in range). Previous method built this packet per client requiring
it. Should improve handling in populated areas.
Fixed: Client bug where AOS Expansion accounts could not see normal magery books without
UOFeatureEnable 0x20 bit set. Although this IS a client bug, found a way to fix this
VERY common bug server-side. As a feature of this fix, you can now have the AOS
features that do NOT require 0x20 (tooltips etc), AND the magery books work without
packet hooks.
01-28-2009 Turley:
Changed: Optional parameter flags:=FACE_NORMAL/FACE_FORCE added to
TurnToward(),TurnAwayFrom(), TurnTowardLocation(), TurnAwayFromLocation()
Fixed: servspecopt option HiddenTurnsCount check readded in facing change
Fixed: Privilege "freemove" can now also be used for NPCs
01-27-2009 MuadDib:
Changed: uoclient.cfg::General::Statcap is deprecated now. Please change to now use
uoclient.cfg::Listener::Statcap. This is for the new upcoming Listener Seperate
settings. This new step in POL will allow custom settings for clients based on the
Listener (uoclient.cfg) they are connecting through. Upcoming changes (but not yet
done) will include such things as UOFeatureEnable, TotalStatsAtCreation, ItemColorMask,
and so on. This is to make it so you can configure different ports for different client
configurations and expansions. One use of this, is to allow both 2.0.0 clients on your
shard, AOS Clients with Tooltips, ML Clients without tooltips, and so on. The
possibilities will be good, and really expand the support you can give with your
Fixed: Magery Books will now be viewable for AOS enabled accounts on servers that do NOT have
the UOFeatureEnable 0x20 bitflag to enable AOS style books. This was implemented to fix
a CLIENT BUG. But, since so many people do not seem to realize you MUST have 0x20 on for
AOS style book handling on AOS activated accounts, we must do this. Boo to you :(
01-27-2009 Turley:
Changed: math::Min/Max now accepts Array as first parameter, if given returns the biggest/lowest
Integer/Double entry (second parameter is ignored).
Errors: "Array empty"&"No Integer/Double elements"
Second parameter has now default value of 0
01-25-2009 MuadDib:
Changed: Rewrote entire core handling of config/bannedips.cfg
This should address a small memory leak caused by the cfg system (leak still exists
I just changed how it is done with this file). It also will increase POL speed for
login/account verification. Remember, the larger your bannedips.cfg, the longer it takes
for the loginserver to verify the client IP is not banned.
Added: ReloadConfiguration() will cause the bannedips.cfg to get reloaded. YAY.
Added: Item.saveonexit member. Does what it says. All items default to 1. If you set this
to 0 the item and (if container, it's contents) will NOT be saved to datafile.
01-23 Nando:
Changed: polcore().bytes_sent and polcore().bytes_received are now Doubles. This will fix some
problems with negative values after some time... (internally they are now 64 bit integers).
Note: Lots of small leaks fixed, and more to come. Too much to list here, but you will feel the
01-16 Turley
Fixed: Filled PolCore().iostats.received with sense
01-16 Nando
Fixed: UOConvert was always reading map0.mul when uomapid is 1. It will now try to read map1.mul,
and if not found read map0.mul. (The same for staidx1 and statics1)
01-07 MuadDib
Added: Due to Ecompile always breaking for single file and right click compile useage when
no absolute path is given in the ecompile.cfg, added redundant code to verify drive
letter path in Windows environments. (aka, if you use "scripts" for include directory
instead of "c:\pol\scripts"). This should help in most cases. (Win32 Cores only right now)
Note: This works by checking if the core simply looked for "ecompile.cfg" or if it used the
-C <path to config> and handled accordingly. If you pass -C <path> it uses that to append
to the beginning of the dir structure in the config. Otherwise it appens the structure
based on the location of ecompile.exe being executed (since it's looking there for the cfg).
Note: In case people never realized. If you set the Evironment Variable called ECOMPILE_CFG_PATH
to point directly to the path where ecompile.cfg is kept, Ecompile.exe will use this to
locate your config file (Read core-changes people :D )
Added: ECompile.exe Flag "-E<path to ecompile cfg>". Correct, no space between them just like the
-Ppath Option. This is for Windows machines. It sets/changes the ECOMPILE_CFG_PATH Environment
Variable via the commandline so no need to add/edit it via the System Properties of the machine.
Remember, you must be logged in with Admin rights to change Environment Variables and this won't
show in the System Properties until Reboot. But it IS accessible WITHOUT rebooting.
01-03 MuadDib
Added: Ability to send two commands to the POL Service via SCM (Service Control Manager).
Command 1200 is a Beep (just for Nando), and 1201 will initial POL Shutdown just like
via Script or clicking on Stop on the POL System Tray Icon.
More to come later.
Fixed: Drunken coder syndrome in the AOS Tooltip handling and oldschool Tooltip code too.
Removed: Logging/Reporting of empty Attack Request Packets. Useless information that is unreliable.
Removed: References to unused portions of POL.cfg (things no longer supported that was still being
checked for).
01-02 Turley
Changed: Scriptname & PC info in .setprop log entry "wtf, setprop w/ an error"
12-26 MuadDib
Added: Ecompile.exe flag -xt defined in /? output.
Added: Ecompile.exe flag -Au added. This is same as -A but to only compile Updated Src.
Added: Ecompile.exe flag -s to Display Summary if -q is not set.
Added: Ecompile.exe flag -D to create .dep files (Dependency information).
12-20 Turley:
Added: new char member .clientver_detail returns struct of ints {major;minor;rev;patch}
new char method .compareversion(string) returns 1 if clientversion is >= then given version string
else 0 or error "Not enough parameters"/"Invalid parameter type"/"No client attached"
Added: new ssopt "ForceNewObjCachePackets" default false
Added: support for new ObjectCacheInfos introduced in 5.0.0
old behavior: Server sends 0xBF Sub 0x10 per object ->Client response also with 0xBF Sub 0x10 per item
new behavior: Server sends 0xDC per object -> Client response with 0xD6 (there can be more then one serial up to ~16)
intern check is
if ((ssopt.ForceNewObjCachePackets) || (isUOKR) || (clientversion.major>=5))
since the client sends his clientversion not instantly the first few ObjCacheInfos are sent
the old way (thats why the new ssopt is added)
Note: since client the clientversion is instantly known (new seed packet)
Added: support of new seed packet (>=
Note: right now no new packet is implementend (some packetsizes have changed)
12-19 Turley:
Changed: Extended PerformAction() it is now:
12-18 MuadDib:
Changed: Aux Client now sends "Connection closed" to a client that attempts to connect
from an invalid IP according to IPMATCH settings before closing the socket.
12-18 Turley:
Added: Setting for servspecopt.cfg 'PrivacyPaperdoll' Default is disabled.
If enabled, Paperdoll gives only char name for others (See Luth 09-28)
12-17 MuadDib:
Fixed : Item.layer gets reset to 0 when unequipped.
Fixed : When loading Realms, POL will shutdown if it cannot find any realms
and say so.
Added : Item.tile_layer returns the Layer setting in the Tiles.cfg/Tiledata.
This was added to always give the layer it uses, while leaving the
internal handling both of Core and Scripts that utilize the fact of
"if layer is set, it's equipped". This is ALWAYS set from the tile info
at server load. So changing your tiledata, re-creating tiles.cfg will
auto update your items.
Note : Item.layer gets internally reset on server load if it is equipped, via
tiles.cfg entry as well.
12-16 MuadDib:
Added : AuxSvc Configs now accept an IPMATCH entry identical to /config/servers.cfg.
This is only an additional security feature, and not required to be in the .CFG :)
The illegal ip will be treated by immediately closing the connection.
12-14 Nando:
Fixed: Characters/Starting Location packet wasn't sending the correct characters number. This
was causing problems when enabling the 6th & 7th slot (or limiting to 1 slot). Characters
number will now be set to Max(CharacterSlot, 5). The number of CharacterSlots shown will
depend on the acct expansion. (If it´s more than AOS, it'll send > 6, else 5).
Added: Flags in the Characters/Starting Location packet and the Enable Features (0xB9) are
now being set according to the CharacterSlots option in pol.cfg. It only works now
with 1, 5, 6 and 7 slots, as this is a client limitation. You can hook the 0xB9 packet
to change this in the future.
12-10 Nando:
Removed: POL's Windows-systray-icon beep when right-clicking is now gone.
Changed: Region's internal tile zone is now 4x4 (was 32x32).
12-05 Luth:
Fixed: A bug in Run_Script caused when a Parent script ended before the child script.
10-29 Luth:
Changed: PrintTextAbove*() now takes one more optional parameter, journal_print, with acceptible values:
JOURNAL_[UC_]PRINT_NAME: In the journal, it prints the item's description / npc's name, colon, the message (POL standard)
JOURNAL_[UC_]PRINT_YOU_SEE: In the journal, it prints "You see: " followed by the message (UO standard)
This does not affect the text that is printed above the item, ONLY what is shown in the Journal.
Fixed: OnRemoveScript and OnInsertScript now called with all appropriate parameters
program onremovescript(character, container, item, item_amount, movetype)
program oninsertscript(character, container, movetype, inserttype, adding_item, existing_stack, amount_to_add)
10-28 Luth:
Changed: Set_Script_Option() now returns the previous value that was set for that option
09-28 Luth:
Added: npc::Face( direction );
Added: mobile.SetFacing( direction, flags := FACE_NORMAL );
Note: mobile.facing := [0-7]; is the same as calling: mobile.SetFacing( [0-7], FACE_NORMAL );
Added: MOVEITEM_IGNOREMOVABLE flag to move an object regardless of its .movable property
Fixed: Paperdolls now give all information for self, and less information for others
09-23 Turley:
Added: uo::PlaySoundEffectXYZ( x, y, z, effect, realm := _DEFAULT_REALM );
09-17 Turley:
Added: uo::CreateNPCFromTemplate param override_properties can now
contain .CProps Dictionary (key=cpropname value=cpropvalue)
09-08 Turley:
Added: uo::UpdateMobile(mob)
Sends to mobiles in visual range UpdatePlayer packet of mob, for example to
inform of notority changes
Added: Packet 0xC7 Functions:
uo::PlayMovingEffectEx( source, target, effect, speed, duration := 0,
hue := 0, render := 0, fixeddirection := 0, explode := 0,
effect3d := 0, effect3dexplode := 0, effect3dsound := 0 );
uo::PlayMovingEffectXYZEx( srcx, srcy, srcz, dstx, dsty, dstz, realm := _DEFAULT_REALM,
effect, speed, duration := 0, hue := 0, render := 0,
fixeddirection := 0, explode := 0,
effect3d := 0, effect3dexplode := 0, effect3dsound := 0 );
uo::PlayObjectCenteredEffectEx( center, effect, speed, duration := 0, hue := 0,
render := 0, layer := 0, effect3d := 0 );
uo::PlayStationaryEffectEx( x, y, z, realm := _DEFAULT_REALM, effect, speed,
duration := 0, hue := 0, render := 0,
layer := 0, effect3d := 0 );
layer,effect3d,effect3dexplode,effect3dsound are only interpreted by the 3D client
(current known) render values are:
0 no change
1 It becomes dark
2 It becomes bright
3 Bright color is emphasized and dark color is converted transparently
4 The translucency (transparency is high)
5 The translucency (it is close to primary color)
6 Negative positive reversal
7 The background which is transparent negative positive reversal
layer values are:
0 Head
1 RightHand
2 LeftHand
3 Waist
4 LeftFoot
5 RightFoot
7 CenterFeet
effect3dexplode and effect3dsound are only interpreted if explode is set
effect3d and effect3dexplode values can be found in client/particles dir
CastAnimation only seen by 3D clients:
PlayObjectCenteredEffectEx( chr, 0, 10, 5, 0, 0, 1, 9041 ); //firesparkle on right hand
PerformAction(chr,0xCB); // moves with char
Fireball with explosion and sound:
PlayMovingEffectEx( chr,tar,0x36d4,7,0,0,0,0,1,9502,4019,0x160);
Changed: StatRequest 0x34 checks if target is visible to char (e.g. Injection exploit)
08-29 Turley:
Added: uo::GetGlobalPropertyNames()
Changed: uo::FindSubstance( container, objtype, amount, makeinuse := 0 );
to FindSubstance( container, objtype, amount, makeinuse := 0, flags := 0 );
flags are:
FINDSUBSTANCE_IGNORE_LOCKED : Find matches in locked containers
FINDSUBSTANCE_ROOT_ONLY : Do not find matches in sub-containers
FINDSUBSTANCE_FIND_ALL : Find all matches ignoring given amount
Added: new Char methods:
attacks once without modifing the swingtimer
if no opp is given attacks current attackable opponent, else attacks given opponent (and
but checks if opponent is attackable
if opponent is set sets swingtimer to given ms time
kills character ignoring invul, if killer is set repsys:OnDamage is called
Added: new Char members:
.hitchance_mod +-int in thousandth
additive modificator of the hitchance from the attacker
.evasionchance_mod +-int in thousandth
subtractive modificator of the hitchance from the defender
Added: new privilages:
"firewhilemoving" : swingtimer will not be reset if char is moving with projectile weapon
"attackhidden" : char can attack hidden opponents
"hiddenattack" : char can attack while hidden
Added: new systemhook script 'HitMiss'
function HitMiss(attacker, defender)
is called if hitchance check fails no overriding of corefunctions or resultcheck
-- POL097.4 --
03-19-2009 MuadDib:
Fixed: Crash in reporting of leftover objects during Shutdown.
02-28-2009 VeNdOr:
Fixed: Crash involving Auxconnection.ip.
Fixed: NPC events ENTEREDAREA and LEFTAREA were both fired even when one of them was eanbled.
02-28-2009 MuadDib:
Fixed: bug where ar was not reading intrinsic ar correctly when using ar_mod for
the NPC.
02-25-2009 Nando:
Fixed: Removed a stray '\n' that was being sent at the end of a binary transfer in browser, causing
some images to be corrupted. (This will finally solve the problem with some 'blank' images)
02-22-2009 Nando:
Fixed: Internal webserver will now handle binary files correctly. This was causing sporadic fails
when loading a webpage which had images, stylesheets or any other of those fancy things...
-- POL097.3 --
01-31-2009 MuadDib:
Added: POL.Cfg::MiniDumpType=variable. This is a new DMP file version. For now, I HIGHLY
The reason for this, is it is a small dump PLUS it stores all variable information
from internal core functions in relation to the crash. This is information that
could be VERY crucial to us Core Developers when you send the DMP file to the forums.
So please, try to start using this one (We know the large option can be horendous.
This is an alternative to that).
Fixed: Null Package fix (Luth did this one a while back in 098)
01-14 Nando
Changed: Highest allowed mobile graphic is now 0x800 (2048). Was 1024 since POL070.. wow... :)
-- POL097.2 --
01-05 Turley
Fixed : URL percent decoding (like %2F= '/')
12-31 Nando:
Fixed : Internal webserver's threads weren't being reported in case there were threads
hanging when shutting down. This might not solve the "zombie connections" bug,
but will at least change it's name to "internal webserver bug", I'm hoping.
12-30 MuadDib:
Added : POL.Cfg::ReportMissingConfigs 0/1 (Default 1). Handles if Missing Config File
reports are printed to the Debug.Log file. These are reports for example, when
you use :*:npcdesc to open all npcdesc files in a script but not all packages
of course will have this file.
Changed: Weapons now have a Default Speed of 35 if no entry for Speed is in the itemdesc.cfg
file if Delay is used. If no Delay, then will still throw an error and fail to load.
Fixed : Typo on spellbook reports.
12-17 MuadDib:
Fixed : Possible memory leak with AOS Tooltips.
12-16 MuadDib:
Fixed : Memory leak in Packet Class using .Setxxxx Methods on Variable Length Packets.
Added : Error Struct "Offset value out of range on a fixed length packet" when trying
to use packet.Setxxxx() whose value is out of range in a fixed length packet.
-- POL097.1 --
09-17 Turley:
Changed : To simplify usage util::RandonIntMinMax() now accepts
negative Integers and if parameters in wrong order swaps them
09-12 Turley:
Fixed : Memoryleak in PathFind
Fixed : If only PacketHook SendFunction is defined on receive default handler is called if exists
09-09-2008 Austin:
Fixed : Usernames and passwords will accept all characters except control characters
'\t','\f','\v','\n','\r' the characters '{' '}' and spaces.
-- POL097 --
08-28 Turley:
Fixed : math::Min()/Max() now returns Integer/Double based on params
08-26 Turley:
Fixed : AR recalc if parryskill changes, or if hp,maxhp_mod,ar_mod of equipt armor changes
08-23 Turley:
Fixed : Event queue full error prints now event details
08-20 Turley:
Fixed : server-side check if item is stackable on drop
08-19 Turley:
Fixed : Character.clientversion string
08-19 Luth
Added : Added Run_Script to OS.em. Similar to Run_Script_To_Completion, but the script is not run in critical mode, and the calling script is put on hold until the run script returns. Run_Script returns the value that the run script returned.
08-16 Turley:
Changed : Character.connected startup value is 0
Added : Accountname string struct member "account" added to
pre-character selection Packets
08-15 Austin:
Added : Setting for servspecopt.cfg 'ScriptedAttackChecks' Default is disabled.
If enabled, the combat hook must check distance, line of sight, visibility
and if both combatants are alive.
07-29 Mehdorn:
Changed : uo::ReserveItem() will return
1 - Item has been reserved by me.
2 - Item was already reserved by me.
Error - Item is in use by someone else, or invalid Parameter.
07-08 Turley:
Changed : Status of other player (e.g. WarMode) will be shown correctly.
Added : Character.MoveMode member. Returns the MoveMode like given in NPCDesc.
Added : Item.Stackable member. Returns 0/1 based on stackability of Item.
uo::IsStackable(). Returns 0/1 if both Items can be stacked together.
Changed : Random Number Generator "lagged Fibonacci generator" will be used.
Added : util::RandomIntMinMax(). Return Random Value between...
07-26 VeNdOr:
Added : ApplyDamage now returns the real damage applied to the mobile.
05-28 VeNdOr:
Fixed : In some conditions, when the AuxScript exited, the AuxConnection didn't close.
05-23 Austin:
Fixed : If MinCmdlevelToLogin was used, characters could not be created.
POL will now check the account's default command level.
Added : servspecopt.cfg CoreHitSounds default: disabled
If disabled, scripts will handle sounds when a mobile is damaged.
If enabled, will work as it did before - but for npcs will use a DamagedSound
property from its config file.
02-9 Shinigami:
Fixed : Bug in Unpack() with zero length Strings.
02-8 Austin:
Added : CharacterSlots setting in pol.cfg. Defaults to 5. This is to set the maximum number
of slots an account can hold - to support clients that support 6 slots.
02-5 Austin:
Changed : The freemove privilege will also allow targetting to be done when frozen / paralyzed.
02-2 Madman:
Changed : Trying to move when Paralyzed will no longer spam your screen with
"You are frozen and cannot move."
12-9 Shinigami:
Fixed : Bug in Unpack() with Strings in Arrays, Dictionaries etc. in case that
the String is not the last element.
11-5 MuadDib
Added : Character.Cursor member. Returns 0/1 based on if character has an active
Character.Gump member. Returns 0/1 based on if character has any active
Character.Prompt member. Returns 0/1 based on if character has any active