Last active
January 4, 2016 08:09
-
-
Save rainbowdesign/8593598 to your computer and use it in GitHub Desktop.
Battlecalculator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#target: replace the ifa / arg section with numpy or something else | |
spell = ([['magic','black hole', [[['mag'],'hp', ['mul', -0.20,'hpt' ]], [['mag'],'mana',['mul', -0.20, 'manat']]]]]) | |
def battlecal(caster, spell, target, spexe = 0, targetarray=0, targetx=0,targety=0, remove=0): | |
print (('spell',spell)) | |
if type(spell) is str: | |
spell = copy.deepcopy(extraspells[spell]) | |
if type(spell) is list: | |
tmpsp=copy.deepcopy(spell) | |
tmpcn=[] | |
dprint (('start spell')) | |
dprint((caster, spell, target, spexe, targetarray, targetx,targety, remove)) | |
def a(*args):return reduce(operator.add, args) | |
def d(*args): return reduce(operator.div, args) | |
def m(*args): return reduce(operator.mul, args) | |
def ifa(al): | |
if type(al) is str: | |
for tr in range (( len (trait) )): #tr = trait to change | |
for tr1 in range ( len (trait[tr]) ): | |
ddprint (trait[tr][tr1]) | |
if al == trait[tr][tr1]: | |
return caster[tr][tr1] | |
elif type(al) is str: | |
ddprint (trait[tr][tr1]) | |
if type(trait[tr][tr1]) is str: | |
if al == (copy.deepcopy(trait[tr][tr1]) + 't'): | |
return target[tr][tr1] | |
else: print '%s is no trait' % al | |
def arg(tmp): | |
ddprint ('arg',tmp) | |
if tmp[0] == 'mul': | |
del tmp[0] | |
for d in range ( len (tmp) ): | |
if ifa(tmp[d]): | |
tmp[d] = ifa(tmp[d]) | |
ddprint ((arg, tmp)) | |
tmp = m(*tmp) | |
ddprint ((arg, tmp)) | |
return tmp | |
elif tmp[0] == 'div': | |
del tmp[0] | |
for d in range ( len (tmp) ): | |
if ifa(tmp[d]): | |
tmp[d] = ifa(tmp[d]) | |
tmp = d(*tmp) | |
ddprint ((arg, tmp)) | |
return tmp | |
elif tmp[0] == 'add': | |
del tmp[0] | |
for d in range ( len (tmp) ): | |
if ifa(tmp[d]): | |
tmp[d] = ifa(tmp[d]) | |
ddprint('add',tmp) | |
tmp = a(*tmp) | |
ddprint ((arg, tmp)) | |
return tmp | |
else: print 'There is trouble in arg' | |
# | |
def dpparse(tmpsp,n): | |
if 'mul' in tmpsp[n+1] or 'div' in tmpsp[n+1] or 'add' in tmpsp[n+1]: | |
for num, nam in enumerate (tmpsp[n+1]): | |
if nam== 'mul' or nam == 'div' or nam == 'add': | |
dpparse(tmpsp[n+1], num) | |
arg(tmpsp[n]) | |
def parseop(tmpsp): | |
for num, nam in enumerate (tmpsp): | |
if type(nam) == list: | |
parseop(tmpsp[num]) | |
if type(nam) == str: | |
if nam== 'mul' or nam == 'div' or nam == 'add': # do something | |
dpparse(tmpsp, num) | |
dprint (tmpsp) | |
parseop(tmpsp) | |
dprint (tmpsp) | |
spellbooke=[] | |
break1 = 0 | |
c=caster | |
for y in range(len (tmpsp[2]) ): | |
payload = tmpsp[2][y] | |
print 'payload', payload | |
print 'payload type', payload[0][0] | |
dprint (('start spellcalc')) | |
break1= 0 | |
tr = 0 | |
tr1 = 0 | |
if payload[0][0] == 'append': | |
dprint('append' ,payload[1], target) | |
spellapp(payload[1], target) | |
continue | |
if payload[0][0] == 'append' and remove ==1: | |
spellapp(payload[1], target, 1) | |
continue | |
if payload[0][0] == 'spell': | |
dprint('extra spell') | |
spelltarget(caster, payload[1], targetarray, targetx,targety) | |
continue | |
if payload[0][0] == 'spell' and remove ==1: | |
dprint('extra spell') | |
spelltarget(caster, payload[1], targetarray, targetx,targety,1) | |
continue | |
for tr in range (( len (trait) )+1): #tr = trait to change | |
ddprint (('trait',len (trait),tr)) | |
if tr >= (( len (trait) )): | |
print 'check the target trait of %s' % tmpsp[0][1] | |
return | |
for tr1 in range ( len (trait[tr]) ): | |
if payload[1] == trait[tr][tr1]: | |
ddprint (trait[tr][tr1]) | |
break1 =1 | |
break | |
if break1== 1: print 'trait not found' | |
if break1== 1: break | |
for x in range ( len (elem) ): | |
dprint ((payload[0][0] , elem[x])) | |
if payload[0][0] == elem[x]: #attack element | |
dprint(((x,len (elem)))) | |
if x < (len (elem))-2: | |
#print '%s %s power : %s VS %s %s defense: %s, %s : %s ' % (caster[0], elem[x],caster[9][x], target[0], elem[x], target[8][x],trait[tr][tr1],target[tr][tr1]),tr,tr1 | |
#ddprint ((target[tr][tr1] , payload[2],caster[9][x] , target[8][x])) | |
if x == 0: # physical | |
print target[tr][tr1], payload[2] | |
print caster[9][x] | |
if payload[2] >0: | |
target[tr][tr1] += (payload[2]*caster[9][x]) | |
elif payload[2] <0: target[tr][tr1] += (payload[2]*caster[9][x] + target[8][x]) | |
else: target[tr][tr1] += (caster[9][x] +- target[8][x]) | |
else: | |
if payload[2] >0: target[tr][tr1] += (payload[2]*caster[9][x]) | |
else: target[tr][tr1] += (payload[2]*caster[9][x] * target[8][x]) #elemental | |
if x == (len (elem))-2: | |
target[tr][tr1] += payload[2] #direct | |
dprint(target[tr][tr1] , payload[2]) | |
if (x == (len (elem))-2) and (remove == 1):target[tr][tr1] -= payload[2] #direct | |
if x == (len (elem))-1:target[tr][tr1] = payload[2] #assign | |
break |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment