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(); }
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); }