From e561d0dfafd7102dcfd4e2fa09e4f0cf11051598 Mon Sep 17 00:00:00 2001 From: nemesis Date: Fri, 6 Jul 2018 00:04:21 +0200 Subject: [PATCH] Star Wars --- asmodee.py | 62 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 20 deletions(-) diff --git a/asmodee.py b/asmodee.py index 043514f..2424c38 100755 --- a/asmodee.py +++ b/asmodee.py @@ -52,7 +52,7 @@ class Parser: #Pour parser la ligne de commande self._mtch = "" self._room = room self._arg = {} - self._option = [False,False,False,0,0,0,0,0,False,0,0] + self._option = [False,False,False,0,0,0,0,0,False,0,0,False] @property def str(self): @@ -222,7 +222,8 @@ def roll(result,type,explosif,nb,f,noadd,ars,relance,mitige): #print("fin roll " + str(result) + " " + str(roll) + " " + str(new)) return (result,roll,new) -def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige): +def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige,z): + y = 0 total = 0 allresult = [] if (nb > 10000): @@ -231,13 +232,23 @@ def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige): if (tmp): jet += str(nb)+"d"+str(type) #print(jet) - for _ in range(nb): + for i in range(nb): new = 0 - result, res1, new = roll(result,type,explosif,nb,f,noadd,ars,relance,mitige) - allresult.append(res1) + # Star Wars + if (z == True && i == 0): + result, res1, new = roll(result,type,True,nb,f,noadd,ars,relance,mitige) + allresult.append(res1) + if (res1 == 1): + y = 1 + # Autre + else: + result, res1, new = roll(result,type,explosif,nb,f,noadd,ars,relance,mitige) + allresult.append(res1) + # Tant qu'il faut relancer while (new == 1): result, res1, new = roll(result,type,explosif,nb,f,noadd,ars,relance,mitige) allresult.append(res1) + # Wild die de Savage Worlds if (wild != 0): jet += "w" + str(wild) result, res1, new = roll(result,wild,wild!=1,nb if nb else 0,f,noadd,ars,relance,mitige) @@ -245,6 +256,10 @@ def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige): result += 'w' #print(allresult) allresult.sort(reverse=True) + # 1 au de joker de Star Wars + if (y == 1): + del allresult[-1] + del allresult[0] for i in range((len(allresult)) if (g == 0 and ((f != 0 and noadd) or not noadd)) else (0 if (noadd and f == 0) else g)): if (g == 0 or len(allresult) >= g): total += allresult[i] if allresult[i] else 0 @@ -270,25 +285,28 @@ def entryPoint(room, event): print(text) if (parser.eat(":roll",1)): - parser.option = [False,False,False,0,0,0,0,0,False,0,0] + parser.option = [False,False,False,0,0,0,0,0,False,0,0,False] rollXPoint() elif (parser.eat(":dom",1)): - parser.option = [True,False,True,0,0,0,4,4,False,0,0] + parser.option = [True,False,True,0,0,0,4,4,False,0,0,False] rollXPoint() elif (parser.eat(":sw",1)): - parser.option = [True,True,True,0,0,0,4,4,False,0,0] + parser.option = [True,True,True,0,0,0,4,4,False,0,0,False] rollXPoint() elif (parser.eat(":ars",1)): - parser.option = [False,True,True,0,0,0,0,0,True,0,0] + parser.option = [False,True,True,0,0,0,0,0,True,0,0,False] rollXPoint() elif (parser.eat(":des",1)): - parser.option = [False,True,True,0,10,0,0,0,False,0,0] + parser.option = [False,True,True,0,10,0,0,0,False,0,0,False] rollXPoint() elif (parser.eat(":wod",1)): - parser.option = [False,True,True,0,8,0,0,0,False,10,0] + parser.option = [False,True,True,0,8,0,0,0,False,10,0,False] rollXPoint() elif (parser.eat(":owod",1)): - parser.option = [False,True,True,0,6,0,0,0,False,10,1] + parser.option = [False,True,True,0,6,0,0,0,False,10,1,False] + rollXPoint() + elif (parser.eat(":star",1)): + parser.option = [False,False,True,0,0,0,0,0,False,0,0,True] rollXPoint() else: parser.arg["error"] = True @@ -381,6 +399,10 @@ def rollOptionPoint(): parser.option[10] = 1 elif (parser.eat("#[Mm]",1)): parser.option[10] = 0 + elif (parser.eat("[Zz]",1)): + parser.option[11] = True + elif (parser.eat("#[Zz]",1)): + parser.option[11] = False else: break @@ -388,7 +410,7 @@ def dupli(orig): salon = orig.room orig.room = None nouv = copy.deepcopy(orig) - nouv.option = [orig.option[0],orig.option[1],orig.option[2],orig.option[3],orig.option[4],orig.option[5],orig.option[6],orig.option[7],orig.option[8],orig.option[9],orig.option[10]] + nouv.option = [orig.option[0],orig.option[1],orig.option[2],orig.option[3],orig.option[4],orig.option[5],orig.option[6],orig.option[7],orig.option[8],orig.option[9],orig.option[10],orig.option[11]] orig.room = salon nouv.room = salon return nouv @@ -422,7 +444,7 @@ def rollPlusMoinsPoint(): jet = "" rollOptionPoint() #print(parser.option) - exp,noa,ver,will,f,g,s,d,ars,r,m = parser.option + exp,noa,ver,will,f,g,s,d,ars,r,m,z = parser.option rollEntityPoint() #print("de " + str(parser.arg.get("roll_nb",None)) + "|" + str(parser.arg.get("roll_typ",None))) if (not parser.arg["error"]): @@ -431,9 +453,9 @@ def rollPlusMoinsPoint(): result += "-" if (parser.arg.get("roll_typ",None) or parser.arg.get("roll_wil",None)): result += "(" - exp2,noa2,ver2,will2,f2,g2,s2,d2,ars2,r2,m2 = parser.option - parser.option = [exp,noa,ver,will,f,g,s,d,ars,r,m] - result, res1, jet = rolls(result,jet,parser.arg.get("roll_typ",None),parser.arg.get("roll_nb",None),exp2,noa2,will2,f2,g2,ars2,r2,m2) + exp2,noa2,ver2,will2,f2,g2,s2,d2,ars2,r2,m2,z2 = parser.option + parser.option = [exp,noa,ver,will,f,g,s,d,ars,r,m,z] + result, res1, jet = rolls(result,jet,parser.arg.get("roll_typ",None),parser.arg.get("roll_nb",None),exp2,noa2,will2,f2,g2,ars2,r2,m2,z2) result += " = " + str(res1) + ")" else: jet += str(parser.arg.get("roll_nb",None)) @@ -452,9 +474,9 @@ def rollPlusMoinsPoint(): result += " + " if parser.arg.get("roll_sig",True) else " - " if (parser.arg.get("roll_typ",None) or parser.arg.get("roll_wil",None)): result += "(" - exp2,noa2,ver2,will2,f2,g2,s2,d2,ars2,r2,m2 = parser.option - parser.option = [exp,noa,ver,will,f,g,s,d,ars,r,m] - result, res2, jet = rolls(result,jet,parser.arg.get("roll_typ",None),parser.arg.get("roll_nb",None),exp2,noa2,will2,f2,g2,ars2,r2,m2) + exp2,noa2,ver2,will2,f2,g2,s2,d2,ars2,r2,m2,z2 = parser.option + parser.option = [exp,noa,ver,will,f,g,s,d,ars,r,m,z] + result, res2, jet = rolls(result,jet,parser.arg.get("roll_typ",None),parser.arg.get("roll_nb",None),exp2,noa2,will2,f2,g2,ars2,r2,m2,z2) result += " = " + str(res2) + ")" else: jet += str(parser.arg.get("roll_nb",None))