//***************************************************************************** // // socedit.c // // socedit is a set of tools for editing socials online. Socedit requires that // olc2 be installed. // //***************************************************************************** #include "../mud.h" #include "../character.h" #include "../socket.h" #include "../olc2/olc.h" #include "socials.h" //***************************************************************************** // the functions needed by olc2 //***************************************************************************** #define SOCEDIT_CHAR_NOTGT 1 #define SOCEDIT_ROOM_NOTGT 2 #define SOCEDIT_CHAR_SELF 3 #define SOCEDIT_ROOM_SELF 4 #define SOCEDIT_CHAR_TGT 5 #define SOCEDIT_VICT_TGT 6 #define SOCEDIT_ROOM_TGT 7 #define SOCEDIT_MIN_POS 8 #define SOCEDIT_MAX_POS 9 void socedit_menu(SOCKET_DATA *sock, SOCIAL_DATA *social) { send_to_socket(sock, "{y[{c%s{y]\r\n" "{g1) to char notgt: {c%s\r\n" "{g2) to room notgt: {c%s\r\n" "{g3) to char self : {c%s\r\n" "{g4) to room self : {c%s\r\n" "{g5) to char tgt : {c%s\r\n" "{g6) to vict tgt : {c%s\r\n" "{g7) to room tgt : {c%s\r\n" "{g8) minimum pos : {c%s\r\n" "{g9) maximum pos : {c%s\r\n" "\r\n" "{gTo assocciate/unassociate commands, use soclink and socunlink\r\n", socialGetCmds(social), socialGetCharNotgt(social), socialGetRoomNotgt(social), socialGetCharSelf(social), socialGetRoomSelf(social), socialGetCharTgt(social), socialGetVictTgt(social), socialGetRoomTgt(social), posGetName(socialGetMinPos(social)), posGetName(socialGetMaxPos(social)) ); } int socedit_chooser(SOCKET_DATA *sock, SOCIAL_DATA *social,const char *option){ switch(toupper(*option)) { case '1': send_to_socket(sock, "The message to character when no target is supplied : "); return SOCEDIT_CHAR_NOTGT; case '2': send_to_socket(sock, "The message to room when no target is supplied : "); return SOCEDIT_ROOM_NOTGT; case '3': send_to_socket(sock, "The message to character when target is self : "); return SOCEDIT_CHAR_SELF; case '4': send_to_socket(sock, "The message to room when target is self : "); return SOCEDIT_ROOM_SELF; case '5': send_to_socket(sock, "The message to character when a target is found : "); return SOCEDIT_CHAR_TGT; case '6': send_to_socket(sock, "The message to target when a target is found : "); return SOCEDIT_VICT_TGT; case '7': send_to_socket(sock, "The message to room when a target is found : "); return SOCEDIT_ROOM_TGT; case '8': olc_display_table(sock, posGetName, NUM_POSITIONS, 2); text_to_buffer(sock, "Pick a minimum position: "); return SOCEDIT_MIN_POS; case '9': olc_display_table(sock, posGetName, NUM_POSITIONS, 2); text_to_buffer(sock, "Pick a maximum position: "); return SOCEDIT_MAX_POS; default: return MENU_CHOICE_INVALID; } } bool socedit_parser(SOCKET_DATA *sock, SOCIAL_DATA *social, int choice, const char *arg){ switch(choice) { case SOCEDIT_CHAR_NOTGT: socialSetCharNotgt(social, arg); return TRUE; case SOCEDIT_ROOM_NOTGT: socialSetRoomNotgt(social, arg); return TRUE; case SOCEDIT_CHAR_SELF: socialSetCharSelf(social, arg); return TRUE; case SOCEDIT_ROOM_SELF: socialSetRoomSelf(social, arg); return TRUE; case SOCEDIT_CHAR_TGT: socialSetCharTgt(social, arg); return TRUE; case SOCEDIT_VICT_TGT: socialSetVictTgt(social, arg); return TRUE; case SOCEDIT_ROOM_TGT: socialSetRoomTgt(social, arg); return TRUE; case SOCEDIT_MIN_POS: { int val = atoi(arg); if(!isdigit(*arg) || val < 0 || val >= NUM_POSITIONS) return FALSE; socialSetMinPos(social, val); return TRUE; } case SOCEDIT_MAX_POS: { int val = atoi(arg); if(!isdigit(*arg) || val < 0 || val >= NUM_POSITIONS) return FALSE; socialSetMaxPos(social, val); return TRUE; } default: return FALSE; } } //***************************************************************************** // commands for entering socedit //***************************************************************************** void save_social(SOCIAL_DATA *social) { save_socials(); } COMMAND(cmd_socedit) { SOCIAL_DATA *social; if(!arg || !*arg) send_to_char(ch, "Which social are you trying to edit?\r\n"); else { // strip down to one argument one_arg(arg, arg); // find the social social = get_social(arg); // make sure we're not trying to edit a command if(social == NULL && cmd_exists(arg)) send_to_char(ch, "But that is already a command!\r\n"); else { // make a new one if(social == NULL) { social = newSocial(arg, NULL, NULL, NULL, NULL, NULL, NULL, NULL, POS_STANDING, POS_STANDING); add_social(social); } // set up the OLC do_olc(charGetSocket(ch), socedit_menu, socedit_chooser, socedit_parser, socialCopy, socialCopyTo, deleteSocial, save_social, social); } } } //***************************************************************************** // implementation of socedit.h //***************************************************************************** void init_socedit(void) { add_cmd("socedit", NULL, cmd_socedit, "builder", TRUE); }