Skip to content

Commit 76a2f4a

Browse files
authored
bugfix(object): Reward unit experience for kills caused by OCL objects (#1634)
1 parent 57a8949 commit 76a2f4a

File tree

6 files changed

+24
-0
lines changed

6 files changed

+24
-0
lines changed

Generals/Code/GameEngine/Include/GameLogic/ExperienceTracker.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class ExperienceTracker : public MemoryPoolObject, public Snapshot
5858
Bool canGainExpForLevel(Int levelsToGain) const; ///< return same value as gainExpForLevel, but don't change anything
5959
void setExperienceAndLevel(Int experienceIn, Bool provideFeedback = TRUE );
6060
void setExperienceSink( ObjectID sink ); ///< My experience actually goes to this person (loose couple)
61+
ObjectID getExperienceSink() const;
6162

6263
Real getExperienceScalar() const { return m_experienceScalar; }
6364
void setExperienceScalar( Real scalar ) { m_experienceScalar = scalar; }

Generals/Code/GameEngine/Source/GameLogic/Object/ExperienceTracker.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@ void ExperienceTracker::setExperienceSink( ObjectID sink )
8080
m_experienceSink = sink;
8181
}
8282

83+
//-------------------------------------------------------------------------------------------------
84+
ObjectID ExperienceTracker::getExperienceSink() const
85+
{
86+
return m_experienceSink;
87+
}
88+
8389
//-------------------------------------------------------------------------------------------------
8490
// Set Level to AT LEAST this... if we are already >= this level, do nothing.
8591
void ExperienceTracker::setMinVeterancyLevel( VeterancyLevel newLevel, Bool provideFeedback )

Generals/Code/GameEngine/Source/GameLogic/Object/ObjectCreationList.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1333,6 +1333,11 @@ class GenericObjectCreationNugget : public ObjectCreationNugget
13331333
}
13341334
}
13351335

1336+
#if !RETAIL_COMPATIBLE_CRC && !RETAIL_COMPATIBLE_BUG
1337+
ObjectID sinkID = sourceObj->getExperienceTracker()->getExperienceSink();
1338+
firstObject->getExperienceTracker()->setExperienceSink(sinkID != INVALID_ID ? sinkID : sourceObj->getID());
1339+
#endif
1340+
13361341
if (container)
13371342
doStuffToObj( container, AsciiString::TheEmptyString, pos, mtx, orientation, sourceObj, lifetimeFrames );
13381343

GeneralsMD/Code/GameEngine/Include/GameLogic/ExperienceTracker.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class ExperienceTracker : public MemoryPoolObject, public Snapshot
5858
Bool canGainExpForLevel(Int levelsToGain) const; ///< return same value as gainExpForLevel, but don't change anything
5959
void setExperienceAndLevel(Int experienceIn, Bool provideFeedback = TRUE );
6060
void setExperienceSink( ObjectID sink ); ///< My experience actually goes to this person (loose couple)
61+
ObjectID getExperienceSink() const;
6162

6263
Real getExperienceScalar() const { return m_experienceScalar; }
6364
void setExperienceScalar( Real scalar ) { m_experienceScalar = scalar; }

GeneralsMD/Code/GameEngine/Source/GameLogic/Object/ExperienceTracker.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@ void ExperienceTracker::setExperienceSink( ObjectID sink )
8080
m_experienceSink = sink;
8181
}
8282

83+
//-------------------------------------------------------------------------------------------------
84+
ObjectID ExperienceTracker::getExperienceSink() const
85+
{
86+
return m_experienceSink;
87+
}
88+
8389
//-------------------------------------------------------------------------------------------------
8490
// Set Level to AT LEAST this... if we are already >= this level, do nothing.
8591
void ExperienceTracker::setMinVeterancyLevel( VeterancyLevel newLevel, Bool provideFeedback )

GeneralsMD/Code/GameEngine/Source/GameLogic/Object/ObjectCreationList.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1421,6 +1421,11 @@ class GenericObjectCreationNugget : public ObjectCreationNugget
14211421
}
14221422
}
14231423

1424+
#if !RETAIL_COMPATIBLE_CRC && !RETAIL_COMPATIBLE_BUG
1425+
ObjectID sinkID = sourceObj->getExperienceTracker()->getExperienceSink();
1426+
firstObject->getExperienceTracker()->setExperienceSink(sinkID != INVALID_ID ? sinkID : sourceObj->getID());
1427+
#endif
1428+
14241429
if (container)
14251430
doStuffToObj( container, AsciiString::TheEmptyString, pos, mtx, orientation, sourceObj, lifetimeFrames );
14261431

0 commit comments

Comments
 (0)