⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d_netcmd.c

📁 The source code of Doom legacy for windows
💻 C
📖 第 1 页 / 共 2 页
字号:
                     | ((p->skincolor)<<MF_TRANSSHIFT);    // name    if(demoversion>=128)    {        if( stricmp(player_names[playernum], *cp) )            CONS_Printf("%s renamed to %s\n",player_names[playernum], *cp);        READSTRING(*cp,player_names[playernum])    }    else    {        memcpy(player_names[playernum],*cp,MAXPLAYERNAME);        *cp+=MAXPLAYERNAME;    }    // skin    if (demoversion<120 || demoversion>=125)    {        if(demoversion>=128)        {            SetPlayerSkin(playernum,*cp);            SKIPSTRING(*cp);        }        else    {        SetPlayerSkin(playernum,*cp);        *cp+=(SKINNAMESIZE+1);    }    }}void SendWeaponPref(void){    char buf[NUMWEAPONS+2];    if(strlen(cv_weaponpref.string)!=NUMWEAPONS)    {        CONS_Printf("weaponpref must have %d characters",NUMWEAPONS);        return;    }    buf[0]=cv_originalweaponswitch.value;    memcpy(buf+1,cv_weaponpref.string,NUMWEAPONS);    buf[1+NUMWEAPONS]=cv_autoaim.value;    SendNetXCmd(XD_WEAPONPREF,buf,NUMWEAPONS+2);    // FIXME : the split screen player have the same weapon pref of the first player    if(cv_splitscreen.value)        SendNetXCmd2(XD_WEAPONPREF,buf,NUMWEAPONS+2);}void Got_WeaponPref(char **cp,int playernum){    players[playernum].originalweaponswitch = *(*cp)++;    memcpy(players[playernum].favoritweapon,*cp,NUMWEAPONS);    *cp+=NUMWEAPONS;    players[playernum].autoaim_toggle=*(*cp)++;}void D_SendPlayerConfig(void){    SendNameAndColor();    if(cv_splitscreen.value)        SendNameAndColor2();    SendWeaponPref();}// ========================================================================//  play a demo, add .lmp for external demos//  eg: playdemo demo1 plays the internal game demo//// byte*   demofile;       //demo file buffervoid Command_Playdemo_f (void){    char    name[256];    if (COM_Argc() != 2)    {        CONS_Printf ("playdemo <demoname> : playback a demo\n");        return;    }    // disconnect from server here ?    if(demoplayback)        G_StopDemo();    if(netgame)    {        CONS_Printf("\nYou can't play a demo while in net game\n");        return;    }    // open the demo file    strcpy (name, COM_Argv(1));    // dont add .lmp so internal game demos can be played    //FIL_DefaultExtension (name, ".lmp");    CONS_Printf ("Playing back demo '%s'.\n", name);    G_DoPlayDemo(name);}void Command_Timedemo_f (void){    char    name[256];    if (COM_Argc() != 2)    {        CONS_Printf ("timedemo <demoname> : time a demo\n");        return;    }    // disconnect from server here ?    if(demoplayback)        G_StopDemo();    if(netgame)    {        CONS_Printf("\nYou can't play a demo while in net game\n");        return;    }    // open the demo file    strcpy (name, COM_Argv(1));    // dont add .lmp so internal game demos can be played    //FIL_DefaultExtension (name, ".lmp");    CONS_Printf ("Timing demo '%s'.\n", name);    G_TimeDemo (name);}//  stop current demo//void Command_Stopdemo_f (void){    G_CheckDemoStatus ();    CONS_Printf ("Stopped demo.\n");}//  Warp to map code.//  Called either from map <mapname> console command, or idclev cheat.//void Command_Map_f (void){    char buf[MAX_WADPATH+3];#define MAPNAME &buf[2]    int i;    if (COM_Argc()<2 || COM_Argc()>7)    {        CONS_Printf ("map <mapname[.wad]> [-skill <1..5>] [-monsters <0/1>] [-noresetplayers]: warp to map\n");        return;    }    if(!server)    {        CONS_Printf ("Only the server can change the map\n");        return;    }    strncpy(MAPNAME,COM_Argv(1),MAX_WADPATH);    if (FIL_CheckExtension(MAPNAME))    {        // here check if file exist !!!        if( !recsearch(MAPNAME,0,false) )        {            CONS_Printf("\2File %s' not found\n",MAPNAME);            return;        }    }    else    {        // internal wad lump        if(W_CheckNumForName(MAPNAME)==-1)        {            CONS_Printf("\2Internal game map '%s' not found\n"                        "(use .wad extension for external maps)\n",MAPNAME);            return;        }    }    if((i=COM_CheckParm("-skill"))!=0)        buf[0]=atoi(COM_Argv(i+1))-1;    else        buf[0]=gameskill;    if((i=COM_CheckParm("-monsters"))!=0)        buf[1]=(atoi(COM_Argv(i+1))==0);    else        buf[1]=(nomonsters!=0);    // use only one bit    if(buf[1])        buf[1]=1;    if(COM_CheckParm("-noresetplayers"))        buf[1]|=2;    // spaw the server if needed    // reset players if there is a new one    if( SV_SpawnServer() )        buf[1]&=~2;    SendNetXCmd(XD_MAP,buf,2+strlen(MAPNAME)+1);}void Got_Mapcmd(char **cp,int playernum){    char mapname[MAX_WADPATH];    int skill,resetplayer=1;    skill=READBYTE(*cp);    if(demoversion>=128)        nomonsters=READBYTE(*cp);    if(demoversion>=129)    {        resetplayer=((nomonsters & 2)==0);        nomonsters&=1;    }    strcpy(mapname,*cp);    *cp+=strlen(mapname)+1;    CONS_Printf ("Warping to map...\n");    if(demoplayback && !timingdemo)        precache=false;    G_InitNew (skill, mapname,resetplayer);    if(demoplayback && !timingdemo)        precache=true;    CON_ToggleOff ();}void Command_Restart_f (void){    if( netgame )    {        CONS_Printf("Restartlevel don't work in network\n");        return;    }    if( gamestate == GS_LEVEL )        G_DoLoadLevel (true);    else        CONS_Printf("You should be in a level to restat it !\n");}void Command_Pause(void){    char buf;    if( COM_Argc()>1 )        buf = atoi(COM_Argv(1))!=0;    else        buf = !paused;    SendNetXCmd(XD_PAUSE,&buf,1);}void Got_Pause(char **cp,int playernum){    if( demoversion<131 )        paused ^= 1;    else        paused = READBYTE(*cp);    if(!demoplayback)    {        if(netgame)        {            if( paused )                CONS_Printf("Game paused by %s\n",player_names[playernum]);            else                CONS_Printf("Game unpaused by %s\n",player_names[playernum]);        }        if (paused) {            if(!menuactive || netgame)                S_PauseSound ();        }        else            S_ResumeSound ();    }}//  Add a pwad at run-time//  Search for sounds, maps, musics, etc..//void Command_Addfile (void){    if (COM_Argc()!=2)    {        CONS_Printf ("addfile <wadfile.wad> : load wad file\n");        return;    }    P_AddWadFile (COM_Argv(1),NULL);}// =========================================================================//                            MISC. COMMANDS// =========================================================================void Command_Frags_f (void){    int i,j;    if(!cv_deathmatch.value)    {        CONS_Printf("Frags : show the frag table\n");        CONS_Printf("Only for deathmatch games\n");        return;    }    for(i=0;i<MAXPLAYERS;i++)        if(playeringame[i])        {            CONS_Printf("%-16s",player_names[i]);            for(j=0;j<MAXPLAYERS;j++)                if(playeringame[j])                    CONS_Printf(" %3d",players[i].frags[j]);            CONS_Printf("\n");    }}void Command_TeamFrags_f(void){    int i,j;    fragsort_t unused[MAXPLAYERS];    int frags[MAXPLAYERS];    int fragtbl[MAXPLAYERS][MAXPLAYERS];    if(!cv_deathmatch.value && !cv_teamplay.value)    {        CONS_Printf("teamfrags : show the frag table for teams\n");        CONS_Printf("Only for deathmatch teamplay games\n");        return;    }    HU_CreateTeamFragTbl(unused,frags,fragtbl);    for(i=0;i<11;i++)        if(teamingame(i))        {            CONS_Printf("%-8s",team_names[i]);            for(j=0;j<11;j++)                if(teamingame(j))                    CONS_Printf(" %3d",fragtbl[i][j]);            CONS_Printf("\n");        }}//  Returns program version.//void Command_Version_f (void){    CONS_Printf ("Doom LEGACY version %i.%i ("                __TIME__" "__DATE__")\n"VERSIONSTRING,                VERSION/100,VERSION%100);}//  Quit the game immediately//void Command_Quit_f (void){    I_Quit();}void FragLimit_OnChange(void){    int i;    if(cv_fraglimit.value>0)    {        for(i=0;i<MAXPLAYERS;i++)            P_CheckFragLimit(&players[i]);    }}void TimeLimit_OnChange(void){    if(cv_timelimit.value)    {        CONS_Printf("Levels will end after %d minute(s).\n",cv_timelimit.value);        cv_timelimit.value *= 60 * TICRATE;    }}void P_RespawnWeapons(void);void Deahtmatch_OnChange(void){    if(server)    {        if( cv_deathmatch.value>=2 )            CV_SetValue(&cv_itemrespawn,1);        else            CV_SetValue(&cv_itemrespawn,0);    }    if( cv_deathmatch.value==1 || cv_deathmatch.value==3 )        P_RespawnWeapons ();    // give all key to the players    if (cv_deathmatch.value)    {        int j;        for(j=0;j<MAXPLAYERS;j++)            if( playeringame[j] )                players[j].cards = it_allkeys;    }}void Command_ExitLevel_f(void){    if(!server)    {        CONS_Printf("Only the server can exit the level\n");        return;    }    if( gamestate != GS_LEVEL || demoplayback )        CONS_Printf("You should be in a level to exit it !\n");    SendNetXCmd(XD_EXITLEVEL,NULL,0);}void Got_ExitLevelcmd(char **cp,int playernum){    G_ExitLevel();}void Command_Load_f(void){    byte slot;    if(COM_Argc()!=2)    {        CONS_Printf("load <slot>: load a saved game\n");        return;    }    if(!server)    {        CONS_Printf("Only server can do a load game\n");        return;    }    if (demoplayback)        G_StopDemo();    // spawn a server if needed    SV_SpawnServer();    slot=atoi(COM_Argv(1));    SendNetXCmd(XD_LOADGAME,&slot,1);}void Got_LoadGamecmd(char **cp,int playernum){    byte slot=*(*cp)++;    G_DoLoadGame(slot);}void Command_Save_f(void){    char p[SAVESTRINGSIZE+1];    if(COM_Argc()!=3)    {        CONS_Printf("save <slot> <desciption>: save game\n");        return;    }    if(!server)    {        CONS_Printf("Only server can do a save game\n");        return;    }    p[0]=atoi(COM_Argv(1));    strcpy(&p[1],COM_Argv(2));    SendNetXCmd(XD_SAVEGAME,&p,strlen(&p[1])+2);}void Got_SaveGamecmd(char **cp,int playernum){    byte slot;    char description[SAVESTRINGSIZE];    slot=*(*cp)++;    strcpy(description,*cp);    *cp+=strlen(description)+1;    G_DoSaveGame(slot,description);}void Command_ExitGame_f(void){    D_QuitNetGame();    CL_Reset();    D_StartTitle();}void Got_UseArtefact (char **cp,int playernum){    int art = READBYTE(*cp);    P_PlayerUseArtifact(&players[playernum], art);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -