mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-11-14 07:47:13 +00:00
LWOPropertyVendorComponent::onCheckUseRequirements (0x00c2e210) lets a player use the property guard only when the level's property_required_mission (LoadConfigData 0x00c2e550) is finished. The server opened the vendor and rented the property on any request. The guard is now not opened without the mission, and a rent request without it is answered with PropertyRentalResponse code 9, which onPropertyRentalResponse (0x00c56d70) shows as "you failed to rent" with UGG_PROPRENT_Dont_have_achievement. A mission that was finished and is being repeated counts, as in the client's list of finished missions. A guard without the key asks for nothing. The six property maps name missions 768, 872, 873, 874, 1293 and 1322. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
50 lines
2.0 KiB
C++
50 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include "Entity.h"
|
|
#include "Component.h"
|
|
#include "eReplicaComponentType.h"
|
|
|
|
/**
|
|
* The property guard that stands on a property before it's claimed, allows entities to attempt claiming this property.
|
|
*/
|
|
class PropertyVendorComponent final : public Component {
|
|
public:
|
|
static constexpr eReplicaComponentType ComponentType = eReplicaComponentType::PROPERTY_VENDOR;
|
|
explicit PropertyVendorComponent(Entity* parent, const int32_t componentID);
|
|
|
|
/**
|
|
* Handles a use event from some entity, if the property is cleared this allows the entity to claim it
|
|
* @param originator the entity that triggered this event
|
|
*/
|
|
bool OnRequestUse(GameMessages::RequestUseEvent& event);
|
|
|
|
/**
|
|
* Handles a property data query after the property has been claimed, sending information about the property to the
|
|
* triggering entity.
|
|
* @param originator the entity that triggered the event
|
|
* @param sysAddr the system address to send game message response to
|
|
*/
|
|
void OnQueryPropertyData(Entity* originator, const SystemAddress& sysAddr);
|
|
|
|
/**
|
|
* Claims the property
|
|
* @param originator the entity that attempted to claim the property
|
|
* @param confirmed unused
|
|
* @param lot unused
|
|
* @param count unused
|
|
*/
|
|
void OnBuyFromVendor(Entity* originator, bool confirmed, LOT lot, uint32_t count);
|
|
|
|
// PropertyRentalResponse code the client shows as "you failed to rent" with UGG_PROPRENT_Dont_have_achievement
|
|
// (LWOPropertyVendorComponent::onPropertyRentalResponse 0x00c56d70; 0 is a rented property)
|
|
static constexpr uint32_t RENTAL_MISSING_ACHIEVEMENT = 9;
|
|
|
|
// The level's property_required_mission (LWOPropertyVendorComponent::LoadConfigData 0x00c2e550), 0 without one
|
|
uint32_t GetRequiredMission() const;
|
|
|
|
// Whether the player has finished the level's property_required_mission, which the client asks for before the
|
|
// vendor can be used (LWOPropertyVendorComponent::onCheckUseRequirements 0x00c2e210). A vendor without the key
|
|
// asks for nothing here.
|
|
bool MayRent(Entity& player) const;
|
|
};
|