blob: 680f58657ea2bc717c7c566038215e12026c8065 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001#pragma strong_types,save_types
2
3#include <properties.h>
4
5object caster;
Arathorn7bc6d0f2021-02-28 14:52:59 +01006string*ids;
7string|string* name;
MG Mud User88f12472016-06-24 23:31:02 +02008int gender,article,plural;
9string lgdesc;
10string min,mout,mmin,mmout;
11mixed hands;
12
13void Initialize(object _caster,
14 string*_ids,
Arathorn7bc6d0f2021-02-28 14:52:59 +010015 string|string* _name,
MG Mud User88f12472016-06-24 23:31:02 +020016 int _gender,
17 int _article,
18 int _plural)
19{ if(!objectp(_caster) ||
20 !interactive(_caster)||
21 !stringp(_name) ||
22 _name=="" ||
23 _gender<0 ||
24 _gender>2)
25 { destruct(this_object());
26 return;
27 }
28 caster=_caster;
29 ids=_ids;
30 name=_name;
31 gender=_gender;
32 article=_article;
33 plural=_plural;
34 lgdesc=0;
35 shadow(caster,1);
36}
37
38void SetLongDesc(string txt)
39{ if(!stringp(txt)||txt=="")
40 return;
41 lgdesc=txt;
42}
43
44string* _query_ids()
45{ return caster->Query(P_IDS)+ids;
46}
47
48// nicht alle Verben mit veraendertem Aussehen
49int special_verb()
50{ string verb;
51 verb=query_verb();
52 if(!stringp(verb)||verb=="")
53 return 0;
54 if(verb[0]=='-')
55 return 1;
56 if(member(({"ruf","rufe","mruf","mrufe",
57 "teil","teile","erzaehl","erzaehle"}),verb)!=-1)
58 return 1;
59 return 0;
60}
61
62string _query_name()
63{ if(!special_verb())
64 return name;
65 return capitalize(caster->Query(P_NAME));
66}
67
68string _query_short()
69{ if(!special_verb())
70 return caster->Name();
71 return caster->Query(P_SHORT);
72}
73
74string _query_long()
75{ if(!special_verb())
76 { string str;
77 if(lgdesc)
78 return lgdesc;
79 str=caster->name();
80 return break_string(capitalize(str)+" ist "+str+" ist "+str+".",78);
81 }
82 return caster->Query(P_LONG);
83}
84
85int _query_gender()
86{ if(!special_verb())
87 return gender;
88 return caster->Query(P_GENDER);
89}
90
91int _query_article()
92{ if(!special_verb())
93 return article;
Arathorn80713762021-03-16 21:06:32 +010094 return !caster->Query(P_ARTICLE);
MG Mud User88f12472016-06-24 23:31:02 +020095}
96
97int _query_plural()
98{ if(!special_verb())
99 return plural;
100 return caster->Query(P_PLURAL);
101}
102
103string _query_race()
104{ if(!special_verb())
105 return name;
106 return caster->Query(P_RACE);
107}
108
109varargs int remove(int silent) {
110 unshadow();
111 destruct(this_object());
112 return 1;
113}
114
115void stop_shadow()
116{
117 remove();
118}
119
120string _query_presay()
121{ return"";
122}
123
124string _query_title()
125{ return"";
126}
127
128string _set_msgin(string val)
129{ return min=val;
130}
131
132string _query_msgin()
133{ return min;
134}
135
136string _set_msgout(string val)
137{ return mout=val;
138}
139
140string _query_msgout()
141{ return mout;
142}
143
144string _set_mmsgin(string val)
145{ return mmin=val;
146}
147
148string _query_mmsgin()
149{ return mmin;
150}
151
152string _set_mmsgout(string val)
153{ return mmout=val;
154}
155
156string _query_mmsgout()
157{ return mmout;
158}
159
160mixed _set_hands(mixed val)
161{ return hands=val;
162}
163
164mixed _query_hands()
165{ return hands;
166}
167
168varargs int Defend(int dam,mixed dam_type,mixed spell,object enemy)
169{ object ob;
170 if(!enemy || // Silvana 26.1.2002
171 (!query_once_interactive(previous_object())&&
172 !query_once_interactive(enemy)))
173 return caster->Defend(dam,dam_type,spell,enemy);
174 else
175 { enemy->StopHuntFor(caster);
176 caster->StopHuntFor(enemy);
177 }
178 if(objectp(ob=present("zauberer\nshadow",caster)))
179 ob->remove();
180 if(this_object())
181 remove();
182 return 0;
183}
184
185int Kill(object enemy)
186{ object ob;
187 if(!query_once_interactive(enemy))
188 return caster->Kill(enemy);
189 if(objectp(ob=present("zauberer\nshadow",caster)))
190 ob->remove();
191 if(this_object())
192 remove();
193 return 0;
194}
195
196int InsertEnemy(object enemy)
197{ object ob;
198 if(!query_once_interactive(enemy))
199 return caster->InsertEnemy(enemy);
200 else {
201 enemy->StopHuntFor(caster);
202 caster->StopHuntFor(enemy);
203 }
204 if(objectp(ob=present("zauberer\nshadow",caster)))
205 ob->remove();
206 if(this_object())
207 remove();
208 return 0;
209}
210
211string short()
212{ if(load_name(previous_object()) == "/obj/werliste")
213 return capitalize(geteuid(caster))+" verkleidet als "+caster->short();
214 return caster->short();
215}
216
217varargs string long()
218{ if(lgdesc)
219 return lgdesc;
220 return caster->long();
221}