I funktionen remove_master(mixed player) händer följande:
members[player] -= (members[player] & M_MASTER);
Vad gör den raden egentligen? Drar den bort M_MASTER (alltså 8) från player i matrisen (så "charlie" blir 20) eller tar den bort "charlie" helt och hållet?
Vidare, i funktionen add_master(mixed player,string school) så händer följande bl.a.
Vad sjutton gör den? Jag gissar på att den sätter bitarna M_MASTER och M_MAGE till true och nollar M_APPRENTICE, men har jag rätt?
Jag vill inte gärna rota i koden och prova, eftersom den kompileras och körs i realtid av spelarna, och det finns inga andra admins påloggade just nu... söker bara ett snabbt svar... =)
Man skulle kunna skriva:
members[player] &= !M_MASTER;
Men man borde skriva members[player] &= ~M_MASTER; eftersom ! är en logisk och inte bitvis operator ;) Samma sak gäller för minustecknet. Använd de operatorer som är avsedda för bitoperationer. Vidare, om du använder C++ (och inte C) kan det vara värt att veta att vector<bool> använder en specialiserad implementation som gör att den arbetar med bitsets i stället för arrayer.