mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-10-02 10:53:44 +00:00
Property worlds now give their property reputation for the time other people spend on it, which fills the property lists and the news screen's Today's Top Properties. Visitors are counted per account; the owner's account, accounts linked to it and staff don't count. A visit earns nothing for the first property_reputation_min_visit seconds (WorldConfig's propertyReputationDelay), then each active minute (the visitor moved) earns reputationPerMinute times a multiplier, for a capped number of minutes per visit. Repeat visitors earn less the more recent days they already gave reputation, and each visitor and each property have a daily cap. Every parameter is a setting; what each account gave each property per day is kept in property_reputation_visits. The rules are pure functions with unit tests. Fixes #636 Fixes #637 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
33 lines
1.2 KiB
C++
33 lines
1.2 KiB
C++
#ifndef __IPROPERTYREPUTATION__H__
|
|
#define __IPROPERTYREPUTATION__H__
|
|
|
|
#include <cstdint>
|
|
|
|
#include "dCommonVars.h"
|
|
#include "json.hpp"
|
|
|
|
/**
|
|
* Property reputation (see dCommon/PropertyReputationRules.h): what visitors gave each property per day.
|
|
*/
|
|
class IPropertyReputation {
|
|
public:
|
|
struct VisitorHistory {
|
|
int64_t today{}; // points the account gave the property today
|
|
uint32_t previousDays{}; // other days in the window it gave the property any
|
|
};
|
|
|
|
// days: how many days before `day` count as recent
|
|
virtual VisitorHistory GetPropertyVisitorHistory(LWOOBJID propertyId, uint32_t accountId, uint32_t day, uint32_t days) = 0;
|
|
|
|
// Points the property got from everyone on a day
|
|
virtual int64_t GetPropertyReputationOnDay(LWOOBJID propertyId, uint32_t day) = 0;
|
|
|
|
// Add a visitor's points and time for a day, and the points to properties.reputation
|
|
virtual void AddPropertyReputation(LWOOBJID propertyId, uint32_t accountId, uint32_t day, int64_t points, int64_t seconds) = 0;
|
|
|
|
// For the property page: [{day, visitors, points, seconds}] of the last `days` days, newest first
|
|
virtual nlohmann::json GetPropertyReputationDays(LWOOBJID propertyId, uint32_t fromDay) = 0;
|
|
};
|
|
|
|
#endif //!__IPROPERTYREPUTATION__H__
|