Exemplo n.º 1
0
def Quest(exd_manager):
    data = exd_manager.get_category('Quest').get_data()
    data_ln = data[list(data.keys())[0]]
    data_return = {}

    for id, v in data_ln.items():
        data_return[id] = {
            'name': string(data, id, 0),
        }

        # if quest data
        if v[981] != b'':
            quest_base_exd_name = v[981].decode('utf-8')
            quest_exd_name = 'quest/%s/%s' % (quest_base_exd_name[10:13], quest_base_exd_name)
            quest_exd_data = exd_manager.get_category(quest_exd_name).get_data()
            quest_exd_data_ln = quest_exd_data[list(quest_exd_data.keys())[0]]
            data_return[id].update({
                'text_data': {
                    quest_exd_data_ln[quest_exd_id][0].decode('utf-8'): {
                        'enable_conditions': False,
                        'type': 'string',
                        'ln': {
                            get_language_name(language): quest_exd_data[language][quest_exd_id][1] for language in quest_exd_data.keys()
                        }
                    } for quest_exd_id in sorted(quest_exd_data_ln.keys())
                }
            })

    return data_return
Exemplo n.º 2
0
 def _extract_data(self):
     header = self.get_header()
     self._data = {}
     for language in header.languages:
         if is_language_valid(language):
             language_name = get_language_name(language)
             if language_name != '':
                 language_name = '_%s' % language_name
             self._data[language] = {}
             for exd_file in header.exds:
                 language_name = get_language_name(language)
                 if language_name != '':
                     language_name = '_%s' % language_name
                 self._data[language].update(extract_data(
                         self._dat_manager.get_file(Category.EXD_NAME % (self._name, exd_file, language_name)),
                         header))
Exemplo n.º 3
0
def string(data, id, member_id, enable_conditions = False):
    return {
        'enable_conditions': enable_conditions,
        'type': 'string',
        'ln': {
            get_language_name(language): data[language][id][member_id] for language in data.keys()
        }
    }
Exemplo n.º 4
0
def extract_exd(args, conf):
    dat_manager = DatManager(conf.get('game', 'path'))
    exd_manager = ExdManager(dat_manager)

    output_path = path.join(conf.get('output', 'path'), 'exd')

    for category_name in exd_manager.get_categories():
        data = exd_manager.get_category(category_name).get_csv()
        for language, csv in data.items():
            output_file_path = path.join(
                output_path,
                'exd/%s_%s.exd' % (category_name, get_language_name(language)))

            if not path.exists(path.dirname(output_file_path)):
                makedirs(path.dirname(output_file_path))

            with open(output_file_path, 'w') as file_handle:
                for line in csv:
                    file_handle.write(line)
                    file_handle.write('\n')
Exemplo n.º 5
0
def quests(exd_manager):
    print('quests')
    data = exd_manager.get_category('Quest').get_data()
    data_ln = data[list(data.keys())[0]]
    return_dict = {}

    param_grow_data = exd_manager.get_category('ParamGrow').get_data()
    param_grow_data_ln = param_grow_data[list(param_grow_data.keys())[0]]

    complete_journal_data = exd_manager.get_category('CompleteJournal').get_data()
    complete_journal_data_in = complete_journal_data[list(complete_journal_data.keys())[0]]

    complete_journal_search_dict = {
        cj_data[0]: cj_id for cj_id, cj_data in complete_journal_data_in.items()
    }


    for id, v in data_ln.items():
        print('quests (loop)', id)
        return_dict[id] = {
            'name':                 string(data, id, 0),

            'vars':                 [[v[i].decode('utf-8'), v[i+1]] for i in range(1, 51, 2)],

            #'structs':              [v[i:i+15] for i in range(116, 1048, 15)],

            'gil_reward':           v[917],

            'main_rewards':         [mat(v[i], v[i+24]) for i in range(918, 921)],
            'optional_rewards':     [mat(v[i], v[i+31]) for i in range(924, 929)],

            'base_exp':             v[932],

            'prerequisit_quests':   [ref('quests', v[i]) for i in range(982, 985)],

            'start':                v[990],
            'end':                  v[991],
            'banner':               v[992],

            #'level':                (v[985] if v[985] != 0xFFFF else 0) + v[993],
            'level':                v[995],

            'class_job':            ref('class_jobs', v[1022]),
            'genre':                v[1024],



 #          'name':                 string(data, id, 0),
 #
 #          'level':                (v[1165] if v[1165] != 0xFFFF else 0) + v[1170],
 #
 #          'class':                v[1176],
 #
 #          'chain_quests':         [ref('quests', v[i]) for i in range(1157, 1160)],
 #
 #          'steps':                quest_steps([v[i] for i in range(1, 100, 2)], [v[i] for i in range(2, 101, 2)]),
 #
 #          'base_exp':             v[1124],
 #          'gil_reward':           v[1109],
 #
 #          'main_rewards':         [mat(v[i], v[i+3]) for i in range(1127, 1130)]
 #                                  + [mat(v[i], v[i+23]) for i in range(1110, 1113)],
 #
 #          'optional_rewards':     [mat(v[i], v[i+32]) for i in range(1113, 1118)],
        }

        # If exp_reward breaks, ensure the level and the base_exp are correct,
        # also some entries might have values which mean other things because
        # SE is stupid, so the below print will show values way to high, such
        # as a level being massively over 50.
        print("key", id);
        print("level", return_dict[id]['level']);
        print("base_exp", return_dict[id]['base_exp']);

        # If the level is above 50, we will just reset it..
        if return_dict[id]['level'] > 50:
            return_dict[id].update({ 'level': 50 })


        return_dict[id].update({
            'exp_reward': (return_dict[id]['base_exp'] *
                (param_grow_data_ln[return_dict[id]['level']][13] * (45 + 5 * return_dict[id]['level']))) // 100
        })
 #
 #      #Lookup complete journal by name and extract genre id (v[4])
 #      if complete_journal_data_in[complete_journal_search_dict[v[0]]][2] <= 49: #TEMP FIX UNTIL SE FIXES THEIR SHIT
 #          return_dict[id].update({
 #              'quest_genre': ref('journal_genre', complete_journal_data_in[complete_journal_search_dict[v[0]]][2])
 #          })
 #
 #      #Check second class column if first one is empty SERIOUSLY SE FIX YOUR SHIT
 #      if v[1176] == 0:
 #          return_dict[id].update({
 #              'class': v[1179]
 #          })
 #
        if v[981] != b'':
            quest_base_exd_name = v[981].decode('utf-8')
            quest_exd_name = 'quest/%s/%s' % (quest_base_exd_name[10:13], quest_base_exd_name)
            quest_exd_data = exd_manager.get_category(quest_exd_name).get_data()
            quest_exd_data_ln = quest_exd_data[list(quest_exd_data.keys())[0]]
            return_dict[id].update({
                'texts': {
                    quest_exd_data_ln[quest_exd_id][0].decode('utf-8'): {
                        'enable_conditions': False,
                        'type': 'string',
                        'ln': {
                            get_language_name(language): quest_exd_data[language][quest_exd_id][1] for language in quest_exd_data.keys()
                        }
                    } for quest_exd_id in sorted(quest_exd_data_ln.keys())
                }
            })

    return return_dict