def append_special_place_names(places): # handle special german casting names fishing_places = places["de"].keys() coin = coinach.CoinachReader() reader = csv.reader(coin.exd("PlaceName", lang="de")) next(reader) next(reader) next(reader) place_idx = 0 xml_idx = 9 for row in reader: place = int(row[place_idx]) if not place: continue if place not in fishing_places: continue m = re.search(r"<Case\(2\)>([^<]*)<\/Case>", row[xml_idx]) if not m: continue if isinstance(places["de"][place], list): places["de"][place].append(m.group(1)) else: places["de"][place] = [places["de"][place], m.group(1)]
def get_special_place_names(places): # handle special german casting names fishing_places = places['de'].keys() output = {} for locale in locales: output[locale] = {} coin = coinach.CoinachReader() reader = csv.reader(coin.exd('PlaceName', lang='de')) next(reader) next(reader) next(reader) place_idx = 0 xml_idx = 9 for row in reader: place = int(row[place_idx]) if not place: continue if place not in fishing_places: continue m = re.search(r'<Case\(2\)>([^<]*)<\/Case>', row[xml_idx]) if not m: continue output['de'][place] = m.group(1) return output
def get_from_coinach(): # TODO: make an arg parser for non-default paths reader = coinach.CoinachReader(verbose=True) writer = coinach.CoinachWriter(verbose=True) if FFXIV_PATH: reader.ffxiv_path = FFXIV_PATH monsters = update(reader, writer) if CN_FFXIV_PATH: reader.ffxiv_path = CN_FFXIV_PATH monsters = update_cn(reader, writer, monsters) all_monsters = {} for (k, v) in monsters.items(): all_monsters[v['name']['en']] = v writer.write(os.path.join('resources', _OUTPUT_FILE), os.path.basename(os.path.abspath(__file__)), 'gMonster', all_monsters)
def get_from_coinach(): reader = coinach.CoinachReader() monsters = {} update_coinach(monsters, reader) update_raw_csv(monsters, _BASE_GITHUB + _CN_GITHUB, 'cn') update_raw_csv(monsters, _BASE_GITHUB + _KO_GITHUB, 'ko') all_monsters = {} for (_, info) in monsters.items(): all_monsters[info['name']['en']] = info writer = coinach.CoinachWriter() writer.write( os.path.join('resources', _OUTPUT_FILE), os.path.basename(os.path.abspath(__file__)), 'gMonster', all_monsters)
def get_from_coinach(_ffxiv_game_path, _saint_conainch_cmd_path, _cactbot_path): reader = coinach.CoinachReader(coinach_path=_saint_conainch_cmd_path, ffxiv_path=_ffxiv_game_path) monsters = {} update_coinach(monsters, reader) update_raw_csv(monsters, "cn") update_raw_csv(monsters, "ko") all_monsters = {} for (_, info) in monsters.items(): all_monsters[info["name"]["en"]] = info writer = coinach.CoinachWriter(cactbot_path=_cactbot_path) header = """import { LocaleObject } from '../types/trigger'; type LocaleTextOrArray = LocaleObject<string | string[]>; export type Rank = 'S' | 'SS+' | 'SS-' | 'A' | 'B'; // Optional values are supported in `Options.CustomMonsters`. export type HuntEntry = { id: string; name: LocaleTextOrArray | string | string[]; rank?: Rank; regex?: RegExp; hp?: number; }; export type HuntMap = { [huntName: string]: HuntEntry; };""" writer.writeTypeScript( filename=os.path.join("resources", _OUTPUT_FILE), scriptname=os.path.basename(os.path.abspath(__file__)), header=header, type="HuntMap", as_const=False, data=all_monsters, ) print(f"File '{_OUTPUT_FILE}' successfully created.")
def get_from_coinach(_ffxiv_game_path, _saint_conainch_cmd_path, _cactbot_path): reader = coinach.CoinachReader( coinach_path=_saint_conainch_cmd_path, ffxiv_path=_ffxiv_game_path ) monsters = {} update_coinach(monsters, reader) update_raw_csv(monsters, _BASE_GITHUB + _CN_GITHUB, "cn") update_raw_csv(monsters, _BASE_GITHUB + _KO_GITHUB, "ko") all_monsters = {} for (_, info) in monsters.items(): all_monsters[info["name"]["en"]] = info writer = coinach.CoinachWriter(cactbot_path=_cactbot_path) writer.write( os.path.join("resources", _OUTPUT_FILE), os.path.basename(os.path.abspath(__file__)), "gMonster", all_monsters, ) print(f"File '{_OUTPUT_FILE}' successfully created.")
def get_from_coinach(_ffxiv_game_path, _saint_conainch_cmd_path, _cactbot_path): reader = coinach.CoinachReader(coinach_path=_saint_conainch_cmd_path, ffxiv_path=_ffxiv_game_path) monsters = {} update_coinach(monsters, reader) update_raw_csv(monsters, "cn") update_raw_csv(monsters, "ko") all_monsters = {} for (_, info) in monsters.items(): all_monsters[info["name"]["en"]] = info writer = coinach.CoinachWriter(cactbot_path=_cactbot_path) header = """import { LocaleObject } from '../types/trigger'; type LocaleTextOrArray = LocaleObject<string | string[]>; type HuntData = { [huntName: string]: { readonly id: string; readonly name: LocaleTextOrArray; readonly rank: string; }; };""" writer.writeTypeScript( filename=os.path.join("resources", _OUTPUT_FILE), scriptname=os.path.basename(os.path.abspath(__file__)), header=header, type="HuntData", as_const=False, data=all_monsters, ) print(f"File '{_OUTPUT_FILE}' successfully created.")
weather_name = row[i] if not weather_name: break weathers.append(weather_name) sum += int(row[i + 1]) rates.append(sum) # add leading zeroes so they sort properly. all_rates["%04d" % int(row[0])] = { "weathers": weathers, "rates": rates, } return all_rates def update(reader, writer): data = reader.exd("WeatherRate") all_rates = parse_data(data) writer.write( os.path.join("resources", _OUTPUT_FILE), os.path.basename(os.path.abspath(__file__)), "gWeatherRates", all_rates, ) if __name__ == "__main__": # TODO: make an arg parser for non-default paths reader = coinach.CoinachReader(verbose=True) writer = coinach.CoinachWriter(verbose=True) update(reader, writer)