]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/common/triggers/trigger/secret.qc
Propagate this
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / triggers / trigger / secret.qc
1 #if defined(CSQC)
2 #elif defined(MENUQC)
3 #elif defined(SVQC)
4     #include <common/util.qh>
5     #include <server/defs.qh>
6     #include "secret.qh"
7 #endif
8
9 #ifdef SVQC
10
11 void secrets_setstatus()
12 {SELFPARAM();
13         this.stat_secrets_total = secrets_total;
14         this.stat_secrets_found = secrets_found;
15 }
16
17 /**
18  * A secret has been found (maybe :P)
19  */
20 void trigger_secret_touch()
21 {SELFPARAM();
22         // only a player can trigger this
23         if (!IS_PLAYER(other))
24                 return;
25
26         // update secrets found counter
27         secrets_found += 1;
28         //print("Secret found: ", ftos(secret_counter.cnt), "/");
29         //print(ftos(secret_counter.count), "\n");
30
31         // centerprint message (multi_touch() doesn't always call centerprint())
32         centerprint(other, self.message);
33         self.message = "";
34
35         // handle normal trigger features
36         multi_touch();
37         remove(self);
38 }
39
40 /*QUAKED trigger_secret (.5 .5 .5) ?
41 Variable sized secret trigger. Can be targeted at one or more entities.
42 Basically, it's a trigger_once (with restrictions, see notes) that additionally updates the number of secrets found.
43 -------- KEYS --------
44 sounds: 1 to play misc/secret.wav, 2 to play misc/talk.wav, 3 to play misc/trigger1.wav (default: 1)
45 noise: path to sound file, if you want to play something else
46 target: trigger all entities with this targetname when triggered
47 message: print this message to the player who activated the trigger instead of the standard 'You found a secret!'
48 killtarget: remove all entities with this targetname when triggered
49 -------- NOTES --------
50 You should create a common/trigger textured brush covering the entrance to a secret room/area.
51 Trigger secret can only be trigger by a player's touch and can not be a target itself.
52 */
53 spawnfunc(trigger_secret)
54 {
55         // FIXME: should it be disabled in most modes?
56
57         // update secrets count
58         secrets_total += 1;
59
60         // add default message
61         if (self.message == "")
62                 self.message = "You found a secret!";
63
64         // set default sound
65         if (self.noise == "")
66         if (!self.sounds)
67                 self.sounds = 1; // misc/secret.wav
68
69         // this entity can't be a target itself!!!!
70         self.targetname = "";
71
72         // you can't just shoot a room to find it, can you?
73         self.health = 0;
74
75         // a secret can not be delayed
76         self.delay = 0;
77
78         // convert this trigger to trigger_once
79         self.classname = "trigger_once";
80         spawnfunc_trigger_once(this);
81
82         // take over the touch() function, so we can mark secret as found
83         self.touch = trigger_secret_touch;
84         // ignore triggering;
85         self.use = func_null;
86 }
87 #endif