posted by WizardMania 2014. 10. 21. 17:36

선분과 점의 최단점(가장가까운점) 구하기


선분은 광선(직선)과의 차이점은 시작점과 끝점이 존재한다는 것이다.


그래서 3가지 상황을 고려해봐야 한다.


선분 양끝점을P0, P1 이라하고 임의의점 Q0, Q1, Q2가 있다고 가정하자.


광선에서 가까운점을 구할때처럼 투영해서 나온 위치를 찾는다고 한다면, Q0의 경우 선분 사이의 점이 아니게 된다.

따라서 Q0의 경우 선분위의 가장가까운점은 투영한위치의 점이 아니라 P0라고 할 수 있다.


Q1의 경우 투영한 위치에 해당하는점이 선분위에 존재함으로 광선의 경우와 같이 투영한위치의 점이 가장 가까운점 이다.


Q2의 경우 투영한위치가 선분밖에 있으므로 가장가까운점은 P1이라고 할 수 있다.


그렇다면 임의의점과 선분상의 가장가까운 점이 선분위에 있을지 밖에 있을지를 어떻게 판단 할 것인지 알아보자.

먼저 임의의점과 선분의점(P0)의 방향 벡터W를 구한다.

또한 P0과 P1의 방향벡터를 V라 하자


Q0 의 경우 선분의점(P0)과 Q0의 방향벡터 w1을 구할수 있다. (Q1 - P0)

w1과 V를 내적하게 되면 내적값은 0이하가 나올것이다. (두벡터의 각도가 90도를 넘기때문에)

따라서 W와 V를 내적한값이 0이하라면 선분의 바깥(왼편)에 있다고 할수있다.


Q1 의 경우도 마찬가지로 w2와 v를 내적해보면 나오는값이 0보다 클것이다.

여기서 한번더 고려해봐야 될 것이 임의의점이Q2일경우 여기서구한 w3벡터 또한 내적할시 0보다 클것이다.

그래서 임의의점이 P1의 범위가 넘어갔는지 어떻게 판단 할 것 인가를 생각해 봐야 한다.


W와 V를 내적한값이 V벡터의 길이제곱보다 크다면 해당점은 P1범위를 넘어갔다고 할 수 있다.

 

선분과 점의 최단거리(가장가까운 거리) 구하기


세가지 상황을 고려하여 최단점을 구했다면 거리도 쉽게 구할 수 있다.


'프로그래밍 > 수학, 물리' 카테고리의 다른 글

광선 vs 구 교차판정  (0) 2014.10.27
선분 선분 최단점과 최단거리  (1) 2014.10.22
광선 점 최단점과 최단거리  (0) 2014.10.20
구 vs 구 교차판정  (0) 2014.10.20
벡터 투영  (0) 2014.10.20
posted by WizardMania 2014. 10. 20. 14:31

광선과 점의 최단점(가장가까운점) 구하기

광선의 시작점 O 광선의 방향 D 벡터라 할때 점P와 가장가까운 광선위의 점을 구하는 방법


W벡터를 구한뒤 벡터 투영을 이용하면 구할 수 있다.

광선의 시작점과 투영된 벡터를 더하면 P'를 구할 수 있다.




 D가 단위벡터라면 |D|제곱은 생략 가능하다.


광선은 반직선이므로 투영된 위치의 점이 위와 같이 광선 범위 안에 있지 않다면

가장 가까운점은 광선의 시작점 O가 될 것이다.


값이 0보다 작을때 광선범위 밖의 점이 될 것이다.



광선과 점의 최단거리(가장가까운 거리) 구하기


P' 벡터를 구했다면 P에서 P'로가는 벡터의 거리를 구할수 있으므로 쉽게 거리를 구할 수 있다.


또는

피타고라스 정리를 이용하여 구할 수 도 있다.



 벡터 길이의 제곱은 그벡터를 내적한 값과 같다.


가까운 점을 구할때와 마찬가지로 값이 0보다 작을때 광선범위 밖의 점이 될 것이다.

따라서 광선의 시작점 과 임의의점을 연결한 벡터 W의 길이가 최단거리가 된다.





'프로그래밍 > 수학, 물리' 카테고리의 다른 글

광선 vs 구 교차판정  (0) 2014.10.27
선분 선분 최단점과 최단거리  (1) 2014.10.22
선분 점 최단점과 최단거리  (0) 2014.10.21
구 vs 구 교차판정  (0) 2014.10.20
벡터 투영  (0) 2014.10.20
posted by WizardMania 2014. 10. 20. 13:32

구와구의 교차판정은 2차원의 원과원의 교차판정에서 축이 하나더 늘었다고 생각하면된다.

두 구 중심사이의 거리가 각 구의 반지름을 더한값보다 크다면 교차안함, 같다면 딱붙은상태, 작다면 교차함 이라 할 수 있다.



구의 거리를 구하는 방법은 피타고라스정리로 간단히 구할수 있다.



또는

A B 방향 벡터를 구하여 거리를 구할수도 있다. A구의 센터가 Ca B구의 센터가 Cb라고 한다면




거리를 구했다면 거리와 A B 반지름 합을 비교하면 교차여부를 판별할 수 있다.


구와구의 교차는 간단한 수식인만큼 빠른 교차판정이 가능하다.


※ 제곱근 연산은 연산시간이 걸리는 편에 속하므로 제곱근을 하지않고 A B 반지름 합을 제곱하여 비교하면 연산량을 줄일수가 있다. 




'프로그래밍 > 수학, 물리' 카테고리의 다른 글

광선 vs 구 교차판정  (0) 2014.10.27
선분 선분 최단점과 최단거리  (1) 2014.10.22
선분 점 최단점과 최단거리  (0) 2014.10.21
광선 점 최단점과 최단거리  (0) 2014.10.20
벡터 투영  (0) 2014.10.20
posted by WizardMania 2014. 10. 20. 13:30

두벡터 A B가 존재할 시 A벡터를 B에 투영한 Proj 벡터를 구하는방법


일단 벡터의 내적부터 살펴보면

벡터의 내적 : A · B = |A||B|cosθ  (A벡터 길이 * B벡터 길이  * cosθ )

 θ 는 두벡터의 각도 이다


투영 벡터의 길이



B벡터의 단위 벡터


투영벡터의 길이에 B벡터의 단위벡터를 곱하면 투영 벡터를 구할 수 있다.



B벡터가 단위벡터(길이가1인벡터)라면 


로 구할수 있다.


'프로그래밍 > 수학, 물리' 카테고리의 다른 글

광선 vs 구 교차판정  (0) 2014.10.27
선분 선분 최단점과 최단거리  (1) 2014.10.22
선분 점 최단점과 최단거리  (0) 2014.10.21
광선 점 최단점과 최단거리  (0) 2014.10.20
구 vs 구 교차판정  (0) 2014.10.20
posted by WizardMania 2014. 2. 17. 10:21

MADCORE



posted by WizardMania 2014. 2. 17. 10:19
배고프냥




그래픽





   

 

    

 


 



프로그래밍


GameTool : 3DMax에서 만든 FBX파일을 Mesh파일로 변환하고변환한 Object들을 큰 맵에 배치함에 효율을 높이기 위해 DirectX를 이용해서 프로젝트 기간 초기에는 툴 제작에 비중을 높였다.

 

 

로그인 : 로그인 버튼은 IME UI를 이용하여 만들었고이미지 처리는 모두 Sprite를 이용하였다. ID Password IME UI를 쓰지 않고 직접 BoundingBox( 충돌체크 박스 )처리하여 클릭 시 입력 할 수 있게 만들었고문자는 모두 string형식으로 받아와 서버로 넘겨주도록 했다클라이언트에서 입력받은 ID Password를 서버에서 확인하고서버에 미리 저장되어있는 ID Password와 비교 후 로그인 처리를 하도록 구현 하였다.

 

로비 : 이미지 처리는 로그인과 마찬가지로 레디 버튼과 채팅 창은 IME UI로 구현 하였고나머지는 Sprite를 이용하였다캐릭터 선택은 BoundingBox처리하였고적 인원수와 로비 대기시간 출력캐릭터 위에 나타나는 각각의 ID Font로 나타냈다.




충돌체크 : 캐릭터와 캐릭터 끼리는 Sphere VS Sphere( 구와 구 )충돌체크를 하였고,미끄러짐 벡터를 적용시켜 서로 부딫히면 미끄러지게 구현하였다. 캐릭터와 건물 끼리는 Sphere VS BoundingBox ( 구와 충돌박스 )충돌체크를 하였다. 맵 안의 건물 BoundingBox Tool에서 좌표값을 입력하여 직접 씌웠다. 캐릭터의 위치가 배경 오브젝트에 겹쳐지는 상황이 발생해서는 안되므로 OBB(Oriented Object Box : 물체를 감싸는 방향성 있는 박스를 사용) 로 배경 메시에 박스를 씌운 다음 그 OBB좌표에 맞춰서 평면을 만들어서 OBB 상자에 붙여 점과 평면 사이의 충돌판정으로 기본적인 충돌을 처리 하였다.

 

인공지능 : 몬스터가 위치한 곳에 큰 Sphere를 씌워 캐릭터가 그 Sphere 안으로 들어오면 몬스터는 제일 먼저 들어온 캐릭터의 좌표를 따라가도록 구현하였다.


스킬 : 각각 캐릭터 타입마다 세 개씩 스킬 함수를 만들었으며스킬 1,2,3키를 누르면 해당 스킬 함수를 호출하게 된다모든 스킬은 Player클래스에서 플레이어 캐릭터 타입에 따라 항상 스킬 사용을 체크하는 함수를 구현하여 각 스킬의 지속시간과 사용시간을 확인하도록 하였다또한 각 스킬에 해당하는 충돌 처리 부분은 충돌 처리하는 클래스인 GameCollision 구현하여  클래스 에서 처리한다.

 

버프 : 보스 몬스터를 죽였을 시에 거점지가 해당 팀의 점령지가 되며 팀 내의 거점지 점령 수에 따라서 버프가 최대 3개가 생성된다거점지의 수에 따라 Player 클래스 에서 버프를 체크하여 버프 이펙트와 능력치가 적용되도록 하였다.


 

사운드 : FMOD 라이브러리를 사용해서 SoundMgr(사운드 관리 클래스)를 만들어 사운드를 구현하였다. 플레이어가 위치한 곳에서 멀어질수록 소리가 작아지도록 구현하였다. 미리 사운드파일 목록을 작성하여 초기화 과정에서 사운드를 저장시킨 다음 사운드가 필요할 때마다 사운드 매니저의 Play()함수를 호출하여 해당 사운드의 enum값을 입력해 사운드를 출력하는 방식이다. 전체 배경음악 같은 경우엔 계속 반복재생이 이루어져야 하기 때문에FMOD_LOOP_NORMAL 옵션을 설정하였다.

이펙트 : 이펙트 Mesh를 가져와서 DirectX 디바이스에 SetRenderState  그리기 옵션을설정하여 해당위치에 적용하여 나타내었으며, 이미지를 이용하여 만든 이펙트는 빌보드를 사용하여 항상 유저의 화면에 정면에서 보이도록 구현하였다.



셰이더, 그림자 : 3D 게임프로그래밍, Directx9를 이용한 3D GAME 프로그래밍 입문, 셰이더 프로그래밍 입문, 책들을 참조하여 캐릭터의 라이팅과 실시간 그림자를 그림자는 케릭터와 건물등 오브젝트를 그리기전에 그림자가 그려질 오브젝트들을 텍스쳐에 그린후 모두 같이 그려지도록 구현 하였다.



posted by WizardMania 2014. 2. 17. 10:12

War of The Gods


게임 설명

게임시간은 단 10분! 10분 안에 제단을 더 많이 차지해라!

10분이 지나기전에 제단 7개를 모두 차지 할 경우 바로 승리를 거머쥔다!

제단을 차지해도 일정시간이 지나면 다시 비활성화 되니, 역전의 기회를 노려라!

제단이 비활성화 되는 시간은 시간이 지남에 따라 증가 한다!

동점으로 끝날경우 SUDDEN DEATH타임이 돌아온다! 고로 무조건 승패는 가려진다!

SUDDEN DEATH타임 때 무조건 1킬을 먼저 따는 팀이 승리!




그래픽










프로그래밍


Server : 클라이언트에서 보낸 패킷을 받아서 서버에서는 모든 유저에게 패킷을 보내고 서버에서는 채팅 및 공격판정등을 구현


Client : 게임화면을 State패턴을 사용하여 Scene이 변경될 때 변경되는 Scene으로 교체를 해주고 Command를 사용하였는데 이것은 서버에서 보내는 패킷을 처리하는 별도의 쓰레드를 사용하며 별도의 쓰레드에서 메인쓰레드로 정보전달하여 사용.

캐릭터에 필요한 데이터는 캐릭터쪽에 넣고, 제단에 필요한 데이터는 제단쪽에 넣어서 사용.


Tool : Tool에서는 MAX에서 변환한 FBXmesh로 전환 및 OBB, AABB박스를 씌울수 있으며 캐릭터의 경우 mesh파일로 전환한 뒤 char파일로 변환하여 char파일에서 무기와 캐릭터의 OBB, ABB를 처리하였고 Map의 경우에는 mesh파일로 전환한 뒤에 각 Map에 들어갈 object를 추가하여 배치를 다하면 .map파일로 저장하여 사용.


1) 서버구현

서버의 시작 및 종료 상태를 표시하며 Client의 채팅을 받고 각 Client에 보내는 역할을 하며게임에 필요한 패킷을 주고 받으며 게임을 실행시키는 역할을 한다.

UID : 서버에 접속한 클라이언트에 번호를 부여하고 보여주는 역할

ID : 각 클라이언의 입력한 ID.

IP : 접속한 클라이언의 IP를 표시.

HOST : 접속한 ClientHOST인지 체크하여 상태를 표시하며 게임룸에서 HOST가 게임 시작할수 있는 역할을 함.

READY: HOST 다음으로 접속한 Client이며 게임 실행이 가능한지 상태를 표시.


2) 콤보, 리스폰 UI 및 리스폰, 무적, 제단 이펙트

콤보는 플레이어가 일정시간에 상대 플레이어를 피격시킬 경우 이어가는 것으로 코드를 작성하였으며 플레이어가 사망시 리스폰게이지가 나오면서 10초가 경과 뒤에 시작한 위치에서 리스폰이 되며 이때 나오는 이펙트가 있으며 PVP게임 특성상 바로 싸움이 일어나서 다시 죽는 것을 방지하여 무적이펙트를 넣어서 3초 동안의 무적을 주는 것으로 함.


3) 스킬

치우의 스킬 같은 경우 Sphere을 사용하여 범위내에 있으면 타격판정이 들어가며 포세이돈의 경우에는 스킬이펙트에 OBB를 사용, 에로스의 경우 바닥부분에 Sphere사용, 호루스의 경우 이펙트에 OBB, 발키리의 경우에는 무기의 OBB로 충돌체크를 하였으며 오공의 경우 Sphere를 사용하였음.


4) GameTool

Tool에서는 Max 작업한 뒤 Fbx로 변환한 파일을 불러온 뒤 mesh파일로 변환하고 캐릭터의 경우 fbx파일을 불러와서 애니메이션이 있는 fbx를 추가하여 mesh파일로 변환하거나 아니면 모두 mesh파일로 변환한 뒤에 애니메이션을 추가를 하고 이 캐릭터 파일을 char파일로 추가한 뒤에 캐릭터의 몸 OBB와 무기에 OBB영역을 구하고 저장을 하면 이 char파일을 이용해서 게임에서 CollisionCheck를 해준다.

Field작업 또한 기본적인 것은 같으나 mesh로 변환한 파일을 하나씩 불러와서 오브젝트 추가를 한 뒤 위치에 맞게 좌표를 입력하여 이동을 시키고 scale을 변형시키게 되면 따로 충돌오브젝트를 추가하여 박스를 크기에 맞게 씌워준다 그리고 또한 오브젝트들의 Rate를 변형 시킬수 있어서 맵디자이너가 위치하고 싶은 곳에 위치를 해놓았다가 오브젝트의 각도를 조정하여 맵에 매치를 시키게 했으며 맵 배치가 끝나면 파일명을 .map로 하였음.






posted by WizardMania 2013. 6. 5. 18:52

윈도우에 사용되는 소켓은 윈속이라 하며 사용을 위해서는 winsock2.h 파일이 인클루드 되어야한다.

#include <winsock2.h>


또한 ws2_32.lib 라이브러리를 링크 시켜야한다. 링크방법은

소스코드에 #pragma comment( lib, "ws2_32.lib ) 추가하거나, 프로젝트속성 -> 구성속성 -> 링커 -> 입력 -> 추가종속성에 

ws2_32.lib 를 적어준다.


※주의사항

winsock2.h와 windows.h를 동시에 인클루드할시 문제가 발생할 수 있다.

해결방법은 windows.h보다 winsock.h를 먼저 인클루드하면 해결이 된다.




윈속초기화


윈속 프로그래밍시 반드시 WSAStartup으로 윈속의 버전전달과 초기화 작업이 필요하다.


int WSAStartup(

  _In_   WORD wVersionRequested,
  _Out_  LPWSADATA lpWSAData
);

wVersionRequested : 초기화할 윈속의 버전 

WORD형으로 상위바이트에 부버전정보 상위바이트에 주버전 정보가 들어간다.

MAKEWORD 매크로함수를 이용하면된다. MAKEWORD( 2, 2 ) 주버전 2 부버전 2


lpWSAData : WSADATA 구조체 주소 를 전달, 함수호출후 초기화된 라이브러리의 정보가 채워짐


반환값 : 성공시0, 실패시 0이아닌 값 (에러코드)


윈속해제


윈속 사용이 끝나고 WSACleanup을 호출하여 해제를 해야한다.


int WSACleanup(void);


반환값 : 성송시0, 실패시 SOCKET_ERROR




posted by WizardMania 2013. 5. 30. 16:53

CWinApp


WIN32API에서 시작점인 WinMain 함수가 사라지고 CWinApp( 혹은 CWinAppEx )가 대신한다.


프로젝트명.cpp에 CWinApp를 상속하는 클래스가 작성되어있다

또한 전역객체가 선언되어있는 것을 확인할수 있다.


CWinApp클래스는 응용프로그램 자체를 의미하는 클래스라 할 수 있다.


프로그램의 시작과 종료, 메인 프레임 윈도우 생성, 메세지 루프등 윈도우 응용프로그램에 있어야될 기본적인 동작들을 하도록 해준다.


기본적인 멤버함수

InitInstance() : 프로그램 시작 시점에 호출된다.

ExitInstance() : 프로그램 종료 시점에 호출된다.

Run() : 메시지 루프


InitInstance 는 기본코드에서 재정의되어 사용되고 있으며 다른함수들은 추가적인 기능이 필요할 경우 재정의를 하면된다. 


CFrameWnd


최상위 프레임 윈도우에 해당하는 클래스.

윈도우의 크기,위치,상태 등의 조절.

메뉴,툴바,상태바등을 생성.


CDocument


문서와 관련된 처리를 하는 클래스.








posted by WizardMania 2013. 4. 15. 10:09

일반적으로 const는 해당 변수를 상수화 한다고한다. (값의 변경 불가)

하지만 쓰이는 곳에따라 의미가 조금씩 다르다고 할 수 있다.




기본자료형 변수 에서의 const


const int num = 10;

num 변수는 상수화 되어 다른값의 대입이 불가능 하다.

num = 20; 같은 대입이 불가능하다. (값을 가져와 쓰는것만 가능하다.)


변수 생성과 동시에 값이 초기화 되어야한다.


const int num;           // 불가능 초기화값이 존재하지 않는다.

const int num = 20;    // 가능 초기화값이 존재한다.




포인터 에서의 const


const가 포인터 앞에붙냐 뒤에붙냐에 따라 나뉘게 된다.


const int* pNum = &num;

pNum 변수를 참조해서 값의변경이 불가능 하다.

*pNum = 10; 불가

num변수를이용하여 값을 변경 하는것은 가능하다.

num = 10; 가능


int* const pNum = &num;

포인터 변수 pNum에 다른 주소값으로 변경이 불가능 하다.

pNum  = &num2; 불가

pNum 변수를 참조해서 값의 변경은 가능

*pNum = 20; 가능


물론 위의 두개를 동시에 사용할 수 도 있다. (위두가지 특성을 모두 가지게 된다)

const int* const pNum = &num;




예제 클래스

class SimpleClass
{
public:
	int num1;
	int num2;

	SimpleClass()
		: num1( 0 ), num2( 0 )
	{
	}

	int Function1()
	{
		num1 += 10;
		return num1;
	}

	int Function2() const
	{
		// 이함수 내에서 멤버변수의 변경 불가
		return num2;
	}
};

const 멤버함수


class의 const 멤버함수는 함수내에서 멤버변수의 값이 변경되는것을 막는다.

또한 외부에서 멤버변수의 변경가능성이 존재하는 포인터, 레퍼런스로 리턴하는것도 불가능 하다. 

함수이름 뒤쪽에 const를 붙여준다.


int Function2() const 

{

return num2;

}


다음과 같은 멤버변수 변경이 불가능 하다.

int Function2() const 

{

num2 += 10;    // 불가능

return num2;

}


객체에서의 const


const 객체는 멤버변수 값의 변경이 불가능하며 const 멤버 함수만 호출 가능 하다.


const SimpleClass* simple1 = new SimpleClass;

simple1->Function1()  // 불가능

simple1->Function2()  // 가능

simple1->num1 = 10;   // 불가능




mutable


해당멤버 변수는 const멤버함수 내에서의 값의 변경이 허용된다.

멤버변수 num2 가 mutable int num2; 으로 선언되어있다면  불가능 했던 아래코드가 가능하다.

int Function2() const 

{

num2 += 10;    // 가능

return num2;

}


const 함수가 무의미해질 수 있기 때문에 특별한 경우가 아니라면 사용을 안하는 것이 좋다.




const_cast


c++에서 추가된 형변환 연산자이다.


포인터와 참조자의 const를 제거 하는 목적으로 사용된다.

const 를 사용하게되면 위에서봤던 제약조건들이 생기게된다.

유일하게 const_cast로 const 성향을 없애줄 수 있다.


const SimpleClass* simple1 = new SimpleClass;

SimpleClass* simple2 = const_cast<SimpleClass*>(simple1);    // const가 제거된다

simple2->Function1();    // const가 제거되었기 때문에 const멤버함수가 아닌 함수도 호출가능

simple2->num1 = 5;        // const가 제거되었기 때문에 public 멤버 변경가능


무분별한 사용은 const를 무의미하게 하기때문에 특별한 용도로만 쓰는 것이 좋다.




const의 중요성


posted by WizardMania 2010. 9. 1. 00:19


역활에 따른 분류

탱커 (Tanker)
힐러와 함께 파티의 주축을 구성하는 클래스.
게임내 높은 체력과 방어력을 가졌으며 어그로를 끌어올수있는 스킬(타운트 스킬)을 보유한다.
대부분 한손무기와 방패를 착용하며, 몹이 다른파티원에게 공격하지 못하게 어그로 관리가 중요하다. 
한파티내에 탱커가 둘이상이면 메인탱커 서브탱커로 분류하기도 한다.
또한 방어력은 탱커보다 떨어지나 뎀딜이나 보조능력을 높인 서브탱커만 할수있는 클래스가 존재하기도 한다.

힐러 (Healer)
탱커와 힐러는 일반적인 파티의 기본구성 클래스라 할수있다.
일반적으로 다수의 HP회복스킬을 가지며 파티원의 각종 능력을 올려주는 버프도 다수보유한다.
힐러의 생존이 파티의 생존을 좌우하므로 파티플레이시 가장 중요한 클래스라 할수있다. 

데미지 딜러 (Damage Dealer)
줄여서 딜러 라고도 부르며, 강한 공격력으로 탱커가 탱킹하고있는 몹을 빠르게 잡는 역활을 한다.
일반적으로 원거리형 데미지 딜러는 마법사류, 활을사용하는 아쳐계열등이 있으며 접근형 데미지딜러는 어쎄신류 또는 쌍수나 양손무기를 쓰는 클래스 등을 칭한다.

누커 (Nuker)
강력한 공격력을 가진클래스를 지칭하며 데미지 딜러 이상급을 말한다.
보통 마법사류를 다른 데미지딜러와 차별하여 누커라 부르는 경우가 많다.

밀리 (Melee)
접근전을 하는 클래스를 총칭

캐스터 (Caster)
마법을 사용하는 클래스를 총칭

하이브리드 (Hybrid)
접근전과 마법을 같이 보유한 클래스를 총칭


행동, 사냥 관련

어그로(aggro)
몹의 화남정도.
일반적인 사냥에서 어그로 수치가 가장높은 플레이어에게 몹이 공격하게된다.
어그로수치는 몹이 받은데미지, 타운트스킬로 인한증가, 자신을 공격하는 플레이어에게 힐을 한 수치등으로 인해 오르게된다.
어그로는 파티플레이시 각 클래스간의 역활분담을 되게 하는 가장 기본적인 시스템이라 할수있다.
탱커는 몬스터가 자신을 공격하도록 어그로를 끌어와야하며(타운트), 다른클래스들은 자신이 공격받지않도록 어그로 관리를 해야한다.
딜링이 너무강해 자신한테 몹이붙는경우 오버딜, 힐링이 강할경우 오버힐 이라고 부른다.

타운트(Taunt)
몹의 어그로 수치를 높여 자신을 공격하게 만드는것.
파티내 탱커의 중요한 역활이며 대부분의 게임에서 탱커는 어그로 수치를 높이는 타운트스킬을 보유한다.
탱커가 아닌 파티원의 실수로 어그로를 가져갔을때나, 몹이 애드되었을때등 얼마나 타운트를 잘하느냐에 따라 탱커의 실력이 좌우된다.

디타운트(DeTaunt)
타운트의 반대 되는 개념.
몹의 어그로 수치를 낮춰주는 역활을 해주며, 딜러 역활을하는 클래스들이 가지고 있는경우가 많다.

풀, 풀링(pull, pulling)
파티사냥시 안전한 장소에서 원거리공격으로 몬스터를 끌어오는 행위.
이런 역활을 맡은 파티원을 풀러(puller)라고 부른다.

애드(add)
플레이어가 이동하거나 주변을 돌아다니는 몹에 의해 의도치않게 몹에게 공격당하는 것을 말한다.
파티사냥시에는 주의해야 하는것 중에 하나다.

PL(Power Leveling)
흔히 우리나라에서 쫄파티 혹은 쩔파티 라고 불리는것. 고렙이 저렙을 키워주는 행위

팩션(Faction)
뜻은 당파, 파벌이지만 일반적으로는 평판, 호감도 라고 불리며 해당지역, 혹은 집단에 우호적인지 적대적인지를 나타내게 된다.
사냥 혹은 퀘스트에 이 수치가 변경되는것이 일반적이다.



스킬 마법관련

버프 (Buff)
대상에게 이로운 효과를 주는 마법 (대상은 주로 아군)
종류에는 각종능력치, 공격력, 공격속도, 방어력, 속성공격, 저항 등등 단일혹은 복합적으로 상승시켜준다. 

디버프 (DeBuff)
버프와 반대개념
각종능력치등을 하락시킨다. (대상은 주로 적대대상)

군중제어 (Crowd Control)
줄여서 CC 라고 부르며 스턴, 슬로우, 침묵등 행동의 제약을 가하는 다양한 스킬, 마법등을 CC라 부른다.

스턴(Stun)
기절상태. 일정 시간 이동과 공격등 아무 동작도 할수 없는 상태가 된다. 또한 공격을 받더라도 깨어나지 않는게 일반적이다.

슬립(Sleep)
아무 동작도 할수 없는 상태가 된다는점에서 스턴과 비슷하나, 일반적으로 수면은 공격을 받게되면 깨어난다.

메즈(Mesmerize)
Mesmerize를 줄여 메즈라고 부른다. 위의 슬립과 역활은 동일하다고 보면된다.

루트(root)
일정 시간동안 이동을 하지 못하게 된다. (뿌리를 의미하는 단어로 뿌리에 감겨 이동을 못한다고 생각하면된다.)
하지만 이동이외의 근접공격, 원거리공격, 주문 등의 행동을 할수 있는게 일반적이다.
게임에 따라서 공격받으면 풀리게되는 경우도 있다.

스네어(Snare), 슬로우(Slow)
일정 시간동안 이동속도가 저하된다.
그점을 제외하고 다른 동작들은 모두 가능하다.

침묵(silence)
일정 시간 주문, 스킬등을 사용 할수 없는 상태가된다.

컨퓨즈(Confuse)
대상을 혼란스럽게 하여 아무나 공격하게 만든다.

레즈(resurrection, rez)
resurrection(부활)을 줄여 rez라 부른다. (부활마법)

데미지 실드(Damage Shield)
피해를 받으면 일정 피해를 공격한 적에게 되들리는 주문.

블레이드턴(Bladeturn)
줄여서 BT 혹은 버블(Bubble)이라고도 한다.
자신에게 가해지는 물리공격 1회를 무효화시키는 버프 마법.

DD(Direct Damage)
주문시전이 끝나면 상대방에게 데미지를 주는 마법.

도트(DOT, damage over time)
일정 시간 마다 데미지를 준다.
일반적으로 독, 출혈등이 해당된다.

AEDD(Area Effect Direct Damage)
목표를 기준으로 목표를포함한 주변대상까지 데미지를 주는 마법.
AoE(Area of Effect) AE 라고도 부른다.

PBAEDD(Point Blank Area Effect Direct Damage)
시전자를 중심으로 데미지를 입히는 마법.

인스턴트 스펠(Instant Spell)
즉시 사용할수 있는마법 일반적으로 마법은 시전시간(캐스팅)이 필요한데 인스턴드 스펠은 시전시간이 존재 하지않는다.