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