54 lines
1.2 KiB
Python
54 lines
1.2 KiB
Python
import Crossfire
|
|
import random
|
|
|
|
me = Crossfire.WhoAmI()
|
|
ac = Crossfire.WhoIsActivator()
|
|
r = random.random()
|
|
|
|
# Event is called before object is applied, so changing our properties just
|
|
# before it's actually applied instead of when removed
|
|
#
|
|
# To prevent insane stats like (Dex+127)(Con+85)(Int+57) (see bug #2369654) we
|
|
# limit allowed range to +/- 2 for each stat. If we don't change due to these
|
|
# limits, we will not fall back to next (to make it harder to get a "perfect"
|
|
# ring), but instead just do nothing.
|
|
if (me.Applied == 0):
|
|
rest = None
|
|
if me.Quantity > 1:
|
|
rest = me.Split(me.Quantity - 1)
|
|
|
|
if (r <= 0.01):
|
|
if me.Dex < 2:
|
|
me.Cursed= 1
|
|
me.Dex = me.Dex + 1
|
|
me.Identified=0
|
|
elif (r <= 0.02):
|
|
if me.Int < 2:
|
|
me.Cursed= 1
|
|
me.Int = me.Int + 1
|
|
me.Identified=0
|
|
elif (r <= 0.03):
|
|
if me.Con < 2:
|
|
me.Cursed= 1
|
|
me.Con = me.Con + 1
|
|
me.Identified=0
|
|
# Negative effects
|
|
elif (1 - r <= 0.01):
|
|
if me.Con > -2:
|
|
me.Cursed= 1
|
|
me.Con = me.Con - 1
|
|
me.Identified=0
|
|
elif (1 - r <= 0.02):
|
|
if me.Int > -2:
|
|
me.Cursed= 1
|
|
me.Int = me.Int - 1
|
|
me.Identified=0
|
|
elif (1 - r <= 0.03):
|
|
if me.Dex > -2:
|
|
me.Cursed= 1
|
|
me.Dex = me.Dex - 1
|
|
me.Identified=0
|
|
|
|
if rest:
|
|
rest.InsertInto(me.Env)
|