Unknown ❤ RESPAWN.ZAFEST.RO | VIP FREE | FREE FOR ALL ❤ 0/32
Romania XPlayZM.CSBlackDevil.COM # Zombie Plague UltimateX [ Respawn + FDL + VIP 22-12PM + POINTS] ® 18/32
Server bewerben

Add 6 tutorials (6 files)

Browse Source
Daemon666 committed parent 1e8ef01d18 commit 408512846fcc53d70ae8f20c20c4f634cd933801
6 changed files with 209 additions and 0 deletions
+9 -0 create-custom-wad-textures/en.md A
@@ -0,0 +1,9 @@
1 +---
2 +title: "Creating a Custom WAD with Wally"
3 +excerpt: "How to build a GoldSrc texture WAD in Wally: the 16-color-per-transparency rules, the 16-pixel dimension requirement, blue transparency and {\\ textures, and getting the WAD into your map without the missing-texture error."
4 +category: "mapping"
5 +tags: "wad, textures"
6 +image: ""
7 +read_time: "8 min read"
8 +---
9 +<p>A <code>.wad</code> is a package of textures that GoldSrc maps reference by name, and <strong>Wally</strong> is the classic editor for building them. If you want custom walls, signs, or logos in a CS 1.6 map, you make a WAD, add it to your compile tools and editor, and apply the textures. Get the format rules wrong and you get corrupted colours, invisible faces, or the dreaded missing-WAD error at load. This covers building a clean WAD in Wally.</p><h2>1. Understand the GoldSrc texture format</h2><p>GoldSrc textures are not arbitrary images. The hard rules Wally enforces (and that break your map if violated):</p><ul><li>Each texture has a <strong>256-colour palette</strong> (8-bit indexed). Wally handles the conversion, but subtle gradients will band.</li><li>Both dimensions must be <strong>divisible by 16</strong> &mdash; 64x64, 128x128, 256x256, 16x32, and so on. A 100x100 texture is invalid.</li><li>Texture <strong>names are limited to 15 characters</strong> and are how the map references them &mdash; keep them unique and descriptive.</li></ul><h2>2. Create a new WAD and add textures</h2><p>In Wally, create a new WAD3 package (the GoldSrc/Half-Life format). Import your images &mdash; Wally converts each to the indexed palette on import. Resize any image whose dimensions are not multiples of 16 <em>before</em> importing, or crop inside Wally, so you are not fighting a stretched, misaligned result later.</p><h2>3. Use the special texture prefixes</h2><p>GoldSrc gives certain name prefixes special meaning. The ones you will actually use:</p><ul><li><strong><code>{</code> (brace) prefix</strong> &mdash; a transparency/decal texture. The palette's <em>last</em> colour (index 255, pure blue <code>0 0 255</code>) is rendered transparent. This is how you make fences, grates, and cut-out signs.</li><li><strong><code>sky</code></strong> &mdash; reserved; do not name a normal texture <code>sky</code>.</li><li><strong>Animated textures</strong> use <code>+0name</code>, <code>+1name</code> sequences.</li></ul><p>For a fence texture, name it <code>{fence01</code>, paint the see-through parts pure blue, and set that as palette index 255. In the editor you then set the brush's render mode to Solid so the blue drops out.</p><h2>4. Keep the blue truly blue</h2><p>The transparency colour must be exact <code>0 0 255</code> and must be the last palette entry. If your image editor anti-aliased the edges, you get a blue fringe around the cut-out. Paint transparency areas with a hard, single-colour blue and no anti-aliasing so the edge is clean.</p><h2>5. Save and wire the WAD into your tools</h2><p>Save the WAD somewhere your editor and compiler can both reach. Then add it in two places:</p><ul><li><strong>Your editor</strong> (JACK/Hammer) &mdash; add the WAD to the texture/game configuration so the textures appear in the browser. See <a href="/tutorials/jack-editor-setup-cs16">JACK editor setup</a>.</li><li><strong>The compile</strong> &mdash; the <code>hlcsg</code> stage reads the WADs the map references. Either let the compiler find it via the wad path, or embed the used textures into the BSP with <code>-wadinclude</code> so the map is self-contained.</li></ul><h2>6. Decide: external WAD or embedded</h2><p>If you ship the map to a server, players need the textures too. You either distribute the <code>.wad</code> alongside the BSP (and list it in the map's resource file) or embed the textures into the BSP at compile with <code>-wadinclude</code>. Embedding makes a bigger BSP but removes the "cannot find WAD" class of problem entirely on the server side &mdash; covered in <a href="/tutorials/cs16-cannot-find-wad">the cannot-find-WAD guide</a>.</p><h2>Common errors</h2><ul><li><strong>Compile fails with a WAD-not-found error</strong> &mdash; the compiler cannot locate the <code>.wad</code>, or the map references a WAD you no longer have. Fix the wad path or <code>-wadinclude</code> the textures; see <a href="/tutorials/cs16-cannot-find-wad">cannot find WAD</a>.</li><li><strong>Texture looks corrupted / wrong colours</strong> &mdash; the palette conversion mangled a gradient, or the image was not truly indexed. Re-import in Wally and accept its palette.</li><li><strong>Transparency not working, whole texture is opaque blue</strong> &mdash; the name is missing the <code>{</code> prefix, the blue is not exactly <code>0 0 255</code> at index 255, or the brush render mode is not set to Solid in the editor.</li><li><strong>"Texture is not 16 aligned"</strong> &mdash; a dimension is not divisible by 16. Resize to the nearest multiple of 16.</li><li><strong>Texture does not appear in the editor browser</strong> &mdash; the WAD is not added to the editor's game configuration. Add it and refresh.</li></ul><h2>Verification</h2><p>Apply a custom texture to a test brush, apply a <code>{</code> transparency texture to a fence brush and set it to Solid render mode, then compile a small test map. Load it and confirm the wall texture displays correctly and the fence shows the world through its cut-out with no blue fringe. If the compile complains about the WAD, resolve the path before anything else. Once it renders in-game, the WAD is production-ready; manage how it ships with <a href="/tutorials/install-custom-maps-cs16-server">installing custom maps on the server</a>.</p>
+17 -0 hammer-35-setup-cs16/en.md A
@@ -0,0 +1,17 @@
1 +---
2 +title: "Valve Hammer Editor 3.5 Setup for CS 1.6"
3 +excerpt: "How to configure Valve Hammer Editor 3.5 for Counter-Strike 1.6: game configuration, the FGD, the WAD list, the ZHLT/VHLT compile tools, and the run map paths."
4 +category: "mapping"
5 +tags: "hammer, editor"
6 +image: ""
7 +read_time: "8 min read"
8 +---
9 +<p>Valve Hammer Editor 3.5 is the classic GoldSrc level editor, and getting it to compile CS 1.6 maps is entirely a matter of configuration: telling it which game you are building for, where the textures and entity definitions are, and which compile tools to run. Skip a field and you get missing entities, no textures in the 3D view, or a compile that never runs. This walks the whole setup once, cleanly. If you prefer a modern editor, <a href="/tutorials/jack-editor-setup-cs16">J.A.C.K.</a> is an alternative, but the concepts below map one-to-one.</p><h2>1. Open Game Configurations</h2><p>Go to <strong>Tools &rarr; Options &rarr; Game Configurations</strong> and click <strong>Add</strong> to create a profile named <code>Counter-Strike 1.6</code>. Everything else hangs off this profile, so create it first.</p><h2>2. Load the FGD (entity definitions)</h2><p>The FGD file defines every entity you can place &mdash; without it, the entity tool is empty. Add the CS FGD (commonly <code>halflife-cs.fgd</code>) to the <strong>Game Data files</strong> list for this profile. If you use ZHLT/VHLT features such as <code>func_detail</code>, also add <code>zhlt.fgd</code> so those entities appear. You can load more than one FGD; add both.</p><h2>3. Set the texture (WAD) format and directories</h2><p>Set <strong>Texture Format</strong> to <strong>WAD3 (Half-Life / TFC)</strong> and <strong>Map Type</strong> to <strong>Half-Life / TFC</strong>. Then point the profile at your game so textures and content resolve:</p><pre>Game Executable Directory: ...\Steam\steamapps\common\Half-Life
10 +Mod Directory: ...\Steam\steamapps\common\Half-Life\cstrike
11 +Game Directory: ...\Steam\steamapps\common\Half-Life\valve
12 +RMF/MAP directory: your working maps folder</pre><p>These paths are how Hammer finds the game to run the map, and where it looks for content.</p><h2>4. Add your WADs</h2><p>Under the <strong>Textures</strong> tab, add the WAD files the editor should load: <code>halflife.wad</code> and <code>cstrike.wad</code> at minimum, plus any custom WADs. These populate the texture browser and get written into the map's <code>wad</code> key. Keep this list tidy &mdash; every WAD here ends up referenced by the map, and a stale entry causes a <a href="/tutorials/fix-wad-not-found-compile">could not open wad file</a> error at compile.</p><h2>5. Configure the compile tools (Build Programs)</h2><p>Go to <strong>Tools &rarr; Options &rarr; Build Programs</strong> and point Hammer at your ZHLT/VHLT executables &mdash; use Vluzacn's VHLT v34 for a modern map:</p><pre>Game executable: hl.exe (in the Half-Life dir)
13 +CSG tool: hlcsg.exe
14 +BSP tool: hlbsp.exe
15 +VIS tool: hlvis.exe
16 +RAD tool: hlrad.exe
17 +Place compiled maps in: ...\cstrike\maps</pre><p>The four tools run in the order <code>hlcsg &rarr; hlbsp &rarr; hlvis &rarr; hlrad</code>. Setting the output directory to <code>cstrike\maps</code> means Run Map drops the <code>.bsp</code> where the game can load it. For the flags each tool takes, see <a href="/tutorials/zhlt-vhlt-compile-parameters">the compile parameters guide</a>.</p><p>One caveat with Hammer 3.5 specifically: it was written for the old ZHLT and its expert compile dialog stores flags per configuration. When you point it at Vluzacn's VHLT v34, keep an eye on any flags the dialog inserted automatically &mdash; a legacy default that VHLT renamed or dropped will make a tool error out immediately. If a compile aborts on the first tool with an unknown-parameter message, open the expert dialog and remove the offending flag rather than assuming the executable is broken. Many mappers keep a plain batch file of the exact command lines as a fallback and only use Hammer's dialog for quick test builds.</p><h2>6. Run Map</h2><p>With the profile complete, <strong>File &rarr; Run Map (F9)</strong> opens the compile dialog. Choose the CSG/BSP/VIS/RAD detail levels (Normal for a release, or expert mode to type exact flags), tick "Don't run the game" if you only want the BSP, and compile. Watch the log window &mdash; every warning and error the four tools emit appears there, which is where you catch leaks, WAD problems, and texture-axis warnings before they reach players.</p><h2>Common errors</h2><ul><li><strong>Entity tool is empty / entities missing</strong> &mdash; no FGD loaded. Add <code>halflife-cs.fgd</code> (and <code>zhlt.fgd</code>) to Game Data files.</li><li><strong>No textures in the browser or 3D view</strong> &mdash; WADs not added, or Texture Format is not WAD3. Add the WADs and set WAD3.</li><li><strong>Run Map does nothing / tool not found</strong> &mdash; the Build Programs paths point at missing executables. Set them to your actual <code>hlcsg/hlbsp/hlvis/hlrad</code>.</li><li><strong>Compile succeeds but the game does not load the map</strong> &mdash; output directory is not <code>cstrike\maps</code>. Fix the "Place compiled maps in" path.</li><li><strong><code>Could not open wad file</code> at compile</strong> &mdash; a stale WAD in the list; remove entries the map no longer uses.</li></ul><h2>Verification</h2><p>Build the classic first map &mdash; a sealed room with a <code>light</code>, an <code>info_player_start</code>, and one textured floor &mdash; and press F9. If the compile log runs all four tools without a leak and the game launches into your room with textures and lighting, the configuration is correct. If textures are missing in the editor but the compile runs, revisit the WAD list; if entities are missing, revisit the FGD. From here, follow <a href="/tutorials/make-your-first-cs16-map">make your first CS 1.6 map</a> to build something real.</p>
+64 -0 install-cs16-public-plugin-pack/en.md A
@@ -0,0 +1,64 @@
1 +---
2 +title: "Essential Plugin Pack for a New Public CS 1.6 Server"
3 +excerpt: "A curated, opinionated set of AMX Mod X plugins every new public CS 1.6 server should run: admin control, map voting, stats, adverts, name filtering and basic anti-abuse, with load order."
4 +category: "installation"
5 +tags: "plugins, amxmodx"
6 +image: ""
7 +read_time: "8 min read"
8 +---
9 +<p>A fresh <a href="/tutorials/install-amx-mod-x-1-9">AMX Mod X</a> install already ships a handful of core plugins, but a public server needs a deliberate, small pack &mdash; enough to run the server, keep it civil and keep players coming back, without the bloat that turns a server into a laggy mess. This is an opinionated starter pack: what to enable, why, and in what order.</p>
10 +
11 +<h2>1. The stock plugins to keep on</h2>
12 +<p>AMXX's own bundle covers most administration. In <code>addons/amxmodx/configs/plugins.ini</code>, keep these enabled:</p>
13 +<pre>admin.amxx ; core admin, users.ini flags
14 +admincmd.amxx ; kick, ban, slap, map, cvar commands
15 +adminhelp.amxx ; amx_help
16 +adminslots.amxx ; reserved slots for admins
17 +menufront.amxx ; the amxmodmenu front-end
18 +cmdmenu.amxx ; command and cvar menus
19 +mapsmenu.amxx ; map voting / changing menu
20 +plmenu.amxx ; player management menu (kick/ban/slap)
21 +telemenu.amxx ; teleport menu
22 +pausecfg.amxx ; pause/unpause plugins
23 +statscfg.amxx ; configure the stats system
24 +timeleft.amxx ; say /timeleft, timeleft sounds
25 +nextmap.amxx ; nextmap and mapcycle handling
26 +mapchooser.amxx ; end-of-map vote
27 +scrollmsg.amxx ; scrolling HUD message
28 +imessage.amxx ; centre info messages
29 +adminvote.amxx ; amx_vote / kickvote</pre>
30 +<p>That set gives you admin control, an end-of-map vote, nextmap handling and the basic HUD messaging every public server expects. Load order for the stock set is the default order &mdash; keep <code>admin.amxx</code> at the top; see <a href="/tutorials/plugins-ini-load-order">plugins.ini load order</a>.</p>
31 +
32 +<h2>2. Add a proper admin menu</h2>
33 +<p>The stock menus work but feel dated. Layer a modern admin menu on top for one-click kick/ban/map/slay with a searchable player list: <a href="/plugins/csb-admin-menu">CSB Admin Menu</a>. It complements the stock admin plugins rather than replacing them &mdash; it drives the same <code>amx_</code> commands through a cleaner interface, so your <code>users.ini</code> flags still govern access.</p>
34 +
35 +<h2>3. Turn on stats and ranking</h2>
36 +<p>A rank ladder is the single biggest retention feature on a public server &mdash; players return to climb. Enable the csx-based stats plugins:</p>
37 +<pre>stats.amxx ; /rank /top15 /stats
38 +statsx.amxx ; death-time HUD stats</pre>
39 +<p>These need the <code>csx</code> module running (check <code>amxx modules</code>) and store the ladder in <code>addons/amxmodx/data/csstats.dat</code>. Advertise the <code>/rank</code> and <code>/top15</code> triggers so players discover them.</p>
40 +
41 +<h2>4. Communicate: adverts and messages</h2>
42 +<p>Players need to know your rules, your website and the chat commands available. Run a rotating advert plugin instead of nagging manually: <a href="/plugins/csb-server-adverts">CSB Server Adverts</a> cycles timed messages in chat &mdash; rules, <code>/rank</code>, your Discord &mdash; on an interval you set. Pair it with a good <a href="/tutorials/setup-server-cfg-cs16">server.cfg</a> hostname and MOTD.</p>
43 +
44 +<h2>5. Keep names and connections clean</h2>
45 +<p>Public servers attract impersonation and junk names. Two light plugins pay for themselves:</p>
46 +<ul>
47 +<li><a href="/plugins/csb-name-filter">CSB Name Filter</a> &mdash; blocks empty, duplicate, offensive or admin-impersonating names at connect.</li>
48 +<li><a href="/plugins/csb-steamid-validator">CSB SteamID Validator</a> &mdash; sanity-checks the authid each player presents, useful on a non-Steam server behind <a href="/tutorials/install-reunion">Reunion</a> where a malformed id signals a spoof attempt.</li>
49 +</ul>
50 +
51 +<h2>6. Basic anti-abuse from day one</h2>
52 +<p>You do not need a heavy anti-cheat to start, but you do want the cheap exploit protection on immediately. <a href="/plugins/csb-anti-hlds-exploit">CSB Anti-HLDS-Exploit</a> blocks the well-known malformed-packet and buffer exploits that crash or hang unprotected servers. It costs almost nothing and stops the drive-by attacks every public IP eventually sees. Build the fuller anti-cheat picture later with the <a href="/tutorials/install-cs16-server-anticheat">anti-cheat options guide</a>.</p>
53 +
54 +<h2>Common errors</h2>
55 +<ul>
56 +<li><strong>A plugin is <code>bad load</code></strong> &mdash; it needs a module not enabled in <code>modules.ini</code>, or the file is missing. Check <code>amxx plugins</code> and <code>amxx modules</code>.</li>
57 +<li><strong>Menus overlap or double up</strong> &mdash; you added a custom admin menu but left a duplicate stock one bound to the same key; keep one menu front-end.</li>
58 +<li><strong>Adverts spam too fast</strong> &mdash; the advert interval is too low; space messages out so chat stays readable.</li>
59 +<li><strong>Ranks do not save</strong> &mdash; the <code>csx</code> module is off or the data folder is not writable. Fix permissions on <code>addons/amxmodx/data/</code>.</li>
60 +<li><strong>Server feels heavier after the pack</strong> &mdash; you added too much. This pack is deliberately small; resist stacking a dozen fun plugins on a competitive public.</li>
61 +</ul>
62 +
63 +<h2>Verification</h2>
64 +<p>After enabling the pack, change the map (so <code>plugins.ini</code> is re-read) and run <code>amxx plugins</code> &mdash; every entry should read <code>running</code>, none <code>bad load</code>. In-game, open the admin menu, type <code>say /rank</code> and confirm stats respond, watch an advert cycle, and try connecting with a blank name to confirm the name filter blocks it. When all of those work, you have a solid public baseline you can grow from.</p>
+49 -0 install-dproto/en.md A
@@ -0,0 +1,49 @@
1 +---
2 +title: "How to Install dproto on a CS 1.6 Server"
3 +excerpt: "Install dproto to admit non-Steam clients on an original HLDS server, configure it through dproto.cfg, and understand how it differs from Reunion on ReHLDS."
4 +category: "installation"
5 +tags: "dproto, non-steam"
6 +image: ""
7 +read_time: "8 min read"
8 +---
9 +<p>dproto is the classic way to let non-Steam clients onto an <em>original</em> HLDS server. It loads as a Metamod plugin, intercepts the authentication path, and admits clients that do not present a genuine Steam ticket &mdash; while still allowing real Steam players. On the ReHLDS engine you would use <a href="/tutorials/install-reunion">Reunion</a> instead; dproto is the tool for stock HLDS. This covers a correct install and the honest trade-offs.</p>
10 +<h2>1. Decide whether dproto is the right tool</h2>
11 +<p>Match the tool to your engine:</p>
12 +<ul>
13 +<li><strong>Original HLDS</strong> &mdash; use <strong>dproto</strong>.</li>
14 +<li><strong>ReHLDS</strong> &mdash; use <strong>Reunion</strong>, which is built for it and more actively maintained.</li>
15 +</ul>
16 +<p>Running dproto means you are deliberately leaving the <a href="/tutorials/install-cs16-steam-only-server">Steam-only</a> model &mdash; you gain a larger potential audience and lose the guarantee that every player carries a unique, genuine SteamID. Know that before you install.</p>
17 +<h2>2. Confirm Metamod is running</h2>
18 +<p>dproto is a Metamod plugin, so Metamod must already be installed. Check from the console:</p>
19 +<pre>meta list</pre>
20 +<p>If Metamod is not present, install it first &mdash; dproto has nothing to load into otherwise.</p>
21 +<h2>3. Place the dproto files</h2>
22 +<p>Put the dproto binary where Metamod plugins live. On Linux that is the <code>.so</code>; on Windows the <code>.dll</code>:</p>
23 +<pre>cstrike/addons/dproto/dproto_i386.so (Linux)
24 +cstrike/addons/dproto/dproto.dll (Windows)</pre>
25 +<p>The package also ships a <code>dproto.cfg</code>; place it in the game folder where dproto expects it (commonly <code>cstrike/</code>). Keep the config that came with your dproto version &mdash; options change between builds and mixing an old config with a new binary causes silent misbehavior.</p>
26 +<h2>4. Register dproto with Metamod</h2>
27 +<p>Add dproto to <code>addons/metamod/plugins.ini</code> so Metamod loads it. Use the correct platform line:</p>
28 +<pre>linux addons/dproto/dproto_i386.so
29 +; win32 addons/dproto/dproto.dll</pre>
30 +<p>Metamod reads <code>plugins.ini</code> at map load, so a restart or map change is required for dproto to come up.</p>
31 +<h2>5. Configure dproto.cfg</h2>
32 +<p>The behavior that matters most is <em>which client types are admitted</em>. dproto.cfg has an option that controls whether the server accepts only Steam clients, only non-Steam, or both &mdash; set it to admit both so you keep your Steam players while adding non-Steam ones. Also make sure the server is on the internet list:</p>
33 +<pre>sv_lan 0</pre>
34 +<p>Do not paste settings from a random forum config blindly; open the <code>dproto.cfg</code> that shipped with your build and read the commented option names, because they differ across dproto versions. The safe default is: accept both client types, leave the ID-generation options at their defaults unless you have a specific reason to change them.</p>
35 +<h2>6. Understand the SteamID consequence</h2>
36 +<p>Non-Steam clients do not have real Steam tickets, so dproto assigns them IDs by a configurable scheme. Depending on that scheme, non-Steam IDs can be less unique than genuine SteamIDs, which weakens SteamID-based bans and stats &mdash; two non-Steam players may end up sharing an ID. This is the core trade-off of any non-Steam patch and is covered from the server-policy side in <a href="/tutorials/make-server-accept-nonsteam">making a server accept non-Steam</a>. If integrity matters more than headcount, reconsider Steam-only.</p>
37 +<h2>7. How Steam and non-Steam coexist</h2>
38 +<p>The value of dproto over simply disabling validation is that it lets <em>both</em> populations play together. A genuine Steam client still authenticates against Steam and carries its real ID; a non-Steam client is admitted and given a generated ID. Your admin flags, ban lists and stats then span a mixed audience, which is exactly why the ID-generation scheme matters &mdash; you want non-Steam IDs stable enough that a banned player cannot trivially rejoin with a fresh identity. Read the ID options in your <code>dproto.cfg</code> and prefer a scheme that ties the generated ID to something durable about the client rather than one that changes every connection. There is no perfect answer here; a non-Steam ID is inherently weaker than a Steam-verified one, and honest server operators tell their admins to weight bans accordingly.</p>
39 +<h2>8. Keep dproto current</h2>
40 +<p>Valve's periodic updates &mdash; the 25th Anniversary update being the largest &mdash; have repeatedly changed the protocol in ways that break older non-Steam patches, causing clients to be rejected or the server to crash on start. If dproto stops admitting clients after a game update, the fix is almost always a newer dproto build compiled against the current protocol, not a config change. Because dproto targets the original HLDS engine specifically, teams running the actively-maintained ReHLDS generally migrate to <a href="/tutorials/install-reunion">Reunion</a>, which tracks engine changes more closely. Match your non-Steam tool to your engine and keep it patched.</p>
41 +<h2>Troubleshooting</h2>
42 +<ul>
43 +<li><strong>dproto not loading</strong> &mdash; the <code>plugins.ini</code> path or platform prefix is wrong. Run <code>meta list</code>; dproto should appear as running.</li>
44 +<li><strong>Non-Steam players still rejected</strong> &mdash; the client-type option in <code>dproto.cfg</code> is set to Steam-only, or the config is not being read. Verify the file location.</li>
45 +<li><strong>Server not on the internet list</strong> &mdash; <code>sv_lan 1</code>. Set it to <code>0</code>.</li>
46 +<li><strong>Crash on start after adding dproto</strong> &mdash; the binary is built for the wrong engine (you are on ReHLDS). Use <a href="/tutorials/install-reunion">Reunion</a> on ReHLDS instead.</li>
47 +</ul>
48 +<h2>Verification</h2>
49 +<p>Run <code>meta list</code> and confirm dproto shows as <code>running</code>. Then have a non-Steam client connect &mdash; it should join rather than being rejected at authentication &mdash; and confirm a genuine Steam client still connects normally. Run <code>status</code> to inspect the IDs both clients receive. If both client types join and appear in <code>status</code>, dproto is installed and admitting non-Steam players as intended.</p>
+59 -0 install-steamcmd-linux/en.md A
@@ -0,0 +1,59 @@
1 +---
2 +title: "How to Install SteamCMD on Linux for HLDS"
3 +excerpt: "Install SteamCMD on Linux and use app_update 90 to download a CS 1.6 dedicated server, including the 32-bit libraries people forget."
4 +category: "installation"
5 +tags: "steamcmd, linux"
6 +image: ""
7 +read_time: "8 min read"
8 +---
9 +<p>SteamCMD is Valve's command-line content downloader &mdash; the tool you use to install and update a Half-Life Dedicated Server (HLDS) and CS 1.6, which is Steam app <strong>90</strong>. It runs anonymously (no Steam login needed for HLDS) and is the foundation under every CS 1.6 install method, including panels and LinuxGSM. This guide installs SteamCMD on a Linux box and uses it to pull down CS 1.6.</p>
10 +<h2>1. Create a non-root user</h2>
11 +<p>Never run SteamCMD or a game server as root. Create a service account:</p>
12 +<pre>sudo adduser steam
13 +sudo su - steam</pre>
14 +<p>Do the rest as this user, in its home directory.</p>
15 +<h2>2. Install the 32-bit dependencies</h2>
16 +<p>SteamCMD and the CS 1.6 engine are 32-bit. On a 64-bit Debian/Ubuntu host you must enable the i386 architecture and install the 32-bit C runtime, or SteamCMD will not run:</p>
17 +<pre>sudo dpkg --add-architecture i386
18 +sudo apt update
19 +sudo apt install -y lib32gcc-s1 lib32stdc++6 ca-certificates</pre>
20 +<p>On older releases the package is <code>lib32gcc1</code> rather than <code>lib32gcc-s1</code>; install whichever your distro provides. On CentOS/RHEL the equivalents are <code>glibc.i686</code> and <code>libstdc++.i686</code>.</p>
21 +<h2>3. Download and extract SteamCMD</h2>
22 +<p>Fetch the official tarball from Valve's CDN and unpack it:</p>
23 +<pre>mkdir ~/steamcmd && cd ~/steamcmd
24 +wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
25 +tar -xvzf steamcmd_linux.tar.gz</pre>
26 +<p>That leaves <code>steamcmd.sh</code> in the directory. The first time you run it, SteamCMD downloads its own updates before giving you a prompt &mdash; that is normal.</p>
27 +<h2>4. Run SteamCMD and log in anonymously</h2>
28 +<pre>./steamcmd.sh</pre>
29 +<p>At the <code>Steam&gt;</code> prompt, log in anonymously &mdash; HLDS (app 90) is available without an account:</p>
30 +<pre>login anonymous</pre>
31 +<p>You should see <code>Waiting for user info...OK</code>. If it hangs here, it is almost always the missing 32-bit libraries from step 2.</p>
32 +<h2>5. Download CS 1.6 (app 90)</h2>
33 +<p>Set the install directory first, then update the app. Order matters &mdash; <code>force_install_dir</code> must come <em>before</em> <code>app_update</code>:</p>
34 +<pre>force_install_dir /home/steam/hlds
35 +app_update 90 validate
36 +quit</pre>
37 +<p><code>app_update 90 validate</code> downloads CS 1.6 and verifies every file. This is the single command at the heart of every CS 1.6 install. App 90 is known to sometimes report success with an incomplete <code>cstrike</code> folder; if that happens, run <code>app_update 90 validate</code> again &mdash; it resumes and fills the gaps rather than re-downloading everything.</p>
38 +<h2>6. Do it all in one non-interactive line</h2>
39 +<p>For scripts and cron, pass the same commands as arguments so SteamCMD runs unattended:</p>
40 +<pre>./steamcmd.sh +login anonymous +force_install_dir /home/steam/hlds +app_update 90 validate +quit</pre>
41 +<p>This is exactly what LinuxGSM and Pterodactyl eggs run under the hood. To update the server later, run the same line again &mdash; it only downloads changed files.</p>
42 +<h2>7. Keep SteamCMD and the server separate</h2>
43 +<p>Install SteamCMD in its own directory (<code>~/steamcmd</code>) and the game in another (<code>~/hlds</code>), as the commands above do. Mixing them means a SteamCMD self-update can overwrite server files, and it makes backups messier. Keeping them apart also lets you run one SteamCMD against several install directories &mdash; just change <code>force_install_dir</code> per invocation. When Valve pushes a CS 1.6 update, stop the server, re-run the non-interactive line from step 6, and start it again; because <code>validate</code> checks every file, it also repairs a server whose files were corrupted by a bad shutdown or a full disk.</p>
44 +<h2>Troubleshooting</h2>
45 +<ul>
46 +<li><strong>"steamcmd.sh: No such file or directory" though it exists</strong> &mdash; the 32-bit loader is missing. Install <code>lib32gcc-s1</code>/<code>lib32stdc++6</code>; a 32-bit binary on a 64-bit host with no i386 libs fails this way.</li>
47 +<li><strong>Hangs at "Waiting for user info..."</strong> &mdash; same missing 32-bit libraries, or no outbound network. Confirm the deps and that the host can reach Steam's CDN.</li>
48 +<li><strong>"ERROR! Failed to install app '90' (Missing file permissions)"</strong> &mdash; the install dir is not writable by the <code>steam</code> user, or you ran an earlier step as root and left root-owned files. Fix ownership with <code>chown -R steam:steam /home/steam/hlds</code>.</li>
49 +<li><strong>cstrike folder incomplete after "Success"</strong> &mdash; a known app-90 quirk. Re-run <code>app_update 90 validate</code>.</li>
50 +<li><strong><code>force_install_dir</code> ignored</strong> &mdash; you put it after <code>app_update</code>. It must come first.</li>
51 +</ul>
52 +<h2>Verification</h2>
53 +<p>Confirm the download landed:</p>
54 +<pre>ls /home/steam/hlds/hlds_run
55 +ls /home/steam/hlds/cstrike/maps/de_dust2.bsp</pre>
56 +<p>Both should exist. Then launch the server to prove the files are complete:</p>
57 +<pre>cd /home/steam/hlds
58 +./hlds_run -game cstrike +map de_dust2 +maxplayers 12</pre>
59 +<p>If it reaches <code>Console initialized</code> and loads the map, SteamCMD did its job. From here, configure the server with the full <a href="/tutorials/install-cs16-dedicated-server-linux-steamcmd">Linux dedicated-server guide</a>, or hand the whole lifecycle to <a href="/tutorials/install-linuxgsm-cs16">LinuxGSM</a>, which wraps this exact SteamCMD flow.</p>
+11 -0 what-is-metamod/en.md A
@@ -0,0 +1,11 @@
1 +---
2 +title: "What Is Metamod and Why Do You Need It?"
3 +excerpt: "Metamod is the GoldSrc plugin loader that sits between the engine and the game DLL, letting AMX Mod X and other plugins hook the mod without patching cs.so, plus how liblist.gam and plugins.ini wire it in."
4 +category: "misc"
5 +tags: "metamod, basics"
6 +image: ""
7 +read_time: "8 min read"
8 +---
9 +<p>Every guide to running an AMX Mod X server starts with &quot;install Metamod first&quot; &mdash; but rarely says what Metamod <em>is</em> or why it has to come first. Understanding it makes the whole addons stack make sense, and explains a whole class of &quot;my plugins don't load&quot; problems. Here is the plain version.</p><h2>1. The problem Metamod solves</h2><p>A GoldSrc mod like Counter-Strike is a game logic library &mdash; <code>cs.so</code> on Linux, <code>mp.dll</code> on Windows &mdash; that the engine loads and calls. Out of the box, the engine talks to exactly <em>one</em> game DLL, and that DLL implements all the gameplay. If you wanted to add admin commands, stats, or a bot, you would have to modify that DLL &mdash; and you can only have one. That does not scale: you cannot run an admin system <em>and</em> a bot <em>and</em> a stats plugin if each needs to be &quot;the game DLL.&quot;</p><h2>2. What Metamod is</h2><p><strong>Metamod is a plugin loader that inserts itself between the engine and the game DLL.</strong> The engine loads Metamod as if <em>it</em> were the game DLL; Metamod in turn loads the real game DLL (<code>cs.so</code>/<code>mp.dll</code>) plus any number of Metamod plugins. When the engine calls a game function, Metamod passes it through, but first lets every loaded plugin <strong>hook</strong> that call &mdash; inspect it, change it, or block it. This is how multiple plugins coexist: they all hook the same mod through Metamod instead of fighting to be the one game DLL.</p><p>AMX Mod X itself is a Metamod plugin. So is a bot like POD-Bot, and various other mods. Metamod is the layer that lets them all run at once on top of unmodified Counter-Strike.</p><h2>3. How it gets loaded: liblist.gam</h2><p>The engine decides which game DLL to load from <code>liblist.gam</code> in the mod folder (<code>cstrike/liblist.gam</code>). The <code>gamedll</code> line normally points at the CS game library; to insert Metamod, you point it at Metamod instead:</p><pre>gamedll "addons/metamod/dlls/metamod.dll"
10 +gamedll_linux "addons/metamod/dll/metamod_i386.so"</pre><p>Now the engine loads Metamod as the &quot;game,&quot; and Metamod loads the real CS DLL plus the plugins. (On a ReHLDS/ReGameDLL stack the game DLL path and Metamod wiring differ slightly, and Metamod-r is used &mdash; but the principle is identical.)</p><h2>4. How plugins register: plugins.ini</h2><p>Metamod reads its own plugin list from:</p><pre>cstrike/addons/metamod/plugins.ini</pre><p>Each line points at a Metamod plugin binary to load. The AMX Mod X core is listed here &mdash; for example a line loading <code>addons/amxmodx/dlls/amxmodx_mm_i386.so</code>. Note the two-level structure that confuses newcomers: <strong>Metamod's</strong> <code>plugins.ini</code> loads AMXX; then <strong>AMXX's own</strong> <code>plugins.ini</code> (in <code>addons/amxmodx/configs/</code>) loads your <code>.amxx</code> scripts. Two files with the same name, different jobs.</p><h2>5. Metamod vs Metamod-r / Metamod-P</h2><p>&quot;Metamod&quot; classically means the original loader. The community maintains updated forks &mdash; <strong>Metamod-P</strong> and the newer <strong>Metamod-r</strong> &mdash; that fix bugs and stay compatible with modern engines like ReHLDS, which matters a great deal after the <a href="/tutorials/25th-anniversary-update-recap">25th anniversary update</a>. For a modern server, install one of those rather than the ancient original; see <a href="/tutorials/install-metamod-r">installing Metamod-r</a>, <a href="/tutorials/install-metamod-p-legacy">Metamod-P (legacy)</a>, and the comparison in <a href="/tutorials/metamod-r-vs-metamod-p">Metamod-r vs Metamod-p</a>.</p><h2>Common misconceptions</h2><ul><li><strong>&quot;Metamod is the admin mod.&quot;</strong> No &mdash; Metamod loads nothing gameplay-related by itself. It is a host for plugins. AMX Mod X is the admin system, and it runs <em>as</em> a Metamod plugin.</li><li><strong>&quot;I can install AMXX without Metamod.&quot;</strong> No &mdash; AMXX is a Metamod plugin. Without Metamod loaded via <code>liblist.gam</code>, AMXX never loads.</li><li><strong>&quot;There's only one plugins.ini.&quot;</strong> There are two: Metamod's (loads AMXX) and AMXX's (loads your scripts). Editing the wrong one is a classic mistake.</li><li><strong>&quot;It modifies cs.so.&quot;</strong> It does not patch the game DLL &mdash; it wraps it. The CS library stays untouched; Metamod intercepts the engine's calls to it.</li><li><strong>&quot;Any Metamod build works on any engine.&quot;</strong> Old original Metamod can fail on modern engines. Use Metamod-r/-P on current stacks.</li></ul><h2>How to check it is working</h2><p>From the server console:</p><pre>meta list
11 +meta version</pre><p><code>meta list</code> prints every loaded Metamod plugin &mdash; you should see AMX Mod X (and any bot) in the list, each marked as running. If <code>meta</code> is an unknown command, Metamod is not loaded at all: check the <code>gamedll</code>/<code>gamedll_linux</code> lines in <code>liblist.gam</code> point at the Metamod binary. If <code>meta list</code> works but AMXX is missing, the fault is Metamod's <code>plugins.ini</code> not loading the AMXX core. Fix the loader first &mdash; nothing above it works until <code>meta list</code> shows AMXX running.</p>
0 12