# autoprize 26/09/04 smong
# revision 1 30/09/04
# revision 2 01/10/04
# revision 3 26/01/05

import re
import asss

game = asss.get_interface(asss.I_GAME)
chat = asss.get_interface(asss.I_CHAT)

def make_arena_timer(initial, interval, arena):
    def timer():
        game.GivePrize(arena, arena.ap_prize, arena.ap_amount)
        return 1
    return asss.set_timer(timer, initial, interval)

def aaction(a, action):
    if action == asss.AA_CREATE:
        # initialising all per-arena data here to avoid confusion later
        a.ap_ref = None
        a.ap_prize = 17
        a.ap_amount = 1
        a.ap_interval = 1000
    elif action == asss.AA_DESTROY:
        a.ap_ref = None

cb1 = asss.reg_callback(asss.CB_ARENAACTION, aaction)

def c_autoprize(cmd, params, p, targ):
    """\
Module: <py> autoprize
Args: off | <prize> [-t<seconds>] [-a<amount>] | status
Targets: none
prizes the whole arena -a prizes every -t seconds (minimum 2 seconds)
"""
    if params == "off":
        if p.arena.ap_ref:
            chat.SendMessage(p, "turning autoprize off")
        p.arena.ap_ref = None
        p.arena.ap_amount = 1
        p.arena.ap_interval = 1000
    else:
        # search for valid params
        m = re.search("^(-?\d+)", params)
        if m:
            p.arena.ap_prize = int(m.group(1))

            # search for -a<amount>
            m = re.search("\s-a(\d+)", params)
            if m:
                p.arena.ap_amount = int(m.group(1))
                if p.arena.ap_amount < 1:
                    p.arena.ap_amount = 1

            # search for -t<seconds>
            m = re.search("\s-t(\d+)", params)
            if m:
                p.arena.ap_interval = int(m.group(1))
                if p.arena.ap_interval < 2:
                    p.arena.ap_interval = 2
                p.arena.ap_interval = p.arena.ap_interval * 100

            p.arena.ap_ref = make_arena_timer(10, p.arena.ap_interval, p.arena)

        # print status
	if p.arena.ap_ref:
            chat.SendMessage(p, "autoprize: %dx %+d every %d seconds" \
                % (p.arena.ap_amount, p.arena.ap_prize, p.arena.ap_interval / 100))
        else:
            chat.SendMessage(p, "autoprize: off")

cmd1 = asss.add_command("autoprize", c_autoprize)

