Mercurial > traipse_dev
diff orpg/dieroller/utils.py @ 0:4385a7d0efd1 grumpy-goblin
Deleted and repushed it with the 'grumpy-goblin' branch. I forgot a y
author | sirebral |
---|---|
date | Tue, 14 Jul 2009 16:41:58 -0500 |
parents | |
children | c54768cffbd4 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/orpg/dieroller/utils.py Tue Jul 14 16:41:58 2009 -0500 @@ -0,0 +1,100 @@ +#!/usr/bin/env python +# Copyright (C) 2000-2001 The OpenRPG Project +# +# openrpg-dev@lists.sourceforge.net +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# -- +# +# File: dieroller/utils.py +# Author: OpenRPG Team +# Maintainer: +# Version: +# $Id: utils.py,v 1.22 2007/05/05 05:30:10 digitalxero Exp $ +# +# Description: Classes to help manage the die roller +# + +__version__ = "$Id: utils.py,v 1.22 2007/05/05 05:30:10 digitalxero Exp $" + +from die import * +from wod import * +from d20 import * +from hero import * +from shadowrun import * +from sr4 import * +from hackmaster import * +from wodex import * +from srex import * +from gurps import * +from runequest import * +from savage import * +from trinity import * + +import re + +rollers = ['std','wod','d20','hero','shadowrun', 'sr4','hackmaster','srex','wodex', 'gurps', 'runequest', 'sw', 'trinity'] + +class roller_manager: + def __init__(self,roller_class="d20"): + try: + self.setRoller(roller_class) + except: + self.roller_class = "std" + + def setRoller(self,roller_class): + try: + rollers.index(roller_class) + self.roller_class = roller_class + except: + raise Exception, "Invalid die roller!" + + def getRoller(self): + return self.roller_class + + def listRollers(self): + return rollers + + def stdDieToDClass(self,match): + s = match.group(0) + (num,sides) = s.split('d') + + if sides.strip().upper() == 'F': + sides = "'f'" + + try: + if int(num) > 100 or int(sides) > 10000: + return None + except: + pass + + return "(" + num.strip() + "**" + self.roller_class + "(" + sides.strip() + "))" + + # Use this to convert ndm-style (3d6) dice to d_base format + def convertTheDieString(self,s): + reg = re.compile("\d+\s*[a-zA-Z]+\s*[\dFf]+") + (result, num_matches) = reg.subn(self.stdDieToDClass, s) + if num_matches == 0 or result is None: + try: + s2 = self.roller_class + "(0)." + s + test = eval(s2) + return s2 + except: + pass + return result + + + def proccessRoll(self,s): + return str(eval(self.convertTheDieString(s)))