Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- Created on Mar 9, 2012
- @author: Jeremiah
- '''
- import jinja2
- import random
- import re
- env = jinja2.Environment(loader = jinja2.PackageLoader('arcgen', 'arcor'))
- def type_to_id(t):
- if t == "weapon":
- return 0
- elif t == "armor_head":
- return 1#Check this
- elif t == "armor_body":
- return 2
- elif t == "armor_leg":
- return 3
- elif t == "item_potion":
- return 4
- elif t == "item_misc":
- return 5
- def render(templ):
- return templ.render(component = component, choose_one = choose_one, select = random.choice, extract_tier = extract_tier, type_to_id = type_to_id)
- def extract_tier(s):
- if "[tier:" not in s:
- return "", s
- tierregex = r"\[tier\:.*?\]"
- tier = re.findall(tierregex, s)[0]
- withouttier = re.sub(tierregex, "", s)
- tier = component("tiers/"+tier[len("[tier:"): -len("]")])
- namesregex = r"<.*?>"
- tiernames = re.findall(namesregex, tier)[0]
- mods = tier.replace(tiernames, "")
- tiernames = tiernames[1:-1]
- tiernames = [i.strip() for i in tiernames.split(",")]
- tier = random.choice(tiernames)+mods
- return tier, withouttier
- def choose_one(s):
- s = s.split("\n")
- while "" in s:
- s.remove("")
- return random.choice(s)
- def component(name):
- templ = env.get_template(name)
- return choose_one(render(templ))
- def parse_instruction(i, target):
- opers = ["=", "+", "-", "*", "/"]
- oper = None
- for e in opers:
- if e in i:
- stat, oper, val = i.partition(e)
- break
- try:
- if val[-1] == "%":
- val = target[stat]/100.0 * int(val[:-1])
- if stat == "e":
- v = val
- else:
- v = int(val)
- if oper == "=":
- target[stat] = v
- elif oper == "+":
- target[stat] += int(val)
- elif oper == "-":
- target[stat] -= int(val)
- elif oper == "*":
- target[stat] *= int(val)
- elif oper == "/":
- target[stat] /= int(val)
- except KeyError:#Should not happen; indcates incorrect definitions.
- target[stat] = 1
- parse_instruction(i, target)
- return
- def build_stats(s):
- d = {}
- for i in s:
- parse_instruction(i, d)
- g = {}
- g["stat"] = d.get("s") if d.get("s") != None else 0
- g["specialstat"] = d.get("cs") if d.get("cs") != None else 0
- g["sellprice"] = d.get("v") if d.get("v") != None else 0
- g["special"] = d.get("c") if d.get("c") != None else 0
- g["desc"] = d.get("e") if d.get("e") != None else ""
- return g
- def reformat(item):
- itype, _, item = item.partition("|/|")
- itype = int(itype)
- modifiers = re.findall("\\{.*?\\}",item)
- item = re.sub("\\{.*?\\}", "", item)
- item = re.sub("\s+", " ", item)
- init_val = []
- val_mod = []
- perc_mod = []
- for i in modifiers:
- i = i[1:-1]
- if "=" in i:
- init_val.append(i)
- if "+" in i or "-" in i:
- if "%" in i:
- perc_mod.append(i)
- else:
- val_mod.append(i)
- modifiers = []
- modifiers.extend(init_val)
- modifiers.extend(val_mod)
- modifiers.extend(perc_mod)
- stats = build_stats(modifiers)
- return item, stats, itype
- def get_item():
- item_basic = component("item")
- item_name, item_modifiers, itype = reformat(item_basic)
- return env.get_template("entry").render(name = item_name, stats = item_modifiers, type = itype)
- def get_items(number):
- return [get_item() for _ in range(number)]
- if __name__ == "__main__":
- print("FISK")
- g = get_items(int(raw_input("How many items?")))
- test = open("items.txt", "wt")
- for i in g:
- test.write(i.replace("\n\n", "\n").strip())
- test.write("\n")
- test.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement