blob: 1a51ba58101722b3e14cbe2184e0ce8231a69a47 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// $Id: objects.c 8848 2014-06-11 22:05:04Z Zesstra $
2#pragma strict_types
3#pragma save_types
4#pragma range_check
5#pragma no_clone
MG Mud User88f12472016-06-24 23:31:02 +02006
7#include <wizlevels.h>
8#include <moving.h>
9#define NEED_PROTOTYPES
10#include <thing/language.h>
11#include <thing/properties.h>
12#include <thing/description.h>
13#include <living/put_and_get.h>
14#include <player.h>
15#include <magier.h>
16
17// ###################
18//######################### INITIALISIERUNG #############################
19// ###################
20
21
22static mixed _query_localcmds()
23{
24 return ({({"clone","_clone",0,WIZARD_LVL}),
25 ({"setcmsg","_setcmsg",0,WIZARD_LVL}),
26 ({"setdmsg","_setdmsg",0,WIZARD_LVL}),
27 ({"destruct","_destruct",0,WIZARD_LVL}),
28 });
29}
30
31// #########
32//############################### CLONE ##############################
33// #########
34
35static int _clone(string cmdline)
36{
37 mixed *tmp;
38 int flags;
39 object ob;
40 string *args,*args2,err;
41
42 cmdline=_unparsed_args();
43 args=parseargs(cmdline,&flags,CLONE_OPTS,1);
44 if (flags==-1||sizeof(args)!=1)
45 return USAGE("clone [-" CLONE_OPTS "] <objektname>");
46 if (flags&CLONE_F)
47 cmdline=args[0];
48 else
49 {
50 // etwas umstaendlich, aber so kann man auch Dateien clonen,
51 // wenn man keine Leserechte hat. Man muss aber im Verzeichnis
52 // lesen koennen
53 args2=explode(args[0],"/");
54 if (args2[<1][<1]=='.') args2[<1]+="c";
55 else if (args2[<1][<2..<1]!=".c") args2[<1]+=".c";
56 tmp=file_list(({implode(args2[0..<2],"/")+"/*"}),MODE_CLONE,0,"",
57 args2[<1]);
58 if (!sizeof(tmp)||tmp[0][FILESIZE]<0)
59 return printf("clone: %s: Datei existiert nicht.\n",args[0]),1;
60 cmdline=tmp[0][FULLNAME];
61 }
62
63 if (err=catch(ob=clone_object(cmdline))||!ob)
64 return printf("clone: %s: Objekt konnte nicht erzeugt werden.\n"
Arathorn8fd33482018-07-10 21:44:53 +020065 "Grund: %O\n",
66 args[0], regreplace(err, "\n$", "", 1)||"unbekannt"),1;
MG Mud User88f12472016-06-24 23:31:02 +020067 if (!objectp(ob))
68 return printf("clone: %s: Objekt beim Erzeugen zerstoert.\n",
69 args[0]),1;
70 if ((ob->move(this_object(),M_GET)>0) ||
71 (!objectp(ob)||ob->move(environment(),M_NOCHECK)>0)||!objectp(ob))
72 {
73 if (!objectp(ob))
74 return printf("clone: %s: Objekt beim Erzeugen zerstoert.\n",
75 args[0]),1;
76 printf("Clone: %s erzeugt.\n",object_name(ob));
77 tell_room(environment(this_object()),
78 sprintf("%s %s.\n",Name(WER,1),QueryProp(P_CLONE_MSG)),
79 ({ this_object()}));
80 return 1;
81 }
82 tell_room(environment(this_object()),
83 sprintf("%s malt wilde Zeichen in die Luft und "
84 "murmelt vor sich hin, aber nichts "
85 "passiert...\n",Name(WER,1)),
86 ({ this_object()}));
87 destruct(ob);
Zesstra14b52ff2020-01-08 21:01:43 +010088 printf("Clone: %s: Objekt konnte nicht bewegt werden.\n",args[0]);
MG Mud User88f12472016-06-24 23:31:02 +020089 return 1;
90}
91
92
93// ############
94//############################# DESTRUCT ##############################
95// ############
96
97//
98// _destruct: Objekte zerstoeren
99//
100
101static int _destruct(string cmdline)
102{
103 int flags;
104 mixed *args;
105 object ob;
106
107 if (!sizeof(cmdline=_unparsed_args()))
108 return USAGE(query_verb()+" <objektname>");
109 args=find_obs(lower_case(cmdline),PUT_GET_NONE);
110 if (!args||!sizeof(args))
111 {
112 if (!(ob=find_object(cmdline)))
113 {
114 notify_fail(query_verb()+": Objekt \"" +cmdline+
115 "\" nicht gefunden.\n");
116 return 0;
117 }
118 }
119 else
120 ob=args[0];
121 cmdline=capitalize(to_string(ob->name(WER)));
Vanion50652322020-03-10 21:13:25 +0100122 flags=({int})ob->QueryProp(P_PLURAL); // Missbrauch von flags :o)
MG Mud User88f12472016-06-24 23:31:02 +0200123 if (query_verb()=="destruct")
124 {
125 if (!ob->remove())
126 {
127 notify_fail(cmdline+" will nicht zerstoert werden!\n");
128 return 0;
129 }
130 }
MG Mud User88f12472016-06-24 23:31:02 +0200131 if (!ob)
132 {
133 if (!QueryProp(P_INVIS))
134 {
135 tell_room(environment(this_object()),
136 sprintf("%s %s.\n",cmdline,QueryProp(P_DESTRUCT_MSG)),
137 ({ this_object() }));
138 }
139 printf("%s w%s von Dir zerstaeubt.\n",cmdline,(flags?"erden":"ird"));
140 }
141 else
142 printf("%s kann nicht zerstoert werden.\n",cmdline);
143 return 1;
144}
145
146// ####################
147//######################### SetCMsg, SetDMsg ############################
148// ####################
149
150static int _setcmsg(string str)
151{
152 printf("Beim Clonen von Objekten sehen die Anderen nun:\n"
153 "<Dein Name> %s.\n",
154 (SetProp(P_CLONE_MSG, _unparsed_args()||"zaubert etwas aus "
155 + QueryPossPronoun(MALE,WEM) + " Aermel hervor")));
156 return 1;
157}
158
159static int _setdmsg(string str)
160{
161 printf("Beim Zerstoeren von Objekten sehen die Anderen nun:\n"
162 "<Objekt> %s.\n",
163 SetProp(P_DESTRUCT_MSG, _unparsed_args()||"wird von " + name(WER,1)
164 + " zerstaeubt"));
165 return 1;
166}