import es
import playerlib
import usermsg
import gamethread

import sigilmod
from sigilmod import sigilmod

sigilName = 'Death Note'  
manaCost = 0

if not sigilmod.dict_infoSigils.has_key('Death Note'):
    sigilmod.dict_infoSigils['Death Note'] = {}
    sigilmod.dict_infoSigils['Death Note']['type'] = 'Active'
    sigilmod.dict_infoSigils['Death Note']['cost'] = '%s mana + 50\% of your current mana!'%manaCost                      
    sigilmod.dict_infoSigils['Death Note']['info'] = 'People that have hurt you will be listed for you to kill...'   
        
''' Type in a person's name that you have made contact with and it will kill them in 30 seconds. Only 2 names can be written down every round. '''

     
# Death Note Sigil Coding 

d_deathnote = {}
d_deathlist = []
d_cooldown = {}
def power():
    userid = str(es.getcmduserid())
    steamid = es.getplayersteamid(userid)
    player = playerlib.getPlayer(userid)
    
    sigil = sigilmod.getPowers(userid, sigilName)
    mana = sigilmod.dict_sigPlayers[steamid]['mana']
    a_manaCost = manaCost + int(mana * .5)
    if int(player.isdead) != 1:
        if sigil:
            if not d_cooldown.has_key(steamid):
                d_cooldown[steamid] = 1
            if d_cooldown[steamid] == 1:
                es.tell(userid, '#multi','#lightgreen[Active]#green[Death Note]#default To kill a player, you need to type in his or her name! (Requires %s mana)'%a_manaCost)
                d_cooldown[steamid] = 0
                gamethread.delayed(5, cooldown, steamid)
            
def poweroff():
    return
    
def cooldown(steamid):
    if d_cooldown[steamid] == 0:
        d_cooldown[steamid] = 1
    
def player_hurt(ev):
    attacker = ev['attacker']
    victim = ev['userid']
    a_steamid = es.getplayersteamid(attacker)
    v_steamid = es.getplayersteamid(victim)
    a_name = es.getplayername(attacker)
    v_name = es.getplayername(victim) 
    
    sigil = sigilmod.getPowers(attacker, sigilName)
    if sigil:
        if not d_deathnote.has_key(a_steamid):
            d_deathnote[a_steamid] = []
        if v_name not in d_deathnote[a_steamid]:
            d_deathnote[a_steamid].append(v_name)         
    sigil = sigilmod.getPowers(victim, sigilName)
    if sigil:
        if not d_deathnote.has_key(v_steamid):
            d_deathnote[v_steamid] = []
        if a_name not in d_deathnote[v_steamid]:
            d_deathnote[v_steamid].append(a_name)      
            
def player_say(ev):
    userid = ev['userid']
    text   = ev['text']  
    sigil  = sigilmod.getPowers(userid, sigilName)
    
    if sigil:
        process_deathnote(userid, text)
            
def process_deathnote(uid, text):
    killer = uid
    steamid = es.getplayersteamid(killer)
    if not playerlib.getPlayer(killer).get('isdead'): 
        for x in d_deathnote[steamid]: 
            if text in x:
                name = x
                victim = es.getuserid(name)
                if not playerlib.getPlayer(victim).get('isdead'):
                    mana = sigilmod.dict_sigPlayers[steamid]['mana']
                    a_manaCost = manaCost + int(mana * .5)
                    if mana >= a_manaCost:
                        sigilmod.dict_sigPlayers[steamid]['mana'] = mana - a_manaCost
                        d_deathlist.append(victim)  
                        heartAttack(victim, killer)
                        break
                    break
                    
def heartAttack(victim, killer):  
    usermsg.fade(victim, 1, 1000, 300, 255, 0, 0, 240) 
    es.emitsound('player', userid, 'sigilmod/sigil_heartbeat.wav', '1.0', '1.0')
    
    name = es.getplayername(victim)
    killer = es.getplayername(killer)
    es.msg('#multi', '#default[%s]#green[DEATH NOTE] :  #lightgreen%s'%(killer, name))
     
    gamethread.delayed(25, finalCheck, (victim, killer))                   
    
def finalCheck(victim, killer):
    gamethread.delayed(0, es.stopsound, (victim, 'sigilmod/sigil_heartbeat.wav'))
    if not playerlib.getPlayer(killer).get('isdead'):
        name = es.getplayername(victim)
        if name in d_deathlist: 
            es.server.queuecmd('damage %s 9999 32 %s'%(victim, killer))
        
def player_spawn(ev):
    userid = ev['userid']
    name = es.getplayername(userid)
    if name in d_deathlist:
        gamethread.delayed(0.1, es.stopsound, (userid, 'sigilmod/sigil_heartbeat.wav'))
    del d_deathlist[:]
    
def player_disconnect(ev):
    steamid = ev['networkid']
    if d_deathnote.has_key(steamid):
        del d_deathnote[steamid]
    
def player_death(ev):
    userid = ev['userid']
    steamid = es.getplayersteamid(userid)
    if d_deathnote.has_key(steamid):
        d_deathnote[steamid].clear()
        
def es_map_start():
    d_deathnote.clear()