Esempio n. 1
0
        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");
            }
        }