From 2cec24c9891ec802e8259fefd4faab4074df993f Mon Sep 17 00:00:00 2001
From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com>
Date: Mon, 13 May 2024 19:01:20 -0500
Subject: [PATCH 01/11] Three New AOS properties

---
 source/CPacketSend.cpp        | 21 ++++++++++++
 source/Changelog.txt          |  7 ++++
 source/UOXJSPropertyEnums.h   |  3 ++
 source/UOXJSPropertyFuncs.cpp |  6 ++++
 source/UOXJSPropertySpecs.h   |  3 ++
 source/cBaseObject.cpp        | 63 +++++++++++++++++++++++++++++++++++
 source/cBaseObject.h          | 12 +++++++
 source/cChar.cpp              |  9 +++++
 source/cItem.cpp              | 21 ++++++++++++
 source/items.cpp              |  3 ++
 source/ssection.cpp           |  6 ++++
 source/ssection.h             |  3 ++
 12 files changed, 157 insertions(+)

diff --git a/source/CPacketSend.cpp b/source/CPacketSend.cpp
index e1d8ee4ca..dfcf7cd62 100644
--- a/source/CPacketSend.cpp
+++ b/source/CPacketSend.cpp
@@ -7657,6 +7657,27 @@ void CPToolTip::CopyItemData( CItem& cItem, size_t &totalStringLen, bool addAmou
 				FinalizeData( tempEntry, totalStringLen );
 			}
 
+			if( cItem.GetBonusHits() > 0 )
+			{
+				tempEntry.stringNum = 1060431; // hit point increase ~1_val~
+				tempEntry.ourText = oldstrutil::number( cItem.GetBonusHits() );
+				FinalizeData( tempEntry, totalStringLen );
+			}
+
+			if( cItem.GetBonusStam() > 0 )
+			{
+				tempEntry.stringNum = 1060484; // stamina increase ~1_val~
+				tempEntry.ourText = oldstrutil::number( cItem.GetBonusStam() );
+				FinalizeData( tempEntry, totalStringLen );
+			}
+
+			if( cItem.GetBonusMana() > 0 )
+			{
+				tempEntry.stringNum = 1060439; // mana increase ~1_val~
+				tempEntry.ourText = oldstrutil::number( cItem.GetBonusMana() );
+				FinalizeData( tempEntry, totalStringLen );
+			}
+
 			if( cItem.GetStrength() > 1 )
 			{
 				tempEntry.stringNum = 1061170; // strength requirement ~1_val~
diff --git a/source/Changelog.txt b/source/Changelog.txt
index 1d779c15f..c695610cd 100644
--- a/source/Changelog.txt
+++ b/source/Changelog.txt
@@ -1,3 +1,10 @@
+13/05/2024 - Dragon Slayer
+	Added three More AOS Props
+	-BONUSHITS=#
+	-BONUSMANA=#
+	-BONUSSTAM=#
+	Add this properties to any weapon/armor/jewlery will give the player more hp/mana/stam why its equiped. depending on number you add with it
+
 27/04/2024 - Dragon Slayer/Xuri
 	Fixed an issue where non-corpse containers - including treasure chests in dungeons - would decay and leave all their contents on the ground.
 	Converted LOOTDECAYSWITHCORPSE ini setting to two new settings, one for player corpses, one for NPC corpses:
diff --git a/source/UOXJSPropertyEnums.h b/source/UOXJSPropertyEnums.h
index af309d496..f7f187903 100644
--- a/source/UOXJSPropertyEnums.h
+++ b/source/UOXJSPropertyEnums.h
@@ -516,6 +516,9 @@ enum CI_Properties
 	CIP_ISCONTTYPE,
 	CIP_CARVESECTION,
 	CIP_SPEED,
+	CIP_BONUSHITS,
+	CIP_BONUSSTAM,
+	CIP_BONUSMANA,
 	CIP_MULTI,
 	CIP_AMMOID,
 	CIP_AMMOHUE,
diff --git a/source/UOXJSPropertyFuncs.cpp b/source/UOXJSPropertyFuncs.cpp
index 3823356f9..a492f112a 100644
--- a/source/UOXJSPropertyFuncs.cpp
+++ b/source/UOXJSPropertyFuncs.cpp
@@ -676,6 +676,9 @@ JSBool CItemProps_getProperty( JSContext *cx, JSObject *obj, jsval id, jsval *vp
 			case CIP_DAMAGERAIN:		*vp = BOOLEAN_TO_JSVAL( gPriv->GetWeatherDamage( RAIN ));	break;
 			case CIP_DAMAGESNOW:		*vp = BOOLEAN_TO_JSVAL( gPriv->GetWeatherDamage( SNOW ));	break;
 			case CIP_SPEED:			*vp = INT_TO_JSVAL( gPriv->GetSpeed() );			break;
+			case CIP_BONUSHITS:		*vp = INT_TO_JSVAL( gPriv->GetBonusHits() );			break;
+			case CIP_BONUSSTAM:		*vp = INT_TO_JSVAL( gPriv->GetBonusStam() );			break;
+			case CIP_BONUSMANA:		*vp = INT_TO_JSVAL( gPriv->GetBonusMana() );			break;
 			case CIP_NAME2:
 				tString = JS_NewStringCopyZ( cx, gPriv->GetName2().c_str() );
 				*vp = STRING_TO_JSVAL( tString );
@@ -1321,6 +1324,9 @@ JSBool CItemProps_setProperty( JSContext *cx, JSObject *obj, jsval id, jsval *vp
 			case CIP_DAMAGERAIN:	gPriv->SetWeatherDamage( RAIN, encaps.toBool() );			break;
 			case CIP_DAMAGESNOW:	gPriv->SetWeatherDamage( SNOW, encaps.toBool() );			break;
 			case CIP_SPEED:			gPriv->SetSpeed( static_cast<UI08>( encaps.toInt() ));		break;
+			case CIP_BONUSHITS:		gPriv->SetBonusHits( static_cast<SI16>( encaps.toInt() ));	break;
+			case CIP_BONUSSTAM:		gPriv->SetBonusStam( static_cast<SI16>( encaps.toInt() ));	break;
+			case CIP_BONUSMANA:		gPriv->SetBonusMana( static_cast<SI16>( encaps.toInt() ));	break;
 			case CIP_NAME2:			gPriv->SetName2( encaps.toString() );						break;
 			case CIP_RACE:			gPriv->SetRace( static_cast<RACEID>( encaps.toInt() ));		break;
 			case CIP_MAXHP:			gPriv->SetMaxHP( static_cast<SI16>( encaps.toInt() ));		break;
diff --git a/source/UOXJSPropertySpecs.h b/source/UOXJSPropertySpecs.h
index 3149dc0ec..c5a8c8039 100644
--- a/source/UOXJSPropertySpecs.h
+++ b/source/UOXJSPropertySpecs.h
@@ -535,6 +535,9 @@ inline JSPropertySpec CItemProps[] =
 	{ "ammoFXHue",		CIP_AMMOFXHUE,		JSPROP_ENUMANDPERM, nullptr, nullptr },
 	{ "ammoFXRender",	CIP_AMMOFXRENDER,	JSPROP_ENUMANDPERM, nullptr, nullptr },
 	{ "speed",			CIP_SPEED,			JSPROP_ENUMANDPERM, nullptr, nullptr },
+	{ "bonusHits",		CIP_BONUSHITS,		JSPROP_ENUMANDPERM, nullptr, nullptr },
+	{ "bonusStam",		CIP_BONUSSTAM,		JSPROP_ENUMANDPERM, nullptr, nullptr },
+	{ "bonusMana",		CIP_BONUSMANA,		JSPROP_ENUMANDPERM, nullptr, nullptr },
 	{ "multi",			CIP_MULTI,			JSPROP_ENUMANDPERM, nullptr, nullptr },
 	{ "maxRange",		CIP_MAXRANGE,		JSPROP_ENUMANDPERM, nullptr, nullptr },
 	{ "baseRange",		CIP_BASERANGE,		JSPROP_ENUMANDPERM, nullptr, nullptr },
diff --git a/source/cBaseObject.cpp b/source/cBaseObject.cpp
index 506c247ac..51cbb80ae 100644
--- a/source/cBaseObject.cpp
+++ b/source/cBaseObject.cpp
@@ -1631,6 +1631,69 @@ void CBaseObject::SetIntelligence2( SI16 nVal )
 	}
 }
 
+//o------------------------------------------------------------------------------------------------o
+//|	Function	-	CBaseObject::GetBonusHits()
+//|					CBaseObject::SetBonusHits()
+//o------------------------------------------------------------------------------------------------o
+//|	Purpose		-	Gets/Sets the health max var associated with the object. For chars, it's the
+//|					bonuses (via armour and such)
+//o------------------------------------------------------------------------------------------------o
+SI16 CBaseObject::GetBonusHits( void ) const
+{
+	return bonusHits;
+}
+void CBaseObject::SetBonusHits( SI16 nVal )
+{
+	bonusHits = nVal;
+
+	if( CanBeObjType( OT_ITEM ))
+	{
+		( static_cast<CItem *>( this ))->UpdateRegion();
+	}
+}
+
+//o------------------------------------------------------------------------------------------------o
+//|	Function	-	CBaseObject::GetBonusStam()
+//|					CBaseObject::SetBonusStam()
+//o------------------------------------------------------------------------------------------------o
+//|	Purpose		-	Gets/Sets the stamina max var associated with the object. For chars, it's the
+//|					bonuses (via armour and such)
+//o------------------------------------------------------------------------------------------------o
+SI16 CBaseObject::GetBonusStam( void ) const
+{
+	return bonusStam;
+}
+void CBaseObject::SetBonusStam( SI16 nVal )
+{
+	bonusStam = nVal;
+
+	if( CanBeObjType( OT_ITEM ))
+	{
+		( static_cast<CItem *>( this ))->UpdateRegion();
+	}
+}
+
+//o------------------------------------------------------------------------------------------------o
+//|	Function	-	CBaseObject::GetBonusMana()
+//|					CBaseObject::SetBonusMana()
+//o------------------------------------------------------------------------------------------------o
+//|	Purpose		-	Gets/Sets the Mana max var associated with the object. For chars, it's the
+//|					bonuses (via armour and such)
+//o------------------------------------------------------------------------------------------------o
+SI16 CBaseObject::GetBonusMana( void ) const
+{
+	return bonusMana;
+}
+void CBaseObject::SetBonusMana( SI16 nVal )
+{
+	bonusMana = nVal;
+
+	if( CanBeObjType( OT_ITEM ))
+	{
+		( static_cast<CItem *>( this ))->UpdateRegion();
+	}
+}
+
 //o------------------------------------------------------------------------------------------------o
 //|	Function	-	CBaseObject::IncStrength()
 //o------------------------------------------------------------------------------------------------o
diff --git a/source/cBaseObject.h b/source/cBaseObject.h
index 638e826f7..15563feca 100644
--- a/source/cBaseObject.h
+++ b/source/cBaseObject.h
@@ -79,6 +79,9 @@ class CBaseObject
 	SI16				st2;
 	SI16				dx2;
 	SI16				in2;
+	SI16				bonusHits;
+	SI16				bonusStam;
+	SI16				bonusMana;
 	mutable SI32		FilePosition;
 	SERIAL				tempMulti;
 	std::string			name;
@@ -256,6 +259,15 @@ class CBaseObject
 	void					IncDexterity( SI16 toInc = 1 );
 	void					IncIntelligence( SI16 toInc = 1 );
 
+	SI16					GetBonusHits( void ) const;
+	virtual void			SetBonusHits( SI16 nVal );
+
+	SI16					GetBonusStam( void ) const;
+	virtual void			SetBonusStam( SI16 nVal );
+
+	SI16					GetBonusMana( void ) const;
+	virtual void			SetBonusMana( SI16 nVal );
+
 	virtual void			PostLoadProcessing( void );
 	virtual bool			LoadRemnants( void ) = 0;
 
diff --git a/source/cChar.cpp b/source/cChar.cpp
index 7aa03f6fa..6e4d4f6d2 100644
--- a/source/cChar.cpp
+++ b/source/cChar.cpp
@@ -2920,6 +2920,10 @@ bool CChar::WearItem( CItem *toWear )
 			IncDexterity2( itemLayers[tLayer]->GetDexterity2() );
 			IncIntelligence2( itemLayers[tLayer]->GetIntelligence2() );
 
+			SetFixedMaxHP( GetMaxHP() + itemLayers[tLayer]->GetBonusHits());
+			SetFixedMaxStam( GetMaxStam() + itemLayers[tLayer]->GetBonusStam());
+			SetFixedMaxMana( GetMaxMana() + itemLayers[tLayer]->GetBonusMana());
+
 			if( toWear->IsPostLoaded() )
 			{
 				if( itemLayers[tLayer]->GetPoisoned() )
@@ -2979,6 +2983,11 @@ bool CChar::TakeOffItem( ItemLayers Layer )
 		IncStrength2( -itemLayers[Layer]->GetStrength2() );
 		IncDexterity2( -itemLayers[Layer]->GetDexterity2() );
 		IncIntelligence2( -itemLayers[Layer]->GetIntelligence2() );
+
+		SetFixedMaxHP( GetMaxHP() -itemLayers[Layer]->GetBonusHits());
+		SetFixedMaxStam( GetMaxStam() -itemLayers[Layer]->GetBonusStam());
+		SetFixedMaxMana( GetMaxMana() -itemLayers[Layer]->GetBonusMana());
+
 		if( itemLayers[Layer]->GetPoisoned() )
 		{
 			if( itemLayers[Layer]->GetPoisoned() > GetPoisoned() )
diff --git a/source/cItem.cpp b/source/cItem.cpp
index 3c6523d5d..45850e6f7 100644
--- a/source/cItem.cpp
+++ b/source/cItem.cpp
@@ -1654,6 +1654,9 @@ auto CItem::CopyData( CItem *target ) -> void
 	target->SetWeightMax( GetWeightMax() );
 	target->SetBaseWeight( GetBaseWeight() );
 	target->SetMaxItems( GetMaxItems() );
+	target->SetBonusHits( GetBonusHits() );
+	target->SetBonusStam( GetBonusStam() );
+	target->SetBonusMana( GetBonusMana() );
 	//target->SetWipeable( IsWipeable() );
 	target->SetPriv( GetPriv() );
 	target->SetBaseRange( GetBaseRange() );
@@ -1737,6 +1740,9 @@ bool CItem::DumpBody( std::ostream &outStream ) const
 	outStream << "MaxItems=" + std::to_string( GetMaxItems() ) + newLine;
 	outStream << "MaxHP=" + std::to_string( GetMaxHP() ) + newLine;
 	outStream << "Speed=" + std::to_string( GetSpeed() ) + newLine;
+	outStream << "BonusHits=" + std::to_string( GetBonusHits() ) + newLine;
+	outStream << "BonusStam=" + std::to_string( GetBonusStam() ) + newLine;
+	outStream << "BonusMana=" + std::to_string( GetBonusMana() ) + newLine;
 	outStream << "Movable=" + std::to_string( GetMovable() ) + newLine;
 	outStream << "Priv=" + std::to_string( GetPriv() ) + newLine;
 	outStream << "Value=" + std::to_string( GetBuyValue() ) + "," + std::to_string( GetSellValue() ) + "," + std::to_string( GetVendorPrice() ) + newLine;
@@ -1820,6 +1826,21 @@ bool CItem::HandleLine( std::string &UTag, std::string &data )
 					bools = static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 ));
 					rValue = true;
 				}
+				else if( UTag == "BONUSHITS" )
+				{
+					SetBonusHits( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 )));
+					rValue = true;
+				}
+				else if( UTag == "BONUSSTAM" )
+				{
+					SetBonusStam( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 )));
+					rValue = true;
+				}
+				else if( UTag == "BONUSMANA" )
+				{
+					SetBonusMana( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 )));
+					rValue = true;
+				}
 				break;
 			case 'C':
 				if( UTag == "CONT" )
diff --git a/source/items.cpp b/source/items.cpp
index 1cd4a2aaf..3bb17bb66 100644
--- a/source/items.cpp
+++ b/source/items.cpp
@@ -139,6 +139,9 @@ auto ApplyItemSection( CItem *applyTo, CScriptSection *toApply, std::string sect
 				break;
 			case DFNTAG_AC:				applyTo->SetArmourClass( static_cast<UI08>( ndata ));	break;
 			case DFNTAG_BASERANGE:		applyTo->SetBaseRange( static_cast<UI08>( ndata ));		break;
+			case DFNTAG_BONUSHITS:		applyTo->SetBonusHits( static_cast<SI16>( ndata ));		break;
+			case DFNTAG_BONUSSTAM:		applyTo->SetBonusStam( static_cast<SI16>( ndata ));		break;
+			case DFNTAG_BONUSMANA:		applyTo->SetBonusMana( static_cast<SI16>( ndata ));		break;
 			case DFNTAG_CREATOR:		applyTo->SetCreator( ndata );							break;
 			case DFNTAG_COLOUR:			applyTo->SetColour( static_cast<UI16>( ndata ));		break;
 			case DFNTAG_COLOURLIST:		applyTo->SetColour( AddRandomColor( cdata ));			break;
diff --git a/source/ssection.cpp b/source/ssection.cpp
index c2a563b47..dbfc8a475 100644
--- a/source/ssection.cpp
+++ b/source/ssection.cpp
@@ -215,6 +215,9 @@ const UI08 dfnDataTypes[DFNTAG_COUNTOFTAGS] =
 	DFN_STRING,			//	DFNTAG_SPAWNOBJ,
 	DFN_STRING,			//	DFNTAG_SPAWNOBJLIST,
 	DFN_NUMERIC,		//	DFNTAG_SPD,
+	DFN_NUMERIC,		//  DFNTAG_BONUSHITS,
+	DFN_NUMERIC,		//  DFNTAG_BONUSSTAM,
+	DFN_NUMERIC,		//  DFNTAG_BONUSMANA,
 	DFN_STRING,			//	DFNTAG_SPELLS,
 	DFN_DOUBLENUMERIC,	//	DFNTAG_SPELLWEAVING,
 	DFN_DOUBLENUMERIC,	//	DFNTAG_SPIRITSPEAK,
@@ -283,6 +286,9 @@ const std::map<std::string, DFNTAGS> strToDFNTag
 	{"BLACKSMITHING"s,		DFNTAG_BLACKSMITHING},
 	{"BOWCRAFT"s,			DFNTAG_BOWCRAFT},
 	{"BUSHIDO"s,			DFNTAG_BUSHIDO},
+	{"BONUSHITS"s,			DFNTAG_BONUSHITS},
+	{"BONUSSTAM"s,			DFNTAG_BONUSSTAM},
+	{"BONUSMANA"s,			DFNTAG_BONUSMANA},
 	{"CAMPING"s,			DFNTAG_CAMPING},
 	{"CARPENTRY"s,			DFNTAG_CARPENTRY},
 	{"CARTOGRAPHY"s,		DFNTAG_CARTOGRAPHY},
diff --git a/source/ssection.h b/source/ssection.h
index a2a660aec..8ffc1edc9 100644
--- a/source/ssection.h
+++ b/source/ssection.h
@@ -222,6 +222,9 @@ enum DFNTAGS
 	DFNTAG_SPAWNOBJ,
 	DFNTAG_SPAWNOBJLIST,
 	DFNTAG_SPD,
+	DFNTAG_BONUSHITS,
+	DFNTAG_BONUSSTAM,
+	DFNTAG_BONUSMANA,
 	DFNTAG_SPELLS,
 	DFNTAG_SPELLWEAVING,
 	DFNTAG_SPIRITSPEAK,

From 230fa75b4131624ddaac382d1550abcf61dbb2d4 Mon Sep 17 00:00:00 2001
From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com>
Date: Sun, 26 May 2024 00:16:03 -0500
Subject: [PATCH 02/11] Update cItem.cpp

---
 source/cItem.cpp | 22 ++++++----------------
 1 file changed, 6 insertions(+), 16 deletions(-)

diff --git a/source/cItem.cpp b/source/cItem.cpp
index 45850e6f7..c345ecdc2 100644
--- a/source/cItem.cpp
+++ b/source/cItem.cpp
@@ -1740,9 +1740,7 @@ bool CItem::DumpBody( std::ostream &outStream ) const
 	outStream << "MaxItems=" + std::to_string( GetMaxItems() ) + newLine;
 	outStream << "MaxHP=" + std::to_string( GetMaxHP() ) + newLine;
 	outStream << "Speed=" + std::to_string( GetSpeed() ) + newLine;
-	outStream << "BonusHits=" + std::to_string( GetBonusHits() ) + newLine;
-	outStream << "BonusStam=" + std::to_string( GetBonusStam() ) + newLine;
-	outStream << "BonusMana=" + std::to_string( GetBonusMana() ) + newLine;
+	outStream << "BonusStats=" + std::to_string( GetBonusHits() ) + "," + std::to_string( GetBonusStam() ) + "," + std::to_string( GetBonusMana() ) + newLine;
 	outStream << "Movable=" + std::to_string( GetMovable() ) + newLine;
 	outStream << "Priv=" + std::to_string( GetPriv() ) + newLine;
 	outStream << "Value=" + std::to_string( GetBuyValue() ) + "," + std::to_string( GetSellValue() ) + "," + std::to_string( GetVendorPrice() ) + newLine;
@@ -1826,20 +1824,12 @@ bool CItem::HandleLine( std::string &UTag, std::string &data )
 					bools = static_cast<UI08>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 ));
 					rValue = true;
 				}
-				else if( UTag == "BONUSHITS" )
+				else if( UTag == "BONUSSTATS" )
 				{
-					SetBonusHits( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 )));
-					rValue = true;
-				}
-				else if( UTag == "BONUSSTAM" )
-				{
-					SetBonusStam( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 )));
-					rValue = true;
-				}
-				else if( UTag == "BONUSMANA" )
-				{
-					SetBonusMana( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 )));
-					rValue = true;
+				    SetBonusHits( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[0], "//" )), nullptr, 0 )));
+				    SetBonusStam( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[1], "//" )), nullptr, 0 )));
+				    SetBonusMana( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[2], "//" )), nullptr, 0 )));
+				    rValue = true;
 				}
 				break;
 			case 'C':

From a32f192b1f6d9b3b674b58fff3f2e5ac0fec6f4b Mon Sep 17 00:00:00 2001
From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com>
Date: Mon, 27 May 2024 15:08:23 -0500
Subject: [PATCH 03/11] Fixed the Bonus add ons

Now they will not save on world save
---
 source/cChar.cpp | 91 ++++++++++++++++++++++++++++++++++++++++++------
 source/cChar.h   |  9 +++++
 2 files changed, 89 insertions(+), 11 deletions(-)

diff --git a/source/cChar.cpp b/source/cChar.cpp
index 6e4d4f6d2..530053021 100644
--- a/source/cChar.cpp
+++ b/source/cChar.cpp
@@ -2920,9 +2920,9 @@ bool CChar::WearItem( CItem *toWear )
 			IncDexterity2( itemLayers[tLayer]->GetDexterity2() );
 			IncIntelligence2( itemLayers[tLayer]->GetIntelligence2() );
 
-			SetFixedMaxHP( GetMaxHP() + itemLayers[tLayer]->GetBonusHits());
-			SetFixedMaxStam( GetMaxStam() + itemLayers[tLayer]->GetBonusStam());
-			SetFixedMaxMana( GetMaxMana() + itemLayers[tLayer]->GetBonusMana());
+			IncBonusHits( itemLayers[tLayer]->GetBonusHits() );
+			IncBonusStam( itemLayers[tLayer]->GetBonusStam() );
+			IncBonusMana( itemLayers[tLayer]->GetBonusMana() );
 
 			if( toWear->IsPostLoaded() )
 			{
@@ -2984,9 +2984,9 @@ bool CChar::TakeOffItem( ItemLayers Layer )
 		IncDexterity2( -itemLayers[Layer]->GetDexterity2() );
 		IncIntelligence2( -itemLayers[Layer]->GetIntelligence2() );
 
-		SetFixedMaxHP( GetMaxHP() -itemLayers[Layer]->GetBonusHits());
-		SetFixedMaxStam( GetMaxStam() -itemLayers[Layer]->GetBonusStam());
-		SetFixedMaxMana( GetMaxMana() -itemLayers[Layer]->GetBonusMana());
+		IncBonusHits( -itemLayers[Layer]->GetBonusHits() );
+		IncBonusStam( -itemLayers[Layer]->GetBonusStam() );
+		IncBonusMana( -itemLayers[Layer]->GetBonusMana() );
 
 		if( itemLayers[Layer]->GetPoisoned() )
 		{
@@ -3796,7 +3796,7 @@ UI16 CChar::GetMaxHP( void )
 		oldRace			= GetRace();
 
 	}
-	return maxHP;
+	return maxHP + GetBonusHits();
 }
 void CChar::SetMaxHP( UI16 newmaxhp, UI16 newoldstr, RACEID newoldrace )
 {
@@ -3839,7 +3839,7 @@ void CChar::SetFixedMaxHP( SI16 newmaxhp )
 SI16 CChar::GetMaxMana( void )
 {
 	if(( maxMana_oldint != GetIntelligence() || oldRace != GetRace() ) && !GetMaxManaFixed() )
-		//if int/race changed since last calculation, recalculate maxHp
+		//if int/race changed since last calculation, recalculate maxMana
 	{
 		CRace *pRace = Races->Race( GetRace() );
 
@@ -3856,7 +3856,7 @@ SI16 CChar::GetMaxMana( void )
 		oldRace			= GetRace();
 
 	}
-	return maxMana;
+	return maxMana + GetBonusMana();
 }
 void CChar::SetMaxMana( SI16 newmaxmana, UI16 newoldint, RACEID newoldrace )
 {
@@ -3898,7 +3898,7 @@ void CChar::SetFixedMaxMana( SI16 newmaxmana )
 //o------------------------------------------------------------------------------------------------o
 SI16 CChar::GetMaxStam( void )
 {
-	// If dex/race changed since last calculation, recalculate maxHp
+	// If dex/race changed since last calculation, recalculate maxStam
 	if(( maxStam_olddex != GetDexterity() || oldRace != GetRace() ) && !GetMaxStamFixed() )
 	{
 		CRace *pRace = Races->Race( GetRace() );
@@ -3916,7 +3916,7 @@ SI16 CChar::GetMaxStam( void )
 		oldRace			= GetRace();
 
 	}
-	return maxStam;
+	return maxStam + GetBonusStam();
 }
 void CChar::SetMaxStam( SI16 newmaxstam, UI16 newolddex, RACEID newoldrace )
 {
@@ -5602,6 +5602,75 @@ void CChar::SetIntelligence2( SI16 nVal )
 	UpdateRegion();
 }
 
+//o------------------------------------------------------------------------------------------------o
+//| Function	-	CChar::SetBonusHits()
+//o------------------------------------------------------------------------------------------------o
+//| Purpose		-	Sets bonus Hits stat for character
+//o------------------------------------------------------------------------------------------------o
+void CChar::SetBonusHits( SI16 nVal )
+{
+	CBaseObject::SetBonusHits( nVal );
+	Dirty( UT_HITPOINTS );
+	UpdateRegion();
+}
+
+//o------------------------------------------------------------------------------------------------o
+//| Function	-	CChar::SetBonusStam()
+//o------------------------------------------------------------------------------------------------o
+//| Purpose		-	Sets bonus Stam stat for character
+//o------------------------------------------------------------------------------------------------o
+void CChar::SetBonusStam( SI16 nVal )
+{
+	CBaseObject::SetBonusStam( nVal );
+	Dirty( UT_STAMINA );
+	UpdateRegion();
+}
+
+//o------------------------------------------------------------------------------------------------o
+//| Function	-	CChar::SetBonusMana()
+//o------------------------------------------------------------------------------------------------o
+//| Purpose		-	Sets bonus Mana stat for character
+//o------------------------------------------------------------------------------------------------o
+void CChar::SetBonusMana( SI16 nVal )
+{
+	CBaseObject::SetBonusMana( nVal );
+	Dirty( UT_MANA );
+	UpdateRegion();
+}
+
+//o------------------------------------------------------------------------------------------------o
+//| Function	-	CChar::IncBonusHits()
+//| Date		-	26 May 2024
+//o------------------------------------------------------------------------------------------------o
+//| Purpose		-	Increments GetBonusHits (modifications) by toAdd
+//o------------------------------------------------------------------------------------------------o
+void CChar::IncBonusHits( SI16 toAdd )
+{
+	SetBonusHits( static_cast<SI16>( GetBonusHits() + toAdd ));
+}
+
+//o------------------------------------------------------------------------------------------------o
+//| Function	-	CChar::IncBonusStam()
+//| Date		-	26 May 2024
+//o------------------------------------------------------------------------------------------------o
+//| Purpose		-	Increments GetBonusStam (modifications) by toAdd
+//o------------------------------------------------------------------------------------------------o
+void CChar::IncBonusStam( SI16 toAdd )
+{
+	SetBonusStam( static_cast<SI16>( GetBonusStam() + toAdd ));
+}
+
+//o------------------------------------------------------------------------------------------------o
+//| Function	-	CChar::IncBonusMana()
+//| Date		-	26 May 2024
+//o------------------------------------------------------------------------------------------------o
+//| Purpose		-	Increments GetBonusMana (modifications) by toAdd
+//o------------------------------------------------------------------------------------------------o
+void CChar::IncBonusMana( SI16 toAdd )
+{
+	SetBonusMana( static_cast<SI16>( GetBonusMana() + toAdd ));
+}
+
 //o------------------------------------------------------------------------------------------------o
 //| Function	-	CChar::IncStamina()
 //o------------------------------------------------------------------------------------------------o
diff --git a/source/cChar.h b/source/cChar.h
index ed4cc90ba..3156340ff 100644
--- a/source/cChar.h
+++ b/source/cChar.h
@@ -628,6 +628,15 @@ class CChar : public CBaseObject
 	virtual void	SetStrength2( SI16 newValue ) override;
 	virtual void	SetDexterity2( SI16 newValue ) override;
 	virtual void	SetIntelligence2( SI16 newValue ) override;
+
+	virtual void	SetBonusHits( SI16 newValue ) override;
+	virtual void	SetBonusStam( SI16 newValue ) override;
+	virtual void	SetBonusMana( SI16 newValue ) override;
+
+	void			IncBonusHits( SI16 toAdd = 1 );
+	void			IncBonusStam( SI16 toAdd = 1 );
+	void			IncBonusMana( SI16 toAdd = 1 );
+
 	void			IncStamina( SI16 toInc );
 	void			IncMana( SI16 toInc );
 	void			SetMaxLoyalty( UI16 newMaxLoyalty );

From 12d3e6686ae8e4f9dae14143b4b0365ff927db10 Mon Sep 17 00:00:00 2001
From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com>
Date: Mon, 27 May 2024 16:58:40 -0500
Subject: [PATCH 04/11] Missing Wand ID's

---
 data/js/server/data/weapontypes.js | 4 ++++
 source/Changelog.txt               | 3 +++
 source/combat.cpp                  | 4 ++++
 3 files changed, 11 insertions(+)

diff --git a/data/js/server/data/weapontypes.js b/data/js/server/data/weapontypes.js
index 42fe15a2b..0a6940e56 100644
--- a/data/js/server/data/weapontypes.js
+++ b/data/js/server/data/weapontypes.js
@@ -208,6 +208,10 @@ function GetWeaponType( mChar, itemID )
 		case 0x48B3: //gargish axe - SA
 			weaponType = "TWOHND_AXES"; break;
 		// Default Maces
+		case 0x0DF2: // Wand
+		case 0x0DF3: // Wand
+		case 0x0DF4: // Wand
+		case 0x0DF5: // Wand
 		case 0x0FB4: //sledge hammer
 		case 0x0FB5: //sledge hammer
 		case 0x0F5C: //mace
diff --git a/source/Changelog.txt b/source/Changelog.txt
index f64afbc32..424b6f5f6 100644
--- a/source/Changelog.txt
+++ b/source/Changelog.txt
@@ -1,3 +1,6 @@
+27/05/2024 - Dragon Slayer
+	Added Missing Wand ID's to combat weapon type in core and in js.
+
 1/05/2024 - Dragon Slayer/Xuri
 	Fixed AutoUnequipAttempt function in clumsy.js, createfood.js level1target.js, will no longer fail on casting and return to hardcode.
 	Fixed createfood to check for reagents on cast.
diff --git a/source/combat.cpp b/source/combat.cpp
index 8817d7b3d..b38953b35 100644
--- a/source/combat.cpp
+++ b/source/combat.cpp
@@ -801,6 +801,10 @@ UI08 CHandleCombat::GetWeaponType( CItem *i )
 		case 0x48B3: //gargish axe - SA
 			return TWOHND_AXES;
 		// Default Maces
+		case 0x0DF2: // Wand
+		case 0x0DF3: // Wand
+		case 0x0DF4: // Wand
+		case 0x0DF5: // Wand
 		case 0x13E3: //smith's hammer
 		case 0x13E4: //smith's hammer
 		case 0x13B3: //club

From 90c9a5f8354b98ac932d96b11bf7487125fbe49b Mon Sep 17 00:00:00 2001
From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com>
Date: Tue, 11 Jun 2024 23:31:55 -0500
Subject: [PATCH 05/11] Small Fixes to Get

Fixed items handling correct target
Added Getting the resist on chars
---
 data/js/commands/targeting/get.js | 36 ++++++++++++++++++++++---------
 1 file changed, 26 insertions(+), 10 deletions(-)

diff --git a/data/js/commands/targeting/get.js b/data/js/commands/targeting/get.js
index 365d3a2b3..b07305bd5 100644
--- a/data/js/commands/targeting/get.js
+++ b/data/js/commands/targeting/get.js
@@ -294,30 +294,27 @@ function HandleGetItem( socket, ourItem, uKey )
 	case "DESC":
 		socket.SysMessage( ourItem.desc );
 		break;
-	case "DEF":
-		socket.SysMessage( ourItem.Resist( 1 ));
-		break;
 	case "DEF":
 	case "RESISTARMOR":
-		socket.SysMessage( ourObj.Resist( 1 ));
+		socket.SysMessage( ourItem.Resist( 1 ));
 		break;
 	case "RESISTLIGHT":
-		socket.SysMessage( ourObj.Resist( 2 ));
+		socket.SysMessage( ourItem.Resist( 2 ));
 		break;
 	case "RESISTWATER":
-		socket.SysMessage( ourObj.Resist( 3 ));
+		socket.SysMessage( ourItem.Resist( 3 ));
 		break;
 	case "RESISTCOLD":
-		socket.SysMessage( ourObj.Resist( 4 ));
+		socket.SysMessage( ourItem.Resist( 4 ));
 		break;
 	case "RESISTFIRE":
-		socket.SysMessage( ourObj.Resist( 5 ));
+		socket.SysMessage( ourItem.Resist( 5 ));
 		break;
 	case "RESISTENERGY":
-		socket.SysMessage( ourObj.Resist( 6 ));
+		socket.SysMessage( ourItem.Resist( 6 ));
 		break;
 	case "RESISTPOISON":
-		socket.SysMessage( ourObj.Resist( 7 ));
+		socket.SysMessage( ourItem.Resist( 7 ));
 		break;
 	case "ARMORCLASS":
 	case "ARMOURCLASS":
@@ -598,8 +595,27 @@ function HandleGetChar( socket, ourChar, uKey )
 		break;
 	case "ARMOUR":
 	case "ARMOR":
+	case "RESISTARMOR":
 		socket.SysMessage( ourChar.Resist( 1 ));
 		break;
+	case "RESISTLIGHT":
+		socket.SysMessage( ourChar.Resist( 2 ));
+		break;
+	case "RESISTWATER":
+		socket.SysMessage( ourChar.Resist( 3 ));
+		break;
+	case "RESISTCOLD":
+		socket.SysMessage( ourChar.Resist( 4 ));
+		break;
+	case "RESISTFIRE":
+		socket.SysMessage( ourChar.Resist( 5 ));
+		break;
+	case "RESISTENERGY":
+		socket.SysMessage( ourChar.Resist( 6 ));
+		break;
+	case "RESISTPOISON":
+		socket.SysMessage( ourChar.Resist( 7 ));
+		break;
 	case "MAXHP":
 		socket.SysMessage( ourChar.maxhp );
 		break;

From e514b688a9e91776da581aa98858476f1ec286bb Mon Sep 17 00:00:00 2001
From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com>
Date: Sun, 16 Jun 2024 12:00:52 -0500
Subject: [PATCH 06/11] Update cBaseObject.cpp

---
 source/cBaseObject.cpp | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/source/cBaseObject.cpp b/source/cBaseObject.cpp
index 51cbb80ae..abeb8590f 100644
--- a/source/cBaseObject.cpp
+++ b/source/cBaseObject.cpp
@@ -94,6 +94,9 @@ const SI16			DEFBASE_KILLS		= 0;
 const UI16			DEFBASE_RESIST 		= 0;
 const bool			DEFBASE_NAMEREQUESTACTIVE = 0;
 const ExpansionRuleset	DEFBASE_ORIGIN	= ER_UO;
+const SI16			DEFBASE_BONUSHEALTH = 0;
+const SI16			DEFBASE_BONUSSTAMINA = 0;
+const SI16			DEFBASE_BONUSMANA = 0;
 
 //o------------------------------------------------------------------------------------------------o
 //|	Function	-	CBaseObject constructor
@@ -110,7 +113,8 @@ loDamage( DEFBASE_LODAMAGE ), weight( DEFBASE_WEIGHT ),
 mana( DEFBASE_MANA ), stamina( DEFBASE_STAMINA ), scriptTrig( DEFBASE_SCPTRIG ), st2( DEFBASE_STR2 ), dx2( DEFBASE_DEX2 ),
 in2( DEFBASE_INT2 ), FilePosition( DEFBASE_FP ),
 poisoned( DEFBASE_POISONED ), carve( DEFBASE_CARVE ), oldLocX( 0 ), oldLocY( 0 ), oldLocZ( 0 ), oldTargLocX( 0 ), oldTargLocY( 0 ),
-fame( DEFBASE_FAME ), karma( DEFBASE_KARMA ), kills( DEFBASE_KILLS ), subRegion( DEFBASE_SUBREGION ), nameRequestActive( DEFBASE_NAMEREQUESTACTIVE ), origin( DEFBASE_ORIGIN )
+fame( DEFBASE_FAME ), karma( DEFBASE_KARMA ), kills( DEFBASE_KILLS ), subRegion( DEFBASE_SUBREGION ), nameRequestActive( DEFBASE_NAMEREQUESTACTIVE ), origin( DEFBASE_ORIGIN ),
+bonusHits( DEFBASE_BONUSHEALTH ),bonusStam( DEFBASE_BONUSSTAMINA ), bonusMana( DEFBASE_BONUSMANA )
 {
 	multis = nullptr;
 	tempMulti = INVALIDSERIAL;

From 2694dbc502d90e85eb5a94009a372c8766b5fa1d Mon Sep 17 00:00:00 2001
From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com>
Date: Sun, 16 Jun 2024 18:57:27 -0500
Subject: [PATCH 07/11] Match uox3 Style

---
 source/CPacketSend.cpp        | 12 ++++----
 source/UOXJSPropertyEnums.h   |  6 ++--
 source/UOXJSPropertyFuncs.cpp | 12 ++++----
 source/UOXJSPropertySpecs.h   |  6 ++--
 source/cBaseObject.cpp        | 44 +++++++++++++--------------
 source/cBaseObject.h          | 18 +++++------
 source/cChar.cpp              | 57 +++++++++++++++++------------------
 source/cChar.h                | 12 ++++----
 source/cItem.cpp              | 14 ++++-----
 source/items.cpp              |  6 ++--
 source/ssection.cpp           | 12 ++++----
 source/ssection.h             |  6 ++--
 12 files changed, 102 insertions(+), 103 deletions(-)

diff --git a/source/CPacketSend.cpp b/source/CPacketSend.cpp
index dfcf7cd62..c95dbf5fd 100644
--- a/source/CPacketSend.cpp
+++ b/source/CPacketSend.cpp
@@ -7657,24 +7657,24 @@ void CPToolTip::CopyItemData( CItem& cItem, size_t &totalStringLen, bool addAmou
 				FinalizeData( tempEntry, totalStringLen );
 			}
 
-			if( cItem.GetBonusHits() > 0 )
+			if( cItem.GetHealthBonus() > 0 )
 			{
 				tempEntry.stringNum = 1060431; // hit point increase ~1_val~
-				tempEntry.ourText = oldstrutil::number( cItem.GetBonusHits() );
+				tempEntry.ourText = oldstrutil::number( cItem.GetHealthBonus() );
 				FinalizeData( tempEntry, totalStringLen );
 			}
 
-			if( cItem.GetBonusStam() > 0 )
+			if( cItem.GetStaminaBonus() > 0 )
 			{
 				tempEntry.stringNum = 1060484; // stamina increase ~1_val~
-				tempEntry.ourText = oldstrutil::number( cItem.GetBonusStam() );
+				tempEntry.ourText = oldstrutil::number( cItem.GetStaminaBonus() );
 				FinalizeData( tempEntry, totalStringLen );
 			}
 
-			if( cItem.GetBonusMana() > 0 )
+			if( cItem.GetManaBonus() > 0 )
 			{
 				tempEntry.stringNum = 1060439; // mana increase ~1_val~
-				tempEntry.ourText = oldstrutil::number( cItem.GetBonusMana() );
+				tempEntry.ourText = oldstrutil::number( cItem.GetManaBonus() );
 				FinalizeData( tempEntry, totalStringLen );
 			}
 
diff --git a/source/UOXJSPropertyEnums.h b/source/UOXJSPropertyEnums.h
index f7f187903..2b4bf3091 100644
--- a/source/UOXJSPropertyEnums.h
+++ b/source/UOXJSPropertyEnums.h
@@ -516,9 +516,9 @@ enum CI_Properties
 	CIP_ISCONTTYPE,
 	CIP_CARVESECTION,
 	CIP_SPEED,
-	CIP_BONUSHITS,
-	CIP_BONUSSTAM,
-	CIP_BONUSMANA,
+	CIP_HEALTHBONUS,
+	CIP_STAMINABONUS,
+	CIP_MANABONUS,
 	CIP_MULTI,
 	CIP_AMMOID,
 	CIP_AMMOHUE,
diff --git a/source/UOXJSPropertyFuncs.cpp b/source/UOXJSPropertyFuncs.cpp
index a492f112a..8771f2688 100644
--- a/source/UOXJSPropertyFuncs.cpp
+++ b/source/UOXJSPropertyFuncs.cpp
@@ -676,9 +676,9 @@ JSBool CItemProps_getProperty( JSContext *cx, JSObject *obj, jsval id, jsval *vp
 			case CIP_DAMAGERAIN:		*vp = BOOLEAN_TO_JSVAL( gPriv->GetWeatherDamage( RAIN ));	break;
 			case CIP_DAMAGESNOW:		*vp = BOOLEAN_TO_JSVAL( gPriv->GetWeatherDamage( SNOW ));	break;
 			case CIP_SPEED:			*vp = INT_TO_JSVAL( gPriv->GetSpeed() );			break;
-			case CIP_BONUSHITS:		*vp = INT_TO_JSVAL( gPriv->GetBonusHits() );			break;
-			case CIP_BONUSSTAM:		*vp = INT_TO_JSVAL( gPriv->GetBonusStam() );			break;
-			case CIP_BONUSMANA:		*vp = INT_TO_JSVAL( gPriv->GetBonusMana() );			break;
+			case CIP_HEALTHBONUS:		*vp = INT_TO_JSVAL( gPriv->GetHealthBonus() );			break;
+			case CIP_STAMINABONUS:		*vp = INT_TO_JSVAL( gPriv->GetStaminaBonus() );			break;
+			case CIP_MANABONUS:		*vp = INT_TO_JSVAL( gPriv->GetManaBonus() );			break;
 			case CIP_NAME2:
 				tString = JS_NewStringCopyZ( cx, gPriv->GetName2().c_str() );
 				*vp = STRING_TO_JSVAL( tString );
@@ -1324,9 +1324,9 @@ JSBool CItemProps_setProperty( JSContext *cx, JSObject *obj, jsval id, jsval *vp
 			case CIP_DAMAGERAIN:	gPriv->SetWeatherDamage( RAIN, encaps.toBool() );			break;
 			case CIP_DAMAGESNOW:	gPriv->SetWeatherDamage( SNOW, encaps.toBool() );			break;
 			case CIP_SPEED:			gPriv->SetSpeed( static_cast<UI08>( encaps.toInt() ));		break;
-			case CIP_BONUSHITS:		gPriv->SetBonusHits( static_cast<SI16>( encaps.toInt() ));	break;
-			case CIP_BONUSSTAM:		gPriv->SetBonusStam( static_cast<SI16>( encaps.toInt() ));	break;
-			case CIP_BONUSMANA:		gPriv->SetBonusMana( static_cast<SI16>( encaps.toInt() ));	break;
+			case CIP_HEALTHBONUS:		gPriv->SetHealthBonus( static_cast<SI16>( encaps.toInt() ));	break;
+			case CIP_STAMINABONUS:		gPriv->SetStaminaBonus( static_cast<SI16>( encaps.toInt() ));	break;
+			case CIP_MANABONUS:		gPriv->SetManaBonus( static_cast<SI16>( encaps.toInt() ));	break;
 			case CIP_NAME2:			gPriv->SetName2( encaps.toString() );						break;
 			case CIP_RACE:			gPriv->SetRace( static_cast<RACEID>( encaps.toInt() ));		break;
 			case CIP_MAXHP:			gPriv->SetMaxHP( static_cast<SI16>( encaps.toInt() ));		break;
diff --git a/source/UOXJSPropertySpecs.h b/source/UOXJSPropertySpecs.h
index c5a8c8039..8b33d4bc8 100644
--- a/source/UOXJSPropertySpecs.h
+++ b/source/UOXJSPropertySpecs.h
@@ -535,9 +535,9 @@ inline JSPropertySpec CItemProps[] =
 	{ "ammoFXHue",		CIP_AMMOFXHUE,		JSPROP_ENUMANDPERM, nullptr, nullptr },
 	{ "ammoFXRender",	CIP_AMMOFXRENDER,	JSPROP_ENUMANDPERM, nullptr, nullptr },
 	{ "speed",			CIP_SPEED,			JSPROP_ENUMANDPERM, nullptr, nullptr },
-	{ "bonusHits",		CIP_BONUSHITS,		JSPROP_ENUMANDPERM, nullptr, nullptr },
-	{ "bonusStam",		CIP_BONUSSTAM,		JSPROP_ENUMANDPERM, nullptr, nullptr },
-	{ "bonusMana",		CIP_BONUSMANA,		JSPROP_ENUMANDPERM, nullptr, nullptr },
+	{ "healthBonus",	CIP_HEALTHBONUS,	JSPROP_ENUMANDPERM, nullptr, nullptr },
+	{ "staminaBonus",	CIP_STAMINABONUS,	JSPROP_ENUMANDPERM, nullptr, nullptr },
+	{ "manaBonus",		CIP_MANABONUS,		JSPROP_ENUMANDPERM, nullptr, nullptr },
 	{ "multi",			CIP_MULTI,			JSPROP_ENUMANDPERM, nullptr, nullptr },
 	{ "maxRange",		CIP_MAXRANGE,		JSPROP_ENUMANDPERM, nullptr, nullptr },
 	{ "baseRange",		CIP_BASERANGE,		JSPROP_ENUMANDPERM, nullptr, nullptr },
diff --git a/source/cBaseObject.cpp b/source/cBaseObject.cpp
index abeb8590f..131f0417b 100644
--- a/source/cBaseObject.cpp
+++ b/source/cBaseObject.cpp
@@ -94,9 +94,9 @@ const SI16			DEFBASE_KILLS		= 0;
 const UI16			DEFBASE_RESIST 		= 0;
 const bool			DEFBASE_NAMEREQUESTACTIVE = 0;
 const ExpansionRuleset	DEFBASE_ORIGIN	= ER_UO;
-const SI16			DEFBASE_BONUSHEALTH = 0;
-const SI16			DEFBASE_BONUSSTAMINA = 0;
-const SI16			DEFBASE_BONUSMANA = 0;
+const SI16			DEFBASE_HEALTHBONUS = 0;
+const SI16			DEFBASE_STAMINABONOS = 0;
+const SI16			DEFBASE_MANABONUS = 0;
 
 //o------------------------------------------------------------------------------------------------o
 //|	Function	-	CBaseObject constructor
@@ -114,7 +114,7 @@ mana( DEFBASE_MANA ), stamina( DEFBASE_STAMINA ), scriptTrig( DEFBASE_SCPTRIG ),
 in2( DEFBASE_INT2 ), FilePosition( DEFBASE_FP ),
 poisoned( DEFBASE_POISONED ), carve( DEFBASE_CARVE ), oldLocX( 0 ), oldLocY( 0 ), oldLocZ( 0 ), oldTargLocX( 0 ), oldTargLocY( 0 ),
 fame( DEFBASE_FAME ), karma( DEFBASE_KARMA ), kills( DEFBASE_KILLS ), subRegion( DEFBASE_SUBREGION ), nameRequestActive( DEFBASE_NAMEREQUESTACTIVE ), origin( DEFBASE_ORIGIN ),
-bonusHits( DEFBASE_BONUSHEALTH ),bonusStam( DEFBASE_BONUSSTAMINA ), bonusMana( DEFBASE_BONUSMANA )
+healthBonus( DEFBASE_HEALTHBONUS ),staminaBonus( DEFBASE_STAMINABONOS ), manaBonus( DEFBASE_MANABONUS )
 {
 	multis = nullptr;
 	tempMulti = INVALIDSERIAL;
@@ -1636,19 +1636,19 @@ void CBaseObject::SetIntelligence2( SI16 nVal )
 }
 
 //o------------------------------------------------------------------------------------------------o
-//|	Function	-	CBaseObject::GetBonusHits()
-//|					CBaseObject::SetBonusHits()
+//|	Function	-	CBaseObject::GetHealthBonus()
+//|					CBaseObject::SetHealthBonus()
 //o------------------------------------------------------------------------------------------------o
 //|	Purpose		-	Gets/Sets the health max var associated with the object. For chars, it's the
 //|					bonuses (via armour and such)
 //o------------------------------------------------------------------------------------------------o
-SI16 CBaseObject::GetBonusHits( void ) const
+SI16 CBaseObject::GetHealthBonus( void ) const
 {
-	return bonusHits;
+	return healthBonus;
 }
-void CBaseObject::SetBonusHits( SI16 nVal )
+void CBaseObject::SetHealthBonus( SI16 nVal )
 {
-	bonusHits = nVal;
+	healthBonus = nVal;
 
 	if( CanBeObjType( OT_ITEM ))
 	{
@@ -1657,19 +1657,19 @@ void CBaseObject::SetBonusHits( SI16 nVal )
 }
 
 //o------------------------------------------------------------------------------------------------o
-//|	Function	-	CBaseObject::GetBonusStam()
-//|					CBaseObject::SetBonusStam()
+//|	Function	-	CBaseObject::GetStaminaBonus()
+//|					CBaseObject::SetStaminaBonus()
 //o------------------------------------------------------------------------------------------------o
 //|	Purpose		-	Gets/Sets the stamina max var associated with the object. For chars, it's the
 //|					bonuses (via armour and such)
 //o------------------------------------------------------------------------------------------------o
-SI16 CBaseObject::GetBonusStam( void ) const
+SI16 CBaseObject::GetStaminaBonus( void ) const
 {
-	return bonusStam;
+	return staminaBonus;
 }
-void CBaseObject::SetBonusStam( SI16 nVal )
+void CBaseObject::SetStaminaBonus( SI16 nVal )
 {
-	bonusStam = nVal;
+	staminaBonus = nVal;
 
 	if( CanBeObjType( OT_ITEM ))
 	{
@@ -1678,19 +1678,19 @@ void CBaseObject::SetBonusStam( SI16 nVal )
 }
 
 //o------------------------------------------------------------------------------------------------o
-//|	Function	-	CBaseObject::GetBonusMana()
-//|					CBaseObject::SetBonusMana()
+//|	Function	-	CBaseObject::GetManaBonus()
+//|					CBaseObject::SetManaBonus()
 //o------------------------------------------------------------------------------------------------o
 //|	Purpose		-	Gets/Sets the Mana max var associated with the object. For chars, it's the
 //|					bonuses (via armour and such)
 //o------------------------------------------------------------------------------------------------o
-SI16 CBaseObject::GetBonusMana( void ) const
+SI16 CBaseObject::GetManaBonus( void ) const
 {
-	return bonusMana;
+	return manaBonus;
 }
-void CBaseObject::SetBonusMana( SI16 nVal )
+void CBaseObject::SetManaBonus( SI16 nVal )
 {
-	bonusMana = nVal;
+	manaBonus = nVal;
 
 	if( CanBeObjType( OT_ITEM ))
 	{
diff --git a/source/cBaseObject.h b/source/cBaseObject.h
index 15563feca..b3c7e98f9 100644
--- a/source/cBaseObject.h
+++ b/source/cBaseObject.h
@@ -79,9 +79,9 @@ class CBaseObject
 	SI16				st2;
 	SI16				dx2;
 	SI16				in2;
-	SI16				bonusHits;
-	SI16				bonusStam;
-	SI16				bonusMana;
+	SI16				healthBonus;
+	SI16				staminaBonus;
+	SI16				manaBonus;
 	mutable SI32		FilePosition;
 	SERIAL				tempMulti;
 	std::string			name;
@@ -259,14 +259,14 @@ class CBaseObject
 	void					IncDexterity( SI16 toInc = 1 );
 	void					IncIntelligence( SI16 toInc = 1 );
 
-	SI16					GetBonusHits( void ) const;
-	virtual void			SetBonusHits( SI16 nVal );
+	SI16					GetHealthBonus( void ) const;
+	virtual void			SetHealthBonus( SI16 nVal );
 
-	SI16					GetBonusStam( void ) const;
-	virtual void			SetBonusStam( SI16 nVal );
+	SI16					GetStaminaBonus( void ) const;
+	virtual void			SetStaminaBonus( SI16 nVal );
 
-	SI16					GetBonusMana( void ) const;
-	virtual void			SetBonusMana( SI16 nVal );
+	SI16					GetManaBonus( void ) const;
+	virtual void			SetManaBonus( SI16 nVal );
 
 	virtual void			PostLoadProcessing( void );
 	virtual bool			LoadRemnants( void ) = 0;
diff --git a/source/cChar.cpp b/source/cChar.cpp
index 530053021..bcd9e90f6 100644
--- a/source/cChar.cpp
+++ b/source/cChar.cpp
@@ -2920,9 +2920,9 @@ bool CChar::WearItem( CItem *toWear )
 			IncDexterity2( itemLayers[tLayer]->GetDexterity2() );
 			IncIntelligence2( itemLayers[tLayer]->GetIntelligence2() );
 
-			IncBonusHits( itemLayers[tLayer]->GetBonusHits() );
-			IncBonusStam( itemLayers[tLayer]->GetBonusStam() );
-			IncBonusMana( itemLayers[tLayer]->GetBonusMana() );
+			IncHealthBonus( itemLayers[tLayer]->GetHealthBonus() );
+			IncStaminaBonus( itemLayers[tLayer]->GetStaminaBonus() );
+			IncManaBonus( itemLayers[tLayer]->GetManaBonus() );
 
 			if( toWear->IsPostLoaded() )
 			{
@@ -2984,9 +2984,9 @@ bool CChar::TakeOffItem( ItemLayers Layer )
 		IncDexterity2( -itemLayers[Layer]->GetDexterity2() );
 		IncIntelligence2( -itemLayers[Layer]->GetIntelligence2() );
 
-		IncBonusHits( -itemLayers[Layer]->GetBonusHits() );
-		IncBonusStam( -itemLayers[Layer]->GetBonusStam() );
-		IncBonusMana( -itemLayers[Layer]->GetBonusMana() );
+		IncHealthBonus( -itemLayers[Layer]->GetHealthBonus() );
+		IncStaminaBonus( -itemLayers[Layer]->GetStaminaBonus() );
+		IncManaBonus( -itemLayers[Layer]->GetManaBonus() );
 
 		if( itemLayers[Layer]->GetPoisoned() )
 		{
@@ -3796,7 +3796,7 @@ UI16 CChar::GetMaxHP( void )
 		oldRace			= GetRace();
 
 	}
-	return maxHP + GetBonusHits();
+	return maxHP + GetHealthBonus();
 }
 void CChar::SetMaxHP( UI16 newmaxhp, UI16 newoldstr, RACEID newoldrace )
 {
@@ -3856,7 +3856,7 @@ SI16 CChar::GetMaxMana( void )
 		oldRace			= GetRace();
 
 	}
-	return maxMana + GetBonusMana();
+	return maxMana + GetManaBonus();
 }
 void CChar::SetMaxMana( SI16 newmaxmana, UI16 newoldint, RACEID newoldrace )
 {
@@ -3916,7 +3916,7 @@ SI16 CChar::GetMaxStam( void )
 		oldRace			= GetRace();
 
 	}
-	return maxStam + GetBonusStam();
+	return maxStam + GetStaminaBonus();
 }
 void CChar::SetMaxStam( SI16 newmaxstam, UI16 newolddex, RACEID newoldrace )
 {
@@ -5603,72 +5603,71 @@ void CChar::SetIntelligence2( SI16 nVal )
 }
 
 //o------------------------------------------------------------------------------------------------o
-//| Function	-	CChar::SetBonusHits()
+//| Function	-	CChar::SetHealthBonus()
 //o------------------------------------------------------------------------------------------------o
 //| Purpose		-	Sets bonus Hits stat for character
 //o------------------------------------------------------------------------------------------------o
-void CChar::SetBonusHits( SI16 nVal )
+void CChar::SetHealthBonus( SI16 nVal )
 {
-	CBaseObject::SetBonusHits( nVal );
+	CBaseObject::SetHealthBonus( nVal );
 	Dirty( UT_HITPOINTS );
 	UpdateRegion();
 }
 
 //o------------------------------------------------------------------------------------------------o
-//| Function	-	CChar::SetBonusStam()
+//| Function	-	CChar::SetStaminaBonus()
 //o------------------------------------------------------------------------------------------------o
 //| Purpose		-	Sets bonus Stam stat for character
 //o------------------------------------------------------------------------------------------------o
-void CChar::SetBonusStam( SI16 nVal )
+void CChar::SetStaminaBonus( SI16 nVal )
 {
-	CBaseObject::SetBonusStam( nVal );
+	CBaseObject::SetStaminaBonus( nVal );
 	Dirty( UT_STAMINA );
 	UpdateRegion();
 }
 
 //o------------------------------------------------------------------------------------------------o
-//| Function	-	CChar::SetBonusMana()
+//| Function	-	CChar::SetManaBonus()
 //o------------------------------------------------------------------------------------------------o
 //| Purpose		-	Sets bonus Mana stat for character
 //o------------------------------------------------------------------------------------------------o
-void CChar::SetBonusMana( SI16 nVal )
+void CChar::SetManaBonus( SI16 nVal )
 {
-	CBaseObject::SetBonusMana( nVal );
+	CBaseObject::SetManaBonus( nVal );
 	Dirty( UT_MANA );
 	UpdateRegion();
 }
 
 //o------------------------------------------------------------------------------------------------o
-//| Function	-	CChar::IncBonusHits()
-//| Date		-	26 May 2024
+//| Function	-	CChar::IncHealthBonus()
 //o------------------------------------------------------------------------------------------------o
-//| Purpose		-	Increments GetBonusHits (modifications) by toAdd
+//| Purpose		-	Increments GetHealthBonus (modifications) by toAdd
 //o------------------------------------------------------------------------------------------------o
-void CChar::IncBonusHits( SI16 toAdd )
+void CChar::IncHealthBonus( SI16 toAdd )
 {
-	SetBonusHits( static_cast<SI16>( GetBonusHits() + toAdd ));
+	SetHealthBonus( static_cast<SI16>( GetHealthBonus() + toAdd ));
 }
 
 //o------------------------------------------------------------------------------------------------o
-//| Function	-	CChar::IncBonusStam()
+//| Function	-	CChar::IncStaminaBonus()
 //| Date		-	26 May 2024
 //o------------------------------------------------------------------------------------------------o
 //| Purpose		-	Increments GetBonusStam (modifications) by toAdd
 //o------------------------------------------------------------------------------------------------o
-void CChar::IncBonusStam( SI16 toAdd )
+void CChar::IncStaminaBonus( SI16 toAdd )
 {
-	SetBonusStam( static_cast<SI16>( GetBonusStam() + toAdd ));
+	SetStaminaBonus( static_cast<SI16>( GetStaminaBonus() + toAdd ));
 }
 
 //o------------------------------------------------------------------------------------------------o
-//| Function	-	CChar::IncBonusMana()
+//| Function	-	CChar::IncManaBonus()
 //| Date		-	26 May 2024
 //o------------------------------------------------------------------------------------------------o
 //| Purpose		-	Increments GetBonusMana (modifications) by toAdd
 //o------------------------------------------------------------------------------------------------o
-void CChar::IncBonusMana( SI16 toAdd )
+void CChar::IncManaBonus( SI16 toAdd )
 {
-	SetBonusMana( static_cast<SI16>( GetBonusMana() + toAdd ));
+	SetManaBonus( static_cast<SI16>( GetManaBonus() + toAdd ));
 }
 
 //o------------------------------------------------------------------------------------------------o
diff --git a/source/cChar.h b/source/cChar.h
index 3156340ff..ae387a58c 100644
--- a/source/cChar.h
+++ b/source/cChar.h
@@ -629,13 +629,13 @@ class CChar : public CBaseObject
 	virtual void	SetDexterity2( SI16 newValue ) override;
 	virtual void	SetIntelligence2( SI16 newValue ) override;
 
-	virtual void	SetBonusHits( SI16 newValue ) override;
-	virtual void	SetBonusStam( SI16 newValue ) override;
-	virtual void	SetBonusMana( SI16 newValue ) override;
+	virtual void	SetHealthBonus( SI16 newValue ) override;
+	virtual void	SetStaminaBonus( SI16 newValue ) override;
+	virtual void	SetManaBonus( SI16 newValue ) override;
 
-	void			IncBonusHits( SI16 toAdd = 1 );
-	void			IncBonusStam( SI16 toAdd = 1 );
-	void			IncBonusMana( SI16 toAdd = 1 );
+	void			IncHealthBonus( SI16 toAdd = 1 );
+	void			IncStaminaBonus( SI16 toAdd = 1 );
+	void			IncManaBonus( SI16 toAdd = 1 );
 
 	void			IncStamina( SI16 toInc );
 	void			IncMana( SI16 toInc );
diff --git a/source/cItem.cpp b/source/cItem.cpp
index c345ecdc2..e19ff45d1 100644
--- a/source/cItem.cpp
+++ b/source/cItem.cpp
@@ -1654,9 +1654,9 @@ auto CItem::CopyData( CItem *target ) -> void
 	target->SetWeightMax( GetWeightMax() );
 	target->SetBaseWeight( GetBaseWeight() );
 	target->SetMaxItems( GetMaxItems() );
-	target->SetBonusHits( GetBonusHits() );
-	target->SetBonusStam( GetBonusStam() );
-	target->SetBonusMana( GetBonusMana() );
+	target->SetHealthBonus( GetHealthBonus() );
+	target->SetStaminaBonus( GetStaminaBonus() );
+	target->SetManaBonus( GetManaBonus() );
 	//target->SetWipeable( IsWipeable() );
 	target->SetPriv( GetPriv() );
 	target->SetBaseRange( GetBaseRange() );
@@ -1740,7 +1740,7 @@ bool CItem::DumpBody( std::ostream &outStream ) const
 	outStream << "MaxItems=" + std::to_string( GetMaxItems() ) + newLine;
 	outStream << "MaxHP=" + std::to_string( GetMaxHP() ) + newLine;
 	outStream << "Speed=" + std::to_string( GetSpeed() ) + newLine;
-	outStream << "BonusStats=" + std::to_string( GetBonusHits() ) + "," + std::to_string( GetBonusStam() ) + "," + std::to_string( GetBonusMana() ) + newLine;
+	outStream << "BonusStats=" + std::to_string( GetHealthBonus() ) + "," + std::to_string( GetStaminaBonus() ) + "," + std::to_string( GetManaBonus() ) + newLine;
 	outStream << "Movable=" + std::to_string( GetMovable() ) + newLine;
 	outStream << "Priv=" + std::to_string( GetPriv() ) + newLine;
 	outStream << "Value=" + std::to_string( GetBuyValue() ) + "," + std::to_string( GetSellValue() ) + "," + std::to_string( GetVendorPrice() ) + newLine;
@@ -1826,9 +1826,9 @@ bool CItem::HandleLine( std::string &UTag, std::string &data )
 				}
 				else if( UTag == "BONUSSTATS" )
 				{
-				    SetBonusHits( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[0], "//" )), nullptr, 0 )));
-				    SetBonusStam( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[1], "//" )), nullptr, 0 )));
-				    SetBonusMana( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[2], "//" )), nullptr, 0 )));
+				    SetHealthBonus( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[0], "//" )), nullptr, 0 )));
+				    SetStaminaBonus( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[1], "//" )), nullptr, 0 )));
+				    SetManaBonus( static_cast<SI16>( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[2], "//" )), nullptr, 0 )));
 				    rValue = true;
 				}
 				break;
diff --git a/source/items.cpp b/source/items.cpp
index 3bb17bb66..60c6468b7 100644
--- a/source/items.cpp
+++ b/source/items.cpp
@@ -139,9 +139,9 @@ auto ApplyItemSection( CItem *applyTo, CScriptSection *toApply, std::string sect
 				break;
 			case DFNTAG_AC:				applyTo->SetArmourClass( static_cast<UI08>( ndata ));	break;
 			case DFNTAG_BASERANGE:		applyTo->SetBaseRange( static_cast<UI08>( ndata ));		break;
-			case DFNTAG_BONUSHITS:		applyTo->SetBonusHits( static_cast<SI16>( ndata ));		break;
-			case DFNTAG_BONUSSTAM:		applyTo->SetBonusStam( static_cast<SI16>( ndata ));		break;
-			case DFNTAG_BONUSMANA:		applyTo->SetBonusMana( static_cast<SI16>( ndata ));		break;
+			case DFNTAG_HEALTHBONUS:		applyTo->SetHealthBonus( static_cast<SI16>( ndata ));		break;
+			case DFNTAG_STAMINABONUS:		applyTo->SetStaminaBonus( static_cast<SI16>( ndata ));		break;
+			case DFNTAG_MANABONUS:		applyTo->SetManaBonus( static_cast<SI16>( ndata ));		break;
 			case DFNTAG_CREATOR:		applyTo->SetCreator( ndata );							break;
 			case DFNTAG_COLOUR:			applyTo->SetColour( static_cast<UI16>( ndata ));		break;
 			case DFNTAG_COLOURLIST:		applyTo->SetColour( AddRandomColor( cdata ));			break;
diff --git a/source/ssection.cpp b/source/ssection.cpp
index dbfc8a475..52f73da5d 100644
--- a/source/ssection.cpp
+++ b/source/ssection.cpp
@@ -215,9 +215,9 @@ const UI08 dfnDataTypes[DFNTAG_COUNTOFTAGS] =
 	DFN_STRING,			//	DFNTAG_SPAWNOBJ,
 	DFN_STRING,			//	DFNTAG_SPAWNOBJLIST,
 	DFN_NUMERIC,		//	DFNTAG_SPD,
-	DFN_NUMERIC,		//  DFNTAG_BONUSHITS,
-	DFN_NUMERIC,		//  DFNTAG_BONUSSTAM,
-	DFN_NUMERIC,		//  DFNTAG_BONUSMANA,
+	DFN_NUMERIC,		//  DFNTAG_HEALTHBONUS,
+	DFN_NUMERIC,		//  DFNTAG_STAMINABONUS,
+	DFN_NUMERIC,		//  DFNTAG_MANABONUS,
 	DFN_STRING,			//	DFNTAG_SPELLS,
 	DFN_DOUBLENUMERIC,	//	DFNTAG_SPELLWEAVING,
 	DFN_DOUBLENUMERIC,	//	DFNTAG_SPIRITSPEAK,
@@ -286,9 +286,9 @@ const std::map<std::string, DFNTAGS> strToDFNTag
 	{"BLACKSMITHING"s,		DFNTAG_BLACKSMITHING},
 	{"BOWCRAFT"s,			DFNTAG_BOWCRAFT},
 	{"BUSHIDO"s,			DFNTAG_BUSHIDO},
-	{"BONUSHITS"s,			DFNTAG_BONUSHITS},
-	{"BONUSSTAM"s,			DFNTAG_BONUSSTAM},
-	{"BONUSMANA"s,			DFNTAG_BONUSMANA},
+	{"HEALTHBONUS"s,		DFNTAG_HEALTHBONUS},
+	{"STAMINABONUS"s,		DFNTAG_STAMINABONUS},
+	{"MANABONUS"s,			DFNTAG_MANABONUS},
 	{"CAMPING"s,			DFNTAG_CAMPING},
 	{"CARPENTRY"s,			DFNTAG_CARPENTRY},
 	{"CARTOGRAPHY"s,		DFNTAG_CARTOGRAPHY},
diff --git a/source/ssection.h b/source/ssection.h
index 8ffc1edc9..ca227c23b 100644
--- a/source/ssection.h
+++ b/source/ssection.h
@@ -222,9 +222,9 @@ enum DFNTAGS
 	DFNTAG_SPAWNOBJ,
 	DFNTAG_SPAWNOBJLIST,
 	DFNTAG_SPD,
-	DFNTAG_BONUSHITS,
-	DFNTAG_BONUSSTAM,
-	DFNTAG_BONUSMANA,
+	DFNTAG_HEALTHBONUS,
+	DFNTAG_STAMINABONUS,
+	DFNTAG_MANABONUS,
 	DFNTAG_SPELLS,
 	DFNTAG_SPELLWEAVING,
 	DFNTAG_SPIRITSPEAK,

From 7c101e668290939e1fe3956163b02b1c16934c47 Mon Sep 17 00:00:00 2001
From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com>
Date: Sun, 16 Jun 2024 18:58:24 -0500
Subject: [PATCH 08/11] Update Changelog.txt

---
 source/Changelog.txt | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/source/Changelog.txt b/source/Changelog.txt
index c695610cd..61554e478 100644
--- a/source/Changelog.txt
+++ b/source/Changelog.txt
@@ -1,8 +1,8 @@
 13/05/2024 - Dragon Slayer
 	Added three More AOS Props
-	-BONUSHITS=#
-	-BONUSMANA=#
-	-BONUSSTAM=#
+	-HEALTHBONUS=#
+	-MANABONUS=#
+	-STAMINABONUS=#
 	Add this properties to any weapon/armor/jewlery will give the player more hp/mana/stam why its equiped. depending on number you add with it
 
 27/04/2024 - Dragon Slayer/Xuri

From c8bceabc303c0ab2e05383f8d409dd9c72f64086 Mon Sep 17 00:00:00 2001
From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com>
Date: Sun, 16 Jun 2024 19:00:03 -0500
Subject: [PATCH 09/11] Update Changelog.txt

---
 source/Changelog.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/source/Changelog.txt b/source/Changelog.txt
index 61554e478..eb4a9d532 100644
--- a/source/Changelog.txt
+++ b/source/Changelog.txt
@@ -4,6 +4,7 @@
 	-MANABONUS=#
 	-STAMINABONUS=#
 	Add this properties to any weapon/armor/jewlery will give the player more hp/mana/stam why its equiped. depending on number you add with it
+	These are also available as JS Engine object properties: .healthBonus, .staminaBonus, .manaBonus
 
 27/04/2024 - Dragon Slayer/Xuri
 	Fixed an issue where non-corpse containers - including treasure chests in dungeons - would decay and leave all their contents on the ground.

From 0bf54f87db7d21a189e1f8a4094cb1fcb5223cce Mon Sep 17 00:00:00 2001
From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com>
Date: Fri, 24 Jan 2025 18:50:38 -0600
Subject: [PATCH 10/11] Update Changelog.txt

---
 source/Changelog.txt | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/source/Changelog.txt b/source/Changelog.txt
index b0801d426..fb3168ad2 100644
--- a/source/Changelog.txt
+++ b/source/Changelog.txt
@@ -1,6 +1,10 @@
 13/05/2024 - Dragon Slayer
 	Added New Shield Type 107 so shield ID's no longer have to be in hard code for shields to work properly
 
+11/05/2024 - Dragon Slayer
+	Fixed items handling correct target for resists.
+	Added Getting the resists on chars.
+
 09/05/2024 - Dragon Slayer
 	Added ArtifactRarity AOS Property for items
 	-ARTIFACTRARITY=#

From 2ca6b335c7abc88ff1db84576bfdbc3a584d60aa Mon Sep 17 00:00:00 2001
From: Geir Ove Alnes <Xoduz@users.noreply.github.com>
Date: Sat, 25 Jan 2025 15:29:21 +0800
Subject: [PATCH 11/11] Update Changelog.txt

---
 source/Changelog.txt | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/source/Changelog.txt b/source/Changelog.txt
index fb3168ad2..f62b29102 100644
--- a/source/Changelog.txt
+++ b/source/Changelog.txt
@@ -2,8 +2,7 @@
 	Added New Shield Type 107 so shield ID's no longer have to be in hard code for shields to work properly
 
 11/05/2024 - Dragon Slayer
-	Fixed items handling correct target for resists.
-	Added Getting the resists on chars.
+	Updated 'get command (js/commands/targeting/get.js) to use correct object reference when getting resist values for items, and added support for getting resist values for chars
 
 09/05/2024 - Dragon Slayer
 	Added ArtifactRarity AOS Property for items