def add_effect(effector, thing, effect): """Apply an effect to a thing.""" with mutate_key("effect_%s" % thing._fullname, type_=list) as effects: effects.append((effector._id, effect)) state_changes("effects")["add"][thing._fullname].append(effect) if thing._fullname == c.user._fullname: state_changes("myeffects")["add"].append(g.f2pitems[effect])
def remove_effect(thing, effect): with mutate_key("effect_%s" % thing._fullname, type_=list) as effects: try: effects.remove(effect) except ValueError: pass state_changes("effects")["remove"][thing._fullname].append(effect) if thing._fullname == c.user._fullname: state_changes("myeffects")["consume"].append(effect)
def consume_item(user, item): """Consume an item in the user's inventory or die trying.""" with mutate_key("inventory_%d" % user._id, type_=dict) as inventory: if item not in inventory: raise NoSuchItemError() inventory[item] -= 1 assert inventory[item] >= 0 if inventory[item] == 0: del inventory[item] state_changes("inventory")["consume"].append(item)
def clear_inventory(user): with mutate_key("inventory_%d" % user._id, type_=dict) as inventory: state_changes("inventory")["consume"].extend( _expand_inventory(inventory)) inventory.clear()
def add_to_inventory(user, item): """Add a given item-name to the user's inventory.""" with mutate_key("inventory_%d" % user._id, type_=dict) as inventory: inventory[item] = inventory.get(item, 0) + 1 state_changes("inventory")["add"].append(g.f2pitems[item])
def clear_effects(thing): with mutate_key("effect_%s" % thing._fullname, type_=list) as effects: state_changes("effects")["remove"][thing._fullname].extend(effects) if thing._fullname == c.user._fullname: state_changes("myeffects")["consume"].extend(effects) del effects[:]