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/13] 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/13] 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/13] 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 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/13] 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 e7c87950800fad4fdd5ec02e67a5a5ac3c845f13 Mon Sep 17 00:00:00 2001 From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com> Date: Wed, 29 May 2024 14:07:29 -0500 Subject: [PATCH 05/13] Fixed House Addons in Homes House add-on deeds are now returned when an add-on is present in the house. --- data/js/server/house/houseCommands.js | 11 ++++++++++- source/Changelog.txt | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/data/js/server/house/houseCommands.js b/data/js/server/house/houseCommands.js index e27bef044..2c7afd3f3 100644 --- a/data/js/server/house/houseCommands.js +++ b/data/js/server/house/houseCommands.js @@ -1522,8 +1522,17 @@ function DemolishHouse( pSocket, iMulti ) iMulti.RemoveTrashCont( itemInHouse ); itemInHouse.Delete(); } - else if( itemInHouse.movable == 2 ) // items placed as part of the house itself like forge/anvil in smithy + else if( itemInHouse.movable == 2 || itemInHouse.GetTag( "deed" )) // items placed as part of the house itself like forge/anvil in smithy or the addon deed { + var addonDeed = itemInHouse.GetTag( "deed" ); + if( addonDeed ) + { + var newDeed = CreateDFNItem( pSocket, pSocket.currentChar, addonDeed, 1, "ITEM", true ); + if( newDeed ) + { + pSocket.SysMessage( GetDictionaryEntry( 1970, pSocket.language )); // A deed for the house add-on has been placed in your backpack. + } + } itemInHouse.Delete(); } else if( itemInHouse.isLockedDown ) diff --git a/source/Changelog.txt b/source/Changelog.txt index f64afbc32..43a0869d2 100644 --- a/source/Changelog.txt +++ b/source/Changelog.txt @@ -1,3 +1,6 @@ +29/05/2024 - Dragon Slayer + House add-on deeds are now returned when an add-on is present in the house. + 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. From 7735b0ce567b05812a5484657ca64613c02aa994 Mon Sep 17 00:00:00 2001 From: Dragon Slayer <85514184+DragonSlayer62@users.noreply.github.com> Date: Wed, 29 May 2024 14:08:34 -0500 Subject: [PATCH 06/13] Update Changelog.txt --- source/Changelog.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Changelog.txt b/source/Changelog.txt index 43a0869d2..016465bc7 100644 --- a/source/Changelog.txt +++ b/source/Changelog.txt @@ -1,5 +1,5 @@ 29/05/2024 - Dragon Slayer - House add-on deeds are now returned when an add-on is present in the house. + House add-on deeds are now returned when an add-on is present in the house on demolish. 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. 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 07/13] 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 08/13] 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 09/13] 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 10/13] 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 11/13] 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 12/13] 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 13/13] 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