//Items
    public bool add_item(Item.Item_name name)
    {
        if (isPlayer)
        {
            if (!Utility.unit_at_home())
            {
                return(false);
            }

            if (!host.check_gold(GameSceneConsts.item_prices [(int)name]))
            {
                return(false);
            }
        }

        for (int i = 0; i < GameSceneConsts.max_item; ++i)
        {
            if (items [i] == null)
            {
                host.change_gold(-GameSceneConsts.item_prices [(int)name]);
                items [i] = gameObject.AddComponent <Item>();
                items [i].init(name);
                base_u_stats      += items[i].stats_add_base;
                base_u_stats_mult += items[i].stats_mult_base;
                bonus_u_stats     += items[i].stats_add;
                bonus_u_stats     += items[i].stats_mult;
                update_all_stats();
                return(true);
            }
        }
        return(false);
    }
 public void init_post()
 {
     runtime_u_stats = base_u_stats;
     update_attack_speed();
     //update_movement_speed ();//called from outside
     autoAtkTimer = new Utility.Timer(runtime_u_stats.attack_speed);
     autoAtkTimer.start_timer();
     init_AtkTarget();
     init_resources();
     //netUnit = transform.parent.GetComponent<NetworkUnit>();
     //netUnit.init(runtime_u_stats.max_hp, runtime_u_stats.max_mana);
 }
 //update stats
 public virtual void update_all_stats()
 {
     runtime_u_stats = (base_u_stats * base_u_stats_mult + bonus_u_stats) * bonus_u_stats_mult;
     //print ("hululu");
     //print (base_u_stats.max_hp);
     //print (base_u_stats_mult.max_hp);
     //print (bonus_u_stats.max_hp);
     //print (bonus_u_stats_mult.max_hp);
     //print ("galulu");
     update_attack_speed();
     update_movement_speed();
 }
    //call this before actual init();
    public void init_pre()
    {
        netID          = transform.parent.gameObject.GetComponent <NetworkIdentity> ();
        self_col       = GetComponent <Collider> ();
        cur_target_obj = null;
        status         = new List <Status> ();
        flags          = new unit_flags();
        flags.init();

        if ((!netID.isLocalPlayer) && (isPlayer))
        {
            return;
        }

        //stats
        base_u_stats = new unit_stats();
        base_u_stats.init();
        base_u_stats_mult = new unit_stats();
        base_u_stats_mult.init_to_1();
        u_stats_growth = new unit_stats();
        u_stats_growth.init();
        bonus_u_stats = new unit_stats();
        bonus_u_stats.init();
        bonus_u_stats_mult = new unit_stats();
        bonus_u_stats_mult.init_to_1();

        inCombat_timer = new Utility.Timer(GameSceneConsts.in_combat_time);
        regen_timer    = new Utility.Timer(GameSceneConsts.regen_interval);
        regen_timer.start_timer();
        items = new Item[GameSceneConsts.max_item + GameSceneConsts.max_supp_item];
        for (int i = 0; i < items.Length; ++i)
        {
            items [i] = null;
        }
        Onhit_dmg = new Types.damage_combo();
        Onhit_dmg.init();
        recent_dmg_receive = new Types.damage_combo();
        recent_dmg_receive.init();
    }