Syncope.T-*
Published 2011. 12. 8. 19:51
[1] 소스모드? Steam/Sourcemod
728x90

자 소스모드는 TO SERVER 에 있는 글 맨 마지막에 읽어보시면 다운로드 사이트와 허접한 설명이 있습니다

바로 코딩에 대해 넘어 가 볼까요?

우선적으로 소스모드의 언어는 C++ 를 사용한 Pawn 언어 이기때문에 꽤나 쉬울지도 모릅니다.

무조건 적으로는 아니지만 스크립팅 할때엔 맨 윗줄에다 이것을 적어주세요

#include <sourcemod>
#include <sdktools>

이게 뭐냐고요? 여튼 Include 에 먼저 집고 넘어가야 할 것 같습니다. Include 의 정의는 영어 단어 해석으로 풀이하자면

'포함한다' 라는 뜻이지만 Import 에 뜻으로도 써도 좋습니다. 불러온다는 말이죠. Inc 폴더에 있는 헤더파일같이 말이죠.

헤더파일은 음.. 보조 파일 이라고 생각하면 될겁니다. 미리 써 둔걸 불러온다는거죠. 자 이쯤 설명하고 밑줄로

// 플러그인 정보

public Plugin:myinfo =
{
name = "플러그인 이름",
author = "제작자",
description = "플러그인 설명",
version = "1.0",
url = "http://sourcemod.net"
}

자기 나름대로 써서 꾸며주시면 좋겠습니다. 코드를 배포할때 가장 중요한 부분이기도 하니깐요.

Public이란게 뭘까요? ES 에선 Event 로 받아 들여주세요 한 이벤트라는 겁니다. VC에서도 public을 쓰죠? ㅋ

어떤 상황이 발생하는 구간의 바구니 라고 생각 해 주세요.

우선 플러그인이 시작할 때! 라는 구문을 보도록 합시다.

초록색주석

주석이란 ? : 프로그램 개발자 팀들이 서로 코드를 알아볼 수 있게 적어놓는 설명이나 같은겁니다.

public OnPluginStart()
{
// 여기에 내용을 써 주세요.
}

말 그대로 플러그인이 시작할 때 입니다. 여기다 후크 이벤트나 다른 이벤트로 이동할때 많이 넣어두는곳이지요 ES에선 Block Load 쯤으로 인식 해 두시면 좋습니다.

이번 시간엔 간단히 서버 접속시 환영 메시지를 띄우는 걸로 마치도록 해 봅시다 그 와중 Hook 이벤트란게 뭔지도 살펴보구요 뭐 Timer도 배우도록 합시다.


#include <sourcemod>
#include <sdktools>

new godmode[MAXPLAYERS+1];

// 개인 변수르 주기위한 TEMP입니다. 뒤에 원래 비트값을 넣어야하는데 편하게 최대인원수+1 로 지정했지요.

public Plugin:myinfo =
{
name = "MSG!",
author = "D_Duck",
description = "Send to player to show message when he comes into server.",
version = "1.0",
url = "http://sourcemod.net"
}

public OnPluginStart()
{
RegConsoleCmd("say", Command_say); // Say 라는건 Console Command 중 하나로 그냥 채팅을 말하죠
RegConsoleCmd("say_team", Command_say); // 팀 채팅을 했을 시에 라는 말입니다 ^^
HookEvent("player_spawn", Event_PlayerSpawn); // 플레이어가 스폰 했을 시에 뜨는 이벤트를 추가 시켜주는 구문입니다.
}
public Action:Event_PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) // Event 를 넘어왔군요
{
new Client = GetClientOfUserId(GetEventInt(event, "userid")); // Client 란 변수에 유저아이디를 생성합니다.
godmode[Client] = 1; // 그리고 그 클라이언트에게 godmode란 개인변수의 값을 1로 지정하구요
SetGodmode(Client); // 그 클라이언트를 SetGodmode 라는 이벤트로 이동해 줍니다.
CreateTimer(5.0, remove, Client); // Timer를 설정합니다. Delaye 라고 보셔도 상관없습니다 5초뒤에 remove로 이동합니다
PrintToChat(Client, "5초간 보호가 됩니다."); // es_tell 로 메시지를 그 유저에게만 보내줍니다.
}
public SetGodmode(Client) // SetGodmode란 이벤트 안입니다 뭘 하는지 봅시다
{
if(godmode[Client] == 1) // godmode 라는 개인벼수를 받은 유저의 값이 1인지 아닌지 확인 해 주죠
{
SetEntProp(Client, Prop_Data, "m_takedamage", 0, 1); // 여기는 무적 코드라서 괜히 외우시고 다니실 필요없습니다
}else{ // 여기서 왜 {} 구분을 안해주시냐 하는데 Pawn 에서는 그런걸 신경쓰지않더라구요 ㅋ
SetEntProp(Client, Prop_Data, "m_takedamage", 2, 1); // godmode 가 1이 아니면은 원래 상태로 되돌린다는 겁니다.
}

return; // 초기화.
}
public Action:remove(Handle:Timer, any:Client) // remove 라는 이벤트에 왓군요.
{
godmode[Client] = 0; // 개인변수를 0 으로 지정합니다 뭐 무적을 줬다가 5초뒤에 뺏는거니 말이죠.
SetGodmode(Client); // 다시 Godmode로 이동하면 0 이였을때 무적을푸는거니 이제 풀게 되겠죠
}

public OnClientPutInServer(Client) // 유저가 게임에 접속하였을때 라는 말입니다.
{
CreateTimer(20.0, Load, Client); // 20초 뒤에 Load 라는 이벤트로 이동시킨답니다.

decl String:gip[26]; // String 이란 데이터 값은 실수인데 가장 큰 값입니다. gip 라는 곳에다 변수를 새로 만들어 주었군요
new String:name[64];
new String:GetId[21];

/* 여기서부터 밑까지는 모두 입장 유저의 이름과 아이피, 고유번호를 구해서 채팅창으로 보내주는걸 합니다
GetClientName(Client,name, 64);
GetClientIP(Client, gip, sizeof(gip));
GetClientAuthString(Client, GetId, sizeof(GetId));
PrintToChatAll("[Duck] %s : %s | %s", name, gip, GetId); // PrintToChatAll 은 모두 에게 보내는 MSG 와 같습니다

*/
}
// 이건 플레이어가 나갔을때.

public OnClientDisconnect(Client)
{
decl String:gip[26];
new String:name[64];
new String:GetId[21];
GetClientName(Client,name, 64);
GetClientIP(Client, gip, sizeof(gip));
GetClientAuthString(Client, GetId, sizeof(GetId));
PrintToChatAll("[Duck] %s : %s | %s", name, gip, GetId);
}

// 자 드디어 Load 라는곳에 왔군요 게임에 입장 뒤 20초 뒤에 보내는 메시지 입니다.

public Action:Load(Handle:Timer, any:Client)
{
new String:GetName[64];
GetClientName(Client,GetName, 64);
PrintToChat(Client, "\x04[Duck]\x03 %s \x01 님 서버에 오신것을 환영합니다 " , GetName);
PrintToChat(Client, "\x04[Duck]\x01!명령어 와 !공지 로 커맨드를 확인하세요." , GetName);
// Command_Notice(Client); // 이건 보류 2강에서 설명 .
}

profile

Syncope.T-*

@Syncope

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...