1/17/2009 - giwo Fixed the handling for the UOX ini tags OVERLOADPACKETS and DARKLEVEL 1/17/2009 - giwo Possible fix for clients > 6.0.5.0. 1/16/2009 - giwo (0.98-3.7v) Implemented 0xBD CPClientVersion packet to request the version from the client. 12/16/2008 - Xuri Fixed a bug that prevented players from picking up/moving items in their own backpacks Oct 12, 2008 - Maarc Bug fix on GetColumn JS implementation Error checking on statement indexes in GetColumn() in ODBCManager Oct 12, 2008 - Maarc #ifdef'd ODBCManager implementation. You will need to enable through Config.h, and add 2 files to project. Accounts load and save from a database, falling back to read/write if connection doesn't exist Both logins are logged into SQL database ODBCManager exposed to JS Engine - note, columns MUST be fetched in ascending numeric starting from 0 Long strings printed to the console will now wrap in a friendly fashion Unknown INI file tags will now print out at startup 7/27/2008 - Xuri Entry for ScriptID added to 'CSTATS, 'ISTATS and 'TWEAK menu Fixed an erroneous example in JavaScript Docs Fixed an update-issue with race-gates Increased MAX_Z_LEVITATE from 10 to 15 to better deal with moving on uneven terrain (like in T2A) It should now be possible to walk through secret entrances made up of walk-through-able grass/mountain tiles 7/16/2008 - Xuri TWEAK now works for any admin character, no matter their commandlevel (gumps.cpp) The onPickup JS-event should now work Updated onPickup JS Event in Javascript Documentation 7/03/2008 - Xuri Animal taming no longer checks for the "ANIMAL"-tag in creatures.dfn Converted WeightPerStr from UI08 to R32, so it can support decimal values The onFall JS event will now work if characters fall further than 20 Z tiles (CChar.cpp) Updated onFall JS Event in Javascript Documentation 7/02/2008 - Xuri Changed the system message being displayed when fatigued due to being overloaded Added system message for when character becomes overloaded after picking up item The math for calculating max carrying capactity for players matches OSI values more closely Default WeightPerStr changed from 5 to 3.5, to closer match the values used by OSI Updated dictionary files with two new system messages Added a check to the 'POLY command to prevent characters from polymorphing into an invalid, client-crashing id (0x20) 6/22/2008 - giwo Modified books.dfn to use the standard TAG=DATA format. Each line in a PAGE section is now preceded with LINE= Modified motdtips.dfn to use the standard TAG=DATA format. Each line in a TIP or MOTD section is now preceded with LINE= Modified the JSMethod CBase_GetTag to avoid a possible crash. Removed the following variables from CWorldMain cmem, imem, nextCharSerial, nextItemSerial as this functionality is handled by the ObjectFactory 6/22/2008 - giwo (0.98-3.7t) Added error handling to prevent a crash if GetByte/GetWord/GetDWord were passed an invalid offset Changed the tweakItem and tweakChar handlers to use command level rather than the "IsGM" flag. Defaulted the starting serial to 0x1 rather than 0x0, as some UO packets don't recognize 0x0 as a valid serial. 6/22/2008 - Xuri Fixed hex-id of turnips in foods2.dfn, these turnips should now be stackable Fixed hex-id of studded sleeves in studded_leather.dfn, previously used hex-id for gloves Tweaked the region surrounding Buccaneer's Den so it extends around all buildings in the town Removed entry 104 (rawfish.js) from jse_fileassociations.scp as it was no longer in use Archerybuttes work again, and should have a "machine-gun"-issue fixed Scripts that used onUse() now use onUseChecked() Updated UOX3_changelog.txt in the Docs-folder to include updates up to 0.98.3-7 6/21/2008 - giwo Fixed an infinite loop crash caused by a DFN entry calling itself with GET Added JS Character Propery "poisonStrength" to set the strength of the poison a character will inflict on his foe during combat. Implemented supermoleet's fix for the black screen after logging in to a different world 6/21/2008 - giwo (0.98-3.7s) Modified UString to function without crashing under VS2008 Fixed a bug in CItem::RemoveFromSight() causing items inside containers on the ground not to properly notify nearby players when removed. Fixed a bug in CPIDropItem() when the compiler does not automatically instantiate booleans to false 6/21/2008 - giwo Fixed several issues with tracking. Fixed a crash caused by passing an invalid object to the JS Method TurnToward 6/20/2008 - giwo (0.98-3.7r) Added support for Visual Studio 2008 Fixed an issue causing a player to be poisoned when a JS call to SetPoisoned(0,0) was made. 02/16/2008 - Xuri Made magical shortbows and elven composite bows fire arrows instead of crossbolts 10/27/2007 - grimson Split onUse into onUseChecked and onUseUnChecked. 10/09/2007 - Xuri Fixed some errors in jail.js that could mess up jailing/releasing characters Added new function (getCombatSkill) to weapontypes.js for returning skill used by equipped weapon as a string 9/08/2007 - grimson Properly initialize the wander area when the wandermode of an NPC changes. Use stamina instead of dexterity when calculating the attack delay to match up with the old OSI combat calculations. 9/07/2007 - grimson Force the wandermode of NPCs spawned by spawnregions to 3 (box), so they can travel the whole spawnregion. Properly initialize the wander area when the location of an NPC changes. Use the old OSI way of calculating hit chances. 8/26/2007 - grimson Added new JS property for items: "speed" this can be used to get and set the speed of weapons. Added new setting to spawn.dfn: "ONLYOUTSIDE" set this to one so that items and chars will only spawn outside of buildings in that area. Modified the spawn code for spawnregions so that NPCs with wandermode 3 (box) and 4 (circle) keep within the spawnarea boundaries. Send NPCs that left their wander area for some reasons back there. 8/12/2007 - grimson Use an enum for racial relations, should help with reading the code. Fix a bug where racial allys would attack each other. 7/28/2007 - grimson Added a new setting to the uox.ini: BASICTOOLTIPSONLY. If this is set to 1 the tooltips will only contain basic information, like the name and the weight of an item. 7/23/2007 - giwo (0.98-3.7q) Added support for updated UOKR packets. 7/17/2007 - Xuri Added new JS script for moonstones, used to create gates between felucca & trammel Added new JS script for spyglasses, used to see the phases of the moons Added new DFN item: [moonstone], uses new moonstone JS script Removed duplicate spyglass entries in item-DFNs, and added script tag for new spyglass JS script Drinking healing potions will no longer also give the user night-sight Cure-potions should be working again (stranf) Drinking a poison-potion will now poison one's character A timer now stops players from using multiple potions rapidly 6/12/2007 - giwo (0.98-3.7p) Added the JavaScript CSocket methods FirstTriggerWord(), NextTriggerWord(), FinishedTriggerWords() to allow handling trigger words sent from the client during speech. 6/10/2007 - grimson Fix reading of the new SPEED DFN tags for NPCs. 6/10/2007 - grimson Allow faster attacks on fleeing NPCs, so they won't be chased without an end. Allow following NPCs to run if their target went to far away, so they can catch up on it. 6/10/2007 - grimson Modified cMovement::NpcMovement() and cMovement::HandleNPCWander() so that NPCs only run while they still have stamina left. Added two new settings to the uox.ini, NPCRUNNINGSPEED and NPCFLEEINGSPEED, they work the same way as NPCMOVEMENTSPEED. Added three new DFN tags for NPCs. WALKINGSPEED, RUNNINGSPEED and FLEEINGSPEED they also work the same way as the uox.ini settings, and will override those if present. 6/08/2007 - Xuri Fixed multiple JS-scripts that would not work correctly with negative Z values (Used GetSByte instead of GetByte) Fixed a few "You can't think of a way to use that item"-messages appearing when using certain JS-based items Removed rawfish.js and the script entries for it, no longer used. 5/26/2007 - giwo (0.98-3.7o) Fixed a couple crashes caused by targeting non-PC's in the PartySystem. 5/25/2007 - giwo (0.98-3.7n) Added JavaScript function "Moon( moonNum, newVal )" which will get and set the server moon values. Modified JavaScript Item.decaytime and Item.tempTimer to calculate the new value as a future time in seconds (unless a 0 is passed). Fixed door.js allowing a locked door without an associated key to always be openable. 5/20/2007 - Xuri Added teleport locations for Malas and Tokuno to moongate.js, and added configuration values at top of script 5/19/2007 - Xuri Items with wipable status set to 0 should no longer be removed when using the 'WIPE command Added support in doors.js for linked double-doors that will both open at the same time Added new command - 'LINKDOORS - used to link doubledoors together, and 'UNLINKDOORS to unlink them Added new script (bankers.js) that replaces hardcoded banker-AI and adds CHECK and DEPOSIT # / commands Added new script (bankcheck.js) that handles the functionality of bank-checks Assigned script 3201 to bankers, and removed NPCAI=8 Changed mapdefinitions (maps.dfn) for Trammel to map1.mul, statics1.mul and staidx1.mul 5/18/2007 - grimson Make sure we check for scripts envoked by type or id before we use the global script. 4/09/2007 - grimson Remove some not needed code and slow fleeing NPCs a bit down, so that other chars can still catch up with them. 4/09/2007 - grimson (0.98-3.7m) Added a new setting to the uox.ini, LOOTINGISCRIME. If you set it to 0 looting corpses of innocent chars is not taken as a crime. Fixed and changed parts of the walking code. If NPCs have the RUNS tag set they will really run when they attack, instead of just showing the running animation. Tamed chars will now run, if the char they follow is running, this should reduce the warping effect of them a bit. 4/08/2007 - grimson Fixed a bug where we dropped the hair and beard items, from corpses, on the ground. 3/31/2007 - grimson Added elven hair styles to the dfns. 3/30/2007 - grimson Corpses should now display the hair and beard of the char they where created from. Modified CItem::SetCont() so that it checks against the item layer instead of fixed IDs to see if an item is hair or a beard. 3/30/2007 - grimson Fixed the position of the coprse item when the char died falling forward. 3/30/2007 - grimson Fixed cMagic::CheckBook(), it was calculating wrong numbers for the spells. Let chars randomly fall forward or backward when they die. The DISPLAYHITMSG setting from the uox.ini now also controls the damage display. 3/26/2007 - grimson Use an enum for the states of the skill locks, makes reading the code a bit easier. Fixed cSkills::HandleSkillChange(), the re-ordering of the atrophy created doubles and dropped entrys. Rewrote cSkills::AdvanceStats() so that the statlocks are actually used. 3/24/2007 - grimson Fix the onCreate JS script functions, they used the same event id. So if one didn't exist the other was also marked as not existing. Changed CPICreateCharacter::Handle(), if the start location for the new PC isn't send by the client it now uses the first start location from the uox.ini instead of the fixed location in britain. 3/3/2007 - giwo (0.98-3.7l) Allowed customization of supported client features via uox.ini CLIENTFEATURES SERVERFEATURES Note that these are bit-settings similar to the way STARTPRIV works. One will need knowledge of how to set individual bits in a value, or an editor to customize these features. Removed CLIENTSUPPORT from the uox.ini 2/21/2007 - giwo Committed some linux build error fixes on behalf of Cavalier 2/11/2007 - grimson Small rewrite of the weather system. Calculate snow, rain and storm intensitys only every server hour and use their values for the amount of weather effects on the screen. 2/11/2007 - grimson Fix the format of the pingIP field in the CPGameServerList::AddServer() function. Now the client shows, after a moment, latency and packet loss information for the servers. It still doesn't work all the time. 2/10/2007 - grimson Added a new target type to the speech system, SPTRG_ONLYRECEIVER which sends the message only to the receiver and doesn't display it on the sender. Use the new target type in CSocket::objMessage() and CSocket::ShowCharName() to display the player name and serial only to the char requesting the information. 2/10/2007 - grimson Update the CPWalkOK Packet (0x22), the second byte contains the notoriety value (flag color) and make use of it. 2/08/2007 - grimson Fix a bug where items, that have a script but no onPickup event, get always bounced. Allow party members to remove themselfes from the party, even if they aren't the leader. 2/01/2007 - grimson Remove remains of the time command from command.dfn. 1/28/2007 - giwo (0.98-3.7k) Fixed an issue with TriggerEvent() that can cause a script to stop functioning if the triggered event did not return true Moved dynamic parts of [worldlight] section from uox.ini to their own output file in the /shared/ directory Exported telltime function along with the clock item and 'time command handling to JS. 1/25/2007 - giwo (0.98-3.7j) Fixed an issue causing it to be "snooping" to open a pack in a trade window. Added support for the OnPickup() JS Hook, note a return value of false will bounce the item. 1/25/2007 - giwo (0.98-3.7i) Fixed a compiler warning with the Party System Fixed an issue causing weight not to be added when grabbing items from a bank box. Moved BankBox creation to Player creation, addressing a situation where the first time a player opened his bank it would close immediately or crash the client. Added FindRootContainer() to simplify finding the top-most item containing other items. 10/29/2006 - grimson Fixed %tstamp output in the HTML templates. 10/14/2006 - grimson Added more details to the weapon tooltips. 9/28/2006 - grimson Change cMagic::SelectSpell() to first check for reagents and then for skill. 9/27/2006 - grimson Fixed the spawning of NPCs in CSpawnRegion::RegionSpawnChar() so that they are put into the correct world. Updated UOX3_Official.dsp to contain the files from the party system. 21st September, 2006 - Maarc Added commentary to some of the party classes headers Updated AddMember() and RemoveMember() to return a bool as to it's success Updated Leader() change code so that the leader is always first on the list Added isNPC property to the Party class to help us with how our code will go CChar now has an InParty() method, which is currently unused - will be used for fast lookups of party presence later. This is NOT to be saved, as it disappears on server shutdown. Exposed the new party classes to the JS Engine var partyObject = CreateParty( leader ); // Returns NULL if the party failed to be made Party Class Methods bool Remove( memberToRemove ); bool Add( memberToAdd ); // If it's a PC, then it will send an INVITE ONLY It is up to the PC to accept/decline obj GetMember( index ); // Returns a character object for the member at that index Properties leader // Character object that is the leader, can return null - EDITABLE memberCount // Returns the number of characters in the group - READONLY isNPC // Returns true if it's an NPC party, false if not - EDITABLE Character Class Properties party // Returns a party object that is the party associated, or null - READONLY (use party management for this!) partyLootable // Boolean that dictates whether the character is lootable by the party - EDITABLE - Note that if you are not in a party, this does nothing! 20th September, 2006 - Maarc Added CPIAOSCommand packet including logging Changed CPISubcommands::Receive so that it doesn't log multiple times Updated party packet details Added basic party implementation. Adding, removal and kicking works, speech does not Added sent packets CPPartyMemberList, CPPartyMemberRemove and CPPartyInvitation Updated dragging contents out of packs so that pet friends should be able to do so Added CPPartyTell packet Promoted Party::SendPacket to public method Added speech (individual and group) to party methods 9/10/2006 - Xuri Found and fixed a total of 19 missing semicolons in 15 different JavaScripts Modified sword.js and axe.js so bladed weapons can be used as magic weapons (of TYPE 15) Minor modifications to several JavaScript files 8/29/2006 - Xuri Fixed several issues with the UseResource JS Method (maarc) UseResource JS Method can now be used with both items (containers) and characters (maarc) 8/12/2006 - giwo (0.98-3.7g [3.8 BETA]) Changed item limit in create dfn down to 4,999 to fix a bug in gump handling. 8/12/2006 - Xuri Modified the order of the arguments in the RESOURCE tag in create-DFNs to fit the following: RESOURCE=ID AMOUNT COLOUR (AMOUNT and COLOUR are optional) Added smithing DFNs for coloured ingots (Armor and shields only, no weapons). Added a commented out MOUNTID for the polar bear in creatures.dfn. Uncomment for ridable polar bears. Corrected SPACEX/SPACEY (clear space necessary to place the house) values for all houses. Updated skills.dfn with changes mentioned by giwo about FOREIGN and MINAMOUNT tags. 8/11/2006 - giwo (0.98-3.7f [3.8 BETA]) Fixed a crash when attempting to place a house item outside a house. Fixed the location check when placing house items to allow them to be placed inside houses. Added a check on house items to only allow them to be placed in your house (Or anywhere by GM's). Bumped up the limit on items in create.dfn from 999 to 32,766. Removed FOREIGN and MINAMOUNT tags from ore entries in skills.dfn as they were superfluous Fixed CHANCEFORBIGORE tag handling from regions.dfn to give a % chance out of 100 to get a pile of 5 rather than 1 ore. 7/24/2006 - giwo (0.98-3.7e [3.8 BETA]) Fixed an issue making it impossible to place items on tables. Fixed an issue with the uox.ini entry for log resource respawn area. Simplified many entries in uox.ini, making them easier to read. 7/19/2006 - Xuri Made onResurrect trigger before a resurrection instead of after, added option to override hard code by returning false Updated JavaScript Documentation to 0.44, and added missing commands to command list Added "ARMOUR" as an alternate spelling used along with the 'SET command 7/18/2006 - giwo (0.98-3.7d [3.8 BETA]) Fixed a possible issue with TextEntry in JS gumps. Fixed an issue with the following JS events: OnSnooped OnSpellGain OnSpellLoss OnCommand OnPacketReceive Fixed several MingW32 compiler warnings. Fixed a Flagging issue with Racial enemies. Added uox.ini flag to disable/enable the A* Pathfinding routine: ADVANCEDPATHFINDING=0/1 Fixed an issue causing errors when compiling under *nix. Fixed an issue causing monsters to constantly attempt to pathfind to a target they can't reach. 7/17/2006 - Xuri Added new command (rndtile.js) that allows tiling random items of a specific hue at a specific height Syntax: 'RNDTILE (optional) (optional) 7/15/2006 - giwo (0.98-3.7c [3.8 BETA]) Added a flag to CChar::PushDirection() allowing us to push to the front or back of the pathToFollow list. Changed CChar::mNPC::pathToFollow to a deque for more robust functionality. Fixed an issue with the A* Pathfinding routine causing creatures to path in reverse. Added some debugging information to A* Pathfinding (when running in Debug mode). 7/10/2006 - giwo (0.98-3.7b [3.8 BETA]) Fixed an issue with CPFightOccurring packet which would cause the client to lockup. Made use of the CPFightOccurring packet during combat. Fixed an issue when a monster attacked a player who was not in combat UOX3 would not inform the client of a new target. 7/09/2006 - giwo (0.98-3.7a [3.8 BETA]) Fixed an issue causing JS gumps to interfere with eachother. Fixed an issue causing serial numbers in the istats gump to display improperly. 7/08/2006 - giwo (0.98-3.7) Updated version to 0.98-3.7 7/07/2006 - Xuri Modified damage output of summoned creatures in magicsummon.dfn, as they were too powerful The owner of two pets/summoned creatures will no longer become a criminal if the two pets/creatures fight Summoned creatures (and normal ones) will no longer cast Blade Spirit/Energy Vortex, as they caused flagging errors 7/07/2006 - Xuri (0.98-3.6j) [3.7 RC2] Added scripted version of keys (now used instead of hardcoded ones), plus working keyrings Updated doors-script to make use of new scripted keys/keyrings as well as the new TextMessage arguments Added script=5013 (key.js) to [base_key] in dfndata\items\misc\keys.dfn Ghosts will no longer re-enter combat-mode if they speak while already in combat-mode Removed CombatWalk flag sent to ghosts when they talk, as player ghosts have no combat animations PLAYERPERSECUTION in uox.ini (allows ghosts to drain mana from other players) set to 0 by default (Must be updated manually if using old uox.ini) 7/06/2006 - giwo (0.98-3.6i) [3.7 RC] Combined CChar:: emote(), emoteAll(), talk(), and talkAll() into a single function TextMessage(). Renamed CItem itemTalk() to TextMessage() and modified it so passing a NULL socket sends the message to nearby players. Added two new optional parameters to JS method TextMessage(). allHear (defaulting to true) and txtHue. 7/05/2006 - grimson NPCs can now walk through player ghosts. Player ghosts are only visible when they are in war mode and they will enter war mode when they speak. 7/02/2006 - giwo Fixed an issue causing several item values not to be saved. Updated doors.js to not display the "blocked" message if the door ID isn't recognized. 7/02/2006 - giwo (0.98-3.6h) [3.7 RC] Removed door.cpp from the project. Modified the JS UseDoor() function to call the JS Event onUse() based upon the type of the item passed in. Fixed an issue causing AreaCharacterFunction and AreaItemFunction to return the number of objects they encountered rather than the number of times the function returns a "true" value. Modified TriggerEvent() to return true or false based upon the return value of the function. Moved doors out to JS. 7/01/2006 - Xuri New "AI"-Script: Cows may now (randomly) defend themselves from doubleclicks by falling over. Corrected various errors with liquid-containers (pitchers, bottles, goblets, etc.) 7/01/2006 - grimson Added new tag "MOUNTID" to creatures DFN, if this is set to the ID of a mount item the creature will be mountable. Updated creatures.dfn to make use of the MOUNTID tag. Removed CChar::IsValidMount( void ) as it is no longer of any use. 6/30/2006 - grimson Fixed a bug that caused the offline HTML files not to be written in some cases. Catch Serverlist entrys with less than 3 sections, these caused a crash when parsing the ini. Added %24time and %tstamp to HTML templates, %24time return the current time in the 24 hour format, %tstamp returns a unix timestamp. 6/29/2006 - grimson Let chars run if they follow a running char. 6/27/2006 - grimson Allow the body id to reach 0x3E2, so that the "dupre" body can be used without a problem. 6/27/2006 - grimson Changed cMagic::SummonMonster() so that it creates summoned from DFN entrys to make it easier to customize them. Added magicsummon.dfn to the npc section, it contains the dfn entrys for the creatures that can be summoned. 6/26/2006 - grimson Added an entry to jse_fileassociations.scp for the new oilcloth.js script. 6/26/2006 - giwo (0.98-3.6g) [3.7 RC] Fixed an issue causing not every instance of skill gain to use the amountToGain specified in skills.dfn. Changed MAX_NAME back to a 60 byte limit (note some Character packets only support 30 bytes). Moved CChar::lockstate and atrophy into PlayerValues_st Cleaned up CSkills::Atrophy and renamed it to HandleSkillChange() to better reflect it's functionality. 6/25/2006 - Xuri Updated fishinglist.dfn with generic loot (paintins, weapons, gems, various flotsam) Updated create/tailoring.dfn, items/gear/provisions.dfn and items/itemmenu.bulk.dfn with new oil cloth Fixed the 'STAMINA command in stats.js. Had ".isChar" misspelled as ".isCHar" Added new JS-script: oilcloth.js - Functional oil cloths, used for cleaning poison off of weapons Character can no longer use locked down potions or food 6/25/2006 - grimson Fixed loading of tempeffects when there is more than one effect saved. Increased the damage values of summoned creatures a bit. Fixed magic field effects. 6/25/2006 - grimson Fixed the output of the time command, it was confusing midnight and noon. 6/25/2006 - Xuri Characters no longer turn criminal from attacking their own pets/summoned creatures DFN: Updated spells.dfn with correct reagent requirements Fixed several bugs with the JS-scripted clumsy, heal, feeblemind and magic-arrow spells: Could cast while having weapons equipped Could cast while jailed Could cast without consuming any reagents SoundEffects weren't working properly Healing would (by design) subtract health from the caster Debugmessages weren't commented out 6/24/2006 - grimson Fixed two bugs in doLight() where we were sending the wrong light level to players. 6/23/2006 - grimson Changed the way the owner of an object is stored to use the serial of the owner. 6/23/2006 - grimson Changed checkPetOfflineTimeout() to ignore player vendors. Remove tempeffect number 44 as it is no longer used. 6/23/2006 - grimson Don't let normal players put items into the backpack of a player vendor they don't own. 6/22/2006 - giwo (0.98-3.6f) Fixed an issue causing a crash if a null socket was passed to JS CreateBlankItem() or CreateDFNItem(). Fixed an issue causing houses not to be able to be placed in many valid locations. Reduced the checking area when placing a house around small houses in house.dfn Fixed an issue causing boats to always be placed at z -5 regardless of the water level. 6/22/2006 - grimson Don't add the weight entry to the tooltip of items that weight nothing. The "collect" command now also works when using the name of the vendor. 6/22/2006 - grimson Added the "view", "status" and "dismiss" commands for player vendors (updated dictionaries). Allow pet friends to mount the pet. 6/22/2006 - grimson Fixed a few places where looking into a pack from a player vendor would have been snooping. Added price and description information to the item tooltips of player vendors. DFN changes: Added a player vendor deed to misc_deeds.dfn. Put the player vendor deed into the add menu. Changed the player vendor entry in the malevendors.dfn so that they are no longer flagged as normal shoopkeepers. 6/20/2006 - giwo (0.98-3.6e) Updated the Makefile.am. Fixed an issue causing items to duplicate when moving around stacks larger than 32,767. Fixed an issue causing timers not to be properly reset by the JS engine. Fixed a DFN issue causing one to be able to create a board from a board. Fixed a DFN issue causing item values to be loaded improperly. 6/15/2006 - giwo (0.98-3.6d) Modified names in the AITypes enum to fit naming conventions. Minor optimizations in ai.cpp. Removed an unused worldsave tag handler from CBaseObject. Modified names in the CommandLevels enum to fit naming conventions. Modified FLAGS and SOUNDFX DFN tags in spells.dfn to allow for a full integer as well as the current split format. Simplified some functions in CPacketStream. Changed MAX_NAME back down to 30 characters as all character name packets sent to the client max out at 30 bytes. Made more use of IsWeightedContainer() in weight.cpp to streamline layer handling. 5/22/2006 - Xuri Added weapon type classifications for all weapons from the mondain's legacy expansion 5/14/2006 - grimson Fixed the "Large Dragon Boat" deed. 5/07/2006 - giwo (0.98-3.6c) Forced CItem::DecayTime to reset when decayable was set to true. Fixed an issue causing keys not to function on planks. Added JS socket methods GetSByte(), GetSWord(), GetSDWord(), to allow pulling negative numbers from the socket buffer. 5/02/2006 - Xuri Fixed the ever-swinging training dummies Fixed wrong item being added when crafting fishing poles 4/22/2006 - Xuri Fixed the guardzone for Delucia, was previously set to the graveyard north of the town 4/18/2006 - Xuri Items added using the RADD command in repeatingcmds.js will no longer decay by default Fixed the guardzone for Ocllo, X2 and Y2 were mixed up 4/07/2006 - grimson Removed the last change that should prevent items from decaying inside multis, as this is already done in a different part of the code. 4/07/2006 - grimson Don't add the amount of items to the item name in buy/sell gumps, as it is already shown in the gump. Don't let items decay when they are inside a multi, so if a player places decorations or furniture in his house it stays there. DFN Changes: Added GOOD tags to buyable items, so it's easier for an admin to use the advanced trade system. 4/06/2006 - grimson Fixed saving of the last used IP in the account files, and corrected the naming for the contact field when saving the account files. 4/06/2006 - giwo (0.98-3.6b) Fixed an issue with accounts causing the FLAGS value not to function properly. Consolidated some code in CAccountsClass. Fixed some signed/unsigned mismatches in CAccountsClass. Modified Combat DEF calculations to remove superfluous code. 4/06/2006 - grimson Updated potion.js, so heal potions work again. 4/06/2006 - grimson Catch some more client crashes with speak, that's in the wrong colour. Update the reputation flags of a NPC when the NPCFlag get's loaded. DFN Changes: Pushed up the damage values of most NPCs. 4/06/2006 - giwo (0.98-3.6a) Fixed a rather substantial issue causing some character values to save incorrectly. Fixed a sign mismatch with GuildFealty. 4/05/2006 - grimson Changed the use of the HP DFN tag for items so you can specify a range for a random value. DFN Changes: Updated the stats for all weapons to fit the pre-AOS values. Pushed up the damage values of AOS and SE weapons so that they are in the same area as the other weapons. 4/04/2006 - giwo (0.98-3.6) Removed unused level value passed with Console.Warning() and Console.Error(). Removed JS Console prop .level Modified JS Console Methods Warning() and Error() to remove the unused level value. Fixed several issues with mapdiff and staticdiff handling. Fixed a bug causing a crash when calling JS Event onGumpInput. Merged CMultiObject vectors ownerList and banList into a single map housePrivList, to allow multiple owner/banned levels and ensure there are no duplicate characters on the lists. Removed many superfluous uses of CChar::Dirty( UT_STATWINDOW ). 3/23/2006 - giwo (0.98-3.5o [3.6 RC]) Minor changes to cSkills::Fish(). Fixed an issue making it impossible to open Elven NPC paperdolls. Removed some typedefs that were no longer used. Moved CChar values townpriv and townvote to PlayerValues_st Moved CChar values foodList, hungerWildChance and hungerRate to NPCValues_st Removed CChar::inBuilding in favor of using a bools flag. Removed handling code for several unused Character values. 3/23/2006 - grimson Fixed a bug with the JS override for the combat damage calculation that caused 0 damage to be applied when the attacker has no script attached and the global script doesn't exist eigther. 3/22/2006 - grimson Small fix to ApplyDamageBonuses() caused by my previous commit. 3/22/2006 - grimson Removed the code to raise your resistance value upon elemental damage, this can be done better in JS. Modified CBaseObject::DumpBody() and CBaseObject::HandleLine() so that all resistance values get saved and loaded in/from the worldfiles. Added a new JS event: onDamage( damaged, attacker, damageValue ) This will be fired everytime the char "damaged" gets damaged, the attacker can be a char or NULL. 3/21/2006 - grimson Changed the return value of OnCombatDamageCalc() to a SI16, I accidentially declared it to be a SI32. Replaced the JS Char property .defense with the new JS Char Method: mChar.Defense( hitLoc, damageType, doArmorDamage ); so you can get all the different defense values for a char. 3/21/2006 - grimson Call the OnHungerChange JS event in the SetHunger() function of chars instead of calling it in every part of the code the where the hunger gets changed. Added a new JS event: onCombatDamageCalc( attacker, defender, getFightSkill ) This event is called everytime combat damage is calculated. You can do your own damage calculation and return the damage to override the engine damage calculation, or return a negative damage value to use the engine damage calculation. 3/21/2006 - grimson A small fix to ApplyDamageBonuses(), the race damage of a weapon was applied to the final damage instead of the weapons base damage. 3/20/2006 - giwo Fixed a glitch in the CPExtendedStats packet. Modified CPIPopupMenuSelect to prevent opening the paperdoll of a non-human. 3/20/2006 - giwo (0.98-3.5n [3.6 RC]) Fixed an issue with CPExtendedStats causing statlocks not to display in the stat window. Modified CChar::skilllocks and atrophy to save stat values to the worldfile. Fixed an issue with CChar::skill value causing possible data corruption. Fixed an issue causing the Backpack entry on a popup menu to display as selectable when the character should not have a pack (IE a non-pack animal). Made CBaseObject::SetWeight() a virtual function and overloaded it in CChar and CItem. Modified CChar::SetWeight() to automatically Dirty our object for a statwindow update. Simplified some DropItem() handling. Moved CBaseObject updateTypes to CChar as there is only one type of item update, and added a ClearUpdate() function to reduce superfluous packet sends. 3/20/2006 - grimson The JS item property .devinelock was sent as INT though it is a bool. Some small fixes to the tweak menu for items, this still had parts for a non existant MoreB value in it which shiftet some parts off, this also includes updated dictionaries. 3/19/2006 - grimson Renamed Get/SetElementResist() to Get/SetResist as we now handle all resistance types in it. Removed SetDef(), GetDef() and the def variable from CBaseobject.cpp and store armor values as physical resistance together with the other resistance values. Removed calcElementDef(), getElementDef and checkElementDef from combat.cpp and handle all defence calculations in calcDef(), getArmorDef() and checkDef(). Removed JS char property .armour and item property .def, added a new method for chars and items .Resist(). That method takes either one value, the resistance type and returns the resistance value of that char/item, or two values, the resistance type and the amount the resistance value should be set to. JS changes: Updated JS scripts to use the new .Resist() method instead of .def/.armour Current resistance types are: 1 - Armor 2 - Light 3 - Water 4 - Cold 5 - Heat 6 - Energy 7 - Poison 3/19/2006 - giwo (0.98-3.5m [3.6 RC]) Moved create menu structs to skills.h as they don't need to be in global scope. Fixed several issues with pack horse handling Modified DropOnNPC so GM's can drop items directly on an NPC to be placed in their pack. Modified response handling and removed some superfluous code. Fixed a crash when UOX3 shut down due to an invalid directory entry. Locally declared vector3D line2D and line3D as they are only used in lineofsight.cpp Fixed water NPC's swimming under statics (bridges). Fixed some false positives that were being generated by point3::Mag3D() by using a larger storage container. 3/18/2006 - giwo (0.98-3.5l [3.6 BETA]) Fixed an issue causing GM yell messages with trigger words in them not to be broadcast. Added and made use of a WanderTypes enum throughout the source. Added housekeys.dfn to dfndata/items/ and made house creation rely on the script entries therein. Optimized NPC walking a bit, and moved NPCWander handling into its own function. Further updated and modified calc_walk() and AdvancedPathFinding() to handle the Z plane. Removed CMovement::HandleRegionStuffAfterMove() as it was superfluous. Rewrote CMovement::OutputShoveMessage() to fix several minor issues. Updated CMovement::MoveCharForDirection() to reduce extra function calls and make use of CMapHandler::ChangeRegion() Added NEWBIE option to JS SET command. 3/18/2006 - grimson Fixed CHandleCombat::calcDamage() I was submitting the base damage to the defense calculation. 3/18/2006 - grimson Another change to CChar::Damage(), if the attacker becomes criminal make the owner of it criminal too. Changed CHandleCombat::ApplyDamageBonuses() so that elemental damage is doubled when the race is weak to that element, also double magic damage only on NPCs. Changed CHandleCombat::Kill() so that only not tamed animals eat their victims. 3/18/2006 - grimson Changed CChar::Damage() to also display the damage to the owner of the attacker, so a player can also see the damage his pet does. 18th March, 2006 - Maarc Removed some unused properties/methods of the console that have never been used Begun construction of some placeholder code for party related works, not committing the factory code until some testing can occur first Essentially, this just updates the handling for it which currently does nothing, and gives an insight into how it would be done 18th March, 2006 - Maarc Adjusted SE_ApplyDamageBonuses and SE_ApplyDefenseModifiers as they were using the same parameter for attacker and defender Updated documentation somewhat 3/18/2006 - grimson I only added part of the ApplyDefenseModifiers() and ApplyDamageBonuses() changes to CVS, fixed it now. 3/18/2006 - grimson Changed ApplyDefenseModifiers() and ApplyDamageBonuses() to make shure they return ints. Changed SE_ApplyDamageBonuses() and SE_ApplyDefenseModifiers() to fix invalid damage values when a script sends float values. Changed criminal() so it also takes the murderer state into account, as this overrides the criminal flag. JS: Updated MagicDamage() in level1targ.js, it now uses the new functions and should be equal to the source version of MagicDamage(). 3/18/2006 - grimson cScript::OnEquip() and cScript::OnUnequip() were adding the parameters in the wrong order. 3/17/2006 - grimson Changed AdjustRaceDamage() to also use the new ApplyDefenseModifiers() function. 3/17/2006 - giwo (0.98-3.5k [3.6 BETA]) Modified Gates so they are decayable by default, and will only decay if decayable. Updated GM and Counsellor privs in commands.dfn, also placed a bit guide for the PRIVS value. Fixed LoS checks on the Z plane in multis. Fixed an issue causing GM broadcasting (! then space) not to function. Removed some superfluous speech code. Changed the command YELLALL to YELL Removed several old DFN tags that were no longer used. Removed default PRIV=0 tag from baseitem.dfn, as it would unset decayable value. Changed PRIV1= tag to PRIV= in npc.dfn. 3/17/2006 - grimson Catch negative damage values in cMagic::MagicDamage() and apply 1 damage in that case. 3/17/2006 - grimson Moved defense modifications into CHandleCombat::ApplyDefenseModifiers(). Moved damage bonuses into CHandleCombat::ApplyDamageBonuses(). Moved the calculation of the hit location from CHandleCombat::DoHitMessage() into CHandleCombat::CalculateHitLoc(). Added ReactOnDamage() to CCHar, currently it only makes the char attack the char that inflicted the damage. Reduced CChar::Damage() to show, the damage, apply the damage, handle the reputation effect, the peace breaking effect and the chars death. JS changes: New JS functions: damage = ApplyDamageBonuses( damageType, attacker, defender, fightSkill, hitLoc, baseDamage ); Note: Attacker and defender need to be valid chars. damage = ApplyDefenseModifiers( damageType, attacker, defender, fightSkill, hitLoc, baseDamage, doArmorDamage ); Note: Attacker can be NULL, fightSkill will then be ignored. New char function: mChar.ReactOnDamage( damageType, attacker ); Note: damageType is currently unused. Changed char function: mChar.Damage( amount, attacker, doRepsys ); 17th March, 2006 - Maarc Changed the INI loading code so that it uses a Script rather than custom code 3/17/2006 - grimson Changed CPICreateCharacter::newbieItems() so that it uses the newbie.dfn entrys [DEFAULT MALE] and [DEFAULT FEMALE] to add the basic clothing to new chars, and added those entrys to newbie.dfn. Changed newCarveTarget() so that it uses the new [CARVE HUMAN] entry from carve.dfn to create the body parts, and added this entry to carve.dfn. Note: the second value used on the ADDITEM tags in the [CARVE HUMAN] entry is not an amount, it's the dictionary entry used for naming the body part. 3/16/2006 - giwo (0.98-3.5j [3.6 BETA]) Fixed an issue with AdvancedPathFinding() causing NPC's to flee constantly. Fixed an issue with NPC fleeing that checked against Strength rather than MaxHP. Defaulted weather damage to every 60 seconds (rather than every second) Fixed an issue causing a message to display damage taken by weather when no damage was taken. Fixed an issue with CRace causing a race with no elemental damage types to have most/all elemental damage types. Fixed a server crash in magic. Fixed an issue causing items in a paperdoll to not be targetable. Fixed an issue with LoS causing items to not block on a diagonal plane. Fixed an issue causing multi's not to block LoS. Minor fixes, cleanups, and optimizations to LineOfSight. Modified DoubleClick() so a character inside a multi can open an item outside a multi (as long as he can see it). 16th March, 2006 - Maarc Updated playDeathSound to simplify some of the code for males/females Updated code so that we don't use MFLAGGET/MFLAGSET - apparently we have a std::bitset class that we can use! Also makes it somewhat more readable as well. Cheers Punt for the suggestion. Renamed __ACCOUNTSADM_BLOCK__ to CAccountBlock Removed dead code from accounts (stuff that was just never called at all) Removed Get/Set Word/Bit/BitRange from CBO, as it's not being used Removed genericDWords from CBO, as they're not being used, and are largely superfluous with custom int/string tags in JS 3/15/2006 - giwo (0.98-3.5i [3.6 BETA]) Fixed an issue causing pet guarding on items in a house not to function. Fixed an issue causing boat items not to get added to the multi. Cleaned up CPIDoubleClick::Handle() routine. Fixed an issue allowing players to place their items in invalid locations. Fixed a possible issue causing doors to block LoS to themselves. 3/14/2006 - giwo Fixed a server crash caused by my recent changes to Location-Targeting spells. 3/14/2006 - giwo (0.98-3.5h [3.6 BETA]) Fixed a combat issue allowing enemies to fight if on the exact same location but a different Z. Modified guard handling so when guards are globally deactivated any existing guards will not teleport. Fixed an issue causing NPC's to be invisible. Fixed some issues causing items behind a door to be within a characters LoS. Adjusted erroneous Z values in house.dfn (Causing outer doors to not be part of the multi). Added a LineOfSight() check to prevent opening containers on the other side of walls. Modified the inMulti() routine to take into account tile height. Simplified newCarveTarget() a bit. Fixed a possible issue when calculating multi tile heights. Fixed an issue causing Characters to "fall" immediately after being placed on their new boat. Further cleanups and rewrites to CMulHandler and its related structures. 3/15/2006 - grimson Added PHYSICAL to WeatherType enum, so we can also use it represent physical damage. Changed CChar::Damage() to handle armor and resistance effects, it also handles the repsys, peace breaking, elemental weakness, displays the damage, creates a reaction if an attacker is given and calls CChar::Die() if the hp drop below 1. It takes the following values: SI16 damageValue - The amount of damage to be done. CChar *attacker - The char that caused the damage. bool doRepsys - Do reputation handling (criminal, murderer, karma and fame). WeatherType damageType - The type of damage, use NONE to ignore armor/resistance, use PHYSICAL to use normal armor, anything above is elemental damage. SI08 hitLoc - The hit location, use 0 for the complete body or -1 to randomly calculate the hit location. UI08 fightSkill - The skill used to create the damage. bool doArmorDamage - Damage the armor part that has been hit. The JS function .damage can also take all of these values. Changed CChar::Die() to handle the death of chars, it takes two values: CChar *attacker - The char that caused the death. bool doRepsys - Do reputation handling (murderer, karma and fame). Updated the usage of CChar::Damage() in most areas to reflect the changes and removed reputation and death handling in those areas as this is now taken care of by CChar::Damage(). 3/14/2006 - grimson Fixed item IDs for human corpses in newCarveTarget(). 3/13/2006 - giwo (0.98-3.5g [3.6 BETA]) Converted Numeric DFN's to a Signed Long rather than unsigned by default for *nix compatability. Merged jr's fixes for cygwin compatability and fixing some minor gameplay issues. Modified ModelBoat() to automatically move you off the boat (if near land). Fixed a crash bug involving boats. Changed several calls checking against type IT_PLANK to CanBeObjType( OT_BOAT ). Fixed an issue causing boat holds to "explode" when opening them. Fixed an issue causing containers inside containers on the ground to be "too far away". 3/13/2006 - grimson Changed CBaseObject::SetWeight() and CBaseObject::SetID() so they also update the weight of the container the item is in, when it is an item and when it is within a container. 13th March, 2006 - Maarc Altered the CBO resistances code to use an array rather than a number of variables Note that we're still only saving out a subset of these resistances, because only a subset ever get checked at the moment This could easily change in future, with people wanting to use other elemental stuff Adjusted CItem::CopyData() so that it copies all the WeatherDamage values instead of only a couple Upgraded the container size on weatherBools, as the number of weather entries has moved beyond a UI08 size 3/13/2006 - grimson Changed CPICreateCharacter::newbieItems() so that the default items aren't placed inside the players backpack until they have their final ID, to prevent the adding of wrong weight values. 3/12/2006 - grimson Changed the z value for various LineOfSight() calls so that we actually check whether we can see the face of the targeted char instead of his feets. 3/12/2006 - grimson Added element resistance calculation to weather damage. Fixed calcElementDef() and getElementDef() so that the chars basic element resistance is always added. Changed MagicDamage() so that we always do at least a little bit of damage. 3/12/2006 - grimson Removed DamageTypes enum and added POISON to WeatherTypes. Renamed DamageResist functions into ElementResist and moved them to cBaseobject.cpp. Renamed DFN tag DAMAGERESIST to ELEMENTRESIST and use it also for items. Added DFN tag POISONDAMAGE to items so that they can also do poison damage on attacks. Added functions calcElementDef(), getElementDef() and checkElementDef() to combat.cpp to calculate the resistance against elements similiar to the def value of armor. Changed AdjustRaceDamage() to also take into account the elemental resistance of the target. Use calcElementDef() in MagicDamage() similiar to calcDef() in calcDamage() to take the elemental resistance into account. 3/12/2006 - giwo (0.98-3.5f [3.6 BETA]) Removed CMulHandler::AverageMapElevation() as it was superfluous. Removed CTileUni height in favor of top, to reduce calc_walk() calculations. Removed CTileUni id as its use was unnecesarry. Rewrote CMovement::calc_walk() to improve overall readability and speed. Merged CMovement::calc_WaterWalk() with calc_walk(). Removed higher() as UOX_MAX() does the same thing. Removed CMovement::validNPCMove() as it was superfluous. Modified house placement to make it impossible to place a house on the ocean. 12th March, 2006 - Maarc Changed some id >= 0x4000 comparisons to CanBeObjType( OT_MULTI ), for clarity Fixed a bug with applying NPC sections where if you specified ALCHEMY values, it would fail to apply correctly 3/11/2006 - giwo (0.98-3.5e [3.6 BETA]) Fixed an issue causing items with no layer to not change the weight of a character. Fixed an issue causing spells that require a targeted location not to function. Fixed an issue allowing one to build a house or boat far from their location. Fixed an issue allowing one to build a multi directly on top of another multi. 3/11/2006 - giwo (0.98-3.5d [3.6 BETA]) Removed CChar::TempWeight() as it was superfluous. Fixed an issue causing Trade Windows to add weight to characters. Fixed some minor issues with weight calculations. Removed CChar:: bools2 and made more use of the bools value. Renamed CMapStuff to CMulHandler to better describe its function. Renamed MapStaticIterator to CStaticIterator to meet class naming standards. Renamed MultiItemsIndex to MultiItemsIndex_st to meet structure naming standards. Removed MapData_st fileSize as it was superfluous. 3/11/2006 - grimson Fixed a bug where buying the whole stock of an item deleted that item from the vendors container. 3/11/2006 - grimson Added new ini setting: USECHARRESISTANCE=# If this is set to 0 the chars resistance won't increase by itself. Slowed the increase of resistance quite a bit down. 3/11/2006 - grimson Added in first versions of fire, cold, energy and poison resistance, it's currently used in cMagic::MagicDamage() and cMagic::PoisonDamage(). You can set the resistance for npcs using a new DFN tag: DAMAGERESIST=# # # # Where the first number is fire, the second cold, the third energy and the last number poison resistance. The resistance for a damage type will rise everytime you get hit by this damage type, but the higher your resistance already is the slower it will rise. 3/11/2006 - grimson Removed version number for chars. Added .tempWeight JS property to chars, so you can safely modify the weight of chars in scripts. Added calcLowDamage() and calcHighDamage() functions to combat.cpp and use them in CPStatWindow::SetCharacter() to set the DamageMin and DamageMax values. 3/11/2006 - grimson (0.98-3.5d [3.6 BETA]) Added a version number to chars, it is defined in DEFCHAR_CHARVERSION and use it in CChar::DoVersionUpdates() to allow forced updates. Used this to force a weight recalculation on possibly bugged chars. 3/11/2006 - grimson Don't save the weight in cChar.cpp, it's already saved in cBaseobject.cpp. Fixed a bug where items without a layer didn't add to the chars weight. Fixed a bug in CWeight::calcCharWeight() that added the weight of the backpack twice. Changed CMapHandler::Load() so that PostLoadProcessing of chars is done after PostLoadProcessing of items, or else the forced recalculation of the chars weight doesn't work. 3/10/2006 - giwo (0.98-3.5c [3.6 BETA]) Modified CMapStuff SeekLand() and SeekTile() to return a reference rather than force one to pass an object to set. Modified CMapStuff SeekMulti() to return the length rather than force one to pass a value to set. Removed MapStaticIterator::GetTile() as it was superfluous. Removed CMapStuff IsTileWet(), DoesTileBlock(), and IsTileSurface() as they were superfluous. Removed CMapStuff TileMem and MultisMem, replacing them with functions to return the same data. Changed MultiItemsIndex lz and hz to SI08 values. Changed MapStaticIterator GetPos() to return an SI32. Removed MapStaticIterator tileid as it was superfluous. Modified UOXFile::eof() to return a bool rather than an int. Miscellaneous minor changes and cleanups. 3/10/2006 - grimson Added two sysmessage when feeding a pet. 3/09/2006 - giwo (0.98-3.5b [3.6 BETA]) Fixed a crash when using ClilocMessage(). Fixed an issue when climbing stairs. Fixed some issues with TriggerWord handling (more work needs to be done on this). Modified A* Pathfinding to work properly with our NPC's PathToFollow queue. 3/08/2006 - giwo (0.98-3.5a [3.6 BETA]) Began rewriting .mul file handling. Fixed an issue causing a possible crash with malformed JS scripts. Removed several superfluous functions from UOXFile class. Updated CTile and CLand to properly read in tiledata.mul Modified .mul file structures to meet struct naming standards. Changed static tile reading code to allow a variable number of statics. Fixed several issues with mapdiff and staticdiff handling. Added A* Pathfinding routine (note that it is not used in current code, as there are known compatability issues). 3/08/2006 - giwo (0.98-3.5) Fixed a possible issue caused by passing float values to JS func RandomNumber() 3/08/2006 - grimson Fixed CPIAllNames3D::Handle() so that SHIFT+CTRL actually shows the names of NPCs. 3/07/2006 - grimson Fixed LineOfSight() not working when you stand directly next to the target. Changed checkItemLineOfSight() so that it checks whether you can see the base or the top of the target item. 3/05/2006 - giwo (0.98-3.4w [3.5 RC]) Minor changes to the JS Handling. Modified UOXCFile handling to remove all props and added .EOF(), .Pos(), and Length() methods. Fixed an issue causing items not to dissapear when 'removed Fixed an issue causing characters to randomly dissapear around NPC's Fixed an issue causing items and characters to be updated when out of range. Fixed a VC2005 Compile issue. Included a default VC 2005 Project/Solution file. 5th March, 2006 - Maarc Updated loading code so that it displays a more accurate percentage during loading 3/05/2006 - giwo (0.98-3.4v [3.5 BETA]) Added the Script # to the JS Error Reporter to make debugging easier. Fixed an issue causing JS scripts to give useless error messages on server startup. Modified the region debug code to not default to on in debug mode. 3/04/2006 - grimson Changed cMovement::SendWalkToPlayer() so that the sequenz number fits the description in CPacketReceive.cpp. Changed CPIResyncReq::Handle() so that it actually does resend everything around the player. 3/04/2006 - grimson Added a new ini setting: COMBATARCHERRANGE=# This defines the range at which archers stop charging the target in combat. (Default is 7) 3/03/2006 - grimson Removed the IsSurface check of dynamic tiles from cMapStuff::CanMonsterMoveHere(), as many landscape tiles don't have the surface flag set. So it prevented valid spawns. 3/03/2006 - grimson It's better to recalculate and check the whole z coordinate of a stored location to make shure nothing has changed since we stored it. 3/02/2006 - grimson Added two maps to spawnregions to make checking for valid locations easier. Check if the z value of stored locations still match the dynamic z value of the current locations to track whether dynamics have changed. 3/02/2006 - grimson Added two vectors to spawnregions to store valid locations. You can define valid locations using the new DFN tags: VALIDLANDPOS=#,#,# VALIDWATERPOS=#,#,# Changed FindCharSpotToSpawn() and FindItemSpotToSpawn() so that they first check agains the list to see whether a location is valid. If the location is not in the list but valid it will be added to the list. If no valid location has been found it tries to get a random one from the list of already stored locations. 3/01/2006 - giwo (0.98-3.4u [3.5 BETA]) Fixed some issues caused by my previous changes to objects in mapregions. Fixed some issues when setting containers. Fixed an issue causing targeting cursors to sometimes target a character when the target should be invalid. Fixed an issue causing JS Gumps not to function. Added detailed packet logging to CPITargetCursor. Fixed a minor issue with axe.js 2/28/2006 - giwo (0.98-3.4t [3.5 BETA]) Added some additional debug messages to Region handling. Fixed a crash involving weather. Fixed an issue that would cause invalid objects to be left in mapregions. 2/28/2006 - giwo (0.98-3.4s [3.5 BETA]) Modified the JS Object creation to reduce memory waste. Made some minor modifications to CUSTOMSTRINGTAG and CUSTOMINTTAG handling. 2/28/2006 - grimson Updated cCharStuff::FindSpotForNPC() to also allow spawning of water and amphibian NPCs. 2/28/2006 - grimson (0.98-3.4r [3.5 BETA]) Replaced the WATERCREATURE tag from creatures.npc with a new tag: MOVEMENT=WATER for creatures that can only move in water. MOVEMENT=LAND for creatures that can only move on land. MOVEMENT=BOTH for creatures that can move on land and in water. Added calc_WaterWalk() function to movement.cpp and changed the calc_move() function so that it uses it for water creatures and amphibians. Added IsStaticWet() and CanSeaMonsterMoveHere() functions to mapstuff.cpp. Added FindCharSpotToSpawn() to cSpawnRegion.cpp and use it when spawning NPCs, renamed FindSpotToSpawn() to FindItemSpotToSpawn() and use it when spawning items. DFN changes: Updated creatures.dfn to use the new MOVEMENT tag. Updated tiles.dfn to set a water tile to wet that was missing that flag. 28th February, 2006 - Maarc Added archery/spell breakage on PC movement. If a player successfully moves, then the spell they are casting fails, or their archery shoot timer is reset. 27th February, 2006 - Maarc Updated code that uses |= and &= to use MFLAGSET and MFLAGGET instead, promoting them to a higher public level. Down to only a very few number of references like that now Updated the race code because it was getting out of sync with the WeatherTypes. The two were bound together in a number of ways, and it's now more generic and tied closer 2/26/2006 - grimson Added functions IsStaticSurface() and IsTileSurface() to mapstuff.cpp and use them in CanMonsterMoveHere() to prevent spawnregions from spawning NPCs in places where they can not move or shouldn't be able to move to, like display cases. 2/26/2006 - giwo (0.98-3.4q [3.5 BETA]) Fixed some areas that could possibly cause MapRegion corruption. Fixed a VC 2005 Compiler warning. Defaulted CreateItem() to set decayable to true. 2/25/2006 - giwo (0.98-3.4p [3.5 BETA]) Added some example usages of ClilocMessage(). Added support for packet 0xC1, sending cliloc messages. Added two ClilocMessage() functions, one for direct-to-socket (system) messages, and one for object-speech (to a socket or to all sockets in range). 2/26/2006 - grimson Modified cCharStuff::addRandomLoot() so that loot lists can contain links to other loot lists. DFN changes: Changed the the numbers in the LOOT tags of NPCs to random lootlist entrys. Fixed some GET tags in the armor dfns that were pointing to non existant items. 2/26/2006 - grimson Added a line of sight check to the isValidAttackTarget() function in ai.cpp so NPCs won't attack targets they can not see. 2/25/2006 - grimson (0.98-3.4o [3.5 BETA]) Added another new JS property for chars: .setPeace=# This handle the whole peacemaking effect, it will stop the char from attacking and prevent him from attacking again until the given time is over or he got enough damage. Updated the peacemaking.js to use the new property and to prevent peacemaking from affecting the char using it. Output a sysmessage to PCs informing them of the end of the peace effect. (Dictionarys again) 2/25/2006 - grimson Changed CHandleCombat::HandleNPCSpellAttack() to prevent NPCs from using spells when they are not allowed to attack. Changed cMagic::SelectSpell() to prevent PCs from using spells when they are not allowed to attack. Note: This doesn't effect JS implemented spells, use the .canAttack property in them to prevent the use of these spells. Output a sysmessage to PCs informing them that they can not attack. (updated Dictionaries) 2/25/2006 - grimson (0.98-3.4n [3.5 BETA]) Changed CChar::WearItem() to not fire the onEquip event on world loads. Modified the TOPEACE tag so it can take a second value that sets the chance gain to recover from peacemaking upon hits. Modified cMagic::MagicDamage() and CHandleCombat::HandleCombat() to recover from peacemaking by calculating a chance using the chance gain set on TOPEACE and the number of hits. Added two new JS propertys for chars: .canAttack Set this to 0 to prevent a char from attacking. .brkPeaceChance Gets and Sets the chance gain to recover from peacemaking. Modified the .skillToProv and .skillToPeace propertys so they return the value of the corresponding skill for player chars. 2/25/2006 - grimson Fixed a bug that allowed health regeneration while the char was starving. Moved the bools for the fixed maxHP, maxMana, maxStamina into a bitmask. 2/25/2006 - grimson (0.98-3.4m [3.5 BETA]) Changed the default of totame to 0x7FFF and allowed taming of NPCs with a value of 0. Changed DFN tags MANA and STAMINA so you can set a minimum and maximum value. Added new DFN tags: MANAMAX, STAMINAMAX They work equal to the HPMAX tag. TOPROV, TOPEACE They set the minimum skill amount to provocate or peace a NPC. Added new JS propertys: .skillToProv Can be used to get/set the amount of skill needed to provocate a NPC. .skillToPeace Can be used to get/set the amount of skill needed to peace a NPC. changed JS propertys: .maxstamina and . maxmana now work equal to the .maxhp property. Added the new JS propertys to the set command. 2/24/2006 - giwo (0.98-3.4l [3.5 BETA]) Modified OnIterate() to de-allocate any JSObject it uses to free wasted memory. Merged all boolean values in cServerData to a single UI32 using bitmasking. 24th February, 2006 - Maarc Updated bitmask setting/getting code for CChar, making it a bit more friendly and less error prone Fixed a bug with rugs_carpets.dfn where a closing bracket was missing for object 0x1e41 2/23/2006 - giwo (0.98-3.4k [3.5 BETA]) Fixed a crash when shutting down the server. 2/23/2006 - giwo (0.98-3.4j [3.5 BETA]) Fixed some issues with Multi and Static height calculations. Moved Definition of global JS classes into CJSRuntime. Locked the JS Class prototypes for Garbage Collection purposes. 2/23/2006 - giwo (0.98-3.4i [3.5 BETA]) Fixed an issue causing players to not disembark boats properly. Fixed an issue causing boat holds not to be made part of the multi. Updated the INI loading code to make it more verbose. Removed "Golden" health until we know when (if ever) OSI uses it. Created a new class, CJSEngine along with the files CJSEngine.cpp/.h Created a new class, CJSRuntime to allow multiple runtimes (for threading purposes). Moved JSObject creation and handling into CJSRuntime. Moved global JS Context and Runtimes into CJSRuntime. Moved JS Engine loading code into CJSEngine. Modified cScript so all JS Scripts on a runtime share a single context. Removed global.cpp from the project. 2/23/2006 - grimson Added a Dirty( UT_LOCATION ) to HandleDeath() in pcmanage.cpp to make shure the player gets properly updated when he dies. 2/23/2006 - grimson Changed TurnStuff() in boats.cpp to fix players getting stuck when turning the boat. 2/23/2006 - grimson (0.98-3.4h [3.5 BETA]) Prevent spamming of weather packets when riding a boat. Added a quick fix to the inMulti() function to make boats workable again. Changed the HP and HPMAX tags so that you can set a minimum and maximum value. Removed the IsMounted() function and replaced all it's calls with the GetMounted function. Allow a food list to contain a link to another foodlist. 2/23/2006 - grimson (0.98-3.4g [3.5 BETA]) Added three new ini settings: PETHUNGEROFFLINE=0/1 Sets whether pets should hunger while the player is offline or not. PETOFFLINETIMEOUT=# Sets the offline time of a player in days after that a pet becomes wild again. PETOFFLINECHECKTIMER=# Sets the intervall in seconds between checks for the player offline time. Added 2 new NPC values to CChar to state whether the char has been mounted or stabled and check those in the DoHunger() and the new checkPetOfflineTimeout() functions. And made them available to the JS engine as the 2 new propertys: .mounted Can be used to get or set the mounted status .stabled Can be used to get or set the stabled status 2/22/2006 - grimson Fixed a bug in CBase_Teleport() introduced by my earlier changes that caused teleports to other worlds to fail with big x and/or y coordinates. 2/21/2006 - grimson (0.98-3.4f [3.5 BETA]) Changed JS function CBase_Teleport() to prevent player chars from being teleport into a invalid world which rendered the player char useless as the client cannot login using that char afterwards. Changed CheckCharInsideBuilding() to prevent a harmless error message when mounting a mount. Tweaks to the new hunger system: Tamed chars only hunger while the player that tamed them is online. Tamed mounts don't hunger when they are mounted by a player. 2/21/2006 - grimson (0.98-3.4e [3.5 BETA]) Third part of the rewrote hunger system: Added a new AI type "aiANIMAL" with the number 6. This AI does nothing until the hunger level reaches a value of 4, then it looks for other animals, that don't have the aiANIMAL, and attacks them. If the hunger level goes below 2 it will attack everything in range, even player chars. If the animal kills it's target it's hunger level will be set to 6 again. Added 3 new JS propertys for chars: .tamedHungerRate returns or sets the rate the char hungers when it is tamed. .hungerWildChance returns or sets the chance of the char becoming wild if it's starving. .foodList returns or sets the name of the foodlist for the char. DFN Changes: Changed animals.dfn, added NPCAI=6 to all animals belonging to the race Predator. Changed races.dfn, all members of the race Predator change their hunger level every 300 seconds and get damaged for 5 points when starving. 2/21/2006 - grimson (0.98-3.4d [3.5 BETA]) Changed cCharStuff::addRandomLoot() to look for the lootlist inside the items folder because it is there. Second part of the rewrote hunger system: Added a new DFN tag for tamed pets: FOOD=abc This sets the name of the foodlist for the tamed item. Added a new list type for items: FOODLIST Defines a list of item IDs a tamed char will accept as food. DFN Changes: Added a new file foodlists.dfn to the items folder containing an example list for horses. Added the horse foodlist to mounts.dfn. 2/21/2006 - grimson (0.98-3.4c [3.5 BETA]) Do an immediate update of the charflag and the char upon taming and un-taming. First part of the rewrote hunger system: Moved hunger calculations and immediate effects to CChar::DoHunger( ) You can now set hunger dependend on races, this uses a new tag in races.dfn: HUNGER=#,# the first value is the hunger rate the second the hunger damage. Note for players char the settings from the uox.ini apply if there are no settings specified for the race. Re-activated the pet-hunger system. Pets will now become hungry and upon starving there is a configurable chance that they may become wild again. Note: Pets won't die from hunger and their hunger value is reset after becoming wild again. The hunger rate and the chance to become wild again can be configured by a new tag: TAMEDHUNGER=# # the first value is the hunger rate, the second the chance in % of the pet becoming wild again. Note: The values are seperated with a space instead of a comma on this tag. To feed a pet just drag some food on it, currently all types of food work. There is also another new DFN tag: WILLHUNGER=# if this is set to 0 the NPC will not suffer from any type of hunger. Note: You can also change that value for specific chars by using the already existing .willhunger JS property. DFN Changes: Added the HUNGER=#,# description to the header of races.dfn. Added the TAMEDHUNGER tag to mounts.dfn with a hunger rate of 600 and a chance to become wild of 30%. 2/21/2006 - giwo (0.98-3.4b [3.5 BETA]) Added AssocScript tag to effect saving (to make JS timers persistant). Updated JS .SetPoisoned() to take one value for changing a poison value without setting a new timer. Updated healing.js and made it function entirely in JS. Removed tempeffects case 14, 22, 23, and 24, as they are handled by JS now. Made items created with JS CreateBlankItem() decayable by default. Fixed some issues with axe.js, put tree-chopping on a timer with a skill delay. Fixed several issues where items were not decayable that should be. Defaulted JS CreateBlankItem() to set items to decayable. 2/20/2006 - giwo (0.98-3.4a [3.5 BETA]) Added carpentry, tinker, leather repair, bow repair, bandage, sewing kit, mortar, and archery butte ID's to js_objectassociations.scp Corrected an issue causing Create menu's to double up when reloading the DFN's. Added a check to ensure a character has a backpack when coloring the "Pack" option in the popup menu. Fixed an issue causing character paperdolls to have incorrect spacing. JS Method .SetTag() now accepts boolean values (true/false). 2/20/2006 - giwo (0.98-3.4) Fixed an issue causing possible account corruption. 20th February, 2006 - Maarc Added two functions to the JS engine for characters, Heal() and Damage() void Damage( amtDamaged, [attacker] ); void Heal( amtHealed, [healer] ); The second parameters are optional, but basically it ensures that any change through here is tracked 2/19/2006 - giwo (0.98-3.3v [3.4 RC]) Fixed a minor issue with regions.dfn causing Yew not to be considered a town. Added ability to xgate to a specific x, y, z. and worldnumber Fixed a minor issue with teleporter.js. Updated TeleportLocations to teleport any players pets that are inrange with them. Fixed a minor issue with Moongates teleporting Pets. Fixed a compiler error in VC 2003 caused by fabs(). Note that using fabs() should only be used with floats & doubles. Updated the grizzly and polar bear entries in creatures.dfn to have the proper sounds. Modified HandleCombat() so the target has a chance to gain Tactics when hit. Gave armor a 50% chance not to be damaged when successfully hit. Reduced armor damage to 0-1 points (rather than 0-2) when hit. Updated Towns to be escort regions by default in regions.dfn 2/20/2006 - grimson cMovement::SendWalkToOtherPlayers() didn't check if the chars are in the same world, added this now. 2/19/2006 - grimson (0.98-3.3u [3.4 RC]) Renamed HandleWeatherChanges() to CheckCharInsideBuilding() as it is more apropriate. Stopped weather effects affecting ghosts of death players. Partially rewrote cMovement::SendWalkToOtherPlayers to correctly send chars and remove them from sight. Changed CPExtMove::CopyData() so the running state of player chars is correctly send. 2/19/2006 - grimson (0.98-3.3t [3.4 RC]) Changed HandleWeatherChanges() so it updates the weather values of NPCs too. Changed reading the SNOWINTENSITY, RAININTENSITY and STORMINTENSITY in weatherab.dfn so that you can set a min and max value for the damage percent. See the examples in the updated weatherab.dfn. Added two new values to weatherab.dfn: STORMTEMPDROP this sets the amount the temperature drops when there is a storm RAINTEMPDROP this sets the amount the temperature drops when it is raining. 2/19/2006 - grimson (0.98-3.3s [3.4 RC]) Fixed multiple issues in LineOfSight() that caused miscalculations of the coordinates that should be checked. Added line of sight checks to CPIPopupMenuRequest::Handle(), CBaseVendorResponse::CBaseVendorResponse() and CPIDblClick::Handle() to prevent people from using items and vendors through walls. 2/18/2006 - giwo (0.98-3.3r [3.4 RC]) Updated the SkillCheck in HandleCombat() to be based upon the defenders tactics skill. Updated Skills::SkillCheck() to have a chance of success based upon the maximum skill + 100, rather than 1000. Fixed several issues causing spellbooks not to display properly. Fixed an issue causing Strength, Dexterity, and Intelligence to permanently drop when they are temporarily lowered. Updated skills.dfn a bit to improve skill gain between levels 0.00 and 1.00 Added two new shield ID's to CItem::IsShieldType(). Added spacing after fame titles to fix a paperdoll display issue. 2/18/2006 - grimson Fixed a small bug that prevent a storm from ending. 2/18/2006 - grimson (0.98-3.3q [3.4 BETA]) Stopped saving the weather type in regions.wsc, this prevented changes from regions.dfn to apply. Make use of the SNOWINTENSITY, RAININTENSITY and STORMINTENSITY from weatherab.dfn, they are now used in calculating the damage a char takes from these elements. The damage is scaled by calculating a random number between 0 and the intensity, this number is then used as a percent value against the damage value in races.dfn. 2/17/2006 - giwo (0.98-3.3p [3.4 BETA]) Fixed an issue causing the Snooping skill not to function. Fixed an issue causing GM Polymorph Menu not to function correctly. Fixed an issue causing Doors not to be added to the house they were part of. Moved the Multi check to containers specifically rather than on any item use, to enable use of house signs and doors from outside. 2/17/2006 - giwo (0.98-3.3o [3.4 BETA]) Fixed an issue causing characters to randomly fall through house floors. Added a check to ensure a character cannot open a container unless he is in the same house it is. Removed JS Function RaceGate() as CChar property .race does the same thing. Removed JS Function SubStringSearch() as .match() does the same thing. Removed JS Function ConsoleMessage() as Console.Print() does the same thing. Removed JS Function ScriptPrintNumber() as Console.Print( number.toString() ) does the same thing. Removed JS Functions GetCommand() and GetCommandSize() as they were superfluous. Removed JS Functions CreateBuffer() DestroyBuffer() and SendBuffer() as the new Packet class handles that. Removed JS Item & Character property .raceID as .race does the same thing. Removed JS Item & Character property .privateword. Added a blank deed to items.dfn. 2/17/2006 - giwo (0.98-3.3n [3.4 BETA]) Moved Skills::TinkerAxle out to JS. Moved Skills::TinkerAwg out to JS. Moved Skills::TinkerClock out to JS. Moved TinkerSextant functionality out to JS. Removed several item types from itemtypes.dfn as they are now handled by JS. 2/17/2006 - grimson (0.98-3.3m [3.4 BETA]) Light and weather effects now also work on NPCs. Added 3 new JS events: onLightChange( mChar, lightLevel ) onWeatherChange( mChar, weatherId ) onTempChange( mChar, temperature ) These events also work on the global script id and get called for players and NPCs. 2/17/2006 - grimson (0.98-3.3l [3.4 BETA]) Rewrote the doLightEffect() function, it now uses the current light level to scale the light damage, it also respects the LIGHTLEVEL setting from races.dfn and it will stop doing light damage if you are inside a building. Added a the possibility that a char gets hit by a lightning during a storm, this is controlled by the LIGHTNINGAFFECT, LIGHTNINGDAMAGE and LIGHTNINGCHANCE settings in races.dfn. Added storm to the IsRaceWeakToWeather() JS function. 2/17/2006 - grimson Fixed some bugs in calculating the heat/cold damage in doWeatherEffect(). Rain now lowers the current temperature by 5, a storm by 10. Moved the sending of the light level and weather status from startChar() into CChar::Teleport() by adding a force forceUpdateLight option to checkRegion(). 2/17/2006 - grimson (0.98-3.3k [3.4 BETA]) Added cMapStuff::inBuilding() function to determine wheter a given set of coordinates is inside a building. I does this by checking whether there is a static or multi above the coordinates. Added inBuilding() and SetInBuilding() functions to CChar and set it on movement and teleport. Use the new inBuilding() function to stop/start weather effects as soon as a player enters or leaves a building. Send the light level and weather status directly after a player log's in. 2/16/2006 - grimson Changed cWeatherAb::DoPlayerStuff() to reset weather effect timers if needed. 2/16/2006 - grimson (0.98-3.3j [3.4 BETA]) Fixed VC6 build errors (thanks to giwo). Wrote all available race settings into the header of races.dfn and documented a few of them. Rewrote parts of the weather system: Added weather type storm. Heat wave and cold snap are calculated once per uo day and set the temperature to a fixed value between MAXTEMP and HEATINTENSITY resp. COLDINTENSITY and MINTEMP. Storm, Snow and Rain are calculated oncer per uo hour. Rewrote doWeatherEffect() to better seperate the different weather effects and to change the way they are calculated. Added new settings to races.dfn: HEATLEVEL - Sets the minimum heat at which the race get's damaged. COLDLEVEL - Sets the minimum cold at which the race get's damaged. STORMAFFECT - Defines if the race is affected by a storm STORMDAMAGE - Defines the damage a race takes from storm STORMSECS - Defines the interval at which the races takes damage from a storm. 16th February, 2006 - Maarc (0.98-3.3i [3.4 BETA]) Committed some fixes to giwo's last commit (missed some changes in cScript.cpp that was blocking people from compiling) Removed a lot of commented stuff. Dead code that's not used any more and things like that have been reduced Begun damage/healing tracking support. All places in C++ code should be covered (will need to update JS engine). Healing and damage is now tracked per character, so that they can find out who has damaged/healed them the most. If healing/damage hasn't occurred in the past 5 minutes, they get taken off the list An offshoot of the damage tracking stuff is a change to combat. Fame/karma/kills has been moved into CBaseObject, because in future, we'll look at tracking fame/karma/kills updates for weapons and armour (so if you kill repeatedly with a sword, the sword's kill count increases) Much of the fame/karma/kills stuff isn't done, and currently, we don't take advantage of the damage tracking. Future progressive updates will help with karma/fame parcelling on death, and to help NPCs make smarter decisions in combat Broke out packet 0xBF into a CPI class of it's own. Rather than making it a huge monolithic class, it internally hands it off to other packet handling classes 2/15/2006 - giwo (0.98-3.3h [3.4 BETA]) Marked StringToNum(), NumToString(), NumToHexString() for later deletion, please use built-in JS method .toString() and function parseInt() in their place. Updated all JS files to use toString() and parseInt(). Implemented JS props .stone and .master for Guilds. Removed the following JS functions as they are superfluous. IsRegionGuarded CanMarkInRegion CanRecallInRegion CanGateInRegion GetGuildType GetGuildName SetGuildType SetGuildName SetGuildMaster GetNumGuildMembers GetGuildStone GetTownMayor GetTownRace SetTownRace GetTownTax GetTownTaxResource SetTownTax SetTownTaxResource 2/15/2006 - giwo (0.98-3.3g [3.4 BETA]) Changed create.dfn handling so ID's of 0 (default) display nothing on the gump. Updated create.dfn menu's with "Previous Menu" entries. Removed resource counts before launching create menu's, as the create menu handles that. Added LEATHER resource type for create.dfn Added cloth ID's to CLOTH resource type. 2/15/2006 - grimson Fixed 3D client crashes with CChar::talkAll() and CChar::talk(), when the text color is 0x0000 it will be set to the default of 0x5A. Changed cMagic::MagicDamage() again, so that the murder count is increased when needed and NPCs fight back when they get attacked with a spell. Fixed the text message of the evaluating intelligence skill. 2/15/2006 - giwo (0.98-3.3f [3.4 BETA]) Moved Lockpicking skill out to JS. Fixed an issue causing newbie clothing to be dropped on the ground if the character had scripted starting armor. Added Multiple-ID resource handling for create.dfn. Fixed some create.dfn items that had overlapping numbers. 2/14/2006 - grimson (0.98-3.3e [3.4 BETA]) Added a rounding function for numbers and use it in the doLight(), command_getlight() and doWorlLight() functions. Moved WillResultInCriminal() from combat.cpp to uox3.cpp as it is not limited to combat situations. Changed cMagic::MagicDamage() so that attackers can become criminal and murderers. Changed CHandleCombat::StartAttack() so that attacking NPCs can become criminal. 2/14/2006 - grimson Changed the number for British weather because it was the same as the Southern Montain. 2/14/2006 - grimson Changed the checkRegion() function to prevent useless guard messages when you go from one unguarded region to another unguarded region. Made a few changes to regions.dfn. Changed the getlight command, so it returns the correct value when the region has a weather system. 2/14/2006 - grimson Changed CWorldMain::doWorldLight again, so the light level will actually reach the LIGHTBRIGHTLEVEL and LIGHTDARKLEVEL values. 2/14/2006 - grimson Removed checkRegion() from startChar() as it isn't needed. Fixed the GM Locations menu in travelmenu.dfn so you can travel to the jail cells again. Fixed the release time check in JailCell::PeriodicCheck(). 2/13/2006 - grimson (0.98-3.3d [3.4 BETA]) Made shure to start world timers on server startup. Changed startChar() to do a checkRegion() directly after a login. Changed CWorldMain::doWorldLight to actually take the current time into account when calculating the light level. 2/14/2006 - grimson Added the dungeons to the regions.dfn, so LIGHTDUNGEONLEVEL from the ini is correctly applied to them. 2/13/2006 - giwo (0.98-3.3c [3.4 BETA]) Fixed an issue causing stats to almost never increase. Modified skills.dfn SKILLPOINT to use ,'s for seperators. Added an additional option to SKILLPOINT to specify for each level how much skill to gain on success. Moved Meditation skill out to JS. Moved Inscription skill out to JS. Removed EngraveAction() as it did not function and custom skills can be added in JavaScript. Moved MAKESHOP command out to JS. 2/12/2006 - giwo (0.98-3.3b [3.4 BETA]) Modified DFN reloading so it reloads teleport.scp as well. Modified CheckSkill() so GM's can now gain skills by using them. (Note they will still never fail). Added NPCMOVEMENTSPEED to the UOX.ini to allow customization of NPC movement speeds. Changed CORPSEDECAYTIMER to default to 900 seconds, and made use of it in CreateCorpseItem(). Removed CServerData::PlayerCorpseDecayMultiplier() as it had no matching uox.ini entry. Added JS character property .attackFirst Moved Peacemaking skill out to JS. Moved Musicianship skill out to JS. Moved Enticement skill out to JS (Note that OSI seems to have replaced this with Discordance). Moved Provocation skill out to JS. 2/12/2006 - giwo (0.98-3.3a [3.4 BETA]) Fixed an issue causing Large Dragon Ship deeds to not function. Stopped CChar from saving HP as CBaseObject handles saving hitpoints. Removed GetItems() as it could cause data corruption. Modified getItem() and findItem() a bit and renamed them to GetItemAtXYZ() and FindItemAtXYZ() Fixed some issues with pitcher.js Fixed some minor cooking issues, and removed cSkills::HandleCooking() as JS now handles cooking. 2/12/2006 - grimson Added another JS function: GetItems( x, y, z, world, range) - returns a list containing all items withing "range" of the given coordinates in the given world. You can go through the list by using the FirstItem()/NextItem()/FinishedItems() syntax. 2/12/2006 - grimson Added two new JS functions: FindItem( x, y, z, world, id) - returns the item with the "id" that is on the "z" level and closest to the coordinates of x and y. Or NULL if no item is found. GetItem( x, y, z, world) - returns the item that is on the given coordinates or NULL if there is no item. 2/12/2006 - grimson The current HP and (if present) the fixed maxHP will now be saved on worldsaves. Added two new DFN tags for NPCs and Items: CUSTOMSTRINGTAG and CUSTOMINTTAG with them you can specify custom tags inside the DFNs and use them in JS scripts. 2/11/2006 - grimson Updated the CPUpdateStat function to use the GetMaxHP, GetMaxStam and GetMaxMana for sending the respective values instead of sending the strenght, dexterity and intelligence values. 2/11/2006 - giwo (0.98-3.3) Added 'set DEF (items), ARMOR (chars), and LAYER (items) commands. Modified 'setscptrig so it accepts 0 as a value even if no script 0 exists. 2/11/2006 - grimson (0.98-3.2r [3.3 RC]) Added fixed maximum HP for chars. You can set it by a new dfn tag "HPMAX" or by the .maxhp JS property. Setting a negative value via the .maxhp JS property will reset the fixed value. Updated the set command to make use of the .maxhp JS property. 2/11/2006 - grimson Removed teffect.cpp from the VC6 workspace, as it no longer exists. Modified the flags of display cases via the tiles.dfn to prevent NPCs from walking on them. 2/11/2006 - giwo (0.98-3.2q [3.3 RC]) Added JS property .isShop to transform an NPC into (and back from) a shopkeeper. (Grimson) Fixed some issues causing flagging not to be updated after setting flags in JS. Added error-checking when an invalid script entry is called with the GET tag. Modified AR statwindow reporting to give larger numbers. Updated some DFN armor defense ratings in items/gear/armor/ 11th February, 2006 - Grimson (committed by Maarc) Fixed a bug with IsNeutral/SetFlagNeutral not comparing against the same flag type Fixed a bug where the wrong flag number is sent to the client for Neutrals 2/10/2006 - giwo (0.98-3.2p [3.3 RC]) Re-added IsNeutral() Character flag as well as .neutral JS character property. Fixed an issue causing items to "bounce" when being dropped on the same character they were picked up from. Fixed an issue causing Ghosts to be bugged after a server restart. Modified newbie item creation so scripted items take precedence over default clothing. 2/09/2006 - giwo (0.98-3.2o [3.3 RC]) NPCFlag now saves to the worldfile. Fixed an issue causing neutral animcals to never appear innocent when in town. Fixed an issue causing tamed animals to not carry their owners flag. Added support for invulnerable (yellow) flagging. 2/09/2006 - giwo (0.98-3.2n [3.3 RC]) Overhauled the character flagging system: Added FlagColors enum. Renamed setcharflag() to UpdateFlag(). Rewrote FlagColour() to make use of an enum and made it part of CChar. Made use of CChar::FlagColour() in several areas where we were doing the work manually. Added CChar SetNPCFlag() and GetNPCFlag() alond with cNPC_FLAG enum. Removed CChar IsNeutral() and SetNeutralFlag(). Fixed an issue causing CChar Flagging functions not to return proper values. Replaced Dfn tag NEUTRAL with FLAG= the options for which are NEUTRAL, INNOCENT and EVIL. Replaced JS character property neutral with npcFlag, for which the values are 0 = NEUTRAL, 1 = INNOCENT, 2 = EVIL. Broke DropOnItem() into several smaller functions. Updated all instances of NEUTRAL in the dfn's to FLAG=NEUTRAL Added some FLAG=EVIL, FLAG=INNOCENT, and FLAG=NEUTRAL tags to appropriate NPC's 2/08/2006 - giwo (0.98-3.2m [3.3 RC]) Fixed an issue causing ID and Type-based JS scripts not to run if an object had a script associated with it. Fixed an issue with SetTag() causing 0 and null values not to unset the tag. Fixed some wierdness when using the Delete() property in JS. Minor updates to autoStack(). Fixed some issues with dropping items on other items in packs. 8th February, 2006 - Maarc Fixed wholist so that the stats link now works from it 2/08/2006 - giwo (0.98-3.2l [3.3 RC]) Fixed a minor issue with saving tempeffects. Fixed an issue causing objects not to default to script ID 0 (global script). Added onDeathBlow( pKilled, pKiller ) JS event. Minor code cleanups. 2/07/2006 - giwo (0.98-3.2k [3.3 RC]) Added spawn.dfn tag PREFZ=, this sets the maximum Z influence dynamic and static items can have on spawning. Incorporated Grimsons fixes to CSpawnRegion to allow NPC's to spawn at the proper Z based on the static and dynamic items at their location. 2/07/2006 - giwo (0.98-3.2j [3.3 RC]) Replaced CTEffectContainer with a call to CDataList. Fixed multiple issues causing temporary effects to randomly never expire. Fixed an issue causing mana never to regenerate completely in certain circumstances. Minor const correctness and signed/unsigned mismatch changes. Removed MOVETYPE= world tag from boats, as they should always start sitting still. Added a check to ensure a boat stops moving if all characters onboard leave a moving boat. Added TEMPSTR/TEMPSTRENGTH TEMPDEX/TEMPDEXTERITY and TEMPINT/TEMPINTELLIGENCE options to the SET command. 2/06/2006 - giwo (0.98-3.2i [3.3 BETA]) Added some error checking to the INFO command to ensure it is not used on characters. Fixed an issue causing deeds (and other items) not to display their custom names. Modified the stealth skill spam to conform to OSI messages. Fixed an issue causing the POLY command to change ones skin color. JS Changes: Added character props .orgID and .orgSkin Changed the behavior of character props .id and .skin not to set their org* equivalents automatically. 6th February, 2006 - Maarc Moved maps_def Disposal to the end of CMapStuff::Load() Added the ability to override tiledata info for real tiles (not land) Bit of const correctness (CTile.Name( const char *newVal )) 2/05/2006 - giwo (0.98-3.2h [3.3 BETA]) Fixed a possible exploit with secure trading. Fixed an issue causing it to be impossible to remove characters from a house ban list. Fixed a server crash caused by transfering house ownership. Updated the NPC Pathfinding code to fix some issues. Added a check to ensure boat items are only moved once when boats sail. 2/04/2006 - giwo (0.98-3.2g [3.3 BETA]) Fixed an issue causing multis to calculate their size incorrectly (causing boats to drag objects not aboard). Updated mapstuff.cpp to fix some signed/unsigned mismatches. Rewrote killTrades() so it would function properly and called it when a player Logs out. Disallowed GM's to drop items directly on logged out players (note they can still place items in packs), as it was causing other bugs in the client. Documented trade.cpp 2/03/2006 - giwo (0.98-3.2f [3.3 BETA]) Rewrote trade windows so they now function properly (Note that if you log out with a trade window open, the client will crash). Disabled the LoginThread as it was causing crashes and other issues. Minor changes to const correctness in skills.cpp Modified packet logging to slim down file size and make it more readable. Fixed an issue causing logged out characters be visible to those around them. 2/02/2006 - giwo (0.98-3.2e [3.3 BETA]) Fixed an issue causing the statwindow not to update properly (thus not showing the proper weight/gold values). Continued to break LineOfSight() into smaller manageable functions. Removed superfluous Add()/Remove() functions from CMapHandler. 2nd February, 2006 - Maarc Changed a call to _hypot, as it wasn't portable. hypotf is the portable ANSI C, but it didn't work, so rolled our own (simple sqrt of the sum of two squares) Made some changes to the enumeration JSObjectType, because gcc 3.3.5 was chucking a wobbly over some code Changed a call to _strnicmp to strnicmp to deal with a linux compile error - note, we probably don't want to use such things anyway ... convert both strings to a UString, lower() them, and compare the subsets requested? 2/01/2006 - giwo (0.98-3.2d [3.3 BETA]) Fixed an issue causing the server to randomly crash when sailing for prolonged periods of time. Removed an extra RemoveFromSight() packet sent upon item deletion. Removed items from the MapRegion upon deletion. Added CMapHandler::ChangeRegion() to automatically change an objects region when location changes. 1/31/2006 - giwo (0.98-3.2c [3.3 BETA]) Fixed an issue causing boat commands to crash the 3D client. 1/30/2006 - giwo (0.98-3.2b [3.3 BETA]) Fixed an issue causing multi's to contain themselves Added some error checking to ensure a multi cannot be placed inside another multi. Fixed an issue causing items and characters on boats to move multiple spaces. Fixed an issue causing boats to lock the client. 1/30/2006 - Xuri Added missing hairstyle (spiked) for female elves 1/29/2006 - giwo (0.98-3.2a [3.3 BETA]) Fixed several issues with CPOpenBuyWindow fixing an issue causing items in buy windows to display improperly. Fixed an alignment issue with CPItemsInContainer logging. Removed CItem::Sort() as it is now superfluous. Moved CItem::WalkXY() to CBaseObject. Minor updates to cSkills::RandomSteal(). Removed JS items[]. access. 29th January, 2006 - Maarc Encapsulated JS class name retrieval into JSEncapsulate and switched over to using that everywhere Fixed a potential bug (or at least, a naughtiness) with CBase_Teleport, with premature casting Fixed a bug where if ApplySection() was called with an empty string, it wouldn't abort correctly (JS Engine) Fixed a possible issue with Karma(), where we reset on caps, but don't update our calculations Added necromancy, focus, chivalry, bushido and ninjitsu to skills in JS engine 1/28/2006 - giwo (0.98-3.1i [3.2 RC]) Fixed some minor issues with LineOfSight(). Began to break LineOfSight() into smaller manageable functions. Renamed SeekMap0() to SeekMap() to better represent it's ability to seek any map file. More fixes for const correctness. 1/28/2006 - giwo (0.98-3.1h [3.2 RC]) Fixed a minor bug in healing.js Made use of the JS Method CanSee() for LoS checks in JS magic functions. Minor code change in tempeffects(). Updated the version number to reflect recent changes by Maarc and Xuri. Fixed an issue causing JS Skills not to function if a character had a script assigned to him. 1/28/2006 - Xuri Some fixes for the onHungerChange code to ensure UOX3 doesn't crash when no global script is defined (Grimson) Added isAnimal and isHuman as JS character properties. (Maarc) Fix in Line of Sight-code makes line of sight-checks more reliable (giwo) 1/27/2006 - Xuri OnHungerChange JS event will now execute both for hunger level increase as well as decrease, and will also work as global script (Grimson) 1/26/2006 - Xuri Hungercheck for players should now be working again (Grimson) 26th January, 2006 - Maarc Fixed a bug with clumsy JS (visibility not resetting properly) Added JS implementation for heal and feeblemind Added JS implementation for magic arrow, but it relies on MagicDamage(), which is not completely implementable (missing Karma, Fame and CPDisplayDamage) Added a ValidateObject() function to the JS engine, that behaves the same as it does in the C++ code Updated 'set command to support setting of health (via health or hp) NOTE: Tweak seems to be broken (the buttons don't fire anything), and I have no idea why NOTE: Heal is currently a vampiric heal (some health is subtracted from the caster to heal the target). This is *not* a new behaviour. NOTE: Tweaked up magic arrow damage (a GM mage was doing less than 4 damage every time). Old magic arrow formula baseDamage = 2 + Random( 0, 1 ) mageryMult = (Magery / 2000) + 1 (maximum multiplier, 1.5) Damage Dealt = baseDamage * mageryMult - EvalIntCheck New magic arrow formula (JS Only!) baseDamage = 2 + Random( 0, 5 ) mageryMult = (Magery / 2000) + 1 DamageDealt = baseDamage * mageryMult - EvalIntCheck The EvalInt check has changed, as well (with the JS code, not the C++ code. All non-JS spells still adhere to this old standard). Previously, a successful check would always draw off a fixed amount of damage ( 10% of your skill level ) Adjusted the JS socket property for characters, so that it returns an explicit NULL object if there is no socket attached NOTE: Researching into JSExtendedClass instead of JSClass, so that we can implement equality testing (like, attacker != caster sorts of things) 25th January, 2006 - Maarc Moved checkkey(), processkey() and cl_getch() from uox3.cpp into CConsole methods Added a key/command handler console exposure to the JS environment (involves a secondary runtime because of threading!) Note: Creating/editing world objects through this environment is not thread safe, and may cause errors Modified Console.PrintDone() and Console.PrintFailed() to take an optional boolean parameter as to whether it is printed instantly, or queued up Added functions Console.BeginShutdown() and Console.Reload( intVal ) BeginShutdown() takes no parameters Reload() takes a single parameter, with the values of 0 Reload INI 1 Reload Accounts 2 Reload Regions 3 Reload Spawn Regions 4 Reload Spells 5 Reload Commands 6 Reload Definition Files 7 Reload JS 8 Reload HTML Included an example script that takes the old 1->9 keys and implements them through the new JS routines Included an example script that takes the old shutdown keys and implements them through the JS routines Couple of prettying up with the loading code and what it displays Fixed an error with validation of skin and hair colours with human races (my mistake!) Fixed a dyed underwear issue with newly created players (Xuri) 1/23/2006 - Xuri Added new JS event: onCharDoubleClick( pUser, targChar) - allows overriding doubleclicking of characters Added new JS event: onSkillGump( socket ) - allows overriding the client's request to open the default skillgump Added new JS event: onCombatStart( currChar, targChar ) - allows overriding combat completely Added new JS event: onCombatEnd( currChar, targChar ) - allows overriding what happens when combat ends JS Event space in cScript expanded from 64 to 96 (Maarc) 22nd January, 2006 - Maarc Added a P_TIMESTAMP define to Config.h, for timestamping packet logs (through the use of RealTime) Removed unnecessary defines from Config.h Fixed a typo or two Removed some debug code I committed by accident Our packet logs were generating 7 column data, not 8! Updated some packet notes + code (0xA9 and 0xB9 packets) to deal with elves stuff (based on http://www.uox3.org/forum/viewtopic.php?t=748&highlight= ) Updated CPCharAndStartLoc to log a few more flags Added a detailed Log routine to CPEnableClientFeatures Moved Capped() in pcmanage.cpp to higher upwards Changed CPICreateCharacter::Log to dump out hex values for body/skin colours Added some preliminary support for elvish bodies Needs doing: Adding random names list 3 (elf male) and 4 (elf female) for incognito Updated gender IDs 0 == human male, 1 == human female (as before). 2 == elf male, 3 == elf female, 0xFF == unknown. Potentially has JS impacts! (Gender property) Note: Need to experiment with gender values with CPStatWindow (see code notes) Note: isHuman() doesn't even evaluate current dead bodies, what is the impact? Renamed validHair() to validHairStyle() because we want to validate colour as well Added a CanSee() routine to JS based socket and character objects. Syntax is as follows sourceObject.CanSee( otherObject ); sourceObject.CanSee( targX, targY, targZ ); otherObject can be either a character, item or socket. If they're not on the same world or the target item is in a container, line of sight fails. Proper validation of hair style on creation of elvish characters 21st January, 2006 - Maarc Fixed an Alignment issue in dumping out CPCharAndStartLoc (converting tabs to explicit spaces) Turned out last byte of the packet as a real number, rather than a UI08 which is interpreting as a char Updated some packet notes from what I could scrounge through the net Added basic CPIMetrics class to read in the 0xD9 packet that gets sent Fixed a logging issue with CPCharAndStartLoc that wasn't taking the extra characters into account Fixed a logging issue with CPCharAndStartLoc that was trying to dump out location details as ASCII codes, not as strings Added a feature to packet logging so that it will fill a line of less than 8 bytes to 8 bytes, to even out it's display CPISecondLogin logging claimed to be packet 0x80, when in reality, it's 0x91 Unknown byte in CPIFirstLogin now displayed numerically, rather than as a dodgy ASCII char Changed Seed IP of CPRelay to 0xFFFFFFFF Moved pSplit() and PackShort() from CPacketSend.cpp to CPacketReceive.cpp, given that's the only place that it is even used Removed some unnecessary dead code 1/20/2006 - Xuri Yumi-bows should now use arrows instead of crossbow bolts. 12/16/2005 - giwo (0.98-3.1g [3.2 RC]) Fixed an issue with context menus causing one to attempt to "snoop" their own pack. Fixed a crash when attempting a random steal on a character with no items. Fixed an issue causing the 'time command to have incorrect spacing. 12/13/2005 - giwo (0.98-3.1f [3.2 RC]) Updated CDictionary.cpp to be const correct, as well as adding some error checking to prevent data corruption. Removed CACHEMULS from the uox.ini as it is no longer used. Changed uox.ini entry SHOWHIDDENNPCS to SHOWOFFLINEPCS to better reflect its function. Fixed an issue with SHOWOFFLINEPCS causing offline pc's to display even if it was set to 0. Fixed a minor bug with HTML output when the UOX3.exe was not in the base UOX directory. Fixed a couple of entries in teleport.scp that would cause you to be stuck in britain sewers. Updated items.cpp and npc.cpp to be const correct. 12th December, 2005 - Maarc Further update to HowTo, making sure it works through both paths 11th December, 2005 - Maarc GumpInfo type 7 should ignore name, only deal with stringValue. Code updated to reflect this (fixes AddData( str, str, int )) 9th December, 2005 - Maarc Howto should be fixed so it won't crash on target based commands Howto should also support JS commands now, at least in so far as it displays the txt file, if one exists Couple of sections of code updated for real multi checks. Rather than check if the ID > 0x4000, we actually do a CanBeObjType( OT_MULTI ) instead Auto correct bad multis when encountered (setting to generic house / generic boat) ***note this is untested*** Insufficient time to install the UO client, and needs to be verified by Xuri or Giwo 12/07/2005 - Xuri Fixed an error generating a warning about bad length in multi's (giwo) Made all items default to the unused (0x0000) tile (giwo) Changed SeekTile() to return a value indicating if it found a valid tile (giwo) 12/04/2005 - Xuri Fixed a bug where skillgain could happen by attempting to craft without having enough resources available Updated AreaCharacterFunction, AreaItemFunction and AreaObjFunc to accept both character and item objects as source-object 11/23/2005 - giwo (0.98-3.1e [3.2 BETA]) Removed cSkills::TrackingDirection() as cMovement::Direction() does the same thing. Fixed a crash caused by canceling the tracking menu. Fixed an issue causing not all animals to be trackable with the tracking menu. Added support for clicking on the Tracking Arrow to stop it from displaying. Modified packet overloading so one cannot run both the overload and the default packet handling, as it would cause a socket error. Added support for selecting popup menu entries. Fixed a possible issue with doubled up entries in spawn.dfn and regions.dfn. Fixed an issue causing UOX3 to hang forever on character creation. Added file and function documentation to books.cpp and msgboard.cpp 11/20/2005 - giwo (0.98-3.1d [3.2 BETA]) Added CPPopupMenu allowing for easier customization of popup menu's. Removed cScript::spellRegistration, commandRegistration, skillRegistration in favor of cScript::ScriptRegistration( string skillType ) IE ScriptRegistration( Skill ). Added the ability to overload Packets in the JS. Removed xFTP Server code as UOX3 should be a game server, not an FTP server. Moved spawnregions and regions into CWorldMain. (renaming them to spawnRegions and townRegions). Modified spawnRegions and townRegions to load in based upon the number assigned for them in the scripts. Added a socket variable to PlayerValues_st to remove the need to loop through online sockets looking for a characters socket. Fixed some minor issues with CTEffectContainer. Fixed an issue that could cause a characters murder decay timer to stop counting. Added MURDERTIME to the worldsave to make murder decay time persistent. Fixed some minor compiler warnings. Added support for compiling under Visual Studio Express 2005 Changes to uox.ini: Removed USEFACETSAVES, MAP0, MAP1, MAP2, MAP3, USERMAP, FTPDENABLED, FTPDUSER, FTPDUSERLIMIT, FTPDBIND, FTPDROOT, FTPCENABLED, FTPCHOST, FTPCPORT, FTPCUSER, FTPCULFLAGS, and MAPCOUNT as they were unused. Added OVERLOADPACKETS option to uox.ini to toggle JS packet handling. JS Changes: Re-ordered jse_fileassociations.scp a bit to make more logical sense. Added PACKET_SCRIPTS to jse_fileassociations.scp Added event onPacketReceive( socket, packetNum, subCommand ) Added function RegisterPacket( packetNum, subCommand ) // Note that subcommands are not yet supported. 11/19/2005 - Xuri Added new doors from ML-client, expanded DoorNewLocation-function to cover all doors 11/5/2005 - giwo (0.98-3.1c [3.2 BETA]) Fixed several issues with Writable book handling. Modified .bok handling code (note that this will cause any old .bok files to be invalid). Added support for the 0xD4 (New Book Header) packet. Fixed some issues in /books/books.dfn causing pre-defined books not to be displayed. Fixed some issues in items/misc/books.dfn causing pre-defined books not to open. Removed CSocket authorbuffer, pagebuffer, and titlebuffer. Fixed an issue causing Spells not to function. Added JS Packet method .ReserveSize( len ); for optimization purposes. 11/3/2005 - giwo (0.98-3.1b [3.2 BETA]) Added a JS Packet Class, usage: var myPacket = new Packet; myPacket.WriteByte( pos, byte ); myPacket.WriteShort( pos, short ); myPacket.WriteLong( pos, long ); myPacket.WriteString( pos, string, len ); socket.Send( myPacket ); myPacket.Free(); Fixed a logic error in handling the RefreshIP code (Grimson). Fixed an issue causing players to apper gray rather than dissapear when hiding. Fixed a login crash caused by the Updates scroll. 11/1/2005 - giwo (0.98-3.1a [3.2 BETA]) Updated some areas of the code to conform to const correctness. Fixed an issue causing vendor "Buy" windows to display improperly. Added some more error-checking to the ClearTrades() function. Removed JS CChar_Freeze() and CChar_Unfreeze() as the .frozen property does the same thing. Removed JS CItem_SetPoison() as the .poison property does the same thing. 10/17/2005 - giwo (0.98-3.0q [3.1 RC]) Improved the MapResource handling code. Improved the MapRegion handling code, reducing waste. Fixed a possible issue causing invalid data in the refreshQueue and deletionQueue. 10/15/2005 - giwo (0.98-3.0p [3.1 RC]) Fixed an issue in the CChar constructor causing linux builds to not compile. Removed CHANCECOLOURORE and MINCOLOURSKILL from regions.dfn Modified cSkills::Mining() to REQUIRE ore entries for proper ore creation. Modified CHANCEBIGORE in regions.dfn to give a chance to get more than 1 ore at a time. Added a message to advise a player when his skill level is too low to mine coloured ore. 10/5/2005 - giwo (0.98-3.0o [3.1 BETA]) Moved kills, fame, and karma from CBaseObject to CChar to save wasted memory on items. Fixed several warnings when compiling under gcc. Fixed a possible issue when duplicating a character. Removed several unrefrenced parameters. Removed several unused ENUM values. 9/29/2005 - giwo (0.98-3.0n [3.1 BETA]) Removed an unneeded variable from characters. Changed JS prop murtertime to tempTime (note tempTime is currently used for spawn items and murder times). Made struct GumpInfo a private member of GumpDisplay. Changed CItem::layer to make use of the ItemLayers enum. Removed global const MAXLAYERS. Merged CTownRegion goodsell[], goodbuy[], goodrnd1[], and goodrnd2[] into a struct with a map. Removed RUNNING and STEP from the worldfile, as they were unnecesarry. Minor cleanups and fixes. 9/27/2005 - giwo (0.98-3.0m [3.1 BETA]) Moved some more variables from Base Characters to Players. Organized and documented many functions in CChar. Changed itemLayers array to a std::map. 9/27/2005 - giwo (0.98-3.0l [3.1 BETA]) Greatly reduced the memory taken by NPC's and Players. Fixed an issue causing ORE_LISTs not to load in properly. Fixed a possible crash bug in clearTrades(). 9/23/2005 - giwo (0.98-3.0k [3.1 BETA]) Added support for MapDiffs/StaticDiffs Added mapdiff entries to maps.dfn to allow customizing filenames. Added CPEnableMapDiffs to advise the clients of MapDiffs. Updated go.js to support passing a world number 9/20/2005 - giwo (0.98-3.0j [3.1 BETA]) Fixed a minor issue with resource regions. Removed cSkills::BowCraft() as it was unused. Moved largeBuffer and largePackBuffer from local declares into CSocket. Updated sword.js and axe.js to work properly with 5.0.x clients. 9/18/2005 - giwo (0.98-3.0i [3.1 BETA]) Fixed an issue causing RESOURCELOGSRESPAWNTIMER to always use default setting. Moved cSkills::resources into CMapWorlds() allowing it support for multiple worlds. Fixed an issue with SetTempVar() when setting in parts. Made skillnames scriptable via skills.dfn Fixed a crash caused by increasing the total number of skills then loading a previous world. Added support for BUSHIDO and NINJITSU skills (note these are not implemented yet). Enabled support for NECROMANCY, FOCUS, and CHIVALRY (note these are not implemented yet). Removed some superfluous code in uoxstruct.h Added First/Next/Finished wrappers for iterating through lists of Script files. Optimizations to the weather.dfn loading code Optimizations to the skills.dfn loading code. Optimizations to the spells.dfn loading code. Modified loading of creatures.dfn to load entries beyond 2048. Added 5 tags to creatures.dfn in place of BASESOUND and SOUNDFLAGS SOUND_IDLE - The sound the creature makes while standing around SOUND_STARTATTACK - The sound the creature makes when it enters combat SOUND_ATTACK - The sound the creature makes when attacking SOUND_DEFEND - The sound the creature makes when defending SOUND_DIE - THe sound the creature makes upon death Moved Sword use functionality out to JS (for carving kindling, corpses, etc ) Moved Axe use functionality out to JS (for chopping trees, carving corpses, etc ) Added JS item property "carveSection" and method Carve(). Added JS Functions ResourceArea(), ResourceTime(), ResourceAmount() and ResourceRegion() The first 3 can be used to Get/Set system settings, using the options "LOGS" or "ORE" ResourceRegion() returns a resource object allowing JS to modify resource data. Exposed the resource data to the JS engine for modification, props are: logAmount logTime oreAmount oreTime 9/13/2005 - giwo (0.98-3.0h [3.1 BETA]) Modified MapRegions to allow handling of a variable number of words. Added maps.dfn to allow customizing UOX3's map handling. Added MAPCOUNT to the uox.ini to specify the number of maps UOX3 uses. Several major internal changes to the packet handling classes. Fixed several integral problems with the account system causing data corruption. Fixed some issues causing client crashes in the 5.0.x clients. Fixed an issue causing a crash when attempting to add an invalid script item. Fixed an issue causing wierdness for players who log in as a Ghost. Fixed an issue causing a character to continue firing a ranged weapon when out of ammunition. Fixed a possible issue causing monsters to constantly attack animals. Modified character flagging so anything that is not a Human or Animal will never show up as blue. Modified the "isHuman" check to consider a GM body as human. Fixed an issue causing character privledges not to save properly. Modified CSocket pagebuffer, titlebuffer, and authorbuffer to be const correct. Greatly reduced the size of resource.bin (please ensure you delete your old /shared/resource.bin file). Made some minor modifications to reduce the worldfile size: (Note UOX3 is backwards compatible with previous worldfiles and will make these changes automatically) BEARDCOLOUR and BEARDSTYLE is now BEARD=STYLE,COLOUR and is stored in hex. HAIRCOLOUR and HAIRSTYLE is now HAIR=STYLE,COLOUR and is stored in hex. ORIGINALBODYID and ORIGINALSKINID is now ORIGINALID=BODY,SKIN and is stored in hex. SPLIT and SPLITCHANCE is now SPLIT=SPLIT,SPLITCHANCE. QUESTORIGINALREGION and QUESTDESTINATIONREGION is now QUESTREGIONS=ORIGINAL,DESTINATION. NPCWANDER and XNPCWANDER is now NPCWANDER=NPCWANDER,XNPCWANDER. SPATTACK and SpecialAttackDelay is now SPATTACK=SPATTACK,DELAY. PACKITEM, ROBESERIAL, TOWNVOTE, PRIVILEGES, and GUILDFEALTY are all stored in hex. 9/07/2005 - Xuri Added support for new mounts: giant fire beetle, hiryu, chimera, cu sidhe, mondain's steed 9/07/2005 - Xuri Fixed an error in a debug message that would stop UOX3 from compiling if DEBUG_WALKING was enabled. Fixed; UOX3 didn't retrieve the correct FY2 value for spawned NPCs using wandermode 3 (shopkeepers, for instance). Added JS InitWanderArea function - allows wanderareas to be dynamically reset through JS. 9/06/2005 - Xuri Check to see if animals have NPCAI 2 before guarding them in town when COMBATANIMALSGUARDED=1 in uox.ini 9/05/2005 - Xuri Fixed superfluous empty spaces after reputation titles and race names in paperdolls. Removed [murderer] appearing behind the character names hovering over the head of characters. August 17 2005 - Maarc Altered AreaCharFunc code in cScript to also support Items Added "AreaItemFunction" as an equivalent to AreaCharacterFunction - perhaps break this into something a little more specific? eg Items / Multis? Added JS StaticAt function - takes 4 parameters - x, y, world, [tileID] (tileID is optional - if not specified, ANY static at that location will match) Added JS StaticInRange function - takes 5 parameters - x, y, world, radius, tileID 8/13/2005 - giwo (0.98-3.0g) Added automatic removal of messageboard files when the board item is removed. Added in the MessageBoardMaintenance routine to automatically clean out deleted posts. Incorporated Grimsons fixes to call guards when a player attacks an NPC. Incorporated Grimsons changes to allow NPC's to become criminal and murderers. Fixed some possible issues in speech.cpp, hopefully correcting the elusive Speech crash bug. Fixed an issue causing creatures and a few other scripts not to be properly updated when reloading DFN's. Added a very simple Dispose() feature to CServerDefinitions, allowing for automatic cleanup of unused DFN's. Fixed an issue causing doors to never close if a player or ghost was standing in them. Fixed some possibile issues with item visibility. Added the ability to specify an amount with ADDITEM in create.dfn (example ADDITEM=0x1E43,15). 8/7/2005 - giwo (0.98-3.0f) Fixed an issue causing improper reporting on the state of a stream in UString. (punt) Fixed an issue causing messageboards not to display on an empty world. Fixed an issue causing UOX3 to lock up when posting a reply with the 3D client. Modified the post removal function to delete any replies to the post. Modified CChar::PostType to stop it from being saved (this should be on a per-session basis). 8/4/2005 - giwo (0.98-3.0e) Finished the rewrite to the messageboard system. Currently it should be fully functional with the exception of a maintenance routine to clean up the files which will be added later. Incorporated Grimson's Automatic-IP Updating feature. Added a few fixes for NPC's staying in combat after the death of their opponent. (Grimson) Incorporated lingo's rewrite to the CMapstuff code, this seems to have fixed the bug causing players to fall through the floor of their house. Fixed an issue causing dyed items to appear undyed when dropped on the ground. Fixed a possible issue with BoatSpeech. Fixed an issue causing quest regions not to function properly. Fixed some issues causing items and characters to leave "ghosts" behind. 7/29/2005 - Maarc Several character/item properties and one item-method added to JS (check JS Docs, 0.42) 7/16/2005 - giwo (0.98-3.0d) Continued work on a complete rewrite of the Messageboard system. Removed some unnecesarry debug code from Walking functions. 7/14/2005 - giwo (0.98-3.0c) Moved Poisoning skill out to JS. Fixed an issue causing "eternal" gold from a vendor. Included a fix for Trade Windows locking the client (ShadowBranch). Minor cleanups in trade.cpp Included a possible fix for an issue causing NPC's not to exit combat properly. Fixed an issue causing items with an amount to be created as 1 item in some situations. Began rewriting messageboards, meanwhile fixing a few issues causing them not to function. 6/16/2005 - giwo (0.98-3.0b) Added support for multiple TriggerWords in a string of speech. Fixed JS event inRange() so it will function as expected. Fixed a minor issue that caused the wrong code to be executed when updating nearby objects. 6/16/2005 - Xuri Added new NPCAI (5) for NPC fighters. Same as guard-ai (attacks monsters/criminals), only without the extra guard-functions. 6/14/2005 - giwo (0.98-3.0a) Fixed an issue causing characters to ghost after being teleported off screen. Fixed an issue causing mounts and other various items to add weight to characters. Fixed an issue causing display distortion on the Server Status gump. Fixed an issue causing JS onCollide event not to function for characters. Fixed an issue causing corpses not to decay. Fixed an issue causing spells not to function when a global JS script (0) was in place. Minor code cleanups. 6/14/2005 - Xuri Fixed server crash when clicking on server status button in help menu. 6/12/2005 - giwo (0.98-3.0) Fixed an issue causing objects not to be properly removed from their spawnregion on deletion. 6/12/2005 - Xuri Changed font-type and colour displayed for item-based TextMessages. 6/11/2005 - ShadowBranch Changed the hardcoded default starting location from 1000, 1000, 0 to 1495, 1629, 10 - which is the Sweet Dreams Inn in Britain. 6/9/2005 - giwo Fixed a bug causing items not to be able to be picked up 6/8/2005 - Xuri Adjusted NPCSpeed from 1.0 to 0.7 to increase their speed. 6/7/2005 - Grimson Fix in void CSpawnRegion::doRegionSpawn() to spawn the correct number of NPCs as per defined in spawn.dfn 4/22/2005 - giwo (0.98-2.8h) Fixed an issue breaking teleport locations in Debug mode. Fixed an exploit allowing one to equip items from great distances. Caused houses to boot non-owners who log out inside. Fixed several issues with create menus. Modified BODYCOLOUR in commands.dfn to not change the color if it is set to 0. Added STRIPHAIR and STRIPITEMS in place of STRIPOFF in the commands.dfn. Caused SetName() to call Dirty() in order to update an object. Fixed a minor issue with SET commands. Added SET command MOREXYZ. 4/16/2005 - giwo (0.98-2.8g) Fixed an issue causing envoke (object and type associations) not to function after a JS Reload. Fixed an issue causing accounts to erroneously report that it is already in use. Fixed a possible issue caused by dropping a pilable item directly onto another pilable item. Fixed an issue allowing a ghost to snoop the pack of a pack animal. Fixed an issue causing Ghosts to "collide" with other players. Fixed an issue causing exploding potions to not function properly. Fixed an issue causing smelted ingots to not be stackable. Added ingots and gold to harditems.dfn to safeguard against stacking issues. Changed JS event onCreate() to onCreateTile() and onCreateDFN() Note that onCreateDFN() will be the default, only items added directly from the tile will use onCreateTile(). These scripts can be either scriptID 0 or specified in harditems.dfn. 4/14/2005 - giwo (0.98-2.8f) Fixed an issue causing banks to add to the characters total weight. Fixed an issue causing SpawnRegions to not spawn anything under certain conditions. Fixed an issue causing '0' to be an invalid JS ScriptID. Fixed an issue causing item prop "owner" to not function properly. Fixed some possible issues with member variables not being initialized. Updated titles.dfn to read in much the same way the rest of the scripts do (tag=data). 4/2/2005 - giwo (0.98-2.8e) Moved Begging skill out to JS. Moved Detecting Hidden skill out to JS. Fixed an issue causing JS Character method SetSkillByName() to always return false. Fixed an issue causing AreaCharacterFunction() to invalidate any characters and sockets in the function that called it. Fixed a similar issue causing IterateOver() to invalidate any characters and items in the function that called it. Fixed an issue that would set FD_SETSIZE to a much lower value than it should be on some *nix systems. (punt) Replaced instances of strupr and strlwr with their UString counterparts. (punt) Fixed an issue causing NPC's to hunger (and die quite quickly). Removed many superfluous entries from uox.ini (BEGGINGTIMER, HUNGERDAMAGERATE, HUNGERTHRESHOLD, BEGGINGRANGE). Modified the enum cSD_TID in CServerData.h to standardize naming habits. Moved many timers from individual entries in CServerData into the serverTimers[] array. 3/11/2005 - giwo (0.98-2.8d) Included jr's fixes for cygwin compatability. Began work on allowing UOX to compile under MinGW. Many minor gcc warning fixes. 3/5/2005 - giwo (0.98-2.8c) Fixed a couple memory leaks. Fixed a couple areas where we were attempting to free memory that had already been freed. Bumped the rate of stamina loss on an overweight player to 5 per-step (This should be configurable in the future). March 4 2005 - Maarc Updated 'validcmd so that it dumps out information about JS based commands as well 3/1/2005 - Xuri (giwo) Fixed a bug in HandleGuardAI() causing guards to kill cute, innocent "grey" kittens (and other animals) after taking care of any real criminals present 2/28/2005 - giwo (0.98-2.8b) Removed some duplication in the callGuards() routine. Fixed a possible issue that could cause Timer events to crash after reloading the JS engine. Fixed a possible issue that could cause Magic scripts to crash after reloading the JS engine. Fixed an issue causing some newbie clothing to be destroyed in combat. Fixed an issue on loading teleport.scp causing some locations to not function properly. Added the ability to reload entire sections of the JS Scripts. JS Commands will now properly reload when reloading the Commands. JS Commands will now properly register when reloading the JS Scripts. 2/27/2005 - giwo (0.98-2.8a) Fixed an issue causing 'GO PLACE to reach an invalid location after about 140. Fixed an issue causing teleport locations to not function properly. Fixed characters attempting to mount a creature when already on a mount. Fixed an issue causing dropping a stack of scrolls onto a spellbook to delete all of them. Fixed an issue causing items equipped to an NPC on creation or newbie at creation to be deleted. 2/26/2005 - giwo (0.98-2.8) Added support for "EQUIPITEM" tag in newbie.dfn. Added JS Character Prop skillToTame. Added JS Item Prop murdertime. Moved the following skill functionality out to JavaScript: Animal Taming Anatomy Arms Lore Forensics 2/18/2005 - giwo (0.98-2.7d) Changed all the miscellaneous #ifdef DEBUG statements to #if defined( UOX_DEBUG_MODE ) for uniformity. Fixed a few minor issues in cScript.cpp. Removed cScript::RemoveFromRoot(). Fixed some areas where structures were not initializing variables with default values. Fixed an issue with a couple of the JS Scripts: commands/misc/repeatingcmds.js and server/resource/pitchers.js using "var" keyword for initializing a global variables, was causing a crash with the newer js32.dll's. 2/15/2005 - giwo (0.98-2.7c) Made some structures private members of their only calling class. Removed unused InUseEntry2() Moved Spirit Speak skill out to JS. Moved Animal Lore skill out to JS, and re-wrote it to use a gump interface. 2/10/2005 - giwo (0.98-2.7b) Moved Hiding Skill out to JS. Moved Stealth Skill out to JS. Moved Evaluate Intelligence skill out to JS. Added RegisterSkill() JS Function. Added .steath prop to JS Characters. Fixed an issue with .attacker prop causing it to return the Characters target. 2/8/2005 - giwo (0.98-2.7a) Added the ability to reload a single JS file to CJSMapping. Added SE Function ReloadJSFile, along with a new command in js, RELOADJSFILE 2/7/2005 - giwo (0.98-2.7) Replaced trigger.cpp/.h with CJSMapping.cpp/.h Fixing several issues with JS Scripts. Added .desc prop to JS Items 2/6/2005 - giwo Fixed an issue causing JS commands to not function or crash the server Fixed an issue causing findMulti() to return items that were not Multis. February 5 2005 - Maarc Probable fix for Polymorph not returning to the right body (can't test) The newbie dagger is no longer made on new character creation - use newbie.dfn people! (Not entirely complete, as not all references to EXTRA3 were removed) SaveStatistics() added to CWorldMain, which only really writes out the total of characters and items, but using it to help with a fix for WorldBuilder 2/3/2005 - EviLDeD Fixed a small problem with VC6 not liking the initializer list for the TAGMAPOBJECT structure. 2/3/2005 - EviLDeD Fixed the Crash on save bug after reloading the JS. Moved the TAGMAP system from jsval to TAGMAPOBJECT(See source) Removed some of the console spam used for testing purposes 1/30/2005 - EviLDeD (Contrib: Rynet) Corrected a display problem with boats. This has been commented out due to being a work around for teh SetZ/SetDispZ bug which has been fixed I believe Corrected some copy/referance issues in cSocket 1/28/2005 - EviLDeD Removed CTriggerScript class as it was redundant. Moved functionality into CTrigger class Improved the command load process by having CommandRegistration() send in the contextID responsible for command RegisterCommand() Increased amount of console spam looking for the full JS reload IE: console '8' that will crash the server on the next world save NOTE: Currently the console '6' Reload commands appears to operate correctly with no crash upon save. At this point it is recomended that any object/item/char script changes that are NOT magic or command related be done while the server is shut down until a solution can be found for this. NOTE: When solutio is found all console spam and comments will be removed internally. 1/16/2005 - EviLDeD Increased the JS global context stack size to 32kb from 8kb just to be safer Added cCommand::UnRegister(string,cScript*) function to facilitate removal of named command objects. Currently not in use. Added some console spam to help diagnose the AddMenu/PolyMorph gump issues not displaying correctly Fixed(Partially) the JS Command reloading. Now commands are correctly loaded, however side effect is that the server will crash at save time. Once this last issue is sorted out then this bug will be fixed. January 15 2005 - Maarc Removed saving/loading of ObjectType property - reduces load time by 40 seconds (420 down from 460) on a 70k item / 2k char world converted from old system Explicitly setting some pointers NULL after they have been destroyed Removed call to StoreRandomItemValue() in CMultiObj::LoadRemnants() - not really necessary, and the function call needs to be after world load, not during (ie candidate for PostLoad, if any) 1/12/2005 - giwo Moved Alchemy functionality out to JS. Moved the following use functionality out to JS. Scissors Potions Moongates Spun Fabric Unspun Fabric Cotton Plant Removed unused XGM code from the source. 1/9/2005 - giwo Moved the following Skill Functions to JS. RepairBow RepairLeather Tinkering Tailoring Fletching Carpentry Moved Food consumption functionality out to JS Moved teleport rune functionality out to JS. JS Changes Changed CChar_MakeMenu to CMisc_MakeMenu to allow access to sockets. Modified CMisc_MakeMenu to allow passing the skill number. Removed old style MakeMenu() function. Added CChar_FindItemType( itemType ) to allow searching for items by type. 1/8/2005 - giwo Fixed some minor issues with the new jse_typeassociations.scp handling. Included skills/healing.js in a first step toward putting skills in JS. Removed Skills::HealingSkillTarget 1/7/2005 - giwo Made some adjustments to the Client update range. Converted many functions to use references rather than pointers. Fixed Mark, Recall, and Gate Spells and Commands to handle different worlds. Added js/jse_typeassociations.scp Added CEnvoke to handle all envoke functions. Added CTriggerScripts to simplify script handling in CTrigger class. Renamed the class Triggers to CTrigger to conform to proper class naming standards. 1/2/2005 - EviLDeD Fixed the issue of client crash on the 3D client when access the 'add menu 1/1/2005 - giwo Fixed an issue causing corpses to not display to their "owner". Changed how we play the Death Animation to stop corpses from "moving". Altered corpses update to send a few less unneeded QueryToolTip packets. 12/31/2004 - giwo More cleanups in CPacketSend.cpp Renamed doDeathStuff() to HandleDeath() and moved it into pcmanage.cpp. Cleaned up the code a bit in HandleDeath() and its sub-functions. Fixed an issue causing starting skin color to disregard the players selection. Brought down the range at which items in containers were sent to other players. Added a GM check before updating a buy, sell, or bought layer to a character. Fixed an issue causing GOLD tag on NPC's not to be read in properly. JS Fixes Fixed an issue causing 'deletechar not to function (thanks Xuri). Fixed an issue causing 'wholist off not to function properly. 12/31/2004 - EviLDeD Updated the version to 0.98-2.5b Added, and fixed all the doors. Now they all should work properly including the new expansion Added all door ID's to harditems.dfn to ensure that all doors get type=12 including the new doors. 12/30/2004 - EviLDeD Updated the version to 0.98-2.5a this includes the changes that Giwo has commited. Remember to increment the version please. Fixed a small bug with accounts allowing more than one client to log in under a single account and manipulate the character. Fixed some logistics with the new doors, they all should work now, as long as they are set to type 12. 12/30/2004 - Xuri Added support for the new Samurai Empire weapons, and added three new WeaponTypes, DUAL_SWORD, DUAL_FENCING_STAB and DUAL_FENCING_SLASH, to get more fitting combat animations for some of those weapons. 12/29/2004 - giwo Removed CChar::dispz as it served no purpose. Fixed an issue causing the Buy Window to not display prices and display items only after scrolling. Fixed an issue causing the server to send extra unnecesarry QueryToolTip packets. Fixed packet issues causing Dir and Z not to function properly on Items. Fixed a packet issue causing combat targets not to remaing highlighted. Fixed a crash on login casued by FindPlayersInVisrange(). Minor cleanups in CPacketSend.cpp 12/27/2004 - evilded Added code for until now unsupported doors, including new SE doors (experimental!). Uncommented PORT functionality in source. This is the port in which UOX3 will listen on, it is wrong to assume that the port listed on the first server list line in the ini file is correct. In almost ALL cases they would be the same however what if they are not, and there are multiple servers listed that do not share the same listening port 2593. 11/24/2004 - giwo Removed unnecesarry Constructors/Destructors and did some minor updates. 11/21/2004 - giwo Fixed an issue causing the first item in a list not to be deleted when the list was cleared. 8/22/2004 - giwo Began enforcing stricter class naming rules in an effort to standardize the code (IE CSocket not cSocket). Removed some unneeded global variables. Rewrote ShowSkillTarget(). Sized down CTownRegion::midilist to a UI16. Sized down some variables in the CSpawnRegion class. Fixed an issue causing all characters to be created with at least 1.0 base skill level. Minor cleanups. Moved 'wipe' and 'iwipe' out to JS. JS Changes: Fixed an issue with CChar_SetSkillByName(). Added Character prop .tamed. 8/20/2004 - giwo More use of const_iterators where applicable. Changed some vector.size() comparisons to vector.empty(). Minor fixes with a couple packets. Moved 'areacommand' out to JS. 8/13/2004 - giwo Converted a few areas of code to using refrences rather than pointers. Consolidated some code in cWeather.cpp and cRaces.cpp. Fixed a couple areas where an ACCOUNTSBLOCK was being copied and altered, but not set back on the object it was copied from. Implemented a temporary fix for multiple users on one account and other related issues. Modified CChar::petsControlled to make use of CDataList. Made use of const_iterators in place of iterators in many places. Modified a few more instances of CDataList to be handled by an accessor that would return a pointer. Removed MOREB (MORE2) from CItem. Modified Monster Gates (polymorph gates) to make use of items description tag in order to use string-type script entries. Minor fixes and updates. JS Changes: commands/targeting/set.js: Fixed an issue causing 'set owner to not function properly. 8/6/2004 - giwo Fixed an issue causing extra invalid servers to appear in the server list. Added CPSellList to handle sending the vendor "sell" gump. Fixed weight adding twice every time a player picked an item up. Merged in some linux warning fixes. Removed some superfluous includes. Moved 'where' command out to JS. 8/4/2004 - giwo Fixed some Level 4 Warnings. JS Changes: CChar_Gate now supports passing a locations.dfn entry number (IE mChar.Gate( 1 ); ). CBase_Teleport now supports passing a locations.dfn entry number (IE mchar.SetLocation( 1 ); ). Added CSocket_SendAddMenu( menuNum ). Command Updates: Moved 'addx' out to JS. Moved 'add' out to JS. Moved 'xgo' out to JS. Combined 'xgoplace' with 'xgo'. Moved 'xgate' out to JS. Moved 'go' out to JS. Moved 'itemmenu' out to JS. 8/3/2004 - giwo JS Changes: Modified SoundEffect() as it was playing a sound one less than specified. Updated CChar_SetSkillByName() to return true if it successfully set, false otherwise. Updated many of the JS commands to fix some minor issues and improve output. Added GetSocketFromIndex() Command Updates: Moved 'fix' out to JS. Moved 'tele' out to JS. Moved 'xteleport' out to JS. 8/1/2004 - giwo Changed some variable sizes in order to reduce type mismatches and memory waste. Created a new class, CDataList, this is basically a safe wrapper for deque, where one can specify what they are storing. This allows us to consolidate quite a bit of code from several different classes by simply making our lists CDataList< objtype * > rather than using DCHARLIST or DITEMLIST, etc. Old style listings: ------------------ private: DCHARLIST chars; DITEMLIST items; DCHARLIST_ITERATOR charsIter; DITEMLIST_ITERATOR itemsIter; public: FirstChar(); NextChar(); FinishedChars(); NumChars(); FirstItem(); NextItem(); FinishedItems(); NumItems(); AddChar(); RemoveChar(); AddItem(); RemoveItem(); ------------------ New Style: ------------------ public: CDataList< CChar * > chars; CDataList< CItem * > items; ------------------ Everything else is handled internally (and thus any bugs that arise can be fixed in one place, not half a dozen). JS Changes: New character prop: magicReflect, sets and returns if they have magic reflect on New character methods: SpellMoveEffect( target, spell ) SpellStaticEffect( spell ) BreakConcentration( [socket] ) Wrote clumsy.js, the first UOX3 spell to be put in JS. This script is mostly working, but there are some issues that need to be worked out before the entire spell system is put out to the JS engine. Currently known issues: No way to cause one target to attack another in JS. No Line of Sight checks in JS. August 2 2004 Changed __unix__ references to UOX_PLATFORM != PLATFORM_WIN32 July 31 2004 Increased JS context stack size from 0x2000 to 0x4000 (we may need the extra space) Updated JSEncapsulate for delayed initialisation (useful for optional parameters to methods) Implemented Console object in JS Methods Print 1 (text to print, include \n at the end unless you're sending multiple mesesages) Log 1 (text to print, same as above. Optional second parameter is the name of the file to log it into) Error 2 (error level, text to print) Warning 2 (warning level, text to print) PrintSectionBegin 0 TurnYellow 0 TurnRed 0 TurnGreen 0 TurnBlue 0 TurnNormal 0 TurnBrightWhite 0 PrintDone 0 PrintFailed 0 PrintPassed 0 ClearScreen 0 PrintBasedOnVal 1 (pass true or false, it will say pass/fail based on this) MoveTo 2 (x coord, y coord - if you want the same line, y == -1) PrintSpecial 2 (colour of text, text to print) Properties (most of these can be ignored, as they do very little eg boundaries) left left (always 0) top top (always 0) height height (always 0) width width (always 0) filter filter setting mode filter mode level filter level, integer logEcho boolean - determines if log calls get echo'd to screen Wrote a console test driver script (command consoletest) Posix compliance fix from xir Added MSVC7.1 project files July 29 2004 Note: We need to change references to __unix__ to something more like UOX_PLATFORM != PLATFORM_WINDOWS or UOX_PLATFORM == PLATFORM_LINUX Some of che's fixes were not fixes (ie commenting out the throws) or improperly done (platform specific decls don't go in uox3.h) 7/28/2004 - giwo Minor fixes, cleanups Included che's linux fixes July 28 2004 - Maarc Possible crash in _add avoided GetAmount() returns a UI16 and we were comparing to 0xFFFF, no longer needed Three possible crashes in ShowCName stepped around Called GetWord rather than GetDWord for magic targeting Possible crash in addRandomColor avoided (only if colorlist didn't exist) Possible crash in LoadFromScript (townregions) avoided Fixed an issue that VC7.1 finds. We clear() a list, and then reference the first item, in processing the INI, which crashes Modified some changes from che Fixed some typo declarations Moved stdexcept into UOXStdHeaders, so that exceptions can be used wherever needed for loop problem declaration (using var outside loop) 7/25/2004 - giwo Removed several vtables from classes that were not subclassed Added struct GoPlace_st and CWorldMain::goPlaces map to replace re-reading entries every time we use GoPlace. Removed MakePlace() Removed cSocket::AddX & AddY and renamed AddZ to ClickZ Fixed an issue causing invalid entries to exist in the ObjectFactory (causing a crash on WIPE ALL) Once again merged deletionIQueue and deletionCQueue back together as a QUEUEMAP (as ObjectFactory fixed the original problem). Combined CBO::Visible(), CChar::Hidden(), and CChar::PermHidden() into a single CBO::Visible() using enum VisibleTypes 0 = Visible 1 = Temporary Hidden (Skill, Item visible to owner) 2 = Invisible (Magic Invis) 3 = Permanent Hidden (GM Hide) Moved all of the remaining targeting functions out of cTargets and removed the class along with targeting.h Converted CWM::creatures[] into a map and creat_st into class CCreatures. Converted TeleLocationEntry into class CTeleLocationEntry. Fixed an issue with UString::number() causing it to only return decimal values. JS Updates: Changed SetSecondsPerUOMinute() to SecondsPerUOMinute() used to Set and Return the value. Converted ReadBytes( socket, offset ) to CSocket_ReadBytes( offset ) Converted Get DWord/String( socket, offset ) to CSocket_Get DWord/String( offset ) Converted Set Byte/Word/DWord/String( socket, offset, newVal ) to CSocket_Set Byte/Word/DWord/String( offset, newVal ) Renamed CChar_WanderBox() to Wander() and allowed it to handle a circle (3 values) or box (4 vals). Modified Get/Set Timer() to work for both Sockets and Characers (Perhaps need this for Items as well). Added CItem_Dupe() to allow duping of items in JS. Added CChar_Jail( numSecs ) and CChar_Release() to Jail and Release characters Added IterateOver( objectType ) and onIterate( object ) to allow looping through world objects. Added CChar_Kill() method to kill a character. Added SendStaticStats() to build an info gump for statics and map tiles. Added Gump.AddPageButton() to allow Next/Last page buttons. Added NumToHexString() to allow converting a number to a hex string. Added SetSkillByName() method to CChar to simplify setting skill by name. Added a map to map strings to objectTypes; Currently this is used in CreateBlankItem(), CreateDFNItem() and IterateOver() "BASEOBJ" = OT_CBO "CHARACTER" = OT_CHAR "ITEM" = OT_ITEM "SPAWNER" = OT_SPAWNER "MULTI = OT_MULTI "BOAT" = OT_BOAT Properties: Characters: Added isJailed prop to check if a character is in jail Added squelch prop to toggle Characters squelched status. Added spattack prop to set NPC's Spell Attack value. Added spdelay prop to set NPC's Spell Delay value. Added aitype prop to set NPC's AI Type. Added split prop to set amount of NPC's to split into on hit. Added splitchance prop to set NPC's chance of splitting on hit. Added trainer prop to toggle NPC's ability to train skills. Items: Added corpse prop to toggle whether or not an item is a corpse. Added strength prop to set items str-to-wear value. Added wipable prop to toggle items ability to be wiped. Added buyvalue and sellvalue props to set items value. Added restock prop to set amount of items to restock in a shop. Added devinelock prop to set items Devinely Locked property. Spawners: Added spawnsection prop to set script section for spawner to pull from. Added sectionalist prop to toggle whether or not the above section is a list. Added mininterval and maxinterval to set how many of an item to respawn per call. Misc: Renamed CSocket_addz to CSocket_clickZ Added weight prop to Characters and Items to get and set the weight value. Added isSpawner prop to Characters and Items to identify a SpawnItem. Added allskills prop to Skills class to set all skills at once. Command Updates: Moved RESURRECT out to JS. Moved NACCT out to JS. Moved GUMPMENU out to JS. Moved JAIL and RELEASE out to JS. Moved HIDE and UNHIDE out to JS. Moved SECONDSPERUOMINUTE out to JS. Moved NPCBOUND to JS and Split it into NPCRECT & NPCCIRCLE. Moved SQUELCH and MUTE out to JS. Moved DUPE out to JS. Moved SHOWDETAIL out to JS. Moved KILLALL out to JS. Moved DELID out to JS. Moved CLEANUP out to JS. Moved ZEROKILLS out to JS. Moved TELESTUFF out to JS. Moved KICK out to JS. Moved DELETECHAR out to JS. Moved KILL out to JS. Moved ISTATS out to JS. Moved CSTATS out to JS. Moved SET out to JS. Moved INCX, INCY, and INCZ out to JS. Removed WF 7/22/2004 - giwo Added JS access to sockets xtext (string) property. 7/20/2004 - giwo Fixed an issue causing a crash on shutting down the server. Modified UOX to disallow loading one script whilst another is loading. Fixed an issue causing newer clients to lockup when using a boat. Fixed an issue causing PostLoadProcessing() to never be called for Multis. 7/18/2004 - giwo Fixed an issue causing items and characters not to be properly removed from sight. Fixed a minor problem causing statwindows to not update properly. Fixed an issue causing item and characters to not be distinguished properly when doing a calcFromSer(). Fixed an issue causing client to lag permanently shortly after logging in. Fixed an issue causing UOX to bail out when setting the container of an item in JS. Consolidated some code in cSocket.cpp Began moving commands out to js: ACTION ALLMOVE BOLT BRIGHTLIGHT BUY CY (Now cnsyell) DARKLIGHT DUNGEONLIGHT FULLSTATS GATE GLOW GMOPEN (Now openlayer) GY (Now gmyell) SGY (Now adminyell) SHOWTIME HEAL HOUSEICONS MANA MARK MIDI MOVETOBAG NPCTARGET (Now follow) READINI (Now reloadini) RECALL RELOADACCOUNTS RELOADDEFS REMOVE REMOVESHOP RESEND SELL SETPOISONED SETRACE SFX SKIN STAMINA UNGLOW WHOLIST XBANK (Now openbank) Added the following functions to the JS engine: Yell( socket, toYell, commandLevel ) GetDictionaryEntry( entryNum, [language] ) RaceGate( socket, character, raceNum ) WorldDarkLevel() to set and return cSD:WorldLightDarkLevel(). WorldDungeonLevel() to set and return cSD:DungeonLightLevel() Added the following character props & methods: (bool) allmove (bool) houseicons OpenLayer() Added the following item methods: UnGlow() PlaceInPack() Added the following cSocket props & methods (object) tempObj WhoList() Modified: Reload(), Now accepts case 9, reload accounts. GetWorldBrightLevel() renamed to WorldBrightLevel(), now sets and returns cSD::WorldLightBrightLevel() 14 July 2004 - Maarc ============ Integrated Xuri's dir property for JS items Bug fix on command_darklight (Xuri) Altered the ACCOUNTSBLOCK code so that it uses proper constructor rather than assignment (double assignment, essentially) Removed some unused properties of accounts (bPackPacket) 7/12/2004 - giwo Added 'FIXSPAWN command to update all item spawners in the world to work with CSpawnItem. Minor changes. 7/11/2004 - giwo Fully implemented CSpawnItem, removing remnants of old spawners. (Note this will break any current spawn items you have in your world, sorry for the inconvenience). Broke cBaseObject::Dupe() into two functions, Dupe() and CopyData() to allow carrying over cBO settings to the Duped item and make way for future sub-classes of CItem and CChar. Modified townregions to now store an npclist to pull guards from and the total amount of guards to spawn. Updated the CommandList docs with the latest changes to the command list. Minor consolidations and modifications to the scripts. Removed /tracking/ and /polymorph/ moving their scripts into /menus/. Removed /digging/ and /fishing/ moving their scripts into /items/itemlists/. Fixed up /items/gmmenu/spawners.dfn to function with CSpawnItem changes. Modified regions.dfn to match up with changes to TownRegions. Fixed an issue causing advance.dfn to not read in properly. Fixed an issue causing nested itemlists and npcslists to not function properly. Added a few more dictionary entries. 09 July 2004 - Maarc ============ Completely switched over to ObjectFactory code, getting rid of the other stuff - think its best for debugging Fixed a bug with 'make gm, we were trying to sprintf a std::string Removed periodic trigger code, as it never has a chance to load or activate, and needs a rethink (more like commands or spells?) 08 July 2004 - Maarc ============ Changed the saving of Damage property, we read it in as lo,hi and write it as hi,lo - now consistent Found the non-disappearing horse bug on mounting.... Teleport() does a RemoveFromSight, but by THAT time, we've already... gone :) 2 possible fixes 1) Store the old location so it can be used on RemoveFromSight 2) Tell *everyone* about it For the moment, I have elected the former until we can decide on a better strategy, as the implementation does get a bit hairy Implementation was missing for Delete() for CItem and CChar under ObjectFactory mode - by implementing this, wipe works again, amongst other things. 7/7/2004 - giwo Consolidated all the more's in CItem into a single tempVars[] array. Once again implemented deques in SubRegions and fixed some issues with list corruption. Implemented deques in CItem to avoid corruption in Containers Added CObjectHandler class to replace need for hash tables to map serials to indexes. Fixed some possible issues with cSpawnRegions. Fixed an issue causing some crashes involving speech. Further implementation of CSpawnItem. Fixed many areas where a hex value did not have the 0x infront of it. Modified CreateDFNItem() and CreateBlankItem(), now accepts specification of the objecttype (defaults to normal item). Modified a few of the targeting functions to make way for adding spawner items. 07 July 2004 - Maarc ============ JS related fixes "scrollLow" property of Spell objects was set as an index... it's not that, it's an individual value skillsused is now like baseskills and skills for characters (previously unaccessible) Removed GetGuildMaster function as it referred to old chars[] array Converted CalcTargetedChar function to be similar to CalcTargetedItem so it returns a real object onCallback%i will now set targeted to a NULL object if the object clicked on is not valid, or not an object (eg a tile) Added the following properties to the JS Character object townpriv guildtitle fonttype saycolor emotecolor attacker racegate skillLock deaths nextAct petCount read only ownedItemsCount read only cell Added the following methods to the JS Character Object GetTimer( timerID ); SetTimer( timerID, numMilliseconds ); Valid values for timerID are: 0 // tCHAR_TIMEOUT 1 // tCHAR_INVIS 2 // tCHAR_HUNGER 3 // tCHAR_POISONTIME 4 // tCHAR_POISONTEXT 5 // tCHAR_POISONWEAROFF 6 // tCHAR_SPELLTIME 7 // tCHAR_ANTISPAM 8 // tCHAR_CRIMFLAG 9 // tCHAR_MURDERRATE // NPC Timers 10 // tNPC_MOVETIME 11 // tNPC_SPATIMER 12 // tNPC_SUMMONTIME // PC Timers 13 // tPC_LOGOUT Updated CItem::SetCont so that it doesn't try and do things it shouldn't during world load NOTE: We have an issue... we can't validly set all the weight stuff until the world's loaded OKAY, the base default world now loads with the new object factory, and it's all fun and games. 06 July 2004 - Maarc ============ JS related fixes Reenabled the ability to set poison and magic resistance on a race object All setProperty routines now use JSEncapsulated, should be *much* more tolerant now Any attempt to do something like mSock.currentChar = pUser; would fail, replacing pUser with the actual current char. It should now behave properly It is now possible to set a socket's tempInt property 05 July 2004 - Maarc ============ Fixed a problem where it would crash on reloading JS scripts (via magic and commands) Removed commented out code that was never used (including tempeffectsoff and tempeffectson) Added some methods to help with deletion issues in the temp effects queues These fixed an issue where creating a timer on a just elapsed timer would cause a crash CCP_TARGET can now be set - char.target = npc; More support for floats in the use of properties for characters - dex (x2), int (x2), str (x2), mana, stamina, health Note that it will throw an exception if you do not pass a parameter of the right type We need a longer term solution to this particular problem. One idea - create a class JSEncapsulate that takes the JSVal and context, and stores the data internally, with methods that allow it to be casted back to a "proper" value As certainly we will need this for more than just the character class 04 July 2004 - Maarc ============ nspawnsp and ncspawnsp rolled into CItem class. Only items can be spawners (not NPCs), and all references to those objects now are done within the CItem class, or through FirstSpawn/NextSpawn/FinishedSpawn Updated documents to not use CHARACTER or ITEM unless where it is actually used, to aid in finding where CHARACTER and ITEM references are that need to be ported to CChar * / CItem * Updated ObjectFactory with a CountOfObjects method, which allows us to discretely count (if we wish) the number of objects for each type we have I believe we've just about covered everything in ObjectFactory that is required to encapsulate chars[] and items[] Removed an unused method in WhoList (GrabSerial) From what I can see, all references to CHARACTER and ITEM are now done by deletion queues or the char/item handlers Added Singleton.h from OGRE, and adapted ObjectFactory to be one. We can create and delete this in a local context, and use ObjectFactory::getSingleton() everywhere else we might need it. Spelling fixes Begun the integration of the ObjectFactory which is #ifdef'd at the moment. The ObjectFactory integration does NOT compile, and error messages are left in place for what needs to be done. Some of the stuff we need to be able to do with the ObjectFactory is essentially, a for every char/item in the world... so what we need to do is support FUNCTORS, I think that would be the most useful The question becomes... what sort of functors? something of the variety of: bool MyFunction( cBaseObject *working, UI32 &counter, void *extraData ); As this will solve almost everything we want to do (reset kills, remove keys and so on), and allow us to bail out early if needed (via the bool, return true if continue, false if not) A few functions are implemented thusly (including world load postloadprocessing) 03 July 2004 - Maarc ============ Fixed an accidental bug where it would constantly process legacy accounts More use of upper() caching Added Config.h, Platform.h, Prerequisites.h and UOXStdHeaders.h Thrown *everything* into the UOX namespace Predeclared most of your classes (not packets, and not a few other minor ones) in Prerequisites.h Begun an implementation of an object factory for creation, destruction and recycling of objects. This is not hooked into the main code pipeline, because some of it still relies on ITEM or CHARACTER types, which we want to eliminate (no more global chars or items!) Removed some SE functions (not JS object functions) that relied on chars[]/items[] and hence would fail miserably GetLightLevel SetPrivateBitRange GetPrivateBitRange SetPrivateWord GetPrivateWord SetPrivateBit GetPrivateBit SetSkillUse SkillBeingUsed GetGuild CompareGuild RemoveFromGuild AddToGuild AttackTarget Attack IsMemberOfTown CalcRank UseReagants UseReagant FindItemOnLayer RaceCompare GetCharPack SetSerial SetDecayTime GetDecayTime chars[] and items[] are now really only referenced in a few small places (less than 10 by array on both, less than 50 by member funcs eg calling Count) ================ Discussion Ideas ================ OgreConfig - Compile time configuration options OgrePlatform - Platform / compiler compatibility file - includes OgreConfig OgrePrequesites - Includes OgrePlatform. Disables any compiler warnings, stl compliance (eg HashMap) and some typedefs (eg uchar). Also includes OgreStdHeaders and forward declares any classes needed. Should lift off the Singleton class, as it would help with some of our data and initialisation Useful classes as Singleton (some possibly lifted from OGRE) LogManager Other potential useful classes template <> FactoryObj ResourceManager Other possibilities Asynchronous network! Esp under windows, where it can callback at any time - inject events into a queue for the PC Consider using a multimap or hash_multimap for storing our object types... given that hash_multimap is like standard, multimap may be a better bet However, there are differences: multimaps are sorted, ergo inserts/deletes are logarithmic - hash_maps are not, only hashed, so constant time. In theory, hash will be better, but given we do little in the way of insert/deletes, multimap would be agood start 7/2/2004 - giwo Made use of OnDrop() JS function. Cleaned up some areas where we were calling UString::upper() far too many times for a single string. Removed unneeded cBO::Load overloads in CItem, CChar, CMultiObj and others. Initial implementation of CSpawnItem in order to break CItem up into smaller classes. 02 July 2004 - Maarc ============ Fixed display issue with saving packet logs (hex values a->f weren't displayed right) Fixed an issue with the add menu that was relying on gumps that didn't exist in older clients Fixed CTEffect constructor so it inits the assocScript Fixed an issue with StartTimer - it would never call back into another script properly Fixed an issue with the action property of spells in JS - it was wrongly declared as an index, not a static param! Added ClientCanReceive to CPNewSpellbook so it can fallback on pre-4.x clients to the old method Added CCP_SPELLCAST/"spellCast" property to JS Character objects Added CCP_ISCASTING/"isCasting" property to JS Character objects Added SetJSCasting/IsJSCasting to CChar but this is a *temporary* measure only. When all spells are outsourced to the JS scripts, it can be removed, so that other code doesn't misbehave (ie the code currently will call CastSpell if you're in casting mode and the timer has elapsed... which won't happen under JS!) onSpellCast for JS spells has been changed to: onSpellCast( socket, character, directCast, spellNum ); This allows for multiple spells registered in a single file (eg think all the summon ones, for instance) StartTimer now looks like BaseObject.StartTime( numMillis, TimerID[, optVal] ); optVal can either be a boolean (call back into this script, so we don't have to know it's number... this solves non-item/npc scripts so magic can work right) or an integer (the script number to call back into) A very basic workflow script exists for clumsy - it does not take everything into account, nor does it actually do the clumsy part, it's just an example. 01 July 2004 - Maarc ============ Fixed a bug with newaccounts.adm and parsing Converted ImportAccounts to use std::string and UStrings Removed the ability to pass "+add:user,pass,email" and "+import:filename.import" arguments to the binary. This *cannot* be done at this stage, as the accounts haven't been initialised and loaded, so conflict resolution cannot occur. Removed typedef of CLPSTR as no variables use it Removed some strlwr's in favour of using a UString with lower() Substring search now uses UStrings rather than allocating and deallocating char * arrays Added character6 to the account property object for JS Added a #define CHARACTERCOUNT to cAccountClass to help centralise any changes Removed old jsMagicTable_st data Added spell equivalents to the JS command registration RegisterSpell( spellNumber, isEnabled ); DisableSpell( spellNumber ); EnableSpell( spellNumber ); Spell JS files can be registered by adding entries like this: FILE=path/file.js into [MAGIC_SCRIPTS] Note that it automatically prepends the path to the JS scripts before it, so you only need to put in a relative path (ie same as command scripts) onSpellCast( socket, character, directCast ); socket is the character's socket (not guaranteed to exist, only if PC is casting) character is the character casting directCast is a boolean true if an NPC false if a PC selecting from a spellbook, wand or scroll a PC who has casted from a JS script depending on param (ie char.CastSpell( spellNum, true/false ) (if true)) // It is the responsibility of the JS script to call the proper events (ie onSpellSuccess and so forth) // They deal with their own mana subtraction and all sorts of things // They also deal with valid regions and what not. s is *not* guaranteed to be valid (ie it could be an NPC) // Suggested script workflow: // * Check if already casting, if so, stop and dump out // * Check if frozen, if so, can't cast spell // * Check if enabled // * Check if scroll, wand or normal cast (scroll reduce requirements, wand do straight away) // * Check requirements (min int, dex, str) // * Check for reagants // * Check if can cast in this area // * Determine if the cast "succeeded" // * If so, fire onSpellSuccess, otherwise fire onSpellFailure. If failed, speak and return // * Set the player as "casting" and freeze // * Create timer for when the spell will be complete // * Wait for timer to elapse // * Upon timer elapsing, // * Unfreeze player // * Send target identifier if any (based on timer) and wait for callback // * If not target, do action (if any) // * If target, create onCallback function // * On callback, do stuff // * NOTE * For area affect spells, use an AreaCharacterFunction Note to self - Want to update TriggerEvent so that you don't just pass a script number (though it's possible) but also a variant where you pass a character/socket/item, so that it can use the script associated with that The spell JS file also has to include a SpellRegistration command function SpellRegistration() { RegisterSpell( 1, true ); // say, clumsy, same as in the spells.dfn file } As it stands, only 1 spell per file, unlike the JS commands, which I should probably fix up by adding a spell ID to onSpellCast and passing it all in (would make life much easier for area effect versions of single spells) 6/27/2004 - giwo Broke packets.cpp/.h into CPacketSend.cpp/.h and CPacketReceive.cpp/.h Implemented some debug code to hopefully clear up some crash issues with region loops. Modified the deltionQueue in order to ensure proper deletion of objects. Fixed an issue causing characters to never switch targets in combat until their target died. Fixed a minor issue with Packet Logging. Fixed an issue causing a crash on creation of a new character. Fixed issue causing many regions to not be recognized. Added display of characters region to 'cstats command. Implemented support for new Popup ToolTip displays. Implemented support for new Spellbook packets via CPNewSpellBook packet class. Implemented support for OSI displaying damage above victims head via CPDisplayDamage packet class. 6/25/2004 - giwo Fixed a small bug causing things to crash intermitently and appearingly random(Thanks Abaddon!) There was ONE sName[32] still left in the code, and he found it! This is only an upate pactch. 6/19/2004 - giwo Fixed several issues with boats, should function normally again. Fixed an issue causing "bad multi setting" error message. Fixed create menus coming up as blank gumps (note they seem to have other issues though). Removed deques from SubRegions, as they seemed to be causing some crashes. Upped the limit on a characters Name and Name2 attribute to 50 characters. Fixed items with a SpawnObjList setting in the DFN's, should now properly spawn NPC's. Fixed 'wipe and 'iwipe commands, should now properly wipe all items in(or out of) selection. 6/13/2004 - giwo Fixed an issue causing characters without fame/karma titles to display as "The Name". Fixed an issue where characters with Grandmaster status would not have a prowess title. Fixed a flagging problem causing offline characters not to appear "greyed" out. 6/12/2004 - giwo Corrected some small logic errors with the new account slot. Should work well now. Modified command handling so strings of text would not be converted to all caps. Added missing "Name" entry into 'set (IE 'set name blah). Fixed an issue causing JS gumps not to respond when a button was pressed. Fixed an issue causing 'set movable # not to work. Updated allmove and houseicons commands to automatically update the client. 6/11/2004 - giwo Fixed a small bug with the offline html output overwriting the online file. Added server side support for 6 character slots. (Currently disabled still) Adder server side support to allow player to select paladin, or necromancer at char creation More support for cBoatObj made it into this commit to the cvs as well. 6/7/2004 - giwo Made use of deques in place of vectors in SubRegions to allow faster memory recovery. Fixed an issue where an object in a multi was not being removed from the multi container. Modified CreateItem() routines so items created directly by ID are not decayable by default. Fixed 'add to pull directly from .mul files, not the scripts. 6/06/2004 - giwo Many changes have been made. Specifically dealing with structure, and STL conformity. Other changes include dynamic gm menu item fetching, a very large bug preventing valid world files from being saved to disk correctly or at all. Added a new GM Menu gump design with new functionality. Documentation to come, but you can now tag items directly from the DFN blocks and assign them to a itemmenu group dynamically at runtime. fixed some spacing and other whitespace related issues. 6/5/2004 - giwo Fixed a crash caused by placing a house. Fixed certain entries in the Help gump not functioning. Fixed a crash caused by invalid objects in the tempeffects queue. Fixed a crash caused by 'dupeing items on the ground Changed 'add tile to 'add Documented Weight.cpp Documented ai.cpp 12/30/2003 - giwo Rewrote much of the combat code, renamed cCombat to CHandleCombat. Fixed a problem causing characters accounts not to be properly set. Fixed an issue causing monsters to not play any sounds. Changed NPCLIST and ITEMLIST behavior to allow nesting lists (for instance, if you want all orcs on another list, add npclist=allorc rather than manually adding each NPC entry). Updated spawnregion NPCLIST and ITEMLIST loading to handle the above changes. Many optimizations done to checkauto(), checkNPC(), checkPC, and genericCHeck(). Moved checkauto() to CWorldMain class and renamed it CheckAutoTimers(). Fixed Polymorph spell and tracking skill, unifying the code a bit for easier maintenance. Moved Polymorph Duration out of polymorph.dfn and into uox.ini to remove needless re-loading. Broke CheckAI() out into several smaller functions simplifying things a bit. Tweaked checkItem() cleaning up RespawnItem() and DecayItem() and optimizing things a bit. Fixed display of clothing on corpses. Made more use of RefreshQueue, now is used for updateStats, Thus SetStrength/SetHP and other Stat-modifying mutators use Dirty(). Updated Dirty() to allow passing of a var (matched to an enum) that is then used to determine the type of refresh. Created virtual functions of many pre-existent functions in CChar to allow setting of Dirty() var for updateStats(). Changed most object pointers in CChar to serials, this is less speedy, but safer (we were getting item objects passed back as character objects, etc). Fixed many scenarios causing crashes due to a bad socket pointer in tempeffects. Fixed several bad socket crashes in magic.cpp. Fixed several instances where invalid objects would be left around causing later issues/crashes. Updated / fixed-up Spawnregions to improve functionality, speed, and all-around usability. Fixed SetSpawn() when object is spawned by a spawnregion, was forcing the region num down to a UI08 (which we handle them as a UI16), also this allows us to calculate our spawnregion (and thus not need to search through all of them in Cleanup()). Commands: Removed many commands updating other commands to take their place. Fixed command "regspawn" and gave it capability to pass "ALL" rather than region number to allow removal of "regspawnall" Removed regspawnmax Removed wipenpcs, moving its functionality to wipe (usage "wipe NPCS", "wipe ITEMS", "wipe ALL") Made wiping commands default to Admin-Only. Fixed an issue causing many commands not to function properly, if at all. Fixed display of (# items, # stones) on containers. Added SetDecayable( true ) to cItem::CreateBaseItem() to default items to decayable. 12/7/2003 - giwo Optimized and cleaned up walking code a great deal. Removed calcSocketObjFromChar() in favor of passing along a socket wherever possible. Added cMapRegion::PopulateList() to simplify region loops. Made CChar and CItem SendToSocket public members and made use of them in some areas. Removed cBoat class and locally declared the few functions it contained where needed. Fixed a minor bug with triggerwords. Fixed house creation and broke buildHouse() into several smaller functions. Fixed door and sign deletion upon re-deeding houses. 11/29/2003 Made extensive use of iterators for iterating through vectors. Made use of .erase() and .push_back() to simplify our vector handling. Rewrote our command table to simplify it a bit and remove the need for two structs. Extensive fixes/changes to HTMLTemplates and HTMLTemplate classes. Fixed an issue when using CChar::SetLocation() where Dirty() was not called. Removed Dictionary.h from global scope. Moved several structs and typedefs into private members of their only calling class. Made use of UString::replaceSlash() in place of our current PathFix() functions. Removed vtables from a few more functions that had no need of virtual functions. Rewrote JailSystem::WriteData() to make use of an ofstream, and moved out the code specific to a Jail Cell into its own WriteData() function. Changed insta-log code so only house owners are logged out in their house, saving us some time searching for a matching house key. Removed Network::kr and faul as they performed the same function as cWmWorldState::KeepRun() and Error(). Fixed an issue in loading mapregions where Items and Characters would not be properly deleted if they failed to load. Took our main classes out of global scope, now only files that include their headers will have access to them. Added CServerProfile class to remove our profiling variables from global scope. Simplified a bit of the handling in targeting.cpp, allowing the removal of many functions. Tinkered with lineofsight.cpp a bit allowing the removal of itemids and loscache from cItem class. Moved doorbase[] out of global scope and into door.cpp. Made use of cSkillClass in cPlayerAction.cpp BestSkill(). 11/22/2003 Fixed bug causing NPC's not to be created. Fixed a server crash upon login (caused by checking an invalid region). Simplified much of gumps.cpp, removing cGump in the process. Removed several members of cCommands and moved them to their only usage in cmdtable.cpp. Added packet classes CPIGumpInput, CPIHelpRequest, CPITradeMessage and CPIDyeWindow. Fixed a few instances where UString::sprintf() was causing a server crash (unknown as to why). Removed some repetitious code. Removed unneeded overloads of cSocket::target and cSocket::mtarget Combined cSocket::ShowCharName() and cSocket::textFlags. Made more use of strings and UString. 11/17/2003 Added CResponse.cpp & CResponse.h Moved the bulk of cSpeech::Response() into CResponse() classes. cSpeech Changes: Changed genericTalking into CPTalkRequest::Handle(). Combined sysbroadcast and consolebroadcast to sysBroadcast. Removed checkForVendorResponse() and responsevendor(). Removed cSpeech class, locally declared its remaining functions. Removed cSpeech.cpp/.h from the project. Fixed up packet logging, making use of an ofstream. Added support for OSI TriggerWords rather than doing our own string searches. Made use of ofstream in several areas where we currently used fopen(). Made RealTime inline and used it in place of duplicate code in CConsole.cpp. 11/10/2003 - giwo Added script creatures.dfn to store (and allow easy modification of) our creature data. Removed CWorldMain::initCreatures(). Reduced redundant code. Fixed some minor issues. 11/7/2003 - giwo Implemented Object deletion queue. Made use of VALIDATESOCKET(s) in skills.cpp and cmdtable.cpp. Changed itemQueue and npcQueue to a single refreshQueue. Converted spawnregion[] to a cSpawnRegion vector spawnregions. Fixed up many classes to avoid using virtual functions unless necesarry (IE they have derived classes). Added ValidateObject() to take the place of NULL checks on pointers to cBO and its derivatives. Added CItem::Cleanup(), CChar::Cleanup() & cBO::Cleanup(). Added cBO::Delete(), and IsDeleted(); Added CItem::Spells() to take the place of MoreXYZ in Spellbook handling Removed CItem::Dirty() and CChar::Dirty(). Removed cItem::DeleItem() and cCharStuff::DeleteChar(). Removed cWM::TotalTownRegions() and TotalSpawnRegions(). Removed CChar::SpellAction(). Removed CItem::Doordir(). Oct 31 2003 - giwo Added struct ProwessTitle to allow more customization when dealing with prowess titles in titles.dfn. Added vector prowessTitles to CWorldMain. Added map idToItemType in cPlayerAction.cpp to remove redundant doubleclick item handling based on both ID and Type. Added scriptability (itemtypes.dfn in /items/ dir) for automatically associating an items ID to an item type. Added cSocket::TempObj() in place of addmitem and overuse of AddID. Changed cSocket AddX() and AddY() to SI16, made more use of TempInt(). LoadSkills() now sets a skills madeword to "made" by default. Updated several areas where we loaded in scripts to make use of UString. UOX now reads in a skills madeword from skills.dfn rather than setting them manually in ResetVars(). Converted skill[].madeword into a string. Combined skillTitle() & prowessTitle() into getSkillProwessTitle() to reduce wasted cycles in PaperDoll(). Moved npcAct() to cTargets and renamed it to DoActionTarget(). Changed command SETID to require only one value (IE 'setid 0x0191 rather than 0x01 0x91) Implimented Character update queue. Renamed fameTitle() to getFameTitle(). Removed handleDoubleClickIDs(). Removed npcAction() as cEffects::PlayCharacterAnimation() did the same thing. Removed std::string prowess from titles_st. Removed some unneeded typedefs and defines. Removed ResetVars() as it was no longer needed. Removed SleepNiceness() and CServerData::niceness as there was no need for it any longer. Changes to cBaseObject and its derived classes: Added CItem::ItemDecayed() to simplify CItem::Save(). Removed CItem::enhanced, making use of priv variable instead. Removed CChar SkillItem() and Trainer(). Removed some unused functions. Removed CChar may_levitate, willHunger, casting, and med variables, making use of the bools variable instead. Moved CChar::GetBestSkill() to cPlayerAction.cpp as BestSkill(). Changed CChar fx1, fx2, and fy1, fy2, to fx[2], fy[2] to simplify handling. Changed CChar::petguarding to a cBaseObject. Changed CChar::ftarg, targ, trainer, and trackingtarget to a CChar pointer. Changed CChar::trackingtargets to a CHARLIST. Changed CChar::skillitem, speechItem to a CItem pointer. Changed CItem::Refresh() to CItem::Update() and added a pure virtual cBaseObject::Update(). Updated CChar::Update() to accept a single socket to update to. Made CChar::SendToSocket() private and removed a superfluous CChar refrence. Added cBaseObject::LocationChanged() for npc updating (if location changes, uses CChar::Teleport(), otherwise CChar::Update() ). Made those functions which were only used inside the class private Updated cBO::PostLoadProcessing() to use the proper function based upon the object type. Made some members of cBaseObject pure virtuals, also changed some functions that didn't need to be virtual. Changes to cEffects: Renamed action() to PlayCharacterAnimation() and changed it to accept a CChar rather than a cSocket. Renamed impaction() to PlaySpellCastingAnimation() and changed it to accept a CChar rather than a cSocket. Renamed movingeffect() to PlayMovingAnimation(). Renamed staticeffect() to PlayStaticAnimation(). Script Changes: itemtypes.dfn - Allows players to define how items of a certain ID will be handled on doubleclick (IE: "forge=0x0FB1,0x1982,0x197A,0x197E" causes all items with those ID's to behave as a forge when double-clicked, unless they are given a type) skills.dfn - Added MADEWORD= entries to those skills which have a madeword other than "made" titles.dfn - Updated [PROWESS] to: minReqSkill=ProwessTitle type entries Oct 19 2003 - giwo Changes to CWorldMain class: Added worldTimers[] Get/Set Timer(), and enum CWM_TID to group all timer values together Removed Get/Set NextNPCAITime, NextFieldEffectTime, HungerDamageTimer, LightTime, ShopRestock Removed erroredLayers. Removed ShowLayer(). Removed ItemCount & CharCount. Removed IncIMem() as it was not used. Removed ExecuteBatch as no good use for it could be found. Renamed ItemCount2() to NextItemSerial(). Renamed CharCount2() to NextCharSerial(). Moved creatures[] from uox3.h. Moved initCreatures() from cFileIO class. Moved weightPerSTR to CServerData class. Moved secondsperuominute to CServerData class. Added enum ItemTypes to simplify handling of items by their type. Added First(), Next() and Finished() functions to cItemHandle and cCharHandle inplace of our Item / Char Count() loops. Added CPICreateCharacter, CPIDeleteCharacter, and CPIPlayCharacter packet classes. Added WEIGHTPERSTR= value to uox.ini. Added a cItem constructor and destructor to handle creating and deleting loscache[] and itemids[]. Added ADVOBJ, DYEHAIR, DYEBEARD, KILLHAIR, KILLBEARD, KILLPACK, and POLY to DFNTAGS enum to support advance.dfn Removed a good number of function declarations from funcdecl.h and declared them locally in the files that used them. Removed some includes that no longer seem to be used. Removed index reference from PostLoadProcessing() Removed cFileIO->LoadNewWorld() as all the defaults set there were set by the CWorldMain constructor. Removed class cFileIO as most of its functions were called only by uox3.cpp. Removed cNetworkStuff::BatchCheck(). Moved creation of initial player items from createChar() to newbieItems(). Updated advanceObj() to take advantage of our DFNTAGS enum Changed CItem::Get/Set Type() to use enum ItemTypes. Fixed up some functions in movement.cpp and commented out those that are unused. Reorganized globals.cpp to better match with uox3.h Moved spells[] to CMagic class. Moved itemids[] and loscache[] to cItem class. Oct 13 2003 - giwo Changed CWorldMain::logout to a vector logoutLocs. Moved some structs from CWorldMain.h to uoxstruct.h. Changed CWorldMain::escortRegions to a vector. Removed cFileIO::LoadPreDefSpawnRegions() and moved its contents to the one refrence of it. Removed cWorldMain::ResetDefaults() and allowed the constructor to do the work itself. Removed calcSocketObjFromSock() and used Network->GetSockPtr() in its' place. Added cSpawnRegion:: WorldNumber(), IncCurrentCharAmt(), and IncCurrentItemAmt(). Removed handlers.h from global scope, included it in those files which used it Made Combat::WillResultInCriminal() public and made use of it throughout the source Removed VialTargetItem() and VialTargetChar(), tweaked them a bit, and made them a part of vialtarget() Made VialTarget() a part of cTargets class, and MakeNecroReg() a part of cSkills class. Removed necro.cpp from the project cItem changes: Added: CreateMulti(), CreateBaseItem(), CreateBaseScriptItem(), PlaceItem(), CreateRandomItem() Removed: SpawnItem(), SpawnItemToPack(), SpawnMulti(), SpawnRandomItem() Rewrote: CreateItem(), CreateScriptItem(), CreateRandomItem() cCharStuff changes: Added: CreateNPC() (and an overload), CreateBaseNPC(), CreateNPCxyz() Removed: AddNPC(), AddNPCxyz(), SpawnNPC(), CreateScriptNpc(), SpawnRandomMonster() Rewrote: AddRandomNPC(), PostSpawnUpdate(). cTownRegion Changes: Updated CChar->GetRegion() and calcRegionFromXY to return a cTownRegion pointer. Moved locations from CWorldMain class to cTownRegion and made it a vector. Changed how we load in regions.dfn and handle regions.wsc to avoid having unneeded extra TownRegions. Updated cTownRegion::Save() to use std::ofstream to match with the rest of our save routines. Script Changes: Changed all UNDEADLIST to NPCLIST entries in digging.dfn. Oct 04 2003 - giwo Removed some superfluous #includes and moved others to more appropriate places. Removed jail.h from global scope and included it only where it was needed. Added CPIGumpChoice, CPIBuyItem, and CPISellItem to handle those packets. Removed some functions from funcdecl.h which did not need to be in the global scope. Replaced getRootPack() and getPackOwner() with FindItemOwner() and an overload to simplify it. Removed getPack() in favor of using CItem::GetPackItem(), also made GetPackItem() a bit more useful. Replaced cItem::PackType with cItem::getPackType(), created enum PackTypes to simplify it, and made it more useful. Added some #ifndef's in header files which were missing it. Moved openPack() and openBank() into cSocket class. Moved batchcheck() into cNetworkStuff class, since that was its only usage. Made several members of cNetworkStuff private, as they had no reason to be public.28 Sep 2003 Removed CItem::FirstItem() and NextItem() as they were no longer used. Renamed CItem::FirstItemObj() and NextItemObj() to FirstItem() and NextItem(). Simplified setting and evaluating default values for cSocket, CChar, CItem, CMultiObj, and CBoatObj classes. Made wider usage of COLOUR typedef. Changed GENDER typedef to a UI08. Updated function documentation in quantityfuncs.cpp. 27 Sep 2003 - Maarc Removed some uox.ini options that don't have code backing NPCTILECHECK ANTILAGSAVESPERLOOP MAINTHREADSLEEP STATDELAY EXTERNALACCOUNTCREATION ENGRAVEENABLED SPEEDCHECKNPCS MSGBOARDKEEPMESSAGES MSGBOARDMAXMESSAGESALLOWED MSGBOARDMAXMSGSRESPONSE LIGHTMOON1UPDATE LIGHTMOON2UPDATE COMBATWRESTLINGSPEED COMBATMAXMELEEDAMAGE COMBATMAXSPELLDAMAGE COMBATMAXPOISONINGDISTANCE COMBATMAXHUMANABSORBTION COMBATMAXNONHUMANABSORBTION Note that these INI options have been removed from all code, except they will still be parsed (just ignored) Heavily documented each option in cServerData onCreate wasn't executing for PCs if HTML status was disabled Simplified some function naming within CServerData, as the lines were getting very long when using them Removed parsing of unused tags ripped out earlier 26 Sep 2003 - giwo Changed CChar's trackingtargets from a fixed size to a std::vector and used the maximum number of tracking targets specified in the INI Collapsed the CChar's timers to use an array based on the timer enums Removed some unused functions from CChar Fixed bug where CChar's PoisonStrength attribute was not being saved/loaded Note: Character's FlySteps property is saved/loaded, but never used - removed 25 Sep 2003 - Maarc cServerData renamed to CServerData, in a beginning attempt to get a consistent class naming scheme Removed an excess print message at startup Consolidation of some CServerData members into arrays, reducing number of get/set functions required 24 Sep 2003 - Maarc Fixed resurrecting not logged in PC character, we were making a bad assumption about NPCs and sockets Updated console code to get the width/height properly under windows Added help/commands directory to data directory, and put an ACTION.txt in there Fix to ScriptSection::MoveTo 22 Sep 2003 - Maarc Killed some warnings Couple of linux compilation fixes 21 Sep 2003 - Maarc Fixed crash bug with CPBookPage Modification of these submissions from giwo Moved statwindow() into the cSocket class Removed sendItem(), sendPackItem(), and openCorpse() Replaced the aforementioned functions with an improved cItem::Refresh(), cItem::SendToSocket(), and cItem::SendPackItemToSocket(). Added cItem::RemoveFromSight() to better handle usage of the CPRemoveItem() packet class Added cPlayerAction.cpp and cPlayerAction.h to move many functions out of global scope. Removed cClick.cpp as the aforementioned file holds its functions now. Moved updateskill() into the cSocket class The modifications No cPlayerAction.h Many of the functions moved into cPlayerAction are put into Handle() routines of the right packets 19 Sep 2003 - Maarc Crash fixes Fixes to getTileName to work better with strings and plurality banlist.ini/firewall.ini now structured much like a DFN. It expects all entries to be in the form of: [BANNED] { IP=x.x.x.x } The [BANNED] is non-specific, it will search through all the sections in that file Template banlist.ini is updated as well teleport.scp has been reengineered to be like a DFN style. See example in the CVS, as it has been updated Updated jse_fileassociations.scp to a DFN style syntax Updated jse_objectassociations.scp to a DFN style syntax CVS versions of jse_*.scp have been updated to new style Reduced number of fopen() calls required by using FileIO->FileExists more cVersionClass converted so that most of it's methods are now static, as we don't adjust versioning at runtime It also means we don't actually have to create a cVersionClass object Console and Magic log routines now take strings instead of char * Dictionaries updated to use DFN style syntaxing 18 Sep 2003 - Maarc As a guess... more strings! Fixed a few minor issues here and there cStringTools used even less Contemplating replaced cMagic::Log and Command::Log with a templated log function Considering use of XML type of output for server logs 17 Sep 2003 - Maarc More strings! Fixed a bug with telltime Updated dictionaries More functions take strings than char * now Fixes to tellmessage Fixed bug in DictionarySpeech 16 Sep 2003 - Maarc More char * stuff replaced with std::string and UString Few minor cleanups to code, increasing readability Replaced CapIt and CapColour with a templated Capped function, which takes a min/max value Removed BuildFilePath from mapstuff.h and used UString in its place, to fix some path issues 15 Sep 2003 - Maarc More internal class members are now either UStrings or std::strings More functions updated to use std::string Updated HTML template stuff to use UString more Almost completely removed all instances of cStringTools::makeString in favour of UString functionality Fixed some parsing problems introduced in recent updates Fixed single clicking with 3D clients Stripped out more unnecessary / unused code CharBySerial behaves the same as ItemBySerial in lookups (JS funcs) Area commands now use UStrings, need testing Use of cStringTools down to less than 100 references 14 Sep 2003 - Maarc UString classed used in many more places Script/ScriptSection updated to use an ifstream rather than a FILE * Code reduction through use of UString and ifstreams Reordered some logic in functions Fixed a bug where PARENTRACE wouldn't work Fixed some bugs dealing with polymorph script reading Due to VC6 issues, the strToDFN table in ssection.cpp is now a series of assignments instead. Functionally the same, just something VC6 will handle Binary saves ripped out in it's entirety, as there were bugs dealing with it, and a future implementation is planned cPBuffer renamed to CPBaseBuffer cPUOXBuffer and cPXGMBuffer subclassed from cPBaseBuffer - cPBaseBuffer's old Pack() routine now belongs in cPUOXBuffer Enables possible future encryption of xGM seperate from normal UOX packing 12 Sep 2003 - Maarc cStringTools is no longer created and instantiated. It's methods are now static, as it makes clearer sense that way Stripped out some functions that weren't called but were transitionary from 0.7x Removed cAccountClass::atol as cStringTools offers methods to do that Fixed up logic dealing with std::string and the find method Few more error checks More warning fixes Unified timer code, presenting a consistent interface across both Windows and Linux Updates to use std::string instead of char *, to make the logic look simpler Added a UString class that supports stripping of whitespace, comments and other commonly used functions on strings Implemented some use of UString already, simplifying some of our string parsing VALIDATESOCKET macro added into targeting.cpp to help with the validation of socket pointers in most functions Added operator overloading for basic UI/SI 08,16,32 bit and std::string types for cPBuffer, to allow in future for serialisation potentials 11 Sep 2003 - Maarc Few more warning fixes Many, many, many changes to try and fix the size comparison issues that VC7.1 pops up with. This should also make it more portable from 32/64 bit. The command 'cachestats now has a basic implementation Identified a problem with privileges and binary saves Made RandomNum a templated function Fixed possible bug with converting strings to dice, wasn't working correctly 10 Sep 2003 - Maarc Improved VC compatability with std::min/max Cleaned up quite a few warnings and size issues, as revealed by VC7.1 This means a lot of changes to using size_t where possible 08 Sep 2003 - Maarc Some sign issues fixed Used std::min / std::max better. VC6 issue, unsure about higher versions. VC6 doesn't define min/max in std:: space, but _MIN/_MAX instead. Consequently, non VC compilers have std::min/std::max remapped to std::_MIN and std::_MAX. Not nice, but it works Dead functions removed, cleanup of some logic, removed instances where comparisons were always true Fixed warnings associated with the running changes implemented last night Removed some files that aren't actually used 07 Sep 2003 - Maarc Fixed an issue with WalkTo/RunTo, it was aborting incorrectly with wrong number of arguments WalkTo/RunTo also flush the existing walk path before calling PathFind, to ensure that the new walk path is executed Fixed a lack of type with a const value in cScript module Fixed some iterator problems, increasing compatability Changed a #ifdef compare to __unix__ to a !defined _MSC_VER, helping out mingw compatability Fixed some non-msvc compile issues Updated some places that were doing a Refresh, which should have done a Dirty Slight tweaks to picking up/dropping Updated packet logging to help with more useful dumps Updated some more x++ to ++x type of code CMapChange renamed to CPMapChange, to reflect better naming style cPCharLocBody renamed to CPCharLocBody, to reflect better naming style Debug message in WalkTo/RunTo when in debug compile Fixed a MethodError problem with WalkTo/RunTo occurring when it shouldn't Following packets now have log routines: CPMapChange CPCharAndStartLoc CPCharLocBody CPOpenGump Updated CPOpenGump so that it's no longer a fragmented packet class, requiring FlushBuffer Removed a dead function (itemmenu) that's never used Removed dead SE function RunTo, as it's now a character method Fixed WalkTo/RunTo as methods - the pathfinding was never doing anything. Used new npc wander mode of 6, which will purely follow the path Those NPCs that are supposed to be running really will be now 06 Sep 2003 - Maarc The bounce routine flags the bouncing object as dirty ---- After preprune tag Removed heartbeat and wilderness tags from uox.ini Removed partmsg from uox.ini as joinmsg sets the same value Removed uoxbot from uox.ini Removed lagfix from uox.ini Removed checkmem from uox.ini Removed combatallowcriticals from uox.ini Removed fixedlightlevel from uox.ini as it is unused (also removing the 'light command, as it was the only thing that used it. Set, but never read) Removed scriptsectionheader from uox.ini - it was transitionary only, if you haven't changed over by now, you never will Removed an extra startgold entry from uox.ini code No longer parse old 0.7x server.scp types Fixed Bug: Seconds per UO minute used, but never actually read from the INI file. Now read/written from/to file. Added Console support to dump ini file lookup offsets without running the server. Updated console 'V' command to reflect the upcomming pruning of the unused INI tags. Fixed a crash bug with onDropItemOnNPC, stupid typo problem Updated some setcont code to deal better with layer 0 items, should help with secure trade better Change to onAISliver JS event - if js returns true, then server doesn't do normal AI check. if js returns false, server goes through it's normal routine Added some more #ifdef code for some basic boost use - trouble with filesystem currently Lots of whitespace updates Allowed scripts to be attached to regions, not just items/characters - use SCRIPT tag in the DFN for the region. Currently supports onEnterRegion and onLeaveRegion (same params as the character version) Minor rework of some of the logic in trade code, may or may not help Playervendor deed altered to spawn [playervendor] rather than [2117] Removed excess PathFix function in cServerDefinitions Should be able to browse player vendor packs without a snooping check Minor issue with loading multis, was erroneously reporting DeedName as an unknown tag Removed some unused dead code dealing with gumps Added atWar property to JS characters Hid most of cSocket's members Added BytesSent/BytesReceived methods to cSocket Implemented WalkTo and RunTo as character methods. Takes 2 (object + maxsteps) or 3 (x, y and maxsteps) parameters Included the js32.h, and js32.lib files to the source tree. TO help ease *nix users 30 Aug 2003 - Maarc Updated InternalPoll for speech, which should solve some compatability issues, and solve delayed speech from not occurring. Added some batch files for windows which should help with deployment in future. They are found in the root, in uox3 There are 3 predefined templates pureinstallcopy copies data and built binaries buildanddatacopy builds a release executable and does same as pureinstallcopy doall same as buildanddatacopy, but copies source as well Each must be called like doall c:\app\uoxtest The batch files accept a parameter which dictates where the files are to be copied to. From there, simple zips can be made. Work continues on resurrecting a win32 installer, and communication with Rynet will see a similar process created for Linux. 29 Aug 2003 - Maarc Warning and scope fixes only 22 Aug 2003 - Maarc Added Empty OnStartup/OnShutdown events( to be expanded upon later ) Added a JSE class wrapper around UOX3 Account instance to provide access to methods Implemented CAccountClass wrapper Created .AddAccount(name,pass,email,flags) to add an account to the server Created .DelAccount(name) or .DelAccount(accountid); NOTE: These are pretty self explanitary. Updated JS implementation of wrapper for cAccountClass. No longer var i = new CAccountClass syntax, it exposes a global object "Accounts" With minor tweaks, managed to get Slasher's account editing stuff to work 13 Aug 2003 - Maarc Fixed a crash bug with multis and deeds - the deed property wasn't always being set correctly and could crash on worldsave Updated deed property of cMultiObj to be a std::string rather than a const char *, to avoid pointer issues as it's used infrequently Added ExecuteCommand as a character object method (Example: pUser.ExecuteCommand( "add 0x04a9" ); ) Minor whitespace fixes Changed MethodError of CChar_ExecuteCommand to the right func name, was SysMessage Removed old standalone ExecuteCommand function from JS engine, so only character method is available Updated version number 11 Aug 2003 - Maarc Fixed a bug where insufficient templates in the HTML template system would cause a crash at runtime Added 'setspawnobj and 'setspawnobjlist commands Fixed a bug with tweaking items where the text strings were incorrect at the end of the property list Fixed a bug with tweaking items where there was no text string at the end of the property list Added spawnobj/spawnobjlist property to tweaking of items Whitespace updates Fixed typo in debug print of CChar_UseResource Updated dictionaries in the tree 07 Aug 2003 - Maarc =========== Overhauled HTMLTemplate Class to actually handle multiple templates correctly. Templates Supported at this time are : ETT_ALLTEMPLATES : Update aLL templates found in default_templates.dfn ETT_GMSTATUS : Update the GMSTATUS template ETT_GUILD : Update the GUILD template ETT_OFFLINE : Update the OFFLINE template(no player functionality yet) ETT_PLAYER : Update the PLAYER template(no guild functionality yet) ETT_ONLINE : Update the default server STATUS template Supported template Types: STATUS : PLAYER : GUILD : GMSTATUS : OFFLINE : NOTE: The format and extention of the template files has changed slightly Here is a complete default templates example (Filename: default_templates.dfn). //o-------------------------------------------------------o //| QUick note: TYPE must always be the first tag found in //| a block. //o-------------------------------------------------------o [DEFAULT_STATUS] { TYPE=STATUS NAME=Server Status Template UPDATE=5 INPUT=C:/uox3/dfndata/html/online.htf OUTPUT=D:/mywebserverdir/serverstatus.html } [DEFAULT_PLAYER] { TYPE=PLAYER NAME=Server Offline Template INPUT=C:/uox3/dfndata/html/player.htf OUTPUT=D:/mywebserverdir/player.html } [DEFAULT_GUILD] { TYPE=GUILD NAME=Server Guild Template UPDATE=5 INPUT=C:/uox3/dfndata/html/guild.htf OUTPUT=D:/mywebserverdir/guild.html } [DEFAULT_GMSTATUS] { TYPE=GMSTATUS NAME=Server GameMaster Status Template UPDATE=5 INPUT=C:/uox3/dfndata/html/gmstatus.htf OUTPUT=D:/mywebserverdir/gmstatus.html } [DEFAULT_OFFLINE] { TYPE=OFFLINE NAME=Server Offline Template INPUT=C:/uox3/dfndata/html/offline.htf OUTPUT=D:/mywebserverdir/serverstatus.html } EOF NOTE: At all time in any template block the first tag MUST be the TYPE tag. A detailed list of supported template tags will be forth comming. 05 Aug 2003 - Maarc =========== Fixed PC dying issue, not changing to ghost and not turning to gray Reinstated terminating NULL with regards to CPOpenBuyWindow, which should hopefully restore pricing in 3D client 03 Aug 2003 - Maarc ======= Fixed issue with delete characters. Now characters should delete correctly, and not list unknown values, and erroneous data. Fixed an issue with CPIGumpMenuSelect, which was getting radio buttons wrong Fixed an issue with BuyFrom, where the logic was backward... should be more like pUser.BuyFrom( NPC ) than NPC.BuyFrom( pUser ) Fixed similar issue with SellTo Added "movable" to area commands on request of Xuri >>>>>>> 1.1.2.22 02 Aug 2003 - Maarc Updated CPItemsInContainer so that it will work faster and should work better with vendors Updated CPOpenBuyWindow to work better with vendors, and go faster Added AoS weapons and LBR-monster weapons (Xuri) Vendors work fine in 3D client but not in 2D Added a packet specific log routine to CPOpenBuyWindow Updated cSocket and other routines to allow for packet specific logging on receive Sideeffect of that is that non-packet classes save data already logged for variable length packet Implemented Log() routine for CPIFirstLogin, CPISecondLogin, CPIServerSelect, CPIClientVersion and CPIUpdateRangeChange Whitespace updates setid now has character body restrictions, and is the same as 'poly, which has been upgraded to 0->0x7CF Removed JS functions due to equivs GetTarget SetTarget CalcSockFromChar CalcDefense CalcAttack CalcCharFromSock GetFlag GetTown SetTown GetRegion SetRegion VendorBuy -> BuyFrom method of Char/socket VendorSell -> SellTo method of char/socket Added flag property to characters in JS (deals with criminal, murder and so on, read only property) Migrated base JS functions to character/item methods FinishedItemInCont -> FinishedItems FirstItemInCont -> FirstItem NextItemInCont -> NextItem Dismounting a creature will have the creature face the same way as you onDropItemOnNpc event implemented First executes for item and if item doesn't bounce, executes for NPC (so item can override bouncing) scripts must return a value between 0 and 2 0 == bounce 1 == don't bounce, use code 2 == don't bounce, don't use code Updated mounts to support rest of LBR/AOS mounts 01 Aug 2003 - Maarc Fixed issue with delete characters. Now characters should delete correctly, and not list unknown values, and erroneous data. CChar's attacker property was a CHARACTER, not a CChar * - This lead to mixed ideas of what it's values are Changed attacker property to CChar *, which should provide some minor performance benefits Fixed a bug with stealing which would flag an index error on failure when not in combat OpenURL function on a socket is now enabled Closed a minor memory leak with the JS OnTalk event Updated version number Fixed an issue with NPC response (bank and other commands were not working) - Also affected JS speech Found an issue with the vendor buy list.... not working correctly, unsure as to the reason why. All items are (null) at 0 gp, though icons are fine 31 Jul 2003 - Maarc DoStaticEffect (JS function) was both a standalone method (DoStaticEffect) and item/char method (StaticEffect) Removed standalone implementation of DoStaticEffect, as it wasn't updated to current implementations and one impl should be used Fixed a bug with JS StaticEffect method that would make it not work correctly with items JS method table for chars updated to reflect that StaticEffect takes 3 parameters, not 4 Fixed a crash bug when items tried to talk (via JS or not) Some more basic implementation (ifdef'd out) of using boost tokenisation Whitespace cleanups CPObjectInfo caused crash bug when firefield was cast, fixed The criminal() function would cause a server crash if the thing going criminal was an NPC (symptom of EV's crashing server) Removed JS onUsage event, and updated onUse in its place onUse now requires a return value of either true or false in the script if return value true, then it continues on executing with hard coded implementation if return value false, then no hard code is executed Fixed 'make so that 'make player would work again Items can now use the third optional parameter of StartTimer in JS, which enables to call back into the currently executing script Updated SetCont so that if it fails to equip, it prints out serial and layer, and resets contObj properly Fixed crash with killing characters and corpse clothing onUse event fires for a door when it is used, allowing for greater customisation of whether the door can be opened or not 24 Jul 2003 - Maarc cPBuffer now has an internal packed buffer, as well as an internal Pack() routine cSocket::Send adjusted to use the cPBuffer packed buffer/unpacked where possible cPBuffer's packed implementation means that if the packet is sent to multiple sockets, only one pack is needed And consequently, runtime performance should be slightly improved (only affects removeitem sort of packets) Updated version number getTileName updated to behave like in singleClick() singleClick now calls getTileName for name lookups rather than basically reproducing the code singleClick slightly optimized to only do a character lookup if required whitespace cleanups 20 Jul 2003 - Maarc Fixed long packet problem Fixed possible problem with create skill window Converted more things to use CPSendGumpMenu Fixed item refresh bug for items created after server load Optimized code size for cGuild gumps a touch SendVecsAsGump uses CPSendGumpMenu - note, we should be trying to get rid of all uses of SendVecsAsGump Commented out a call to Gumps->Open() that locks up later clients (see cstatstarget in cTargets) Optimization note for CPSendGumpMenu reuse - look at moving some of the processing from Finalize() to AddCommand()/AddText() 19 Jul 2003 - Maarc Fixed a problem with WhichLoginPacket, as it would ignore some valid packet IDs Implemented CPSendGumpMenu, an attempt to write a packet class for 0xB0 outbound CPSendGumpMenu works for part of wholist and is implemented for 'howto However, the size of the packet is bigger than our largest buffer.... and that means that it tramples all over memory A fragmenting version is implemented, but the client is more likely than not to lockup Real answer? Crypt and send a buffer big enough to hold the entire packet 18 Jul 2003 - Maarc Created a WhichLoginPacket function, to deal specifically with logins only WhichLoginPacket will throw an exception if it receives a request that it knows nothing about This request is caught and swallowed, via new cSocket::FlushIncoming 17 Jul 2003 - Maarc Reduced a number of flush locations Books updated to packet classes Fixed a bug with reading predefined books If cannot wear an item, returns failure (only prints in debug mode) Removed some commented code Updated spellbooks to use packet classes Slight spellbook speed up Removed some dead variables Some messages now only print in debug mode Packet 0x98 (allnames 3D) moved to packet class Game server list moved to own packet class Added Add() method to CPItemsInContainer Turned outbound 0x66 into CPBookPage Turned outbound 0x6F into CPSecureTrading UseDoor SE function now supports objects not indexes MAXLAYERS reduced to 30 Fixed crashes related to system speech and npcs Edited changelog to explicitly mention the month, not using a numeric (not everyone is an American) CPDrawContainer model changed from SI16 to UI16 Updated to version 1g Addendum Replaced almost all instances of a++ and a-- code with ++a and --a, without breaking semantics Implemented a basic boost tokenisation on account parsing of v3 files (ifdef'd out by default) Saves approximately 100 lines of code and is more readable 15 Jul 2003 - Maarc Should fix deleting characters 30 Jun 2003 - Maarc RefreshItem() changed to Item->Refresh() Implemented RefreshItem queueing talking/unicodetalking merged into generictalking Speech (both unicode and non-unicode) converted to a packet based system Much greater compliance with packet packing rules Very simple handler for NPC context menus (UOXClassic as inspiration) NPC context menus turned on by default during login All-names 3D basic implementation (for testing) Extended status window talk, talkAll, emote and emoteAll are character methods itemTalk is a method of an item sysmessage is a method of cSocket Removed DefBase object and used constants for defaulting instead Added ApplySection to Items and Chars in the JS engine Split SpawnItem into CreateDFNItem and CreateBlankItem Campfires now have 1 HP forced OnSpeech event altered. Forces script to return a value. (0 == NPCs/PCs see the speech, 1 == PCs see it, 2 == no one sees it, defaults to 0) Female bit specified on CPExtMove if person is female Yellow bit specified on CPExtMove if full health Command handlers no longer need the offset value, as speech is unified Books have partial packet class implementation Better use of BASEITEMSERIAL and INVALIDSERIAL CChar::SendToSocket implemented as packet class target() and mtarget() are cSocket methods Added pragma note for start of Move Guildstone functionality location structure cleanups/movement cCommands::MakeShop streamlined Prints to console when a fragmented packet is attempted Changed a dynamic memory allocation to static in cSocket::Send cGump::OPen converted to use packet class Addmenu no longer has nomove tag Spellbook start converted to packet class CPExtMove now handles flag setting Streamlined startChar routine I've removed these JS functions (as they have attrib or method equivs) Gump_CreateGump Gump_AddButton Gump_AddText Gump_AddRadio Gump_AddPage Gump_AddPicture Gump_AddGump Gump_AddBackground Gump_AddTextEntry Gump_AddCheckbox Gump_Delete Gump_SendToSocket GetName2 SetName2 GetLowDamage GetHiDamage SetAtt GetAtt SetDef GetDef SetDecayable IsDecayable IsCriminal IsMurderer IsInnocent MakeCriminal MakeInnocent GetGender SetGender TurnToward DirectionTo GetRaceName SetRaceName IsPlayerRace GetRacialGenderRestrict GetRacialArmourClass GetRaceLanguageSkill GetRacePoisonResistance GetRaceMagicResistance GetRaceVisibleDistance GetRaceNightVision GetClientVersion GetClientType These have been migrated to newer methods: CastSpell (chars) AddSpell (chars) SpellFail (chars) ApplyRank (items) RequiresBeard (races) RequiresNoBeard (races) CanRaceWearArmour (races) IsValidHairColour (races) IsValidSkinColour (races) IsValidBeardColour (races) SpawnItem has been split into CreateDFNItem and CreateBlankItem. A new object type, UOXCFile, has been made. eg var mFile = new UOXCFile; It has the following methods Open Close Write Read ReadUntil Free and properties: pos (read/write) length (read) eof (read) 25 Apr 2003 - giwo Added: Added enum distLocs to simplify distance checking (to avoid confusion over what a certain distance would be IE 1 tile away = 2) Added support for setting an items container in JavaScript (object.conainer = newcontainer) Added string support for house.dfn allowing house items and house deeds to be strings, not just numbers Added new cStringTools class to replace makeNum() with type-matching string-to-number functions Added new type of command func, CMD_SOCKFUNC, this will be used to define those commands which need a socket passed to it Added Get/Set wrappers for cmd_offset and made it a private member of the cCommands class Added cSpeech class and cSpeech.h to remove the speech functions from global scope Added support for ADDITEM item,amount in the itemmenu's (note if you specify an amount it will override the default amount setting of that item) -Same support for PACKITEM in newbie.dfn and npc dfn's and ADDITEM in carve.dfn Added EQUIPITEM and PACKITEM in place of ITEM in advance.dfn, note PACKITEM has support for amounts, EQUIPITEM will attempt to equip the item on the character Changed: Cleaned up applyNPCSection and added support for reading in HP tags Fixed issues with reading in certain tags from NPC-defs Made console output hexadecimal numbers where applicable also reduced signed/unsigned mismatches in sprintf's Moved CChar::carve and CItem::carve into cBaseObject::carve, and changed it to an SI16 Changed CItem::good to an SI16 Changed CItem::glow to a UI32 possibly fixing some issues where it would not read in properly Fixed deletion of house items upon re-deeding a house Fixed commandlevel overrides in command.dfn to read-in properly Overhaul to cCombat to make way for future split of Players and NPC's Created an enum for aiTypes allowing easy refrence of NPCAI Created a TargetIDs enum to allow easy refrence of target-based commands when calling target() and using cTargets::MultiTarget() Moved target() and its overloads to targeting.h Updated many timers that were using an SI32 to use TIMERVAL reducing Signed/Unsigned mismatches Moved safeCopy() into the cStringTools class, also moved numtostr and renamed it makeString() Fixed up command_set and AllSetTarget() to remove the need for mstring Moved gettokennum() into the cStringTools class as GetToken() and made better use of it Change cServerData::SetServerStartPrivs() to a UI16 Changed UI08 CChar::Get/Set Priv() & Priv2() into UI16 Get/SetPriv() Fixed areas where ifdef'd code had never been updated to make use of new CChar & CItem handling ITEM tags in npc dfn's changed to EQUIPITEM, be sure to update your scripts Changed JS function CalcSocketFromChar() to return an object Moved findMulti() and inMulti() to findfuncs.cpp and removed inMulti() from global scope Changed worldsaves to output many values in hex format Fixed some issues in cServerData where settings were not initialized upon creation of the class Many type mismatches fixed in cServerData along with the resizing of many variables in the class greatly reducing the total memory it uses Fixed a crash bug in combat when attempting to calc the defense covering a certain layer Fixed several magic commands which had unused variables sent to them Moved comm[CMAX] to the cCommmands class and added Get/Set wrappers to it Moved makenumber() to the cCommands class and renamed it to GetArgument() Minor fixes / tweaks to the cBooks class Fixed some container mismatches Removed: Functions: CSocket::currchar & CSocket::addid5 Removed item_test and added CItem::CheckItemIntegrity() in its place Fully depreciated and removed makeNum() and its overloads UOXSOCKET calcSocketFromChar() overloads calcSocketFromSockObj() Legacy calcCharFromSer() and calcItemFromSer() overloads UseHairDye() and moved all contained code to its' one usage enlist() CChar: Murderer(), Skin2(), ID2(), xID(), xSkin() and many unused overloads Commands: 'USE' Because it has not had supporting code for it for quite some time 'CTRIG','ITRIG', and 'TTRIG' As they were remnants of the old trigger system 'SETHEXMOREXYZ' Because SetMOREXYZ will support both HEX and Decimal 'SETSPEECH' Because it did nothing 'TILEDATA' Because 'SHOWDETAIL does the exact same thing 'XSBANK' Because 'XBANK does the exact same thing regions.h and classes.h from global scope and included them in those files which actually used them utilsys.cpp and utilsys.h from the project as they were not used anywhere mstring.cpp and mstring.h from the project Many unused and duplicate global includes Many unused #defines and const's 19 Mar 2003 - giwo Added: JS Get/Set "vulnerable" handlers for character properties (Abaddon) willHunger with Get/Set HungerStatus() wrappers to CChar class (can now selectively stop a character/creature from continuing to hunger) JS Get/Set "willhunger" handlers for character properties Changed: Linux compile fixes (thanks Malketh) Hash.h warning fixed (thanks Philantrop) Fixes to getRootPack() and getPackOwner() Removed many #includes from the global scope, including them in the specific files that need them This should greatly reduce compile time and filesize, along with the need to recompile after altering most headers Removed the linux ifdefs around typedefd function declarations, this should work with gcc 3.2 Moved global loading functions into a new cFileIO() class to take them out of global scope Fixed an issue causing items to not be sent to the client (thanks Malketh) Moved some global structs into the CWorldMain class Fixed a bug causing a crash on character / item creation Moved all effects stuff into its own class to take it out of global scope Changed the variable CChar::region to CChar::regionNum to avoid conflicts with the cTownRegion region[] indexes Moved getbestskill(), isHuman(), and inDungeon() into the CChar class to remove them from global scope Took npcSimpleAttackTarget() out of global scope Rewrote restock() to make use of restockNPC() Changed the typedef'd iterator in hash.h to HASHITERATOR to kill a Linux warning Renamed cEffects::soundeffect() to PlaySound() and removed unneeded overloads Fixed a bug causing executebatch to be set with locationcount data Rewrote cEffects::bgsound() Documented sounds.cpp Misc minor cleanups / fixes Removed: sendItemsInRange() (CChar::Teleport() does the same thing) Many #includes that were not being used deathMenu() respawnnow() and moved all of its code into command_respawn() one instance of cEffects::scpSoundEffect() and renamed the other to PlaySound() 13 Mar 2003 - giwo Changed Fixed an issue allowing the server to not have a dictionary.ZRO (which would cause a crash when a dictionary entry was called with no language) Fixed an issue causing the server to puke when it attempted a restart Moved SpawnRandomItem() into cItem class Moved SpawnRandomMonster() into cCharHandle class Broke necro.dfn into fishing.dfn and digging.dfn Made better use of SpawnRandomItem() and SpawnRandomMonster() 12 Mar 2003 - giwo Added: CPOpenGump and CPSpeech packet class to remove some global vars (Note these are pretty basic classes and someone with a better understanding of how we handle sending/recieving packets could probably expand these to make better use of them) Changed: Moved many global vars into the CWorldMain() class Cleaned ResetVars() in uox3.cpp as ResetDefaults() in CWorldMain() now handles much of that Added a check to ensure text wasn't sent twice in talking(), should fix double-speech Cleaned up cmdtable.cpp removing a couple duplicate entries, etc Changed target() to only require 4 values (as the first two were always 0 and 1) Removed many unneeded typedefs and globals Went through cServerData() and noted unused server.ini entries Moved title1(), title2(), and title3() to cClick.cpp since that is their only usage, made use of MAX_TITLE to ensure we wouldn't overrun the buffers, and renamed them matching what title they were 11 Mar 2003 - giwo Changed: Fixed a potentially very serious bugs with how containers were being set upon loading the world Fixed possible re-adding of weight to containers and characters at load Fixed a bug causing equipped items that were not weapons to take damage in combat Minor cleanups / warning fixes / Linux compatability issues (punt) 07 Mar 2003 - giwo Overhauls/Additions/Major Changes Changed: Tweaks/Object Conversions/Misc Small Changes Changed: Changed CItem::Get/SetLayer() to a UI08 Fixed a bug in speech causing you to see your own text twice Fixed a nasty crash bug caused by changing an items layer Fixed a bug causing NPC's to always be the first attacker Removed: CChar::Fame2() and CChar::Karma2() CChar::Stamina2(), CChar::Mana2() 05 Mar 2003 - giwo Overhauls/Additions/Major Changes Changed: Armor DEF system overhauled to match OSI system Tweaks/Object Conversions/Misc Small Changes Changed: -Updated Hash Table Remove() calls to remove unrefrenced parameter "index" -Changed cSocket::Get/SetDWord() to a UI32 to fix problems checking it against INVALIDSERIAL and storing large serial numbers -Changed cSocket::AddID() to a UI32 for the same reason as above -Changed cSocket:::Get/SetWord() to a UI16 to fix possible problems storing ID's -Fixed up calcStealDiff() to match new weight system -Minor updates to CPStatsWindow to match the new Armor DEF system and Weight system -Fixed calls to getTileName() so the names container was set with MAX_NAME -Fixed up getFieldDir() using direction typedefs -Changed Get/SetMagic() to Get/SetMovable() -Cleaned up some unrefrenced params -Changed some int's to UI16's in books.cpp -WorldSave Changes: -XYZ and worldnum to Location=x,y,z,worldnum -HiDamage and LoDamage into Damage=hidamage,lodamage -Strength,st2,Dexterity,dx2,Intelligence,in2 changed to Strength=str,st2, Intelligence=int,in2, Dexterity=dex,dx2 -DWord0-3 changed to DWords=0,1,2,3 -FX1,FY1,FX2,FY2,FZ1 changed to WanderArea=FX1,FY1,FX2,FY2,FZ1 -MoreX,MoreY,MoreZ changed to MoreXYZ=morex,morey,morez -More,More2 changed to More=more,more2 -Type,Type2 changed to Type=type,type2 -Light,Rain,Heat,Cold,Snow,Lightning changed to RaceDamage=Light,Rain,Heat,Cold,Snow,Lightning -Fame,Karma,Kills changed to Reputation=fame,karma,kills Removed: Removed all smoking stuff, as it's nothing but a waste of code 26 Feb 2003 - giwo Overhauls/Additions/Major Changes Changed: -Complete rewrite to the Weight system -Weight is more permanent, removed need to recalc it constantly -Packs now show the weight of themselves and all their contents -Packs now have a weight limit (currently hardcapped to 400, should make it based on type of container and possibly scriptable) -All items use the weight value given to them in the scripts unless the entry is 0 in which case they pull weight from the MUL's -Better handling of overloaded for teleport / recall / walking -Weight will max out at 65535 stones and can not go lower than 0 stones -Items container is now set as a cBaseObject Tweaks/Object Conversions/Misc Small Changes Changed: -Fixed up itemsfx() and renamed it to itemSound(), now better handles Gold sfx and where an item was dropped (ie in a pack or on the ground) -Cleaned up goldsfx() and renamed it to goldSound() -Many fixes to get/drop/wear/packItem functions -Minor fixes/cleanups in movement.cpp -Fixed a worldsave crash with tamed creatures -Pressing 0 in console reloads items as well as everything else -Made dagger usable for carve again -Fixed a horse mounting distance check -Noted (and in some cases fixed) unrefrenced variables throughout the code Removed: -Removed calcLastContainerFromSer(), as the Get/SetCont() changes made it superfluous 18 Feb 2003 - giwo Overhauls/Additions/Major Changes Added: -Added cItems::menuAddItem() to handle adding items from the add menu -Added handleCooking() in place of cSkills CookMeat(), MakeDough(), and MakePizza() -Added PlayInstrument() in place of PlayInstrumentWell() / PlayInstrumentPoor() -Added cSkills::doStealing() to take place of repetitious code in RandomSteal() and StealingTarget() -Added objInRange() functions in place of charInRange()/itemInRange() funcs Changed: -Converted inscribe.gmp to inscribe.dfn and used NewMakeMenu() in favor of the old make menu system -Updated GetMagic() == 3 calls to IsLockedDown() calls (as that is all it should be used for) -Fixed up all IsLockedDown() calls, resources that are LockedDown can NOT be used, even by GM, until released -Also note, items that should be usable if locked: Skill items (looms, training dummies, etc, Recall runes) -Moved the two functions from newbie.cpp to pcmanage.cpp and removed newbie.cpp from the project -Moved action() and impaction() to effects.cpp -Moved isHuman() to npcs.cpp -Where possible made functions that were part of classes private -Made use of cCombat::getWeaponType() in doubleClick() to centralize searching for weapon ID's -Updated CDictionary to make use of IsValid and added wrapper functions for it -Moved keyInPack() to doors.cpp and made better use of it -Added support to NpcTalk for variable arguments -Added support to NpcTalkAll for variable arguments -Changed itemmessage() to objMessage() and added dictionary support to it -Went through and added language support to Dictionary->GetEntry() calls anywhere possible (note, should NOT use socket-based languages for: Console, Broadcasts, Item/Region/Char Names, Anything else?) -Broke doubleClick() into 3 functions, doubleClick(), handleDoubleClickTypes(), and handleDoubleClickIDs() to allow quicker viewing / editing -Cleaned up unneeded variables in the three aforementioned functions Removed: -Trashed im.cpp/.h, MakeMenuTarget() and the rest of the old make menu system -Removed Gumps directory (as it is now unnecesarry) -Removed getCharDist() and getItemDist() -Removed make_st and cSkills::CalcRank() Tweaks/Object Conversions/Misc Small Changes Changed: -Removed iSGM() checks from all Dist functions, as it would cause wierdness in many areas of the code (Combat, for example) -NPC Movement issues addressed -Creatures following move faster (not just tamed) -Wander direction changes randomly -NPC movement slowed down alltogether -Attack flagging issues addressed/worked on -Combat bug causing you swing but never hit when diagonal from enemy fixed -Decay timer reset upon dropping an item on the ground -Cleanup of cItem::DecayItem() -Fixed an issue causing creatures to get stuck turning around when nearly dead -Fixed up amount functions to allow for UI32, should allow statwindow to properly display up to 4billion+ gold on a character, as well as allow high-cost item buy/sells -Changed CChar tailitem, GetTailItem() and SetTailItem() to an object pointer -Now can only mount a creature if it is tamed and owned by you -Changed GetAdvObj to a UI16, shouldn't need more than 65535 Advance.dfn entries -Get/SetSpawn() now check for INVALIDSERIAL instead of 0 -Updated CChar::Get/SetSmeltItem() to an Object pointer -Changed UI32 ItemPtr() in tempeffects to cBaseObject *ObjPtr() -Changed cSocket::AddMItem() to a CItem -Used GetItemObj(), GetOwnerObj(), GetSpawnObj(), and GetMultiObj() where possible -Cleaned up CurrcharObj() usage -Changed CSkills::Snooping() to use an Object pointer rather than a Serial -Changed tempeffect() to use a CItem call instead of ITEM (and removed it alltogether from its CChar overload) -Changed nVialID in necro.cpp to now make use of cSocket::AddMItem() to allow an object pointer -Changed cTownRegion::DisplayTownMenu() to use an item pointer -Minor tweaks to Rank system -Fixed House Lockdowns, Items are now added to the Multi's LockDown list -Fixed a WorldSave crash caused by tempeffects, by adding teffect_st constructor -Possibly fixed MultiCaching bug, where container should have been UI32 -Updated StoreItemRandomValue(), fixing some possible signed/unsigned issues -Updated calcLastContainerFromSer() to return a cBaseObject pointer -Fixed issue in checktempeffects() causing ITEM timers not to function -Changed CItem *Get/SetTailItem() to SERIAL Get/SetSkillItem() -Ensured SkillItem was being set back to INVALIDSERIAL after use -Fixed up cGumps::choice() -Fixed bug when npc attacked causing the emote to display incorrectly, also added "creature" is attacking you! emote for target only -Same fixes for players attacking -Updated npcEmoteAll() to handle variable arguments and updated calls to match -Used Socket-based language calls in Dictionary-GetEntry() wherever possible -Caught some missed text and put them in the dictionary. -Documented functions in speech.cpp -Made use of objInRange() wherever possible -Many signed/unsigned mismatch fixes -Minor optimizations and code cleanups Removed: -Commented out old Alchemy stuff (alchemy.dfn in /create/ still needs work) -Removed unused respawntime global -Removed some unneeded typedefs -Removed many unnecesarry uses of char temp[]; sprintf( temp, Dict ); function( temp ); in favor of function( dict ) -Removed unnecesarry overloads for the following functions: SpawnItem() GetItem() CItem::SetSpawn() CChar::SetSpawn() GetMulti() GetOwner() SetOwner() openPack() decItemAmount() CItem::ReleaseItem()