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