blob: e36abc9f8b2820b0757b47e88b5d2a3f23255881 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001//--------------------------------------------------------------------------------
2// Name des Objects: Waffenschrank
3// Letzte Aenderung: 22.03.2001
4// Magier: Swift
5//--------------------------------------------------------------------------------
6/* Changelog
7 * 21.05.2007, Zesstra
8 Kampfstaebe auf Hinweis von tassram ergaenzt.
9*/
10#pragma strong_types,rtt_checks
11
12#include "schrankladen.h"
13#include <ansi.h>
14#include <class.h>
15inherit LADEN("swift_std_container");
16
17#define VERSION_OBJ "6"
18
19string strall;
20
21protected void create()
22{
23 if (!clonep(TO)) return;
24 swift_std_container::create();
25 SetProp(P_SHORT, "Ein Waffenschrank");
26 SetProp(P_LONG, BS(
27 "Mit den Waffen, die in diesen massiven Holzschrank passen, koenntest "
28 +"Du ein ganzes Soeldnerheer ausruesten. Fuer jede Waffengattung gibt "
29 +"es einen eigenen Platz, damit man auch alles gleich findet, sollte "
30 +"man es brauchen.")+"@@cnt_status@@");
31 AddId(({"waffenschrank", "holzschrank", "schrank"}));
32 SetProp("cnt_version_obj", VERSION_OBJ);
33 SetProp(P_NAME, "Waffenschrank");
34 SetProp(P_GENDER, MALE);
35 SetProp(P_WEIGHT, 5000); // Gewicht 5 Kg
36 SetProp(P_MAX_WEIGHT, 1000000); // Es passen fuer 1000 kg Sachen rein.
37 SetProp(P_WEIGHT_PERCENT, 100); // Dafuer macht er auch nix leichter :)
38 SetProp(P_MAX_OBJECTS, 100); // Mehr sollte nicht sein, lt. Tiamak.
39 SetProp(P_VALUE, 0); // Kein materieller Wert. Ist eh nicht verkaufbar.
40 SetProp(P_NOBUY, 1); // Wird im Laden zerstoert, falls er verkauft wird.
41 SetProp(P_NOGET, "Das geht nicht. "+Name(WER,1)+" haftet wie magisch am Boden.\n");
42 SetProp(P_MATERIAL, ({MAT_MISC_WOOD, MAT_MISC_MAGIC}) );
43 SetProp(P_INFO, "Versuchs mal mit: \"skommandos "+QueryProp(P_IDS)[1]+"\" !\n");
44 SetProp("obj_cmd", "sliste [Objekt-Id] [Waffentyp|\"alles\"]\n"
45 +" Waffentypen: Schwerter, Speere, Aexte, Keulen, Kampfstaebe, Messer, Peitschen,\n"
46 +" Fernwaffen, Munition, Sonstiges, Unzuordbar\n");
47
48 AD(({"platz"}), BS("Der Schrank bietet Platz fuer jede erdenkliche "
49 +"Waffengattung."));
50
51 AddCmd(({"sliste"}), "auflistung");
52}
53
54varargs int PreventInsert(object ob)
55{
56 // Keine Waffe? Hat in diesem Container nix verloren!
57 if( !ob->QueryProp(P_WEAPON_TYPE) && !ob->QueryProp(P_WC) &&
58 !ob->id("\nBumerang") && !ob->is_class_member(CL_AMMUNITION) &&
59 !ob->id("\ngorseilpfeil") )
60 {
61 write( BS("In "+name(WEN,1)+" kannst Du nur Waffen + Munition legen!"));
62 return 1;
63 }
64 else
65 return ::PreventInsert(ob);
66}
67
68int auflistung2(string was, string nf_str1, string nf_str2, int alles)
69{
70 string obshort, suche, *strs;
71 object *obs;
72 int i;
73 mapping suchobs;
74 switch(was)
75 {
76 case "munition" : suche=WT_AMMU; break;
77 case "aexte" : suche=WT_AXE; break;
78 case "keulen" : suche=WT_CLUB; break;
79 case "messer" : suche=WT_KNIFE; break;
80 case "fernwaffen" : suche=WT_RANGED_WEAPON; break;
81 case "speere" : suche=WT_SPEAR; break;
82 case "schwerter" : suche=WT_SWORD; break;
83 case "peitschen" : suche=WT_WHIP; break;
84 case "sonstiges" : suche=WT_MISC; break;
85 case "kampfstaebe": suche=WT_STAFF; break;
86 case "unzuordbar" : suche="unzuordbar"; break;
87 default : write("Fehler: Ungueltiger Waffentyp. "
88 +"Folgende Typen gibt es:\n"+nf_str1+nf_str2);
89 return 1; break;
90 }
91 obs=all_inventory();
92 suchobs=([]);
93 for(i=0;i<sizeof(obs);i++)
94 {
95 obshort=to_string(obs[i]->QueryProp(P_SHORT));
96 if(obshort=="Ein Bumerang@@fliegt@@")
97 obshort="Ein Bumerang";
98 else if(obshort=="Nichts besonderes" || obshort=="0") // keine P_SHORT ?
99 obshort=obs[i]->Name(WER); // Hoffen wir mal dass das Obj. nen Namen hat.
100 if(obs[i]->QueryProp(P_WEAPON_TYPE)==suche || // Gesuchter WeaponType gefunden...
101 (!obs[i]->QueryProp(P_WEAPON_TYPE) && suche=="unzuordbar") )
102 {
103 if(suchobs[obshort]) // P_SHORT des Obj. schon im mapping?
104 {
105 if( obs[i]->QueryProp(P_AMOUNT) )
106 suchobs[obshort]+=obs[i]->QueryProp(P_AMOUNT); // Dann den Zaehler um Amount hoch!
107 else
108 suchobs[obshort]+=1; // Dann den Zaehler um 1 hoch!
109 }
110 else
111 {
112 if( obs[i]->QueryProp(P_AMOUNT) )
113 suchobs+=([obshort: obs[i]->QueryProp(P_AMOUNT)]);
114 else
115 suchobs+=([obshort: 1]);
116 }
117 }
118 }
119 strs=m_indices(suchobs);
120 if(sizeof(strs))
121 {
122 if(!alles)
123 {
124 if(suche=="unzuordbar")
125 strall+=Name(WER,1)+" enthaelt folgende nicht zuordbare Waffen:\n";
126 else
127 strall+=Name(WER,1)+" enthaelt folgende "+CAP(was)+":\n";
128 strall+="------------------------------------------------------------\n";
129 }
130 else
131 {
132 if(suche=="unzuordbar")
133 strall+=ANSI_BOLD+"=== Nicht zuordbare Waffen:\n"+ANSI_NORMAL;
134 else
135 strall+=ANSI_BOLD+"=== "+CAP(was)+":\n"+ANSI_NORMAL;
136 }
137 for(i=0;i<sizeof(strs);i++)
138 {
139 if(suchobs[strs[i]] > 1)
140 strall+=strs[i]+". ("+suchobs[strs[i]]+")\n";
141 else
142 strall+=strs[i]+".\n";
143 }
144 }
145 else
146 if(!alles)
147 strall+=Name(WER,1)+" enthaelt keine "+CAP(was)+"!\n";
148 return 1;
149}
150
151int auflistung(string str)
152{
153 string *strs, ob_id, was, nf_str1,nf_str2;
154 strall="";
155 nf_str1=" (Schwerter, Speere, Aexte, Keulen, Kampfstaebe, Messer, Peitschen,\n"
156 +" Fernwaffen, Munition, Sonstiges, Unzuordbar)\n";
157 nf_str2="Syntax: sliste [Objekt-Id] [Waffentyp]\n"
158 +"Bsp.: sliste "+QueryProp(P_IDS)[1]+" "+"schwerter\n"
159 +" sliste "+QueryProp(P_IDS)[1]+" alles\n";
160 notify_fail("Fehler: Ohne Parameter klappt das nicht.\n"+nf_str2);
161 if(!str) return 0;
162 if(present(str)==TO) // Ueberpruefe, ob dieses Objekt gemeint ist!
163 {
164 write("Fehler: Es fehlt ein Waffentyp. Folgende Typen gibt es:\n"
165 +nf_str1+nf_str2);
166 return 1;
167 }
168 strs=old_explode(str, " ");
169 notify_fail("Fehler: Du musst eine gueltige Objekt-Id angeben!\n"
170 +nf_str2);
171 if( sizeof(strs) < 2 ) return 0; // Nur 1 Par. und der ist nicht die Objekt-Id
172 if( sizeof(strs) == 2 ) // Anzahl Par. = 2
173 {
174 ob_id=strs[0];
175 was=strs[1];
176 if( IST_ZAHL(was) ) // Objekt-Id z.B. mit "schrank 2" angesprochen?
177 if(present(ob_id+" "+was)==TO) // Falls dieses Objekt gemeint ist und kein 3. Par!
178 {
179 write("Fehler: Es fehlt ein Waffentyp. Folgende Typen gibt es:\n"
180 +nf_str1+nf_str2);
181 return 1;
182 }
183 else
184 return 0;
185 }
186 else if( sizeof(strs) == 3 )
187 {
188 ob_id=strs[0]+" "+strs[1];
189 was=strs[2];
190 }
191 else // Anzahl erforderlicher Parameter ueberschritten!
192 return 0;
193 if(present(ob_id)!=TO) // Ueberpruefe, ob auch dieses Objekt gemeint ist!
194 return 0;
195 if(QueryProp(P_CNT_STATUS)!=CNT_STATUS_OPEN)
196 {
197 write("Dazu muesste "+name(WER,1)+" geoeffnet sein.\n");
198 return 1;
199 }
200//--- Hier ist Parameterpruefung zu Ende.
201 was=LOWER(was);
202 if(was!="alles")
203 auflistung2(was, nf_str1, nf_str2, 0);
204 else
205 {
206 auflistung2("aexte", nf_str1, nf_str2, 1);
207 auflistung2("keulen", nf_str1, nf_str2, 1);
208 auflistung2("kampfstaebe", nf_str1, nf_str2, 1);
209 auflistung2("messer", nf_str1, nf_str2, 1);
210 auflistung2("speere", nf_str1, nf_str2, 1);
211 auflistung2("schwerter", nf_str1, nf_str2, 1);
212 auflistung2("peitschen", nf_str1, nf_str2, 1);
213 auflistung2("fernwaffen", nf_str1, nf_str2, 1);
214 auflistung2("munition", nf_str1, nf_str2, 1);
215 auflistung2("sonstiges", nf_str1, nf_str2, 1);
216 auflistung2("unzuordbar", nf_str1, nf_str2, 1);
217 }
218 TP->More(strall);
219 return 1;
220}