From 6eb285f86680fb71ed086e90865e1c54a6eaeb30 Mon Sep 17 00:00:00 2001 From: nemesis Date: Mon, 11 Jun 2018 22:03:54 +0200 Subject: [PATCH] Jets Old Wod --- asmodee.py | 74 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 51 insertions(+), 23 deletions(-) diff --git a/asmodee.py b/asmodee.py index 9aeede9..6bc415a 100755 --- a/asmodee.py +++ b/asmodee.py @@ -30,7 +30,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] + self._option = [False,False,False,0,0,0,0,0,False,0,0] @property def str(self): @@ -130,7 +130,19 @@ def help(room, event): args.pop(0) if (len(args) > 0): if (re.search("roll", args[0])): - room.send_text(":roll (+-modifs ou des)\n\n- exemple :roll vr4g3 6d6 - \#g\#r3d6 +2 x3 : lance avec les details 6d6 en relancant les des avec un resultat de 4+ et en gardant les trois meilleurs, puis en retranchant 3d6 sans relancer les 4+ et en gardant tout, enfin ajouter 2. L'operation sera executee trois fois.\n\n- v : details (verbose) du jet\n- n : no add, chaque de est traite separement\n- e : explosif, si un de fait le maximum, on le relance et on additionne\n- f : difficulte a atteindre par de avec option n\n- g : nombre de des conserves\n- r : relance si le de a obtenu au moins ce nombre\n- s : seuil a atteindre et niveaux de reussites\n- w : lance un wild die avec les autres.") + room.send_text(":roll (+-modifs ou des)\n\n- exemple :roll vr4g3 6d6 - \#g\#r3d6 +2 x3 : lance avec les details 6d6 en relancant les des avec un resultat de 4+ et en gardant les trois meilleurs, puis en retranchant 3d6 sans relancer les 4+ et en gardant tout, enfin ajouter 2. L'operation sera executee trois fois.\n\n- v : details (verbose) du jet\n- n : no add, chaque de est traite separement\n- e : explosif, si un de fait le maximum, on le relance et on additionne\n- f : difficulte a atteindre par de avec option n\n- g : nombre de des conserves\n- r : relance si le de a obtenu au moins ce nombre\n- m : Enleve un succes si ce nombre ou moins est atteint\n- s : seuil a atteindre et niveaux de reussites\n- w : lance un wild die avec les autres.") + elif (re.search("sw", args[0])): + room.send_text("- :sw : Lance les des en mode Savage Worlds\nVerbose/Noadd/Explosif/Seuil 4/Niveau de reussite 4/Wild Die d6.") + elif (re.search("dom", args[0])): + room.send_text("- :dom : Lance les dommages en mode Savage Worlds\nVerbose/Explosif/seuil 4/Niveau de reussite 4.") + elif (re.search("wod", args[0])): + room.send_text("- :wod : Lance les des en mode Nouveau Monde des Tenebres\nVerbose/Noadd/Difficulte 8/Relance les 10.") + elif (re.search("owod", args[0])): + room.send_text("- :owod : Lance les des en mode Ancien Monde des Tenebres\nVerbose/Noadd/Difficulte 6/Relance les 10/Les 1 enleve un succes.") + elif (re.search("ars", args[0])): + room.send_text("- :ars : Lance les des en mode Ars Magicka : de de tension\nVerbose/Noadd/Sur un 1, on relance et on double.") + elif (re.search("des", args[0])): + room.send_text("- :des : Lance des des de desastre\nVerbose/Noadd/Difficulte 10.") elif (re.search("carte", args[0])): room.send_text("- !carte : Tire une carte et la retire du paquet\n- !carte m : remelange le paquet.") elif (re.search("card", args[0])): @@ -138,12 +150,13 @@ def help(room, event): else: room.send_text("A venir") else: - room.send_text("Commandes disponibles:\n- !card\n- !carte\n- :roll \n- !help ") + room.send_text("Commandes disponibles:\n- !card\n- !carte\n- :roll \n- :sw \n- :dom \n- :wod \n- :owod \n- :ars \n- :des \n- !help ") -def roll(result,type,explosif,nb,f,noadd,ars,relance): +def roll(result,type,explosif,nb,f,noadd,ars,relance,mitige): # verif type et contenu params? roll = 0 new = 0 + moins = 0 if (ars): roll = 1 if (type > 1): @@ -161,16 +174,18 @@ def roll(result,type,explosif,nb,f,noadd,ars,relance): roll += int(tmp) if (relance != 0 and relance != 1 and relance <= roll): new = 1 + if (mitige != 0 and mitige >= roll): + moins = 1 result += (' ' if nb>0 else '') + str(roll) if (f != 0 and roll < f): roll = 0 elif (f != 0 and roll >= f and noadd): tmp = int(roll//type) - roll = tmp + ((roll - tmp*type) >= 1 if f else 0) + roll = tmp + ((roll - tmp*type) >= 1 if f else 0) - moins #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): +def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance,mitige): total = 0 allresult = [] tmp=(type and nb) @@ -179,14 +194,14 @@ def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance): #print(jet) for _ in range(nb): new = 0 - result, res1, new = roll(result,type,explosif,nb,f,noadd,ars,relance) + result, res1, new = roll(result,type,explosif,nb,f,noadd,ars,relance,mitige) allresult.append(res1) while (new == 1): - result, res1, new = roll(result,type,explosif,nb,f,noadd,ars,relance) + result, res1, new = roll(result,type,explosif,nb,f,noadd,ars,relance,mitige) allresult.append(res1) if (wild != 0): jet += "w" + str(wild) - result, res1, new = roll(result,wild,wild!=1,nb if nb else 0,f,noadd,ars,relance) + result, res1, new = roll(result,wild,wild!=1,nb if nb else 0,f,noadd,ars,relance,mitige) allresult.append(res1) result += 'w' #print(allresult) @@ -200,6 +215,7 @@ def rolls(result,jet,type,nb,explosif,noadd,wild,f,g,ars,relance): jet += (("g" + str(g)) if g != 0 else "#g") if g != parser.option[5] else (("g" + str(g)) if g != 0 else "") jet += (("f" + str(f)) if f != 0 else "#f") if f != parser.option[4] else (("f" + str(f)) if f != 0 else "") jet += (("r" + str(relance)) if relance != 0 else "#r") if relance != parser.option[9] else (("r" + str(relance)) if relance != 0 else "") + jet += (("m" + str(mitige)) if mitige != 0 else "#m") if mitige != parser.option[9] else (("m" + str(mitige)) if mitige != 0 else "") if (tmp): jet += ("e" if explosif == True else "#e") if explosif != parser.option[0] else "" jet += ("n" if noadd == True else "#n") if noadd != parser.option[1] else "" @@ -221,22 +237,25 @@ def entryPoint(room, event): print(text) if (parser.eat(":roll",1)): - parser.option = [False,False,False,0,0,0,0,0,False,0] + parser.option = [False,False,False,0,0,0,0,0,False,0,0] rollXPoint() elif (parser.eat(":dom",1)): - parser.option = [True,False,True,0,0,0,4,4,False,0] + parser.option = [True,False,True,0,0,0,4,4,False,0,0] rollXPoint() elif (parser.eat(":sw",1)): - parser.option = [True,True,True,0,0,0,4,4,False,0] + parser.option = [True,True,True,0,0,0,4,4,False,0,0] rollXPoint() elif (parser.eat(":ars",1)): - parser.option = [False,True,True,0,0,0,0,0,True,0] + parser.option = [False,True,True,0,0,0,0,0,True,0,0] rollXPoint() elif (parser.eat(":des",1)): - parser.option = [False,True,True,0,10,0,0,0,False,0] + parser.option = [False,True,True,0,10,0,0,0,False,0,0] rollXPoint() elif (parser.eat(":wod",1)): - parser.option = [False,True,True,0,8,0,0,0,False,10] + parser.option = [False,True,True,0,8,0,0,0,False,10,0] + rollXPoint() + elif (parser.eat(":owod",1)): + parser.option = [False,True,True,0,6,0,0,0,False,10,1] rollXPoint() else: parser.arg["error"] = True @@ -320,6 +339,15 @@ def rollOptionPoint(): parser.option[9] = 10 elif (parser.eat("#[Rr]",1)): parser.option[9] = 0 + elif (parser.eat("[Mm]",1)): + if (parser.space()): + parser.option[10] = 1 + elif (parser.eat(r"\d+",1)): + parser.option[10] = int(parser.mtch) + else: + parser.option[10] = 1 + elif (parser.eat("#[Mm]",1)): + parser.option[10] = 0 else: break @@ -327,7 +355,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]] + 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.room = salon nouv.room = salon return nouv @@ -361,7 +389,7 @@ def rollPlusMoinsPoint(): jet = "" rollOptionPoint() #print(parser.option) - exp,noa,ver,will,f,g,s,d,ars,r = parser.option + exp,noa,ver,will,f,g,s,d,ars,r,m = parser.option rollEntityPoint() #print("de " + str(parser.arg.get("roll_nb",None)) + "|" + str(parser.arg.get("roll_typ",None))) if (not parser.arg["error"]): @@ -370,9 +398,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 = parser.option - parser.option = [exp,noa,ver,will,f,g,s,d,ars,r] - 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) + 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) result += " = " + str(res1) + ")" else: jet += str(parser.arg.get("roll_nb",None)) @@ -391,9 +419,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 = parser.option - parser.option = [exp,noa,ver,will,f,g,s,d,ars,r] - 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) + 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) result += " = " + str(res2) + ")" else: jet += str(parser.arg.get("roll_nb",None))