mud/lib/domains/Praxis/court_room.c
2020-09-06 05:43:07 -07:00

192 lines
6.7 KiB
C

/*
// File : /domains/Praxis/court_room.c
// Comment : The Court where High Justice is served.
// 94-07-02 : Pallando @ Nightmare wrote it
*/
#include <lib.h>
#include ROOMS_H
#include <council.h>
#define COUNCIL_CHAMBER "/domains/Praxis/council"
inherit LIB_ROOM;
object defendant;
void create()
{
::create();
SetProperties( ([
"indoors" : 1,
"light" : 2,
"no castle" : 1,
"no teleport" : 1,
"no bump" : 1,
"no attack" : 1,
"no steal" : 1,
"no magic" : 1,
]) );
SetShort( "the court of high justice" );
// Thank you, whoever added this. However, if you have time, I have
// a few suggestions:
// We want the justice system to be intimidating. Imagine being a
// short dwarf. You have been lead up from a dank stone dungeon.
// you peer up at the dark oak furnishings (the dock has omnious
// scratches left on by the last victim dragged away for execution)
// the flickering torches leave frightning looming dark heights to
// the room, while leaving the dock harshly lit. The judges bench
// it tall, imposing, richly ornamented in legal symbols (an iron
// glove enclosing an iron fist). UNderneath it is a supply of gin.
// The place smells slightly of chalk dust used for lawyer's wigs,
// and the perspiration of bored and jeering juiries. The stone
// fllor flagstones boom ominously every time the usher bangs his
// staff to summon the next witness. A hanging on the wall,
// embroidered by the housewifes union depicts the possible sentances
// in gory detail. Occasional screams can be heard from the prison
// or execution square.
//
// You could also use interactive SetItems to show if the dock and
// bench are currently occupied.
SetLong(
"The sheer size of this room dazzles you. The ceiling cannot be viewed\n"+
"from where you stand. At one end of the room is a huge chair, in front\n"+
"of which is a desk. Both the chair and the desk are made from the finest\n"+
"wood in the land. Next to the desk lies a second chair, where witnesses\n"+
"sit. On the other side of the room are rows of chairs, and an aisle\n"+
"through the center. Two doors lead the way out of this room, north\n"+
"is the Town Hall, east is the sheriff's office.\n"
);
SetExits( ([
"north" : "/domains/Praxis/town_hall",
"east" : "/domains/Praxis/sheriff",
]) );
SetItems( ([
"view" : "A magnificent panorama of all Praxis.",
"gavel" : "A wooden hammer-like object, used for pounding.",
"chair" : "Made out of the finest wood.",
"desk" : "A large desk made out of the finest wood.",
({ "door", "doors" }) :
"Large wooden doors leading out of the room.",
"ceiling" : "The ceiling extends out of view.",
"room" : "A very large, spacious room with a "
"rather formal aura.",
"office" : "The office of the Sheriff of Praxis.",
"wood" : "The highest quality wood, made exclusivly "
"from the trees of the elven forest.",
]) );
}
varargs int justicep( mixed arg )
{
if( !arg ) arg = this_player();
if( objectp( arg ) ) arg = geteuid( arg );
return -1 != member_array( arg, JUSTICES) || member_array( arg, POLICECOM );
}
int release_objects( object ob )
{
return ob != defendant;
}
void init()
{
add_action( "cmd_law", "law" );
::init();
if( !creatorp( this_player() ) && !justicep( this_player() ) )
return;
add_action( "cmd_summon", "summon" );
add_action( "cmd_verdict", "verdict" );
add_action( "cmd_sentence", "sentence" );
}
int cmd_law( string title )
{
return COUNCIL_CHAMBER-> cmd_law( title );
}
int cmd_summon( string arg )
{
object victim;
if( !arg )
return notify_fail( "Syntax: summon <player name>\n" );
//call_other( ROOM_SHERIFF, "sighs_for_deleted_simul_efun_f.o.o.l." );
if( victim = present( arg, this_object() ) )
{
if( victim == defendant )
return notify_fail( arg + " is already in the dock.\n" );
}
//else if( victim = present( arg, find_object( ROOM_SHERIFF ) ) ) {
// ROOM_SHERIFF-> remove_prisoner( victim );
// victim-> eventMove( this_object() );
// }
else notify_fail( "The sheriffs do not have " + arg + ".\n" );
if( defendant )
tell_object( defendant, "You trial is suspended. You may leave.\n" );
defendant = victim;
say( defendant-> query_cap_name() + " is summoned to the dock.\n" );
return 1;
}
int cmd_verdict( string arg )
{
if( !arg )
return notify_fail( "Syntax: verdict guilty|innocent|none\n" );
if( !defendant )
return notify_fail( "You must summon a defendant first.\n" );
switch( arg )
{
case "innocent":
case "free":
case "insufficient evidence":
say( "VERDICT: the defendant is found to be Not Guilty.\n" );
defendant-> set_outlaw( 0 );
defendant = 0;
break;
case "guilty":
say( "VERDICT: the defendant is Guilty.\n" );
defendant-> set_outlaw( 1 );
break;
case "none":
default:
say( "VERDICT: no change in the defendant's status\n" );
defendant = 0;
break;
}
return 1;
}
int cmd_sentence( string arg )
{
mapping executions;
object criminal;
//executions = ROOM_SHERIFF-> valid_execution();
executions = ([]);
if( !arg || undefinedp( executions[arg] ) )
return notify_fail(
"Syntax: sentence <punishment>\nCurrent options:\n "+
implode( keys( executions ), "\n " ) + "\n" );
if( !defendant )
return notify_fail( "You must summon a defendant first.\n" );
say( sprintf(
"%s says: %s, you have been found guilty by due process\n"
" and now justice must be seen to be done. It is the will of law that\n"+
" you shall now be taken from here unto the place of execution,\n"+
" where you shall suffer the torments of %s until dead.\n",
this_player()-> query_cap_name(),
defendant-> query_cap_name(),
arg ) );
criminal = defendant;
defendant = 0;
//ROOM_SHERIFF-> add_prisoner( criminal );
//ROOM_SHERIFF-> execute( criminal, arg );
return 1;
}
/* EOF */