First of all, I have to say I am noob in amx scripting). I started just a few days ago. I never created neither special weapon nor "takedamage register with player class". I would register
client_damage event and check for the
wpnindex. For example, we have CSW_KNIFE damage. If a player reaches level 1, increase damage. If a player hold special version, increase damage. See no problem with it. If you are bothered about copying similar code sections, just create an array of relations normal weapon -> special one and loop through it. If this is not the case, then I need to see the full code.