Create a currency system of coins
Each character can have a coin purse with gold coins. Granted, the purse defaults to a pouch.
This commit is contained in:
parent
028d1ff631
commit
e654a46137
5 changed files with 105 additions and 8 deletions
|
|
@ -23,6 +23,7 @@ from commands.sittables import CmdNoSitStand
|
||||||
from commands.everyone import CmdTake, CmdThink, CmdSay, CmdWhisper, CmdRead, CmdEat, CmdDrink
|
from commands.everyone import CmdTake, CmdThink, CmdSay, CmdWhisper, CmdRead, CmdEat, CmdDrink
|
||||||
from commands.wizards import CmdGM, CmdSpell, CmdGMTrigger, CmdMakeCocktail
|
from commands.wizards import CmdGM, CmdSpell, CmdGMTrigger, CmdMakeCocktail
|
||||||
|
|
||||||
|
|
||||||
class CharacterCmdSet(default_cmds.CharacterCmdSet):
|
class CharacterCmdSet(default_cmds.CharacterCmdSet):
|
||||||
"""
|
"""
|
||||||
The `CharacterCmdSet` contains general in-game commands like `look`,
|
The `CharacterCmdSet` contains general in-game commands like `look`,
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,6 @@ class CmdThrow(Command):
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
throw [ object ]
|
throw [ object ]
|
||||||
|
|
||||||
"""
|
"""
|
||||||
key = "throw"
|
key = "throw"
|
||||||
locks = "holds(stick)"
|
locks = "holds(stick)"
|
||||||
|
|
@ -195,7 +194,8 @@ class CmdSetCat(CmdSet):
|
||||||
|
|
||||||
|
|
||||||
class CmdOctopus(Command):
|
class CmdOctopus(Command):
|
||||||
"""Have your octopus do some antics.
|
"""
|
||||||
|
Have your octopus do some antics.
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,11 +11,11 @@ creation commands.
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from re import match, compile, sub
|
from re import match, compile, sub
|
||||||
|
|
||||||
|
from evennia.commands.command import InterruptCommand
|
||||||
from evennia.contrib.game_systems.gendersub import GenderCharacter
|
from evennia.contrib.game_systems.gendersub import GenderCharacter
|
||||||
from evennia.contrib.rpg.rpsystem import ContribRPCharacter
|
from evennia.contrib.rpg.rpsystem import ContribRPCharacter, send_emote
|
||||||
from evennia.contrib.rpg.rpsystem import send_emote
|
|
||||||
from evennia.prototypes.spawner import spawn
|
from evennia.prototypes.spawner import spawn
|
||||||
from evennia.utils import delay, logger
|
from evennia.utils import delay, logger, int2str
|
||||||
|
|
||||||
from utils.word_list import routput, choices
|
from utils.word_list import routput, choices
|
||||||
from .objects import Object
|
from .objects import Object
|
||||||
|
|
@ -69,6 +69,7 @@ class Character(Object, GenderCharacter, ContribRPCharacter):
|
||||||
if self.dbref != "#1" and not self.is_typeclass('typeclasses.puppets.Puppet'):
|
if self.dbref != "#1" and not self.is_typeclass('typeclasses.puppets.Puppet'):
|
||||||
self.create_letter()
|
self.create_letter()
|
||||||
self.create_ticket()
|
self.create_ticket()
|
||||||
|
self.create_pouch()
|
||||||
|
|
||||||
def delete_inv(self, typeclass):
|
def delete_inv(self, typeclass):
|
||||||
for obj in self.contents:
|
for obj in self.contents:
|
||||||
|
|
@ -125,6 +126,49 @@ class Character(Object, GenderCharacter, ContribRPCharacter):
|
||||||
text = (capitalize_line(text[0]), text[1])
|
text = (capitalize_line(text[0]), text[1])
|
||||||
super().msg(text, from_obj=from_obj, session=session, **kwargs)
|
super().msg(text, from_obj=from_obj, session=session, **kwargs)
|
||||||
|
|
||||||
|
def create_pouch(self, name="pouch", desc="leather pouch", giver=None):
|
||||||
|
"""
|
||||||
|
Create a leather pouch of coins.
|
||||||
|
|
||||||
|
Fill it with ten gold coins, so they can play the games.
|
||||||
|
"""
|
||||||
|
pouch = spawn({
|
||||||
|
"typeclass": "typeclasses.things.CoinPurse",
|
||||||
|
"key": name,
|
||||||
|
"desc": f"A {desc} containing coins.",
|
||||||
|
})[0]
|
||||||
|
pouch.db.gold_amount = 10
|
||||||
|
pouch.location = self
|
||||||
|
|
||||||
|
if giver:
|
||||||
|
self.announce_action(f"The {giver.get_display_name(self)} tosses a {desc} to $you().")
|
||||||
|
self.msg(f"You now have a {name} with {int2str(pouch.db.gold_amount)} coins.")
|
||||||
|
|
||||||
|
def get_pouch(self):
|
||||||
|
"""
|
||||||
|
Return a pouch object.
|
||||||
|
|
||||||
|
Throws InterruptCommand exception if the character has
|
||||||
|
no pouch, and therefore, no money.
|
||||||
|
"""
|
||||||
|
pouches = self.search("", location=self, quiet=True,
|
||||||
|
typeclass="typeclasses.things.CoinPurse")
|
||||||
|
if pouches:
|
||||||
|
return pouches[0]
|
||||||
|
raise InterruptCommand("No coin purse")
|
||||||
|
|
||||||
|
def how_many_coins(self):
|
||||||
|
"Return the amount of money in the coin purse."
|
||||||
|
self.get_pouch().how_much()
|
||||||
|
|
||||||
|
def adjust_coins(self, amount):
|
||||||
|
"Increase or decrease the amount of money in the coin purse."
|
||||||
|
self.get_pouch().adjust_amount(amount)
|
||||||
|
|
||||||
|
def has_coins(self, at_least=1):
|
||||||
|
"Return True if character has 'at_least' that many coins."
|
||||||
|
return self.get_pouch().has_amount(at_least)
|
||||||
|
|
||||||
def create_letter(self):
|
def create_letter(self):
|
||||||
"create a welcome letter in a character's inventory"
|
"create a welcome letter in a character's inventory"
|
||||||
letter = spawn({
|
letter = spawn({
|
||||||
|
|
@ -391,3 +435,7 @@ class Character(Object, GenderCharacter, ContribRPCharacter):
|
||||||
if len(inv_items) > 0:
|
if len(inv_items) > 0:
|
||||||
return inv_items
|
return inv_items
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# jinx-local-words: "Marsivan"
|
||||||
|
# End:
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,8 @@ with a location in the game world (like Characters, Rooms, Exits).
|
||||||
|
|
||||||
from re import split, match
|
from re import split, match
|
||||||
|
|
||||||
# from evennia.objects.objects import DefaultObject
|
|
||||||
from evennia.contrib.rpg.rpsystem.rpsystem import ContribRPObject
|
from evennia.contrib.rpg.rpsystem.rpsystem import ContribRPObject
|
||||||
from evennia.utils import delay, logger
|
from evennia.utils import delay, logger
|
||||||
# from evennia.utils import delay, logger, search
|
|
||||||
|
|
||||||
from utils.word_list import routput
|
from utils.word_list import routput
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,9 @@ from random import choice, random, randint
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
from evennia import create_script
|
from evennia import create_script
|
||||||
|
from evennia.commands.command import InterruptCommand
|
||||||
from evennia.prototypes.spawner import spawn
|
from evennia.prototypes.spawner import spawn
|
||||||
from evennia.utils import logger, delay
|
from evennia.utils import logger, delay, iter_to_str, int2str
|
||||||
|
|
||||||
from commands.misc import (CmdSetPuddle,
|
from commands.misc import (CmdSetPuddle,
|
||||||
CmdSetStick,
|
CmdSetStick,
|
||||||
|
|
@ -21,6 +22,54 @@ from .objects import Object
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
class CoinPurse(Object):
|
||||||
|
"""
|
||||||
|
A pouch containing the character coins.
|
||||||
|
|
||||||
|
Only the player can see how many coins it contains.
|
||||||
|
"""
|
||||||
|
def at_object_creation(self):
|
||||||
|
"""
|
||||||
|
Set the initial number of coins.
|
||||||
|
"""
|
||||||
|
self.db.gold_amount = 10
|
||||||
|
|
||||||
|
def return_appearance(self, looker, **kwargs):
|
||||||
|
"""
|
||||||
|
Return description based on the 'looker'.
|
||||||
|
"""
|
||||||
|
if self.location == looker:
|
||||||
|
if self.has_amount(1):
|
||||||
|
return f"Contains {int2str(self.db.gold_amount)} gold coins."
|
||||||
|
return "It is empty."
|
||||||
|
return "Probably containing coins."
|
||||||
|
|
||||||
|
def how_much(self):
|
||||||
|
"""
|
||||||
|
Return the amount of gold coins in the purse.
|
||||||
|
"""
|
||||||
|
return self.db.gold_amount or 0
|
||||||
|
|
||||||
|
def adjust_amount(self, amount):
|
||||||
|
"""
|
||||||
|
Change the amount of gold in the purse.
|
||||||
|
The 'amount' can be a negative number.
|
||||||
|
"""
|
||||||
|
owner = self.location
|
||||||
|
if self.how_much() + amount < 0:
|
||||||
|
raise InterruptCommand("Not enough coins")
|
||||||
|
|
||||||
|
self.db.gold_amount = self.how_much() + amount
|
||||||
|
if self.how_much() == 1:
|
||||||
|
owner.msg("You now have one gold coin.")
|
||||||
|
else:
|
||||||
|
owner.msg(f"You now have {int2str(self.how_much())} gold coins.")
|
||||||
|
|
||||||
|
def has_amount(self, at_least):
|
||||||
|
"""Return True is pouch has 'at_least' amount of coins."""
|
||||||
|
return self.how_much() >= at_least
|
||||||
|
|
||||||
|
|
||||||
class Trinket(Object):
|
class Trinket(Object):
|
||||||
"""
|
"""
|
||||||
For instance:
|
For instance:
|
||||||
|
|
@ -94,6 +143,7 @@ class CrystalBall(Object):
|
||||||
"Very doubtful",
|
"Very doubtful",
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
class Ring(Object):
|
class Ring(Object):
|
||||||
def move_to(self, destination, **kwargs):
|
def move_to(self, destination, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue