blob: 90f49861fd087e34322114ee96aabc75f1992a1a [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
37#define VERSION_STD "9"
38
39nosave int hauserlaubnis;
40nosave string zweitieerlaubnis;
41nosave string *erlaubnis;
42
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
53 SetProp("cnt_hausfreunde", ({}) );
54 SetProp("cnt_erlaubnis", ({}) );
55 SetProp("cnt_zweitieerlaubnis", "" );
56 SetProp("cnt_version_std", VERSION_STD);
57
58 hauserlaubnis=0;
59 zweitieerlaubnis="";
60 erlaubnis=({});
61
62 set_next_reset(3600); // 1 x pro Std. Reset!
63
64 AddCmd(({"oeffne"}), "oeffnen");
65 AddCmd(({"schliess", "schliesse"}), "schliessen");
66 AddCmd(({"serlaube"}), "erlaubnis");
67 AddCmd(({"skommandos"}), "skommandos");
68 AddCmd(({"verschieb", "verschiebe"}), "verschieben");
69 AddCmd(({"zertruemmer", "zertruemmere"}), "zertruemmern");
70 //Seleven 07.12.2005:
71 AddCmd(({"sverstecke","sversteck"}),"verstecken");
72 AddCmd(({"shole","shol"}),"zeigen");
73}
74
75// Zesstra, 1.7.07, fuers Hoerrohr
76string GetOwner() {return "swift";}
77
78static string QueryHausbesitzer()
79{
80 return CAP(to_string(ETO->QueryOwner())); // z.B.: Swift
81}
82
83
84
85static string QueryTP()
86{
87 return CAP(geteuid(TP)); // z.B.: Swift
88}
89
90int oeffnen(string str)
91{
92 notify_fail("Was moechtest Du oeffnen?\n");
93 if(!str) return 0;
94 if(present(str)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
95 return 0;
96 if(QueryProp(P_CNT_STATUS)==CNT_STATUS_OPEN)
97 {
98 write(Name(WER,1)+" ist doch schon geoeffnet!\n");
99 return 1;
100 }
101 if( !erlaubt() )
102 {
103 write("Ein magisches Kraftfeld verhindert das Oeffnen "+name(WESSEN,1)+"!\n");
104 return 1;
105 }
106 write("Du oeffnest "+name(WEN)+".\n");
107 say(TP->Name(WER)+" oeffnet "+name(WEN)+".\n", ({TP}) );
108 SetProp(P_CNT_STATUS,CNT_STATUS_OPEN);
109 SetProp(P_TRANSPARENT, 1);
110 return 1;
111}
112
113int schliessen(string str)
114{
115 notify_fail("Was moechtest Du schliessen?\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_CLOSED)
120 {
121 write(Name(WER,1)+" ist doch schon geschlossen!\n");
122 return 1;
123 }
124 if( !erlaubt() )
125 {
126 write("Ein magisches Kraftfeld verhindert das Schliessen "+name(WESSEN,1)+"!\n");
127 return 1;
128 }
129 write("Du schliesst "+name(WEN)+".\n");
130 say(TP->Name(WER)+" schliesst "+name(WEN)+".\n", ({TP}) );
131 SetProp(P_CNT_STATUS,CNT_STATUS_CLOSED);
132 SetProp(P_TRANSPARENT, 0);
133 return 1;
134}
135
136string cnt_status()
137{
138 return Name(WER,1)+" ist "
139 +(QueryProp(P_CNT_STATUS)?"geschlossen":"geoeffnet")+".\n";
140}
141
142int erlaubt()
143{
144 if( QueryProp("test") ) return 1; // Zu Testzwecken!
145 if( QueryHausbesitzer()=="0" ) // Schrank steht nicht in einem Seherhaus!
146 {
147 tell_room(ETO, Name(WER,1)+" sollte nicht ausserhalb eines Seherhauses stehen.\n"
148 +"Bitte Mail an "+VERANTWORTLICHER_MAGIER+"!\n");
149 return 0;
150 }
151 if( QueryTP() == QueryHausbesitzer() ) // Der Besitzer des Hauses selbst
152 return 1;
153 if(hauserlaubnis)
154 {
155 if( member(SHVERWALTER->HausProp(LOWER(QueryHausbesitzer()), 2),
156 QueryTP()) != -1 ) // Hausfreunde
157 return 1;
158 }
159 if(zweitieerlaubnis!="") // Zweities
160 {
161 if( TP->QueryProp(P_SECOND) == zweitieerlaubnis )
162 return 1;
163 }
164 if( sizeof(erlaubnis) )
165 {
166 if( member(erlaubnis, QueryTP()) != -1 ) // Sonstige Personen die berechtigt sind
167 return 1;
168 }
169 return 0;
170}
171
172void cnt_open()
173{
174 SetProp(P_CNT_STATUS,CNT_STATUS_OPEN);
175 SetProp(P_TRANSPARENT, 1);
176}
177
178int erlaubnis_liste()
179{
180 int i;
181 string *strs,str;
182 if( QueryHausbesitzer() != QueryTP() && !QueryProp("test") )
183 {
184 write( BS("Nur "+QueryHausbesitzer()+" darf Berechtigungen "
185 +name(WESSEN,1)+" abfragen!"));
186 return 1;
187 }
188 write("=============================================================================\n");
189 if(hauserlaubnis)
190 {
191 strs=SHVERWALTER->HausProp(LOWER(QueryHausbesitzer()), 2);
192 write(BS("Folgende Freunde Deines Hauses duerfen "+name(WEN,1)
193 +" oeffnen/schliessen:"));
194 str="";
195 if(sizeof(strs))
196 {
197 for(i=0;i<sizeof(strs);i++)
198 {
199 str+=strs[i];
200 if(i<sizeof(strs)-1)
201 str+=", ";
202 }
203 }
204 else
205 str="Du hast keiner Person Zugriff auf Dein Haus gewaehrt...\n";
206 write(BS(str));
207 }
208 else
209 write(BS("Die Freunde Deines Hauses duerfen "+name(WEN,1)
210 +" nicht oeffnen/schliessen."));
211 write("-----------------------------------------------------------------------------\n");
212 if(zweitieerlaubnis!="")
213 {
214 if( zweitieerlaubnis==geteuid(TP) )
215 write(BS( "Alle Deine Zweities duerfen "+name(WEN,1)+" oeffnen/schliessen."));
216 else
217 write(BS( "Alle Zweities von "+CAP(zweitieerlaubnis)+" duerfen "+name(WEN,1)
218 +" oeffnen/schliessen."));
219 write("-----------------------------------------------------------------------------\n");
220 }
221 strs=QueryProp("cnt_erlaubnis");
222 if(sizeof(strs))
223 {
224 write(BS("Folgende sonstige Personen duerfen "+name(WEN,1)
225 +" oeffnen/schliessen:"));
226 str="";
227 for(i=0;i<sizeof(strs);i++)
228 {
229 str+=strs[i];
230 if(i<sizeof(strs)-1)
231 str+=", ";
232 }
233 write(BS(str));
234 }
235 else
236 write(BS("Es gibt keine sonstigen Personen, die "+name(WEN,1)
237 +" oeffnen/schliessen duerfen."));
238 write("=============================================================================\n");
239 return 1;
240}
241
242int erlaubnis(string str)
243{
244 string *strs,wen,nf_str;
245 nf_str="Syntax: serlaube [Objekt-Id] [Spielername|\"hausfreunde\"|\"zweities\"]\n"
246 +"Bsp.: serlaube "+QueryProp(P_IDS)[1]+" hausfreunde\n"
247 +" serlaube "+QueryProp(P_IDS)[1]+" zweities\n"
248 +" serlaube "+QueryProp(P_IDS)[1]+" geordi\n"
249 +" serlaube "+QueryProp(P_IDS)[1]+" (Listet Spieler mit Erlaubnis)\n";
250 notify_fail("Fehler: Ohne Parameter klappt das nicht.\n"+nf_str);
251 if(!str) return 0;
252 if(present(str)==TO) // Falls Par==Obj. und kein 2./3. Par.
253 {
254 erlaubnis_liste(); // Liste der Erlaubten ausgeben!
255 return 1;
256 }
257 notify_fail("Fehler: Du musst eine gueltige Objekt-Id angeben!\n"+nf_str);
258 strs=old_explode(str, " ");
259 if( sizeof(strs) < 2 ) // Falls nur 1 Par.
260 return 0; // Anzahl erforderlicher Parameter unterschritten!
261 else if( sizeof(strs) == 2 )
262 {
263 str=strs[0];
264 wen=strs[1];
265 if( IST_ZAHL(wen) )
266 if(present(str+" "+wen)==TO) // Falls 2 Par. und dies das Obj. ist ohne 3. Par.
267 {
268 erlaubnis_liste(); // Liste der Erlaubten ausgeben!
269 return 1;
270 }
271 else
272 return 0;
273 }
274 else if( sizeof(strs) == 3 )
275 {
276 str=strs[0]+" "+strs[1];
277 wen=strs[2];
278 }
279 else // Anzahl erforderlicher Parameter ueberschritten!
280 return 0;
281 if(present(str)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
282 return 0;
283 if( !erlaubt() && !QueryProp("test") )
284 {
285 write( BS("Nur "+QueryHausbesitzer()+" darf Berechtigungen "
286 +name(WESSEN,1)+" aendern!"));
287 return 1;
288 }
289 if(wen=="hausfreunde")
290 {
291 if(hauserlaubnis)
292 {
293 hauserlaubnis=0;
294 SetProp("cnt_hausfreunde", ({}) );
295 }
296 else
297 {
298 hauserlaubnis=1;
299 SetProp("cnt_hausfreunde", SHVERWALTER->HausProp(LOWER(QueryHausbesitzer()), 2) );
300 }
301 write( BS("Die Freunde Deines Seherhauses duerfen "+name(WEN,1)+" jetzt "
302 +(!hauserlaubnis?"nicht mehr ":"")+"oeffnen/schliessen."));
303 return 1;
304 }
305 if(wen=="zweities")
306 {
307 if(zweitieerlaubnis!="") // Zweities erlaubt?
308 zweitieerlaubnis=""; // dann verbieten!
309 else // ansonsten:
310 {
311 if( TP->QueryProp(P_SECOND) ) // Selbst ein Zweitie?
312 zweitieerlaubnis=LOWER(TP->QueryProp(P_SECOND)); // Die Zweities vom Erstie erlauben!
313 else // sonst:
314 zweitieerlaubnis=geteuid(TP); // Eigene Ersties erlauben!
315 }
316 SetProp("cnt_zweitieerlaubnis", zweitieerlaubnis );
317 if(zweitieerlaubnis!="")
318 write( BS(CAP(zweitieerlaubnis)+"'s Zweities duerfen "+name(WEN,1)+" jetzt "
319 +(zweitieerlaubnis==""?"nicht mehr ":"")+"oeffnen/schliessen."));
320 return 1;
321 }
322 wen=CAP(wen);
323 if( file_size("//save//"+LOWER(wen[0..0])+"//"+LOWER(wen)+".o") != -1 ) // Spieler gibt es auch!
324 {
325 if( member(erlaubnis, wen) != -1 ) // Spieler hat Erlaubnis -> verbieten!
326 {
327 erlaubnis-=({wen});
328 write( BS( wen+" darf "+name(WEN,1)+" jetzt nicht mehr oeffnen/schliessen."));
329 }
330 else
331 {
332 erlaubnis+=({wen});
333 write( BS( wen+" darf "+name(WEN,1)+" jetzt oeffnen/schliessen."));
334 }
335 SetProp("cnt_erlaubnis", erlaubnis);
336 return 1;
337 }
338 else
339 write("Es gibt keinen Spieler namens "+wen+"!\n");
340 return 1;
341}
342
343varargs int skommandos(string str)
344{
345 notify_fail( "Fehler: Dieser Befehl benoetigt eine gueltige Objekt-Id als Parameter.\n"
346 +"Beispiel: skommandos "+QueryProp(P_IDS)[1]+"\n");
347 if(!str) return 0;
348 if(present(str)!=TO ) // Bin ich gemeint?
349 return 0;
350 write("=============================================================================\n");
351 write("Aktuelle Version: "+QueryProp("cnt_version_std")+QueryProp("cnt_version_obj")+"\n");
352 write( BS(Name(WER,1)+" kann nur in diesem Seherhaus verwendet werden, "
353 +"da "+QueryPronoun(WER)+" speziell dafuer gekauft wurde. "+CAP(QueryPronoun(WER))
354 +" verfuegt ueber folgende Kommandos:")
355 +"-----------------------------------------------------------------------------\n"
356 +"oeffne [Objekt-Id]\n"
357 +" oeffnet "+name(WEN,1)+"\n\n"
358 +"schliesse [Objekt-Id]\n"
359 +" schliesst "+name(WEN,1)+"\n\n"
360 +"serlaube [Objekt-Id] [Spielername|\"hausfreunde\"|\"zweities\"]\n"
361 +" Erlaubt Personen, "+name(WEN,1)+" mitzubenutzen.\n"
362 +" serlaube + Objekt-Id (ohne Spielername/hausfreunde)\n"
363 +" listet alle Personen mit Zugriff auf "+name(WEN,1)+"\n\n"
364 +"verschiebe [Objekt-Id] nach [Ausgang]\n"
365 +" Damit kannst Du "+name(WEN,1)+" innerhalb Deines Seherhauses verschieben.\n\n"
366 //Seleven 07.12.2005
367 +"sverstecke [Objekt-Id]\n"
368 +" Damit machst Du "+name(WEN,1)+" unsichtbar.\n"
369 +"shole [Objekt-Id] hervor\n"
370 +" Damit machst Du "+name(WEN,1)+" wieder sichtbar.\n"
371 // Bis hier
372 +"zertruemmer [Objekt-Id]\n"
373 +" Damit zerstoerst Du "+name(WEN,1)+".\n\n");
374
375
376 if( QueryProp("obj_cmd") )
377 write( QueryProp("obj_cmd")+"\n" );
378
379 write("[Objekt-Id] muss eine gueltige Id sein, in diesem Fall z.B. "
380 +QueryProp(P_IDS)[1]+"\n");
381 write("=============================================================================\n");
382
383
384 return 1;
385}
386
387int verschieben(string str)
388{
389 string was, wohin, zielraum,nf_str;
390 nf_str="Syntax: verschiebe [Objekt-Id] nach [Richtung]\n"
391 +"Bsp.: verschiebe "+QueryProp(P_IDS)[1]+" nach osten\n";
392 notify_fail("Fehler: Ohne Parameter klappt das nicht.\n"+nf_str);
393 if(!str) return 0;
394 if(sscanf(str,"%s nach %s", was, wohin) != 2)
395 return 0;
396 notify_fail("Fehler: Du musst eine gueltige Objekt-Id angeben!\n"+nf_str);
397 if(present(was)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
398 return 0;
399 if( QueryHausbesitzer() != QueryTP() && !QueryProp("test") )
400 {
401 write( BS("Nur "+QueryHausbesitzer()+" darf "+name(WEN,1)+" verschieben!"));
402 return 1;
403 }
404 if( member(m_indices(ETO->QueryProp(P_EXITS)), wohin) != -1 ) // Ausgang vorhanden?
405 {
406 zielraum=ETO->QueryProp(P_EXITS)[wohin];
407 if( strstr(zielraum, LOWER(QueryHausbesitzer())+"raum", 0) != -1 ||
408 QueryProp("test") ) // Gleiches Seherhaus? Oder Test?
409 {
410 TO->move(zielraum, M_PUT);
411 write("Du verschiebst "+name(WEN,1)+" nach "+CAP(wohin)+".\n");
412 TP->move(zielraum, M_GO, "nach "+CAP(wohin), "schiebt "+name(WEN),
413 "schiebt "+name(WEN)+" herein");
414 if( present("Interactive", SCHRANKMASTER) )
415 tell_room(SCHRANKMASTER, TP->Name(WER)+" verschiebt "+name(WEN)+" nach "
416 +to_string(ETO)+".\n");
417 }
418 else
419 write( BS("Du kannst "+name(WEN,1)+" nicht in einen Raum ausserhalb "
420 +"Deines Hauses schieben!"));
421 }
422 else
423 write( BS("Es gibt keinen Ausgang namens \""+wohin+"\", wohin Du "
424 +name(WEN,1)+" verschieben koenntest.",78,"Fehler: ", BS_INDENT_ONCE));
425 return 1;
426}
427
428int zertruemmern(string str)
429{
430 string nf_str;
431 nf_str="Syntax: zertruemmer [Objekt-Id]\n"
432 +"Bsp.: zertruemmer "+QueryProp(P_IDS)[1]+"\n";
433 notify_fail("Fehler: Ohne Parameter klappt das nicht.\n"+nf_str);
434 if(!str) return 0;
435 notify_fail("Fehler: Du musst eine gueltige Objekt-Id angeben!\n"+nf_str);
436 if(present(str)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
437 return 0;
438 if( QueryHausbesitzer() != QueryTP() && !QueryProp("test") )
439 {
440 write( BS("Nur "+QueryHausbesitzer()+" darf "+name(WEN,1)+" zertruemmern!"));
441 return 1;
442 }
443 write( BS("Du zertruemmerst "+name(WEN)+" mit wuchtigen Schlaegen, bis "
444 +"nicht mal mehr Kruemel von "+QueryPronoun(WEM)+" uebrig sind."));
445 tell_room(ETO, BS( TP->Name(WER)+" zertruemmert "+name(WEN)+"."), ({TP}) );
446 call_other(SCHRANKMASTER,"???",0);
447 if( present("Interactive", SCHRANKMASTER) )
448 tell_room(SCHRANKMASTER, TP->Name(WER)+" zertruemmert "+name(WEN)+".\n");
449 SCHRANKMASTER->RemoveCnt(TO, geteuid(TP) );
450 remove(1);
451 if(TO) destruct(TO);
452 return 1;
453}
454
455int props2vars() // Fuer die Update-Funktion des Schrankmasters
456{
457 zweitieerlaubnis=QueryProp("cnt_zweitieerlaubnis")||"";
458 erlaubnis=QueryProp("cnt_erlaubnis")||({});
459 if( sizeof(QueryProp("cnt_hausfreunde")) )
460 hauserlaubnis=1;
461 else
462 hauserlaubnis=0;
463 if( QueryProp(P_CNT_STATUS) == CNT_STATUS_OPEN)
464 SetProp(P_TRANSPARENT, 1);
465 else
466 SetProp(P_TRANSPARENT, 0);
467 return 1;
468}
469
470void reset()
471{
472 set_next_reset(3600); // 1 x pro Std. Reset!
473 ::reset();
474}
475
476public varargs int remove(int silent)
477{
478 // Beim Schrankmaster abmelden, dann zerstoeren.
479 string uid="";
480 if (objectp(environment()))
481 {
482 uid=environment()->QueryOwner();
483 }
484 SCHRANKMASTER->RemoveCnt(TO, uid );
485 return ::remove(silent);
486}
487
488public int UpdateMe()
489{
490 if (!objectp(environment()))
491 return 0;
492 object cnt_neu=clone_object(load_name(ME)); // Neuen Schrank clonen
493 cnt_neu->move( environment(), M_NOCHECK ); // In selben Raum wie alten schieben...
494 cnt_neu->SetProp("cnt_status", QueryProp("cnt_status") );
495 cnt_neu->SetProp("cnt_hausfreunde", QueryProp("cnt_hausfreunde") );
496 cnt_neu->SetProp("cnt_erlaubnis", QueryProp("cnt_erlaubnis") );
497 cnt_neu->SetProp("cnt_zweitieerlaubnis", QueryProp("cnt_zweitieerlaubnis") );
498 cnt_neu->props2vars(); // Schrank liest gesetzte Props aus in eigene Vars
499 // Inventar bewegen
500 foreach(object inv: all_inventory(this_object()))
501 {
502 if( inv->IsUnit() ) // Units
503 inv->move(cnt_neu, M_NOCHECK|M_MOVE_ALL);
504 else // Normale Objekte
505 inv->move(cnt_neu, M_NOCHECK);
506 }
507 remove(1);
508 return 1;
509}
510
511// Eingebaut 07.12.2005 von Seleven
512// Die Kurzbeschreibung invis machen:
513static int verstecken (string str)
514{
515 string nf_str;
516 nf_str="Syntax: sverstecke [Objekt-Id]\n"
517 +"Bsp.: sverstecke "+QueryProp(P_IDS)[1]+"\n";
518 notify_fail("Fehler: Ohne Parameter klappt das nicht.\n"+nf_str);
519 if(!str || sizeof(str) == 0 || !stringp(str)) return 0;
520
521 notify_fail("Fehler: Du musst eine gueltige Objekt-Id angeben!\n"+nf_str);
522 if(present(str)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
523 return 0;
524
525 if( QueryHausbesitzer() != QueryTP() && !QueryProp("test") )
526 {
527 write( BS("Nur "+QueryHausbesitzer()+" darf "+name(WEN,1)+" verstecken!"));
528 return 1;
529 }
530 notify_fail("Du hast "+name(WEN,1)+" doch schon versteckt!\n");
531 if(QueryProp("versteckt") == 1) return 0;
532 write("Du versteckst "+name(WEN,1)+".\n");
533 SetProp("versteckt", 1);
534 return 1;
535}
536
537static int zeigen (string str)
538{
539 string nf_str;
540 nf_str="Syntax: shole [Objekt-Id] hervor\n"
541 +"Bsp.: shole "+QueryProp(P_IDS)[1]+" hervor\n";
542 notify_fail("Fehler: Ohne Parameter klappt das nicht.\n"+nf_str);
543 if(!str || sizeof(str) == 0 || !stringp(str)) return 0;
544 if(strstr(str,"hervor") != -1)
545 sscanf(str,"%s hervor",str);
546 notify_fail("Fehler: Du musst eine gueltige Objekt-Id angeben!\n"+nf_str);
547 if(present(str)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
548 return 0;
549
550 if( QueryHausbesitzer() != QueryTP() && !QueryProp("test") )
551 {
552 write( BS("Nur "+QueryHausbesitzer()+" darf "+name(WEN,1)+
553 " wieder hervorholen!"));
554 return 1;
555 }
556 notify_fail(Name(WER,1)+" ist doch gar nicht versteckt!\n");
557 if(QueryProp("versteckt") == 0) return 0;
558 write("Du holst "+name(WEN,1)+" aus dem Versteck.\n");
559 SetProp("versteckt", 0);
560 return 1;
561}
562
563
564mixed short()
565{
566 string sh;
567
568 // Unsichtbar? Dann gibts nichts zu sehen ...
569 if (QueryProp(P_INVIS)||!(sh=QueryProp(P_SHORT)))
570 return 0;
571
572 if(QueryProp(P_CNT_STATUS)==CNT_STATUS_OPEN)
573 {sh += " (geoeffnet)";}
574
575 if(QueryProp("versteckt") == 1) {sh = "";}
576 else sh += ".";
577
578 return process_string(sh)+"\n";
579}
580
581// hier nicht genutzt, zum Ueberschreiben gedacht.
582protected void SetBesitzer(string uid, string uuid) { }
583
584// nach dem move schauen, ob man in einem Seherhaus ist. Wenn ja, wird die
585// Funktion SetBesitzer() gerufen und ihr UID und UUID des Eigentuemers
586// uebergeben. Sollten UID und/oder UUID nicht bestimmbar sein, wird die
587// Funktion nicht gerufen.
588protected void NotifyMove(object dest, object oldenv, int method)
589{
590
591 ::NotifyMove(dest, oldenv, method);
592
593 if (dest
594 && strstr(object_name(dest),"/d/seher/haeuser/") == 0)
595 {
596 // (vermutlich) in einem Seherhaus
597 string uid = dest->QueryOwner();
598 // erstmal beim Schrankmaster anmelden.
599 SCHRANKMASTER->RegisterCnt(TO, QueryProp("cnt_version_std")
600 +":"+QueryProp("cnt_version_obj"), uid, dest);
601 // UUID rausfinden
602 mixed ret = (mixed)master()->get_userinfo(uid);
603 if ( pointerp(ret) && sizeof(ret) >= 5 )
604 {
605 // Username + "_" + CreationDate
606 SetBesitzer(uid, ret[0] + "_" + ret[5]);
607 }
608 // else: User unbekannt? -> jedenfalls keine initialisierung moeglich.
609 }
610}
611