blob: f4d3ffc8dc777f61c11cf8b2c39bda01b5c2ad35 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001//----------------------------------------------------------------------------
2// Name des Objects: Standard_Container
3// Letzte Aenderung: 21.03.2001
4// Magier: Swift
5// Dieses File wird anstelle von /std/container inherited, so dass dem Objekt
6// erweiterte Moeglichkeiten zur Verfuegung stehen.
7//
8// 07.12.2005 (Seleven): Kurzbeschreibung ausblendbar gemacht
9// 30.06.2007 (Zesstra): create der BP wird nicht mehr abgebrochen. Auf die
10// Art wird es dem Nutzer dieses Standardobjekt ueberlassen, ob er die BP
11// initialisieren will oder nicht.
12// 01.07.2007 (Zesstra): Update der Moebel ruft erstmal UpdateMe() in den
13// Moebeln auf. Wenn das != 0 liefert, ist UpdateMe() fuer das Update
14// zustaendig und muss das machen.
15// Ausserdem kleine Aenderung im Registrieren (nimmt auch Obekte als
16// Standort)
17// Weiterhin Moebel umgezogen nach /p/seher/moebel/ und in diesem File
18// GetOwner() definiert, welches "Swift" zurueckgibt. Wer hiervon erbt,
19// sollte damit also sein eigenes GetOwner() definieren.
20// glob. Variablen auf 'nosave' geaendert.
21//----------------------------------------------------------------------------
22
23
24// Fuer Testzwecke ist es moeglich, dem entsprechenden Objekt die Property
25// "test" auf 1 zu setzen, damit ist dann so ziemlich alles erlaubt.
26// Man sollte die Property aber unbedingt wieder entfernen, sonst ist es z.B.
27// moeglich, einen Schrank von Seherhaus A nach Seherhaus B oder sogar hinaus
28// zu verschieben !!!
29
30#pragma strong_types,save_types,rtt_checks
31
32#include <container.h>
33inherit "/std/container";
34
35#include "schrankladen.h"
36
Zesstra499ab7a2019-02-04 20:31:39 +010037#define VERSION_STD "10"
MG Mud User88f12472016-06-24 23:31:02 +020038
39nosave int hauserlaubnis;
Zesstra499ab7a2019-02-04 20:31:39 +010040nosave string familie;
41nosave string *erlaubnis = ({});
MG Mud User88f12472016-06-24 23:31:02 +020042
43int erlaubt();
44
45protected void create()
46{
47 //if (!clonep(TO)) return;
48 ::create();
49 SetProp(P_SHORT, "Ein Standard_Container von Swift");
50 SetProp(P_CNT_STATUS,CNT_STATUS_CLOSED);
51 SetProp(P_TRANSPARENT, 0);
52 SetProp(P_LOG_FILE,"seleven/schraenker"); // Seleven 06.04.2006
Zesstra499ab7a2019-02-04 20:31:39 +010053 //TODO: Die ganzen cnt_* Props sollten besser eindeutige Praefixe sein,
54 //nicht das generische cnt_, was auch die Mudlib verwendet. :-( (Zesstra)
MG Mud User88f12472016-06-24 23:31:02 +020055 SetProp("cnt_version_std", VERSION_STD);
56
MG Mud User88f12472016-06-24 23:31:02 +020057 set_next_reset(3600); // 1 x pro Std. Reset!
58
59 AddCmd(({"oeffne"}), "oeffnen");
60 AddCmd(({"schliess", "schliesse"}), "schliessen");
61 AddCmd(({"serlaube"}), "erlaubnis");
62 AddCmd(({"skommandos"}), "skommandos");
63 AddCmd(({"verschieb", "verschiebe"}), "verschieben");
64 AddCmd(({"zertruemmer", "zertruemmere"}), "zertruemmern");
MG Mud User88f12472016-06-24 23:31:02 +020065 AddCmd(({"sverstecke","sversteck"}),"verstecken");
66 AddCmd(({"shole","shol"}),"zeigen");
67}
68
69// Zesstra, 1.7.07, fuers Hoerrohr
70string GetOwner() {return "swift";}
71
72static string QueryHausbesitzer()
73{
74 return CAP(to_string(ETO->QueryOwner())); // z.B.: Swift
75}
76
MG Mud User88f12472016-06-24 23:31:02 +020077static string QueryTP()
78{
79 return CAP(geteuid(TP)); // z.B.: Swift
80}
81
Zesstra499ab7a2019-02-04 20:31:39 +010082// Query- und Setmethoden fuer die internen Variablen
83static string _query_cnt_familie()
84{
85 return familie;
86}
87static string _set_cnt_familie(string f)
88{
89 familie = f;
90 return familie;
91}
92
93static string *_query_cnt_erlaubnis()
94{
95 return erlaubnis;
96}
97static string *_set_cnt_erlaubnis(string *val)
98{
99 erlaubnis = val;
100 return erlaubnis;
101}
102
103static int _query_cnt_hausfreunde()
104{
105 return hauserlaubnis;
106}
107static int _set_cnt_hausfreunde(int val)
108{
109 hauserlaubnis = val;
110 return hauserlaubnis;
111}
112
MG Mud User88f12472016-06-24 23:31:02 +0200113int oeffnen(string str)
114{
115 notify_fail("Was moechtest Du oeffnen?\n");
116 if(!str) return 0;
117 if(present(str)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
118 return 0;
119 if(QueryProp(P_CNT_STATUS)==CNT_STATUS_OPEN)
120 {
121 write(Name(WER,1)+" ist doch schon geoeffnet!\n");
122 return 1;
123 }
124 if( !erlaubt() )
125 {
126 write("Ein magisches Kraftfeld verhindert das Oeffnen "+name(WESSEN,1)+"!\n");
127 return 1;
128 }
129 write("Du oeffnest "+name(WEN)+".\n");
130 say(TP->Name(WER)+" oeffnet "+name(WEN)+".\n", ({TP}) );
131 SetProp(P_CNT_STATUS,CNT_STATUS_OPEN);
132 SetProp(P_TRANSPARENT, 1);
133 return 1;
134}
135
136int schliessen(string str)
137{
138 notify_fail("Was moechtest Du schliessen?\n");
139 if(!str) return 0;
140 if(present(str)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
141 return 0;
142 if(QueryProp(P_CNT_STATUS)==CNT_STATUS_CLOSED)
143 {
144 write(Name(WER,1)+" ist doch schon geschlossen!\n");
145 return 1;
146 }
147 if( !erlaubt() )
148 {
149 write("Ein magisches Kraftfeld verhindert das Schliessen "+name(WESSEN,1)+"!\n");
150 return 1;
151 }
152 write("Du schliesst "+name(WEN)+".\n");
153 say(TP->Name(WER)+" schliesst "+name(WEN)+".\n", ({TP}) );
154 SetProp(P_CNT_STATUS,CNT_STATUS_CLOSED);
155 SetProp(P_TRANSPARENT, 0);
156 return 1;
157}
158
159string cnt_status()
160{
161 return Name(WER,1)+" ist "
162 +(QueryProp(P_CNT_STATUS)?"geschlossen":"geoeffnet")+".\n";
163}
164
165int erlaubt()
166{
167 if( QueryProp("test") ) return 1; // Zu Testzwecken!
168 if( QueryHausbesitzer()=="0" ) // Schrank steht nicht in einem Seherhaus!
169 {
170 tell_room(ETO, Name(WER,1)+" sollte nicht ausserhalb eines Seherhauses stehen.\n"
171 +"Bitte Mail an "+VERANTWORTLICHER_MAGIER+"!\n");
172 return 0;
173 }
174 if( QueryTP() == QueryHausbesitzer() ) // Der Besitzer des Hauses selbst
175 return 1;
176 if(hauserlaubnis)
177 {
178 if( member(SHVERWALTER->HausProp(LOWER(QueryHausbesitzer()), 2),
179 QueryTP()) != -1 ) // Hausfreunde
180 return 1;
181 }
Zesstra499ab7a2019-02-04 20:31:39 +0100182 if(familie) // Zweities
MG Mud User88f12472016-06-24 23:31:02 +0200183 {
Zesstra499ab7a2019-02-04 20:31:39 +0100184 if( "/secure/zweities"->QueryFamilie(TP) == familie )
MG Mud User88f12472016-06-24 23:31:02 +0200185 return 1;
186 }
187 if( sizeof(erlaubnis) )
188 {
189 if( member(erlaubnis, QueryTP()) != -1 ) // Sonstige Personen die berechtigt sind
190 return 1;
191 }
192 return 0;
193}
194
195void cnt_open()
196{
197 SetProp(P_CNT_STATUS,CNT_STATUS_OPEN);
198 SetProp(P_TRANSPARENT, 1);
199}
200
201int erlaubnis_liste()
202{
203 int i;
204 string *strs,str;
205 if( QueryHausbesitzer() != QueryTP() && !QueryProp("test") )
206 {
207 write( BS("Nur "+QueryHausbesitzer()+" darf Berechtigungen "
208 +name(WESSEN,1)+" abfragen!"));
209 return 1;
210 }
211 write("=============================================================================\n");
212 if(hauserlaubnis)
213 {
214 strs=SHVERWALTER->HausProp(LOWER(QueryHausbesitzer()), 2);
215 write(BS("Folgende Freunde Deines Hauses duerfen "+name(WEN,1)
216 +" oeffnen/schliessen:"));
217 str="";
218 if(sizeof(strs))
219 {
220 for(i=0;i<sizeof(strs);i++)
221 {
222 str+=strs[i];
223 if(i<sizeof(strs)-1)
224 str+=", ";
225 }
226 }
227 else
228 str="Du hast keiner Person Zugriff auf Dein Haus gewaehrt...\n";
229 write(BS(str));
230 }
231 else
232 write(BS("Die Freunde Deines Hauses duerfen "+name(WEN,1)
233 +" nicht oeffnen/schliessen."));
Zesstra499ab7a2019-02-04 20:31:39 +0100234 write("-------------------------------------------------------------------"
235 "----------\n");
236 if(familie)
MG Mud User88f12472016-06-24 23:31:02 +0200237 {
Zesstra499ab7a2019-02-04 20:31:39 +0100238 if( "/secure/zweities"->QueryFamilie(TP) == familie)
239 write(BS("Alle Deine Familienmitglieder duerfen "
240 +name(WEN,1)+" oeffnen/schliessen."));
MG Mud User88f12472016-06-24 23:31:02 +0200241 else
Zesstra499ab7a2019-02-04 20:31:39 +0100242 write(BS( "Alle Familienmitglieder von "+CAP(explode(familie,"_")[0])
243 +" duerfen " + name(WEN,1) + " oeffnen/schliessen."));
244 write("-------------------------------------------------------------------"
245 "----------\n");
MG Mud User88f12472016-06-24 23:31:02 +0200246 }
247 strs=QueryProp("cnt_erlaubnis");
248 if(sizeof(strs))
249 {
250 write(BS("Folgende sonstige Personen duerfen "+name(WEN,1)
251 +" oeffnen/schliessen:"));
252 str="";
253 for(i=0;i<sizeof(strs);i++)
254 {
255 str+=strs[i];
256 if(i<sizeof(strs)-1)
257 str+=", ";
258 }
259 write(BS(str));
260 }
261 else
262 write(BS("Es gibt keine sonstigen Personen, die "+name(WEN,1)
263 +" oeffnen/schliessen duerfen."));
264 write("=============================================================================\n");
265 return 1;
266}
267
268int erlaubnis(string str)
269{
270 string *strs,wen,nf_str;
Zesstra499ab7a2019-02-04 20:31:39 +0100271 nf_str="Syntax: serlaube [Objekt-Id] [Spielername|\"hausfreunde\"|\"familie\"]\n"
MG Mud User88f12472016-06-24 23:31:02 +0200272 +"Bsp.: serlaube "+QueryProp(P_IDS)[1]+" hausfreunde\n"
273 +" serlaube "+QueryProp(P_IDS)[1]+" zweities\n"
274 +" serlaube "+QueryProp(P_IDS)[1]+" geordi\n"
275 +" serlaube "+QueryProp(P_IDS)[1]+" (Listet Spieler mit Erlaubnis)\n";
276 notify_fail("Fehler: Ohne Parameter klappt das nicht.\n"+nf_str);
277 if(!str) return 0;
278 if(present(str)==TO) // Falls Par==Obj. und kein 2./3. Par.
279 {
280 erlaubnis_liste(); // Liste der Erlaubten ausgeben!
281 return 1;
282 }
283 notify_fail("Fehler: Du musst eine gueltige Objekt-Id angeben!\n"+nf_str);
284 strs=old_explode(str, " ");
285 if( sizeof(strs) < 2 ) // Falls nur 1 Par.
286 return 0; // Anzahl erforderlicher Parameter unterschritten!
287 else if( sizeof(strs) == 2 )
288 {
289 str=strs[0];
290 wen=strs[1];
291 if( IST_ZAHL(wen) )
292 if(present(str+" "+wen)==TO) // Falls 2 Par. und dies das Obj. ist ohne 3. Par.
293 {
294 erlaubnis_liste(); // Liste der Erlaubten ausgeben!
295 return 1;
296 }
297 else
298 return 0;
299 }
300 else if( sizeof(strs) == 3 )
301 {
302 str=strs[0]+" "+strs[1];
303 wen=strs[2];
304 }
305 else // Anzahl erforderlicher Parameter ueberschritten!
306 return 0;
307 if(present(str)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
308 return 0;
309 if( !erlaubt() && !QueryProp("test") )
310 {
311 write( BS("Nur "+QueryHausbesitzer()+" darf Berechtigungen "
312 +name(WESSEN,1)+" aendern!"));
313 return 1;
314 }
315 if(wen=="hausfreunde")
316 {
317 if(hauserlaubnis)
318 {
319 hauserlaubnis=0;
Zesstra499ab7a2019-02-04 20:31:39 +0100320 write( BS("Die Freunde Deines Seherhauses duerfen "+name(WEN,1)
321 +" jetzt nicht mehr oeffnen/schliessen."));
MG Mud User88f12472016-06-24 23:31:02 +0200322 }
323 else
324 {
325 hauserlaubnis=1;
Zesstra499ab7a2019-02-04 20:31:39 +0100326 write( BS("Die Freunde Deines Seherhauses duerfen "+name(WEN,1)
327 +" jetzt oeffnen/schliessen."));
MG Mud User88f12472016-06-24 23:31:02 +0200328 }
MG Mud User88f12472016-06-24 23:31:02 +0200329 return 1;
330 }
Zesstra499ab7a2019-02-04 20:31:39 +0100331 if(wen=="familie")
MG Mud User88f12472016-06-24 23:31:02 +0200332 {
Zesstra499ab7a2019-02-04 20:31:39 +0100333 if(familie) // Zweities erlaubt?
MG Mud User88f12472016-06-24 23:31:02 +0200334 {
Zesstra499ab7a2019-02-04 20:31:39 +0100335 familie = 0; // dann verbieten!
336 write("Die Familienerlaubnis wurde geloescht.\n");
MG Mud User88f12472016-06-24 23:31:02 +0200337 }
Zesstra499ab7a2019-02-04 20:31:39 +0100338 else // ansonsten neu erlauben
339 {
340 familie = "/secure/zweities"->QueryFamilie(TP);
341 write(BS("Alle Mitglieder der Familie "
342 +CAP(explode(familie,"_")[0])
343 +" duerfen "+name(WEN,1)+" jetzt oeffnen/schliessen."));
344
345 }
MG Mud User88f12472016-06-24 23:31:02 +0200346 return 1;
347 }
Zesstra85576452017-01-30 15:43:21 +0100348 if( master()->find_userinfo(wen)) // Spieler gibt es auch!
MG Mud User88f12472016-06-24 23:31:02 +0200349 {
Zesstra85576452017-01-30 15:43:21 +0100350 wen=CAP(wen);
MG Mud User88f12472016-06-24 23:31:02 +0200351 if( member(erlaubnis, wen) != -1 ) // Spieler hat Erlaubnis -> verbieten!
352 {
353 erlaubnis-=({wen});
354 write( BS( wen+" darf "+name(WEN,1)+" jetzt nicht mehr oeffnen/schliessen."));
355 }
356 else
357 {
358 erlaubnis+=({wen});
359 write( BS( wen+" darf "+name(WEN,1)+" jetzt oeffnen/schliessen."));
360 }
361 SetProp("cnt_erlaubnis", erlaubnis);
362 return 1;
363 }
364 else
Zesstra85576452017-01-30 15:43:21 +0100365 write("Es gibt keinen Spieler namens "+CAP(wen)+"!\n");
MG Mud User88f12472016-06-24 23:31:02 +0200366 return 1;
367}
368
369varargs int skommandos(string str)
370{
371 notify_fail( "Fehler: Dieser Befehl benoetigt eine gueltige Objekt-Id als Parameter.\n"
372 +"Beispiel: skommandos "+QueryProp(P_IDS)[1]+"\n");
373 if(!str) return 0;
374 if(present(str)!=TO ) // Bin ich gemeint?
375 return 0;
376 write("=============================================================================\n");
377 write("Aktuelle Version: "+QueryProp("cnt_version_std")+QueryProp("cnt_version_obj")+"\n");
378 write( BS(Name(WER,1)+" kann nur in diesem Seherhaus verwendet werden, "
379 +"da "+QueryPronoun(WER)+" speziell dafuer gekauft wurde. "+CAP(QueryPronoun(WER))
380 +" verfuegt ueber folgende Kommandos:")
381 +"-----------------------------------------------------------------------------\n"
382 +"oeffne [Objekt-Id]\n"
383 +" oeffnet "+name(WEN,1)+"\n\n"
384 +"schliesse [Objekt-Id]\n"
385 +" schliesst "+name(WEN,1)+"\n\n"
Zesstra499ab7a2019-02-04 20:31:39 +0100386 +"serlaube [Objekt-Id] [Spielername|\"hausfreunde\"|\"familie\"]\n"
MG Mud User88f12472016-06-24 23:31:02 +0200387 +" Erlaubt Personen, "+name(WEN,1)+" mitzubenutzen.\n"
388 +" serlaube + Objekt-Id (ohne Spielername/hausfreunde)\n"
389 +" listet alle Personen mit Zugriff auf "+name(WEN,1)+"\n\n"
390 +"verschiebe [Objekt-Id] nach [Ausgang]\n"
391 +" Damit kannst Du "+name(WEN,1)+" innerhalb Deines Seherhauses verschieben.\n\n"
MG Mud User88f12472016-06-24 23:31:02 +0200392 +"sverstecke [Objekt-Id]\n"
393 +" Damit machst Du "+name(WEN,1)+" unsichtbar.\n"
394 +"shole [Objekt-Id] hervor\n"
395 +" Damit machst Du "+name(WEN,1)+" wieder sichtbar.\n"
MG Mud User88f12472016-06-24 23:31:02 +0200396 +"zertruemmer [Objekt-Id]\n"
397 +" Damit zerstoerst Du "+name(WEN,1)+".\n\n");
398
399
400 if( QueryProp("obj_cmd") )
401 write( QueryProp("obj_cmd")+"\n" );
402
403 write("[Objekt-Id] muss eine gueltige Id sein, in diesem Fall z.B. "
404 +QueryProp(P_IDS)[1]+"\n");
405 write("=============================================================================\n");
406
407
408 return 1;
409}
410
411int verschieben(string str)
412{
413 string was, wohin, zielraum,nf_str;
414 nf_str="Syntax: verschiebe [Objekt-Id] nach [Richtung]\n"
415 +"Bsp.: verschiebe "+QueryProp(P_IDS)[1]+" nach osten\n";
416 notify_fail("Fehler: Ohne Parameter klappt das nicht.\n"+nf_str);
417 if(!str) return 0;
418 if(sscanf(str,"%s nach %s", was, wohin) != 2)
419 return 0;
420 notify_fail("Fehler: Du musst eine gueltige Objekt-Id angeben!\n"+nf_str);
421 if(present(was)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
422 return 0;
423 if( QueryHausbesitzer() != QueryTP() && !QueryProp("test") )
424 {
425 write( BS("Nur "+QueryHausbesitzer()+" darf "+name(WEN,1)+" verschieben!"));
426 return 1;
427 }
428 if( member(m_indices(ETO->QueryProp(P_EXITS)), wohin) != -1 ) // Ausgang vorhanden?
429 {
430 zielraum=ETO->QueryProp(P_EXITS)[wohin];
431 if( strstr(zielraum, LOWER(QueryHausbesitzer())+"raum", 0) != -1 ||
432 QueryProp("test") ) // Gleiches Seherhaus? Oder Test?
433 {
434 TO->move(zielraum, M_PUT);
435 write("Du verschiebst "+name(WEN,1)+" nach "+CAP(wohin)+".\n");
436 TP->move(zielraum, M_GO, "nach "+CAP(wohin), "schiebt "+name(WEN),
437 "schiebt "+name(WEN)+" herein");
438 if( present("Interactive", SCHRANKMASTER) )
439 tell_room(SCHRANKMASTER, TP->Name(WER)+" verschiebt "+name(WEN)+" nach "
440 +to_string(ETO)+".\n");
441 }
442 else
443 write( BS("Du kannst "+name(WEN,1)+" nicht in einen Raum ausserhalb "
444 +"Deines Hauses schieben!"));
445 }
446 else
447 write( BS("Es gibt keinen Ausgang namens \""+wohin+"\", wohin Du "
448 +name(WEN,1)+" verschieben koenntest.",78,"Fehler: ", BS_INDENT_ONCE));
449 return 1;
450}
451
452int zertruemmern(string str)
453{
454 string nf_str;
455 nf_str="Syntax: zertruemmer [Objekt-Id]\n"
456 +"Bsp.: zertruemmer "+QueryProp(P_IDS)[1]+"\n";
457 notify_fail("Fehler: Ohne Parameter klappt das nicht.\n"+nf_str);
458 if(!str) return 0;
459 notify_fail("Fehler: Du musst eine gueltige Objekt-Id angeben!\n"+nf_str);
460 if(present(str)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
461 return 0;
462 if( QueryHausbesitzer() != QueryTP() && !QueryProp("test") )
463 {
464 write( BS("Nur "+QueryHausbesitzer()+" darf "+name(WEN,1)+" zertruemmern!"));
465 return 1;
466 }
467 write( BS("Du zertruemmerst "+name(WEN)+" mit wuchtigen Schlaegen, bis "
468 +"nicht mal mehr Kruemel von "+QueryPronoun(WEM)+" uebrig sind."));
469 tell_room(ETO, BS( TP->Name(WER)+" zertruemmert "+name(WEN)+"."), ({TP}) );
470 call_other(SCHRANKMASTER,"???",0);
471 if( present("Interactive", SCHRANKMASTER) )
472 tell_room(SCHRANKMASTER, TP->Name(WER)+" zertruemmert "+name(WEN)+".\n");
473 SCHRANKMASTER->RemoveCnt(TO, geteuid(TP) );
474 remove(1);
475 if(TO) destruct(TO);
476 return 1;
477}
478
MG Mud User88f12472016-06-24 23:31:02 +0200479void reset()
480{
481 set_next_reset(3600); // 1 x pro Std. Reset!
482 ::reset();
483}
484
485public varargs int remove(int silent)
486{
487 // Beim Schrankmaster abmelden, dann zerstoeren.
488 string uid="";
489 if (objectp(environment()))
490 {
491 uid=environment()->QueryOwner();
492 }
493 SCHRANKMASTER->RemoveCnt(TO, uid );
494 return ::remove(silent);
495}
496
497public int UpdateMe()
498{
499 if (!objectp(environment()))
500 return 0;
501 object cnt_neu=clone_object(load_name(ME)); // Neuen Schrank clonen
502 cnt_neu->move( environment(), M_NOCHECK ); // In selben Raum wie alten schieben...
Zesstra499ab7a2019-02-04 20:31:39 +0100503 cnt_neu->SetProp(P_CNT_STATUS, QueryProp(P_CNT_STATUS) );
504 cnt_neu->SetProp(P_TRANSPARENT, QueryProp(P_TRANSPARENT) );
MG Mud User88f12472016-06-24 23:31:02 +0200505 cnt_neu->SetProp("cnt_hausfreunde", QueryProp("cnt_hausfreunde") );
506 cnt_neu->SetProp("cnt_erlaubnis", QueryProp("cnt_erlaubnis") );
Zesstra499ab7a2019-02-04 20:31:39 +0100507 cnt_neu->SetProp("cnt_familie", QueryProp("cnt_familie") );
MG Mud User88f12472016-06-24 23:31:02 +0200508 // Inventar bewegen
509 foreach(object inv: all_inventory(this_object()))
510 {
511 if( inv->IsUnit() ) // Units
512 inv->move(cnt_neu, M_NOCHECK|M_MOVE_ALL);
513 else // Normale Objekte
514 inv->move(cnt_neu, M_NOCHECK);
515 }
516 remove(1);
517 return 1;
518}
519
520// Eingebaut 07.12.2005 von Seleven
521// Die Kurzbeschreibung invis machen:
522static int verstecken (string str)
523{
524 string nf_str;
525 nf_str="Syntax: sverstecke [Objekt-Id]\n"
526 +"Bsp.: sverstecke "+QueryProp(P_IDS)[1]+"\n";
527 notify_fail("Fehler: Ohne Parameter klappt das nicht.\n"+nf_str);
528 if(!str || sizeof(str) == 0 || !stringp(str)) return 0;
529
530 notify_fail("Fehler: Du musst eine gueltige Objekt-Id angeben!\n"+nf_str);
531 if(present(str)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
532 return 0;
533
534 if( QueryHausbesitzer() != QueryTP() && !QueryProp("test") )
535 {
536 write( BS("Nur "+QueryHausbesitzer()+" darf "+name(WEN,1)+" verstecken!"));
537 return 1;
538 }
539 notify_fail("Du hast "+name(WEN,1)+" doch schon versteckt!\n");
540 if(QueryProp("versteckt") == 1) return 0;
541 write("Du versteckst "+name(WEN,1)+".\n");
542 SetProp("versteckt", 1);
543 return 1;
544}
545
546static int zeigen (string str)
547{
548 string nf_str;
549 nf_str="Syntax: shole [Objekt-Id] hervor\n"
550 +"Bsp.: shole "+QueryProp(P_IDS)[1]+" hervor\n";
551 notify_fail("Fehler: Ohne Parameter klappt das nicht.\n"+nf_str);
552 if(!str || sizeof(str) == 0 || !stringp(str)) return 0;
553 if(strstr(str,"hervor") != -1)
554 sscanf(str,"%s hervor",str);
555 notify_fail("Fehler: Du musst eine gueltige Objekt-Id angeben!\n"+nf_str);
556 if(present(str)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
557 return 0;
558
559 if( QueryHausbesitzer() != QueryTP() && !QueryProp("test") )
560 {
561 write( BS("Nur "+QueryHausbesitzer()+" darf "+name(WEN,1)+
562 " wieder hervorholen!"));
563 return 1;
564 }
565 notify_fail(Name(WER,1)+" ist doch gar nicht versteckt!\n");
566 if(QueryProp("versteckt") == 0) return 0;
567 write("Du holst "+name(WEN,1)+" aus dem Versteck.\n");
568 SetProp("versteckt", 0);
569 return 1;
570}
571
572
573mixed short()
574{
575 string sh;
576
577 // Unsichtbar? Dann gibts nichts zu sehen ...
578 if (QueryProp(P_INVIS)||!(sh=QueryProp(P_SHORT)))
579 return 0;
580
581 if(QueryProp(P_CNT_STATUS)==CNT_STATUS_OPEN)
582 {sh += " (geoeffnet)";}
583
584 if(QueryProp("versteckt") == 1) {sh = "";}
585 else sh += ".";
586
587 return process_string(sh)+"\n";
588}
589
590// hier nicht genutzt, zum Ueberschreiben gedacht.
591protected void SetBesitzer(string uid, string uuid) { }
592
593// nach dem move schauen, ob man in einem Seherhaus ist. Wenn ja, wird die
594// Funktion SetBesitzer() gerufen und ihr UID und UUID des Eigentuemers
595// uebergeben. Sollten UID und/oder UUID nicht bestimmbar sein, wird die
596// Funktion nicht gerufen.
597protected void NotifyMove(object dest, object oldenv, int method)
598{
599
600 ::NotifyMove(dest, oldenv, method);
601
602 if (dest
603 && strstr(object_name(dest),"/d/seher/haeuser/") == 0)
604 {
605 // (vermutlich) in einem Seherhaus
606 string uid = dest->QueryOwner();
607 // erstmal beim Schrankmaster anmelden.
608 SCHRANKMASTER->RegisterCnt(TO, QueryProp("cnt_version_std")
609 +":"+QueryProp("cnt_version_obj"), uid, dest);
Zesstra2ff528a2020-01-21 22:12:27 +0100610 // wenn uid ein Spieler ist, dann SetBesitzer rufen.
611 if (master()->find_userinfo(uid))
MG Mud User88f12472016-06-24 23:31:02 +0200612 {
Zesstra2ff528a2020-01-21 22:12:27 +0100613 SetBesitzer(uid, getuuid(uid));
MG Mud User88f12472016-06-24 23:31:02 +0200614 }
615 // else: User unbekannt? -> jedenfalls keine initialisierung moeglich.
616 }
617}
618