/* * Copyright (C) 1995-1997 Christopher D. Granz * * This header may not be removed. * * Refer to the file "License" included in this package for further * information and before using any of the following. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <unistd.h> #include "sapphire.h" /* * Functions */ void cmd_control( CHAR_DATA *pChar, char *pArgument ) { ROOM_INDEX_DATA *pRoom = pChar->pInRoom; CHAR_DATA *pToChar; if ( pChar->pTerm == NULL ) return; if ( IS_NPC( pChar ) ) { send_string( pChar, "NPCs cannot control other NPCs.\n\r" ); return; } #ifdef DEBUG if ( pRoom == NULL ) { wcdebug( "Character not in room." ); char_to_room( pChar, uDefaultRoom.pRoom ); pRoom = pChar->pInRoom; } #endif if ( pArgument[0] == '\0' ) { send_string( pChar, "Usage: control <NPC name>\n\r" ); return; } for ( pToChar = pRoom->pPeople; pToChar != NULL; pToChar = pToChar->pNextInRoom ) { if ( IS_NPC( pToChar ) && multi_compare_2( pArgument, pToChar->pNPCData->pNameList ) == TRUE ) break; } if ( pToChar == NULL ) { send_string( pChar, "No NPC with that name here.\n\r" ); return; } if ( pToChar->pTerm != NULL ) { send_string( pChar, "That NPC is already being controlled by someone else.\n\r" ); return; } if ( pToChar == pChar ) { send_string( pChar, "You already control yourself.\n\r" ); return; } if ( pChar->pTerm->pControlled != NULL ) pChar->pTerm->pControlled->pTerm = NULL; send_game_message( "~c has left this world.", MESSAGE_DEST_ROOM, TRUE, pChar, NULL, pChar->pInRoom, TRUE, NUMBER_POSITION_RESTING, pChar ); char_from_room( pChar ); term_send_string( pChar->pTerm, "%s\n\rType `$return' to return to your character.\n\r", make_ansi_code( ANSI_CODEREF_EF_CSCREEN, NULL, NULL, pChar->pTerm ) ); pChar->pTerm->pControlled = pToChar; pToChar->pTerm = pChar->pTerm; pChar->pTerm = NULL; } void cmd_return( CHAR_DATA *pChar, char *pArgument ) { TERM_DATA *pTerm; if ( ( pTerm = pChar->pTerm ) == NULL ) return; if ( pChar->pTerm->pControlled == NULL ) { send_string( pChar, "You are not controlling an NPC right now.\n\r" ); return; } pTerm->pControlled = NULL; pTerm->pChar->pTerm = pTerm; pChar->pTerm = NULL; char_to_room( pTerm->pChar, uDefaultRoom.pRoom ); send_game_message( "~h appears out of nothingness.", MESSAGE_DEST_ROOM, TRUE, pTerm->pChar, NULL, pTerm->pChar->pInRoom, TRUE, NUMBER_POSITION_RESTING, pTerm->pChar ); term_send_string( pTerm, "%s", make_ansi_code( ANSI_CODEREF_EF_CSCREEN, NULL, NULL, pTerm ) ); } /* * Lists all currently connected users. */ void cmd_users( CHAR_DATA *pChar, char *pArgument ) { TERM_DATA *pTerm; char cBuf[128]; if ( pChar->pTerm == NULL ) return; setup_string_pager( pChar->pTerm ); for ( pTerm = pTermList; pTerm != NULL; pTerm = pTerm->pNext ) { sprintf( cBuf, "[%3d %3d] [%s] : %-50.50s\n\r", pTerm->sTelnetSocket, pTerm->sBinarySocket, state_string( pTerm->iConState ), pTerm->pHostname ); page_string( pChar->pTerm, cBuf ); } finish_string_pager( pChar->pTerm ); } void cmd_servers( CHAR_DATA *pChar, char *pArgument ) { MUD_COMM_DATA *pMUDComm; char cBuf[128]; if ( pChar->pTerm == NULL ) return; setup_string_pager( pChar->pTerm ); for ( pMUDComm = pMUDCommList; pMUDComm; pMUDComm = pMUDComm->pNext ) { sprintf( cBuf, "[%3d] [%s] : %-50.50s\n\r", pMUDComm->sMUDCommSocket, mstate_string( pMUDComm->iConState ), pMUDComm->pHostname ); page_string( pChar->pTerm, cBuf ); } finish_string_pager( pChar->pTerm ); } /* * Returns a human readable string given a terminal connected state. */ char *state_string( int iState ) { switch ( iState ) { case CON_SAPPHIRE_IDENT : return ( "sap_ident" ); case CON_SYSTEM_SHELL : return ( "dev_shell" ); case CON_NPC_EDITOR : return ( "npc_edit " ); case CON_OBJECT_EDITOR : return ( "obj_edit " ); case CON_ROOM_EDITOR : return ( "room_edit" ); case CON_RUNNING_CHILD : return ( "run_child" ); case CON_PLAYING : return ( " playing " ); case CON_GET_LOCAL_ECHO_ON: return ( "get_lecho" ); case CON_GET_CLIENT_TYPE : return ( "get_ctype" ); case CON_MAIN_MENU : return ( "main_menu" ); case CON_GET_NAME : return ( "get_name " ); case CON_GET_CREATION_CODE: return ( "get_ccode" ); case CON_GET_PASSWORD : return ( "get_passw" ); case CON_CREATION_MENU : return ( "crea_menu" ); case CON_GET_RACE : return ( "get_race " ); case CON_ROLL_STATS : return ( "roll_stat" ); case CON_GET_SEX : return ( " get_sex " ); case CON_GET_HAIR_COLOR : return ( "get_hclr " ); case CON_GET_EYE_COLOR : return ( "get_eclr " ); case CON_GET_HEIGHT : return ( "get_hight" ); case CON_GET_WEIGHT : return ( "get_wight" ); case CON_READ_MOTD : return ( "read_motd" ); case CON_RECONNECT : return ( "reconnect" ); default : break; } return ( " unknown " ); } char *mstate_string( int iState ) { switch ( iState ) { case MUD_COMM_CON_IDENT : return ( " ident " ); case MUD_COMM_CON_READY : return ( " ready " ); default : break; } return ( "unknown" ); } /* * Disconnects a site. */ void cmd_disconnect( CHAR_DATA *pChar, char *pArgument ) { MUD_COMM_DATA *pMUDComm; TERM_DATA *pTerm; char cArg[MAX_INPUT]; int iDesc; pArgument = one_arg( pArgument, cArg ); if ( cArg[0] == '\0' || is_number( cArg ) != TRUE || ( iDesc = atoi( cArg ) ) < 0 ) { send_string( pChar, "Usage: disconnect <socket>\n\r" ); return; } for ( pTerm = pTermList; pTerm != NULL; pTerm = pTerm->pNext ) { if ( pTerm->sTelnetSocket == iDesc || pTerm->sBinarySocket == iDesc ) break; } if ( pTerm == NULL ) { for ( pMUDComm = pMUDCommList; pMUDComm != NULL; pMUDComm = pMUDComm->pNext ) { if ( pMUDComm->sMUDCommSocket == iDesc ) break; } } if ( pTerm == NULL && pMUDComm == NULL ) { send_string( pChar, "No such socket.\n\r" ); return; } send_string( pChar, "Disconnecting.\n\r" ); term_send_string( pTerm, "You have been disconnected.\n\r" ); close_connection( &pTerm ); } /* * Shows the current creation code. */ void cmd_ccode( CHAR_DATA *pChar, char *pArgument ) { if ( iCreationCodeTimer < 0 ) { send_string( pChar, "Creation codes are not activated.\n\r" ); return; } send_string( pChar, "The current creation code is: `%s'\n\r", cCreationCode ); iCreationCodeTimer = 300; /* Five minutes. */ } /* * Creates an instance of an NPC or object. */ void cmd_create( CHAR_DATA *pChar, char *pArgument ) { char cBuf1[MAX_INPUT]; char cBuf2[MAX_INPUT]; int iNumber; pArgument = one_arg( pArgument, cBuf1 ); one_arg( pArgument, cBuf2 ); if ( cBuf1[0] == '\0' || cBuf2[0] == '\0' || is_number( cBuf2 ) != TRUE ) goto usage; iNumber = atoi( cBuf2 ); if ( str_prefix( cBuf1, "npc" ) == TRUE ) { NPC_INDEX_DATA *pNPCIndex; CHAR_DATA *pChar2; if ( iNumber <= 5 ) { send_string( pChar, "Illegal object number `%d'.\n\r", iNumber ); return; } if ( ( pNPCIndex = get_npc_index( iNumber ) ) == NULL ) { send_string( pChar, "No NPC with the number `%d'.\n\r", iNumber ); return; } pChar2 = new_npc( pNPCIndex, pChar ); char_to_room( pChar2, pChar->pInRoom ); send_string( pChar, "NPC created.\n\r" ); return; } else if ( str_prefix( cBuf1, "object" ) == TRUE ) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *pObj; if ( iNumber <= 5 ) { send_string( pChar, "Illegal object number `%d'.\n\r", iNumber ); return; } if ( ( pObjIndex = get_object_index( iNumber ) ) == NULL ) { send_string( pChar, "No object with the number `%d'.\n\r", iNumber ); return; } pObj = new_object( pObjIndex, pChar ); if ( IS_SET( pObj->fObjFlags, FLAG_OBJECT_UNTAKEABLE ) ) obj_to_room( pObj, pChar->pInRoom ); else obj_to_char( pObj, pChar ); send_string( pChar, "Object created.\n\r" ); return; } usage: send_string( pChar, "Usage: create <\"npc\"|\"object\"> <number>\n\r" ); } /* * Destroys an instance of an NPC or object. */ void cmd_destroy( CHAR_DATA *pChar, char *pArgument ) { ROOM_INDEX_DATA *pRoom = pChar->pInRoom; char cBuf1[MAX_INPUT]; char cBuf2[MAX_INPUT]; pArgument = one_arg( pArgument, cBuf1 ); one_arg( pArgument, cBuf2 ); #ifdef DEBUG if ( pRoom == NULL ) { wcdebug( "Character not in room." ); return; } #endif if ( cBuf1[0] == '\0' || cBuf2[0] == '\0' ) goto usage; if ( str_prefix( cBuf1, "npc" ) == TRUE ) { CHAR_DATA *pChar2; for ( pChar2 = pRoom->pPeople; pChar2; pChar2 = pChar2->pNextInRoom ) { if ( IS_NPC( pChar2 ) && multi_compare_2( cBuf2, pChar2->pNPCData->pNameList ) == TRUE ) { if ( pChar2->pTerm != NULL ) { pChar2->pTerm->pControlled = NULL; pChar2->pTerm->pChar->pTerm = pChar2->pTerm; char_to_room( pChar2->pTerm->pChar, uDefaultRoom.pRoom ); } char_from_room( pChar2 ); free_char( &pChar2 ); send_string( pChar, "NPC destroyed.\n\r" ); return; } } send_string( pChar, "No such NPC here.\n\r" ); return; } else if ( str_prefix( cBuf1, "object" ) == TRUE ) { OBJ_DATA *pObj; for ( pObj = pChar->pInven; pObj; pObj = pObj->pNextContent ) { if ( multi_compare_2( cBuf2, pObj->pNameList ) == TRUE ) { obj_from_char( pObj ); free_obj( &pObj ); send_string( pChar, "Object destroyed.\n\r" ); return; } } for ( pObj = pRoom->pContents; pObj; pObj = pObj->pNextContent ) { if ( multi_compare_2( cBuf2, pObj->pNameList ) == TRUE ) { obj_from_room( pObj ); free_obj( &pObj ); send_string( pChar, "Object destroyed.\n\r" ); return; } } send_string( pChar, "No such object here.\n\r" ); return; } usage: send_string( pChar, "Usage: destroy <\"npc\"|\"object\"> <name>\n\r" ); } void cmd_lookup( CHAR_DATA *pChar, char *pArgument ) { send_string( pChar, "Sorry, this command is not ready for use yet.\n\r" ); } void cmd_stat( CHAR_DATA *pChar, char *pArgument ) { ROOM_INDEX_DATA *pRoom = pChar->pInRoom; char cBuf1[MAX_INPUT]; char cBuf2[MAX_INPUT]; char cBuf3[MAX_STRING]; pArgument = one_arg( pArgument, cBuf1 ); one_arg( pArgument, cBuf2 ); #ifdef DEBUG if ( pRoom == NULL ) { wcdebug( "Character not in room." ); return; } #endif if ( cBuf1[0] == '\0' || cBuf2[0] == '\0' ) goto usage; setup_string_pager( pChar->pTerm ); if ( str_prefix( cBuf1, "character" ) == TRUE ) { CHAR_DATA *pChar2; for ( pChar2 = pRoom->pPeople; pChar2; pChar2 = pChar2->pNextInRoom ) { if ( IS_NPC( pChar2 ) ) { if ( multi_compare_2( cBuf2, pChar2->pNPCData->pNameList ) == TRUE ) break; } else { if ( multi_compare( cBuf2, pChar2->pPCData->sName ) == TRUE ) break; } } if ( pChar2 == NULL ) page_string( pChar->pTerm, "No such character here.\n\r" ); else { snprintf( cBuf3, MAX_STRING, "NPC %s\n\r" "Name \"%s\"\n\r", ( IS_NPC( pChar2 ) ? "Yes" : "No" ), ( IS_NPC( pChar2 ) ? pChar2->pNPCData->pNameList[0] : pChar2->pPCData->sName ) ); page_string( pChar->pTerm, cBuf3 ); if ( IS_NPC( pChar2 ) ) { snprintf( cBuf3, MAX_STRING, "\n\r" "Short description \"%s\"\n\r", pChar2->pNPCData->sShortDesc ); page_string( pChar->pTerm, cBuf3 ); snprintf( cBuf3, MAX_STRING, "\n\r" "Dying description (1)\n\r \"%s\"\n\r", pChar2->pNPCData->sDescs[0] ); page_string( pChar->pTerm, cBuf3 ); snprintf( cBuf3, MAX_STRING, "Sleeping description (2)\n\r \"%s\"\n\r", pChar2->pNPCData->sDescs[1] ); page_string( pChar->pTerm, cBuf3 ); snprintf( cBuf3, MAX_STRING, "Resting description (3)\n\r \"%s\"\n\r", pChar2->pNPCData->sDescs[2] ); page_string( pChar->pTerm, cBuf3 ); snprintf( cBuf3, MAX_STRING, "Sitting description (4)\n\r \"%s\"\n\r", pChar2->pNPCData->sDescs[3] ); page_string( pChar->pTerm, cBuf3 ); snprintf( cBuf3, MAX_STRING, "Standing description (5)\n\r \"%s\"\n\r", pChar2->pNPCData->sDescs[4] ); page_string( pChar->pTerm, cBuf3 ); } else { snprintf( cBuf3, MAX_STRING, "Prompt \"%s\"\n\r", pChar2->pPCData->sPrompt ); page_string( pChar->pTerm, cBuf3 ); } snprintf( cBuf3, MAX_STRING, "\n\r" "Long description\n\r \"%s\"\n\r", pChar2->sLongDesc ); page_string( pChar->pTerm, cBuf3 ); snprintf( cBuf3, MAX_STRING, "\n\r" "Race %s\n\r" "Sex %s\n\r\n\r", get_race_string( pChar2->iRace ), get_sex_string( pChar2->iSex ) ); page_string( pChar->pTerm, cBuf3 ); if ( IS_NPC( pChar2 ) ) { snprintf( cBuf3, MAX_STRING, "NPC flags [%s]\n\r", uncapit( npc_flags_string( pChar2->pNPCData->fNPCFlags ) ) ); page_string( pChar->pTerm, cBuf3 ); } snprintf( cBuf3, MAX_STRING, "Part flags [%s]\n\r" "Action flags [%s]\n\r", uncapit( part_flags_string( pChar2->fPartFlags ) ), uncapit( act_flags_string( pChar2->fActFlags ) ) ); page_string( pChar->pTerm, cBuf3 ); snprintf( cBuf3, MAX_STRING, "\n\r" "Position %s\n\r" "Level %d\n\r" "Experience %d\n\r" "Alignment %d\n\r" "Height %d inches\n\r" "Weight %d pounds\n\r" "Maximum carry weight %d pounds\n\r" "Hit Points %d\n\r" "Magic Points %d\n\r" "Movement points %d\n\r" "Gold %ld\n\r" "Hit roll %d\n\r" "Armor class [%d %d %d %d]\n\r", get_position_string( pChar2->iPosition ), pChar2->iLevel, pChar2->iExp, pChar2->iAlignment, pChar2->iHeight, pChar2->iWeight, pChar2->iMaxCarry, pChar2->iHP, pChar2->iMP, pChar2->iMV, pChar2->iGold, pChar2->iHitRoll, pChar2->iAC[0], pChar2->iAC[1], pChar2->iAC[2], pChar2->iAC[3] ); page_string( pChar->pTerm, cBuf3 ); if ( IS_NPC( pChar2 ) ) { snprintf( cBuf3, MAX_STRING, "\n\r" "Chance of wander %d%%\n\r", pChar2->pNPCData->iWander ); page_string( pChar->pTerm, cBuf3 ); if ( pChar2->pNPCData->pReset != NULL ) { snprintf( cBuf3, MAX_STRING, "Reset time %d seconds\n\r", pChar2->pNPCData->pReset->iResetTime ); page_string( pChar->pTerm, cBuf3 ); } } #ifdef DEBUG if ( pChar2->pInRoom == NULL ) { wcdebug( "Character not in room." ); return; } #endif snprintf( cBuf3, MAX_STRING, "\n\r" "In room %ld\n\r", pChar2->pInRoom->iNumber ); page_string( pChar->pTerm, cBuf3 ); } } else if ( str_prefix( cBuf1, "object" ) == TRUE ) { } else if ( str_prefix( cBuf1, "room" ) == TRUE ) { } else { usage: send_string( pChar, "Usage: stat <\"character\"|\"object\"|\"room\"> <name>\n\r" ); return; } finish_string_pager( pChar->pTerm ); } void cmd_set( CHAR_DATA *pChar, char *pArgument ) { send_string( pChar, "Sorry, this command is not ready for use yet.\n\r" ); } /* * Transfers the executing character to a given room. */ void cmd_goto( CHAR_DATA *pChar, char *pArgument ) { ROOM_INDEX_DATA *pToRoom; char cArg[MAX_INPUT]; int i; pArgument = one_arg( pArgument, cArg ); if ( cArg[0] == '\0' || is_number( cArg ) != TRUE ) goto usage; if ( ( i = atoi( cArg ) ) <= 5 ) { send_string( pChar, "Illegal room number `%d'.\n\r", i ); return; } if ( ( pToRoom = get_room_index( i ) ) == NULL ) { send_string( pChar, "No room with the number `%d' exists.\n\r", i ); return; } if ( pToRoom == pChar->pInRoom ) { send_string( pChar, "You are already here.\n\r" ); return; } if ( pChar->pInRoom != NULL ) { send_game_message( "~c disappears in a puff of smoke.", MESSAGE_DEST_ROOM, TRUE, pChar, NULL, pChar->pInRoom, FALSE, NUMBER_POSITION_RESTING, pChar ); char_from_room( pChar ); } char_to_room( pChar, pToRoom ); send_game_message( "~c appears in a puff of smoke.", MESSAGE_DEST_ROOM, TRUE, pChar, NULL, pToRoom, FALSE, NUMBER_POSITION_RESTING, pChar ); cmd_look( pChar, "" ); return; usage: send_string( pChar, "Usage: goto <room number>\n\r" ); } /* * Transfers a character to the given room. */ void cmd_transfer( CHAR_DATA *pChar, char *pArgument ) { ROOM_INDEX_DATA *pToRoom; CHAR_DATA *pChar2 = NULL; char cArg1[MAX_INPUT]; char cArg2[MAX_INPUT]; int i; pArgument = one_arg( pArgument, cArg1 ); pArgument = one_arg( pArgument, cArg2 ); if ( cArg1[0] == '\0' ) goto usage; if ( cArg2[0] != '\0' ) { if ( is_number( cArg2 ) != TRUE ) goto usage; if ( ( i = atoi( cArg2 ) ) <= 5 ) { send_string( pChar, "Illegal room number `%d'.\n\r", i ); return; } if ( ( pToRoom = get_room_index( i ) ) == NULL ) { send_string( pChar, "No room with the number `%d' exists.\n\r", i ); return; } } else pToRoom = pChar->pInRoom; for ( i = 0; i < iHashListSize; i++ ) { for ( pChar2 = ppCharList[i]; pChar2; pChar2 = pChar2->pNext ) { if ( IS_NPC( pChar2 ) ) { if ( multi_compare_2( cArg1, pChar2->pNPCData->pNameList ) == TRUE ) goto found; } else { if ( str_compare( cArg1, pChar2->pPCData->sName ) == TRUE ) goto found; } } } send_string( pChar, "Character not found.\n\r" ); return; found: if ( pChar == pChar2 ) { send_string( pChar, "Use the `goto' command to transfer yourself.\n\r" ); return; } if ( pToRoom == pChar2->pInRoom ) { send_string( pChar, "They are already here.\n\r" ); return; } if ( pChar2->pInRoom != NULL ) { send_game_message( "~c disappears in a puff of smoke.", MESSAGE_DEST_ROOM, TRUE, pChar2, NULL, pChar2->pInRoom, FALSE, NUMBER_POSITION_RESTING, pChar2 ); char_from_room( pChar2 ); } char_to_room( pChar2, pToRoom ); send_game_message( "~c appears in a puff of smoke.", MESSAGE_DEST_CHAR, pChar, NUMBER_POSITION_RESTING, pChar2 ); send_game_message( "~c appears in a puff of smoke.", MESSAGE_DEST_ROOM, TRUE, pChar2, pChar, pToRoom, FALSE, NUMBER_POSITION_RESTING, pChar2 ); send_string( pChar2, "\n\r" ); cmd_look( pChar2, "" ); return; usage: send_string( pChar, "Usage: transfer <name> [room number]\n\r" ); } void cmd_ltell( CHAR_DATA *pChar, char *pArgument ) { CHAR_DATA *pChar2; char cArg[MAX_INPUT]; if ( pChar->pTerm != NULL && pChar->pTerm->pControlled != NULL ) pChar2 = pChar->pTerm->pChar; else pChar2 = pChar; if ( IS_NPC( pChar2 ) ) { send_string( pChar, "Trying to get in on the action, huh?\n\r" ); return; } if ( pArgument[0] == '\0' ) { if ( !IS_SET( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_LOCAL_TELL ) ) { SET_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_LOCAL_TELL ); send_string( pChar, "Local Tell channel is now off.\n\r" ); } else { REMOVE_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_LOCAL_TELL ); send_string( pChar, "Local Tell channel is now on.\n\r" ); } return; } if ( IS_SET( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_LOCAL_TELL ) ) { REMOVE_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_LOCAL_TELL ); send_string( pChar, "Local Tell channel is now on.\n\r" ); } pArgument = one_arg( pArgument, cArg ); if ( cArg[0] == '\0' || pArgument[0] == '\0' ) { send_string( pChar, "Usage: ltell <player name> <string>\n\r" ); return; } send_string( pChar, "You tell %s, `%s'\n\r", cap_first( cArg ), pArgument ); } void cmd_rtell( CHAR_DATA *pChar, char *pArgument ) { MUD_COMM_DATA *pMUDComm; GENERIC_DATA *pGen; CHAR_DATA *pChar2; char cArg[MAX_INPUT]; char cArg2[MAX_INPUT]; short s; byte b; if ( pChar->pTerm != NULL && pChar->pTerm->pControlled != NULL ) pChar2 = pChar->pTerm->pChar; else pChar2 = pChar; if ( IS_NPC( pChar2 ) ) { send_string( pChar, "Trying to get in on the action, huh?\n\r" ); return; } if ( pArgument[0] == '\0' ) { if ( !IS_SET( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_REMOTE_TELL ) ) { SET_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_REMOTE_TELL ); send_string( pChar, "Remote Tell channel is now off.\n\r" ); } else { REMOVE_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_REMOTE_TELL ); send_string( pChar, "Remote Tell channel is now on.\n\r" ); } return; } if ( IS_SET( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_REMOTE_TELL ) ) { REMOVE_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_REMOTE_TELL ); send_string( pChar, "Remote Tell channel is now on.\n\r" ); } pArgument = one_arg( pArgument, cArg ); pArgument = one_arg( pArgument, cArg2 ); if ( cArg[0] == '\0' || cArg2[0] == '\0' || pArgument[0] == '\0' ) { send_string( pChar, "Usage: rtell <player name> <MUD name> <string>\n\r" ); return; } for ( pMUDComm = pMUDCommList; pMUDComm; pMUDComm = pMUDComm->pNext ) { if ( pMUDComm->iConState == MUD_COMM_CON_READY && str_compare( pMUDComm->pMUDName, cArg2 ) == TRUE ) break; } if ( pMUDComm == NULL ) { send_string( pChar, "No such MUD connected.\n\r" ); return; } pGen = alloc_mem( sizeof( *pGen ) ); pGen->pData = pChar->pTerm; pGen->pNext = pMUDComm->pWaitList; pMUDComm->pWaitList = pGen; b = MUD_COMM_CMD_TELL_CHANNEL; s = 0; write_mudcomm_data_buffer( pMUDComm, &b, 1 ); write_mudcomm_data_buffer( pMUDComm, cArg, ( strlen( cArg ) + 1 ) ); write_mudcomm_data_buffer( pMUDComm, (byte *) &s, sizeof( s ) ); write_mudcomm_data_buffer( pMUDComm, pChar2->pPCData->sName, ( strlen( pChar2->pPCData->sName ) + 1 ) ); write_mudcomm_data_buffer( pMUDComm, pArgument, ( strlen( pArgument ) + 1 ) ); send_string( pChar, "You tell %s@%s, `%s'\n\r", cap_first( cArg ), pMUDComm->pMUDName, pArgument ); send_string( pChar, "Message sent to %s, waiting for confirmation.\n\r", pMUDComm->pMUDName ); } void cmd_chat( CHAR_DATA *pChar, char *pArgument ) { TERM_DATA *pTerm; CHAR_DATA *pChar2; MUD_COMM_DATA *pMUDComm; char b; if ( pChar->pTerm != NULL && pChar->pTerm->pControlled != NULL ) pChar2 = pChar->pTerm->pChar; else pChar2 = pChar; if ( IS_NPC( pChar2 ) ) { send_string( pChar, "Trying to get in on the action, huh?\n\r" ); return; } if ( pArgument[0] == '\0' ) { if ( !IS_SET( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_CHAT ) ) { SET_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_CHAT ); send_string( pChar, "Chat channel is now off.\n\r" ); } else { REMOVE_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_CHAT ); send_string( pChar, "Chat channel is now on.\n\r" ); } return; } if ( IS_SET( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_CHAT ) ) { REMOVE_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_CHAT ); send_string( pChar, "Chat channel is now on.\n\r" ); } if ( iMode == MODE_RPG ) { for ( pTerm = pTermList; pTerm != NULL; pTerm = pTerm->pNext ) { if ( ( pTerm->iConState == CON_PLAYING || pTerm->iConState == CON_NPC_EDITOR || pTerm->iConState == CON_OBJECT_EDITOR || pTerm->iConState == CON_ROOM_EDITOR ) && pTerm->pChar != NULL && pTerm->pChar->iLevel >= BUILDER_LEVEL ) { term_send_string( pTerm, "%s[Chat] %s : %s\n\r", ( pTerm == pChar->pTerm ? "" : "\n\r" ), pChar2->pPCData->sName, pArgument ); } } } else { for ( pTerm = pTermList; pTerm != NULL; pTerm = pTerm->pNext ) { if ( ( pTerm->iConState == CON_PLAYING || pTerm->iConState == CON_NPC_EDITOR || pTerm->iConState == CON_OBJECT_EDITOR || pTerm->iConState == CON_ROOM_EDITOR ) && pTerm->pChar != NULL ) { term_send_string( pTerm, "%s[Chat] %s : %s\n\r", ( pTerm == pChar->pTerm ? "" : "\n\r" ), pChar2->pPCData->sName, pArgument ); } } } b = MUD_COMM_CMD_CHAT_CHANNEL; for ( pMUDComm = pMUDCommList; pMUDComm; pMUDComm = pMUDComm->pNext ) { if ( pMUDComm->iConState == MUD_COMM_CON_READY ) { write_mudcomm_data_buffer( pMUDComm, &b, 1 ); write_mudcomm_data_buffer( pMUDComm, pChar2->pPCData->sName, ( strlen( pChar2->pPCData->sName ) + 1 ) ); write_mudcomm_data_buffer( pMUDComm, pArgument, ( strlen( pArgument ) + 1 ) ); } } } void cmd_lwizcomm( CHAR_DATA *pChar, char *pArgument ) { TERM_DATA *pTerm; CHAR_DATA *pChar2; if ( pChar->pTerm != NULL && pChar->pTerm->pControlled != NULL ) pChar2 = pChar->pTerm->pChar; else pChar2 = pChar; if ( IS_NPC( pChar2 ) ) { send_string( pChar, "Trying to get in on the action, huh?\n\r" ); return; } if ( pArgument[0] == '\0' ) { if ( !IS_SET( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_LOCAL_WIZCOMM ) ) { SET_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_LOCAL_WIZCOMM ); send_string( pChar, "Local WizComm channel is now off.\n\r" ); } else { REMOVE_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_LOCAL_WIZCOMM ); send_string( pChar, "Local WizComm channel is now on.\n\r" ); } return; } if ( IS_SET( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_LOCAL_WIZCOMM ) ) { REMOVE_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_LOCAL_WIZCOMM ); send_string( pChar, "Local WizComm channel is now on.\n\r" ); } for ( pTerm = pTermList; pTerm != NULL; pTerm = pTerm->pNext ) { if ( ( pTerm->iConState == CON_PLAYING || pTerm->iConState == CON_NPC_EDITOR || pTerm->iConState == CON_OBJECT_EDITOR || pTerm->iConState == CON_ROOM_EDITOR ) && pTerm->pChar != NULL && pTerm->pChar->iLevel >= BUILDER_LEVEL ) { term_send_string( pTerm, "%s[Local WizComm] %s : %s\n\r", ( pTerm == pChar->pTerm ? "" : "\n\r" ), pChar2->pPCData->sName, pArgument ); } } } void cmd_wizcomm( CHAR_DATA *pChar, char *pArgument ) { TERM_DATA *pTerm; MUD_COMM_DATA *pMUDComm; CHAR_DATA *pChar2; char b; if ( pChar->pTerm != NULL && pChar->pTerm->pControlled != NULL ) pChar2 = pChar->pTerm->pChar; else pChar2 = pChar; if ( IS_NPC( pChar2 ) ) { send_string( pChar, "Trying to get in on the action, huh?\n\r" ); return; } if ( pArgument[0] == '\0' ) { if ( !IS_SET( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_WIZCOMM ) ) { SET_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_WIZCOMM ); send_string( pChar, "WizComm channel is now off.\n\r" ); } else { REMOVE_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_WIZCOMM ); send_string( pChar, "WizComm channel is now on.\n\r" ); } return; } if ( IS_SET( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_WIZCOMM ) ) { REMOVE_FLAG( pChar2->pPCData->fChanFlags, FLAG_CHANNEL_NO_WIZCOMM ); send_string( pChar, "WizComm channel is now on.\n\r" ); } for ( pTerm = pTermList; pTerm != NULL; pTerm = pTerm->pNext ) { if ( ( pTerm->iConState == CON_PLAYING || pTerm->iConState == CON_NPC_EDITOR || pTerm->iConState == CON_OBJECT_EDITOR || pTerm->iConState == CON_ROOM_EDITOR ) && pTerm->pChar != NULL && pTerm->pChar->iLevel >= BUILDER_LEVEL ) { term_send_string( pTerm, "%s[WizComm] %s : %s\n\r", ( pTerm == pChar->pTerm ? "" : "\n\r" ), pChar2->pPCData->sName, pArgument ); } } b = MUD_COMM_CMD_WIZ_CHANNEL; for ( pMUDComm = pMUDCommList; pMUDComm; pMUDComm = pMUDComm->pNext ) { if ( pMUDComm->iConState == MUD_COMM_CON_READY ) { write_mudcomm_data_buffer( pMUDComm, &b, 1 ); write_mudcomm_data_buffer( pMUDComm, pChar2->pPCData->sName, ( strlen( pChar2->pPCData->sName ) + 1 ) ); write_mudcomm_data_buffer( pMUDComm, pArgument, ( strlen( pArgument ) + 1 ) ); } } } /* * End of blr_cmd.c */