VGUI HTML Screen In Multiplayer

An Orange Box version of this code is now available!
This tutorial is an add-on to the VGUI HTML Screen tutorial. Like the original version, this tutorial aims at placing in-game viewable HTML screens, which have the added bonus of being able to trigger entity actions.
The difference with this tutorial, is that it's written for Multiplayer, and works by sending the server a command to trigger it's entity.
This tutorial assumes you have read and fully understand how to implement the original document.
== Special Thanks ==
Special thanks to Harm-Simon for coming to me with the proposal of a multiplayer version, for debugging, ideas and code that made the final version of this release. This is for you!
== Changes ==
=== Singleplayer vs Multiplayer ===
The Singleplayer version of the VGUI HTML Screens is implemented entirely in the client - as the client has full control over the game world in that version.
Conversely, the Multiplayer version is implemented in a mixed client/server system. Displaying the screen is done on the client side, and any entity IO commands are sent to a new command placed in the Server project.
=== Code Changes ===
There have been a few changes to the code. Most notably, the entity parser has been changed to use the sv_ent_fire command to trigger entity actions. It is very similar to the ent fire command, except that cheats are not required to use it.
=== Compatibility ===
This code should work fine in singleplayer, but this has not been tested. It has been testing in multiplayer and has been seen to work perfectly.
This code is considered superior to the singleplayer versiom, but the tutorial is much shorter.
== Implementing the VGUI HTML View ==
=== Conventions used ===
A number of files are required to be added to various projects in the your src directory. Please note the following conventions:
* Game_HL2MP refers to the Game_HL2MP-2003 or Game_HL2MP-2005 project. Use the one associated with the tools you have.
* Similarly, Everything_SDK refers to the Everything_SDK-2003 or Everything_SDK-2005 project.
When adding files to a project, you have two options:
* Save the file to the appropriate directory (specified below)
* Create a new file with the appropriate name, and paste the contents of the file into it
=== The New Files ===
A number of new files need to be added to various projects.
==== Game_HL2MP ====
* Add the following files to the client_hl2mp project (or client_hl2 in the case of singleplayer):
:* HTMLView.cpp — belongs in the src\cl_dll\ folder''
:* IHTMLView.h — belongs in the src\cl_dll\ folder
* Add the following files to the server_hl2mp project (or server_hl2 in the case of singleplayer):
:* sv_htmlview_support.cpp — belongs in the src\dlls\ folder
==== Everything_SDK ====
* Add the following files to the vgui_controls project
:* EntHTML.cpp — belongs in the src\vgui2\controls\ folder
Additionally, the following file needs to be placed in the src\public\ and src\public\vgui_controls\ folders:
:* EntHTML.h 
=== Finishing Up ===
Lastly, a single file in the client project needs to be updated.
In the client_hl2mp (or client_hl2) project, open the file vgui_int.cpp.
==== Step 1: Adding the Include ====
Locate the following line:
 #include "FileSystem.h"
Directly below this line, add:
 #include "IHTMLView.h"
==== Step 2: Adding the Initialization ====
Locate the following line:
 VPANEL toolParent = enginevgui->GetPanel( PANEL_TOOLS );
Directly below this line, add:
 VPANEL gameParent = enginevgui->GetPanel( PANEL_INGAMESCREENS );
 htmlview->Create(gameParent);
==== Step 3: Adding the Deconstructor ====
Locate the following line:
 VGUI_DestroyClientDLLRootPanel();
Directory below this line, add:
 htmlview->Destroy();
==== Finished ====
Now you're done!
Compile your project and you're ready.
Please post any errors or issues on the discussion page.
If you need more information on using these HTML screens, see the original article.
== Notes on maps ==
Please note that you are now required to use the point_clientcommand instead of the point_servercommand entity to trigger the HTMLView.
Category:ProgrammingCategory:TutorialsH