?? game_conv.c
字號:
/* * 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 + -