📄 d_netcmd.c
字号:
| ((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 + -