Skip to content

Instantly share code, notes, and snippets.

@rainbowdesign
Last active January 4, 2016 08:09
Show Gist options
  • Save rainbowdesign/8593598 to your computer and use it in GitHub Desktop.
Save rainbowdesign/8593598 to your computer and use it in GitHub Desktop.
Battlecalculator
#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