rathena/tools/convert_emotions.py
Jeybla 576d48865d
Adds Emotion Conversion Script (#2600)
* Simple scripts which replaces the old emotion script constants to new constants
* Follow up to ea88ea50546fd140bda875056f83a60b6b0bef96
2017-11-13 16:39:14 +01:00

147 lines
3.7 KiB
Python
Executable File

#!/bin/python3
"""
Simple scripts which replaces the old emotion script constants to the new
script constants.
The actual replacement list is in 'emotion_dict'.
Related pull request: https://github.com/rathena/rathena/pull/2527
Note: This only applies the constant changes. You still have to check your scripts
for 'unitemote' (command was removed) and 'emotion' using the third parameter ('target name').
"""
import fileinput
import re
import os
convert_folders = ["../npc", "../src"]
wl_file_extensions = ['.hpp', '.h', '.cpp', '.c', '.txt' ]
bl_files = ['script_constants.hpp']
BACKUP_EXT = '.bak'
emotion_dict = {
'E_GASP': 'ET_SURPRISE',
'E_WHAT': 'ET_QUESTION',
'E_HO': 'ET_DELIGHT',
'E_LV': 'ET_THROB',
'E_SWT': 'ET_SWEAT',
'E_IC': 'ET_AHA',
'E_AN': 'ET_FRET',
'E_AG': 'ET_ANGER',
'E_CASH': 'ET_MONEY',
'E_DOTS': 'ET_THINK',
'E_SCISSORS': 'ET_SCISSOR',
'E_ROCK': 'ET_ROCK',
'E_PAPER': 'ET_WRAP',
'E_KOREA': 'ET_FLAG',
'E_LV2': 'ET_BIGTHROB',
'E_THX': 'ET_THANKS',
'E_WAH': 'ET_KEK',
'E_SRY': 'ET_SORRY',
'E_HEH': 'ET_SMILE',
'E_SWT2': 'ET_PROFUSELY_SWEAT',
'E_HMM': 'ET_SCRATCH',
'E_NO1': 'ET_BEST',
'E_NO': 'ET_STARE_ABOUT',
'E_OMG': 'ET_HUK',
'E_OH': 'ET_O',
'E_X': 'ET_X',
'E_HLP': 'ET_HELP',
'E_GO': 'ET_GO',
'E_SOB': 'ET_CRY',
'E_GG': 'ET_KIK',
'E_KIS': 'ET_CHUP',
'E_KIS2': 'ET_CHUPCHUP',
'E_PIF': 'ET_HNG',
'E_OK': 'ET_OK',
'E_MUTE': 'ET_CHAT_PROHIBIT',
'E_INDONESIA': 'ET_INDONESIA_FLAG',
'E_BZZ': 'ET_STARE',
'E_RICE': 'ET_HUNGRY',
'E_AWSM': 'ET_COOL',
'E_MEH': 'ET_MERONG',
'E_SHY': 'ET_SHY',
'E_PAT': 'ET_GOODBOY',
'E_MP': 'ET_SPTIME',
'E_SLUR': 'ET_SEXY',
'E_COM': 'ET_COMEON',
'E_YAWN': 'ET_SLEEPY',
'E_GRAT': 'ET_CONGRATULATION',
'E_HP': 'ET_HPTIME',
'E_PHILIPPINES': 'ET_PH_FLAG',
'E_MALAYSIA': 'ET_MY_FLAG',
'E_SINGAPORE': 'ET_SI_FLAG',
'E_BRAZIL': 'ET_BR_FLAG',
'E_FLASH': 'ET_SPARK',
'E_SPIN': 'ET_CONFUSE',
'E_SIGH': 'ET_OHNO',
'E_DUM': 'ET_HUM',
'E_LOUD': 'ET_BLABLA',
'E_OTL': 'ET_OTL',
'E_DICE1': 'ET_DICE1',
'E_DICE2': 'ET_DICE2',
'E_DICE3': 'ET_DICE3',
'E_DICE4': 'ET_DICE4',
'E_DICE5': 'ET_DICE5',
'E_DICE6': 'ET_DICE6',
'E_INDIA': 'ET_INDIA_FLAG',
'E_LUV': 'ET_LUV',
'E_RUSSIA': 'ET_FLAG8',
'E_VIRGIN': 'ET_FLAG9',
'E_MOBILE': 'ET_MOBILE',
'E_MAIL': 'ET_MAIL',
'E_CHINESE': 'ET_ANTENNA0',
'E_ANTENNA1': 'ET_ANTENNA1',
'E_ANTENNA2': 'ET_ANTENNA2',
'E_ANTENNA3': 'ET_ANTENNA3',
'E_HUM': 'ET_HUM2',
'E_ABS': 'ET_ABS',
'E_OOPS': 'ET_OOPS',
'E_SPIT': 'ET_SPIT',
'E_ENE': 'ET_ENE',
'E_PANIC': 'ET_PANIC',
'E_WHISP': 'ET_WHISP',
'E_YUT1': 'ET_YUT1',
'E_YUT2': 'ET_YUT2',
'E_YUT3': 'ET_YUT3',
'E_YUT4': 'ET_YUT4',
'E_YUT5': 'ET_YUT5',
'E_YUT6': 'ET_YUT6',
'E_YUT7': 'ET_YUT7',
'E_MAX': 'ET_MAX'
}
pattern = re.compile(r'\b(' + '|'.join(emotion_dict.keys()) + r')\b', re.IGNORECASE)
def revert_to_backup(filename):
os.rename(filename+BACKUP_EXT, filename)
def replace_emoticons_in_file(filename):
remove_backup = True # only keep backup if the original file changed
with fileinput.FileInput(filename, inplace=True, backup=BACKUP_EXT) as fiFile:
try:
for line in fiFile:
new_line, rpl_cnt = pattern.subn(lambda x: emotion_dict[x.group().upper()], line)
print(new_line, end='')
if rpl_cnt > 0:
remove_backup = False
if remove_backup:
os.remove(filename+BACKUP_EXT)
except UnicodeDecodeError:
# Encoding error, reapply the backup
revert_to_backup(filename)
fileiter = (os.path.join(root, f)
for conv_folder in convert_folders
for root, _, files in os.walk(conv_folder)
for f in files
if any([f.endswith(wl) for wl in wl_file_extensions])
if not any([bl in f for bl in bl_files])
)
for f in fileiter:
print("Updating file", f)
replace_emoticons_in_file(f)