Subject: Required hours to stop hoarders. PLEASE VOTEgrep wrote:
I got linked to this thread and thought I'd stir the pot with some suggestions. This is how I would begin to approach the issue:
Add a 2x33-element array to each rare item. This array is a "hoarding factor" for each race, alignment, and class ranging from 0 (not hoarding) to whatever you want to cap the variable at. Defaulting this value to zero for items would be good if you don't already define an item as rare somehow. hoarding_factor["human"] and so on. Write this in terms of a public class function such as hoarding_factor("human") if you want to make the code more tough, since I'm guessing this is still C-ish stuff we're talking about here; you can allow only certain types of builders to alter hoarding factors on items, perhaps, which might be advantageous for the needs of builders.
Add an integer to each item representing a new, hoarding decay timer. It could have a default or be customizable to suit a builder's taste.
At a certain interval, run a function: Look up the hoarding factor of an item for the race, alignment, and class of the character holding it. Perform a disjunction operation (logical OR) on these three integers. The result is only false if the character's possession is not defined as "hoarding" by the builder who made the item (0 or 0 or 0). The result is true if ANY definitions of "hoarding" are true. ("If hoarding[race] or hoarding[class] or hoarding[alignment] then run hoarding penalty.")
Add a hoarding penalty function. Take either the max or combination of a character's different hoarding rates for an item based on true race, class, and alignment. Subtract this result from the hoarding decay timer. If the timer runs out, the item rots or is flagged for logout theft or simply vanishes without letting the character know until he or she looks for it.
Once that's done, each item now has an automatic and flexible system to allow anyone to have the item, but there are now risks and costs to holding something you really should not. It aligns with the item level enforcement code in this sense. Combined with a modest requirement for online presence, the most heinous and incendiary types of hoarding would be rendered impractical with no perceived impact to what is considered fair play for these items. There would be no one requirement for people to discover and work against; the landscape is as dynamic as builders want it to be.
Furthermore, if you wanted a long-term way to get at the real problem, add two variables to a character's pfile: effective hoarding and lifetime hoarding. Every time a hoarding timer decays, add the decay to both variables. You now have the ability to sort SK players by hoarding history and do whatever you want with that data, such as penalizing loyalty tokens or having rare items zap characters who have a hoarding factor for themselves until they have their effective hoarding removed by an administrator, while the lifetime hoarding still allows the information to stay on file.
If you wanted this to be leaner you could calculate a character's hoarding factor on an item whenever it enters his or her inventory and store it on the item to save on calculations each tick, but you might invite curious functionalities with that depending on the current status of inventory management code.
If you wanted this to be harsher you could add hoarding factors for just about anything, such as whether the item is being worn, has been used recently (if you have that recorded by items presently), and so on. That's a matter of scope.
If you had the time, adding a log of rare item movements would allow you to cross-check a character's pfile to judge whether or not someone was avoiding this system by, for example, continually stashing items during their attempts to reach a minimum monthly online time. Or, from another perspective, if an item is "away from home," but not held by anyone, allow its timer to drop without penalizing anyone in particular. The item still loses potency and, perhaps, the practice becomes just as impractical.
The only potential challenge to this would be certain items that "morph" into different items by destroying and creating items anew. I don't know how it works in detail so I won't presume to have ideas on solutions to it.