blob: b9d8784d2d164a46436a99d2fcdfb6c5e727bda2 [file] [log] [blame]
// haustuer.c -- Beschreibung, Oeffnen und Schliessen
//
// (c) 1995 Wargon@MorgenGrauen
//
// $Id: haustuer.c,v 1.1.1.1 2000/08/20 20:22:42 mud Exp $
//
#define NEED_PROTOTYPES
#include "../haus.h"
#include <properties.h>
#include <thing/properties.h>
#include <thing/description.h>
#include <thing/commands.h>
static int validHouse = 0;
static string owner;
void create()
{
Set( H_DOOR, "Die Haustuer ist %s.\n" );
Set( H_DOORSTAT, 0);
Set( H_DOORLSTAT, ({ "geoeffnet", "geschlossen", 0, "abgeschlossen" }));
Set( H_DOOR, SAVE, F_MODE);
Set( H_DOORSTAT, SAVE, F_MODE);
Set( H_DOORLSTAT, SAVE, F_MODE);
AddCmd( ({"schliess", "schliesse"}), "schliesse");
AddCmd("oeffne","oeffne");
owner = getuid(this_object());
}
varargs string long(int mode)
{
return sprintf(Query(H_DOOR), Query(H_DOORLSTAT)[Query(H_DOORSTAT)]);
}
static string SetTuerOwner(string o)
{
validHouse=1;
Set( H_DOORSTAT, D_CLOSED | D_LOCKED);
return owner=o;
}
int oeffne(string str)
{
int doorstat;
notify_fail("Was willst Du oeffnen?\n");
doorstat = Query(H_DOORSTAT);
if (!id(str) && str != "tuer" && str != "haustuer")
return 0;
if (!(doorstat & D_CLOSED)) {
notify_fail(capitalize(name(WER,1))+" ist gar nicht geschlossen!\n");
return 0;
}
if (doorstat & D_LOCKED) {
notify_fail(capitalize(name(WER,1))+" ist abgeschlossen.\n");
return 0;
}
doorstat &= ~D_CLOSED;
Set(H_DOORSTAT, doorstat & ~D_CLOSED);
write("Du oeffnest "+name(WEN,1)+" von "+capitalize(owner)+".\n");
tell_room(environment(this_object()),
sprintf("%s oeffnet %s von %s.\n",
this_player()->name(WER),
name(WEN,1),
capitalize(owner) ),
({this_player()}));
if (validHouse) {
tell_room(find_object(RAUMNAME(owner,0))||this_object(),
this_player()->name(WER)+" oeffnet "+name(WEN)+".\n",
({this_player()}));
Save();
}
return 1;
}
private int close_door()
{
if (Query(H_DOORSTAT) & D_CLOSED) {
notify_fail(capitalize(name(WER,1))+" ist doch schon zu!\n");
return 0;
}
Set(H_DOORSTAT, Query(H_DOORSTAT) | D_CLOSED);
write("Du schliesst "+name(WEN,1)+" von "+capitalize(owner)+".\n");
tell_room(environment(this_object()),
sprintf( "%s schliesst %s von %s.\n",
capitalize(this_player()->name(WER)),
name(WEN,1), capitalize(owner)),
({this_player()}));
if (validHouse) {
tell_room(find_object(RAUMNAME(owner,0))||this_object(),
capitalize(this_player()->name(WER))+" schliesst "+name(WEN)+".\n",
({this_player()}));
Save();
}
return 1;
}
private int lock_door()
{
object tp, home;
string nam;
int doorstat;
tp = this_player();
nam = capitalize(tp->name(WER));
if (validHouse) {
call_other(RAUMNAME(owner,0), "???");
home = find_object(RAUMNAME(owner,0));
if (!home->allowed_check(this_player())) {
notify_fail("Du darfst "+name(WEN,1)+" von "+capitalize(owner)+" aber nicht abschliessen.\n");
return 0;
}
}
if ((doorstat = Query(H_DOORSTAT)) & D_LOCKED) {
notify_fail("Die Tuer ist abgeschlossen.\n");
return 0;
}
doorstat |= (D_LOCKED|D_CLOSED);
write("Du schliesst "+name(WEN)+" ab.\n");
Set(H_DOORSTAT, doorstat);
tell_room(environment(this_object()),
sprintf( "%s schliesst %s ab.\n",
nam,
(getuid(tp)==owner ?
(tp->QueryPossPronoun(this_object(), WEN)+" "+name(RAW)) :
name(WEN,1) )),
({tp}));
if (validHouse) {
tell_room(home, nam+" schliesst "+name(WEN)+" ab.\n",({tp}));
Save();
}
return 1;
}
private int unlock_door()
{
object tp, home;
string nam;
int doorstat;
tp = this_player();
nam = capitalize(tp->name(WER));
if (validHouse) {
call_other(RAUMNAME(owner,0), "???");
home = find_object(RAUMNAME(owner,0));
if (!home->allowed_check(this_player())) {
notify_fail("Du darfst "+name(WEN,1)+" von "+capitalize(owner)+" aber nicht aufschliessen.\n");
return 0;
}
}
if (!((doorstat = Query(H_DOORSTAT)) & D_LOCKED)) {
notify_fail("Die Tuer ist nicht abgeschlossen.\n");
return 0;
}
Set(H_DOORSTAT, doorstat & ~D_LOCKED);
write("Du schliesst "+name(WEN)+" auf.\n");
tell_room(environment(this_object()),
sprintf("%s schliesst %s auf.\n",
nam,
(getuid(tp)==owner ?
(tp->QueryPossPronoun(this_object(), WEN)+" "+name(RAW)) :
name(WEN,1) )),
({tp}));
if(validHouse) {
tell_room(home,nam+" schliesst "+name(WEN)+" auf.\n",({tp}));
Save();
}
return 1;
}
int schliesse(string str)
{
string was, wen, *s;
notify_fail("Was willst Du schliessen ?\n");
if (!str||str=="")
return 0;
s = old_explode(str, " ");
if ((was = s[<1]) == "auf" || was == "ab")
s = s[0..<2];
else
was = 0;
wen=implode(s, " ");
if (!id(wen) && wen != "tuer" && wen != "haustuer")
return 0;
if (!was || was=="")
return close_door();
switch (was)
{
case "auf": return unlock_door();
case "ab": return lock_door();
}
return 0;
}
// $Log: haustuer.c,v $
// Revision 1.1.1.1 2000/08/20 20:22:42 mud
// Ins CVS eingecheckt
//