public static void SV_New_f( ) { String gamedir; Int32 playernum; edict_t ent; Com.DPrintf("New() from " + SV_MAIN.sv_client.name + "\\n"); if (SV_MAIN.sv_client.state != Defines.cs_connected) { Com.Printf("New not valid -- already spawned\\n"); return; } if (SV_INIT.sv.state == Defines.ss_demo) { SV_BeginDemoserver(); return; } gamedir = Cvar.VariableString("gamedir"); MSG.WriteByte(SV_MAIN.sv_client.netchan.message, Defines.svc_serverdata); MSG.WriteInt(SV_MAIN.sv_client.netchan.message, Defines.PROTOCOL_VERSION); MSG.WriteLong(SV_MAIN.sv_client.netchan.message, SV_INIT.svs.spawncount); MSG.WriteByte(SV_MAIN.sv_client.netchan.message, SV_INIT.sv.attractloop ? 1 : 0); MSG.WriteString(SV_MAIN.sv_client.netchan.message, gamedir); if (SV_INIT.sv.state == Defines.ss_cinematic || SV_INIT.sv.state == Defines.ss_pic) { playernum = -1; } else { playernum = SV_MAIN.sv_client.serverindex; } MSG.WriteShort(SV_MAIN.sv_client.netchan.message, playernum); MSG.WriteString(SV_MAIN.sv_client.netchan.message, SV_INIT.sv.configstrings[Defines.CS_NAME]); if (SV_INIT.sv.state == Defines.ss_game) { ent = GameBase.g_edicts[playernum + 1]; ent.s.number = playernum + 1; SV_MAIN.sv_client.edict = ent; SV_MAIN.sv_client.lastcmd = new usercmd_t(); MSG.WriteByte(SV_MAIN.sv_client.netchan.message, Defines.svc_stufftext); MSG.WriteString(SV_MAIN.sv_client.netchan.message, "cmd configstrings " + SV_INIT.svs.spawncount + " 0\\n"); } }