Metamod:ClientJátékbeli parancsok, és változók létrehozása:A következő tutorialban megmutatom hogyan lehet létrehozni új parancsokat, és cvarokat a játék motorjába. Szeretném leszögezni hogy minden példa tutorial az itt található: (
https://hlmod.hu/viewtopic.php?f=111&t=23826) Példa Plugin alapjára lesz leírva. Tehát én minden tutorial alkalmával a Példa Pluginban kezdem el csinálni. Persze te ha több dolgot csinálsz egy pluginban, akkor nem kell több plugint csinálnod, tehát csinálhatod egy pluginban is!
Előre is elnézést az írásbeli, és egyéb hibák miatt. Nem tudom a neveket, meg hogy éppen mi történik, mi a megfelelő szó rá. Csak tapasztalat alapján mutatom be. Nem mindenhol tudom pontosan megmondani hogy éppen mi történik1. Parancs létrehozása:Magunk elé vesszük a Meta_Api.cpp-t: A példa plugin szerint ez az alap:
► Spoiler mutatása
#include "Meta_Api.h"
cl_enginefunc_t gEngfuncs;
meta_globals_t *gpMetaGlobals;
int Initialize(cl_enginefunc_t *pEnginefuncs, int iVersion)
{
gEngfuncs = *(cl_enginefunc_t *)malloc(sizeof(cl_enginefunc_t));
memcpy(&gEngfuncs, pEnginefuncs, sizeof(cl_enginefunc_t));
gEngfuncs.pfnClientCmd("echo \"www.hlmod.hu - Kliens elindult!\"");
RETURN_META_VALUE(MRES_IGNORED, 0);
}
extern "C" int __declspec( dllexport ) Meta_Attach(meta_globals_t *pMGlobals)
{
gpMetaGlobals = pMGlobals;
return 1;
}
extern "C" int __declspec( dllexport ) Meta_Detach(void)
{
return 1;
}
extern "C" int __declspec( dllexport ) GetExportFunctionsTable(cl_clientfunc_t *pClfuncs)
{
memset(pClfuncs, 0, sizeof(cl_clientfunc_t));
pClfuncs->Initialize = &Initialize;
return 1;
}
Kikeressük benne az Initialize függvényt. A parancs létrehozás helye az echos üzenetünk alatt lesz. Tehát a
gEngfuncs.pfnClientCmd("echo \"www.hlmod.hu - Kliens elindult!\"");
utáni sorban.
Az alábbi funkcióval hozunk létre parancsot:
gEngfuncs.pfnAddCommand("parancs", parancsteszt);
Az AddCommand funkciónak két paramétere van, az első a parancs, a második a függvény, ami lefusson a parancs beírásakor.
Tehát ezt a sort elhelyeztük az echo szöveg elé.
Következő lépésben még mindig ugyan abban a fájlban vagyunk. Kikeressük az alábbi részt:
cl_enginefunc_t gEngfuncs;
meta_globals_t *gpMetaGlobals;
majd ezek alá elhelyezzük ezt:
majd a következő lépésben legurítjuk a fájl legaljára, és elhelyezzük a funkciót:
void parancsteszt(void)
{
//És hogy lássuk sikeres volt e a parancs létrehozása, kiírjuk a játékos konzoljába, persze csak echo üzenettel!
gEngfuncs.pfnClientCmd("echo \"A parancs lefutott!\"");
}
2. Változó létrehozása:A változó létrehozására az alábbi funkciót használjuk:
gEngfuncs.pfnRegisterVariable
Ez mehet majd az 1. pontban említett parancs létrehozás alá!
Ennek a funkciónak 3 paramétere van.
[list=][*]maga a változó
[*]értéke
[*]flags (talán ugyan azok mint amxx esetén)[/list]
Tehát hozzuk akkor létre a cvart:
gEngfuncs.pfnRegisterVariable( "teszt_cvar", "1.6", 0);
Ha mindennel megvagyunk, mehet a Compile, és a teszt!
Teszt eredmények: