PageRenderTime 55ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 1ms

/bots/mamer/CommandEntry.cc

https://bitbucket.org/Mekk/track-chessd-samba_lasker
C++ | 1148 lines | 959 code | 112 blank | 77 comment | 301 complexity | 253911426d7d44d112e17f212a933875 MD5 | raw file
Possible License(s): GPL-2.0
  1. //--------------------------------------------------------------------------
  2. // CommandEntry.cc - Source file for the CommandEntry
  3. //
  4. // Matthew E. Moses & Michael A. Long
  5. //
  6. // $Log$
  7. // Revision 1.15 2002/07/02 00:05:19 tridge
  8. // got rid of a bunch of RCS tags now that its in CVS
  9. //
  10. // Revision 1.14 2002/07/02 00:02:40 tridge
  11. // - fixed compile on g++ 2.96
  12. // - updated for lasker 'rmatch'
  13. //
  14. // Revision 1.13 1998/09/10 19:57:17 mlong
  15. // lots of little bug fixes and a few new features
  16. //
  17. // Revision 1.12 1998/06/18 18:41:30 mlong
  18. // prepairing for yet another move.
  19. //
  20. // Revision 1.11 1998/06/08 20:41:17 mlong
  21. // changes to the list tournies function
  22. //
  23. // Revision 1.10 1998/04/29 15:23:19 mlong
  24. // prepairing for the move to daimi
  25. // new sorting routine.
  26. //
  27. // Revision 1.9 1998/04/18 18:46:04 mlong
  28. // fixed delete bug &
  29. // added delete tourney function
  30. //
  31. // Revision 1.5 1997/10/08 21:03:35 chess
  32. // preparing for move to oracle machine at eworks.
  33. //
  34. // Revision 1.4 1997/05/15 18:27:53 chess
  35. // added Player and TourneyPlayers support
  36. // added HandleGetPlayerInfo & HandleGetGameInfo
  37. //
  38. // Revision 1.3 1997/04/13 03:14:35 chess
  39. // commands to do user statistic manipulationn added:
  40. // setinfo - sets a whole line of information
  41. // setstat - sets a particular stat
  42. // addabuse - adds (or deletes) abuse points.
  43. //
  44. // Revision 1.2 1997/03/21 15:32:36 moses
  45. // added the shutdown command.
  46. //
  47. // Revision 1.1 1996/10/01 20:14:43 moses
  48. // Initial revision
  49. //
  50. //--------------------------------------------------------------------------
  51. #include "CommandEntry.hh"
  52. #include "Mamer.hh"
  53. extern Mamer gMamer;
  54. //- AddAbuse -------------------------------------------------------
  55. int CommandEntry::AddAbuse(User *user, param_list params) {
  56. User *u = NULL;
  57. char name[MAX_WORD_SIZE];
  58. int needToDelete=0;
  59. if(params[0].type == TYPE_WORD) {
  60. strcpy(name, params[0].val.word);
  61. }
  62. u = gMamer.FindUser(name);
  63. if(u == NULL) {
  64. u = new User();
  65. u->LoadPlayer(gMamer.userFilePath, name); // Loads the player info into memory and saves current info to disk
  66. needToDelete = 1;
  67. }
  68. if((u->GetManagerLevel() >= user->GetManagerLevel()) &&
  69. (user->GetManagerLevel() != PRESIDENT)) {
  70. if(needToDelete) delete u;
  71. gMamer.TellUser(NoPermissions, user->name);
  72. return 0;
  73. }
  74. if(u != NULL) {
  75. if(params[1].type == TYPE_INT) {
  76. u->AddAbuse(params[1].val.integer);
  77. } else {
  78. u->AddAbuse(10);
  79. }
  80. u->SavePlayer(gMamer.userFilePath);
  81. if(u->GetAbuse() >= MAX_CHAOS_POINTS)
  82. gMamer.XServerCom("%s %s%s", "+ censor", u->name, "\n");
  83. gMamer.TellUser(ChangedAbuse, user->name, u->name, u->GetAbuse());
  84. } else {
  85. gMamer.TellUser(NotFound, user->name, name);
  86. }
  87. if(needToDelete) delete u;
  88. return(1);
  89. } //- End of AddAbuse
  90. //- FingerUser -------------------------------------------------------
  91. int CommandEntry::FingerUser(User *user, param_list params) {
  92. User *u = NULL;
  93. int notFound=1;
  94. char name[32];
  95. memset(name, '\0', 32);
  96. if(params[0].type == TYPE_WORD) {
  97. strncpy(name, params[0].val.word, MIN(31, (int)strlen(params[0].val.word)));
  98. } else {
  99. strcpy(name, user->name);
  100. }
  101. u = gMamer.FindUser(name);
  102. if(u != NULL) notFound = 0;
  103. if(notFound) {
  104. u = new User();
  105. notFound = u->LoadPlayer(gMamer.userFilePath, name);
  106. notFound = !notFound;
  107. }
  108. if(!notFound) {
  109. gMamer.XServerCom("%s %s %s%s%s", "qtell", user->name, "\\n", u->name, "'s Stats:\\n\\n");
  110. gMamer.XServerCom("%-17s %5s %4s %4s %3s %3s %3s %3s %5s %6s%-17s %4s %3s %3s %3s %3s %3s %3s %5s %6s",
  111. "Name", " Tnys", " W ", " L ", " D ", "1st", "2nd", "3rd", "Chaos", "Rating\\n",
  112. "-----------------", "-----", "----", "----", "---", "---", "---", "---", "-----","------\\n");
  113. gMamer.XServerCom("%-17s %5ld %4ld %4ld %3ld %3ld %3ld %3ld %5d %6.2f %s",
  114. u->name, u->GetPlayedTourneys(), u->GetWins(), u->GetLosses(), u->GetDraws(),
  115. u->GetFirsts(), u->GetSeconds(), u->GetThirds(), u->GetAbuse(), u->GetRating(), "\\n");
  116. if(u->GetManagerLevel() > USER) {
  117. gMamer.XServerCom("%s %d %s %d %s", "\\nManager Level:", u->GetManagerLevel(),
  118. " Managed Tourneys:", u->GetManagedTourneys(), "\\n");
  119. }
  120. gMamer.XServerCom("%s", "\n");
  121. } else {
  122. gMamer.TellUser(NotFound, user->name, name);
  123. }
  124. if(notFound) delete u;
  125. return(1);
  126. } //- End of FingerUser
  127. //- ListRank ----------------------------------------------------------
  128. int CommandEntry::ListRank(User *user, param_list params) {
  129. float rating=0;
  130. int start=0, i=0, end=0, tourneys=0, counter=0;
  131. char filename[128], name[32], name2[32];
  132. FILE *theFile;
  133. memset(name, '\0', 32);
  134. memset(name2, '\0', 32);
  135. switch (params[0].type) {
  136. case TYPE_WORD:
  137. strcpy(name, params[0].val.word);
  138. break;
  139. case TYPE_INT:
  140. start = params[0].val.integer;
  141. if(start <= 0) {start = 1;}
  142. break;
  143. default:
  144. strcpy(name, user->name);
  145. break;
  146. }
  147. sprintf(filename, "%s/rank", gMamer.dataFilePath);
  148. if(params[0].type != TYPE_INT) {
  149. if((theFile = fopen(filename, "r"))) {
  150. while(fscanf(theFile, "%s %d %f", name2, &tourneys, &rating) > 0) {
  151. if(!(strncasecmp(name2, name, strlen(name)))) {
  152. start = i+1;
  153. break;
  154. }
  155. i++;
  156. }
  157. fclose(theFile);
  158. } else {
  159. gMamer.TellUser(NotFound, user->name, filename);
  160. return(0);
  161. }
  162. }
  163. if(!(start)) {
  164. gMamer.TellUser(NotFound, user->name, name);
  165. return(1);
  166. }
  167. start = start - 10;
  168. end = start + 20;
  169. if(start <= 0) {start = 1; end = 21;}
  170. gMamer.XServerCom("%s %s %s %s%s %-5s %-18s %5s %6s %5s %-18s %5s %6s", "qtell", user->name, "\\n", gMamer.username,
  171. "'s Rankings:\\n\\n", "Rank", "Name", "Trnys", "Rating\\n",
  172. "-----", "------------------", "-----", "------\n");
  173. gMamer.XServerCom("%s %s %s", "qtell", user->name, "\\n");
  174. if(!(theFile = fopen(filename, "r"))) { return(0); }
  175. i = 1; counter = 1;
  176. while(fscanf(theFile, "%s %d %f", name2, &tourneys, &rating) > 0) {
  177. if((i >= start) && (i < end)) {
  178. if(i == start) { counter = 1; }
  179. gMamer.XServerCom(" %-5d %-18s %5d %6.2f\\n", i, name2, tourneys, rating);
  180. if(((counter % 10) == 0) && (counter > 0)) {
  181. gMamer.XServerCom("%s", "\n");
  182. if(i != (end -1)) {
  183. gMamer.XServerCom("%s %s %s", "qtell", user->name, "\\n");
  184. }
  185. }
  186. }
  187. if(i > end) { break; }
  188. i++; counter++;
  189. }
  190. fclose(theFile);
  191. if(i <= end) { gMamer.XServerCom("%s", "\n"); }
  192. return(1);
  193. }
  194. //- ListManagers ------------------------------------------------------
  195. int CommandEntry::ListManagers(User *user, param_list params) {
  196. int i=1, needToDelete=0;
  197. long last;
  198. char filename[256], manager[NAMELEN], date[16];
  199. User *u=NULL, *newUser = NULL;
  200. struct tm *tmpDate;
  201. FILE *theFile;
  202. i = params[0].type; // just to get rid of the compiler messages
  203. sprintf(filename, "%s/managers", gMamer.dataFilePath);
  204. if((theFile = fopen(filename, "r"))) {
  205. gMamer.XServerCom("%s %s %s %s%s", "qtell", user->name, "\\n", gMamer.username, "'s Manager List:\\n\\n");
  206. gMamer.XServerCom("%2s%-18s %3s %4s %-8s%2s%-18s %3s %4s %-8s%s",
  207. "","Name","Lvl","Tnys","Last", "","Name","Lvl","Tnys","Last", "\\n");
  208. gMamer.XServerCom(" %-18s %3s %4s %-8s%2s%-18s %3s %4s %-8s%s",
  209. "-----------------", "---", "----", "--------", "",
  210. "-----------------", "---", "----", "--------", "", "\\n");
  211. i=1;
  212. memset(date, '\0', 64);
  213. gMamer.XServerCom("\n%s %s ", "qtell", user->name);
  214. while(fscanf(theFile, "%s", manager) > 0) {
  215. needToDelete = 0;
  216. u = gMamer.FindUser(manager);
  217. if(u == NULL) {
  218. needToDelete = 1;
  219. newUser = new User();
  220. u = newUser;
  221. }
  222. if(0 != u->LoadPlayer(gMamer.userFilePath, manager)) {
  223. last = u->GetLast();
  224. if(last) {
  225. tmpDate = localtime(&last);
  226. sprintf(date, "%02d/%02d/%02d", tmpDate->tm_mon+1, tmpDate->tm_mday, tmpDate->tm_year);
  227. } else {
  228. sprintf(date, "none");
  229. }
  230. } else {
  231. sprintf(date, "%s", "none");
  232. }
  233. gMamer.XServerCom("%2s%-18s %3d %4d %8s%s",
  234. ((gMamer.UserIsLoaded(manager)) ? "+" : " "),
  235. manager, u->GetManagerLevel(), u->GetManagedTourneys(), date, (i%2)==0 ? "\\n":"");
  236. if(((i % 20) == 0) && (i > 0)) {
  237. i = 0;
  238. gMamer.XServerCom("%s %s %s %s", "\n", "qtell", user->name, "\\n");
  239. }
  240. i++;
  241. if(needToDelete) {
  242. u = NULL;
  243. delete(newUser);
  244. }
  245. }
  246. fclose(theFile);
  247. gMamer.XServerCom("%s", "\n");
  248. return(1);
  249. }
  250. gMamer.TellUser(NotFound, user->name, filename);
  251. return(0);
  252. }
  253. //- LoadedUsers -------------------------------------------------------
  254. int CommandEntry::LoadedUsers(User *user, param_list params) {
  255. User *u = NULL;
  256. LinkListIter<User> userIter(gMamer.userList);
  257. int i, count=0;
  258. i = params[0].type;
  259. i = 1;
  260. gMamer.XServerCom("qtell %s \\nLoaded Users:\\n\\n", user->name);
  261. while((u = userIter.Next())) {
  262. count++;
  263. gMamer.XServerCom(" %18s%s", u->name, (i%3)==0 ? "\\n":"");
  264. if(((i % 30) == 0) && (i > 0)) {
  265. i = 0;
  266. gMamer.XServerCom("%s %s %s %s", "\n", "qtell", user->name, "\\n");
  267. }
  268. i++;
  269. }
  270. gMamer.XServerCom("%sTotal: %i%s", "\\n", count, "\n");
  271. return(1);
  272. } //- End of LoadedUser
  273. //- SetCommandLevel ----------------------------------------------------
  274. int CommandEntry::SetCommandLevel(User *user, param_list params) {
  275. Command *c = NULL;
  276. c = gMamer.FindCommand(params[0].val.word, user->name);
  277. if(c != NULL) {
  278. if((c->GetManagerLevel() <= user->GetManagerLevel()) &&
  279. (params[1].val.integer <= user->GetManagerLevel())) {
  280. c->SetManagerLevel((ranks)params[1].val.integer);
  281. gMamer.TellUser(ChangedCommandLevel, user->name, params[0].val.word, params[1].val.integer);
  282. } else
  283. gMamer.TellUser(NoPermissions, user->name);
  284. } else
  285. return 0;
  286. return 1;
  287. }
  288. //- SetInfo -------------------------------------------------------
  289. int CommandEntry::SetInfo(User *user, param_list params) {
  290. User *u = NULL;
  291. int notFound=1, i;
  292. char name[32];
  293. memset(name, '\0', 32);
  294. if(params[0].type == TYPE_WORD) {
  295. strncpy(name, params[0].val.word, MIN(31, (int)strlen(params[0].val.word)));
  296. }
  297. u = gMamer.FindUser(name);
  298. if(u != NULL) notFound = 0;
  299. if(notFound) {
  300. u = new User();
  301. u->LoadPlayer(gMamer.userFilePath, name);
  302. }
  303. if(u != NULL) {
  304. if((u->GetManagerLevel() >= user->GetManagerLevel()) &&
  305. (user->GetManagerLevel() != PRESIDENT)) {
  306. if(notFound) delete u;
  307. gMamer.TellUser(NoPermissions, user->name);
  308. return 0;
  309. }
  310. for(i=1; i<=7; i++)
  311. u->SetStatistic(i, params[i].val.integer);
  312. u->SavePlayer(gMamer.userFilePath);
  313. gMamer.TellUser(ChangedInfo, user->name, u->name);
  314. } else {
  315. gMamer.TellUser(NotFound, user->name, name);
  316. }
  317. if(notFound) delete u;
  318. return(1);
  319. } //- End of SetInfo
  320. //- SetManagerLevel -------------------------------------------------------
  321. int CommandEntry::SetManagerLevel(User *user, param_list params) {
  322. User *u = NULL;
  323. int notFound=1, new_level=1, length=0, i=0;
  324. char name[32];
  325. if(params[0].type == TYPE_WORD) {
  326. length = strlen(params[0].val.word);
  327. memset(name, '\0', 32);
  328. while((i < 31) && (i < length)) {
  329. name[i] = tolower(params[0].val.word[i]);
  330. i++;
  331. }
  332. }
  333. new_level = params[1].val.integer;
  334. u = gMamer.FindUser(name);
  335. if(u != NULL) notFound = 0;
  336. if(notFound) {
  337. u = new User();
  338. u->LoadPlayer(gMamer.userFilePath, name);
  339. }
  340. if(((u->GetManagerLevel() >= user->GetManagerLevel()) ||
  341. (new_level >= user->GetManagerLevel())) &&
  342. (user->GetManagerLevel() != PRESIDENT)) {
  343. if(notFound) delete u;
  344. gMamer.TellUser(NoPermissions, user->name);
  345. return 0;
  346. }
  347. if(u != NULL) {
  348. u->ChangeManagerLevel(new_level);
  349. u->SavePlayer(gMamer.userFilePath);
  350. gMamer.TellUser(ChangedManagerLevel, user->name, u->name, new_level);
  351. } else {
  352. gMamer.TellUser(NotFound, user->name, name);
  353. }
  354. if(notFound) delete u;
  355. if(new_level > 0)
  356. return(1);
  357. else
  358. return -1;
  359. } //- End of SetManagerLevel
  360. //- SetStat -------------------------------------------------------
  361. int CommandEntry::SetStat(User *user, param_list params) {
  362. User *u = NULL;
  363. int notFound=1, new_value, i, ret=0, size=0, counter=0;
  364. char which_stat[64], name[32];
  365. strings statAliases[] = {
  366. {"tourneys", 1}, {"tnys", 1},
  367. {"wins", 2},
  368. {"losses", 3}, {"lose", 3},
  369. {"draws", 4},
  370. {"firsts", 5}, {"1sts", 5},
  371. {"seconds", 6}, {"2nds", 6},
  372. {"thirds", 7}, {"3rds", 7},
  373. {"abuse", 8},
  374. {"rating", 9},
  375. {"managedtourneys", 10},
  376. {NULL}
  377. };
  378. memset(which_stat, '\0', 64);
  379. if(params[0].type == TYPE_WORD) { strcpy(name, params[0].val.word); }
  380. if(params[1].type == TYPE_WORD) { strncpy(which_stat, params[1].val.word, MIN(63, strlen(params[1].val.word))); }
  381. size = strlen(which_stat);
  382. new_value = params[2].val.integer;
  383. u = gMamer.FindUser(name);
  384. if(u != NULL) notFound = 0;
  385. if(notFound) {
  386. u = new User();
  387. u->LoadPlayer(gMamer.userFilePath, name);
  388. }
  389. if(u != NULL) {
  390. if((u->GetManagerLevel() >= user->GetManagerLevel()) &&
  391. (user->GetManagerLevel() != PRESIDENT)) {
  392. if(notFound) delete u;
  393. gMamer.TellUser(NoPermissions, user->name);
  394. return 0;
  395. }
  396. i=0;
  397. while(statAliases[i].string != NULL) {
  398. if (!(strncasecmp(statAliases[i].string, which_stat, MIN(size, (int)strlen(statAliases[i].string))))) {
  399. counter++;
  400. if(counter > 1) break;
  401. }
  402. i++;
  403. }
  404. if(counter > 1) {
  405. gMamer.TellUser(CanNotChange, user->name, u->name, which_stat, new_value);
  406. } else if(counter == 0) {
  407. gMamer.TellUser(NotFound, user->name, which_stat);
  408. } else {
  409. i=0;
  410. while(statAliases[i].string != NULL) {
  411. if (!(strncasecmp(statAliases[i].string, which_stat, MIN(size, (int)strlen(statAliases[i].string))))) {
  412. ret = u->SetStatistic(statAliases[i].number, new_value);
  413. memset(which_stat, '\0', 64);
  414. strcpy(which_stat, statAliases[i].string);
  415. break;
  416. }
  417. i++;
  418. }
  419. u->SavePlayer(gMamer.userFilePath);
  420. if(ret)
  421. gMamer.TellUser(ChangedInfo, user->name, u->name, which_stat, new_value);
  422. else
  423. gMamer.TellUser(NotFound, user->name, which_stat);
  424. }
  425. } else {
  426. gMamer.TellUser(NotFound, user->name, name);
  427. }
  428. if(notFound) delete u;
  429. return(1);
  430. } //- End of SetStat
  431. //- ShowCommands --------------------------------------------
  432. int CommandEntry::ShowCommands(User *user, param_list params) {
  433. Command *c = NULL;
  434. LinkListIter<Command> commIter(gMamer.commandList);
  435. char *command;
  436. int i;
  437. if(params[0].type == TYPE_WORD) {
  438. command = params[0].val.word;
  439. while((c = commIter.Next())) if(1 == c->IsCommand(command)) break;
  440. if(c == NULL) {
  441. gMamer.TellUser(NotFound, user->name, command);
  442. return 0;
  443. }
  444. gMamer.XServerCom("qtell %s %s Notes: %-16s | %-5s | %3d | %s \n",
  445. user->name, gMamer.username, c->GetCommandName(),
  446. c->GetCommandAlias(), c->GetManagerLevel(), c->GetCommandDescription());
  447. return(1);
  448. }
  449. gMamer.XServerCom("qtell %s %s's Command List:\\n\\n", user->name, gMamer.username);
  450. i = 0;
  451. while((c = commIter.Next())) {
  452. gMamer.XServerCom(" %-16s | %-5s | %3d | %s\\n",
  453. c->GetCommandName(), c->GetCommandAlias(), c->GetManagerLevel(), c->GetCommandDescription());
  454. if((!(i % 9)) && (i > 0)) {
  455. i = 0;
  456. gMamer.XServerCom("%s", "\n");
  457. gMamer.XServerCom("qtell %s \\n", user->name);
  458. }
  459. i++;
  460. }
  461. gMamer.XServerCom("%s", "\n");
  462. return(1);
  463. }
  464. //- ShowHelp -----------------------------------------------
  465. int CommandEntry::ShowHelp(User *user, param_list params) {
  466. int i=1;
  467. char tmpBuffer[1024], request[128], filename[256];
  468. FILE *theFile;
  469. memset(request, '\0', 128);
  470. if(params[0].type == TYPE_WORD) {
  471. strcpy(request, params[0].val.word);
  472. } else {
  473. strcpy(request, "index");
  474. }
  475. sprintf(filename, "%s/%s", gMamer.helpFilePath, request);
  476. if((theFile = fopen(filename, "r"))) {
  477. gMamer.XServerCom("qtell %s \\nThe %s Help File:\\n\\n", user->name, request);
  478. i=1;
  479. memset(filename, '\0', 256);
  480. while(fgets(filename, 79, theFile)) { /* Just reusing the variable filename could be any char [] */
  481. memset(tmpBuffer, '\0', 1024);
  482. strcpy(tmpBuffer, gMamer.s_and_r(filename, "\n", "\\n"));
  483. gMamer.XServerCom("%s", tmpBuffer);
  484. if(((i % 10) == 0) && (i > 0)) {
  485. i = 0;
  486. gMamer.XServerCom("\nqtell %s \\n", user->name);
  487. }
  488. i++;
  489. memset(filename, '\0', 256);
  490. }
  491. fclose(theFile);
  492. gMamer.XServerCom("\n");
  493. return(1);
  494. }
  495. gMamer.TellUser(NotFound, user->name, request);
  496. return(0);
  497. }//- End of ShowHelp
  498. //- CreateTourney ------------------------------------------------------------
  499. int CommandEntry::CreateTourney(User *user, param_list params) {
  500. Tourney *t = NULL;
  501. int num = gMamer.GenerateTourneyNumber();
  502. params[0].type = params[0].type; // Just to stop the annoying unused variable messages during compile.
  503. t = new Tourney(num, user, &(gMamer.tourneyParams));
  504. gMamer.tourneyList.Append(t);
  505. gMamer.XServerCom("%s %s %s %d %s", "xtell", user->name, "Created tourney number: ", t->number, "\n");
  506. return(1);
  507. }//- End CreateTourney
  508. //- OpenTourney ------------------------------------------------------------
  509. int CommandEntry::OpenTourney(User *user, param_list params) {
  510. Tourney *tourn = NULL;
  511. tourn = gMamer.FindTourney(params[0].val.integer);
  512. if(NULL != tourn) {
  513. if(tourn->Open()) {
  514. tourn->Announce();
  515. return(1);
  516. }
  517. }
  518. gMamer.TellUser(NotFound, user->name, "tourney");
  519. return(0);
  520. }//- End OpenTourney
  521. //- AnnounceTourney ----------------------------------------------------------
  522. int CommandEntry::AnnounceTourney(User *user, param_list params) {
  523. Tourney *tourn = NULL;
  524. tourn = gMamer.FindTourney(params[0].val.integer);
  525. if(NULL != tourn) {
  526. if(tourn->GetStatus() == OPEN) {
  527. tourn->Announce();
  528. return(1);
  529. } else {
  530. gMamer.TellUser(TourneyNotOpen, user->name, params[0].val.integer);
  531. return 0;
  532. }
  533. } else {
  534. gMamer.TellUser(NotFound, user->name, "tourney");
  535. return(0);
  536. }
  537. }//- AnnounceTourney ---------------------------------------------------------
  538. //- KeepTourney ------------------------------------------------------------
  539. int CommandEntry::KeepTourney(User *user, param_list params) {
  540. Tourney *t = NULL;
  541. t = gMamer.FindTourney(params[0].val.integer);
  542. if(NULL != t) {
  543. if(params[1].type != TYPE_NULL)
  544. if(params[1].type == TYPE_WORD) {
  545. if(strncasecmp("y", params[1].val.word, 1) == 0) {
  546. t->SetPersist(1);
  547. gMamer.TellUser(WillKeepTourney, user->name, params[0].val.integer);
  548. } else {
  549. t->SetPersist(0);
  550. gMamer.TellUser(NotKeepTourney, user->name, params[0].val.integer);
  551. }
  552. } else if(params[1].type == TYPE_INT) {
  553. t->SetPersist(params[1].val.integer);
  554. if(params[1].val.integer)
  555. gMamer.TellUser(WillKeepTourney, user->name, params[0].val.integer);
  556. else
  557. gMamer.TellUser(NotKeepTourney, user->name, params[0].val.integer);
  558. } else {
  559. gMamer.TellUser(NotFound, user->name, "tourney");
  560. return(0);
  561. }
  562. return(1);
  563. }
  564. gMamer.TellUser(NotFound, user->name, "tourney");
  565. return(0);
  566. }//- End KeepTourney
  567. //- DeleteTourney ------------------------------------------------------------
  568. int CommandEntry::DeleteTourney(User *user, param_list params) {
  569. Tourney *t = NULL;
  570. TourneyPlayers *tp = NULL;
  571. t = gMamer.FindTourney(params[0].val.integer);
  572. if(NULL != t) {
  573. if(t->GetStatus() != DONE) {
  574. LinkListIter<TourneyPlayers> playerIter(t->playerList);
  575. playerIter.Reset();
  576. while((tp = playerIter.Next())) {
  577. gMamer.XServerCom("%s %s %d%s", "tournset", tp->name, 0, "\n");
  578. gMamer.XServerCom("tell %s Tourney#%d has been deleted.%s", tp->name, t->number, "\n");
  579. }
  580. gMamer.XServerCom("%s %d %s%d %s", "tell", gMamer.channelNumber,
  581. "Tourney #", params[0].val.integer, "has been deleted.\n");
  582. }
  583. gMamer.tourneyList.Delete(t); // delete the tourney
  584. return(1);
  585. }
  586. gMamer.TellUser(NotFound, user->name, "tourney");
  587. return(0);
  588. }//- End DeleteTourney
  589. //- CloseTourney ------------------------------------------------------------
  590. int CommandEntry::CloseTourney(User *user, param_list params) {
  591. Tourney *tourn = NULL;
  592. tourn = gMamer.FindTourney(params[0].val.integer);
  593. if(NULL != tourn) {
  594. if(tourn->GetPlayerCount() >= MINIMUM_PLAYERS) {
  595. if(tourn->GetStatus() == OPEN) {
  596. tourn->CloseAndStart();
  597. gMamer.XServerCom("qtell %s %s Notes: %s %d %s",
  598. user->name,gMamer.username,"Tourney #",
  599. tourn->number, " is now closed.\n");
  600. return(1);
  601. } else {
  602. gMamer.TellUser(TourneyNotOpen, user->name, tourn->number);
  603. }
  604. } else {
  605. gMamer.TellUser(NotEnoughPlayers, user->name, tourn->number);
  606. }
  607. } else {
  608. gMamer.TellUser(TourneyNotFound, user->name, params[0].val.integer);
  609. }
  610. return(0);
  611. }//- End CloseTourney
  612. int CommandEntry::ListTourneys(User *user, param_list params) {
  613. Tourney *t = NULL;
  614. LinkListIter<Tourney> tournIter(gMamer.tourneyList);
  615. int notourneys = 1, Tstatus=0, i=3;
  616. long stDate, enDate, timeNow;
  617. struct tm *start, *end;
  618. char outStart[128], outEnd[128], outStatus[128];
  619. params[0].type = params[0].type; // Just to stop the annoying unused var messages in compile.
  620. while((t = tournIter.Next())) notourneys = 0;
  621. if(notourneys == 0) {
  622. gMamer.XServerCom("qtell %s %s Notes: \\n", user->name, gMamer.username);
  623. gMamer.XServerCom(" %3s %3s %3s %4s %3s %2s %4s %9s %6s %-14s %-14s\\n",
  624. "No.","Rds","Sty", "Time", "Inc", "Md", "Vrnt", "Rtng Rnge", "Status"," Started at ", " Ended at ");
  625. gMamer.XServerCom(" %3s %3s %3s %4s %3s %2s %4s %9s %6s %-14s %-14s\\n",
  626. "---","---","---", "----", "---", "--", "----", "---------", "------","--------------", "--------------");
  627. tournIter.Reset();
  628. while((t = tournIter.Next())) {
  629. stDate = t->GetStartDate();
  630. enDate = t->GetEndDate();
  631. Tstatus = t->GetStatus();
  632. if((Tstatus == DONE) && (t->GetPersist() == 0)){
  633. timeNow = time(0);
  634. if((timeNow - enDate) > KEEP_TOURNEY_TIME) {
  635. gMamer.tourneyList.Delete(t);
  636. continue;
  637. }
  638. }
  639. if(stDate > 0) {
  640. start = localtime(&stDate);
  641. sprintf(outStart, "%02d:%02d %02d/%02d/%02d",
  642. start->tm_hour, start->tm_min, start->tm_mon+1, start->tm_mday, start->tm_year);
  643. } else { strcpy(outStart, "n/a"); }
  644. if(enDate > 0) {
  645. end = localtime(&enDate);
  646. sprintf(outEnd, "%02d:%02d %02d/%02d/%02d",
  647. end->tm_hour, end->tm_min, end->tm_mon+1, end->tm_mday, end->tm_year);
  648. } else { strcpy(outEnd, "n/a"); }
  649. if(Tstatus == NEW)
  650. sprintf(outStatus, "%s", "new");
  651. else if(Tstatus == OPEN)
  652. sprintf(outStatus, "%s", "open");
  653. else if(Tstatus == CLOSED)
  654. sprintf(outStatus, "%s", "closed");
  655. else if(Tstatus == DONE)
  656. sprintf(outStatus, "%s", "done");
  657. else
  658. memset(outStatus, '\0', 128);
  659. gMamer.XServerCom(" %3d %3d %3c %4d %3d %2c %4c %4d-%4d %6s %-14s %-14s\\n",
  660. t->number, t->params.rounds, t->params.style, t->params.time, t->params.inc,
  661. t->params.mode, t->params.variant, t->params.ratingLow, t->params.ratingHigh,
  662. outStatus, outStart, outEnd);
  663. if(((i % 12) == 0) && (i > 0)) {
  664. i = 0;
  665. gMamer.XServerCom("%s %s %s %s", "\n", "qtell", user->name, "\\n");
  666. }
  667. i++;
  668. }
  669. gMamer.XServerCom("%s", "\n");
  670. } else {
  671. gMamer.XServerCom("qtell %s %s Notes: %s", user->name, gMamer.username, "No tourneys right now.\n");
  672. }
  673. return (1);
  674. }
  675. //- JoinTourney ------------------------------------------------------------
  676. int CommandEntry::JoinTourney(User *user, param_list params) {
  677. Tourney *tourn = NULL;
  678. Player *newEntry = NULL;
  679. tourn = gMamer.FindTourney(params[0].val.integer);
  680. if(NULL != tourn) {
  681. newEntry = new Player(user->name, params[0].val.integer);
  682. gMamer.pendingList.Append(newEntry);
  683. gMamer.XServerCom("getpi %s%s", user->name, "\n");
  684. return(1);
  685. }
  686. gMamer.TellUser(TourneyNotFound, user->name, params[0].val.integer);
  687. return(0);
  688. }
  689. //- AddToTourney ------------------------------------------------------------
  690. int CommandEntry::AddToTourney(User *user, param_list params) {
  691. Tourney *tourn = NULL;
  692. Player *newEntry = NULL;
  693. tourn = gMamer.FindTourney(params[1].val.integer);
  694. if(NULL != tourn) {
  695. newEntry = new Player(params[0].val.word, params[1].val.integer);
  696. gMamer.pendingList.Append(newEntry);
  697. gMamer.XServerCom("getpi %s%s", params[0].val.word, "\n");
  698. return(1);
  699. }
  700. gMamer.TellUser(TourneyNotFound, user->name, params[1].val.integer);
  701. return(0);
  702. }
  703. //- RemoveFromTourney ------------------------------------------------------------
  704. int CommandEntry::RemoveFromTourney(User *user, param_list params) {
  705. Tourney *tourn = NULL;
  706. TourneyPlayers *tp=NULL;
  707. char name[NAMELEN], reason[64];
  708. int num=0;
  709. User *u=NULL;
  710. int chaosPointsEarned=0, needToDelete=0;
  711. memset(name, '\0', NAMELEN);
  712. memset(reason, '\0', 64);
  713. if(params[0].type == TYPE_INT) { // if we are withdrawing ourselves
  714. tourn = gMamer.FindTourney(params[0].val.integer);
  715. strcpy(name, user->name);
  716. u = user;
  717. num = params[0].val.integer;
  718. strcpy(reason, "withdrew");
  719. } else { // if a manager is forfeiting us
  720. tourn = gMamer.FindTourney(params[1].val.integer);
  721. strcpy(name, params[0].val.word);
  722. u = gMamer.FindUser(params[0].val.word);
  723. num = params[1].val.integer;
  724. strcpy(reason, "was forfeited");
  725. }
  726. if(NULL == tourn) {
  727. gMamer.TellUser(TourneyNotFound, user->name, num);
  728. return 0;
  729. }
  730. if(tourn->GetStatus() == DONE) {
  731. gMamer.TellUser(TourneyDone, user->name, num);
  732. return 0;
  733. }
  734. tp = tourn->GetPlayer(name); //Get the players info
  735. if(tp == NULL) {
  736. gMamer.TellUser(NotFound, user->name, name, num);// Player is not found in this tourney
  737. return 0;
  738. }
  739. gMamer.XServerCom("%s %s %d%s", "tournset", name, 0, "\n");
  740. if(tourn->IsNotClosed()) { //If we get past this check it will cost the user chaos points
  741. tourn->playerList.Delete(tp);
  742. tourn->CalculateAverage();
  743. gMamer.TellUser(PlayerRemoved, user->name, name, num);
  744. gMamer.XServerCom("%s %d %s %s %s%d %d%s\n","tell", gMamer.channelNumber, name, reason, "from tourney #",
  745. tourn->number, tourn->GetPlayerCount(), " player(s) now");
  746. return 0;
  747. } // otherwise tourney is closed and started
  748. chaosPointsEarned = tourn->RemovePlayer(name); // RemovePlayer will return the number of rounds
  749. if(chaosPointsEarned >= 0) { // that were disturbed
  750. if(NULL == u) {
  751. u = new User(gMamer.userFilePath, name); // Make a new user - this will create a file but there
  752. needToDelete = 1; // should already be one cause they are in the tourney
  753. }
  754. u->AddAbuse(chaosPointsEarned * PENALTY_PER_ROUND); // add the choas points and save them
  755. u->SavePlayer(gMamer.userFilePath);
  756. if(u->GetAbuse() >= MAX_CHAOS_POINTS)
  757. gMamer.XServerCom("%s %s%s", "+ censor", u->name, "\n");
  758. if(needToDelete) delete(u); // we created a new user so we should delete him here
  759. gMamer.TellUser(PlayerRemoved, user->name, name, num);
  760. gMamer.XServerCom("%s %d %s %s %s%d\n","tell",gMamer.channelNumber,name, reason,
  761. "from tourney #", tourn->number);
  762. return 1;
  763. }
  764. return 1;
  765. }
  766. //- ListTourneyGames ------------------------------------------------------------
  767. int CommandEntry::ListTourneyGames(User *user, param_list params) {
  768. Tourney *t = NULL;
  769. TourneyPlayers *white, *black;
  770. int i = 0;
  771. Game *g = NULL;
  772. t = gMamer.FindTourney(params[0].val.integer);
  773. if(NULL != t) {
  774. LinkListIter<Game> gameIter(t->gameList);
  775. gameIter.Reset();
  776. gMamer.XServerCom("%s %s %s %d %s", "qtell", user->name, "Tourney Games for Round #", t->GetRound(), "\\n\\n");
  777. gMamer.XServerCom("%3s %18s %6s %6s %2s %-18s %6s %6s %s",
  778. "", "White", "[SCR ]", "[Rtng]", "vs", "Black", "[SCR ]", "[Rtng]",
  779. "\\n---------------------------------------------------------------------------\\n");
  780. while((g = gameIter.Next())) {
  781. if(!(i % 10) && (i>0)) {
  782. gMamer.XServerCom("\nqtell %s %s", user->name, "\\n");
  783. }
  784. white = t->GetPlayer(g->whiteName);
  785. black = t->GetPlayer(g->blackName);
  786. if(g->gameNumber > 0) {
  787. gMamer.XServerCom("%3d %18s [%4.1f] [%4i] vs %-18s [%4.1f] [%4i] %3i%s",
  788. i+1, g->whiteName, white->score, white->rating,
  789. g->blackName, black->score, black->rating, g->gameNumber, "\\n");
  790. } else {
  791. gMamer.XServerCom("%3d %18s [%4.1f] [%4i] vs %-18s [%4.1f] [%4i] none%s",
  792. i+1, g->whiteName, white->score, white->rating,
  793. g->blackName, black->score, black->rating, "\\n");
  794. }
  795. i++;
  796. }
  797. gMamer.XServerCom("%s", "\\n\n");
  798. return(1);
  799. }
  800. gMamer.TellUser(TourneyNotFound, user->name, params[0].val.integer);
  801. return(0);
  802. }//- End of ListTourneyGames
  803. //- ListTourneyPlayers ------------------------------------------------------------
  804. int CommandEntry::ListTourneyPlayers(User *user, param_list params) {
  805. Tourney *t = NULL;
  806. Player *p = NULL, *opp=NULL;
  807. TourneyPlayers *tp = NULL;
  808. char color, result;
  809. int i = 0, counter = 0;
  810. t = gMamer.FindTourney(params[0].val.integer);
  811. if(NULL != t) {
  812. if(t->GetPlayerCount() == 0) {
  813. gMamer.TellUser(NoPlayers, user->name, params[0].val.integer);
  814. return 0;
  815. }
  816. t->SortPlayers();
  817. gMamer.XServerCom("%s %s %s %s %d %s %d %s %3s %-17s %6s %5s %6s %-6s %-7s %s %3s %-17s %6s %5s %6s %6s %-7s %s",
  818. "qtell", user->name, "Tourney Players:", "Round", t->GetRound(), "of", t->params.rounds,
  819. "\\n\\n", "", "Name", "Rating", "Score", "Perfrm", "Upset ", "Results", "\\n",
  820. "", "-----------------", "------", "-----", "------", "------", "-------", "\\n");
  821. LinkListIter<TourneyPlayers> playerIter(t->playerList);
  822. playerIter.Reset();
  823. while((tp = playerIter.Next())) { counter++; } // count the number of players
  824. for(i=1; i<=counter; i++) {
  825. p = t->GetSortPlayer(i);
  826. tp = t->GetPlayer(p->name);
  827. if(tp->activeFlag > 0)
  828. gMamer.XServerCom("%3d %s%-17s [%4d] %3.1f [%4d] [%4d] ",
  829. i, ((tp->location == ONLINE) ? "+" : "-"),
  830. tp->name, tp->rating, tp->score, tp->perform, tp->upset);
  831. else
  832. gMamer.XServerCom("%3d %s%-17s [%4s] %3.1f [%4d] [%4d] ",
  833. i, ((tp->location == ONLINE) ? "+" : "-"),
  834. tp->name, "forf", tp->score, tp->perform, tp->upset);
  835. LinkListIter<Player> opponentIter(tp->opponentList); // List of opponents this player has had
  836. opponentIter.Reset();
  837. while((opp = opponentIter.Next())) {
  838. p = t->GetSortPlayer(opp->name);
  839. if(opp->value) { color = 'w'; } else { color = 'b'; }
  840. if(opp->floatValue == 1.0) {
  841. result = '+';
  842. } else if(opp->floatValue == 0.5) {
  843. result = '=';
  844. } else if(opp->floatValue == 0.0) {
  845. result = '-';
  846. } else {
  847. result = '*';
  848. }
  849. gMamer.XServerCom("%c%-0.2d%c ", result, p->value, color);
  850. }
  851. if(((i % 9) == 0) && (i > 0)) {
  852. gMamer.XServerCom("%s %s %s %s", "\n", "qtell", user->name, "\\n");
  853. } else {
  854. gMamer.XServerCom("%s", "\\n");
  855. }
  856. }
  857. gMamer.XServerCom("%-24s %6.1f %s", "\\n Average Rating", t->GetAverageRating(), "\\n\n");
  858. return(1);
  859. }
  860. gMamer.TellUser(TourneyNotFound, user->name, params[0].val.integer);
  861. return(0);
  862. }//- End of ListTourneyPlayers
  863. //- ListTourneyVars -----------------------------------------------------
  864. int CommandEntry::ListTourneyVars(User *user, param_list params) {
  865. Tourney *tourn = NULL;
  866. tourn = gMamer.FindTourney(params[0].val.integer);
  867. if(NULL != tourn) {
  868. gMamer.XServerCom("%s %s %s", "qtell", user->name, "\\n");
  869. gMamer.XServerCom(" %18s %4d %s", "(T)ime: ", tourn->params.time, "\\n");
  870. gMamer.XServerCom(" %18s %4d %s", "(I)ncrement: ", tourn->params.inc, "\\n");
  871. gMamer.XServerCom(" %18s %4d %s", "(R)ounds: ", tourn->params.rounds, "\\n");
  872. gMamer.XServerCom(" %18s %4d %s", "Max (P)layers: ", tourn->params.maxPlayers, "\\n");
  873. gMamer.XServerCom(" %18s %4c %s", "(M)ode: ", tourn->params.mode, "(r)ated or (u)nrated\\n");
  874. gMamer.XServerCom(" %18s %4c %s", "(S)tyle: ", tourn->params.style, "(s)wiss or (r)oundrobin\\n");
  875. gMamer.XServerCom(" %18s %4c %s","(V)ariant: ",tourn->params.variant, "(w)ild, (r)egular, (b)ug, or (s)uicide\\n");
  876. if(tourn->params.variant == 'w')
  877. gMamer.XServerCom(" %18s %4d %s",
  878. "(W)ild Type: ",
  879. tourn->params.wild, "(0), (1), (2), (3), (4), (5), (8), (9)8a, (10)fr\\n");
  880. gMamer.XServerCom(" %18s %4d %s", "Rating (L)ow: ", tourn->params.ratingLow, "\\n");
  881. gMamer.XServerCom(" %18s %4d %s", "Rating (H)igh: ", tourn->params.ratingHigh, "\\n\\n");
  882. gMamer.XServerCom(" %18s %-18s %s", "Manager: ", tourn->manager, "\\n\n");
  883. } else {
  884. gMamer.TellUser(NotFound, user->name, "tourney");
  885. }
  886. return 1;
  887. }//- End ListTourneyVars
  888. //- MessageManagers -----------------------------------------------------
  889. int CommandEntry::MessageManagers(User *user, param_list params) {
  890. int i, level, tourneys;
  891. long last;
  892. char filename[256], manager[NAMELEN];
  893. FILE *theFile;
  894. i = 1;
  895. level = params[0].type;
  896. sprintf(filename, "%s/managers", gMamer.dataFilePath);
  897. if((theFile = fopen(filename, "r"))) {
  898. while(fscanf(theFile, "%s %d %d %ld", manager, &level, &tourneys, &last) > 0) {
  899. gMamer.XServerCom("%s %s %s %s", "message", manager, params[0].val.string, "\n");
  900. }
  901. fclose(theFile);
  902. return(1);
  903. }
  904. gMamer.TellUser(NotFound, user->name, "Manager List");
  905. return(0);
  906. }//- MessageManagers
  907. //- SetResult ------------------------------------------------------------
  908. int CommandEntry::SetResult(User *user, param_list params) {
  909. Tourney *t;
  910. int result, return_val = 0;
  911. char answer[128];
  912. t = gMamer.FindTourney(params[0].val.integer);
  913. if(NULL != t) {
  914. switch (params[3].type) { // try and set the result
  915. case TYPE_INT:
  916. switch(params[3].val.integer) {
  917. case 1: result = 1; break;
  918. case 0: result = 0; break;
  919. }
  920. break;
  921. case TYPE_WORD:
  922. if(!strcmp("=", params[3].val.word)) { result = 2;
  923. } else if(!strcmp("draw", params[3].val.word)) { result = 2;
  924. } else if(!strcmp("win", params[3].val.word)) { result = 1;
  925. } else if(!strcmp("white", params[3].val.word)) { result = 1;
  926. } else if(!strcmp("loss", params[3].val.word)) { result = 0;
  927. } else if(!strcmp("black", params[3].val.word)) { result = 0;
  928. } else {
  929. gMamer.TellUser(GameResultNotFound, user->name, params[3].val.word);
  930. return 0;
  931. }
  932. break;
  933. default:
  934. gMamer.TellUser(GameResultNotFound, user->name, params[3].val.string);
  935. return 0;
  936. break;
  937. }
  938. return_val = t->SetGameResult(params[1].val.word, params[2].val.word, result);
  939. }
  940. switch (return_val) {
  941. case 0:
  942. sprintf(answer, "a game with %s as white and %s as black", params[1].val.word, params[2].val.word);
  943. gMamer.TellUser(NotFound, user->name, answer);
  944. break;
  945. default:
  946. gMamer.TellUser(GameResultSet, user->name, params[1].val.word, params[2].val.word, result);
  947. switch (result) {
  948. case 1:
  949. sprintf(answer, "1-0");
  950. break;
  951. case 0:
  952. sprintf(answer, "0-1");
  953. break;
  954. default:
  955. sprintf(answer, "1/2-1/2");
  956. break;
  957. }
  958. gMamer.XServerCom("%s %d The game %s vs. %s in tourney #%d has been set %s by %s\n", "tell", gMamer.channelNumber,
  959. params[1].val.word, params[2].val.word, t->number, answer, user->name);
  960. break;
  961. }
  962. return return_val;
  963. }//- End of SetResult
  964. //- SetTourneyVariable -----------------------------------------------------
  965. int CommandEntry::SetTourneyVariable(User *user, param_list params) {
  966. Tourney *tourn = NULL;
  967. int i=0;
  968. char which_var[16];
  969. strings varAliases[] = {
  970. {"time", 0}, {"t", 0}, {"inc", 1}, {"i", 1}, {"rounds", 2}, {"r", 2},
  971. {"style", 3}, {"s", 3}, {"variant", 4}, {"v", 4}, {"mode", 5}, {"m", 5},
  972. {"wild", 6}, {"w", 6},
  973. {"ratingLow", 7}, {"l", 7}, {"ratingHigh", 8}, {"h", 8}, {"maxplayers", 9}, {"p", 9}, {NULL} };
  974. tourn = gMamer.FindTourney(params[0].val.integer); // what tourney are we talking about
  975. if(NULL == tourn) {
  976. gMamer.TellUser(NotFound, user->name, "tourney"); // wrong tourney number
  977. return 0;
  978. }
  979. if(FALSE == tourn->IsNotClosed()) {
  980. gMamer.TellUser(TourneyClosed, user->name, params[0].val.integer);
  981. return 0;
  982. }
  983. if(TRUE == tourn->IsNotNew()) {
  984. if((0 != strncasecmp(params[1].val.word, "rounds", strlen(params[1].val.word))) && // even if it is open
  985. (0 != strncasecmp(params[1].val.word, "r", strlen(params[1].val.word))) && // we can still change rounds
  986. (0 != strncasecmp(params[1].val.word, "maxplayers", strlen(params[1].val.word))) && // or max players
  987. (0 != strncasecmp(params[1].val.word, "p", strlen(params[1].val.word))) && //
  988. (0 != strncasecmp(params[1].val.word, "style", strlen(params[1].val.word))) && // or style (rr) to (ss)
  989. (0 != strncasecmp(params[1].val.word, "s", strlen(params[1].val.word)))) {
  990. gMamer.TellUser(TourneyNotNew, user->name, params[0].val.integer);
  991. return(0);
  992. }
  993. }
  994. if(strcasecmp(user->name, tourn->manager) != 0) {
  995. gMamer.TellUser(NoPermissions, user->name, params[0].val.integer);
  996. return(0);
  997. }
  998. while(varAliases[i].string != NULL) {
  999. if (!(strcasecmp(varAliases[i].string, params[1].val.word))) { //lets check the vars
  1000. if(strlen(varAliases[i].string) == 1)
  1001. strcpy(which_var, varAliases[i-1].string);
  1002. else //copy the whole word
  1003. strcpy(which_var, varAliases[i].string);
  1004. if((varAliases[i].number <= 2) || (varAliases[i].number >= 6))
  1005. if(params[2].type == TYPE_INT) { // if var is one that should be int
  1006. tourn->SetVariable(varAliases[i].number, params[2].val.integer);
  1007. gMamer.TellUser(ChangedInfo, user->name, which_var, params[2].val.integer);
  1008. return 1;
  1009. } else {
  1010. gMamer.TellUser(CanNotChange, user->name, which_var, params[2].val.word);
  1011. return 0;
  1012. }
  1013. else
  1014. if(params[2].type == TYPE_WORD) {
  1015. tourn->SetVariable(varAliases[i].number, params[2].val.word);
  1016. gMamer.TellUser(ChangedInfo, user->name, which_var, params[2].val.word);
  1017. return 1;
  1018. } else {
  1019. gMamer.TellUser(CanNotChange, user->name, which_var, params[2].val.integer);
  1020. return 0;
  1021. }
  1022. }
  1023. i++;
  1024. }
  1025. gMamer.TellUser(NotFound, user->name, params[1].val.word); // Bad Variable
  1026. return 0;
  1027. }
  1028. //- ShutdownCommand ----------------------------------------------------------
  1029. int CommandEntry::Shutdown(User *user, param_list params) {
  1030. int i;
  1031. i = params[0].type;
  1032. i = user->GetManagerLevel();
  1033. gMamer.Shutdown();
  1034. exit(0);
  1035. return(1);
  1036. } //- end of Shutdown