アドオンのフォルダーを開く
まず garrysmod/addons/welcome を自分で作成し、そのフォルダーを作業フォルダーに選びます。
自分のサーバーで使う !hello チャットコマンドは、役に立つ最小のアドオンです。サーバー側の 1 つのファイルで書く、ごく普通の GMod Lua スクリプトで、空のフォルダーからテスト済みの結果まで GMod アドオンを作る流れが分かります。書くのはエージェント、確認するのはあなたです。
まず garrysmod/addons/welcome を自分で作成し、そのフォルダーを作業フォルダーに選びます。
アドオンにやってほしいことを普通の言葉で書きます。たとえば、!hello チャットコマンドにプレイヤー名で返事をする、などです。
Ask first で作業します。sv_welcome.lua のファイルカードと diff を読んで、Accept か Reject を押します。
ローカルのテストサーバーでマルチプレイヤーゲームを始めて参加し、チャットでコマンドを入力して、完了とする前にコンソールの Lua エラーを確認します。
lua/autorun/server作成しましたlua/autorun/server/sv_welcome.lua保存しましたlua/autorun/server/sv_welcome.lua12 行PlayerSay一致 1 件your server launch scriptexit 0-- sv_welcome.lua: answer the !hello chat command
-- Runs on the server only (lua/autorun/server/).
local command = "!hello"
hook.Add("PlayerSay", "Welcome_Hello", function(ply, text)
if string.lower(text) == command then
local name = ply:Nick()
ply:ChatPrint(string.format("Hello, %s!", name))
return ""
end
end)サーバー側のみです。hook.Add が関数を PlayerSay に結び付け、string.lower が大文字小文字を無視して照合し、ChatPrint がそのプレイヤーにあいさつを表示し、空文字列が入力されたコマンドをチャットから隠します。
次は scripted weapon を追加します。武器は lua/weapons/ に置くので、エージェントにそこへ 1 つのファイルを作らせ、設定した各フィールドを説明してもらいます。たとえば、手動式の大砲と迫撃砲のモッドは、scripted weapon にも scripted entity にもでき、その挙動は普通の言葉で説明します。エージェントは新しいファイルに write_file、クラス名の出現箇所を示すのに grep、テストコマンドに Shell を使います。Plan only モードなら、保存の前にすべてのファイルを一覧にします。そのあと gm_flatgrass でスポーンし、コンソールのエラーを読みます。
プレイヤーはあなたの PC ではなく、サーバーからアドオンをダウンロードします。モッドを手動で全部インストールしてもらう手間を省く手軽な方法が、Workshop コレクション、またはサーバーの Lua ファイルに resource.AddWorkshop の行を書くことです。resource.AddWorkshop は公開済みアイテムの ID を取るので、自作のアドオンを先に Workshop に公開しておく必要があります。公開してよいコンテンツだけを公開してください。エージェントに edit_file で行を追加させ、diff を確認します。GMod のテストサーバーでプレイヤーに Workshop アドオンがダウンロードされないときは、まず resource.AddWorkshop を grep で探します。そのあとサーバーを再起動し、プレイヤーとして参加してダウンロードを確かめます。