Esempio n. 1
0
        public void use(Entity self, Entity other, Entity activator) {
          if (self.count == 0) return;

          self.count--;

          if (self.count != 0) {
            if (0 == (self.spawnflags & 1)) {
              ServerGame.PF_centerprintf(activator, self.count + " more to go...");
              ServerGame.PF_StartSound(
                  activator,
                  Constants.CHAN_AUTO,
                  ServerInit.SV_SoundIndex("misc/talk1.wav"),
                  (float) 1,
                  (float) Constants.ATTN_NORM,
                  (float) 0);
            }
            return;
          }

          if (0 == (self.spawnflags & 1)) {
            ServerGame.PF_centerprintf(activator, "Sequence completed!");
            ServerGame.PF_StartSound(
                activator,
                Constants.CHAN_AUTO,
                ServerInit.SV_SoundIndex("misc/talk1.wav"),
                (float) 1,
                (float) Constants.ATTN_NORM,
                (float) 0);
          }
          self.activator = activator;
          multi_trigger(self);
        }
Esempio n. 2
0
        public void touch(Entity self, Entity other, Plane plane, Surface surf) {
          int dflags;

          if (other.takedamage == 0) return;

          if (self.timestamp > GameBase.level.time) return;

          if ((self.spawnflags & 16) != 0) self.timestamp = GameBase.level.time + 1;
          else self.timestamp = GameBase.level.time + Constants.FRAMETIME;

          if (0 == (self.spawnflags & 4)) {
            if ((GameBase.level.framenum % 10) == 0)
              ServerGame.PF_StartSound(
                  other,
                  Constants.CHAN_AUTO,
                  self.noise_index,
                  (float) 1,
                  (float) Constants.ATTN_NORM,
                  (float) 0);
          }

          if ((self.spawnflags & 8) != 0) dflags = Constants.DAMAGE_NO_PROTECTION;
          else dflags = 0;
          GameCombat.T_Damage(
              other,
              self,
              self,
              Globals.vec3_origin,
              other.s.origin,
              Globals.vec3_origin,
              self.dmg,
              self.dmg,
              dflags,
              Constants.MOD_TRIGGER_HURT);
        }
Esempio n. 3
0
        public void touch(Entity self, Entity other, Plane plane, Surface surf) {
          if (Lib.strcmp(other.classname, "grenade") == 0) {
            Math3D.VectorScale(self.movedir, self.speed * 10, other.velocity);
          } else if (other.health > 0) {
            Math3D.VectorScale(self.movedir, self.speed * 10, other.velocity);

            if (other.client != null) {
              // don't take falling damage immediately from this
              Math3D.VectorCopy(other.velocity, other.client.oldvelocity);
              if (other.fly_sound_debounce_time < GameBase.level.time) {
                other.fly_sound_debounce_time = GameBase.level.time + 1.5f;
                ServerGame.PF_StartSound(
                    other,
                    Constants.CHAN_AUTO,
                    windsound,
                    (float) 1,
                    (float) Constants.ATTN_NORM,
                    (float) 0);
              }
            }
          }
          if ((self.spawnflags & PUSH_ONCE) != 0) GameUtil.G_FreeEdict(self);
        }
Esempio n. 4
0
        public void use(Entity self, Entity other, Entity activator) {
          int index;

          if (self.item == null) return;
          if (activator.client == null) return;

          index = GameItems.ITEM_INDEX(self.item);
          if (activator.client.pers.inventory[index] == 0) {
            if (GameBase.level.time < self.touch_debounce_time) return;
            self.touch_debounce_time = GameBase.level.time + 5.0f;
            ServerGame.PF_centerprintf(activator, "You need the " + self.item.pickup_name);
            ServerGame.PF_StartSound(
                activator,
                Constants.CHAN_AUTO,
                ServerInit.SV_SoundIndex("misc/keytry.wav"),
                (float) 1,
                (float) Constants.ATTN_NORM,
                (float) 0);
            return;
          }

          ServerGame.PF_StartSound(
              activator,
              Constants.CHAN_AUTO,
              ServerInit.SV_SoundIndex("misc/keyuse.wav"),
              (float) 1,
              (float) Constants.ATTN_NORM,
              (float) 0);
          if (GameBase.coop.value != 0) {
            int player;
            Entity ent;

            if (Lib.strcmp(self.item.classname, "key_power_cube") == 0) {
              int cube;

              for (cube = 0; cube < 8; cube++)
                if ((activator.client.pers.power_cubes & (1 << cube)) != 0) break;
              for (player = 1; player <= GameBase.game.maxclients; player++) {
                ent = GameBase.g_edicts[player];
                if (!ent.inuse) continue;
                if (null == ent.client) continue;
                if ((ent.client.pers.power_cubes & (1 << cube)) != 0) {
                  ent.client.pers.inventory[index]--;
                  ent.client.pers.power_cubes &= ~(1 << cube);
                }
              }
            } else {
              for (player = 1; player <= GameBase.game.maxclients; player++) {
                ent = GameBase.g_edicts[player];
                if (!ent.inuse) continue;
                if (ent.client == null) continue;
                ent.client.pers.inventory[index] = 0;
              }
            }
          } else {
            activator.client.pers.inventory[index]--;
          }

          GameUtil.G_UseTargets(self, activator);

          self.use = null;
        }