/* Crimson2 Mud Server
* All source written/copyright Ryan Haksi 1995 *
* This source code is proprietary. Use in whole or in part without
* explicity permission by the author is strictly prohibited
*
* Current email address(es): cryogen@infoserve.net
* Phone number: (604) 591-5295
*
* C4 Script Language written/copyright Cam Lesiuk 1995
* Email: clesiuk@engr.uvic.ca
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
#include "crimson2.h"
#include "macro.h"
#include "mem.h"
#include "log.h"
#include "queue.h"
#include "str.h"
#include "parse.h"
#include "thing.h"
#include "index.h"
#include "edit.h"
#include "history.h"
#include "socket.h"
#include "send.h"
#include "base.h"
#include "exit.h"
#include "world.h"
#include "char.h"
#include "player.h"
#include "board.h"
#include "cmd_brd.h"
/* God / Editing Command */
CMDPROC(CmdBList) { /*(THING *thing, BYTE *cmd)*/
LWORD board;
LWORD i;
BYTE buf[256];
SOCK *sock;
cmd = StrOneWord(cmd, NULL);
if (!*cmd) {
SendThing("^p # Boards Entries Editors\n", thing);
SendThing("^P =-=-=-=-=-=-= =-=-=-= =-=-=-=\n", thing);
for (i=0; i<boardListMax; i++) {
sprintf(buf,
"^r%4ld ^G[^g%-30s^G] [^g%2ld/%2hd^G] [^g%s^G]",
boardList[i].bVirtual,
boardList[i].bName->sText,
boardList[i].bIndex.iNum,
boardList[i].bMax,
boardList[i].bEditor->sText);
SendThing(buf, thing);
SendThing("\n", thing);
}
sprintf(buf, "^pBoards: ^g%ld\n", boardListMax);
SendThing(buf, thing);
SendHint("^;HINT: Try ^wBLIST ^c<virtual> for a list of messages\n", thing);
return;
}
cmd = StrOneWord(cmd, buf);
board = BoardOf(atol(buf));
if (board == -1) {
SendThing("^wThere is no board with that virtual number\n", thing);
return;
}
sock = BaseControlFind(thing);
if (!sock || Character(sock->sHomeThing)->cLevel < boardList[board].bMinLevel) {
SendThing("^wYou are too low in level to read that board\n", thing);
return;
}
/* List of message titles */
if (!*cmd) {
BoardShow(board, thing);
SendHint("^;HINT: Try ^wBLIST ^c<virtual> <msg#> to read a message\n", thing);
return;
}
i = -1;
sscanf(cmd, " %ld", &i);
i -= 1;
if (i<0 || i>= boardList[board].bIndex.iNum) {
SendThing("^wThere is no message with that number\n", thing);
return;
}
BoardShowMessage(board, i, thing);
}
/* Create a new keyword in the given section */
CMDPROC(CmdBCreate) { /*(THING *thing, BYTE *cmd)*/
BYTE fileName[256];
LWORD virtual;
LWORD board;
/* rip apart arguments */
cmd = StrOneWord(cmd, NULL);
cmd = StrOneWord(cmd, fileName);
virtual = -1;
sscanf(cmd, "%ld", &virtual); /* see if they entered a number */
if (!*cmd || !*fileName || virtual<0) {
SendThing("^rTry BCREATE <FileName> <Board Virtual#>\n", thing);
return;
}
if (!StrIsAlNum(fileName)) {
SendThing("^rThat was not a valid FileName!\n", thing);
}
board = BoardCreate(fileName, virtual);
if (board == -1) {
SendThing("^wOh oh this aint good, critical error of some kind...\n", thing);
return;
}
BoardTableWrite();
BoardWrite(board);
}
/* Edit the entry for a given keyword */
CMDPROC(CmdBName) { /*(THING *thing, BYTE *cmd)*/
LWORD board;
BYTE buf[256];
BYTE strName[256];
cmd = StrOneWord(cmd, NULL);
if (!*cmd) {
SendThing("^rTry BName <Board Virtual>\n", thing);
return;
}
board = BoardOf(atol(cmd));
if (board == -1) {
SendThing("^rNo board with that virtual found\n", thing);
return;
}
sprintf(buf, "^bBoard [^c%-18s^b]\n", boardList[board].bFileName);
SendThing(buf, thing);
sprintf(buf, "^bVirtual: [^c%ld]\n", boardList[board].bVirtual);
SendThing(buf, thing);
sprintf(strName, "Board [%s #%ld] - Name", boardList[board].bFileName, boardList[board].bVirtual);
EDITSTR(thing, boardList[board].bName, 64, strName, EP_ONELINE|EP_ENDNOLF);
EDITFLAG(thing, &boardListFlag, B_UNSAVED);
}
/* Edit the entry for a given keyword */
CMDPROC(CmdBEditor) { /*(THING *thing, BYTE *cmd)*/
LWORD board;
BYTE buf[256];
BYTE strName[256];
cmd = StrOneWord(cmd, NULL);
if (!*cmd) {
SendThing("^rTry BEditor <Board Virtual>\n", thing);
return;
}
board = BoardOf(atol(cmd));
if (board == -1) {
SendThing("^rNo board with that virtual found\n", thing);
return;
}
sprintf(buf, "^bBoard [^c%-18s^b]\n", boardList[board].bFileName);
SendThing(buf, thing);
sprintf(buf, "^bVirtual: [^c%ld]\n", boardList[board].bVirtual);
SendThing(buf, thing);
sprintf(strName, "Board [%s #%ld] - Editor", boardList[board].bFileName, boardList[board].bVirtual);
EDITSTR(thing, boardList[board].bEditor, 64, strName, EP_ONELINE|EP_ENDNOLF);
EDITFLAG(thing, &boardListFlag, B_UNSAVED);
}
CMDPROC(CmdBEdit) {
LWORD board;
BYTE buf[256];
BYTE strName[256];
BOARDMSG *boardMsg;
LWORD i;
if (thing->tType!=TTYPE_PLR) {
SendThing("^rMobs cant edit board messages\n", thing);
return;
}
cmd = StrOneWord(cmd, NULL);
if (!*cmd) {
SendThing("^rTry BEdit <Board Virtual> <msg #>\n", thing);
return;
}
board = BoardOf(atol(cmd));
if (board == -1) {
SendThing("^rNo board with that virtual found\n", thing);
return;
}
sprintf(buf, "^bBoard [^c%-18s^b]\n", boardList[board].bFileName);
SendThing(buf, thing);
sprintf(buf, "^bVirtual: [^c%ld]\n", boardList[board].bVirtual);
SendThing(buf, thing);
/* check virtual # */
cmd = StrOneWord(cmd, NULL);
i = -1;
sscanf(cmd, " %ld", &i);
i -= 1;
if (i<0 || i>= boardList[board].bIndex.iNum) {
SendThing("^wThere is no message with that number\n", thing);
return;
}
boardMsg = BoardMsg(boardList[board].bIndex.iThing[i]);
if ( (Character(thing)->cLevel<LEVEL_CODER)
||(!StrExact(thing->tSDesc->sText, boardMsg->bAuthor->sText)) ) {
SendThing("^rYou can only edit your own messages\n", thing);
return;
}
sprintf(strName, "Board [%s %ld]- Edit", boardList[board].bFileName, boardList[board].bVirtual);
EDITSTR(thing, boardMsg->bText, 2048, strName, EP_ENDLF|EP_IMMNEW);
EDITFLAG(thing, &boardList[board].bFlag, B_UNSAVED);
}
CMDPROC(CmdBWrite) {
LWORD board;
BYTE buf[256];
BYTE strName[256];
BOARDMSG *boardMsg;
cmd = StrOneWord(cmd, NULL);
if (!*cmd) {
SendThing("^rTry BWrite <Board Virtual> <msg title>\n", thing);
return;
}
board = BoardOf(atol(cmd));
if (board == -1) {
SendThing("^rNo board with that virtual found\n", thing);
return;
}
sprintf(buf, "^bBoard [^c%-18s^b]\n", boardList[board].bFileName);
SendThing(buf, thing);
sprintf(buf, "^bVirtual: [^c%ld]\n", boardList[board].bVirtual);
SendThing(buf, thing);
/* chuck virtual # */
cmd = StrOneWord(cmd, NULL);
if (!*cmd)
boardMsg = BoardMsgCreate(board, thing, "^Y<No Title>", BOARD_NOTREPLY);
else
boardMsg = BoardMsgCreate(board, thing, cmd, BOARD_NOTREPLY);
if (!boardMsg) {
SendThing("^rNot good, critical error - aborting message\n", thing);
return;
}
sprintf(strName, "Board [%s %ld]- Write", boardList[board].bFileName, boardList[board].bVirtual);
EDITSTR(thing, boardMsg->bText, 2048, strName, EP_ENDLF|EP_IMMNEW);
EDITFLAG(thing, &boardList[board].bFlag, B_UNSAVED);
}
CMDPROC(CmdBReply) {
LWORD board;
BYTE buf[256];
BYTE titleBuf[50];
BYTE strName[256];
BOARDMSG *boardMsg;
LWORD i;
cmd = StrOneWord(cmd, NULL);
if (!*cmd) {
SendThing("^rTry BWrite <Board Virtual> <msg #> [<msg title>]\n", thing);
return;
}
board = BoardOf(atol(cmd));
if (board == -1) {
SendThing("^rNo board with that virtual found\n", thing);
return;
}
sprintf(buf, "^bBoard [^c%-18s^b]\n", boardList[board].bFileName);
SendThing(buf, thing);
sprintf(buf, "^bVirtual: [^c%ld]\n", boardList[board].bVirtual);
SendThing(buf, thing);
/* check msg # */
cmd = StrOneWord(cmd, NULL);
i = -1;
sscanf(cmd, " %ld", &i);
i -= 1;
if (i<0 || i>= boardList[board].bIndex.iNum) {
SendThing("^wThere is no message with that number\n", thing);
return;
}
boardMsg = BoardMsg(boardList[board].bIndex.iThing[i]);
cmd = StrOneWord(cmd, NULL);
if (!*cmd) {
strcpy(titleBuf, "Re:");
strncpy(titleBuf+3, boardMsg->bTitle->sText, sizeof(titleBuf)-3);
titleBuf[sizeof(titleBuf)-1] = 0;
boardMsg = BoardMsgCreate(board, thing, titleBuf, i);
} else
boardMsg = BoardMsgCreate(board, thing, cmd, i);
if (!boardMsg) {
SendThing("^rNot good, critical error aborting message\n", thing);
return;
}
sprintf(strName, "Board [%s %ld]- Reply", boardList[board].bFileName, boardList[board].bVirtual);
EDITSTR(thing, boardMsg->bText, 2048, strName, EP_ENDLF|EP_IMMNEW);
EDITFLAG(thing, &boardList[board].bFlag, B_UNSAVED);
}
CMDPROC(CmdBErase) {
LWORD board;
BYTE buf[256];
BOARDMSG *boardMsg;
LWORD i;
cmd = StrOneWord(cmd, NULL);
if (!*cmd) {
SendThing("^rTry BErase <Board Virtual> <msg #>\n", thing);
return;
}
board = BoardOf(atol(cmd));
if (board == -1) {
SendThing("^rNo board with that virtual found\n", thing);
return;
}
sprintf(buf, "^bBoard [^c%-18s^b]\n", boardList[board].bFileName);
SendThing(buf, thing);
sprintf(buf, "^bVirtual: [^c%ld]\n", boardList[board].bVirtual);
SendThing(buf, thing);
/* check msg # */
cmd = StrOneWord(cmd, NULL);
i = -1;
sscanf(cmd, " %ld", &i);
i -= 1;
if (i<0 || i>= boardList[board].bIndex.iNum) {
SendThing("^wThere is no message with that number\n", thing);
return;
}
boardMsg = BoardMsg(boardList[board].bIndex.iThing[i]);
SendThing("^wDeleting:\n", thing);
sprintf(buf, "^gMessage Number: ^G[^b%ld/%ld^G]\n", i+1, boardList[board].bIndex.iNum);
SendThing(buf, thing);
sprintf(buf, "^gAuthor: ^G[^b%s^G]\n", boardMsg->bAuthor->sText);
SendThing(buf, thing);
SendThing( "^gMessage Title: ^G[^g", thing);
SendThing(boardMsg->bTitle->sText, thing);
SendThing("^G]\n", thing);
BoardMsgDelete(board, i);
}