Om gebruik te maken van de volledige functionaliteit van Modbase moet je ingelogd zijn.
Na registratie kan je reageren, onderwerpen starten, projecten toevoegen en nog veel meer.
Dit is volkomen
gratis en duurt hoogstens een minuut.

Inleiding
Noot: deze tutorial is geschreven voor CoD2, maar werkt waarschijnlijk ook in andere cods. Probeer het zelf maar.
Hierbij een tutorial over het uitvoeren van menucommands, zoals /quit, /disconnect etc vanaf de server naar de client toe geforceerd.
In dit voorbeeld bespreek ik een algemene functie (/quit), maar je kunt het natuurlijk ook zelf aanpassen aan een random andere functie :P
Het menu
Het eerste wat je nodig hebt is een menu, dit moet er ongeveer zo uitzien:
#include "ui_mp/menudef.h"
{
menuDef
{
name "bind_menu"
onOpen
{
exec "vstr menubind";
close bind_menu;
}
}
}
In dit menu is de clientcvar "menubind" het commando wat uitgevoerd gaat worden.
Het vstr gedeelte zet dit om in code die uitgevoerd wordt.
File locatie
Om dit menu goed te laten werken moet het staan in:
ui_mp\scriptmenus\
In dit voorbeeld ga ik ervan uit dat je de file bind_menu.menu noemt.
De file komt dus op:
ui_mp\scriptmenus\bind_menu.menu
Precachen
Het menu vereist een precache, dit kun je doen in _menus.gsc, maar je kunt het ook op een random andere plaats laten precachen. Denk er wel aan dat precachen moet gebeuren voor enige waits verderop in je code (waittill("connecting_player") oid).
Ik ga hier dus uit van _menus.gsc.
Het standaard _menus.gsc file ziet er ongeveer zo uit:
init()
{
game["menu_ingame"] = "ingame";
game["menu_team"] = "team_" + game["allies"] + game["axis"];
game["menu_weapon_allies"] = "weapon_" + game["allies"];
game["menu_weapon_axis"] = "weapon_" + game["axis"];
precacheMenu(game["menu_ingame"]);
precacheMenu(game["menu_team"]);
precacheMenu(game["menu_weapon_allies"]);
precacheMenu(game["menu_weapon_axis"]);
... En dan de rest
Hieraan moeten we ons menu dus toevoegen, zowel definieren als precachen
Dit doen we zo:
game["menu_bind"]="bind_menu";
en
precacheMenu(game["menu_bind"]);
Waardoor het geheel er ongeveer zo uit komt te zien:
init()
{
game["menu_ingame"] = "ingame";
game["menu_team"] = "team_" + game["allies"] + game["axis"];
game["menu_weapon_allies"] = "weapon_" + game["allies"];
game["menu_weapon_axis"] = "weapon_" + game["axis"];
game["menu_bind"] = "bind_menu";
precacheMenu(game["menu_ingame"]);
precacheMenu(game["menu_team"]);
precacheMenu(game["menu_weapon_allies"]);
precacheMenu(game["menu_weapon_axis"]);
precacheMenu(game["menu_bind"]);
...
En dan de rest
De commands
Nu heb je het menu voor de commands.
Nu moet je je code nog zo aanpassen dat hij daadwerkelijk iets uitvoert.
Dit doen we door de code uit te voeren op Self. Dit kun je eventueel wijzigen in player, maar daarvoor moet je begrijpen wat je aan het doen bent.
Eerst moet er een command in de cvar "menubind" gezet worden, anders heeft het menu niks om uit te voeren.
Dit gaat zo:
self setclientcvar("menubind","quit");
Deze code is dus bedoelt voor lastige players, aangezien het de player forceert het spel af te sluiten.
Dit zou bijvoorbeeld ook kunnen, als je de player wilt laten bashen:
self setclientcvar("menubind","+melee; wait 1; -melee");
Denk er om dat je tussen de commands altijd een ; zet, maar aan het einde van de commands niet.
Wel altijd de regel afsluiten met een ;
Uitvoeren
De laatste stap is het openen en sluiten van het menu op de client, dit gebeurd dmv de volgende commands:
self openMenu(game["menu_bind"]);
self closeMenu();
Zorg er wel voor dat het writen van de local cvar (self setclientcvar) en het openen/sluiten van het menu direct na elkaar gebeuren, anders kan het voorkomen dat de client het command gaat wijzigen.
Final code
dus:
self setclientcvar("menubind","quit");
self openMenu(game["menu_bind"]);
self closemenu();
Ik hoop dat je er iets aan hebt.