mirror of
https://github.com/evennia/evennia.git
synced 2026-03-16 21:06:30 +01:00
65 lines
2.2 KiB
Markdown
65 lines
2.2 KiB
Markdown
|
|
# Cooldown contrib module.
|
||
|
|
|
||
|
|
Evennia contrib - owllex, 2021
|
||
|
|
|
||
|
|
This contrib provides a simple cooldown handler that can be attached to any
|
||
|
|
typeclassed Object or Account. A cooldown is a lightweight persistent
|
||
|
|
asynchronous timer that you can query to see if it is ready.
|
||
|
|
|
||
|
|
Cooldowns are good for modelling rate-limited actions, like how often a
|
||
|
|
character can perform a given command.
|
||
|
|
|
||
|
|
Cooldowns are completely asynchronous and must be queried to know their
|
||
|
|
state. They do not fire callbacks, so are not a good fit for use cases
|
||
|
|
where something needs to happen on a specific schedule (use delay or
|
||
|
|
a TickerHandler for that instead).
|
||
|
|
|
||
|
|
See also the evennia documentation for command cooldowns
|
||
|
|
(https://github.com/evennia/evennia/wiki/Command-Cooldown) for more information
|
||
|
|
about the concept.
|
||
|
|
|
||
|
|
## Installation
|
||
|
|
|
||
|
|
To use, simply add the following property to the typeclass definition of any
|
||
|
|
object type that you want to support cooldowns. It will expose a new `cooldowns`
|
||
|
|
property that persists data to the object's attribute storage. You can set this
|
||
|
|
on your base `Object` typeclass to enable cooldown tracking on every kind of
|
||
|
|
object, or just put it on your `Character` typeclass.
|
||
|
|
|
||
|
|
By default the CooldownHandler will use the `cooldowns` property, but you can
|
||
|
|
customize this if desired by passing a different value for the `db_attribute`
|
||
|
|
parameter.
|
||
|
|
|
||
|
|
```python
|
||
|
|
from evennia.game_systems.contrib.cooldowns import Cooldownhandler
|
||
|
|
from evennia.utils.utils import lazy_property
|
||
|
|
|
||
|
|
@lazy_property
|
||
|
|
def cooldowns(self):
|
||
|
|
return CooldownHandler(self, db_attribute="cooldowns")
|
||
|
|
```
|
||
|
|
|
||
|
|
# Example
|
||
|
|
|
||
|
|
Assuming you've installed cooldowns on your Character typeclasses, you can use a
|
||
|
|
cooldown to limit how often you can perform a command. The following code
|
||
|
|
snippet will limit the use of a Power Attack command to once every 10 seconds
|
||
|
|
per character.
|
||
|
|
|
||
|
|
```python
|
||
|
|
class PowerAttack(Command):
|
||
|
|
def func(self):
|
||
|
|
if self.caller.cooldowns.ready("power attack"):
|
||
|
|
self.do_power_attack()
|
||
|
|
self.caller.cooldowns.add("power attack", 10)
|
||
|
|
else:
|
||
|
|
self.caller.msg("That's not ready yet!")
|
||
|
|
|
||
|
|
```
|
||
|
|
|
||
|
|
|
||
|
|
----
|
||
|
|
|
||
|
|
<small>This document page is generated from `evennia/contrib/game_systems/cooldowns/README.md`. Changes to this
|
||
|
|
file will be overwritten, so edit that file rather than this one.</small>
|