Пример #1
0
        public static void FoundTarget(edict_t self)
        {
            if (self.enemy.client != null)
            {
                GameBase.level.sight_entity             = self;
                GameBase.level.sight_entity_framenum    = GameBase.level.framenum;
                GameBase.level.sight_entity.light_level = 128;
            }

            self.show_hostile = (int)GameBase.level.time + 1;
            Math3D.VectorCopy(self.enemy.s.origin, self.monsterinfo.last_sighting);
            self.monsterinfo.trail_time = GameBase.level.time;
            if (self.combattarget == null)
            {
                GameAI.HuntTarget(self);
                return;
            }

            self.goalentity = self.movetarget = GameBase.G_PickTarget(self.combattarget);
            if (self.movetarget == null)
            {
                self.goalentity = self.movetarget = self.enemy;
                GameAI.HuntTarget(self);
                GameBase.gi.Dprintf("" + self.classname + "at " + Lib.Vtos(self.s.origin) + ", combattarget " + self.combattarget + " not found\\n");
                return;
            }

            self.combattarget          = null;
            self.monsterinfo.aiflags  |= Defines.AI_COMBAT_POINT;
            self.movetarget.targetname = null;
            self.monsterinfo.pausetime = 0;
            self.monsterinfo.run.Think(self);
        }
Пример #2
0
        public static void G_RunFrame()
        {
            int     i;
            edict_t ent;

            level.framenum++;
            level.time = level.framenum * Defines.FRAMETIME;
            GameAI.AI_SetSightClient();
            if (level.exitintermission)
            {
                ExitLevel();
                return;
            }

            for (i = 0; i < num_edicts; i++)
            {
                ent = g_edicts[i];
                if (!ent.inuse)
                {
                    continue;
                }
                level.current_entity = ent;
                Math3D.VectorCopy(ent.s.origin, ent.s.old_origin);
                if ((ent.groundentity != null) && (ent.groundentity.linkcount != ent.groundentity_linkcount))
                {
                    ent.groundentity = null;
                    if (0 == (ent.flags & (Defines.FL_SWIM | Defines.FL_FLY)) && (ent.svflags & Defines.SVF_MONSTER) != 0)
                    {
                        M.M_CheckGround(ent);
                    }
                }

                if (i > 0 && i <= maxclients.value)
                {
                    PlayerClient.ClientBeginServerFrame(ent);
                    continue;
                }

                G_RunEntity(ent);
            }

            CheckDMRules();
            CheckNeedPass();
            ClientEndServerFrames();
        }