blob: e8d0f8355572e166e74384f54eada13f2995459a [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// thing/restrictions.c -- Gewicht u.ae. eines Objekts
4//
5// $Id: restrictions.c 6809 2008-03-29 21:54:04Z Zesstra $
6
7#pragma strict_types
8#pragma save_types
9#pragma range_check
10#pragma no_clone
11#pragma pedantic
12
13#include <defines.h>
14#include <properties.h>
15
16#define NEED_PROTOTYPES
17#include <thing/properties.h>
18
19// Gewicht ist 1kg, wenn nicht anders bestimmt
20protected void create()
21{
22 SetProp(P_WEIGHT, 1000);
23}
24
25protected void create_super() {
26 set_next_reset(-1);
27}
28
29// P_TOTAL_WEIGHT bei Nicht-Containern auf P_WEIGHT umleiten
30static int _set_weight(int weight) {
31 return SetProp(P_TOTAL_WEIGHT,
32 Set(P_WEIGHT, weight, F_VALUE) );
33}
34
35// P_X_ATTR_MOD aendern (Attributaenderungen durch Ausruestung)
36static mapping _set_extern_attributes_modifier(mapping xmod)
37{
38 mapping res;
39
40 // wenn Muell oder ein leeres Mapping uebergeben wurde, wird die prop
41 // geloescht und ggf. das Objekt im Living abgemeldet.
42 if (!mappingp(xmod)) xmod=([]);
43
44 if (!sizeof(xmod)) {
45
46 res=Set(P_X_ATTR_MOD, xmod);
47
48 // wenn Prop geloescht wird, kann man das Item auch aus der Liste der
49 // Statmodifizierer des Lebewesens austragen.
50 if (living(environment())) {
51 environment()->deregister_modifier(ME);
52 environment()->UpdateAttributes();
53 }
54 }
55 else {
56 // ok, Prop wird auf nen interessanten Wert gesetzt. ;-)
57
58 // Damit Insert/RemoveSensitiveObject beim Move aufgerufen wird,
59 // muss P_SENSITIVE gesetzt sein
60 if (!QueryProp(P_SENSITIVE)) SetProp(P_SENSITIVE,({}));
61
62 if (living(environment()) &&
63 (!mappingp(res=QueryProp(P_X_ATTR_MOD)) || !sizeof(res))) {
64 // Wenn dieses Objekt in einem Living ist und bisher die prop nicht
65 // gesetzt war, muss sich das Objekt noch im Living als Statmodifizierer
66 // registrieren.
67 res=Set(P_X_ATTR_MOD, xmod);
68 environment()->register_modifier(ME);
69 environment()->UpdateAttributes(ME);
70 }
71 else if (living(environment())){
72 // sonst reicht ein einfaches UpdateAttributes() um das Lebewesen zu
73 // informieren.
74 res=Set(P_X_ATTR_MOD, xmod);
75 environment()->UpdateAttributes();
76 }
77 else {
78 // wenn kein lebendes Env, reicht einfaches Setzen.
79 res=Set(P_X_ATTR_MOD,xmod);
80 }
81 }
82
83 return res;
84}
85
86// P_X_HEALTH_MOD aendern (LP/KP-Aenderung durch Ausruestung)
87static mapping _set_extern_health_modifier(mapping xmod) {
88 mapping res;
89
90 // wenn Muell oder ein leeres Mapping uebergeben wurde, wird die prop
91 // geloescht und ggf. das Objekt im Living abgemeldet.
92 if (!mappingp(xmod)) xmod=([]);
93
94 if (!sizeof(xmod)) {
95
96 res=Set(P_X_HEALTH_MOD, xmod);
97
98 // wenn Prop geloescht wird, kann man das Item auch aus der Liste der
99 // Statmodifizierer des Lebewesens austragen.
100 if (living(environment())) {
101 environment()->deregister_modifier(ME);
102 environment()->UpdateAttributes();
103 }
104 }
105 else {
106 // ok, Prop wird auf nen interessanten Wert gesetzt. ;-)
107
108 // Damit Insert/RemoveSensitiveObject beim Move aufgerufen wird,
109 // muss P_SENSITIVE gesetzt sein
110 if (!QueryProp(P_SENSITIVE)) SetProp(P_SENSITIVE,({}));
111
112 if (living(environment()) &&
113 (!mappingp(res=QueryProp(P_X_HEALTH_MOD)) || !sizeof(res))) {
114 // Wenn dieses Objekt in einem Living ist und bisher die prop nicht
115 // gesetzt war, muss sich das Objekt noch im Living als Statmodifizierer
116 // registrieren.
117 res=Set(P_X_HEALTH_MOD, xmod);
118 environment()->register_modifier(ME);
119 environment()->UpdateAttributes(ME);
120 }
121 else if (living(environment())){
122 // sonst reicht ein einfaches UpdateAttributes() um das Lebewesen zu
123 // informieren.
124 res=Set(P_X_HEALTH_MOD, xmod);
125 environment()->UpdateAttributes();
126 }
127 else {
128 // wenn kein lebendes Env, reicht einfaches Setzen.
129 res=Set(P_X_HEALTH_MOD,xmod);
130 }
131 }
132
133 return res;
134
135}
136
137// P_X/M_ATTR_MOD werden nicht beruecksichtigt, da CUMULATIVE_ATTR_LIMIT
138// ueberschritten ist
139void NotifyXMAttrModLimitViolation()
140{
141}
142