blob: 7473b1019d082e8b6434190a1ef679ce8f40544e [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001//--------------------------------------------------------------------------------
2// Name des Objects: Spind
3// Letzte Aenderung: 17.03.2001
4// Magier: Swift
5//--------------------------------------------------------------------------------
6#pragma strong_types,rtt_checks
7
8#include "schrankladen.h"
9#include "ansi.h"
10inherit LADEN("swift_std_container");
11
12#define VERSION_OBJ "3"
13
14string strall;
15
16protected void create()
17{
18 if (!clonep(TO)) return;
19 swift_std_container::create();
20 SetProp(P_SHORT, "Ein Spind");
21 SetProp(P_LONG, BS(
22 "Dieser Stahlschrank ist vor allem fuer spartanische Raeume gedacht. Ebenso "
23 +"wie sein Gegenstueck, der Kleiderschrank, verfuegt er ueber eine Menge "
24 +"Regale, in denen er riesige Ausruestungsmengen aufnehmen kann.")
25 +"@@cnt_status@@");
26 AddId(({"spind", "schrank", "stahlschrank"}));
27 SetProp("cnt_version_obj", VERSION_OBJ);
28 SetProp(P_NAME, "Spind");
29 SetProp(P_GENDER, MALE);
30 SetProp(P_WEIGHT, 5000); // Gewicht 5 Kg
31 SetProp(P_MAX_WEIGHT, 1000000); // Es passen fuer 1000 kg Sachen rein.
32 SetProp(P_WEIGHT_PERCENT, 100); // Dafuer macht er auch nix leichter :)
33 SetProp(P_MAX_OBJECTS, 100); // Mehr sollte nicht sein, lt. Tiamak.
34 SetProp(P_VALUE, 0); // Kein materieller Wert. Ist eh nicht verkaufbar.
35 SetProp(P_NOBUY, 1); // Wird im Laden zerstoert, falls er verkauft wird.
36 SetProp(P_NOGET, "Das geht nicht. "+Name(WER,1)+" haftet wie magisch am Boden.\n");
37 SetProp(P_MATERIAL, ({MAT_MISC_METAL, MAT_MISC_MAGIC}) );
38 SetProp(P_INFO, "Versuchs mal mit: \"skommandos "+QueryProp(P_IDS)[1]+"\" !\n");
39 SetProp("obj_cmd", "sliste [Objekt-Id] [Kleidungs-/Ruestungstyp]\n"
40 +" Kleidungs-/Ruestungstypen: Helme, Umhaenge, Ruestungen, Hosen, Schuhe,\n"
41 +" Handschuhe, Guertel, Amulette, Ringe, Koecher,\n"
42 +" Schilde, Sonstiges\n");
43 AD(({"regal", "regale"}), BS("Durch die Regale kommt etwas Ordnung in die "
44 +"vielen Sachen, die man in den Schrank stecken kann. Du kannst Dir z.B. "
45 +"eine Liste bestimmter Kleidungs-/Ruestungstypen des Schrankinhaltes "
46 +"mit dem Befehl \"sliste\" anschauen. (Das geht natuerlich nur bei "
47 +"offenem Schrank!"));
48
49 AddCmd(({"sliste"}), "auflistung");
50}
51
52varargs int PreventInsert(object ob)
53{
54 // Nur Ruestung/Kleidung hat in diesem Container was verloren!
55 if ((ob->IsClothing() || ob->QueryProp(P_ARMOUR_TYPE))
56 && !ob->QueryProp(P_WEAPON_TYPE) )
57 {
58 return ::PreventInsert(ob);
59 }
60
61 write( BS("In "+name(WEN,1)+" kannst Du nur Ruestungs-/Kleidungsstuecke legen!"));
62 return 1;
63}
64
65int auflistung2(string was, string nf_str1, string nf_str2, int alles)
66{
67 string obshort, suche, *strs;
68 object *obs;
69 int i;
70 mapping suchobs;
71 switch(was)
72 {
73 case "helme" : suche=AT_HELMET; break;
74 case "umhaenge" : suche=AT_CLOAK; break;
75 case "ruestungen" : suche=AT_ARMOUR; break;
76 case "hosen" : suche=AT_TROUSERS; break;
77 case "schuhe" : suche=AT_BOOT; break;
78 case "handschuhe" : suche=AT_GLOVE; break;
79 case "guertel" : suche=AT_BELT; break;
80 case "amulette" : suche=AT_AMULET; break;
81 case "ringe" : suche=AT_RING; break;
82 case "koecher" : suche=AT_QUIVER; break;
83 case "schilde" : suche=AT_SHIELD; break;
84 case "sonstiges" : suche=AT_MISC; break;
85 default : write("Fehler: Ungueltiger Kleidungs-/Ruestungstyp. "
86 +"Folgende Typen gibt es:\n"+nf_str1+nf_str2);
87 return 1; break;
88 }
89 obs=all_inventory();
90 suchobs=([]);
91 for(i=0;i<sizeof(obs);i++)
92 {
93 obshort=obs[i]->QueryProp(P_SHORT);
94 if(obshort=="Nichts besonderes") // keine P_SHORT ?
95 obshort=obs[i]->Name(WER); // Hoffen wir mal dass das Obj. nen Namen hat.
96 if(obs[i]->QueryProp(P_ARMOUR_TYPE)==suche) // Gesuchter ArmourType gefunden...
97 {
98 if(suchobs[obshort]) // P_SHORT des Obj. schon im mapping?
99 {
100 if( obs[i]->QueryProp(P_AMOUNT) )
101 suchobs[obshort]+=obs[i]->QueryProp(P_AMOUNT); // Dann den Zaehler um Amount hoch!
102 else
103 suchobs[obshort]+=1; // Dann den Zaehler um 1 hoch!
104 }
105 else
106 {
107 if( obs[i]->QueryProp(P_AMOUNT) )
108 suchobs+=([obshort: obs[i]->QueryProp(P_AMOUNT)]);
109 else
110 suchobs+=([obshort: 1]);
111 }
112 }
113 }
114 strs=m_indices(suchobs);
115 if(sizeof(strs))
116 {
117 if(!alles)
118 {
119 strall+=Name(WER,1)+" enthaelt folgende "+CAP(was)+":\n";
120 strall+="------------------------------------------------------------\n";
121 }
122 else
123 strall+=ANSI_BOLD+"=== "+CAP(was)+":\n"+ANSI_NORMAL;
124 for(i=0;i<sizeof(strs);i++)
125 {
126 if(suchobs[strs[i]] > 1)
127 strall+=strs[i]+". ("+suchobs[strs[i]]+")\n";
128 else
129 strall+=strs[i]+".\n";
130 }
131 }
132 else
133 if(!alles)
134 strall+=Name(WER,1)+" enthaelt keine "+CAP(was)+"!\n";
135 return 1;
136}
137
138int auflistung(string str)
139{
140 string *strs, ob_id, was, nf_str1,nf_str2;
141 strall="";
142 nf_str1=" (Helme, Umhaenge, Ruestungen, Hosen, Schuhe, Handschuhe,\n"
143 +" Guertel, Amulette, Ringe, Koecher, Schilde, Sonstiges)\n";
144 nf_str2="Syntax: sliste [Objekt-Id] [Kleidungs-/Ruestungstyp|\"alles\"]\n"
145 +"Bsp.: sliste "+QueryProp(P_IDS)[1]+" "+"helme\n"
146 +" sliste "+QueryProp(P_IDS)[1]+" alles\n";
147 notify_fail("Fehler: Ohne Parameter klappt das nicht.\n"+nf_str2);
148 if(!str) return 0;
149 if(present(str)==TO) // Ueberpruefe, ob dieses Objekt gemeint ist!
150 {
151 write("Fehler: Es fehlt ein Kleidungs-/Ruestungstyp. Folgende Typen gibt es:\n"
152 +nf_str1+nf_str2);
153 return 1;
154 }
155 strs=old_explode(str, " ");
156 notify_fail("Fehler: Du musst eine gueltige Objekt-Id angeben!\n"
157 +nf_str2);
158 if( sizeof(strs) < 2 ) return 0; // Nur 1 Par. und der ist nicht die Objekt-Id
159 if( sizeof(strs) == 2 ) // Anzahl Par. = 2
160 {
161 ob_id=strs[0];
162 was=strs[1];
163 if( IST_ZAHL(was) ) // Objekt-Id z.B. mit "schrank 2" angesprochen?
164 if(present(ob_id+" "+was)==TO) // Falls dieses Objekt gemeint ist und kein 3. Par!
165 {
166 write("Fehler: Es fehlt ein Kleidungs-/Ruestungstyp. Folgende Typen gibt es:\n"
167 +nf_str1+nf_str2);
168 return 1;
169 }
170 else
171 return 0;
172 }
173 else if( sizeof(strs) == 3 )
174 {
175 ob_id=strs[0]+" "+strs[1];
176 was=strs[2];
177 }
178 else // Anzahl erforderlicher Parameter ueberschritten!
179 return 0;
180 if(present(ob_id)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
181 return 0;
182 if(QueryProp(P_CNT_STATUS)!=CNT_STATUS_OPEN)
183 {
184 write("Dazu muesste "+name(WER,1)+" geoeffnet sein.\n");
185 return 1;
186 }
187//--- Hier ist Parameterpruefung zu Ende.
188 was=LOWER(was);
189 if(was!="alles")
190 auflistung2(was, nf_str1, nf_str2, 0);
191 else
192 {
193 auflistung2("helme", nf_str1, nf_str2, 1);
194 auflistung2("umhaenge", nf_str1, nf_str2, 1);
195 auflistung2("ruestungen", nf_str1, nf_str2, 1);
196 auflistung2("hosen", nf_str1, nf_str2, 1);
197 auflistung2("schuhe", nf_str1, nf_str2, 1);
198 auflistung2("handschuhe", nf_str1, nf_str2, 1);
199 auflistung2("guertel", nf_str1, nf_str2, 1);
200 auflistung2("amulette", nf_str1, nf_str2, 1);
201 auflistung2("ringe", nf_str1, nf_str2, 1);
202 auflistung2("koecher", nf_str1, nf_str2, 1);
203 auflistung2("schilde", nf_str1, nf_str2, 1);
204 auflistung2("sonstiges", nf_str1, nf_str2, 1);
205 }
206 TP->More(strall);
207 return 1;
208}