Esempio n. 1
0
    public GameClient()
    {
        playerState = new PlayerState();
        pers        = new GameClientPersistant();
        sess        = new GameClientSession();
        history     = new ClientHistory[CConstVar.NUM_CLIENT_HISTORY];
        for (int i = 0; i < CConstVar.NUM_CLIENT_HISTORY; i++)
        {
            history[i] = new ClientHistory();
        }
        saved = new ClientHistory();

        agent = new BaseEntity();
        // agent.Init();
    }
Esempio n. 2
0
    private void ClientSpawn(GameEntity ent)
    {
        int     index = System.Array.IndexOf(gEntities, ent);
        var     cl    = ent.client;
        Vector3 spawnPoint;
        Vector3 spawnOrigin = Vector3.zero;
        Vector3 spawnAngles = Vector3.zero;

        cl.sess.spectatorState = SpectatorState.NOT;
        cl.playerState.pmType  = PMoveType.NORMAL;

        if (cl.sess.sessionTeam == TeamType.TEAM_SPECTATOR || cl.playerState.pmType == PMoveType.SPECTATOR)
        {
            // spawnPoint = SelectSpectatorSpawnPoint();
            spawnPoint = map.SpectatorSpawnPoint(spawnOrigin, spawnAngles);
        }
        else
        {
            if ((ent.sEnt.r.svFlags & SVFlags.BOT) != SVFlags.NONE)
            {
            }
            if (!cl.pers.initialSpawn && cl.pers.localClient)
            {
                cl.pers.initialSpawn = true;
                // spawnPoint = SelectInitialSpawnPoint(spawnOrigin, spawnAngles);
                spawnPoint = map.InitialSpawnPoint(spawnOrigin, spawnAngles);
            }
            else
            {
                // spawnPoint = SelectSpawnPoint(cl.playerState.origin, spawnOrigin, spawnAngles);
                spawnPoint = map.SpawnPoint(spawnOrigin, spawnAngles);
            }
        }

        // ent.sEnt.s.entityFlags &= ~
        int flags = ent.client.playerState.entityFlags & (EntityFlags.TELEPORT_BIT | EntityFlags.VOTED);

        flags ^= EntityFlags.TELEPORT_BIT;

        ResetHistory(ent);
        ent.client.saved.time = 0;

        GameClientPersistant saved     = cl.pers;
        GameClientSession    savedSess = cl.sess;
        int savedPing = cl.playerState.ping;
        int vote      = cl.vote;

        cl.lastkilled_client = -1;
        // cl.playerState.persistant
        cl.playerState.persistant[CConstVar.PERS_SPAWN_COUNT]++;
        cl.playerState.persistant[CConstVar.PERS_TEAM] = (int)cl.sess.sessionTeam;

        var userinfo = Server.Instance.GetUserInfo(index);
        var hp       = CUtils.GetValueForKey(userinfo, "handicap");

        if (!string.IsNullOrEmpty(hp))
        {
            cl.pers.maxHealth = System.Convert.ToInt32(hp);
        }
        else
        {
            cl.pers.maxHealth = 100;
        }

        cl.playerState.states[CConstVar.STAT_MAX_HEALTH] = cl.pers.maxHealth;
        cl.playerState.states[CConstVar.STAT_HEALTH]     = cl.pers.maxHealth;
        cl.playerState.entityFlags = flags;

        ent.client          = clients[index];
        ent.inuse           = true;
        ent.classname       = "player";
        ent.sEnt.r.contents = CConstVar.CONTENTS_BODY;

        ent.flags = 0;
        cl.playerState.clientIndex = index;

        cl.playerState.origin = spawnOrigin;

        cl.playerState.pmFlags |= PMoveFlags.RESPAWNED;
        Server.Instance.LinkEntity(ent);
        cl.playerState.pmFlags |= PMoveFlags.TIME_KOCKBACK;
        cl.playerState.pmTime   = 100;
        cl.respawnTime          = time;
        cl.inactivityTime       = time + 100000000;
        cl.latched_buttons      = 0;

        if (ent.client.sess.sessionTeam != TeamType.TEAM_SPECTATOR)
        {
            // UseTargets(ent, spawnPoint);
            ent.SetPosition(spawnPoint);
        }

        cl.playerState.commandTime     = time - 100;
        ent.client.pers.cmd.serverTime = time;
        ClientThink(index);

        if (ent.client.sess.spectatorState != SpectatorState.FOLLOW)
        {
            ClientEndFrame(ent);
        }

        CUtils.PlayerStateToEntityState(cl.playerState, ref ent.sEnt.s, true);
    }