Here are some thoughts:
If the victim dies, I don't see why you shouldn't be setting all 4 variables to zero. Also, having if statements for both "variable" and "not variable" is unnecessary, simply use an else condition, it will be more efficient.
Code:
if(zp_core_is_zombie(victim))
{
g_count_victim_human[victim] = 0;
g_fDamage_Human[victim][attacker] = 0.0;
}
if(!zp_core_is_zombie(victim))
{
g_count_victim_zombie[victim] = 0;
g_fDamage_Zombie[victim][attacker] = 0.0;
}
I'm not sure if you just stripped a whole bunch of code out or not but you have a couple client_print() calls that reference an undefined variable 'id'.
Are you sure it's just an issue with calling client_print() so many times crazy fast? I feel like there have been issues trying to do this in other threads.
Try removing all the ZP craziness to see if your basic logic is done correctly as well as adding debug logging to see what the values of various variables are during execution. Making the code much simpler should make it easier to debug and determine what you might be doing wrong. The zombie vs human part makes things more complex and I've never played ZP so I'm not 100% how that is all done. Then, once you have that working correctly, start adding the ZP stuff back in.
Regarding seeing players that you didn't expect to see, realize that the entity index (1 through 32) are not unique to unique players. I.e. if a player leaves and someone else joins, they might get the same entity index. So, if you don't do proper connect/disconnect cleanup of the variables then you might see the wrong person show up.
__________________