Welcome to PenUltima Online. Click to login or register.

Latest Core Changes

Last Modified: 01-21-2012

POL099

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 uo:RegisterForSpeechEvents Flags LISTENPT_HEAR_TOKENS,LISTENPT_NO_SPEECH
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 and non Token speech with SYSEVENT_SPEECH,SYSEVENT_GHOST_SPEECH
for RegisterForSpeechEvents() you get speech with and without Tokens when setting LISTENPT_HEAR_TOKENS and no speech without Tokens setting LISTENPT_NO_SPEECH
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}))
temp+=1;
who.resist_fire_mod:=temp;
endif
01-02-2012 Turley
Added XMLFile/XMLNode.removexmlnode(int value)
removes node of given index
XMLFile/XMLNode.removexmlnode(XmlNode node)
removes given node
XmlNode.clonenode()
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
Removed pol.cfg MaxObjtype limit removed, now it accepts up to 0xFFFFFFFF ( 4294967295 ) but try to keep it as low as possible, default value still 0x20000
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 itself.
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:
Tillerman=0x1F010
Port_Plank=0x1F011
Starboard_Plank=0x1F012
Hold=0x1F013
Rope=0x1F014
Wheel=0x1F015
Hull=0x1F016
Tiller=0x1F017
Rudder=0x1F018
Sails=0x1F019
Storage=0x1F01A
Weaponslot=0x1F01B
Wrestling=0x1F020
Mount=0x1F021
Secure_Trade_Container=0x1FF01
Wornitems_Container=0x1FF02
Note extobj entries just let you define the objtypes, all of these still have to be defined in itemdescs for boats to work correctly.
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-03-2011 Tomi
Changed startlocs.cfg readded default values for MapID ( 0 ) and Cliloc ( 1075072 which is the Yew town information ) Pol doesnt anymore throw an error if these values are missing.
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 Tomi
Changed Polcfg setting MaxObjtype now limited to max 0xFFFFFF (16777215)
Note Try to keep it as low as possible
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
Changed Pol throws now an error if some location is missing the MapID or Cliloc Definition in startloc.cfg ( New clients crashed when some were missing ) Removed the defualt values 0 for MapID and Cliloc ( for older clients it doesnt matter what the values are but clients >= 7.0.13.0 needs them )
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:
mysql_connect(host,username,password);
mysql_query(connection,query);
mysql_fetch_row(result);
mysql_affected_rows(result);
mysql_num_fields(result);
mysql_num_rows(result);
mysql_select_db(connection,database);
mysql_field_name(result,column_index);
mysql_free_result(result);
mysql_close(connection);
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 pol.pid 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
Tillerman=0xF010
Port_Plank=0xF011
Starboard_Plank=0xF012
Hold=0xF013
Wrestling=0xF020
Mount=0xF021
Secure_Trade_Container=0xFF01
Wornitems_Container=0xFF02
Note These values HAVE TO BE > pol.cfg max_tile_id and the same as objtype for them in itemdescs
Changed uoconvert now adds to multis 0x1000 to the ID
Note boats.cfg uses the same value as multis.cfg and itemdesc graphic entry for multis have to be the same. itemdesc entries for multis need to have the entry MultiID for updating multis ( you can find values using UOFiddler )
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 >= 7.0.13.0
Changed startloc.cfg now have Cliloc and MapID entry for every startlocation ( default values 0 )
Example:
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 the value can only be any value between 0x20000 and 0xFFFFFFFF
10-26-2011 Tomi
Added support for clients >= 7.0.16.0 ( 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.type = EVID_MERCHANT_SOLD or EVID_MERCHANT_BOUGHT
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)
Values:
-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
file::CreateXMLFile()
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
XMLNode.attributes
returns XMLAttributes object
XMLNode.type
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
XMLNode.setxmlattribute(struct{attributes})
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
XMLAttributes.propnames()
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" ?>
<root>
<Hello>World</Hello>
<!--Comment-->
<nodetwo i="1" />
</root>
var file:=OpenXMLFile("helloworld.xml");
parsenode(file,"");
function parsenode(node,i)
foreach blubb in node
syslog(i+cstr(blubb)+" ["+blubb.type+"] ("+cstr(_blubb_iter)+")");
parseattrib(blubb,i+"-");
parsenode(blubb,i+" ");
endforeach
endfunction
function parseattrib(node,i)
foreach ele in (node.attributes)
syslog(i+cstr(ele)+" ("+_ele_iter+")");
endforeach
endfunction
one way how to create such an file:
var file:=CreateXMLFile();
file.setxmldeclaration("1.0","","");
file.appendxmlnode("root");
file["root"].appendxmlnode("Hello");
file["root"]["Hello"].appendxmltext("World");
file["root"].appendxmlcomment("Comment");
file["root"].appendxmlnode("nodetwo",struct{i:=1});
file.savexml("helloworld.xml");
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,...) (Tomi)
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
methods:
compareversion()
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;
const DAMAGE_USE_DEFAULT := 2;
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. (Tomi)
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:
const CHARPROFILE_NO_UNEDITABLE_TEXT := array;
const CHARPROFILE_NO_EDITABLE_TEXT := array; - 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. :)

POL099 Beta #2

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_DONT_LIST_DIRS := 0x0;
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_PAPERDOLL := 1;
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 major.minor.build (no patch) e.g. 7.0.4 for latest client 7.0.4.1 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
renamed uo:TILEDATA_FLAG_NODIAGONAL to uo:TILEDATA_FLAG_HOVEROVER
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 7.0.0.0 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:
UOBJ_GARGOYLE_MALE 0x029A
UOBJ_GARGOYLE_FEMALE 0x029B
UOBJ_GARGOYLE_MALE_GHOST 0x02B6
UOBJ_GARGOYLE_FEMALE_GHOST 0x02B7
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_INTRINSIC_MOD := 1;
const RECALC_NO_INTRINSIC_MOD := 0;
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)
const UPDATEMOBILE_RECREATE := 1;
const UPDATEMOBILE_UPDATE := 0;
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)
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

POL099 Beta #1

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_USE_REPSYS := 1;
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, // 6.0.1.7 (Grid locs)
CLIENTTYPE_60142 = 0x20, // 6.0.14.2 (feature enable 0xb9 size change)
CLIENTTYPE_UOKR = 0x40,
CLIENTTYPE_7000 = 0x80, // 7.0.0.0 (Gargoyle race)
CLIENTTYPE_UOSA = 0x100
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_RENAISSANCE = 0x01,
FLAG_THIRD_DAWN = 0x02,
FLAG_LBR = 0x04,
FLAG_AOS = 0x08,
FLAG_SE = 0x10,
FLAG_SA = 0x20,
FLAG_UO3D = 0x40, // ?
FLAG_RESERVED = 0x80,
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
Character.setAggressorTo(chr)
Character.setLawfullydamagedTo(chr)
sets aggressor/lawfullydamaged for repsys.cfg:AggressorFlagTimeout seconds for given chr
Character.clearAggressorTo(chr)
Character.clearLawfullydamagedTo(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 1.25.25.0
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"
polsys::AddRealm(realm_name,base_realm);
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
polsys::DeleteRealm(realm);
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"}})
Mobile.aggressorto
Mobile.lawfullydamaged
as interface for core repsyssystem
06-20-2009 Turley
Added new r/w Members (Double) default 1.0
Mobile.movecost_walk_mod
Mobile.movecost_run_mod
Mobile.movecost_walk_mounted_mod
Mobile.movecost_run_mounted_mod
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:
OnLeaveParty(who,fromwho)
OnAddToParty(who)
OnPartyCreate(party)
OnDecline(who)
OnLootPermChange(who)
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 6.0.14.2 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. 6.0.1.7 to 6.0.4.0, I don't recommend using at all.
0xFEFEFEFC = UOKR Client
0XFEFEFEFD = 6050+ 2D Client
0xFEFEFEFE = Normal 2D client (pre-6.0.5.0 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.

POL098 RC2

04-02-2009 MuadDb
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.

POL098 RC1

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:
who.party 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
Party.em:
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
party.cfg:
General
{
//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 "")]
}
HookList
{
// CanAddToParty(leader,member) return check true/false
// called when a leader invites someone
CanAddToParty
// CanRemoveMember(leader,member) return check true/false
// called when leader wants to remove member
CanRemoveMember
// CanLeaveParty (member) return check true/false
// called when member wants to leafe the party
CanLeaveParty
// OnPublicChat(member,uctext) return check none
// called when a member sends a PartyMsg e.g. for logging
OnPublicChat
// OnPrivateChat(member,tomember,uctext) return check none
// called when a member sends a PrivateMsg e.g. for logging
OnPrivateChat
// OnDisband(partyref) return check none
// called when a Party is about to be disbanded
OnDisband
// 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
ChangePublicChat
// 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
ChangePrivateChat
}
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(), etc.
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 resist_mod.
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 6.0.1.7 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 6.0.1.7 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 6.0.1.7 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 packet.
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 6.0.5.0+ 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 6.0.1.7 and up Incoming Packet Handling ability to core.
Changed Packets 0x3C updated for supporting clients 6.0.1.7. and newer.
Changed Grid index support (KR and 6.0.1.7) 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 6.0.1.7 and newer clients.
Changed Updated sending of packet 0x25 to support 6.0.1.7 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, ATTRIBUTE_LOCK_DOWN, ATTRIBUTE_LOCK_LOCKED. This works for any attribute.
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.
Changed Packets 0x3C updated for sending UOKR Grid Index.
Added Base UOKR Incoming Packet Handling ability to core. Will Begin adding UOKR specific packets such as Drop Item and so on, very soon.
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 >= 6.0.1.7.
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 locks).
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.

POL098 Beta #4

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()).

POL098 Beta #3

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.
Noted 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.
Noted 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.
Noted 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 scripts.
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 difference.
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)

POL098 Beta #2

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)
Noted 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).
Noted 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)
Noted since client 6.0.5.0 the clientversion is instantly known (new seed packet)
Added support of new seed packet (>=6.0.5.0)
Noted right now no new packet is implementend (some packetsizes have changed)
12-19 Turley
Changed Extended PerformAction() it is now:
PerformAction(character,action,framecount:=5,repeatcount:=1, backward:=ACTION_DIR_FORWARD, repeatflag:=ACTION_NOREPEAT, delay:=1);
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 );
Noted mobile.facing := [0-7]; is the same as calling: mobile.SetFacing( [0-7], FACE_NORMAL );
Added MOVEOBJECT_IGNOREMOVALBE flag to move an object regardless of its .movable property
Fixed Paperdolls now give all information for self, and less information for others

POL098 Beta #1

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 0xC 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
Examples:
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:
.attack_once([opp])
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
.setswingtimer(time)
if opponent is set sets swingtimer to given ms time
.kill([killer])
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 privileges:
"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