108 |
MakeGameOffer = 12, |
MakeGameOffer = 12, |
109 |
GameOffer = 13, |
GameOffer = 13, |
110 |
DoDeclineGame = 14, |
DoDeclineGame = 14, |
111 |
DeclineGame = 15 |
DeclineGame = 15, |
112 |
|
ListMembers = 16, |
113 |
|
ListAdmins = 17, |
114 |
|
ListSilenced = 18, |
115 |
|
ListBanned = 19 |
116 |
}; |
}; |
117 |
|
|
118 |
struct room |
struct room |
184 |
|
|
185 |
rm.name = roomname; |
rm.name = roomname; |
186 |
|
|
187 |
|
in >> std::skipws >> member >> comma; |
188 |
while(in.good()) { |
while(in.good()) { |
|
in >> std::skipws >> member >> comma; |
|
189 |
rm.members.push_back(member); |
rm.members.push_back(member); |
190 |
|
/* |
191 |
std::cout << member; |
std::cout << member; |
192 |
std::cout << "\n"; |
std::cout << "\n"; |
193 |
std::cout.flush(); |
std::cout.flush(); |
194 |
|
*/ |
195 |
if(comma == ';') break; |
if(comma == ';') break; |
196 |
|
in >> std::skipws >> member >> comma; |
197 |
} |
} |
198 |
|
|
199 |
|
in >> std::skipws >> admin >> comma; |
200 |
while(in.good()) { |
while(in.good()) { |
|
in >> std::skipws >> admin >> comma; |
|
201 |
rm.admins.push_back(admin); |
rm.admins.push_back(admin); |
|
std::cout << admin; |
|
|
std::cout << "\n"; |
|
|
std::cout.flush(); |
|
202 |
if(comma == ';') break; |
if(comma == ';') break; |
203 |
|
in >> std::skipws >> admin >> comma; |
204 |
} |
} |
205 |
|
|
206 |
|
in >> std::skipws >> silenced >> comma; |
207 |
while(in.good()) { |
while(in.good()) { |
|
in >> std::skipws >> silenced >> comma; |
|
208 |
rm.silenced.push_back(silenced); |
rm.silenced.push_back(silenced); |
|
std::cout << silenced; |
|
|
std::cout << "\n"; |
|
|
std::cout.flush(); |
|
209 |
if(comma == ';') break; |
if(comma == ';') break; |
210 |
|
in >> std::skipws >> silenced >> comma; |
211 |
} |
} |
212 |
|
|
213 |
|
in >> std::skipws >> banned >> comma; |
214 |
while(in.good()) { |
while(in.good()) { |
|
in >> std::skipws >> banned >> comma; |
|
215 |
rm.banned.push_back(banned); |
rm.banned.push_back(banned); |
|
std::cout << banned; |
|
|
std::cout << "\n"; |
|
|
std::cout.flush(); |
|
216 |
if(comma == ';') break; |
if(comma == ';') break; |
217 |
|
in >> std::skipws >> banned >> comma; |
218 |
} |
} |
219 |
|
|
220 |
rarray.insert(std::pair<int, room>(r, rm)); |
rarray.insert(std::pair<int, room>(r, rm)); |
460 |
} |
} |
461 |
|
|
462 |
return COM_OK; |
return COM_OK; |
463 |
|
} |
464 |
|
|
465 |
|
/* These four commands, particularly the silenced |
466 |
|
and banned lists, should probably fall under |
467 |
|
gov't policy rules. Imagine the fun of a |
468 |
|
police stateroom where you don't even know who |
469 |
|
has been...eliminated. (Gosh, what does that |
470 |
|
remind me of?) |
471 |
|
*/ |
472 |
|
int com_roomlistmembers(int p, param_list param) |
473 |
|
{ |
474 |
|
int r = param[0].val.integer; |
475 |
|
char login[MAX_NAME]; |
476 |
|
|
477 |
|
// lookup room |
478 |
|
std::map<int, room>::iterator rmi = rarray.find(r); |
479 |
|
if(rmi == rarray.end()) return COM_NOSUCHROOM; |
480 |
|
room& rm = rmi->second; |
481 |
|
|
482 |
|
//remember that we are storing UIDs, not parray |
483 |
|
//indices here! |
484 |
|
for(std::vector<int>::iterator i = rm.members.begin(); |
485 |
|
i != rm.members.end(); ++i) { |
486 |
|
if(find_name(*i, login) != 0) return COM_NOTIFYADMIN; |
487 |
|
std::string s = login; |
488 |
|
s += "\n"; |
489 |
|
ReplyOccupant(r, p, ROOM + ListMembers, s); |
490 |
|
} |
491 |
|
|
492 |
|
return COM_OK; |
493 |
|
} |
494 |
|
|
495 |
|
int com_roomlistadmins(int p, param_list param) |
496 |
|
{ |
497 |
|
int r = param[0].val.integer; |
498 |
|
char login[MAX_NAME]; |
499 |
|
|
500 |
|
// lookup room |
501 |
|
std::map<int, room>::iterator rmi = rarray.find(r); |
502 |
|
if(rmi == rarray.end()) return COM_NOSUCHROOM; |
503 |
|
room& rm = rmi->second; |
504 |
|
|
505 |
|
//remember that we are storing UIDs, not parray |
506 |
|
//indices here! |
507 |
|
for(std::vector<int>::iterator i = rm.admins.begin(); |
508 |
|
i != rm.admins.end(); ++i) { |
509 |
|
if(find_name(*i, login) != 0) return COM_NOTIFYADMIN; |
510 |
|
std::string s = login; |
511 |
|
s += "\n"; |
512 |
|
ReplyOccupant(r, p, ROOM + ListAdmins, s); |
513 |
|
} |
514 |
|
|
515 |
|
return COM_OK; |
516 |
|
} |
517 |
|
|
518 |
|
int com_roomlistsilenced(int p, param_list param) |
519 |
|
{ |
520 |
|
int r = param[0].val.integer; |
521 |
|
char login[MAX_NAME]; |
522 |
|
|
523 |
|
// lookup room |
524 |
|
std::map<int, room>::iterator rmi = rarray.find(r); |
525 |
|
if(rmi == rarray.end()) return COM_NOSUCHROOM; |
526 |
|
room& rm = rmi->second; |
527 |
|
|
528 |
|
//remember that we are storing UIDs, not parray |
529 |
|
//indices here! |
530 |
|
for(std::vector<int>::iterator i = rm.silenced.begin(); |
531 |
|
i != rm.silenced.end(); ++i) { |
532 |
|
if(find_name(*i, login) != 0) return COM_NOTIFYADMIN; |
533 |
|
std::string s = login; |
534 |
|
s += "\n"; |
535 |
|
ReplyOccupant(r, p, ROOM + ListSilenced, s); |
536 |
|
} |
537 |
|
|
538 |
|
return COM_OK; |
539 |
|
} |
540 |
|
|
541 |
|
int com_roomlistbanned(int p, param_list param) |
542 |
|
{ |
543 |
|
int r = param[0].val.integer; |
544 |
|
char login[MAX_NAME]; |
545 |
|
|
546 |
|
// lookup room |
547 |
|
std::map<int, room>::iterator rmi = rarray.find(r); |
548 |
|
if(rmi == rarray.end()) return COM_NOSUCHROOM; |
549 |
|
room& rm = rmi->second; |
550 |
|
|
551 |
|
//remember that we are storing UIDs, not parray |
552 |
|
//indices here! |
553 |
|
for(std::vector<int>::iterator i = rm.banned.begin(); |
554 |
|
i != rm.banned.end(); ++i) { |
555 |
|
if(find_name(*i, login) != 0) return COM_NOTIFYADMIN; |
556 |
|
std::string s = login; |
557 |
|
s += "\n"; |
558 |
|
ReplyOccupant(r, p, ROOM + ListBanned, s); |
559 |
|
} |
560 |
|
|
561 |
|
return COM_OK; |
562 |
} |
} |
563 |
|
|
564 |
int com_roomlistrooms(int p, param_list param){ |
int com_roomlistrooms(int p, param_list param){ |