/* 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
*/
/*****************************************************************
* *
* *
* A R E A S T U F F *
* *
* *
*****************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include "crimson2.h"
#include "macro.h"
#include "mem.h"
#include "queue.h"
#include "log.h"
#include "str.h"
#include "ini.h"
#include "extra.h"
#include "file.h"
#include "thing.h"
#include "reset.h"
#include "exit.h"
#include "index.h"
#include "world.h"
#include "area.h"
#include "edit.h"
#include "history.h"
#include "socket.h"
#include "send.h"
#include "base.h"
#include "object.h"
#include "char.h"
#include "mobile.h"
#include "player.h"
#include "parse.h"
#include "cmd_area.h"
#include "cmd_rst.h"
void RSetDesc(THING *reset, BYTE rCmd, WORD rIf, LWORD rArg1, LWORD rArg2, LWORD rArg3, LWORD rArg4) {
BYTE buf[256];
BYTE key[512];
BYTE name[256];
MOBTEMPLATE *mobile;
OBJTEMPLATE *object;
strcpy(key, "rst reset");
strcpy(buf, "");
strcpy(name, "");
switch (rCmd) {
case 'M':
strcat(key, " mob ");
mobile = MobileOf(rArg1);
if (mobile)
sprintf(name, "%s", mobile->mSDesc->sText);
else
sprintf(name, "<???>");
strcat(key, name);
sprintf(buf,
"^wMOB: ^CIf^b[^p%hd^b] ^CMob^b[^p%5ld^b] ^CGamemax[^p%3ld^b] ^CRoommax^b[^p%3ld^b] ^r%s",
rIf,
rArg1,
rArg2,
rArg4,
name);
break;
case 'O':
strcat(key, " obj");
object = ObjectOf(rArg1);
if (object)
sprintf(name, "%s", object->oSDesc->sText);
else
sprintf(name, "<???>");
strcat(key, name);
sprintf(buf,
"^wOBJ: ^CIf^b[^p%hd^b] ^CObj^b[^p%5ld^b] ^CGamemax^b[^p%3ld^b] ^CRoommax^b[^p%3ld^b] ^r%s",
rIf,
rArg1,
rArg2,
rArg4,
name);
break;
case 'G':
strcat(key, " giv");
object = ObjectOf(rArg1);
if (object)
sprintf(name, "%s", object->oSDesc->sText);
else
sprintf(name, "<???>");
strcat(key, name);
sprintf(buf,
"^wGIV: ^CIf^b[^p%hd^b] ^CObj^b[^p%5ld^b] ^CGamemax^b[^p%3ld^b] ^r%s",
rIf,
rArg1,
rArg2,
name);
break;
case 'P':
strcat(key, " put");
object = ObjectOf(rArg1);
if (object)
sprintf(name, "%s", object->oSDesc->sText);
else
sprintf(name, "<???>");
strcat(key, name);
sprintf(buf,
"^wPUT: ^CIf^b[^p%hd^b] ^CObj^b[^p%5ld^b] ^CGamemax^b[^p%3ld^b] ^CDestObj^b[^p%5ld^b] ^r%s",
rIf,
rArg1,
rArg2,
rArg4,
name);
break;
case 'E':
strcat(key, " equ");
object = ObjectOf(rArg1);
if (object)
sprintf(name, "%s", object->oSDesc->sText);
else
sprintf(name, "<???>");
strcat(key, name);
sprintf(buf,
"^wEQU: ^CIf^b[^p%hd^b] ^CObj^b[^p%5ld^b] ^CGamemax^b[^p%3ld^b] ^r%s",
rIf,
rArg1,
rArg2,
name);
break;
case 'D':
strcat(key, " dor");
sprintf(buf,
"^wDOR: ^CIf^b[^p%hd^b] ^CExit^b[^p%s^b] ^CFlag^b[^p%s^b]",
rIf,
dirList[rArg2],
FlagSprintf(name, rArg3, eFlagList, '|', sizeof(name)));
strcat(key, name);
break;
case 'R':
strcat(key, " rem");
object = ObjectOf(rArg2);
if (object)
sprintf(name, "%s", object->oSDesc->sText);
else
sprintf(name, "<???>");
strcat(key, name);
sprintf(buf,
"^wREM: ^CIf^b[^C%hd^b] ^CObj^b[^p%5ld^b] ^r%s",
rIf,
rArg2,
name);
break;
default:
strcat(key, " ???");
if (isprint(rCmd))
sprintf(buf,
"^w[%c]: ^CIf^b[^p%hd^b] ^CArg1^b[^p%5ld^b] ^CArb2^b[^p%5ld^b] ^CArg3^b[^p%5ld^b] ^CArg4^b[^p%5ld^b] ^r<???>",
rCmd,
rIf,
rArg1,
rArg2,
rArg3,
rArg4);
else
sprintf(buf,
"^w[\\%hd]: ^CIf^b[^p%hd^b] ^CArg1^b[^p%5ld^b] ^CArb2^b[^p%5ld^b] ^CArg3^b[^p%5ld^b] ^CArg4^b[^p%5ld^b] ^r<???>",
(WORD)rCmd,
rIf,
rArg1,
rArg2,
rArg3,
rArg4);
}
STRFREE(reset->tSDesc);
reset->tSDesc = STRCREATE(buf);
STRFREE(Base(reset)->bLDesc);
Base(reset)->bLDesc = STRCREATE(buf);
STRFREE(Base(reset)->bKey);
Base(reset)->bKey = STRCREATE(key);
}
CMDPROC(CmdRShow) { /* void CmdProc(THING thing, BYTE* cmd) */
THING *reset;
THING *world = NULL;
RESETLIST *resetList = NULL;
LWORD area;
LWORD i;
area = AGetArea(thing, &cmd);
if (area == -1)
return;
if (BIT(areaList[area].aSystem, AS_RSTSHOWN)) {
SendThing("Reset Commands are allready being shown!\n", thing);
return;
}
resetList = areaList[area].aResetList;
for (i=0; i<areaList[area].aResetNum; i++) {
/* strip out comments (for now?) */
if (resetList[i].rCmd=='#' || resetList[i].rCmd=='*')
continue;
/* Manufacture a "ResetCmd" */
reset = ObjectCreate(resetTemplate, NULL);
OBJECTSETFIELD(reset, OF_RESET_CMD, resetList[i].rCmd);
OBJECTSETFIELD(reset, OF_RESET_IF, resetList[i].rIf);
OBJECTSETFIELD(reset, OF_RESET_ARG2,resetList[i].rArg2.rNum);
OBJECTSETFIELD(reset, OF_RESET_ARG4,resetList[i].rArg4.rNum);
switch (resetList[i].rCmd) {
case 'M':
OBJECTSETFIELD(reset, OF_RESET_ARG1,resetList[i].rArg1.rMob->mVirtual);
OBJECTSETFIELD(reset, OF_RESET_ARG3,Wld(resetList[i].rArg3.rWld)->wVirtual);
world = resetList[i].rArg3.rWld;
break;
case 'O':
OBJECTSETFIELD(reset, OF_RESET_ARG1,resetList[i].rArg1.rObj->oVirtual);
OBJECTSETFIELD(reset, OF_RESET_ARG3,Wld(resetList[i].rArg3.rWld)->wVirtual);
world = resetList[i].rArg3.rWld;
break;
case 'G':
OBJECTSETFIELD(reset, OF_RESET_ARG1,resetList[i].rArg1.rObj->oVirtual);
break;
case 'P':
OBJECTSETFIELD(reset, OF_RESET_ARG1,resetList[i].rArg1.rObj->oVirtual);
OBJECTSETFIELD(reset, OF_RESET_ARG3,resetList[i].rArg3.rNum);
break;
case 'E':
OBJECTSETFIELD(reset, OF_RESET_ARG1,resetList[i].rArg1.rObj->oVirtual);
break;
case 'D':
OBJECTSETFIELD(reset, OF_RESET_ARG1,Wld(resetList[i].rArg1.rWld)->wVirtual);
OBJECTSETFIELD(reset, OF_RESET_ARG3,resetList[i].rArg3.rNum);
world = resetList[i].rArg1.rWld;
break;
case 'R':
OBJECTSETFIELD(reset, OF_RESET_ARG1,Wld(resetList[i].rArg1.rWld)->wVirtual);
world = resetList[i].rArg1.rWld;
break;
default:
OBJECTSETFIELD(reset, OF_RESET_ARG1,resetList[i].rArg1.rNum);
OBJECTSETFIELD(reset, OF_RESET_ARG3,resetList[i].rArg3.rNum);
}
/* it in the room */
ThingTo(reset, world);
/* give it a specific description */
RSetDesc(reset,
OBJECTGETFIELD(reset, OF_RESET_CMD),
OBJECTGETFIELD(reset, OF_RESET_IF),
OBJECTGETFIELD(reset, OF_RESET_ARG1),
OBJECTGETFIELD(reset, OF_RESET_ARG2),
OBJECTGETFIELD(reset, OF_RESET_ARG3),
OBJECTGETFIELD(reset, OF_RESET_ARG4));
}
BITSET(areaList[area].aSystem, AS_RSTSHOWN);
}
CMDPROC(CmdRCreate) { /* void CmdProc(THING *thing, BYTE* cmd) */
THING *reset;
LWORD area;
LWORD i;
BYTE buf[256];
WORD rCmd;
WORD rIf = -1;
WORD rArg1;
WORD rArg2;
WORD rArg3;
WORD rArg4;
MOBTEMPLATE *mobile;
OBJTEMPLATE *object;
EXIT *exit;
BYTE *validCmd[] = {
"MOBILE",
"OBJECT",
"GIVE",
"PUT",
"EQUIP",
"DOR",
"DOORSET",
"REMOVE",
""
};
area = AGetArea(thing, &cmd);
if (area == -1)
return;
if (!BIT(areaList[area].aSystem, AS_RSTSHOWN)) {
/* Make sure cmds are allready being shown */
CmdRShow(thing, "");
}
cmd = StrOneWord(cmd, NULL); /* lose rcreate */
if (!*cmd) {
SendThing("Try ^gRCREATE <CMD> [IF||NOIF] ARG1 ARG2 ARG3\n\n", thing);
SendThing("^we.g. ^gRCREATE MOBILE <MOB#> <GAMEMAX> <ROOMMAX>\n", thing);
SendThing("^we.g. ^gRCREATE OBJECT <OBJ#> <GAMEMAX> <ROOMMAX>\n", thing);
SendThing("^we.g. ^gRCREATE GIVE <OBJ#> <GAMEMAX>\n", thing);
SendThing("^we.g. ^gRCREATE PUT <OBJ#> <GAMEMAX> <DESTOBJ#>\n", thing);
SendThing("^we.g. ^gRCREATE EQUIP <OBJ#> <GAMEMAX>\n", thing);
SendThing("^we.g. ^gRCREATE DOORSET <DIR> <EXITFLAG1>|<EXITFLAG2>...\n", thing);
SendThing("^we.g. ^gRCREATE REMOVE <OBJ#>\n", thing);
SendThing("\n", thing);
SendThing("^we.g. ^gRCREATE MOBILE 100 5 2\n", thing);
SendThing("^we.g. ^gRCREATE IF M 100 5 2\n", thing);
SendThing("^we.g. ^gRCREATE EQUIP IF 100 50\n", thing);
SendThing("^we.g. ^gRCREATE E NOIF 100 50\n", thing);
return;
}
cmd = StrOneWord(cmd, buf); /* determine cmd type */
i = TYPEFIND(buf, validCmd);
if (i== -1) {
SendThing("Invalid reset command!\n", thing);
return;
} else
rCmd = toupper(buf[0]);
cmd = StrOneWord(cmd, buf); /* determine if setting */
if (StrAbbrev("if", buf)) {
rIf = 1;
cmd = StrOneWord(cmd, buf); /* get arg setting into buf */
}
if (StrAbbrev("noif", buf)) {
rIf = 0;
cmd = StrOneWord(cmd, buf); /* get arg setting into buf */
}
/* Manufacture a "ResetCmd" */
switch (rCmd) {
case 'M':
if (rIf==-1) rIf = 0;
mobile = MobileOf(atoi(buf));
if (!mobile) {
SendThing("Unknown Mobile virtual number\n", thing);
return;
}
rArg1 = mobile->mVirtual;
cmd = StrOneWord(cmd, buf); /* get arg setting into buf */
rArg2 = atoi(buf);
if (rArg2==0) rArg2=99;
cmd = StrOneWord(cmd, buf); /* get arg setting into buf */
rArg4 = atoi(buf);
if (rArg4==0) rArg4=1;
break;
case 'O':
if (rIf==-1) rIf = 0;
object = ObjectOf(atoi(buf));
if (!object) {
SendThing("Unknown Object virtual number\n", thing);
return;
}
rArg1 = object->oVirtual;
cmd = StrOneWord(cmd, buf); /* get arg setting into buf */
rArg2 = atoi(buf);
if (rArg2==0) rArg2=99;
cmd = StrOneWord(cmd, buf); /* get arg setting into buf */
rArg4 = atoi(buf);
if (rArg4==0) rArg4=1;
break;
case 'G':
case 'E':
if (rIf==-1) rIf = 1;
object = ObjectOf(atoi(buf));
if (!object) {
SendThing("Unknown Object virtual number\n", thing);
return;
}
rArg1 = object->oVirtual;
cmd = StrOneWord(cmd, buf); /* get arg setting into buf */
rArg2 = atoi(buf);
if (rArg2==0) rArg2=99;
break;
case 'P':
if (rIf==-1) rIf = 1;
object = ObjectOf(atoi(buf));
if (!object) {
SendThing("Unknown Object virtual number\n", thing);
return;
}
rArg1 = object->oVirtual;
cmd = StrOneWord(cmd, buf); /* get arg setting into buf */
rArg2 = atoi(buf);
if (rArg2==0) rArg2=99;
cmd = StrOneWord(cmd, buf); /* get arg setting into buf */
object = ObjectOf(atoi(buf));
if (!object) {
SendThing("Unknown Dest. Object virtual number\n", thing);
return;
}
rArg4 = object->oVirtual;
break;
case 'D':
if (rIf==-1) rIf = 0;
/* determine exit and its direction */
exit = ExitFind(Wld(Base(thing)->bInside)->wExit, buf);
if (!exit) {
SendThing("Exit not found\n", thing);
return;
}
rArg2 = exit->eDir;
/* Determine flags selected */
cmd = StrOneWord(cmd, buf); /* get arg setting into buf */
if (!*buf) {
rArg3 = exit->eFlag;
} else {
if (IsNumber(buf))
rArg3 = atoi(buf);
else
rArg3 = FlagSscanf(buf, eFlagList);
}
break;
case 'R':
if (rIf==-1) rIf = 0;
object = ObjectOf(atoi(buf));
if (!object) {
SendThing("Unknown Object virtual number\n", thing);
return;
}
rArg2 = object->oVirtual;
break;
}
/* Make the object */
SendThing("^wReset command created\n", thing);
reset = ObjectCreate(resetTemplate, NULL);
OBJECTSETFIELD(reset, OF_RESET_CMD, rCmd);
OBJECTSETFIELD(reset, OF_RESET_IF, rIf);
OBJECTSETFIELD(reset, OF_RESET_ARG1,rArg1);
OBJECTSETFIELD(reset, OF_RESET_ARG2,rArg2);
OBJECTSETFIELD(reset, OF_RESET_ARG3,rArg3);
OBJECTSETFIELD(reset, OF_RESET_ARG4,rArg4);
ThingTo(reset, Base(thing)->bInside);
RSetDesc(reset, rCmd, rIf, rArg1, rArg2, rArg3, rArg4);
BITSET(areaList[area].aSystem, AS_RSTSHOWN);
}
/* big long and ugly..... and you wonder why I put it off */
CMDPROC(CmdRSet) { /* void CmdProc(THING *thing, BYTE* cmd) */
BYTE buf[256];
BYTE srcKey[256];
LWORD srcNum;
LWORD srcOffset;
THING *found;
WORD rCmd;
WORD area;
LWORD i;
MOBTEMPLATE *mobile;
OBJTEMPLATE *object;
EXIT *exit;
BYTE **list;
BYTE *mobList[] = {
"IF",
"MOBILE",
"GAMEMAX",
"ROOMMAX",
""
};
BYTE *objList[] = {
"IF",
"OBJECT",
"GAMEMAX",
"ROOMMAX",
""
};
BYTE *givList[] = {
"IF",
"OBJECT",
"GAMEMAX",
""
};
BYTE *putList[] = {
"IF",
"OBJECT",
"GAMEMAX",
"DESTOBJ",
""
};
BYTE *dorList[] = {
"IF",
"DIRECTION",
"EXITFLAG",
""
};
BYTE *remList[] = {
"IF",
"REMOVEOBJECT",
""
};
area = AGetArea(thing, &cmd);
if (area == -1)
return;
cmd = StrOneWord(cmd, NULL);
if (!*cmd) {
SendThing("^wUse RSET <COMMAND> <SETTING> <VALUE>\n", thing);
SendThing("\nTry RSET <COMMAND> for a list of valid settings\n", thing);
return;
}
cmd = ParseFind(cmd, srcKey, &srcOffset, &srcNum, NULL, NULL);
found = ThingFind(srcKey, -1, Base(thing)->bInside, TF_OBJ, &srcOffset);
if (!found) {
SendThing("^rThere doesnt appear to be anything like that around\n", thing);
return;
}
if (Obj(found)->oTemplate->oType != OTYPE_RESETCMD) {
SendThing("^rDont know how to break it to you but that isnt a reset command\n", thing);
return;
}
/* found is the reset command - do what we will to it */
rCmd = OBJECTGETFIELD(found, OF_RESET_CMD);
switch(rCmd) {
case 'M': list = mobList; break;
case 'O': list = objList; break;
case 'G':
case 'E': list = givList; break;
case 'P': list = putList; break;
case 'D': list = dorList; break;
case 'R': list = remList; break;
default:
SendThing("Unrecognised Reset Command, try another\n", thing);
return;
}
cmd = StrOneWord(cmd, buf);
if (!*buf) {
SendThing("^CValid settings:\n", thing);
SENDARRAY(list, 4, thing);
return;
}
i = TYPEFIND(buf, list);
if (i==-1) {
SendThing("^wThat is not a valid setting, Try ^rRSET <command> for a list\n", thing);
return;
}
/* checkout the setting */
/* To take advantage of the large degree of overlap between
settings for each rCmd, error checking is done against the
string, not its number in the list
*/
cmd = StrOneWord(cmd, buf);
if (StrExact(list[i], "IF")) {
if (atoi(buf)>0)
OBJECTSETFIELD(found, OF_RESET_IF, 1);
else
OBJECTSETFIELD(found, OF_RESET_IF, 0);
}
else if (StrExact(list[i], "MOBILE")) {
mobile = MobileOf(atoi(buf));
if (!mobile) {
SendThing("Unknown Mobile virtual number\n", thing);
return;
}
OBJECTSETFIELD(found, OF_RESET_ARG1, mobile->mVirtual);
}
else if (StrExact(list[i], "OBJECT")) {
object = ObjectOf(atoi(buf));
if (!object) {
SendThing("Unknown Object virtual number\n", thing);
return;
}
OBJECTSETFIELD(found, OF_RESET_ARG1, object->oVirtual);
}
else if (StrExact(list[i], "GAMEMAX")) {
OBJECTSETFIELD(found, OF_RESET_ARG2, atoi(buf));
}
else if (StrExact(list[i], "ROOMMAX")) {
OBJECTSETFIELD(found, OF_RESET_ARG4, atoi(buf));
}
else if (StrExact(list[i], "DESTOBJECT")) {
object = ObjectOf(atoi(buf));
if (!object) {
SendThing("Unknown Object virtual number\n", thing);
return;
}
OBJECTSETFIELD(found, OF_RESET_ARG3, object->oVirtual);
}
else if (StrExact(list[i], "DIRECTION")) {
/* determine exit and its direction */
exit = ExitFind(Wld(Base(thing)->bInside)->wExit, buf);
if (!exit) {
SendThing("Exit not found\n", thing);
return;
}
OBJECTSETFIELD(found, OF_RESET_ARG2, exit->eDir);
OBJECTSETFIELD(found, OF_RESET_ARG3, exit->eFlag);
}
else if (StrExact(list[i], "EXITFLAG")) {
if (IsNumber(buf))
OBJECTSETFIELD(found, OF_RESET_ARG3, atoi(buf));
else
OBJECTSETFIELD(found, OF_RESET_ARG3, FlagSscanf(buf, eFlagList));
}
else if (StrExact(list[i], "REMOVEOBJECT")) {
object = ObjectOf(atoi(buf));
if (!object) {
SendThing("Unknown Object virtual number\n", thing);
return;
}
OBJECTSETFIELD(found, OF_RESET_ARG2, object->oVirtual);
}
/* all done correct its descriptions */
RSetDesc(found,
OBJECTGETFIELD(found, OF_RESET_CMD),
OBJECTGETFIELD(found, OF_RESET_IF),
OBJECTGETFIELD(found, OF_RESET_ARG1),
OBJECTGETFIELD(found, OF_RESET_ARG2),
OBJECTGETFIELD(found, OF_RESET_ARG3),
OBJECTGETFIELD(found, OF_RESET_ARG4));
SendAction("^CNow $n\n",
found, thing, SEND_DST |SEND_VISIBLE);
BITSET(areaList[area].aSystem, AS_RSTSHOWN);
}
CMDPROC(CmdRFirst) { /* void CmdProc(THING *thing, BYTE* cmd) */
BYTE srcKey[256];
LWORD srcNum;
LWORD srcOffset;
THING *found;
cmd = StrOneWord(cmd, NULL);
ParseFind(cmd, srcKey, &srcOffset, &srcNum, NULL, NULL);
found = ThingFind(srcKey, -1, Base(thing)->bInside, TF_OBJ, &srcOffset);
if (!found) {
SendThing("^rThere doesnt appear to be anything like that around\n", thing);
return;
}
if (Obj(found)->oTemplate->oType != OTYPE_RESETCMD) {
SendThing("^rDont know how to break it to you but that isnt a reset command\n", thing);
return;
}
ThingFrom(found);
found->tNext = Base(thing)->bInside->tContain;
Base(thing)->bInside->tContain = found;
Base(found)->bInside = Base(thing)->bInside;
SendAction("^bYou move $n to the front\n",
found, thing, SEND_DST |SEND_VISIBLE);
SendAction("^b$N moves $n to the front\n",
found, thing, SEND_ROOM|SEND_VISIBLE);
}
CMDPROC(CmdRUpdate) { /* void CmdProc(THING *thing, BYTE* cmd) */
THING *reset;
RESETLIST *resetList = NULL;
LWORD area;
LWORD i;
WORD rCmd;
LWORD iWld;
BYTE buf[256];
area = AGetArea(thing, &cmd);
if (area == -1)
return;
if (!BIT(areaList[area].aSystem, AS_RSTSHOWN)) {
SendThing("Reset Commands arent even being shown!\n", thing);
return;
}
resetList = areaList[area].aResetList;
i=0;
for (iWld=0; iWld<areaList[area].aWldIndex.iNum; iWld++) {
for (reset=areaList[area].aWldIndex.iThing[iWld]->tContain;
reset && reset->tType==TTYPE_OBJ && Obj(reset)->oTemplate->oType==OTYPE_RESETCMD;
reset=reset->tNext) {
/* strip out comments (for now?) */
rCmd = OBJECTGETFIELD(reset, OF_RESET_CMD);
if (rCmd=='#' || rCmd=='*')
continue;
/* ensure adequate space */
REALLOC("CmdRUpdate(cmd_rst.c): resetList reallocation\n", resetList, RESETLIST, i+1, areaList[area].aResetByte);
resetList[i].rCmd = OBJECTGETFIELD(reset, OF_RESET_CMD);
resetList[i].rIf = OBJECTGETFIELD(reset, OF_RESET_IF);
resetList[i].rArg2.rNum = OBJECTGETFIELD(reset, OF_RESET_ARG2);
resetList[i].rArg4.rNum = OBJECTGETFIELD(reset, OF_RESET_ARG4);
switch (resetList[i].rCmd) {
case 'M':
resetList[i].rArg1.rMob = MobileOf(OBJECTGETFIELD(reset, OF_RESET_ARG1));
resetList[i].rArg3.rWld = areaList[area].aWldIndex.iThing[iWld];
break;
case 'O':
resetList[i].rArg1.rObj = ObjectOf(OBJECTGETFIELD(reset, OF_RESET_ARG1));
resetList[i].rArg3.rWld = areaList[area].aWldIndex.iThing[iWld];
break;
case 'G':
resetList[i].rArg1.rObj = ObjectOf(OBJECTGETFIELD(reset, OF_RESET_ARG1));
break;
case 'P':
resetList[i].rArg1.rObj = ObjectOf(OBJECTGETFIELD(reset, OF_RESET_ARG1));
resetList[i].rArg3.rNum = OBJECTGETFIELD(reset, OF_RESET_ARG3);
break;
case 'E':
resetList[i].rArg1.rObj = ObjectOf(OBJECTGETFIELD(reset, OF_RESET_ARG1));
break;
case 'D':
resetList[i].rArg1.rWld = areaList[area].aWldIndex.iThing[iWld];
resetList[i].rArg3.rNum = OBJECTGETFIELD(reset, OF_RESET_ARG3);
break;
case 'R':
resetList[i].rArg1.rWld = areaList[area].aWldIndex.iThing[iWld];
break;
default:
resetList[i].rArg1.rNum = OBJECTGETFIELD(reset, OF_RESET_ARG1);
resetList[i].rArg3.rNum = OBJECTGETFIELD(reset, OF_RESET_ARG3);
}
i++;
}
}
areaList[area].aResetList = resetList;
areaList[area].aResetNum = i;
sprintf(buf, "^gReset table updated. ^w(%ld reset commands)\n", i);
SendThing(buf, thing);
BITSET(areaList[area].aSystem, AS_RSTUNSAVED);
}
CMDPROC(CmdRHide) { /* void CmdProc(THING *thing, BYTE* cmd) */
LWORD area;
LWORD i;
THING *t;
THING *next;
area = AGetArea(thing, &cmd);
if (area == -1) {
SendThing("^wYou cant do that here...\n", thing);
return;
}
SendThing("^gWARNING: any changes made since the last ^wRUPDATE ^gwere just lost!\n", thing);
if (!BIT(areaList[area].aSystem, AS_RSTSHOWN)) {
SendThing("Reset Commands are allready hidden!\n", thing);
return;
}
/* Clear everything out */
for (i=0; i<areaList[area].aWldIndex.iNum; i++) {
for(t=areaList[area].aWldIndex.iThing[i]->tContain; t; t=next ) {
next = t->tNext;
if (t->tType==TTYPE_OBJ && Obj(t)->oTemplate->oType==OTYPE_RESETCMD)
ThingFree(t);
}
}
BITCLR(areaList[area].aSystem, AS_RSTSHOWN);
SendThing("Reset Commands hidden.\n", thing);
}
CMDPROC(CmdRSave) { /* void CmdProc(THING *thing, BYTE* cmd) */
CmdASave(thing, cmd);
}