#include <ctype.h> #include <stdio.h> #include "socket.h" #include "com_player.h" #include "stringops.h" static char word [128], output[1024]; void command_player_add (globals *g, player *p, char *l) { #ifdef FUNCTIONS puts ("**command_player_add"); #endif l = tokenize (word, l); if (strlen(word) > 0) { player_add (g->player_list, word); if (p->verbose) { sprintf (output, "w %s = Player %s added.", p->name, word); socket_write (g->socket, output); } } } void command_player_delete (globals *g, player *p, char *l) { player *dead; #ifdef FUNCTIONS puts ("**command_player_delete"); #endif l = tokenize (word, l); dead = player_find (g->player_list, word); if (dead != NULL) { if (dead != p) { player_delete (g->player_list, dead); sprintf (output, "w %s = Player %s deleted.", p->name, word); socket_write (g->socket, output); } else { sprintf (output, "w %s = I can't delete you!", p->name); socket_write (g->socket, output); } } else { if (p->verbose) { sprintf (output, "w %s = I don't know player %s.", p->name, word); socket_write (g->socket, output); } } } static void command_player_list_output (globals *g, player *p, player *o) { #ifdef FUNCTIONS puts ("<command_player_list_output>"); #endif sprintf (output, "w %s = %- 4d %-25s s:%+03d v:%c i:%c c:%c o:%c", p->name, player_num (g->player_list, o), o->name, o->status, o->verbose ? 'T' : 'F', o->ignore ? 'T' : 'F', o->command ? 'T' : 'F', o->owner ? 'T' : 'F' ); socket_write (g->socket, output); } void command_player_list (globals *g, player *p, char *l) { player *scan; #ifdef FUNCTIONS puts ("**command_player_list"); #endif l = tokenize (word, l); if (strlen (word)) { scan = player_find (g->player_list, word); if (scan == NULL) { if (p->verbose) { sprintf (output, "w %s = I don't know %s.", p->name, word); socket_write (g->socket, output); } } else command_player_list_output (g, p, scan); } else { for (scan = g->player_list->head; scan != NULL; scan = scan->next) command_player_list_output (g, p, scan); } } void command_player_status (globals *g, player *p, char *l) { player *current; #ifdef FUNCTIONS puts ("**command_player_status"); #endif l = tokenize (word, l); if (strlen (word) == 0) { if (p->verbose) { sprintf (output, "w %s = player status {player} \ {status}", p->name); socket_write (g->socket, output); } return; } current = player_find (g->player_list, word); if (current == NULL) { if (p->verbose) { sprintf (output, "w %s = I don't know player %s.", p->name, word); socket_write (g->socket, output); } return; } l = tokenize (word, l); if (strlen (word) != 0) current->status = atoi(word); if (p->verbose) { sprintf (output, "w %s = Status for %s set to %d.", p->name, current->name, current->status); socket_write (g->socket, output); } } void command_player_verbose (globals *g, player *p, char *l) { player *current; #ifdef FUNCTIONS puts ("**command_player_verbose"); #endif l = tokenize (word, l); if (strlen (word) == 0) { if (p->verbose) { sprintf (output, "w %s = player verbose {player} \ T/F", p->name); socket_write (g->socket, output); } return; } current = player_find (g->player_list, word); if (current == NULL) { if (p->verbose) { sprintf (output, "w %s = I don't know player %s.", p->name, word); socket_write (g->socket, output); } return; } l = tokenize (word, l); if (strlen (word) != 0) current->verbose = ((isupper(*word) ? tolower (*word) : *word) == 't'); if (p->verbose) { sprintf (output, "w %s = Verbose for %s set to %c.", p->name, current->name, current->verbose ? 'T' : 'F'); socket_write (g->socket, output); } } void command_player_ignore (globals *g, player *p, char *l) { player *current; #ifdef FUNCTIONS puts ("**command_player_ignore"); #endif l = tokenize (word, l); if (strlen (word) == 0) { if (p->verbose) { sprintf (output, "w %s = player ignore {player} \ T/F", p->name); socket_write (g->socket, output); } return; } current = player_find (g->player_list, word); if (current == NULL) { if (p->verbose) { sprintf (output, "w %s = I don't know player %s.", p->name, word); socket_write (g->socket, output); } return; } l = tokenize (word, l); if (strlen (word) != 0) current->ignore = ((isupper(*word) ? tolower (*word) : *word) == 't'); if (p->verbose) { sprintf (output, "w %s = Ignore for %s set to %c.", p->name, current->name, current->ignore ? 'T' : 'F'); socket_write (g->socket, output); } } void command_player_command (globals *g, player *p, char *l) { player *current; #ifdef FUNCTIONS puts ("**command_player_command"); #endif l = tokenize (word, l); if (!p->owner) { if (p->verbose) { sprintf (output, "w %s = You have to be an owner to \ change command status of players.", p->name); socket_write (g->socket, output); } return; } if (strlen (word) == 0) { if (p->verbose) { sprintf (output, "w %s = player command {player} \ T/F", p->name); socket_write (g->socket, output); } return; } current = player_find (g->player_list, word); if (current == NULL) { if (p->verbose) { sprintf (output, "w %s = I don't know player %s.", p->name, word); socket_write (g->socket, output); } return; } l = tokenize (word, l); if (strlen (word) != 0) current->command = ((isupper(*word) ? tolower (*word) : *word) == 't'); if (p->verbose) { sprintf (output, "w %s = Command for %s set to %c.", p->name, current->name, current->command ? 'T' : 'F'); socket_write (g->socket, output); } } void command_player_owner (globals *g, player *p, char *l) { player *current; #ifdef FUNCTIONS puts ("**command_player_owner"); #endif l = tokenize (word, l); if (!p->owner) { if (p->verbose) { sprintf (output, "w %s = You have to be an owner to \ change owner status of players.", p->name); socket_write (g->socket, output); } return; } if (strlen (word) == 0) { if (p->verbose) { sprintf (output, "w %s = player owner {player} \ T/F", p->name); socket_write (g->socket, output); } return; } current = player_find (g->player_list, word); if (current == NULL) { if (p->verbose) { sprintf (output, "w %s = I don't know player %s.", p->name, word); socket_write (g->socket, output); } return; } l = tokenize (word, l); if (strlen (word) != 0) current->owner = ((isupper(*word) ? tolower (*word) : *word) == 't'); if (p->verbose) { sprintf (output, "w %s = Owner for %s set to %c.", p->name, current->name, current->owner ? 'T' : 'F'); socket_write (g->socket, output); } } void command_player_load (globals *g, player *p, char *l) { char *name; int verbose; #ifdef FUNCTIONS puts ("**command_player_load"); #endif l = tokenize (word, l); copystring (name, p->name); verbose = p->verbose; player_burn (g->player_list); g->player_list = player_load (strlen (word) ? word : g->player_file); if (verbose) { sprintf (output, "w %s = Player file %s loaded.", name, strlen (word) ? word:g->player_file); socket_write (g->socket, output); } free (name); } void command_player_save (globals *g, player *p, char *l) { #ifdef FUNCTIONS puts ("**command_player_save"); #endif l = tokenize (word, l); player_save (g->player_list, strlen (word) ? word : g->player_file); if (p->verbose) { sprintf (output, "w %s = Players saved to file %s.", p->name, strlen (word) ? word : g->player_file); socket_write (g->socket, output); } } void command_player_default (globals *g, player *p, char *l) { #ifdef FUNCTIONS puts ("**command_player_default"); #endif l = tokenize (word, l); if (strlen (word) != 0) { copystring (g->player_file, word); } if (p->verbose) { sprintf (output, "w %s = Default player filename is \ %s.", p->name, g->player_file); socket_write (g->socket, output); } } void command_player (globals *g, player *p, char *l) { #ifdef FUNCTIONS puts ("**command_player"); #endif l = tokenize (word, l); if (strlen (word) == 0) { if (p->verbose) { sprintf (output, "w %s = player commands:add, delete, \ list, status, verbose, command, ignore, \ owner, load, save, default", p->name); socket_write (g->socket, output); } return; } if (!strcasecmp (word, "add")) command_player_add (g, p, l); if (!strcasecmp (word, "delete")) command_player_delete (g, p, l); if (!strcasecmp (word, "list")) command_player_list (g, p, l); if (!strcasecmp (word, "status")) command_player_status (g, p, l); if (!strcasecmp (word, "verbose")) command_player_verbose (g, p, l); if (!strcasecmp (word, "command")) command_player_command (g, p, l); if (!strcasecmp (word, "ignore")) command_player_ignore (g, p, l); if (!strcasecmp (word, "owner")) command_player_owner (g, p, l); if (!strcasecmp (word, "load")) command_player_load (g, p, l); if (!strcasecmp (word, "save")) command_player_save (g, p, l); if (!strcasecmp (word, "default")) command_player_default (g, p, l); }