comparison orpg/dieroller/die.py @ 164:d263c8ff4d7c beta

Traipse Beta 'OpenRPG' {091202-00} Traipse is a distribution of OpenRPG that is designed to be easy to setup and go. Traipse also makes it easy for developers to work on code without fear of sacrifice. 'Ornery-Orc' continues the trend of 'Grumpy' and adds fixes to the code. 'Ornery-Orc's main goal is to offer more advanced features and enhance the productivity of the user. Update Summary (Beta) New Features: Added Bookmarks Added 'boot' command to remote admin Added confirmation window for sent nodes Minor changes to allow for portability to an OpenSUSE linux OS Miniatures Layer pop up box allows users to turn off Mini labels, from FlexiRPG Zoom Mouse plugin added Images added to Plugin UI Switching to Element Tree Map efficiency, from FlexiRPG Added Status Bar to Update Manager New TrueDebug Class in orpg_log (See documentation for usage) Portable Mercurial Tip of the Day added, from Core and community New Reference Syntax added for custom PC sheets New Child Reference for gametree New Gametree Recursion method, mapping, context sensitivity, and effeciency.. New Features node with bonus nodes and Node Referencing help added Added 7th Sea die roller method; ie [7k3] = [7d10.takeHighest(3).open(10)] New 'Mythos' System die roller added Added new vs. die roller method for WoD; ie [3v3] = [3d10.vs(3)]. Includes support for Mythos roller. Fixes: Fix to Text based Server Fix to Remote Admin Commands Fix to Pretty Print, from Core Fix to Splitter Nodes not being created Fix to massive amounts of images loading, from Core Fix to Map from gametree not showing to all clients Fix to gametree about menus Fix to Password Manager check on startup Fix to PC Sheets from tool nodes. They now use the tabber_panel Fixed Whiteboard ID to prevent random line or text deleting. Modified ID's to prevent non updated clients from ruining the fix. default_manifest.xml renamed to default_upmana.xml Fix to Update Manager; cleaner clode for saved repositories Fixes made to Settings Panel and no reactive settings when Ok is pressed.
author sirebral
date Wed, 02 Dec 2009 21:21:34 -0600
parents 3b6888bb53b5
children
comparison
equal deleted inserted replaced
162:e3714f232f2f 164:d263c8ff4d7c
35 import copy 35 import copy
36 #import string 36 #import string
37 37
38 class die_base(UserList.UserList): 38 class die_base(UserList.UserList):
39 39
40
41 def __init__(self,source = []): 40 def __init__(self,source = []):
42 if isinstance(source, (int, float, basestring)): 41 if isinstance(source, (int, float, basestring)):
43 s = [] 42 s = []
44 s.append(di(source)) 43 s.append(di(source))
45 else: 44 else: s = source
46 s = source
47 UserList.UserList.__init__(self,s) 45 UserList.UserList.__init__(self,s)
48 46
49
50
51 def sum(self): 47 def sum(self):
52 s = 0 48 s = 0
53 for a in self.data: 49 for a in self.data:
54 s += int(a) 50 s += int(a)
55 return s 51 return s
56 52
57
58 def __lshift__(self,other): 53 def __lshift__(self,other):
59 if type(other) == type(3) or type(other) == type(3.0): 54 if type(other) == type(3) or type(other) == type(3.0): o = other
60 o = other 55 elif hasattr(other,"sum"): o = other.sum()
61 elif hasattr(other,"sum"): 56 else: return None
62 o = other.sum()
63 else:
64 return None
65
66 result = [] 57 result = []
67 for die in self: 58 for die in self:
68 if die < o: 59 if die < o: result.append(die)
69 result.append(die)
70 return self.__class__(result) 60 return self.__class__(result)
71 61
72
73 def __rshift__(self,other): 62 def __rshift__(self,other):
74 63 if type(other) == type(3) or type(other) == type(3.0): o = other
75 if type(other) == type(3) or type(other) == type(3.0): 64 elif hasattr(other,"sum"): o = other.sum()
76 o = other 65 else: return None
77 elif hasattr(other,"sum"):
78 o = other.sum()
79 else:
80 return None
81
82 result = [] 66 result = []
83 for die in self: 67 for die in self:
84 if die > o: 68 if die > o: result.append(die)
85 result.append(die)
86 return self.__class__(result) 69 return self.__class__(result)
87 70
88
89 def __rlshift__(self,other): 71 def __rlshift__(self,other):
90 return self.__rshift__(other) 72 return self.__rshift__(other)
91 73
92
93 def __rrshift__(self,other): 74 def __rrshift__(self,other):
94 return self.__lshift__(other) 75 return self.__lshift__(other)
95 76
96
97
98 def __str__(self): 77 def __str__(self):
99 if len(self.data) > 0: 78 if len(self.data) > 0:
100 myStr = "[" + str(self.data[0]) 79 myStr = "[" + str(self.data[0])
101 for a in self.data[1:]: 80 for a in self.data[1:]:
102 myStr += "," 81 myStr += ","
103 myStr += str(a) 82 myStr += str(a)
104 myStr += "] = (" + str(self.sum()) + ")" 83 myStr += "] = (" + str(self.sum()) + ")"
105 else: 84 else: myStr = "[] = (0)"
106 myStr = "[] = (0)"
107 return myStr 85 return myStr
108 86
109
110 def __lt__(self,other): 87 def __lt__(self,other):
111 if type(other) == type(3) or type(other) == type(3.0): 88 if type(other) == type(3) or type(other) == type(3.0): return (self.sum() < other)
112 return (self.sum() < other) 89 elif hasattr(other,"sum"): return (self.sum() < other.sum())
113 elif hasattr(other,"sum"): 90 else: return UserList.UserList.__lt__(self,other)
114 return (self.sum() < other.sum()) 91
115 else:
116 return UserList.UserList.__lt__(self,other)
117
118
119 def __le__(self,other): 92 def __le__(self,other):
120 if type(other) == type(3) or type(other) == type(3.0): 93 if type(other) == type(3) or type(other) == type(3.0): return (self.sum() <= other)
121 return (self.sum() <= other) 94 elif hasattr(other,"sum"): return (self.sum() <= other.sum())
122 elif hasattr(other,"sum"): 95 else: return UserList.UserList.__le__(self,other)
123 return (self.sum() <= other.sum()) 96
124 else:
125 return UserList.UserList.__le__(self,other)
126
127
128 def __eq__(self,other): 97 def __eq__(self,other):
129 if type(other) == type(3) or type(other) == type(3.0): 98 if type(other) == type(3) or type(other) == type(3.0): return (self.sum() == other)
130 return (self.sum() == other) 99 elif hasattr(other,"sum"): return (self.sum() == other.sum())
131 elif hasattr(other,"sum"): 100 else: return UserList.UserList.__eq__(self,other)
132 return (self.sum() == other.sum()) 101
133 else:
134 return UserList.UserList.__eq__(self,other)
135
136
137 def __ne__(self,other): 102 def __ne__(self,other):
138 if type(other) == type(3) or type(other) == type(3.0): 103 if type(other) == type(3) or type(other) == type(3.0): return (self.sum() != other)
139 return (self.sum() != other) 104 elif hasattr(other,"sum"):return (self.sum() != other.sum())
140 elif hasattr(other,"sum"): 105 else: return UserList.UserList.__ne__(self,other)
141 return (self.sum() != other.sum()) 106
142 else:
143 return UserList.UserList.__ne__(self,other)
144
145
146 def __gt__(self,other): 107 def __gt__(self,other):
147 if type(other) == type(3) or type(other) == type(3.0): 108 if type(other) == type(3) or type(other) == type(3.0): return (self.sum() > other)
148 return (self.sum() > other) 109 elif hasattr(other,"sum"): return (self.sum() > other.sum())
149 elif hasattr(other,"sum"): 110 else: return UserList.UserList.__gt__(self,other)
150 return (self.sum() > other.sum()) 111
151 else:
152 return UserList.UserList.__gt__(self,other)
153
154
155 def __ge__(self,other): 112 def __ge__(self,other):
156 if type(other) == type(3) or type(other) == type(3.0): 113 if type(other) == type(3) or type(other) == type(3.0): return (self.sum() >= other)
157 return (self.sum() >= other) 114 elif hasattr(other,"sum"): return (self.sum() >= other.sum())
158 elif hasattr(other,"sum"): 115 else: return UserList.UserList.__ge__(self,other)
159 return (self.sum() >= other.sum()) 116
160 else:
161 return UserList.UserList.__ge__(self,other)
162
163
164 def __cmp__(self,other): 117 def __cmp__(self,other):
165 # this function included for backwards compatibility 118 # this function included for backwards compatibility
166 # As of 2.1, lists implement the "rich comparison" 119 # As of 2.1, lists implement the "rich comparison"
167 # methods overloaded above. 120 # methods overloaded above.
168 if type(other) == type(3) or type(other) == type(3.0): 121 if type(other) == type(3) or type(other) == type(3.0): return cmp(self.sum(), other)
169 return cmp(self.sum(), other) 122 elif hasattr(other,"sum"): return cmp(self.sum(), other.sum())
170 elif hasattr(other,"sum"): 123 else: return UserList.UserList.__cmp__(self,other)
171 return cmp(self.sum(), other.sum()) 124
172 else:
173 return UserList.UserList.__cmp__(self,other)
174
175
176
177 def __rcmp__(self,other): 125 def __rcmp__(self,other):
178 return self.__cmp__(other) 126 return self.__cmp__(other)
179 127
180
181 def __add__(self,other): 128 def __add__(self,other):
182 mycopy = copy.deepcopy(self) 129 mycopy = copy.deepcopy(self)
183 if type(other) == type(3) or type(other) == type(3.0): 130 if type(other) == type(3) or type(other) == type(3.0): other = [static_di(other)]
184 #if other < 0: 131 elif type(other) == type("test"): return self
185 # return self.__sub__(-other)
186 #other = [di(other,other)]
187 other = [static_di(other)]
188 #return self.sum() + other
189
190 elif type(other) == type("test"):
191 return self
192 mycopy.extend(other) 132 mycopy.extend(other)
193 #result = UserList.UserList.__add__(mycopy,other)
194 return mycopy 133 return mycopy
195 134
196
197 def __iadd__(self,other): 135 def __iadd__(self,other):
198 return self.__add__(other) 136 return self.__add__(other)
199 137
200
201 def __radd__(self,other): 138 def __radd__(self,other):
202 mycopy = copy.deepcopy(self) 139 mycopy = copy.deepcopy(self)
203 if type(other) == type(3) or type(other) == type(3.0): 140 if type(other) == type(3) or type(other) == type(3.0):
204 new_die = di(0) 141 new_die = di(0)
205 new_die.set_value(other) 142 new_die.set_value(other)
206 other = new_die 143 other = new_die
207 mycopy.insert(0,other) 144 mycopy.insert(0,other)
208 return mycopy 145 return mycopy
209 146
210
211 def __int__(self): 147 def __int__(self):
212 return self.sum() 148 return self.sum()
213 149
214
215 def __sub__(self,other): 150 def __sub__(self,other):
216 mycopy = copy.deepcopy(self) 151 mycopy = copy.deepcopy(self)
217 if type(other) == type(3) or type(other) == type(3.0): 152 if type(other) == type(3) or type(other) == type(3.0):
218 neg_die = static_di(-other) 153 neg_die = static_di(-other)
219 #neg_die.set_value(-other)
220 other = [neg_die] 154 other = [neg_die]
221 #return self.sum() - other 155 else: other = -other
222 else:
223 other = -other
224 mycopy.extend(other) 156 mycopy.extend(other)
225 return mycopy 157 return mycopy
226 158
227
228 def __rsub__(self,other): 159 def __rsub__(self,other):
229 mycopy = -copy.deepcopy(self) 160 mycopy = -copy.deepcopy(self)
230 #print type(other)
231 if type(other) == type(3) or type(other) == type(3.0): 161 if type(other) == type(3) or type(other) == type(3.0):
232 new_die = di(0) 162 new_die = di(0)
233 new_die.set_value(other) 163 new_die.set_value(other)
234 other = new_die 164 other = new_die
235 mycopy.insert(0,other) 165 mycopy.insert(0,other)
236 return mycopy 166 return mycopy
237 167
238
239 def __isub__(self,other): 168 def __isub__(self,other):
240 return self.__sub__(other) 169 return self.__sub__(other)
241 170
242
243 def __mul__(self,other): 171 def __mul__(self,other):
244 if type(other) == type(3) or type(other) == type(3.0): 172 if type(other) == type(3) or type(other) == type(3.0): return self.sum() * other
245 return self.sum() * other 173 elif hasattr(other,"sum"): return other.sum() * self.sum()
246 elif hasattr(other,"sum"): 174 else: return UserList.UserList.__mul__(self,other)
247 return other.sum() * self.sum()
248 else:
249 return UserList.UserList.__mul__(self,other)
250 175
251 176
252 def __rmul__(self,other): 177 def __rmul__(self,other):
253 return self.__mul__(other) 178 return self.__mul__(other)
254 179
255 180
256 def __div__(self,other): 181 def __div__(self,other):
257 if type(other) == type(3) or type(other) == type(3.0): 182 if type(other) == type(3) or type(other) == type(3.0): return float(self.sum()) / other
258 return float(self.sum()) / other 183 elif hasattr(other,"sum"): return float(self.sum()) / other.sum()
259 elif hasattr(other,"sum"): 184 else: return UserList.UserList.__div__(self,other)
260 return float(self.sum()) / other.sum()
261 else:
262 return UserList.UserList.__div__(self,other)
263 185
264 186
265 def __rdiv__(self,other): 187 def __rdiv__(self,other):
266 if type(other) == type(3) or type(other) == type(3.0): 188 if type(other) == type(3) or type(other) == type(3.0): return other / float(self.sum())
267 return other / float(self.sum()) 189 elif hasattr(other,"sum"): return other.sum() / float(self.sum())
268 elif hasattr(other,"sum"): 190 else: return UserList.UserList.__rdiv__(self,other)
269 return other.sum() / float(self.sum())
270 else:
271 return UserList.UserList.__rdiv__(self,other)
272 191
273 192
274 def __mod__(self,other): 193 def __mod__(self,other):
275 if type(other) == type(3) or type(other) == type(3.0): 194 if type(other) == type(3) or type(other) == type(3.0):
276 return self.sum()%other 195 return self.sum()%other