import urllib # Adds Utility for url grabbing
import re # adds Regular Expressions
import os # adds OS functionality
import string # adds string functionality
##############################################################################
################# Some quick checks for directories/files ###################
##############################################################################
dirList = os.listdir("C:/")
if 'dsp' in dirList or 'DSP' in dirList:
directory = "C:/DSP/scripts/globals/spells/bluemagic"
elif 'bluemagic' in dirList:
directory = "C:/bluemagic"
else:
os.mkdir("C:/bluemagic")
directory = "C:/bluemagic"
check = 0
while check != 1:
fileList = os.listdir(directory)
if "names.txt" in fileList:
print "The files created by this program will be placed in the directory " + directory + ".\n"
start = raw_input("Please press enter to continue or hit \"CTRL + C\" to cancel.\n\n")
check = 1
else:
start = raw_input("The names.txt file is missing from " + directory + " and therefore I have no names to use! Please add the file and then hit enter!\n\n")
## Get names of all moves to be built!
nameFile = open(directory + "/names.txt",mode="r")
## Grab html Page for the move currently working on.
for line in nameFile:
name = line
webPage = urllib.urlopen("http://wiki.ffxiclopedia.org/wiki/" + name)
rWebPage = webPage.read()
mathPage = urllib.urlopen("http://wiki.ffxiclopedia.org/wiki/Calculating_Blue_Magic_Damage")
mWebPage = mathPage.read()
cleanName = name.strip()
cleanName = cleanName.replace('_',' ')
print "Script for " + cleanName + " is being made..."
## Drop page into a temporary file
# General Info Page
wTempFile = open(directory + "/tempFile.txt","w")
wTempFile.write(rWebPage)
wTempFile.close()
# Mathmatics Page
mTempFile = open(directory + "/mathmatics.txt","w")
mTempFile.write(mWebPage)
mTempFile.close()
## Start Clean up
rTempFile = open (directory + "/tempFile.txt","r")
output = open(directory + "/"+str(name).strip()+".lua","w")
output.write('---------------------------------------------'+"\n")
output.write('-- '+str(cleanName)+"\n")
output.write('--'+"\n")
########################################################################################################
noteCnt = 0
for line in rTempFile:
if "
- " in line: ##### Cleans up the Description
description = line.replace("
- ","")
description = description.replace("","")
description = description.replace("","")
description = re.sub('","")
if "font" in description:
description = description.replace("/font","")
description = re.sub('','',description)
description = re.sub("<.*?>","",description)
output.write("-- Description: " + description.strip()+"\n")
################################################################################
########## Checks for changes based off TP #############################
################################################################################
tpLine = description.lower() ### Defines the string we check for added TP benefits
if "varies" in tpLine: #### Checks to see if the move changes based off TP
if "accuracy" in tpLine:
tpBonus = "TPMOD_ACC"
elif "critical" in tpLine:
tpBonus = "TPMOD_CRITICAL"
elif "attack" in tpLine:
tpBonus = "TPMOD_ATTACK"
elif "damage" in tpLine:
tpBonus = "TPMOD_DAMAGE"
else:
tpBonus = "TPMOD_NONE"
else: #### Sets the default to NO change based off TP
tpBonus = "TPMOD_NONE"
################################################################################
########## Checks damage type. In example: Physical, Magical etc.###############
################################################################################
if 'Notes' in line:
notes = re.sub('<.*?>','',line)
notes = notes.replace('<.*?>','')
noteCnt = 1
output.write('-- '+notes.strip()+":\n")
elif noteCnt > 0:
if "
- " in line:
notes = re.sub("<.*?>","",line)
output.write('-- '+notes)
noteCnt = noteCnt + 1
if noteCnt > 6:
noteCnt = -1
output.write('--')
elif "Spell Type" in line:
moveType = line.replace("","")
moveType = moveType.replace("","")
moveType = moveType.replace("Spell","")
moveType = re.sub("<.*?>","",moveType)
moveType = re.sub("
\)
","",moveType)
moveType = re.sub('\(','',moveType)
moveType = moveType.replace(")
","")
output.write("-- "+ moveType.strip() + "\n")
output.write("-- \n")
#print "Type is: " + moveType
moveType = moveType.lower()
scriptType = 0
if "physical" in moveType:
scriptType = 1
if "slashing" in moveType:
physParam = "DMGTYPE_SLASH"
elif "blunt" in moveType:
physParam = "DMGTYPE_BLUNT"
elif "pierc" in moveType:
physParam = "DMGTYPE_PIERCE"
else:
physParam = "DMGTYPE_H2H"
elif "magical" in moveType:
scriptType = 2
################################################################################
## Write the script #
################################################################################
mathFile = open(directory + "/mathmatics.txt","r")
prog = 0
if scriptType == 1:
for check in mathFile:
check = check.lower()
check = re.sub("<.*?>","",check.strip())
if cleanName.lower() in check:
prog = 1
elif prog == 1:
prog = 2
tp0 = check
elif prog == 2:
prog = 3
tp150 = check
if "-" in tp150:
tp150 = tp0
elif prog == 3:
prog = 4
tp300 = check
if "-" in tp300:
tp300 = tp0
elif prog == 4:
prog = 5
twoH = check
if "-" in twoH:
twoH = tp0
elif prog == 5 :
prog = 6
hits = check
elif prog == 6:
prog = 7
strn = 0.0
dex = 0.0
mnd = 0.0
vit = 0.0
agi = 0.0
intl = 0.0
chrm = 0.0
if " " in check:
pri = re.sub(" .*","",check)
sec = re.sub(".*? ","",check)
else:
pri = check
sec = 0
if "str" in pri:
strn = re.sub(".*?_","",pri)
strn = float(strn)/100
elif "dex" in pri:
dex = re.sub(".*?_","",pri)
dex = float(dex)/100
elif "vit" in pri:
vit = re.sub(".*?_","",pri)
vit = float(vit)/100
elif "agi" in pri:
agi = re.sub(".*?_","",pri)
agi = float(agi)/100
elif "intl" in pri:
intl = re.sub(".*?_","",pri)
intl = float(intl)/100
elif "mnd" in pri:
mnd = re.sub(".*?_","",pri)
mnd = float(mnd)/100
elif "chr" in pri:
chrm = re.sub(".*?_","",pri)
chrm = float(chrm)/100
if sec != 0:
if "str" in sec:
strn = re.sub(".*?_","",sec)
strn = float(strn)/100
elif "dex" in sec:
dex = re.sub(".*?_","",sec)
dex = float(dex)/100
elif "vit" in sec:
vit = re.sub(".*?_","",sec)
vit = float(vit)/100
elif "agi" in sec:
agi = re.sub(".*?_","",sec)
agi = float(agi)/100
elif "intl" in sec:
intl = re.sub(".*?_","",sec)
intl = float(intl)/100
elif "mnd" in sec:
mnd = re.sub(".*?_","",sec)
mnd = float(mnd)/100.0
elif "chr" in sec:
chrm = re.sub(".*?_","",sec)
chrm = float(chrm)/100
elif prog > 6 and prog < 8:
prog = prog + 1
elif prog == 8:
prog = 9
dCap = check
elif prog == 9:
prog = 10
elif prog == 10:
prog = 11
sc = check
if "light" in sc:
sc = "SC_LIGHT"
elif "dark" in sc:
sc = "SC_DARK"
elif "gravitation" in sc:
sc = "SC_GRAVITATION"
elif "distortion" in sc:
sc = "SC_DISTORTION"
elif "fragmentation" in sc:
sc = "SC_FRAGMENTATION"
elif "fusion" in sc:
sc = "SC_FUSION"
elif "compression" in sc:
sc = "SC_COMPRESSION"
elif "liquefaction" in sc:
sc = "SC_LIQUEFACTION"
elif "inudration" in sc:
sc = "SC_INDURATION"
elif "scission" in sc:
sc = "SC_SCISSION"
elif "reverberation" in sc:
sc = "SC_REVERBERATION"
elif "detonation" in sc:
sc = "SC_DETONATION"
elif "transfixion" in sc:
sc = "SC_TRANSFIXION"
elif "impaction" in sc:
sc = "SC_IMPACTION"
elif prog == 11:
prog = 12
# Notes
elif prog == 12:
prog = 0
#########################################################
### Magical type script ###############
#########################################################
elif scriptType == 2:
for line in mathFile:
line = line.lower()
if name in line:
prog = 1
elif prog == 1:
prog = 2
element = re.sub("<.*?>","",line)
elif prog == 2:
prog = 3
modifier = re.sub("<.*?>","",line)
elif prog == 3:
prog = 4
multiplier = re.sub("<.*?>","",line)
elif prog == 4:
prog = 5
Tmultiplier = re.sub("<.*?>","",line)
elif prog <= 5 and prog > 8:
prog = prog + 1
elif prog == 8:
notes = re.sub("<.*?>","",line)
mathFile.close()
################################################################################
########## Adds the required files for the script made ###############
################################################################################
if noteCnt == -1:
output.write('---------------------------------------------'+"\n")
output.write("require(\"/scripts/globals/magic\");\nrequire(\"/scripts/globals/status\");\nrequire(\"/scripts/globals/bluemagic\");\n")
output.write('---------------------------------------------'+"\n")
output.write("-- OnSpellCast\n")
output.write('---------------------------------------------'+"\n\n")
output.write('function onSpellCast(caster,target,spell)\n')
output.write(' local params = {};\n')
output.write(' params.tpmod = ' + tpBonus +'; params.dmgtype = ' + physParam + '; params.scattr = ' + sc + ';\n')
output.write(' params.numhits = ' + str(hits) + ';\n')
output.write(' params.multiplier = '+str(tp0)+'; params.tp150 = '+str(tp150)+'; params.tp300 = '+str(tp300)+'; params.azuretp = '+str(twoH)+'; params.duppercap = '+str(dCap)+';\n')
output.write(' params.str_wsc = '+str(strn)+'; params.dex_wsc = '+str(dex)+'; params.vit_wsc = '+str(vit)+'; params.agi_wsc = '+str(agi)+'; params.int_wsc = '+str(intl)+'; params.mnd_wsc = '+str(mnd)+'; params.chr_wsc = '+str(chrm)+';\n')
output.write(' damage = BluePhysicalSpell(caster, target, spell, params);\n')
output.write(' damage = BlueFinalAdjustments(caster, target, spell, damage, params);\n')
output.write('\n\n return damage;\n')
noteCnt = 0
output.write('end;')
output.close() ### Closes the script the file made
print cleanName + " has been created!"
print "\n\n"
nameFile.close()
rTempFile.close()
os.remove(directory + "/tempFile.txt")
finish = raw_input("Please hit enter to close the program")