AVR - ATmega16 - Timer config
I am trying to create a TickCount.

You'll need a global variable(big enough) to hold the number of seconds(49.7*24*60*60*1000 = 32bit long value OR a ulong) elapsed, increment it inside your isr( it seems you did this part right !). 

volatile uint32_t elapsed_ms;

then you'll need function that returns this value.

uint32_t TickCount(void){
 return elapsed_ms;
}


Now we come to part two:
TickCountSys increases once every milli second

If you want to do it with 8MHz Xtal + Timer 0 Overflow, then you cannot achieve precise 1ms ticks. Reason being 8000 clock pulses can not overflow the timer 0. If you use no prescalar then, T0 overflows = 8000/256 = 31.25 times. if you prescale the timer clock with T/8 setting then 1000/256 = 3.90625 close to 4 Overflows. 

Assuming that you chose to go ahead with the T/8 pre-scalar, then you'll need to modify the isr body to something like    

      static uint8_t temp_count=0;
        temp_count++;
      if(temp_count &gt;= 4){
        temp_count = 0;
        elapsed_ms++;
        //add a method here to roll the 49.7 day completion.
      }


That's it.
From your code it seems you've done the timer and interrupt settings correctly. But your code is quite fuzzy and I failed to locate any function named TickCount or similar.

I'd suggest you to start off with a simple code, like blink a led on timer0 overflow( with a HIGH PRESCALAR value like T/1024). Then gradually add on the code logic.
Good Luck.