convert_emotions.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #!/usr/bin/env python3
  2. """
  3. Simple scripts which replaces the old emotion script constants to the new
  4. script constants.
  5. The actual replacement list is in 'emotion_dict'.
  6. Related pull request: https://github.com/rathena/rathena/pull/2527
  7. Note: This only applies the constant changes. You still have to check your scripts
  8. for 'unitemote' (command was removed) and 'emotion' using the third parameter ('target name').
  9. """
  10. import fileinput
  11. import re
  12. import os
  13. convert_folders = ["../npc", "../src"]
  14. wl_file_extensions = ['.hpp', '.h', '.cpp', '.c', '.txt' ]
  15. bl_files = ['script_constants.hpp']
  16. BACKUP_EXT = '.bak'
  17. emotion_dict = {
  18. 'E_GASP': 'ET_SURPRISE',
  19. 'E_WHAT': 'ET_QUESTION',
  20. 'E_HO': 'ET_DELIGHT',
  21. 'E_LV': 'ET_THROB',
  22. 'E_SWT': 'ET_SWEAT',
  23. 'E_IC': 'ET_AHA',
  24. 'E_AN': 'ET_FRET',
  25. 'E_AG': 'ET_ANGER',
  26. 'E_CASH': 'ET_MONEY',
  27. 'E_DOTS': 'ET_THINK',
  28. 'E_SCISSORS': 'ET_SCISSOR',
  29. 'E_ROCK': 'ET_ROCK',
  30. 'E_PAPER': 'ET_WRAP',
  31. 'E_KOREA': 'ET_FLAG',
  32. 'E_LV2': 'ET_BIGTHROB',
  33. 'E_THX': 'ET_THANKS',
  34. 'E_WAH': 'ET_KEK',
  35. 'E_SRY': 'ET_SORRY',
  36. 'E_HEH': 'ET_SMILE',
  37. 'E_SWT2': 'ET_PROFUSELY_SWEAT',
  38. 'E_HMM': 'ET_SCRATCH',
  39. 'E_NO1': 'ET_BEST',
  40. 'E_NO': 'ET_STARE_ABOUT',
  41. 'E_OMG': 'ET_HUK',
  42. 'E_OH': 'ET_O',
  43. 'E_X': 'ET_X',
  44. 'E_HLP': 'ET_HELP',
  45. 'E_GO': 'ET_GO',
  46. 'E_SOB': 'ET_CRY',
  47. 'E_GG': 'ET_KIK',
  48. 'E_KIS': 'ET_CHUP',
  49. 'E_KIS2': 'ET_CHUPCHUP',
  50. 'E_PIF': 'ET_HNG',
  51. 'E_OK': 'ET_OK',
  52. 'E_MUTE': 'ET_CHAT_PROHIBIT',
  53. 'E_INDONESIA': 'ET_INDONESIA_FLAG',
  54. 'E_BZZ': 'ET_STARE',
  55. 'E_RICE': 'ET_HUNGRY',
  56. 'E_AWSM': 'ET_COOL',
  57. 'E_MEH': 'ET_MERONG',
  58. 'E_SHY': 'ET_SHY',
  59. 'E_PAT': 'ET_GOODBOY',
  60. 'E_MP': 'ET_SPTIME',
  61. 'E_SLUR': 'ET_SEXY',
  62. 'E_COM': 'ET_COMEON',
  63. 'E_YAWN': 'ET_SLEEPY',
  64. 'E_GRAT': 'ET_CONGRATULATION',
  65. 'E_HP': 'ET_HPTIME',
  66. 'E_PHILIPPINES': 'ET_PH_FLAG',
  67. 'E_MALAYSIA': 'ET_MY_FLAG',
  68. 'E_SINGAPORE': 'ET_SI_FLAG',
  69. 'E_BRAZIL': 'ET_BR_FLAG',
  70. 'E_FLASH': 'ET_SPARK',
  71. 'E_SPIN': 'ET_CONFUSE',
  72. 'E_SIGH': 'ET_OHNO',
  73. 'E_DUM': 'ET_HUM',
  74. 'E_LOUD': 'ET_BLABLA',
  75. 'E_OTL': 'ET_OTL',
  76. 'E_DICE1': 'ET_DICE1',
  77. 'E_DICE2': 'ET_DICE2',
  78. 'E_DICE3': 'ET_DICE3',
  79. 'E_DICE4': 'ET_DICE4',
  80. 'E_DICE5': 'ET_DICE5',
  81. 'E_DICE6': 'ET_DICE6',
  82. 'E_INDIA': 'ET_INDIA_FLAG',
  83. 'E_LUV': 'ET_LUV',
  84. 'E_RUSSIA': 'ET_FLAG8',
  85. 'E_VIRGIN': 'ET_FLAG9',
  86. 'E_MOBILE': 'ET_MOBILE',
  87. 'E_MAIL': 'ET_MAIL',
  88. 'E_CHINESE': 'ET_ANTENNA0',
  89. 'E_ANTENNA1': 'ET_ANTENNA1',
  90. 'E_ANTENNA2': 'ET_ANTENNA2',
  91. 'E_ANTENNA3': 'ET_ANTENNA3',
  92. 'E_HUM': 'ET_HUM2',
  93. 'E_ABS': 'ET_ABS',
  94. 'E_OOPS': 'ET_OOPS',
  95. 'E_SPIT': 'ET_SPIT',
  96. 'E_ENE': 'ET_ENE',
  97. 'E_PANIC': 'ET_PANIC',
  98. 'E_WHISP': 'ET_WHISP',
  99. 'E_YUT1': 'ET_YUT1',
  100. 'E_YUT2': 'ET_YUT2',
  101. 'E_YUT3': 'ET_YUT3',
  102. 'E_YUT4': 'ET_YUT4',
  103. 'E_YUT5': 'ET_YUT5',
  104. 'E_YUT6': 'ET_YUT6',
  105. 'E_YUT7': 'ET_YUT7',
  106. 'E_MAX': 'ET_MAX'
  107. }
  108. pattern = re.compile(r'\b(' + '|'.join(emotion_dict.keys()) + r')\b', re.IGNORECASE)
  109. def revert_to_backup(filename):
  110. os.rename(filename+BACKUP_EXT, filename)
  111. def replace_emoticons_in_file(filename):
  112. remove_backup = True # only keep backup if the original file changed
  113. with fileinput.FileInput(filename, inplace=True, backup=BACKUP_EXT) as fiFile:
  114. try:
  115. for line in fiFile:
  116. new_line, rpl_cnt = pattern.subn(lambda x: emotion_dict[x.group().upper()], line)
  117. print(new_line, end='')
  118. if rpl_cnt > 0:
  119. remove_backup = False
  120. if remove_backup:
  121. os.remove(filename+BACKUP_EXT)
  122. except UnicodeDecodeError:
  123. # Encoding error, reapply the backup
  124. revert_to_backup(filename)
  125. fileiter = (os.path.join(root, f)
  126. for conv_folder in convert_folders
  127. for root, _, files in os.walk(conv_folder)
  128. for f in files
  129. if any([f.endswith(wl) for wl in wl_file_extensions])
  130. if not any([bl in f for bl in bl_files])
  131. )
  132. for f in fileiter:
  133. print("Updating file", f)
  134. replace_emoticons_in_file(f)