mirror of
				https://github.com/DarkflameUniverse/DarkflameServer.git
				synced 2025-11-04 06:32:00 +00:00 
			
		
		
		
	Fix: Double imaginite issue resolved on mini survival games (#1801)
* Add checkcost as replacement for just inventory checks * Create headers for cost methods * clean comments
This commit is contained in:
		@@ -334,7 +334,7 @@ bool ActivityComponent::IsPlayedBy(LWOOBJID playerID) const {
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ActivityComponent::TakeCost(Entity* player) const {
 | 
			
		||||
bool ActivityComponent::CheckCost(Entity* player) const {
 | 
			
		||||
	if (m_ActivityInfo.optionalCostLOT <= 0 || m_ActivityInfo.optionalCostCount <= 0)
 | 
			
		||||
		return true;
 | 
			
		||||
 | 
			
		||||
@@ -345,11 +345,19 @@ bool ActivityComponent::TakeCost(Entity* player) const {
 | 
			
		||||
	if (inventoryComponent->GetLotCount(m_ActivityInfo.optionalCostLOT) < m_ActivityInfo.optionalCostCount)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	inventoryComponent->RemoveItem(m_ActivityInfo.optionalCostLOT, m_ActivityInfo.optionalCostCount);
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ActivityComponent::TakeCost(Entity* player) const{
 | 
			
		||||
	
 | 
			
		||||
	auto* inventoryComponent = player->GetComponent<InventoryComponent>();
 | 
			
		||||
	if (CheckCost(player)) {
 | 
			
		||||
		inventoryComponent->RemoveItem(m_ActivityInfo.optionalCostLOT, m_ActivityInfo.optionalCostCount);
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
	else return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ActivityComponent::PlayerReady(Entity* player, bool bReady) {
 | 
			
		||||
	for (Lobby* lobby : m_Queue) {
 | 
			
		||||
		for (LobbyPlayer* lobbyPlayer : lobby->players) {
 | 
			
		||||
@@ -382,7 +390,7 @@ ActivityInstance* ActivityComponent::NewInstance() {
 | 
			
		||||
void ActivityComponent::LoadPlayersIntoInstance(ActivityInstance* instance, const std::vector<LobbyPlayer*>& lobby) const {
 | 
			
		||||
	for (LobbyPlayer* player : lobby) {
 | 
			
		||||
		auto* entity = player->GetEntity();
 | 
			
		||||
		if (entity == nullptr || !TakeCost(entity)) {
 | 
			
		||||
		if (entity == nullptr || !CheckCost(entity)) {
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -234,10 +234,17 @@ public:
 | 
			
		||||
	 */
 | 
			
		||||
	bool IsPlayedBy(LWOOBJID playerID) const;
 | 
			
		||||
 | 
			
		||||
	/** 
 | 
			
		||||
	 * Checks if the entity has enough cost to play this activity
 | 
			
		||||
	 * @param player the entity to check
 | 
			
		||||
	 * @return true if the entity has enough cost to play this activity, false otherwise
 | 
			
		||||
	*/
 | 
			
		||||
	bool CheckCost(Entity* player) const;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Removes the cost of the activity (e.g. green imaginate) for the entity that plays this activity
 | 
			
		||||
	 * @param player the entity to take cost for
 | 
			
		||||
	 * @return true if the cost was successfully deducted, false otherwise
 | 
			
		||||
	 * @return true if the cost was taken, false otherwise
 | 
			
		||||
	 */
 | 
			
		||||
	bool TakeCost(Entity* player) const;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user