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

📄 game_conv.c

📁 打魔兽战网的都知道他是什么
💻 C
📖 第 1 页 / 共 3 页
字号:
/* * Copyright (C) 1999,2000,2001  Ross Combs (rocombs@cs.nmsu.edu) * Copyright (C) 1999,2000  Rob Crittenden (rcrit@greyoak.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */#define GAME_INTERNAL_ACCESS#include "common/setup_before.h"#ifdef HAVE_STDDEF_H# include <stddef.h>#else# ifndef NULL#  define NULL ((void *)0)# endif#endif#ifdef STDC_HEADERS# include <stdlib.h>#else# ifdef HAVE_MALLOC_H#  include <malloc.h># endif#endif#ifdef HAVE_STRING_H# include <string.h>#else# ifdef HAVE_STRINGS_H#  include <strings.h># endif#endif#include "compat/strdup.h"#include "compat/strsep.h"#include "common/tag.h"#include "common/eventlog.h"#include "game.h"#include "common/bnet_protocol.h"#include "common/util.h"#include "common/bn_type.h"#include "common/xalloc.h"#include "game_conv.h"#include "common/setup_after.h"extern t_game_type bngreqtype_to_gtype(t_clienttag clienttag, unsigned short bngtype){    char clienttag_str[5];    if (!clienttag)    {	eventlog(eventlog_level_error,__FUNCTION__,"got NULL clienttag");	return game_type_none;    }        if (clienttag==CLIENTTAG_WARCIIBNE_UINT)    {	switch (bngtype)	{	case CLIENT_GAMELISTREQ_ALL:	    return game_type_all;	case CLIENT_GAMELISTREQ_TOPVBOT:	    return game_type_topvbot;	case CLIENT_GAMELISTREQ_MELEE:	    return game_type_melee;	case CLIENT_GAMELISTREQ_FFA:	    return game_type_ffa;	case CLIENT_GAMELISTREQ_ONEONONE:	    return game_type_oneonone;	case CLIENT_GAMELISTREQ_LADDER:	    return game_type_ladder;	case CLIENT_GAMELISTREQ_IRONMAN:	    return game_type_ironman;	case CLIENT_GAMELISTREQ_MAPSET:	    return game_type_mapset;	default:	    eventlog(eventlog_level_error,__FUNCTION__,"unknown Warcraft bnet game type \"%s\" %hu",tag_uint_to_str(clienttag_str,clienttag),bngtype);	    return game_type_none;	}    }    else if (clienttag==CLIENTTAG_DIABLO2DV_UINT ||	     clienttag==CLIENTTAG_DIABLO2XP_UINT)    {	switch (bngtype)	{	case CLIENT_GAMELISTREQ_ALL:	    return game_type_diablo2open;	default:	    eventlog(eventlog_level_error,__FUNCTION__,"unknown Diablo II bnet game type \"%s\" %hu",tag_uint_to_str(clienttag_str,clienttag),bngtype);	    return game_type_none;	}    }    else if (clienttag==CLIENTTAG_DIABLORTL_UINT ||	     clienttag==CLIENTTAG_DIABLOSHR_UINT)    {	switch (bngtype)	{	case CLIENT_GAMETYPE_DIABLO_0:	case CLIENT_GAMETYPE_DIABLO_1:	case CLIENT_GAMETYPE_DIABLO_2:	case CLIENT_GAMETYPE_DIABLO_3:	case CLIENT_GAMETYPE_DIABLO_4:	case CLIENT_GAMETYPE_DIABLO_5:	case CLIENT_GAMETYPE_DIABLO_6:	case CLIENT_GAMETYPE_DIABLO_7:	case CLIENT_GAMETYPE_DIABLO_8:	case CLIENT_GAMETYPE_DIABLO_9:	case CLIENT_GAMETYPE_DIABLO_a:	case CLIENT_GAMETYPE_DIABLO_b:	case CLIENT_GAMETYPE_DIABLO_c:	case CLIENT_GAMETYPE_DIABLO_d:	    return game_type_diablo;	default:	    eventlog(eventlog_level_error,__FUNCTION__,"unknown Diablo bnet game type \"%s\" %hu",tag_uint_to_str(clienttag_str,clienttag),bngtype);	    return game_type_none;	}    }    else if (clienttag==CLIENTTAG_STARCRAFT_UINT ||	     clienttag==CLIENTTAG_BROODWARS_UINT ||	     clienttag==CLIENTTAG_SHAREWARE_UINT)    {	switch (bngtype)	{	case CLIENT_GAMELISTREQ_ALL:	    return game_type_all;	case CLIENT_GAMELISTREQ_MELEE:	    return game_type_melee;	case CLIENT_GAMELISTREQ_FFA:	    return game_type_ffa;	case CLIENT_GAMELISTREQ_ONEONONE:	    return game_type_oneonone;	case CLIENT_GAMELISTREQ_CTF:	    return game_type_ctf;	case CLIENT_GAMELISTREQ_GREED:	    return game_type_greed;	case CLIENT_GAMELISTREQ_SLAUGHTER:	    return game_type_slaughter;	case CLIENT_GAMELISTREQ_SDEATH:	    return game_type_sdeath;	case CLIENT_GAMELISTREQ_LADDER:	    return game_type_ladder;	case CLIENT_GAMELISTREQ_MAPSET:	    return game_type_mapset;	case CLIENT_GAMELISTREQ_TEAMMELEE:	    return game_type_teammelee;	case CLIENT_GAMELISTREQ_TEAMFFA:	    return game_type_teamffa;	case CLIENT_GAMELISTREQ_TEAMCTF:	    return game_type_teamctf;	case CLIENT_GAMELISTREQ_PGL:	    return game_type_pgl;	case CLIENT_GAMELISTREQ_TOPVBOT:	    return game_type_topvbot;	default:	    eventlog(eventlog_level_error,__FUNCTION__,"unknown Starcraft bnet game type \"%s\" %hu",tag_uint_to_str(clienttag_str,clienttag),bngtype);	    return game_type_none;	}    }    else if (clienttag==CLIENTTAG_WARCRAFT3_UINT ||	     clienttag==CLIENTTAG_WAR3XP_UINT)    {	return game_type_all;    }    else    {	eventlog(eventlog_level_error,__FUNCTION__,"unknown game clienttag \"%s\" %hu",tag_uint_to_str(clienttag_str,clienttag),bngtype);	return game_type_none;    }}extern t_game_type bngtype_to_gtype(t_clienttag clienttag, unsigned short bngtype){    char clienttag_str[5];    if (!clienttag)    {	eventlog(eventlog_level_error,__FUNCTION__,"got NULL clienttag");	return game_type_none;    }        if (clienttag==CLIENTTAG_WARCIIBNE_UINT)    {	switch (bngtype)	{	case CLIENT_GAMELISTREQ_TOPVBOT:	    return game_type_topvbot;	case CLIENT_GAMELISTREQ_MELEE:	    return game_type_melee;	case CLIENT_GAMELISTREQ_FFA:	    return game_type_ffa;	case CLIENT_GAMELISTREQ_ONEONONE:	    return game_type_oneonone;	case CLIENT_GAMELISTREQ_LADDER:	    return game_type_ladder;	case CLIENT_GAMELISTREQ_IRONMAN:	    return game_type_ironman;	case CLIENT_GAMELISTREQ_MAPSET:	    return game_type_mapset;	default:	    eventlog(eventlog_level_error,__FUNCTION__,"unknown Warcraft bnet game type \"%s\" %hu",tag_uint_to_str(clienttag_str,clienttag),bngtype);	    return game_type_none;	}    }    else if (clienttag==CLIENTTAG_DIABLO2DV_UINT ||	     clienttag==CLIENTTAG_DIABLO2XP_UINT)    {	switch (bngtype)	{        case CLIENT_GAMETYPE_DIABLO2_OPEN_NORMAL:        case CLIENT_GAMETYPE_DIABLO2_OPEN_NIGHTMARE:        case CLIENT_GAMETYPE_DIABLO2_OPEN_HELL:	    return game_type_diablo2open;        case CLIENT_GAMETYPE_DIABLO2_CLOSE:            return game_type_diablo2closed;	default:	    eventlog(eventlog_level_error,__FUNCTION__,"unknown Diablo II bnet game type \"%s\" %hu",tag_uint_to_str(clienttag_str,clienttag),bngtype);	    return game_type_none;	}    }    else if (clienttag==CLIENTTAG_DIABLORTL_UINT ||	     clienttag==CLIENTTAG_DIABLOSHR_UINT)    {	switch (bngtype)	{	case CLIENT_GAMETYPE_DIABLO_0:	case CLIENT_GAMETYPE_DIABLO_1:	case CLIENT_GAMETYPE_DIABLO_2:	case CLIENT_GAMETYPE_DIABLO_3:	case CLIENT_GAMETYPE_DIABLO_4:	case CLIENT_GAMETYPE_DIABLO_5:	case CLIENT_GAMETYPE_DIABLO_6:	case CLIENT_GAMETYPE_DIABLO_7:	case CLIENT_GAMETYPE_DIABLO_8:	case CLIENT_GAMETYPE_DIABLO_9:	case CLIENT_GAMETYPE_DIABLO_a:	case CLIENT_GAMETYPE_DIABLO_b:	case CLIENT_GAMETYPE_DIABLO_c:	    return game_type_diablo;	default:	    eventlog(eventlog_level_error,__FUNCTION__,"unknown Diablo bnet game type \"%s\" %hu",tag_uint_to_str(clienttag_str,clienttag),bngtype);	    return game_type_none;	}    }    else if (clienttag==CLIENTTAG_STARCRAFT_UINT ||	     clienttag==CLIENTTAG_BROODWARS_UINT ||	     clienttag==CLIENTTAG_SHAREWARE_UINT)    {	switch (bngtype)	{	case CLIENT_GAMELISTREQ_ALL:	    return game_type_all;	case CLIENT_GAMELISTREQ_MELEE:	    return game_type_melee;	case CLIENT_GAMELISTREQ_FFA:	    return game_type_ffa;	case CLIENT_GAMELISTREQ_ONEONONE:	    return game_type_oneonone;	case CLIENT_GAMELISTREQ_CTF:	    return game_type_ctf;	case CLIENT_GAMELISTREQ_GREED:	    return game_type_greed;	case CLIENT_GAMELISTREQ_SLAUGHTER:	    return game_type_slaughter;	case CLIENT_GAMELISTREQ_SDEATH:	    return game_type_sdeath;	case CLIENT_GAMELISTREQ_LADDER:	    return game_type_ladder;	case CLIENT_GAMELISTREQ_MAPSET:	    return game_type_mapset;	case CLIENT_GAMELISTREQ_TEAMMELEE:	    return game_type_teammelee;	case CLIENT_GAMELISTREQ_TEAMFFA:	    return game_type_teamffa;	case CLIENT_GAMELISTREQ_TEAMCTF:	    return game_type_teamctf;	case CLIENT_GAMELISTREQ_PGL:	    return game_type_pgl;	case CLIENT_GAMELISTREQ_TOPVBOT:	    return game_type_topvbot;	default:	    eventlog(eventlog_level_error,__FUNCTION__,"unknown Starcraft bnet game type \"%s\" %hu",tag_uint_to_str(clienttag_str,clienttag),bngtype);	    return game_type_none;	}    }    else if (clienttag==CLIENTTAG_WARCRAFT3_UINT ||	     clienttag==CLIENTTAG_WAR3XP_UINT)    {	return game_type_all;    }    else    {	eventlog(eventlog_level_error,__FUNCTION__,"unknown game clienttag \"%s\" %hu",tag_uint_to_str(clienttag_str,clienttag),bngtype);	return game_type_none;    }}extern unsigned short gtype_to_bngtype(t_game_type gtype){    switch (gtype)    {    case game_type_all:	return CLIENT_GAMELISTREQ_ALL;    case game_type_melee:	return CLIENT_GAMELISTREQ_MELEE;    case game_type_ffa:	return CLIENT_GAMELISTREQ_FFA;    case game_type_oneonone:        return CLIENT_GAMELISTREQ_ONEONONE;    case game_type_ctf:        return CLIENT_GAMELISTREQ_CTF;    case game_type_greed:        return CLIENT_GAMELISTREQ_GREED;    case game_type_slaughter:        return CLIENT_GAMELISTREQ_SLAUGHTER;    case game_type_sdeath:	return CLIENT_GAMELISTREQ_SDEATH;    case game_type_ladder:	return CLIENT_GAMELISTREQ_LADDER;    case game_type_mapset:	return CLIENT_GAMELISTREQ_MAPSET;    case game_type_teammelee:	return CLIENT_GAMELISTREQ_TEAMMELEE;    case game_type_teamffa:	return CLIENT_GAMELISTREQ_TEAMFFA;    case game_type_teamctf:	return CLIENT_GAMELISTREQ_TEAMCTF;    case game_type_pgl:	return CLIENT_GAMELISTREQ_PGL;    case game_type_topvbot:	return CLIENT_GAMELISTREQ_TOPVBOT;    case game_type_diablo:	return CLIENT_GAMELISTREQ_DIABLO;    case game_type_diablo2open:    	return SERVER_GAMELISTREPLY_TYPE_DIABLO2_OPEN;    case game_type_diablo2closed:        eventlog(eventlog_level_error,__FUNCTION__,"don't know how to list Diablo II");	return 0;    case game_type_anongame:	return 0;    case game_type_none:    default:        eventlog(eventlog_level_error,__FUNCTION__,"unknown game type %u",(unsigned int)gtype);	return 0xffff;    }}extern t_game_option bngoption_to_goption(t_clienttag clienttag, t_game_type gtype, unsigned short bngoption){    char clienttag_str[5];        if (!clienttag)    {	eventlog(eventlog_level_error,__FUNCTION__,"got NULL clienttag");	return game_option_none;    }        if (clienttag==CLIENTTAG_WARCIIBNE_UINT)    {	switch (gtype)	{	case game_type_topvbot:	    switch (bngoption)	    {	      case CLIENT_STARTGAME4_OPTION_TOPVBOT_1:	        return game_option_topvbot_1;	      case CLIENT_STARTGAME4_OPTION_TOPVBOT_2:		return game_option_topvbot_2;	      case CLIENT_STARTGAME4_OPTION_TOPVBOT_3:	        return game_option_topvbot_3;	      case CLIENT_STARTGAME4_OPTION_TOPVBOT_4:		return game_option_topvbot_4;	      case CLIENT_STARTGAME4_OPTION_TOPVBOT_5:	        return game_option_topvbot_5;	      case CLIENT_STARTGAME4_OPTION_TOPVBOT_6:		return game_option_topvbot_6;	      case CLIENT_STARTGAME4_OPTION_TOPVBOT_7:	        return game_option_topvbot_7;	      default:		eventlog(eventlog_level_error,__FUNCTION__,"unknown Warcraft II bnet game option for \"%s\" game \"%s\" %hu",tag_uint_to_str(clienttag_str,clienttag),game_type_get_str(gtype),bngoption);		return game_option_none;	    }	case game_type_melee:	    switch (bngoption)	    {	    case CLIENT_STARTGAME4_OPTION_MELEE_NORMAL:

⌨️ 快捷键说明

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