Hey, my bad, my fault ! I forgotten one line:
the correct code for FREE_PRIVATE() is this one
Code:
if (pEdict->pvPrivateData != NULL)
FREE_PRIVATE (pEdict); // free our predecessor's private data
pEdict->pvPrivateData = NULL; // fools the private data pointer
pEdict->v.frags = 0; // reset his frag count
the last line is needed because the player's frags are stored outside of the private data. Freeing the private data resets the death count and any other statistic, but you also need to reset the frags count which is the only player statistics held in the entvars.