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/10] 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( encaps.toInt() )); break; + case CIP_BONUSHITS: gPriv->SetBonusHits( static_cast( encaps.toInt() )); break; + case CIP_BONUSSTAM: gPriv->SetBonusStam( static_cast( encaps.toInt() )); break; + case CIP_BONUSMANA: gPriv->SetBonusMana( static_cast( encaps.toInt() )); break; case CIP_NAME2: gPriv->SetName2( encaps.toString() ); break; case CIP_RACE: gPriv->SetRace( static_cast( encaps.toInt() )); break; case CIP_MAXHP: gPriv->SetMaxHP( static_cast( 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( 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( 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( 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( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 )); rValue = true; } + else if( UTag == "BONUSHITS" ) + { + SetBonusHits( static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 ))); + rValue = true; + } + else if( UTag == "BONUSSTAM" ) + { + SetBonusStam( static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 ))); + rValue = true; + } + else if( UTag == "BONUSMANA" ) + { + SetBonusMana( static_cast( 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( ndata )); break; case DFNTAG_BASERANGE: applyTo->SetBaseRange( static_cast( ndata )); break; + case DFNTAG_BONUSHITS: applyTo->SetBonusHits( static_cast( ndata )); break; + case DFNTAG_BONUSSTAM: applyTo->SetBonusStam( static_cast( ndata )); break; + case DFNTAG_BONUSMANA: applyTo->SetBonusMana( static_cast( ndata )); break; case DFNTAG_CREATOR: applyTo->SetCreator( ndata ); break; case DFNTAG_COLOUR: applyTo->SetColour( static_cast( 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 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/10] 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( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 )); rValue = true; } - else if( UTag == "BONUSHITS" ) + else if( UTag == "BONUSSTATS" ) { - SetBonusHits( static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 ))); - rValue = true; - } - else if( UTag == "BONUSSTAM" ) - { - SetBonusStam( static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 ))); - rValue = true; - } - else if( UTag == "BONUSMANA" ) - { - SetBonusMana( static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( data, "//" )), nullptr, 0 ))); - rValue = true; + SetBonusHits( static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[0], "//" )), nullptr, 0 ))); + SetBonusStam( static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[1], "//" )), nullptr, 0 ))); + SetBonusMana( static_cast( 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/10] 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( 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( 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( 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 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 04/10] 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 05/10] 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 06/10] 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( encaps.toInt() )); break; - case CIP_BONUSHITS: gPriv->SetBonusHits( static_cast( encaps.toInt() )); break; - case CIP_BONUSSTAM: gPriv->SetBonusStam( static_cast( encaps.toInt() )); break; - case CIP_BONUSMANA: gPriv->SetBonusMana( static_cast( encaps.toInt() )); break; + case CIP_HEALTHBONUS: gPriv->SetHealthBonus( static_cast( encaps.toInt() )); break; + case CIP_STAMINABONUS: gPriv->SetStaminaBonus( static_cast( encaps.toInt() )); break; + case CIP_MANABONUS: gPriv->SetManaBonus( static_cast( encaps.toInt() )); break; case CIP_NAME2: gPriv->SetName2( encaps.toString() ); break; case CIP_RACE: gPriv->SetRace( static_cast( encaps.toInt() )); break; case CIP_MAXHP: gPriv->SetMaxHP( static_cast( 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( GetBonusHits() + toAdd )); + SetHealthBonus( static_cast( 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( GetBonusStam() + toAdd )); + SetStaminaBonus( static_cast( 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( GetBonusMana() + toAdd )); + SetManaBonus( static_cast( 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( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[0], "//" )), nullptr, 0 ))); - SetBonusStam( static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[1], "//" )), nullptr, 0 ))); - SetBonusMana( static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[2], "//" )), nullptr, 0 ))); + SetHealthBonus( static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[0], "//" )), nullptr, 0 ))); + SetStaminaBonus( static_cast( std::stoul( oldstrutil::trim( oldstrutil::removeTrailing( csecs[1], "//" )), nullptr, 0 ))); + SetManaBonus( static_cast( 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( ndata )); break; case DFNTAG_BASERANGE: applyTo->SetBaseRange( static_cast( ndata )); break; - case DFNTAG_BONUSHITS: applyTo->SetBonusHits( static_cast( ndata )); break; - case DFNTAG_BONUSSTAM: applyTo->SetBonusStam( static_cast( ndata )); break; - case DFNTAG_BONUSMANA: applyTo->SetBonusMana( static_cast( ndata )); break; + case DFNTAG_HEALTHBONUS: applyTo->SetHealthBonus( static_cast( ndata )); break; + case DFNTAG_STAMINABONUS: applyTo->SetStaminaBonus( static_cast( ndata )); break; + case DFNTAG_MANABONUS: applyTo->SetManaBonus( static_cast( ndata )); break; case DFNTAG_CREATOR: applyTo->SetCreator( ndata ); break; case DFNTAG_COLOUR: applyTo->SetColour( static_cast( 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 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 07/10] 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 08/10] 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 09/10] 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 Date: Sat, 25 Jan 2025 15:29:21 +0800 Subject: [PATCH 10/10] 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