View difference between Paste ID: 2QcBst7k and s5bKDp0y
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