maps/python/items/ring_occidental_mages.py

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)