コード例 #1
0
ファイル: GameTarget.cs プロジェクト: optimus-code/Q2Sharp
            public override void Use(edict_t self, edict_t other, edict_t activator)
            {
                if (GameBase.level.intermissiontime != 0)
                {
                    return;
                }
                if (0 == GameBase.deathmatch.value && 0 == GameBase.coop.value)
                {
                    if (GameBase.g_edicts[1].health <= 0)
                    {
                        return;
                    }
                }

                if (GameBase.deathmatch.value != 0 && 0 == (( Int32 )GameBase.dmflags.value & Defines.DF_ALLOW_EXIT) && other != GameBase.g_edicts[0])
                {
                    GameCombat.T_Damage(other, self, self, Globals.vec3_origin, other.s.origin, Globals.vec3_origin, 10 * other.max_health, 1000, 0, Defines.MOD_EXIT);
                    return;
                }

                if (GameBase.deathmatch.value != 0)
                {
                    if (activator != null && activator.client != null)
                    {
                        GameBase.gi.Bprintf(Defines.PRINT_HIGH, activator.client.pers.netname + " exited the level.\\n");
                    }
                }

                if (self.map.IndexOf('*') > -1)
                {
                    GameBase.game.serverflags &= ~(Defines.SFL_CROSS_TRIGGER_MASK);
                }
                PlayerHud.BeginIntermission(self);
            }
コード例 #2
0
ファイル: Cmd.cs プロジェクト: optimus-code/Q2Sharp
        public static void Score_f(edict_t ent)
        {
            ent.client.showinventory = false;
            ent.client.showhelp      = false;
            if (0 == GameBase.deathmatch.value && 0 == GameBase.coop.value)
            {
                return;
            }
            if (ent.client.showscores)
            {
                ent.client.showscores = false;
                return;
            }

            ent.client.showscores = true;
            PlayerHud.DeathmatchScoreboard(ent);
        }
コード例 #3
0
ファイル: Cmd.cs プロジェクト: optimus-code/Q2Sharp
        public static void Help_f(edict_t ent)
        {
            if (GameBase.deathmatch.value != 0)
            {
                Score_f(ent);
                return;
            }

            ent.client.showinventory = false;
            ent.client.showscores    = false;
            if (ent.client.showhelp && (ent.client.pers.game_helpchanged == GameBase.game.helpchanged))
            {
                ent.client.showhelp = false;
                return;
            }

            ent.client.showhelp         = true;
            ent.client.pers.helpchanged = 0;
            PlayerHud.HelpComputer(ent);
        }
コード例 #4
0
ファイル: GameBase.cs プロジェクト: optimus-code/Q2Sharp
        public static void EndDMLevel()
        {
            edict_t ent;
            string  s, t, f;
            string  seps = " ,\\n\\r";

            if (((int)dmflags.value & Defines.DF_SAME_LEVEL) != 0)
            {
                PlayerHud.BeginIntermission(CreateTargetChangeLevel(level.mapname));
                return;
            }

            if (sv_maplist.string_renamed.Length > 0)
            {
                s = sv_maplist.string_renamed;
                f = null;
                StringTokenizer tk = new StringTokenizer(s, seps);
                while (tk.RemainingTokens > 0)
                {
                    tk.MoveNext();
                    t = tk.Current;
                    if (f == null)
                    {
                        f = t;
                    }
                    if (t.EqualsIgnoreCase(level.mapname))
                    {
                        if (tk.RemainingTokens == 0)
                        {
                            if (f == null)
                            {
                                PlayerHud.BeginIntermission(CreateTargetChangeLevel(level.mapname));
                            }
                            else
                            {
                                PlayerHud.BeginIntermission(CreateTargetChangeLevel(f));
                            }
                        }
                        else
                        {
                            tk.MoveNext();
                            PlayerHud.BeginIntermission(CreateTargetChangeLevel(tk.Current));
                        }
                        return;
                    }
                }
            }

            if (level.nextmap.Length > 0)
            {
                PlayerHud.BeginIntermission(CreateTargetChangeLevel(level.nextmap));
            }
            else
            {
                EdictIterator edit = null;
                edit = G_Find(edit, findByClass, "target_changelevel");
                if (edit == null)
                {
                    PlayerHud.BeginIntermission(CreateTargetChangeLevel(level.mapname));
                    return;
                }

                ent = edit.o;
                PlayerHud.BeginIntermission(ent);
            }
        }
コード例 #5
0
        public static void ClientEndServerFrame(edict_t ent)
        {
            float bobtime;
            int   i;

            current_player = ent;
            current_client = ent.client;
            for (i = 0; i < 3; i++)
            {
                current_client.ps.pmove.origin[i]   = (short)(ent.s.origin[i] * 8);
                current_client.ps.pmove.velocity[i] = (short)(ent.velocity[i] * 8);
            }

            if (GameBase.level.intermissiontime != 0)
            {
                current_client.ps.blend[3] = 0;
                current_client.ps.fov      = 90;
                PlayerHud.G_SetStats(ent);
                return;
            }

            Math3D.AngleVectors(ent.client.v_angle, forward, right, up);
            P_WorldEffects();
            if (ent.client.v_angle[Defines.PITCH] > 180)
            {
                ent.s.angles[Defines.PITCH] = (-360 + ent.client.v_angle[Defines.PITCH]) / 3;
            }
            else
            {
                ent.s.angles[Defines.PITCH] = ent.client.v_angle[Defines.PITCH] / 3;
            }
            ent.s.angles[Defines.YAW]  = ent.client.v_angle[Defines.YAW];
            ent.s.angles[Defines.ROLL] = 0;
            ent.s.angles[Defines.ROLL] = SV_CalcRoll(ent.s.angles, ent.velocity) * 4;
            xyspeed = (float)Math.Sqrt(ent.velocity[0] * ent.velocity[0] + ent.velocity[1] * ent.velocity[1]);
            if (xyspeed < 5)
            {
                bobmove = 0;
                current_client.bobtime = 0;
            }
            else if (ent.groundentity != null)
            {
                if (xyspeed > 210)
                {
                    bobmove = 0.25F;
                }
                else if (xyspeed > 100)
                {
                    bobmove = 0.125F;
                }
                else
                {
                    bobmove = 0.0625F;
                }
            }

            bobtime = (current_client.bobtime += bobmove);
            if ((current_client.ps.pmove.pm_flags & pmove_t.PMF_DUCKED) != 0)
            {
                bobtime *= 4;
            }
            bobcycle   = (int)bobtime;
            bobfracsin = (float)Math.Abs(Math.Sin(bobtime * Math.PI));
            P_FallingDamage(ent);
            P_DamageFeedback(ent);
            SV_CalcViewOffset(ent);
            SV_CalcGunOffset(ent);
            SV_CalcBlend(ent);
            if (ent.client.resp.spectator)
            {
                PlayerHud.G_SetSpectatorStats(ent);
            }
            else
            {
                PlayerHud.G_SetStats(ent);
            }
            PlayerHud.G_CheckChaseStats(ent);
            G_SetClientEvent(ent);
            G_SetClientEffects(ent);
            G_SetClientSound(ent);
            G_SetClientFrame(ent);
            Math3D.VectorCopy(ent.velocity, ent.client.oldvelocity);
            Math3D.VectorCopy(ent.client.ps.viewangles, ent.client.oldviewangles);
            Math3D.VectorClear(ent.client.kick_origin);
            Math3D.VectorClear(ent.client.kick_angles);
            if (ent.client.showscores && 0 == (GameBase.level.framenum & 31))
            {
                PlayerHud.DeathmatchScoreboardMessage(ent, ent.enemy);
                GameBase.gi.Unicast(ent, false);
            }
        }