Correct misleading message
[pmprecache.git] / meta_api.cpp
1 // vi: set ts=4 sw=4 :
2 // vim: set tw=75 :
3
4 // meta_api.cpp - minimal implementation of metamod's plugin interface
5
6 // This is intended to illustrate the (more or less) bare minimum code
7 // required for a valid metamod plugin, and is targeted at those who want
8 // to port existing HL/SDK DLL code to run as a metamod plugin.
9
10 /*
11 * Copyright (c) 2001-2003 Will Day <willday@hpgx.net>
12 *
13 * This file is part of Metamod.
14 *
15 * Metamod is free software; you can redistribute it and/or modify it
16 * under the terms of the GNU General Public License as published by the
17 * Free Software Foundation; either version 2 of the License, or (at
18 * your option) any later version.
19 *
20 * Metamod is distributed in the hope that it will be useful, but
21 * WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23 * General Public License for more details.
24 *
25 * You should have received a copy of the GNU General Public License
26 * along with Metamod; if not, write to the Free Software Foundation,
27 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 *
29 * In addition, as a special exception, the author gives permission to
30 * link the code of this program with the Half-Life Game Engine ("HL
31 * Engine") and Modified Game Libraries ("MODs") developed by Valve,
32 * L.L.C ("Valve"). You must obey the GNU General Public License in all
33 * respects for all of the code used other than the HL Engine and MODs
34 * from Valve. If you modify this file, you may extend this exception
35 * to your version of the file, but you are not obligated to do so. If
36 * you do not wish to do so, delete this exception statement from your
37 * version.
38 *
39 */
40
41 #include <extdll.h> // always
42
43 #include <meta_api.h> // of course
44
45 #include "sdk_util.h" // UTIL_LogPrintf, etc
46
47 // Must provide at least one of these..
48 static META_FUNCTIONS gMetaFunctionTable = {
49 NULL, // pfnGetEntityAPI HL SDK; called before game DLL
50 NULL, // pfnGetEntityAPI_Post META; called after game DLL
51 GetEntityAPI2, // pfnGetEntityAPI2 HL SDK2; called before game DLL
52 NULL, // pfnGetEntityAPI2_Post META; called after game DLL
53 NULL, // pfnGetNewDLLFunctions HL SDK2; called before game DLL
54 NULL, // pfnGetNewDLLFunctions_Post META; called after game DLL
55 GetEngineFunctions, // pfnGetEngineFunctions META; called before HL engine
56 NULL, // pfnGetEngineFunctions_Post META; called after HL engine
57 };
58
59 // Description of plugin
60 plugin_info_t Plugin_info = {
61 META_INTERFACE_VERSION, // ifvers
62 "PMPreCache", // name
63 "0.1", // version
64 "2023/12/31", // date
65 "MegaBrutal <megabrutal@gmail.com>", // author
66 "http://megabrutal.com/", // url
67 "PMPreCache", // logtag, all caps please
68 PT_ANYTIME, // (when) loadable
69 PT_ANYPAUSE, // (when) unloadable
70 };
71
72 // Global vars from metamod:
73 meta_globals_t *gpMetaGlobals; // metamod globals
74 gamedll_funcs_t *gpGamedllFuncs; // gameDLL function tables
75 mutil_funcs_t *gpMetaUtilFuncs; // metamod utility functions
76 char gGamedir[256];
77
78 // Metamod requesting info about this plugin:
79 // ifvers (given) interface_version metamod is using
80 // pPlugInfo (requested) struct with info about plugin
81 // pMetaUtilFuncs (given) table of utility functions provided by metamod
82 C_DLLEXPORT int Meta_Query(char * /*ifvers */, plugin_info_t **pPlugInfo,
83 mutil_funcs_t *pMetaUtilFuncs)
84 {
85 // Give metamod our plugin_info struct
86 *pPlugInfo=&Plugin_info;
87 // Get metamod utility function table.
88 gpMetaUtilFuncs=pMetaUtilFuncs;
89 return(TRUE);
90 }
91
92 // Metamod attaching plugin to the server.
93 // now (given) current phase, ie during map, during changelevel, or at startup
94 // pFunctionTable (requested) table of function tables this plugin catches
95 // pMGlobals (given) global vars from metamod
96 // pGamedllFuncs (given) copy of function tables from game dll
97 C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME /* now */,
98 META_FUNCTIONS *pFunctionTable, meta_globals_t *pMGlobals,
99 gamedll_funcs_t *pGamedllFuncs)
100 {
101 if(!pMGlobals) {
102 LOG_ERROR(PLID, "Meta_Attach called with null pMGlobals");
103 return(FALSE);
104 }
105 gpMetaGlobals=pMGlobals;
106 if(!pFunctionTable) {
107 LOG_ERROR(PLID, "Meta_Attach called with null pFunctionTable");
108 return(FALSE);
109 }
110 memcpy(pFunctionTable, &gMetaFunctionTable, sizeof(META_FUNCTIONS));
111 gpGamedllFuncs=pGamedllFuncs;
112 LOG_MESSAGE(PLID, "%s v%s by %s", Plugin_info.name, Plugin_info.version, Plugin_info.author);
113 LOG_MESSAGE(PLID, "Attached.");
114 strncpy(&gGamedir[0], GET_GAME_INFO(PLID, GINFO_GAMEDIR), sizeof(gGamedir));
115 return(TRUE);
116 }
117
118 // Metamod detaching plugin from the server.
119 // now (given) current phase, ie during map, etc
120 // reason (given) why detaching (refresh, console unload, forced unload, etc)
121 C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME /* now */,
122 PL_UNLOAD_REASON /* reason */)
123 {
124 return(TRUE);
125 }