Difference between revisions of "Ability/Script"

From Wildermyth Wiki
m
Line 108: Line 108:
         string = string[:start] + new + string[start+len(tag)+2:end-2-len(tag_)] + new + string[end:]
         string = string[:start] + new + string[start+len(tag)+2:end-2-len(tag_)] + new + string[end:]
         break
         break
  return string
# function to replace <a/b/.../y:aa/bz/.../yy/zz> with zz
def fail_condition(string):
  for opentag in ['<self.','<test:','<mf']:
    while True:
      start = string.find(opentag)
      if start < 0:
        break
      num = 1
      slashes = []
      passed_colon = False
      for i,c in enumerate(string[start+len(opentag):]):
        if c == '<':
          num += 1
        elif c == '>':
          num -= 1
          if num == 0:
            end = i+start+len(opentag)+1
            break
        elif c == '/' and num == 1 and passed_colon:
          slashes += [i+start+len(opentag)]
        elif c == ':':
          passed_colon = True
      if len(slashes) == 0:
        slashes += [end-1]
      string = string[:start] + string[slashes[-1]+1:end-1] + string[end:]
   return string
   return string


# list of words to replace with links in the wiki
# list of words to replace with links in the wiki


linkwords = [
linkwords = {
   'Bonus Damage',
   'Bonus Damage':None,
   'Potency',
  'Spell Damage':None,
   'Stunt Chance',
   'Potency':None,
   'Temp Health',
   'Stunt Chance':None,
   'Temporary Health',
   'Temp Health':None,
   'Armor',
   'Temporary Health':None,
   'Warding',
   'Armor':'Armor (Stat)',
   'Dodge',
   'Warding':None,
   'Block',
   'Dodge':None,
   'Speed',
   'Block':None,
   'Recovery Rate',
   'Speed':None,
   'Retirement Age',
   'Recovery Rate':None,
   'Grayplane',
   'Retirement Age':None,
   'bonus damage',
   'Grayplane':None,
   'spell damage',
   'bonus damage':None,
   'armor',
   'spell damage':None,
   'warding',
   'armor':'Armor (Stat)',
   'dodge',
   'warding':None,
   'block',
   'dodge':None,
   'augment',
   'block':None,
   'grayplane',
   'augment':None,
   ]
   'grayplane':None,
  'hidden':None,
   }


# function to turn game-formatted ability blurb into wiki-formatted ability blurb
# function to turn game-formatted ability blurb into wiki-formatted ability blurb
Line 147: Line 177:
   out = out.replace('<self>','Hero')
   out = out.replace('<self>','Hero')
   out = out.replace('<name>','Hero')
   out = out.replace('<name>','Hero')
 
  # assume any requirements are not met
  out = fail_condition(out)
    
    
   ### TODO: rewrite these to appropriately respect nested brackets and braces
   ### TODO: rewrite these to appropriately respect nested brackets and braces
Line 152: Line 185:
   out = re.sub(r'\<int:(.*?)\>', 'x', out) # formula -> x
   out = re.sub(r'\<int:(.*?)\>', 'x', out) # formula -> x
   out = re.sub(r'\<float:(.*?)\>', 'x', out) # formula -> x
   out = re.sub(r'\<float:(.*?)\>', 'x', out) # formula -> x
 
  out = re.sub(r'\<mf:.*?/.*?/(.*?)\>', '\g<1>', out) # use they/them
    
    
   # status effect -> link
   # status effect -> link
   out = re.sub(r'\[:statusEffect\.(.*?)\](.*?)\[\]', '[[\g<1>|\g<2>]]', out)
   out = re.sub(r'\[:statusEffect\.(.*?)\](.*?)\[\]', '[[\g<1>|\g<2>]]', out)
   out = re.sub(r'\[statusEffect:(.*?)\](.*?)\[\]', '[[\g<1>|\g<2>]]', out)
   out = re.sub(r'\[statusEffect:(.*?)\](.*?)\[\]', '[[\g<1>|\g<2>]]', out)
 
  # assume any requirements are not met
  out = re.sub(r'\<self\..*?:.*?[^<]/(.*?)\>', '\g<1>', out)
  out = re.sub(r'\<self\..*?:.*?\>', '', out)
  out = re.sub(r'\<test:.*?:(.*?[^<])/.*?\>', '\g<1>', out)
  out = re.sub(r'\<test:.*?:.*?\>', '', out)
    
    
   # leave out "(Currently ...)" note which is based on hero's current stats
   # leave out "(Currently ...)" note which is based on hero's current stats
   out = re.sub(r'\(Current.*?\)', '', out)
   out = re.sub(r'\(Current.*?\)', '', out)
    
    
   ###
   ### ---
    
    
   out = out.replace('\\n','<br />') # newline -> newline
   out = out.replace('\\n','<br />') # newline -> newline
    
    
   for word in linkwords: # replace words with links
   for word in linkwords: # replace words with links
     out = out.replace(word,'[[%s]]'%word)
     if linkwords[word] is not None:
      out = re.sub(r'(^|[^\[])' + word + r'($|[^\]])','\g<1>[[%s|%s]]\g<2>'%(linkwords[word],word),out)
    else:
      out = re.sub(r'(^|[^\[])' + word + r'($|[^\]])','\g<1>[[%s]]\g<2>'%(word),out)
   return out
   return out



Revision as of 11:38, 5 March 2022

This is a Python script to generate the Ability tables. Copy the code in the box below into a text file named abilityTable.py (or whatever you want) inside the Wildermyth directory. Then run it by calling python abilityTable.py from the command line. It will create a text file named abilityTable.txt with the appropriate wiki-formatted content.