ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/compat.C
(Generate patch)

Comparing deliantra/server/common/compat.C (file contents):
Revision 1.9 by root, Thu Apr 15 22:11:47 2010 UTC vs.
Revision 1.10 by root, Thu Apr 29 15:49:04 2010 UTC

118 sint64 omin = r_min; 118 sint64 omin = r_min;
119 sint64 range = max (0, r_max - r_min + 1); 119 sint64 range = max (0, r_max - r_min + 1);
120 int base = range > 2 ? 20 : 50; /* d2 and d3 are corner cases */ 120 int base = range > 2 ? 20 : 50; /* d2 and d3 are corner cases */
121 121
122 /* 122 /*
123 * Make a call to get two 32 bit unsigned random numbers, and just to 123 * Make a call to get two 32 bit unsigned random numbers, and just do
124 * a little bitshifting. 124 * a little bitshifting.
125 */ 125 */
126 sint64 ran = (sint64) rndm.next () ^ ((sint64) rndm.next () << 31); 126 sint64 ran = (sint64) rndm.next () ^ ((sint64) rndm.next () << 31);
127 127
128 if (op->type != PLAYER) 128 if (op->stats.luck)
129 return ((ran % range) + r_min); 129 {
130
131 int luck = op->stats.luck; 130 int luck = op->stats.luck;
132 131
133 if (rndm (base) < min (10, abs (luck))) 132 if (rndm (base) < min (10, abs (luck)))
134 { 133 {
135 /* we have a winner */ 134 /* we have a winner */
136 ((luck > 0) ? (luck = 1) : (luck = -1)); 135 luck = luck > 0 ? 1 : -1;
136
137 range -= luck; 137 range -= luck;
138 if (range < 1) 138 if (range < 1)
139 return (omin); /*check again */ 139 return omin; /*check again */
140 140
141 ((goodbad) ? (r_min += luck) : (range)); 141 if (goodbad)
142 r_min += luck;
142 143
143 return (max (omin, min (r_max, (ran % range) + r_min))); 144 return (max (omin, min (r_max, (ran % range) + r_min)));
145 }
144 } 146 }
145 147
146 return ran % range + r_min; 148 return ran % range + r_min;
147} 149}
148 150

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines