|
Dig and Bury Command [by Chris Ryan] |
|
|
|
Posted Wednesday, August 12th @ 11:26:07 PM, by George Greer in the Commands dept.
. Click the link below to read it or download it.
From: Chris Ryan <drizzt@visi.net>
Subject: [Circle] [CODE] Dig and Bury Commands
--<act.other.c>--
/********************************************************************
** Written by Christopher M. Ryan 7/26/96
** do_bury & do_dig()
********************************************************************/
/**********************************************************************
** Please note that the way the code is set up all messages that are
** to be displayed to the character use send message so you can't add
** any variable types to your messages that go to the character.
**********************************************************************/
const char* msgs[][2] = {
{"You start to break some floor boards when you dig.\r\n",
"$n starts to break some floor boards as $e starts digging.\r\n" },
{"You wonder if this is a good place after all, with all the gravel.\r\n",
"$n breaks a sweat digging up all the gravel here.\r\n" },
{"You make a nice hole while digging up a lot of dirt.\r\n",
"$n digs a hole and goes about $s business.\r\n" },
{"You seem to be hitting alot of roots when you dig.\r\n",
"$n look like $e is trying to dig up a tree!\r\n" },
{"You dig up more clay than dirt here.\r\n",
"$n seems to be digging up alot of clay.\r\n" },
{"You start to chip away at the rock here.\r\n",
"$n bangs away at the side of the mountain.\r\n" },
{"You can't dig in the water!\r\n",
NULL },
{"You can't dig in the water!\r\n",
NULL },
{"You can't dig in the water!\r\n",
NULL },
{"You can't dig up air!\r\n",
NULL },
/* always keep this as the last message */
{ "If you see this please tell a god.\r\n", NULL }
};
#pragma argsused
ACMD(do_bury)
{
struct obj_data *obj;
half_chop(argument, arg, buf);
if (!*arg) {
sprintf(buf2, "What do you want to %s?\r\n", CMD_NAME);
send_to_char(buf2, ch);
return;
}
if (!(obj = get_obj_in_list_vis(ch, arg, ch->carrying))) {
sprintf(buf, "You don't have %s %s.\r\n", AN(arg), arg);
send_to_char(buf, ch);
return;
}
/*
** find the sector types that you don't want people
** to be able to dig or bury in.
*/
if((world[IN_ROOM(ch)].sector_type == SECT_WATER_SWIM) ||
(world[IN_ROOM(ch)].sector_type == SECT_WATER_NOSWIM) ||
(world[IN_ROOM(ch)].sector_type == SECT_UNDERWATER) ||
(world[IN_ROOM(ch)].sector_type == SECT_FLYING)) {
/* display the messages if available */
if(msgs[world[IN_ROOM(ch)].sector_type][0] != NULL)
send_to_char(msgs[world[IN_ROOM(ch)].sector_type][0], ch);
if(msgs[world[IN_ROOM(ch)].sector_type][1] != NULL)
act(msgs[world[IN_ROOM(ch)].sector_type][1], TRUE, ch, NULL, NULL,TO_ROOM);
return;
}
/* set a wait state */
WAIT_STATE(ch, 10 RL_SEC);
if(msgs[world[IN_ROOM(ch)].sector_type][0] != NULL)
send_to_char(msgs[world[IN_ROOM(ch)].sector_type][0], ch);
if(msgs[world[IN_ROOM(ch)].sector_type][1] != NULL)
act(msgs[world[IN_ROOM(ch)].sector_type][1], TRUE, ch, NULL, NULL,TO_ROOM);
act("You bury $a $o here.\r\n", TRUE, ch, obj, NULL, TO_CHAR);
act("$n buries $a $o here.\r\n", TRUE, ch, obj, NULL, TO_ROOM);
obj_from_char(obj);
SET_BIT(GET_OBJ_EXTRA(obj), ITEM_BURIED);
obj_to_room(obj, IN_ROOM(ch));
};
#pragma argsused
ACMD(do_dig)
{
struct obj_data *obj;
int found_item = 0;
/*
** find the sector types that you don't want people
** to be able to dig or bury in.
*/
if((world[IN_ROOM(ch)].sector_type == SECT_WATER_SWIM) ||
(world[IN_ROOM(ch)].sector_type == SECT_WATER_NOSWIM) ||
(world[IN_ROOM(ch)].sector_type == SECT_UNDERWATER) ||
(world[IN_ROOM(ch)].sector_type == SECT_FLYING)) {
/* display the messages if available */
if(msgs[world[IN_ROOM(ch)].sector_type][0] != NULL)
send_to_char(msgs[world[IN_ROOM(ch)].sector_type][0], ch);
if(msgs[world[IN_ROOM(ch)].sector_type][1] != NULL)
act(msgs[world[IN_ROOM(ch)].sector_type][1], TRUE, ch, NULL, NULL,TO_ROOM);
return;
}
/* set a wait state */
WAIT_STATE(ch, 10 RL_SEC);
/*
** Now that we have established that we can dig lets go
** ahead and do it!
*/
if(msgs[world[IN_ROOM(ch)].sector_type][0] != NULL)
send_to_char(msgs[world[IN_ROOM(ch)].sector_type][0], ch);
if(msgs[world[IN_ROOM(ch)].sector_type][1] != NULL)
act(msgs[world[IN_ROOM(ch)].sector_type][1], TRUE, ch, NULL, NULL,TO_ROOM);
/*
** search for an object in the room that has a ITEM_BURIED flag
*/
obj = world[IN_ROOM(ch)].contents;
while(obj != NULL) {
if(IS_BURIED(obj))
{
/* Remove the buried bit so the player can see it. */
REMOVE_BIT(GET_OBJ_EXTRA(obj), ITEM_BURIED);
if(CAN_SEE_OBJ(ch, obj)) {
found_item = 1; /* player found something */
act("You found $a $o buried here.\r\n", TRUE, ch, obj, NULL, TO_CHAR);
act("$n has found $a $o buried here.\r\n", TRUE, ch, obj, NULL,TO_ROOM);
obj_from_room(obj);
obj_to_char(obj, ch);
}
else {
/* add the bit back becuase the player can't unbury what
** what he can't find... */
SET_BIT(GET_OBJ_EXTRA(obj), ITEM_BURIED);
}
}
/* go to the next obj */
obj = obj->next;
}
if(!found_item) /* if the player didn't find anything */
send_to_char("Sorry! You didn't find anything.\r\n", ch);
}
---8<---
--<Utils.h>--
#define IS_BURIED(obj) (IS_SET(GET_OBJ_EXTRA(obj), ITEM_BURIED))
// changed CAN_SEE_OBJ to use IS_BURIED
#define CAN_SEE_OBJ(sub, obj) \
((MORT_CAN_SEE_OBJ(sub, obj) && !IS_BURIED(obj)) || PRF_FLAGGED((sub),
PRF_HOLYLIGHT))
---8<---
--<Structs.h>--
#define ITEM_BURIED
(1 << 17)
/* item is buried */
---8<---
Then you just need to add the other related stuff for the commands. One
prob with this command is that Immorts can see the obj even when it is
buried if they are using holylight but i feel this is a responsiblility
of the immorts and imps to take of... I makes for a cool joke though, just
give a mort a buried item and he'll go crazy trying to find a way to see
what it is.
<< Death Smurfs [by Patrick J. Dughi] | Reply | View as text | Flattened | Disallow mob names for players [by Dez] >> |
|
Related Links |
|
|
|
CircleMUD Snippets |
|
|
Note: Not all of these snippets will work perfectly with
your version of code, so be prepared to fix one
or two bugs that may arise, and please let me know
what you needed to do to fix it. Sending a corrected
version is always welcome.
|
Finally, if you wish to use any of the snippets from this
page, you are more than welcome, just mention the
authors in your credits. If you wish to release any
of these snippets to the public on another site,
contact me FIRST.
|
|
|
|
|
|
|