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