blob: aa11d990288c8537e7d8d7a96b8e0c55069d42ad [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// living/clothing.c -- Modul fuer Bekleidungsfragen. ;-)
4//
5// $Id: armour.c,v 3.8 2003/08/25 09:36:04 Rikus Exp $
6#pragma strong_types
7#pragma save_types
8#pragma range_check
9#pragma no_clone
MG Mud User88f12472016-06-24 23:31:02 +020010
11#define NEED_PROTOTYPES
12#include <thing/properties.h>
13#undef NEED_PROTOTYPES
14#include <living/clothing.h>
15#include <living/combat.h>
16#include <armour.h>
17
18protected void create() {
19 SetProp(P_CLOTHING, ({}));
20 Set(P_CLOTHING, PROTECTED, F_MODE_AS);
21}
22
23public object *FilterClothing(closure filterfun, varargs mixed* extra) {
24 if (!closurep(filterfun))
25 return ({});
26 return apply(#'filter, QueryProp(P_CLOTHING), filterfun, extra);
27}
28
29public object *FilterArmours(closure filterfun, varargs mixed* extra) {
30 if (!closurep(filterfun))
31 return ({});
32 return apply(#'filter, QueryProp(P_ARMOURS)-({0}), filterfun, extra);
33}
34
35public int WearClothing(object ob) {
36 object *clothing = QueryProp(P_CLOTHING);
37 if (member(clothing, ob) != -1)
38 return 0;
39 clothing += ({ob});
40 SetProp(P_CLOTHING, clothing);
41 return 1;
42}
43
44public int WearArmour(object ob) {
45 if (!VALID_ARMOUR_TYPE(ob->QueryProp(P_ARMOUR_TYPE)))
46 return 0;
47
48 object *armours = QueryProp(P_ARMOURS);
49 if (member(armours, ob) != -1)
50 return 0;
51
52 armours += ({ob});
53 SetProp(P_ARMOURS, armours);
54 return 1;
55}
56
57public int Wear(object ob) {
58 // reihenfolge ist wichtig! Ruestung sind _auch_ Kleidung, aber Kleidung
59 // keine Ruestung.
60 if (ob->IsArmour())
61 return WearArmour(ob);
62 else if (ob->IsClothing())
63 return WearClothing(ob);
64 return 0;
65}
66
67public int UnwearClothing(object ob) {
68object *clothing = QueryProp(P_CLOTHING);
69 if (member(clothing, ob) == -1)
70 return 0;
71 clothing -= ({ob});
72 SetProp(P_CLOTHING, clothing);
73 return 1;
74}
75
76public int UnwearArmour(object ob) {
77 object *armours = QueryProp(P_ARMOURS);
78 if (member(armours, ob) == -1)
79 return 0;
80
81 armours -= ({ob});
82 SetProp(P_ARMOURS, armours);
83 return 1;
84}
85
86public int Unwear(object ob) {
87 // reihenfolge ist wichtig! Ruestung sind _auch_ Kleidung, aber Kleidung
88 // keine Ruestung.
89 if (ob->IsArmour())
90 return UnwearArmour(ob);
91 else if (ob->IsClothing())
92 return UnwearClothing(ob);
93 return 0;
94}
95