CCodelab Station
워크플로

GMod 애드온 만드는 법을 단계별로

03
첫 애드온

채팅 명령 애드온을 처음부터 끝까지

내 서버에서 쓰는 !hello 채팅 명령이 가장 작은 쓸모 있는 애드온이에요. 서버 쪽 파일 1개로 작성하는 평범한 GMod Lua 스크립트이고, 빈 폴더에서 테스트를 마친 결과까지 GMod 애드온을 만드는 과정을 보여줘요. 쓰는 건 에이전트, 검토는 내가 해요.

01

애드온 폴더 열기

먼저 garrysmod/addons/welcome을 직접 만든 다음, 그 폴더를 작업 폴더로 선택해요.

02

할 일 설명하기

애드온이 해야 할 일을 쉬운 말로 적어요. 예를 들면 !hello 채팅 명령에 플레이어 이름으로 답하기예요.

03

diff 검토하기

Ask first로 작업해요. sv_welcome.lua의 파일 카드와 diff를 읽고 Accept 또는 Reject를 눌러요.

04

게임에서 테스트하기

로컬 테스트 서버에서 멀티플레이 게임을 시작해 접속하고, 채팅에 명령을 입력한 뒤, 끝났다고 하기 전에 콘솔에서 Lua 오류를 읽어요.

에이전트가 쓰는 파일

lua/autorun/server/sv_welcome.lua
-- 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 추가하기

다음으로 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으로 찾아요. 그다음 서버를 재시작하고 플레이어로 접속해서 다운로드를 확인해요.

Windows용 Codelab Station

첫 애드온을 만들어 보세요

Codelab Station 다운로드 ↗