SHOW:
|
|
- or go back to the newest paste.
1 | class Item: | |
2 | # stuff.... | |
3 | ||
4 | def save(self, is_equipped: bool=False, in_inventory: bool=False, player_name: str=None): | |
5 | if not self.instance_id: | |
6 | raise ValueError('An instance_id is required to save an instance of an Item!') | |
7 | ||
8 | if player_name is None: | |
9 | os.makedirs(settings.INSTANCE_DIR, 0o755, True) | |
10 | filename = os.path.join(settings.INSTANCE_DIR, '%d.json' % self.instance_id) | |
11 | else: | |
12 | pathname = os.path.join(settings.PLAYER_DIR, player_name[0].capitalize()) | |
13 | os.makedirs(pathname, 0o755, True) | |
14 | - | filename = os.path.join(pathname, '%s.json' % player_name.capitalize()) |
14 | + | filename = os.path.join(pathname, '%s.json' % player_name.capitalize(), '%d.json' % instance_id) |
15 | ||
16 | js = self.to_json(outer_encoder=instance.to_json) | |
17 | with open(filename, 'w') as fp: | |
18 | fp.write(js) | |
19 | ||
20 | if self.inventory: | |
21 | for k in self.inventory: | |
22 | k.save(is_equipped, in_inventory, player_name) | |
23 | ||
24 | ||
25 | @classmethod | |
26 | def load(cls, instance_id: int=None, vnum: int=None, player_name: str=None): | |
27 | if vnum: | |
28 | raise TypeError('Template loading is not yet supported!') | |
29 | ||
30 | if not instance_id: | |
31 | raise ValueError('An instance_id is required to load an instance of an Item!') | |
32 | ||
33 | if player_name is None: | |
34 | filename = os.path.join(settings.INSTANCE_DIR, '%d.json' % self.instance_id) | |
35 | else: | |
36 | pathname = os.path.join(settings.PLAYER_DIR, player_name[0].capitalize()) | |
37 | - | for a_path,_,a_file in os.walk(pathname): |
37 | + | target_filename = '%d.json' % instance_id |
38 | - | if str(instance_id) in a_file: |
38 | + | for a_path,_,file_list in os.walk(pathname): |
39 | - | filename = os.path.join(a_path, '%s.json' % player_name.capitalize()) |
39 | + | if target_filename in file_list: |
40 | filename = os.path.join(a_path, target_filename) | |
41 | break | |
42 | ||
43 | with open(filename) as fp: | |
44 | js = fp.read() | |
45 | obj = Item.from_json(js, outer_encoder=instance.from_json) | |
46 | obj.load_inventory(player_name) | |
47 | return obj | |
48 | ||
49 | def load_inventory(self, player_name: str=None): | |
50 | obj_list = [] | |
51 | for instance_id in self.inventory: | |
52 | obj = Item.load(instance_id=instance_id, player_name=player_name) | |
53 | if not isinstance(obj, 'Item'): | |
54 | raise TypeError('Could not load instance %r!' % instance_id) | |
55 | ||
56 | obj.load_inventory(player_name) | |
57 | obj_list += obj | |
58 | return obj_list |