mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-05-30 21:51:33 +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:
parent
32487dcd5f
commit
34665f6f5c
@ -334,7 +334,7 @@ bool ActivityComponent::IsPlayedBy(LWOOBJID playerID) const {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ActivityComponent::TakeCost(Entity* player) const {
|
bool ActivityComponent::CheckCost(Entity* player) const {
|
||||||
if (m_ActivityInfo.optionalCostLOT <= 0 || m_ActivityInfo.optionalCostCount <= 0)
|
if (m_ActivityInfo.optionalCostLOT <= 0 || m_ActivityInfo.optionalCostCount <= 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -345,11 +345,19 @@ bool ActivityComponent::TakeCost(Entity* player) const {
|
|||||||
if (inventoryComponent->GetLotCount(m_ActivityInfo.optionalCostLOT) < m_ActivityInfo.optionalCostCount)
|
if (inventoryComponent->GetLotCount(m_ActivityInfo.optionalCostLOT) < m_ActivityInfo.optionalCostCount)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
inventoryComponent->RemoveItem(m_ActivityInfo.optionalCostLOT, m_ActivityInfo.optionalCostCount);
|
|
||||||
|
|
||||||
return true;
|
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) {
|
void ActivityComponent::PlayerReady(Entity* player, bool bReady) {
|
||||||
for (Lobby* lobby : m_Queue) {
|
for (Lobby* lobby : m_Queue) {
|
||||||
for (LobbyPlayer* lobbyPlayer : lobby->players) {
|
for (LobbyPlayer* lobbyPlayer : lobby->players) {
|
||||||
@ -382,7 +390,7 @@ ActivityInstance* ActivityComponent::NewInstance() {
|
|||||||
void ActivityComponent::LoadPlayersIntoInstance(ActivityInstance* instance, const std::vector<LobbyPlayer*>& lobby) const {
|
void ActivityComponent::LoadPlayersIntoInstance(ActivityInstance* instance, const std::vector<LobbyPlayer*>& lobby) const {
|
||||||
for (LobbyPlayer* player : lobby) {
|
for (LobbyPlayer* player : lobby) {
|
||||||
auto* entity = player->GetEntity();
|
auto* entity = player->GetEntity();
|
||||||
if (entity == nullptr || !TakeCost(entity)) {
|
if (entity == nullptr || !CheckCost(entity)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,10 +234,17 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool IsPlayedBy(LWOOBJID playerID) const;
|
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
|
* 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
|
* @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;
|
bool TakeCost(Entity* player) const;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user