SlideShare a Scribd company logo
1 of 223
게 임 기 획

포 트 폴 리 오

전리품 분배 시스템/UI 기
획

2013. 10. 28 배상욱 (hzael@naver.com)
목차

 기획 의도
 시스템 기획

 UI 기획
기획 의도
게 임 기 획

포 트 폴 리 오
전리품이란?

2

•게임의 3대 요소 규칙, 동기, 보상의
보상 그 자체 이다
그런데,

3

•왜 전리품을 분배해야 하는가?
제대로 분배되지 않는다면,

•플레이어는 보상을 얻지 못할 수도 있다.

4
3대 요소 중 하나가 없다면,

•게임이 재미있을 수 있을까?

다른 플레이어의 간섭으로 분배가 불공정해질 수 있다

5
그러므로,

6

•전리품의 분배의 핵심은 공정성이다
그리하여 적절한 보상이 주어진다
그렇다면,

•어떻게 해야 공정해 질 수 있을까?

7
바로,

8

•소유 권한의 제한
현재의 메타
즉,

9

• 시스템 상에서 획득 권한을 정하면,

• 플레이어 간의 간섭이 줄어들고,
• 불공정함도 줄어든다
만족을 주기 보다는 불만족을 줄이는 방법
그렇다면,

•권한은 언제 최초로 생성될까?

10
그건...

11

• 파티가 생성되기 한참 전,

• 루팅을 하기 한참 전,
• 전리품 가방이 생성되기도 전,
• 몬스터를 죽이기도 전인,
바로,

12

• 몬스터가 PC를 인식하는 순간
다른 사람을 인식하면 내가 죽여도 못먹는다
그래서,

•전리품의 생성부터 소유권한의 포기까지

13
차근 차근,

14

• 생각해 보았습니다
내용도 깁니다
전리품의 분배 방법

• 어떤 방법들이 있을까?

15
몬스터 안/밖

16
획득 조건/무조건

열려면 열쇠 필요

17
자동/수동 획득

18
이 외에도,

• 추상/구체적, 타플레이어 간섭 가능/불가능,

• 즉시/나중에 획득 등의 요소들을 고려하여

19
결정

20

• 몬스터 안에 생성 – UI생성, 소유권 관리에서 유리
• 수동 획득 – 자동/수동 전환 가능으로 큰 의미 없다
• 즉시 획득 – 이 기획에서 다루기 힘든 내용
• 무조건 – 아이템에 따라 달라질 수 있다

• 구체적 – 이 기획에서 다루기 힘든 내용
• 간섭 최소화 – 이 기획에서 다루기 힘든 내용
시스템 기획
게 임 기 획

포 트 폴 리 오
설명을 위해 와우의 스크린샷을 사용했습니다.
전리품의 생성

22

기획 의도
보상, 유저가 위험을 무릎쓰거나 수고한
대가로 주어지는 보상이다.
전리품 분배에 필요한 요소들을 결정하는
과정.

사전 시스템
이후의 전리품이라 함은, 보물 상자 외에
도 몬스터 시체 등, 던전 탐험 혹은 몬스터
처치로 인한 모든 보상을 포함한다.
몬스터가 죽으면 파티클이 생성되어, 전리
품 가방의 생성을 알리고, 몬스터를 클릭
시 전리품 가방이 열린다.
생성된 전리품의 종류와 방법은 이미 결정
되어 있다고 가정한다.
순서도

23

몬스터1

몬스터1 드랍아이템
DB

몬스터1
HP = 0

데이터 인계 함수

시체
우클릭 시
Call ropitem1.ui.show

전리품 메모리
전리품이 생성될 때,

•어떤 일이 벌어질까?

24
몬스터 HP = 0,

• 몬스터가 시체로 변하며 파티클 생성,
• 몬스터의 시체가 전리품 가방이 됨,

• 전리품 가방 내에 아이템 생성,
• 전리품 가방의 소유권 생성.

25
몬스터 HP = 0,

26

• 몬스터가 시체로 변하며 파티클 생성,

생략

• 몬스터의 시체가 전리품 가방이 됨,

• 전리품 가방 내에 아이템 생성,
• 전리품 가방의 소유권 생성.

소유권 파트
즉, 다루어야 할 것은

•가방 및 아이템 생성

27
생성 순서

28

몬스터가 죽으면,
첫째로,

29

몬스터1

몬스터1 드랍아이템
DB

몬스터1
HP = 0

데이터 인계 함수

시체
우클릭 시
Call Dropitem1.ui.show

전리품 메모리
데이터 인계

30

드랍DB 테이블
itmId

itmName

itmmaxquantity

1롱소드

1

2녹슨검

1

3풀헬름

1

4나무방패

image
A

Dropitem1 클래스

itmquantity

bagid

itmId

image

1

18R

B

1

7G

C

1

4D

1

D

1

10J

5쌍검

1

E

1

11K

6강철검

1

F

1

7썬더퓨리

1

G

8발록스킨

1

9빨간포션
10나무지팡이

itmName itmmaxquantity
골드

itmquantity

instantid

propertyid1

100

3620131024 233602R player1

썬더퓨리

1

120131024 233602G player1

나무방패
나무지팡
이
얼음장검

1

120131024 233602D player1

1

120131024 233602J player1

1

120131024 233602K player1

3C

풀헬름

1

120131024 233602C player1

1

2B

녹슨검

1

120131024 233602B player1

H

1

5E

쌍검

1

120131024 233602E player1

100

I

72

6F

강철검

1

120131024 233602F player1

1

J

1

1

K

1

12강화석

20

L

16

13쌍도끼

1

M

1

14고블린머리

1

N

1

15화살

500

O

360

16잡템

100

P

90

5

Q

2

100

R

36

11얼음장검

17비밀의책
18골드

드랍 테이블로 부터 드랍할 아이템을 결정하여
Dropitem1 클래스에 저장
드랍할 아이템 수와 결정 방법은 사전 정의

propertyid2
둘째로,

31

몬스터1

몬스터1 드랍아이템
DB

몬스터1
HP = 0

데이터 인계 함수

시체
우클릭 시
Call ropitem1.ui.show

전리품 클래스

• 함수 활성화
어떤 함수?

32

If 전리품시체 마우스 우클릭, Then 전리품 가방 UI 로드
Call Dropitem1.UI.show
목표 달성

33

• 보이지는 않지만,
목표 달성

• 가방과 아이템이 생성되었다

34
시스템 정의

35

사전 정의


monster1.dropitem으로 부터 생성되는
아이템 종류와 방법은 결정되어 있다고
가정한다.

전리품 생성
1)
2)
3)



전리품 가방 클래스인 dropitem1 생성.
monster1.dropitem으로 부터
dropitem1.item으로 데이터를 인계한다.
인계되는 데이터 종류는 ex.1참조.
몬스터시체 위 마우스 우클릭 시 활성되
는 함수 생성.
함수의 내용은 전리품 가방 UI 로드.
Call dropitem1.ui.show
Ex.1 Dropitem1.item 메모리
표1. 생성 아이템 데이터 예시
bagid

itmId image
18R
7G
4D

10J
11K
3C
2B
5E
6F

itmName itmmaxquantity itmquantity instantid
propertyid1
100
3620131024 233602R player1
골드
1
120131024 233602G player1
썬더퓨리
1
120131024 233602D player1
나무방패
나무지팡
1
120131024 233602J player1
이
1
120131024 233602K player1
얼음장검
1
120131024 233602C player1
풀헬름
1
120131024 233602B player1
녹슨검
1
120131024 233602E player1
쌍검
1
120131024 233602F player1
강철검

propertyid2

데이터 종류
가방ID, 아이템ID, UI컨트롤ID, 아이템이름, 아이템 최대 수
량, 아이템 수량, 고유ID, 소유권1, 소유권2
전리품의 획득

36

기획 의도
상황에 따라서 달라지는 아이템의 획득 과
정을 설계한다.
복잡하고 예외사항이 많으므로 정확하고
오류없는 시스템을 목표로 한다.

사전 시스템
몬스터의 첫 타겟이 소유권 획득.
monster1.dropitem으로 부터 생성되는
아이템 종류와 방법은 결정되어 있다고
가정한다.
 아이템 획득 과정에서 인벤토리의 정
리 기능은 고려하지 않는다.
 아이템을 획득하는 방법은 드래그앤드
롭 방법도 있지만, 그 방법은 고려하지
않는다.


순서도

37

시체
우클릭 시
Call Dropitem1.ui.show

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

PC 인벤토리
메모리

소유권
확인

획득 방
법 결정

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
시체를 클릭하면,

• 전리품 가방이 열린다

38
UI 열기

39

시체
우클릭 시
Call Dropitem1.ui.show

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

PC 인벤토리
메모리

소유권
확인

획득 방
법 결정

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
시체 클릭

40

사전 정의


기획 의도




전리품을 UI 상 한 단계 아래에 배치하
여, 소유권을 가방 단위로 구분하고, 바
닥에 아이템들이 널브러져 혼잡해지는
것을 방지한다.
처치한 몬스터의 시체가 전리품 가방
이 되어 소유권 판정에 유리하다

monster1.dropitem으로 부터 생성되는
아이템 종류와 방법은 결정되어 있다고
가정한다.

정의
1)

시체를 마우스 우클릭 시 전리품 가방 및
아이템 데이터가 저장된 UI를 불러온다.

 Call dropitem1.ui.show
아이템을 클릭하면,

• 아이템을 획득한다

41
순서도

42

시체
우클릭 시
Call Dropitem1.ui.show

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

PC 인벤토리
메모리

소유권
확인

획득 방
법 결정

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
말 처럼,

43

• 단순하지 않다
순서도

44

시체
우클릭 시
Call Dropitem1.ui.show

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

PC 인벤토리
메모리

소유권
확인

획득 방
법 결정

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
아이템을 클릭하면?

• 아이템 획득 프로세스가 진행된다

45
클릭하지 않아도,

• 아이템을 획득하면 어떨까?

46
선택권이 없어지므로,

• 인벤토리 내 원하지 않는 잡템 증가

47
그러므로,

• 인벤토리 제약이 심한 MMORPG 류는,
• 아이템을 수동획득하는 것이 유리하다
대부분의 경우에 수동/자동을 선택/전환할 수 있다

48
아이템 클릭

49

사전 정의
기획 의도


자동으로 획득하는 경우에 비해 원하
는 아이템만을 획득할 수 있으므로, 인
벤토리를 효율적으로 사용할 수 있다.

아이템이 없는 빈 칸을 클릭하면 아무
일도 일어나지 않는다.

아이템을 수동으로 획득한다.







자동 획득에 비해, 한 번 더 조작해야
하는 번거로움이 있다.

정의
1)

아이템 획득 프로세스를 시작한다.

 소유권 확인 단계로.
순서도

50

시체
우클릭 시
Call Dropitem1.ui.show

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

PC 인벤토리
메모리

소유권
확인

획득 방
법 결정

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
소유권 확인은

• 소유권 파트에서 다룬다

51
소유권 검사 결과,

• 값이 Yes 이면,

52
첫째로,

53

시체
우클릭 시
Call Dropitem1.ui.show

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

PC 인벤토리
메모리

소유권
확인

획득 방
법 결정

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
첫째로,

54

전리품 메모리
dropitem1.item

전리품 메모리가 저장된
dropitem1.item에서

데이터 인계 함수

플레이어 인스턴트 가방으
로
플레이어
인스턴트 가방

데이터를 인계한다
플레이어 인스턴트 가방

55

기획 의도





아이템의 획득은 복잡한 과정이므로
데이터의 손상, 변경, 오류를 막기 위해
사본 데이터를 만든다.
아이템 획득을 요청하면, 전리품 데이
터는 임시 가방으로 인계된다.
획득 검사에 따라, 플레이어 가방 메모
리에 임시 가방 데이터를 인계 하거나
임시 가방의 데이터를 폐기한다.

정의
1)


PC 인벤토리와 같지만, 메모리 상에만
존재하는 가상의 가방.
PC1.Instantbag
데이터 인계

56

기획 의도


아이템 획득 프로세스의 중간 과정.

정의
1)

Dropitem1.item의 데이터를
PC1.instantbag으로 인계한다.

 PC1.instantbag = Dropitem1.item
둘째로,

57

시체
우클릭 시
Call Dropitem1.ui.show

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

PC 인벤토리
메모리

소유권
확인

획득 방
법 결정

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
가방 검사 이유

• 왜 가방을 검사해야 할까?

58
아이템 획득

59
어라?

60
오류1

61

• 아이템을 덮어 씌움
또 다른 경우

62
오류2

63

• 중복 아이템이 합쳐지지 않음
그 외,

64

• 수 많은 오류들이 있다
그래서,

65

• PC 가방을 검사한다
첫 번째,

66

• 빈 칸 검사
빈 칸 검사

• 좌에서 우, 위에서 아래로 빈 칸을 검사한다
실제로는 UI를 검사하는 것이 아니라 메모리를 검사한다

67
빈 칸이 하나라도 있으면,

• Blankchk_pc1_bag = True
하나도 없으면 False

68
빈 칸 검사

69

기획 의도


아이템을 획득하기 전 가방에 빈 공간
이 있는 지를 확인한다.

사전 정의


이 기획에서는 16칸 가방만을 다룬다.

정의
1)

플레이어 가방의 메모리 값을 순서대로
검사하여 값이 Empty가 아닌 것이 있으
면, 검사를 중단하고, Blankchk_pc1_bag
= True로 한다. 없으면, False.
두 번째,

70

• 중복 아이템 검사
중복 검사

좌에서 우, 위에서 아래로 중복인 아이템을 검사한다

71
그런데 뭐가 중복이라는 거지?
전리품 메모리
dropitem1

데이터 인계 함수

플레이어
인스턴트 가방

인스턴트 가방에 저장된 아이템ID와
PC 가방에 있는 아이템ID를 비교

72
값이 같다면,

73

• Dplchk_pc1_bag = True
같은 게 하나도 없으면 False
라고 하면 땡,

• Dplchk_pc1_bag = True

74
그 이유

중복이므로 첫 번째 슬롯에 합쳐져야 한다

75
그러나,

76

모피 조각의 최대 수량은 20
최대 수량 초과로,

• 에러 발생

77
그러므로,

78

• 중복과 현재 수량을 체크
즉,

79

최대 수량이 아니면 True
최대 수량이면,

False, 그리고 다음 슬롯으로

80
검사결과 같은 게 있으면,

• Dplchk_pc1_bag = True
같은 게 하나도 없으면 False

81
중복 체크

82

기획 의도



아이템을 획득하기 전, 소지품에 같은
항목이 있는 지를 확인한다.
수량이 최대가 아닌 중복 아이템을 빈
칸으로 볼 것인 지, 아이템으로 볼 것인
지 를 결정하는 과정.

정의
1)
2)
3)

좌에서 우, 위에서 아래의 순서로 진행한
다.
Pc1.instantbag 의 아이템ID와 PC의 가방
내 아이템ID를 비교한다.
같은 것이 있다면, 그 아이템의 수량과 최
대 수량을 비교한다. 값이 같다면,
dplchk_pc1_bag = True로 한다. 검사 결
과 위를 만족하는 값이 없으면, False로
한다.
순서도

83

시체
우클릭 시
Call Dropitem1.ui.show

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

PC 인벤토리
메모리

소유권
확인

획득 방
법 결정

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
두 가지 값

84

• Blankchk_pc1_bag
• Dplchk_pc1_bag
두 가지 값

85

• 두 값의 의미는 무엇일까?
바로

86

가방의 상태
두 가지 값을 조합하여,

• 모든 경우의 수를 표현할 수 있다
전리품 분배에 관련하여

87
네 가지 경우의 수

• Blank = True, Dplchk = True
• Blank= True, Dplchk = False
• Blank= False, Dplchk = True
• Blank= False, Dplchk = False

88
네 가지 경우의 수

• 빈 칸이 있고 중복이 있다
• 빈 칸이 있고 중복이 없다
• 빈 칸이 없고 중복이 있다
• 빈 칸이 없고 중복이 없다

89
빈 칸이 있고 중복이 있다

• 중복을 채우고 남는게 있으면, 빈 칸을 채운다
• 채우고 남는게 없으면, 종료

90
빈칸 有 중복 有

91

기획 의도


전리품을 획득하는 과정에서 인벤토리
공간과 중복 아이템이 모두 있을 때, 우
선 순위 및 처리 방법을 결정한다.

정의
1)

사전 정의
아이템 획득 과정에서 인벤토리의 정
리 기능은 고려하지 않는다.
 아이템을 획득하는 방법은 드래그앤드
롭 방법도 있지만, 그 방법은 고려하지
않는다.


dplchk_pc1_bag 값과
blankchk_pc1_bag 값이 모두 True 이면,
pc1.TT 를 실행한다.

 Call pc1.TT
빈 칸이 있고 중복이 없다

• 빈 칸에 채운다

92
빈칸 有 중복 無

93

정의

기획 의도


전리품을 획득하는 과정에서 인벤토리
공간은 있지만 중복 아이템은 없는 상
태.



예외가 아닌 가장 일반적인 상황이다.

1)

dplchk_pc1_bag 값이 True 이고,
blankchk_pc1_bag 값이 False 이면,
pc1.TF 를 실행한다.

 Call pc1.TF
빈 칸이 없고 중복이 있다

• 중복을 채우고 남는게 있으면, 전리품 가방을 채운다
• 채우고 남는게 없으면, 종료

94
빈칸 無 중복 有

95

기획 의도




전리품을 획득하는 과정에서 인벤토리
공간은 없지만 중복 아이템은 있는 상
태.
중복 아이템을 빈 공간으로 보는 경우,
인벤토리가 가득찼어도 획득할 수 있다.

정의
1)

dplchk_pc1_bag 값이 False 이고,
blankchk_pc1_bag 값이 True 이면,
pc1.FT 를 실행한다.

 Call pc1.FT
빈 칸이 없고 중복이 없다

• 획득 프로세스를 종료하고
• “빈 칸이 없습니다.” 출력

96
빈칸 無 중복 無

97

정의

기획 의도


전리품을 획득하는 과정에서 인벤토리
공간이 없고 중복 아이템도 없는 상황.

1)

dplchk_pc1_bag 값이 False 이고,
blankchk_pc1_bag 값이 False 이면,
pc1.FF 를 실행한다.

 Call pc1.FF
순서도

98

시체
우클릭 시
Call Dropitem1.ui.show

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

PC 인벤토리
메모리

소유권
확인

pc1_TT

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
빈칸 有 중복 有

합치려면 중복 아이템의 위치를 알아야 한다

99
다시 검사하여,

중복 아이템의 슬롯ID 체크

100
다음은,

101

Itmquantity = 1

Itmquantity = 1

두 아이템의 수량을 비교
다음의 식에 대입

Itmquantity = 1

Itmquantity = 1

102

Itmmaxquantity = 20

각 수량의 합이 최고 수량보다 큰 지를 확인
합 < 최대수량

Itmquantity = 1

103

Itmquantity = 1

작다

<

Itmmaxquantity = 20
합 < 최대수량

Itmquantity = 1

104

Itmquantity = 1

<

Itmmaxquantity = 20

첫 번째 슬롯에 합친다
합 친 후 인스턴트백의 데이터 삭제, 전리품 데이터 및 UI 삭제
합 = 최대수량

Itmquantity = 10

105

Itmquantity = 10

같을 때는,

=

Itmmaxquantity = 20
합 = 최대수량

Itmquantity = 10

106

Itmquantity = 10

=

Itmmaxquantity = 20

첫 번째 슬롯에 합친다
합 친 후 인스턴트백의 데이터 삭제, 전리품 데이터 및 UI 삭제
합 > 최대수량

Itmquantity = 10

107

Itmquantity = 11

>

그럼 클 때는?

Itmmaxquantity = 20
합 > 최대수량

Itmquantity = 10

108

Itmquantity = 11

-

Itmmaxquantity = 20

합에서 최대 수량을 빼고
소지품의 데이터를 최대 수량으로 한다
합 > 최대수량

Itmquantity = 10

109

Itmquantity = 11

>

다시 빈칸 검사

Itmmaxquantity = 20
합 > 최대수량

Itmquantity = 10

110

Itmquantity = 11

>

Itmmaxquantity = 20

빈 칸에 나머지를 집어 넣는다
인스턴트백의 데이터 삭제, 전리품 데이터 및 UI 삭제
빈칸 有 중복 有

111

정의
기획 의도


전리품을 획득하는 과정에서 인벤토리
공간과 중복 아이템이 모두 있을 때, 우
선 순위 및 처리 방법을 결정한다.

1)

2)

사전 정의
아이템 획득 과정에서 인벤토리의 정
리 기능은 고려하지 않는다.
 아이템을 획득하는 방법은 드래그앤드
롭 방법도 있지만, 그 방법은 고려하지
않는다.
 아이템 획득 메시지는 채팅 창에 표시
되는 것으로 가정한다.


3)

pc 인벤토리를 ‘중복 검사’와 같은 방법
으로 검사하여 중복인 아이템의 슬롯 번
호, ID를 참조한다.
(pc1.inventory.itemquantity)
pc1.instantbag.itmquantity 와
pc1.inventory.itequantity를 합하여 그 값
은 plus로 하고, Plus pc1.inventory.itmmmaxquantity = exeed
로 한다.
a. exeed <= 0 이면,
pc1.inventory.itmquantity = plus로
한다.
b. exeed > 0 이면,
pc1.inventory.itmquantity =
pc1.inventory.itmmaxquantity 로 하
고, ‘빈 칸 검사’를 수행하여 빈 슬
롯의 pc1.inventory 값에
pc1.instantbag(itmqantity = exeed)
값을 인계한다.
pc1.instantbag 과 dropitem1.item 데이
터를 모두 삭제한다.
예외 사항

이런 경우는 어떻게 처리할까?

112
이 기획에서 벗어나는 경우

• 드래그앤드롭으로 획득 시 생길 수 있다

113
이 상태로 만든 후,

Pc1_TT를 다시 한번 실행

114
순서도

115

시체
우클릭 시
Call Dropitem1.ui.show

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

PC 인벤토리
메모리

소유권
확인

pc1_TF

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
빈칸 有 중복 無

116

빈 칸 검사
검사 후,

117

고민없이 빈 슬롯에 넣는다
빈칸 有 중복 無

118

정의

기획 의도


전리품을 획득하는 과정에서 인벤토리
공간은 있지만 중복 아이템은 없는 상
태.



예외가 아닌 가장 일반적인 상황이다.

1)

2)

pc 인벤토리를 ‘중복 검사’와 같은 방법
으로 검사하여 중복인 아이템의 슬롯 번
호, ID를 참조한다.
(pc1.inventory.itemquantity)
pc1.inventory 값에 pc1.instantbag 값을
대입한다.
순서도

119

시체
우클릭 시
Call Dropitem1.ui.show

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

PC 인벤토리
메모리

소유권
확인

pc1_FT

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
빈칸 無 중복 有

빈칸有중복無과정과처음은같다

120
중복 아이템에 채우고,

나머지는 넣을 데가 없으므로,

121
전리품 가방으로

다시 돌아간다

122
빈칸 無 중복 有

123

정의
1)

2)

기획 의도


전리품을 획득하는 과정에서 인벤토리
공간은 없지만 중복 아이템은 있는 상
태.

3)

pc 인벤토리를 ‘중복 검사’와 같은 방법
으로 검사하여 중복인 아이템의 슬롯 번
호, ID를 참조한다.
(pc1.inventory.itemquantity)
pc1.instantbag.itmquantity 와
pc1.inventory.itmquantity를 합하여 그 값
은 plus로 하고, Plus pc1.inventory.itmmmaxquantity = exeed
로 한다.
a. exeed <= 0 이면,
pc1.inventory.itmquantity = exeed
로 한다.
b. exeeds > 0 이면,
pc1.inventory.itmquantity =
pc1.inventory.itmmaxquantity 로 하
고, dropitem1.item.itmquantity =
exeed 로 한다.
pc1.instantbag의 데이터를 삭제한다.
순서도

124

시체
우클릭 시
Call Dropitem1.ui.show

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

PC 인벤토리
메모리

소유권
확인

pc1_FF

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
빈칸 無 중복 無

125

기획 의도


전리품을 획득하는 과정에서 인벤토리
공간이 없고 중복 아이템도 없는 상황.

정의
1)
2)

pc1.instantbag의 데이터를 삭제한다.
“더 이상 집을 수 없습니다.” 메시지 출력.
전리품 획득

126

• 종료
예외 사항

127

골드는 어떻게?
순서도

128

시체

파티 생성
분배 설정

우클릭 시
Call Dropitem1.ui.show
소유권
확인1

PC 인벤토리
메모리

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

소유권
확인2

데이터 인계 함수

골드 획
득
플레이어
인스턴트 가방

데이터 인계 함수
소유권 확인 이후,

바로 획득

129
골드 획득

130

정의
기획 의도


전리품 중 골드를 획득 하는 방법.

1)
2)
3)

pc1의 골드 데이터는 pc1.gold에 저장한
다.
Pc1.instantbag.itmID값이 골드의 ID 값이
면, Pc1.gold = pc1. gold +
pc1.instantbag.gold 로 한다.
Pc1.instantbag과 dropitem1.itm 의 데이
터를 삭제한다.
소유권의 생성 및 확인

131

기획 의도
전리품의 공정한 분배를 위해 전리품의 소
유권을 생성한다.
소유권을 생성하고 확인하는 과정을 필요
한 곳에 위치시킨다.

사전 시스템
몬스터의 첫 어그로 대상(타겟)이 몬스터
전리품의 소유권을 획득하게 된다. 파티라
면, 파티가 획득.
일부 몬스터의 가방은 소유권이 없더라도
같은 파티면 열 수 있다. 그러나 아이템획
득 소유권은 없을 수 있다.
최초 소유권의 생성

몬스터가 PC를 인식한 순간 생성

132
이 소유권을,

• 어떻게 적용해야 할까?

133
하나

134

• 전리품 가방을 열 때
둘

135

• 전리품 아이템을 클릭할 때
순서도

136

시체
우클릭 시
Call Dropitem1.ui.show
소유권
확인1

PC 인벤토리
메모리

전리품 가방
UI
아이템 클릭

소유권
확인2

획득 방
법 결정

데이터 인계 함수

전리품 메모리
dropitem1

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
시체를 클릭할 때

소유권이 있다면 가방이 열린다

137
만약,

138

다른 이가 죽인 시체를
클릭하면,
열리지 않는다
소유권 확인1

139

기획 의도


정의

소유권을 가방에 부여하여 묶음 단위
로 전리품의 분배가 이루어진다.
1)

사전 정의


일부 몬스터의 가방은 소유권이 없더
라도 같은 파티면 열 수 있다. 그러나
아이템획득 소유권은 없을 수 있다.

2)

몬스터의 HP가 0이 될 때, 생성되는 함
수 Dropitem1.ui.show를 실행시키려 하면,
insproperty와 시도자의 ID를 검사하여 두
값이 같으면, 전리품 UI를 불러온다.

3)

같지 않으면, UI로드를 취소한다.

몬스터의 첫 어그로 대상(타겟)이 몬스
터 전리품의 소유권을 획득하게 된다.
파티라면, 파티가 획득.



몬스터의 첫 타겟이 된 PC의 ID를
insproperty에 저장해 놓는다.
아이템을 획득하려 할 때,

마찬가지로 소유권을 검사한다

140
소유권 확인2

141

정의
1)

기획 의도


예외적으로 타인이 가방을 열었을 때,
소유권한을 검사하여 소유권자가 아니
면 획득 프로세스를 중단한다.

몬스터의 첫 타겟이 된 PC의 ID를 메모
리에 저장해 놓는다.

2)

몬스터의 HP가 0이 될 때, 생성되는 전
리품의 dropitem1.item.propertyid1에 저
장해 놓은 PC의 ID를 인계한다.

3)

위에서 생성된 전리품 가방 내의 아이템
중 하나를 획득하려고 시도할 때,
propertyid1과 시도자의 ID를 검사하여 두
값이 같으면, 아이템획득 프로세스를 진
행한다.

4)

같지 않으면, 프로세스를 중단하고, “획
득할 수 없습니다.”라는 메세지를 출력한
다.
만약,

142

파티라면 어떨까?
파티에 속해 있다면,

143

파티1

파티원1

파티원2

파티원3

파티원4

파티원끼리는 소유권을 공유한다
자유 획득이라면
즉,

144

파티1 소유권(몬스터1)

파티원1

파티원2

파티원3

파티 전체를 하나의 캐릭터로 취급
자유 획득이라면

소유권(몬스터
2)
PC4
그런데,

• 차례대로 획득하고 싶을 때는 어떻게 해야할까?

145
설정 창에서,

146

차례대로 획득으로 바꾼
다
설정을 변경하면,

몬스터마다 획득 권한이 생성된다

147
같은 파티라도,

148

파티1 소유권()

소유권(몬스터
1)
PC1

소유권(몬스터
2)
PC2

하나의 몬스터는 한 명만 소유권 획득
같은 파티라도,

149

파티1 소유권()

소유권(몬스터
1)
PC1

소유권(몬스터
2)
PC2

하나의 몬스터는 한 명만 소유권 획득
어떻게?

150

파티1
파티원1

파티원2

파티원1

파티원2

몬스터1

몬스터2

몬스터3

몬스터4

몬스터를 처치하는 순서대로,
파티원 순서대로 부여
즉, 이 방법은

151

파티원1

파티원2

파티원1

파티원2

몬스터1

몬스터2

몬스터3

몬스터4

몬스터 혹은 파티원

둘 중 하나를 줄세워야 한다
만약 몬스터를 줄세우면,

몬스터1

몬스터2

몬스터3

몬스터를 처치할 때마다
몬스터ID와 처치한 수를
메모리에 기록해야한다

152

몬스터4
그러므로,

몬스터1

153

몬스터2

몬스터3

비효율적

몬스터4
최초 파티를 생성할 때,

154

파티1 partyid = party1

파티원1

파티원2

파티원3

첫 번째, 파티ID를 생성한다
자유 획득용

파티원4
최초 파티를 생성할 때,

155

파티1 partyid = party1

파티원1

파티원2

파티원3

파티원4

partynmb=1

partynmb=2

partynmb=3

partynmb=4

두 번째, 파티원 넘버를 결정한다
파티 가입 순서에 따라
몬스터를 처치하면,

156
몬스터를 처치하면,

Partyid=party1
partynmb=1

두 값을 부여하고 partynmb에 1을 더한다

157
두 번째 몬스터도,

Partyid=party1
partynmb=2

Partyid=party1
partynmb=1

두 값 부여 후 더하기 1

158
세 번째도,

159

Partyid=party1
partynmb=2
Partyid=party1
partynmb=3
Partyid=party1
partynmb=1

두 값 부여 후 더하기 1
파티의 생성 및 분배 방법 설정
기획 의도


원하는 설정에 따라 전리품 분배 방법
이 변경될 수 있는 시스템을 만든다.

사전 정의





주사위 굴림, 착용자 우선 획득 시스템
은 만들어 져 있다고 가정한다.
위의 두 시스템을 활성하면, 특정 아이
템 등급을 정하여 그 등급 이상의 아이
템은 주사위 굴림과 착용자를 고려하여
획득 방법이 결정된다.
영웅 등급 이상의 아이템이나, 위의 분
배 등급에 해당하는 아이템은 이 기획
의 내용에 해당되지 않는다.

정의
1)
2)
3)
4)

최초 파티 생성 시 partyID를 생성한다.
파티원순서 번호를 각 플레이어에게 배
정한다. Partynmb
몬스터가 죽을 때, 위의 두 값을 몬스터
의 소유권 property1, property2에 각각 부
여한다.
전리품 분배 방법을 설정한다. “자유 획
득”, “ 차례 대로 획득”.

160
순서도

161

시체

파티 생성
분배 설정

우클릭 시
Call Dropitem1.ui.show
소유권
확인1

PC 인벤토리
메모리

전리품 가방
UI
아이템 클릭

소유권
확인2

획득 방
법 결정

데이터 인계 함수

전리품 메모리
dropitem1

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
자유 획득

162

정의
1)

2)

기획 의도


파티 내 소유권을 파티원 모두로 한다.

3)
4)
5)

6)

몬스터의 첫 타겟이 된 PC의 partyID를
insproperty에 저장해 놓는다.
몬스터의 HP가 0이 될 때, 생성되는 함
수 Dropitem1.ui.show를 실행시키려 하면,
insproperty와 시도자의 partyID를 검사하
여 두 값이 같으면, 전리품 UI를 불러온다.
같지 않으면, UI로드를 취소한다.
몬스터의 HP가 0이 될 때, 생성되는 전
리품의 dropitem1.item.propertyid1에 위
의 partyID를 인계한다.
위에서 생성된 전리품 가방 내의 아이템
중 하나를 획득하려고 시도할 때,
propertyid1과 시도자의 partyID를 검사하
여 두 값이 같으면, 아이템획득 프로세스
를 진행한다.
같지 않으면, 프로세스를 중단하고, “획
득할 수 없습니다.”라는 메세지를 출력한
다.
차례 대로 획득
기획 의도


163

5)

파티 내 소유권을 순차적으로 정한다.

정의
1)
2)
3)
4)

몬스터의 첫 타겟이 된 PC의
partyID를 insproperty에 저장해 놓
는다.
몬스터의 첫 타겟이 된 PC가 속해
있는 파티의 파티넘버, partynmb를
저장해 놓는다.
몬스터의 dropitem1.item.property1
= insproperty로 하고, property2 =
insnmb 로 한다.
insnmb = insnmb + 1

6)
7)
8)

9)

몬스터의 HP가 0이 될 때, 생성되는 함수
Dropitem1.ui.show를 실행시키려 하면,
insproperty와 시도자의 partyid를,
insnmb와 시도자의 partynmb의 일치 여
부를 확인한다.두 결과 값이 모두 참인 경
우, 전리품 UI를 불러온다.
같지 않으면, UI로드를 취소한다.
몬스터의 HP가 0이 될 때, 생성되는 전
리품의 dropitem1.item.propertyid1에 위
의 partynmb 값을 인계한다.
위에서 생성된 전리품 가방 내의 아이템
중 하나를 획득하려고 시도할 때,
property1과 시도자의 partyid를,
propertyid2과 시도자의 partynmb의 일치
여부를 확인한다.두 결과 값이 모두 참인
경우, 아이템 획득 프로세스를 진행한다.
같지 않으면, 프로세스를 중단하고, “획
득할 수 없습니다.”라는 메세지를 출력한
다.
예외 사항

164

• 분배 방법의 검사 순서
소유권 생성/검사 순서

파티
인가?

yes

yes

차례 대로 획
득

차례
획득?

165

no

no

자유 획득

일반 획득
소유권 확인1

166

정의
기획 의도


1)

몬스터의 첫 타겟이 된 PC의 partyid 값
을 검사하여,
a. 값이 empty이면, 2), 3), 4)를 진행
한다.
b. 값이 empty가 아니고 차례대로획
득이면, 차례대로획득 프로세스를
진행한다.
c. 값이 empty가 아니고 차례대로획
득이 아니면, 자유획득 프로세스를
진행한다.

2)

몬스터의 첫 타겟이 된 PC의 ID를
insproperty에 저장해 놓는다.

3)

몬스터의 HP가 0이 될 때, 생성되는 함
수 Dropitem1.ui.show를 실행시키려 하면,
insproperty와 시도자의 ID를 검사하여 두
값이 같으면, 전리품 UI를 불러온다.

4)

같지 않으면, UI로드를 취소한다.

소유권을 가방에 부여하여 묶음 단위
로 전리품의 분배가 이루어진다.

사전 정의


몬스터의 첫 어그로 대상(타겟)이 몬스
터 전리품의 소유권을 획득하게 된다.
파티라면, 파티가 획득.



일부 몬스터의 가방은 소유권이 없더
라도 같은 파티면 열 수 있다. 그러나
아이템획득 소유권은 없을 수 있다.
소유권 확인2

167

기획 의도
예외적으로 타인이 가방을 열었을 때,
소유권한을 검사하여 소유권자가 아니
면 획득 프로세스를 중단한다.

2)

몬스터의 첫 타겟이 된 PC의 ID를 메모
리에 저장해 놓는다.

3)

몬스터의 HP가 0이 될 때, 생성되는
전리품의 dropitem1.item.propertyid1에
저장해 놓은 PC의 ID를 인계한다.

4)



위에서 생성된 전리품 가방 내의 아이
템 중 하나를 획득하려고 시도할 때,
propertyid1과 시도자의 ID를 검사하여
두 값이 같으면, 아이템획득 프로세스를
진행한다.

5)

같지 않으면, 프로세스를 중단하고, “획
득할 수 없습니다.”라는 메세지를 출력
한다.

정의
1)

몬스터의 첫 타겟이 된 PC의 partyid 값
을 검사하여,
a. 값이 empty이면, 2), 3), 4)를 진행
한다.
b. 값이 empty가 아니고 차례대로획
득이면, 차례대로획득 프로세스를
진행한다.
c. 값이 empty가 아니고 차례대로획
득이 아니면, 자유획득 프로세스를
진행한다.
예외 사항

168

• 파티 골드 분배 방법
1/N

169

파티1
파티원1

파티원2

파티원3

파티원4

5 Gold

5 Gold

5 Gold

5 Gold

20 Gold

파티원 수 대로 골드를 나눈다
그런데,

170

파티1
파티원1

파티원2

파티원3

파티원4

5.25 Gold

5.25 Gold

5.25 Gold

5.25 Gold

21 Gold

소수점이 생긴다면?
두 가지 변수 생성

171

파티1
5.25 Gold

R, 소수점 변수

5 Gold

P, 정수 변수

5.25 Gold

R = P이면, Gold = Gold + P로 한다

R = P가 아니면, 획득자는 Gold = Gold + P + 1,
파티원은 Gold = Gold + P
해결

172

파티1
파티원1

파티원2

파티원3

파티원4

5 + 1 Gold

5 Gold

5 Gold

5 Gold

21 Gold

획득하는 사람에게 소수점 이하를 몰아준다
골드 획득

173

정의
1)

기획 의도
2)


전리품 중 골드를 획득하는 방법.

3)
4)

획득자의 Partyid가 Empty라면 2)를 진
행한다. 아니라면, “파티 골드 획득”을 진
행한다.
pc1의 골드 데이터는 pc1.gold에 저장한
다.
Pc1.instantbag.itmID값이 골드의 ID 값이
면, Pc1.gold = pc1. gold +
pc1.instantbag.gold 로 한다.
Pc1.instantbag과 dropitem1.itm 의 데이
터를 삭제한다.
파티 골드 획득

174

정의
1)
2)

기획 의도
 파티에서 골드를 분배하는 방법.

3)

4)

PC1의 골드 데이터는 PC1.gold에 저장
한다.
PC1.instantbag.itmID값이 골드의 ID 값
이면, (pc1.instantbag.itm.quantity / 파티
원의 수) 를 소수 변수 R, 정수 변수 P에
각각 넣는다.
R=P라면,
1) 파티원의 PC.gold = PC.gold + P로
한다.
2) 아니라면, 획득자(PC1)은
PC1.gold = PC1.gold + P + 1로 하
고, 파티원은 PC.gold = PC.gold +
P로 한다.
Pc1.instantbag과 dropitem1.itm 의 데이
터를 삭제한다.
예외 사항

175

• 소유권 포기
아이템 있는 채로,

전리품 가방을 닫으면 소유권이 변경된다
파티원 모두 획득 가능

176
순서도

177

시체

파티 생성
분배 설정

우클릭 시
Call Dropitem1.ui.show
소유권
확인1

PC 인벤토리
메모리

전리품 가방
UI
아이템 클릭

소유권
확인2

획득 방
법 결정

데이터 인계 함수

전리품 메모리
dropitem1

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
순서도

178

시체

파티 생성
분배 설정

우클릭 시
Call Dropitem1.ui.show
소유권
확인1

PC 인벤토리
메모리

아이템 클릭

소유권
확인2

획득 방
법 결정

데이터 인계 함수

전리품 메모리
dropitem1

가방 닫기
전리품 가방
UI

플레이어
가방 검
사

소유권
확인3

데이터 인계 함수

플레이어
인스턴트 가방
소유권 포기

179

기획 의도




전리품의 획득 권한을 파티원 모두로
변경한다.

전리품은 공정하게 분배되어야 하므로,
1차 소유권자가 획득을 포기하더라도
2차 소유권자는 획득할 수 있도록 한다.

사전 시스템


닫기 버튼을 눌러 가방을 닫는 것 외에
도, 이동하면 가방이 닫힌다.



이동하여 가방이 닫힐 때에도 같은 프
로세스를 적용한다.

정의
1)

2)

파티상태(partyid = not empty)이고 차례
대로 획득(turnsecurevalue = true)일 때,
전리품 가방에 아이템이 남아있는 채로
가방을 닫으면,
해당 전리품 가방 및 아이템의 소유권
1(propertyid1)을 파티의 partyid로 한다.
dropitm.itm.property1 = partyid
예외 사항

• 여러 플레이어의 아이템 획득 요청

180
플레이어1이 아이템 획득 요청

181

서버

플레이어1

플레이어2

플레이어3

플레이어4

P1이 A획득

P1이 A획득

A를 클릭

소유권 확인
결과가 참이
다

P1이 A획득

P1이 A획득

A가 획득한다
동시에,

182
서버

플레이어1

플레이어2

플레이어3

A를 클릭

A를 클릭

A를 클릭

소유권 확인

여러 명이 요청하는 경우 어떻게 해야 할까?

플레이어4
결과

183
서버

플레이어1

플레이어2

플레이어3

A를 클릭

A를 클릭

플레이어4

A를 클릭

소유권 확인
소유권 = P2
P2가 A획득

P2가 A획득

P2가 A획득

P2가 A획득

인스턴트가방
초기화

인스턴트가방
초기화

인스턴트가방
초기화

소유권있는 사람이 획득

P2가 A획득
그러나 이방법은,

184
서버

플레이어1

플레이어2

플레이어3

A를 클릭

A를 클릭

플레이어4

A를 클릭

소유권 확인
소유권 = P2
P2가 A획득

P2가 A획득

P2가 A획득

P2가 A획득

인스턴트가방
초기화

인스턴트가방
초기화

인스턴트가방
초기화

불필요한 정보 전달로 비효율적이다

P2가 A획득
삭제

185
서버

플레이어1

플레이어2

플레이어3

A를 클릭

A를 클릭

A를 클릭

소유권 확인

소유권 확인

플레이어4

소유권 확인

P2가 A획득

P2가 A획득

P2가 A획득

P2가 A획득

인스턴트가방
초기화

인스턴트가방
초기화

인스턴트가방
초기화

P2가 A획득

각 클라이언트에서 소유권이 확인된 사람만 요청 가능
소유권자 3명이 동시에 요청하면?

186

서버

플레이어1

플레이어2

플레이어3

A를 클릭

A를 클릭

A를 클릭

소유권 확인

소유권 확인

소유권 확인

플레이어4
소유권자 3명이 동시에 요청하면?

187

서버

플레이어1

플레이어2

플레이어3

A를 클릭

A를 클릭

A를 클릭

소유권 확인

소유권 확인

플레이어4

소유권 확인

파티넘버1
= P2
P2가 A획득

P2가 A획득

P2가 A획득

P2가 A획득

인스턴트가방
초기화

인스턴트가방
초기화

인스턴트가방
초기화

파티넘버 순으로 획득

P2가 A획득
만약,

188
서버

플레이어1

플레이어2

플레이어3

A를 클릭

A를 클릭

A를 클릭

소유권 확인

소유권 확인

플레이어4

소유권 확인

파티넘버1
= P2
P2가 A획득

P2가 A획득

P2가 A획득

P2가 A획득

가방 공간 없
음

획득 후 가방 공간이 없다면,

P2가 A획득
에러

189
서버

플레이어1

플레이어2

플레이어3

A를 클릭

A를 클릭

A를 클릭

소유권 확인

소유권 확인

플레이어4

소유권 확인

파티넘버1
= P2
P2가 A획득

P2가 A획득

P2가 A획득

error

P2가 A획득

P2가 A획득
그러므로,

190
서버

플레이어1

플레이어2

플레이어3

A를 클릭

A를 클릭

A를 클릭

소유권 확인

소유권 확인

소유권 확인

가방 공간 확
인

가방 공간 확
인

플레이어4

가방 공간 확
인

P3가 A획득

P3가 A획득

P3가 A획득

P3가 A획득

가방 검사 이후 요청이 가능하게 한다
인벤토리외에도 획득할 수 있는 조건인가를 검사한다

P3가 A획득
그러므로,

191

• 소유권 검사와 가방 검사 후
• 프로세스 진행 여부를 요청한다
순서도

192

시체

파티 생성
분배 설정

우클릭 시
Call Dropitem1.ui.show

전리품 가방
UI

소유권
확인1

PC 인벤토리
메모리

전리품 메모리
dropitem1

아이템 클릭

서버

소유권
확인2

데이터 인계 함수

Yes
No
획득 방
법 결정

데이터 인계 함수

플레이어
가방 검
사

플레이어
인스턴트 가방
삭제
획득 판정

193

기획 의도


여러 플레이어가 동시에 아이템 획득
을 요청하는 경우를 처리한다

정의
1)

소유권 검사 결과와 빈칸검사 결과 아이
템을 획득할 수 있는 경우라면, 서버에 아
이템 획득을 요청한다.

2)

요청 순으로 처리하되, 처리 중에는 다른
요청을 처리하지 않는다.

3)

요청이 동시에 도착한다면, 파티의 번호
(파티 가입 순서)가 낮은 순으로 획득을
결정한다.
전리품 분배 시스템 기획

• 완료

194
UI 기획
게 임 기 획

포 트 폴 리 오
UI기획의 범위

• 전리품의 분배 프로세스 중,
• 유저와 접점을 가지는 부분

196
UI기획의 범위

197

• 그 중에서도 ,
• 전리품 분배와 관련된 부분만을 다룬다
순서도

198

몬스터1

몬스터1 드랍아이템
DB

몬스터1
HP = 0

데이터 인계 함수

시체
우클릭 시
Call ropitem1.ui.show

전리품 메모리
몬스터 시체

199

기획 의도
전리품 UI를 따로 생성하지 않고 몬스터의
시체를 재활용한다.

사전 시스템
몬스터가 죽으면 이름이 회색으로 바뀌면
특정 모션을 취하는 시체로 변한다.
UI 구성

200

4

1

몬스터 시체
몬스터가 죽어 시체이자, 가방이 된다.

5
6

2

선택 커서
몬스터 시체가 선택되었음을 나타내는 강조 커
서.

1

3

파티클
전리품을 의미하는 반짝이는 파티클 생성.

2

3

4

몬스터 상세 정보
윈도우에 몬스터 이름 및 소유권한을 표시한
다.

5

몬스터 이름
윈도우에 몬스터 이름을 표시한다.

6

소유 권한
윈도우에 몬스터의 소유 권한을 표시한다.
UI 기능

201

1

1

선택 커서
커서 안으로 마우스 우클릭하면, 전리품 가방 UI
를 생성한다.
세부 사항

202

1
2

3

4
5
6
순서도

203

시체

파티 생성
분배 설정

우클릭 시
Call Dropitem1.ui.show
소유권
확인1

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

소지품 가방UI
PC 인벤토리
메모리

소유권
확인2

획득 방
법 결정

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
전리품 가방

204

기획 의도
전리품을 UI 상 한 단계 아래에 배치하여,
소유권을 가방 단위로 구분하고, 바닥에 아
이템들이 널브러져 혼잡해지는 것을 방지
한다.

사전 시스템
전리품 가방의 생성 위치는 캐릭터를 가리
지 않는 상하좌우의 한 곳에 생성한다.
전리품의 획득은 마우스 우클릭 하거나 마
우스로 드래그하여 소지품 창에 드롭하는
방법이 있다.
UI 구성

205

1
2

5

4

전리품 가방
전리품 들이 담겨있는 한 묶음이다.

2

가방 이름
가방의 이름. 몬스터 이름의 길이 때문에 “아
이템”으로 통일.

3

3

가방 공간
골드, 아이템 등, 구체적인 전리품이 들어가는
장소.

1

4

6

몬스터 등급
이 기획서에서는 다루지 않는다.

5
6

닫기 단추
눌러 가방을 닫는다.

아이템 슬롯
전리품 가방 UI의 하부 UI로 저장된 데이터로
부터 아이템 및 골드 UI를 불러온다.

7
7

스핀 버튼
아이템이 4개 초과일 때 생성. 보여지는 아이
템 리스트를 변경한다.
UI 기능

206

3

아이템

1

마우스로 우클릭하면, 아이템을 획득한다.
소유권한이 없으면, 획득 프로세스를 취
소한다.
 마우스 좌클릭으로 드래그해서 소지품창
으로 넣을 수 있다. 이 내용은 다루지 않는
다.


스핀 버튼

2

1

아이템이 4개 초과일 때 생성. 아래 버튼
을 누르면 출력되는 아이템 리스트를 변경.

닫기 버튼

3

전리품 가방 UI를 닫는다.


2

파티 상태로 전리품이 남겨진 채 닫으면,
소유권을 포기한다.
세부 사항

207

2

5

4
3

1

6

7
순서도

208

시체

파티 생성
분배 설정

우클릭 시
Call Dropitem1.ui.show
소유권
확인1

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

소지품 가방UI
PC 인벤토리
메모리

소유권
확인2

획득 방
법 결정

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
전리품 분배 설정

209

기획 의도
파티 설정을 변경한다.
UI 단계 상 2단계, 3단계에 배치하여 UI 1
단계가 혼잡해지는 것을 방지한다.
UI 구성 및 기능

210

1
2

1

캐릭터 창
이미지, 이름, 체력, 마나 UI를 포함. 마우스
우클릭하여 설정 창을 생성한다.

설정 창
전리품 분배 설정 외 게임 설정이 나열되어 있
다.

3

전리품 분배 설정 창
전리품 분배 설정을 한다. 이 기획서에서는 자
유 획득과 차례 대로 획득 만을 다룬다.

5

4

전리품 분배 설정 탭
선택하여 전리품 분배 설정 창을 생성한다.

4

5

6

선택하여 전리품 분배 설정을 자유 획득으로
한다.

3
6

2
7

자유 획득 탭

차례 대로 획득 탭
선택하여 전리품 분배 설정을 차례대로 획득
으로 한다.

7

강조 탭
현재 마우스 커서로 가리키는 탭을 강조한다.
세부 사항

211

1

5
4

6

3
2
7
순서도

212

시체

파티 생성
분배 설정

우클릭 시
Call Dropitem1.ui.show
소유권
확인1

전리품 가방
UI

전리품 메모리
dropitem1

아이템 클릭

소지품 가방UI
PC 인벤토리
메모리

소유권
확인2

1

획득 방
법 결정

데이터 인계 함수

플레이어
가방 검
사

데이터 인계 함수

플레이어
인스턴트 가방
소지품 가방

213

기획 의도
인벤토리를 가방 단위로 생성한다.

사전 시스템
소지품 가방은 기본 가방(16 x 16)만을 다
룬다.

이 기획서에서는 전리품의 획득 방법으로
마우스 우클릭만을 고려한다.
UI 구성

214

1

소지품 창
소지품을 담고 있는 인벤토리 공간.

2
5

4

2

가방 이름
가방의 이름. “소지품”으로 통일.

3

가방 공간
아이템 슬롯을 포함하는 범위. 아이템 슬롯의
개수를 한정한다.

기본 가방의 슬롯의 개수는 16개.
획득하는 가방의 슬롯은 2 * x 개. x 는 1 이상
의 정수.
 왼쪽 위부터 오른쪽 아래 순으로, 아이템 슬롯
에 넘버링을 한다.



6

4

3

5

6

가방 아이콘

이 기획서에서는 다루지 않는다.

닫기 단추

눌러 가방을 닫는다.

아이템 슬롯

빈칸이거나 아이템을 표시한다. 소지품 가방
UI의 하부 UI로 저장된 데이터로 부터 아이템
UI를 불러온다.

7
1

7

골드 슬롯
보유하고 있는 골드의 양을 표시.
UI 기능

215

3
1

아이템 슬롯
아이템을 사용한다. 이 기획서에서는 다루지
않는다.

1
2

골드 슬롯
골드를 획득하면 골드의 레이블을 변경한다.
그 외의 기능은 생략

3

닫기 단추
눌러 가방을 닫는다.

2
세부 사항

216

2
5

4

6

3

7
1
전리품 분배 UI 기획

• 완료

217
끝

218

감사합니다
배상욱
hzael@naver.com
전리품 분배 시스템 기획 배상욱

More Related Content

What's hot

장수계보시스템 역기획서
장수계보시스템 역기획서장수계보시스템 역기획서
장수계보시스템 역기획서Eui hwan Hyeon
 
프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법Lee Sangkyoon (Kay)
 
기획자의 포트폴리오는 어떻게 써야 할까
기획자의 포트폴리오는 어떻게 써야 할까기획자의 포트폴리오는 어떻게 써야 할까
기획자의 포트폴리오는 어떻게 써야 할까Han Je Sung
 
쩌는게임기획서 이렇게 쓴다
쩌는게임기획서 이렇게 쓴다쩌는게임기획서 이렇게 쓴다
쩌는게임기획서 이렇게 쓴다Jinho Jung
 
트레블헌터 개발기획서
트레블헌터 개발기획서트레블헌터 개발기획서
트레블헌터 개발기획서정희 이
 
슈팅게임 개발 포트폴리오
슈팅게임 개발 포트폴리오슈팅게임 개발 포트폴리오
슈팅게임 개발 포트폴리오채호 국
 
위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점Ryan Park
 
쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)
쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)
쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)Kay Kim
 
NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요
NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요
NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요Eunseok Yi
 
게임 시스템 디자인 시작하기
게임 시스템 디자인 시작하기게임 시스템 디자인 시작하기
게임 시스템 디자인 시작하기ByungChun2
 
뉴비라이터를 위한 게임라이팅 일반론
뉴비라이터를 위한 게임라이팅 일반론뉴비라이터를 위한 게임라이팅 일반론
뉴비라이터를 위한 게임라이팅 일반론sinnoske
 
레벨 디자인의 구성
레벨 디자인의 구성레벨 디자인의 구성
레벨 디자인의 구성준태 김
 
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인강 민우
 
엄재민 Nhn과제 신규 게임 컨셉 제안서
엄재민 Nhn과제 신규 게임 컨셉 제안서엄재민 Nhn과제 신규 게임 컨셉 제안서
엄재민 Nhn과제 신규 게임 컨셉 제안서재민 엄
 
NDC 2018 레벨 디자인 튜토리얼 Level Design Tutorial
NDC 2018 레벨 디자인 튜토리얼 Level Design TutorialNDC 2018 레벨 디자인 튜토리얼 Level Design Tutorial
NDC 2018 레벨 디자인 튜토리얼 Level Design Tutorial용태 이
 
업적,칭호,타이틀 그게 뭐든간에...
업적,칭호,타이틀 그게 뭐든간에...업적,칭호,타이틀 그게 뭐든간에...
업적,칭호,타이틀 그게 뭐든간에...SeungYeon Jeong
 
어서와 게임기획은 처음이지?
어서와 게임기획은 처음이지?어서와 게임기획은 처음이지?
어서와 게임기획은 처음이지?Lee Sangkyoon (Kay)
 
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정강 민우
 
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇKieun Jang
 
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계Imseong Kang
 

What's hot (20)

장수계보시스템 역기획서
장수계보시스템 역기획서장수계보시스템 역기획서
장수계보시스템 역기획서
 
프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법
 
기획자의 포트폴리오는 어떻게 써야 할까
기획자의 포트폴리오는 어떻게 써야 할까기획자의 포트폴리오는 어떻게 써야 할까
기획자의 포트폴리오는 어떻게 써야 할까
 
쩌는게임기획서 이렇게 쓴다
쩌는게임기획서 이렇게 쓴다쩌는게임기획서 이렇게 쓴다
쩌는게임기획서 이렇게 쓴다
 
트레블헌터 개발기획서
트레블헌터 개발기획서트레블헌터 개발기획서
트레블헌터 개발기획서
 
슈팅게임 개발 포트폴리오
슈팅게임 개발 포트폴리오슈팅게임 개발 포트폴리오
슈팅게임 개발 포트폴리오
 
위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점위대한 게임개발팀의 공통점
위대한 게임개발팀의 공통점
 
쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)
쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)
쩌는 게임 기획서, 이렇게 쓴다(How to write great design documents) from GDC 2008 (Korean)
 
NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요
NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요
NDC 2013 이은석 - 게임 디렉터가 뭐하는 건가요
 
게임 시스템 디자인 시작하기
게임 시스템 디자인 시작하기게임 시스템 디자인 시작하기
게임 시스템 디자인 시작하기
 
뉴비라이터를 위한 게임라이팅 일반론
뉴비라이터를 위한 게임라이팅 일반론뉴비라이터를 위한 게임라이팅 일반론
뉴비라이터를 위한 게임라이팅 일반론
 
레벨 디자인의 구성
레벨 디자인의 구성레벨 디자인의 구성
레벨 디자인의 구성
 
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
[IGC2018] 캡콤 토쿠다 유야 - 몬스터헌터 월드의 게임 컨셉과 레벨 디자인
 
엄재민 Nhn과제 신규 게임 컨셉 제안서
엄재민 Nhn과제 신규 게임 컨셉 제안서엄재민 Nhn과제 신규 게임 컨셉 제안서
엄재민 Nhn과제 신규 게임 컨셉 제안서
 
NDC 2018 레벨 디자인 튜토리얼 Level Design Tutorial
NDC 2018 레벨 디자인 튜토리얼 Level Design TutorialNDC 2018 레벨 디자인 튜토리얼 Level Design Tutorial
NDC 2018 레벨 디자인 튜토리얼 Level Design Tutorial
 
업적,칭호,타이틀 그게 뭐든간에...
업적,칭호,타이틀 그게 뭐든간에...업적,칭호,타이틀 그게 뭐든간에...
업적,칭호,타이틀 그게 뭐든간에...
 
어서와 게임기획은 처음이지?
어서와 게임기획은 처음이지?어서와 게임기획은 처음이지?
어서와 게임기획은 처음이지?
 
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
[IGC 2017] 넥슨코리아 심재근 - 시스템 기획자에 대한 기본 지식과 준비과정
 
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
[NDC2019] 전소현&장기은 - 시나리오 기획자는 대사만 잘쓰면 되는 거 아닌가요? ㅇㅅㅇ
 
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
NDC 2015. 한 그루 한 그루 심지 않아도 돼요. 생태학에 기반한 [야생의 땅: 듀랑고]의 절차적 생성 생태계
 

전리품 분배 시스템 기획 배상욱

  • 1. 게 임 기 획 포 트 폴 리 오 전리품 분배 시스템/UI 기 획 2013. 10. 28 배상욱 (hzael@naver.com)
  • 2. 목차  기획 의도  시스템 기획  UI 기획
  • 3. 기획 의도 게 임 기 획 포 트 폴 리 오
  • 4. 전리품이란? 2 •게임의 3대 요소 규칙, 동기, 보상의 보상 그 자체 이다
  • 6. 제대로 분배되지 않는다면, •플레이어는 보상을 얻지 못할 수도 있다. 4
  • 7. 3대 요소 중 하나가 없다면, •게임이 재미있을 수 있을까? 다른 플레이어의 간섭으로 분배가 불공정해질 수 있다 5
  • 8. 그러므로, 6 •전리품의 분배의 핵심은 공정성이다 그리하여 적절한 보상이 주어진다
  • 11. 즉, 9 • 시스템 상에서 획득 권한을 정하면, • 플레이어 간의 간섭이 줄어들고, • 불공정함도 줄어든다 만족을 주기 보다는 불만족을 줄이는 방법
  • 13. 그건... 11 • 파티가 생성되기 한참 전, • 루팅을 하기 한참 전, • 전리품 가방이 생성되기도 전, • 몬스터를 죽이기도 전인,
  • 14. 바로, 12 • 몬스터가 PC를 인식하는 순간 다른 사람을 인식하면 내가 죽여도 못먹는다
  • 16. 차근 차근, 14 • 생각해 보았습니다 내용도 깁니다
  • 17. 전리품의 분배 방법 • 어떤 방법들이 있을까? 15
  • 21. 이 외에도, • 추상/구체적, 타플레이어 간섭 가능/불가능, • 즉시/나중에 획득 등의 요소들을 고려하여 19
  • 22. 결정 20 • 몬스터 안에 생성 – UI생성, 소유권 관리에서 유리 • 수동 획득 – 자동/수동 전환 가능으로 큰 의미 없다 • 즉시 획득 – 이 기획에서 다루기 힘든 내용 • 무조건 – 아이템에 따라 달라질 수 있다 • 구체적 – 이 기획에서 다루기 힘든 내용 • 간섭 최소화 – 이 기획에서 다루기 힘든 내용
  • 23. 시스템 기획 게 임 기 획 포 트 폴 리 오
  • 24. 설명을 위해 와우의 스크린샷을 사용했습니다.
  • 25. 전리품의 생성 22 기획 의도 보상, 유저가 위험을 무릎쓰거나 수고한 대가로 주어지는 보상이다. 전리품 분배에 필요한 요소들을 결정하는 과정. 사전 시스템 이후의 전리품이라 함은, 보물 상자 외에 도 몬스터 시체 등, 던전 탐험 혹은 몬스터 처치로 인한 모든 보상을 포함한다. 몬스터가 죽으면 파티클이 생성되어, 전리 품 가방의 생성을 알리고, 몬스터를 클릭 시 전리품 가방이 열린다. 생성된 전리품의 종류와 방법은 이미 결정 되어 있다고 가정한다.
  • 26. 순서도 23 몬스터1 몬스터1 드랍아이템 DB 몬스터1 HP = 0 데이터 인계 함수 시체 우클릭 시 Call ropitem1.ui.show 전리품 메모리
  • 27. 전리품이 생성될 때, •어떤 일이 벌어질까? 24
  • 28. 몬스터 HP = 0, • 몬스터가 시체로 변하며 파티클 생성, • 몬스터의 시체가 전리품 가방이 됨, • 전리품 가방 내에 아이템 생성, • 전리품 가방의 소유권 생성. 25
  • 29. 몬스터 HP = 0, 26 • 몬스터가 시체로 변하며 파티클 생성, 생략 • 몬스터의 시체가 전리품 가방이 됨, • 전리품 가방 내에 아이템 생성, • 전리품 가방의 소유권 생성. 소유권 파트
  • 30. 즉, 다루어야 할 것은 •가방 및 아이템 생성 27
  • 32. 첫째로, 29 몬스터1 몬스터1 드랍아이템 DB 몬스터1 HP = 0 데이터 인계 함수 시체 우클릭 시 Call Dropitem1.ui.show 전리품 메모리
  • 33. 데이터 인계 30 드랍DB 테이블 itmId itmName itmmaxquantity 1롱소드 1 2녹슨검 1 3풀헬름 1 4나무방패 image A Dropitem1 클래스 itmquantity bagid itmId image 1 18R B 1 7G C 1 4D 1 D 1 10J 5쌍검 1 E 1 11K 6강철검 1 F 1 7썬더퓨리 1 G 8발록스킨 1 9빨간포션 10나무지팡이 itmName itmmaxquantity 골드 itmquantity instantid propertyid1 100 3620131024 233602R player1 썬더퓨리 1 120131024 233602G player1 나무방패 나무지팡 이 얼음장검 1 120131024 233602D player1 1 120131024 233602J player1 1 120131024 233602K player1 3C 풀헬름 1 120131024 233602C player1 1 2B 녹슨검 1 120131024 233602B player1 H 1 5E 쌍검 1 120131024 233602E player1 100 I 72 6F 강철검 1 120131024 233602F player1 1 J 1 1 K 1 12강화석 20 L 16 13쌍도끼 1 M 1 14고블린머리 1 N 1 15화살 500 O 360 16잡템 100 P 90 5 Q 2 100 R 36 11얼음장검 17비밀의책 18골드 드랍 테이블로 부터 드랍할 아이템을 결정하여 Dropitem1 클래스에 저장 드랍할 아이템 수와 결정 방법은 사전 정의 propertyid2
  • 34. 둘째로, 31 몬스터1 몬스터1 드랍아이템 DB 몬스터1 HP = 0 데이터 인계 함수 시체 우클릭 시 Call ropitem1.ui.show 전리품 클래스 • 함수 활성화
  • 35. 어떤 함수? 32 If 전리품시체 마우스 우클릭, Then 전리품 가방 UI 로드 Call Dropitem1.UI.show
  • 37. 목표 달성 • 가방과 아이템이 생성되었다 34
  • 38. 시스템 정의 35 사전 정의  monster1.dropitem으로 부터 생성되는 아이템 종류와 방법은 결정되어 있다고 가정한다. 전리품 생성 1) 2) 3)   전리품 가방 클래스인 dropitem1 생성. monster1.dropitem으로 부터 dropitem1.item으로 데이터를 인계한다. 인계되는 데이터 종류는 ex.1참조. 몬스터시체 위 마우스 우클릭 시 활성되 는 함수 생성. 함수의 내용은 전리품 가방 UI 로드. Call dropitem1.ui.show
  • 39. Ex.1 Dropitem1.item 메모리 표1. 생성 아이템 데이터 예시 bagid itmId image 18R 7G 4D 10J 11K 3C 2B 5E 6F itmName itmmaxquantity itmquantity instantid propertyid1 100 3620131024 233602R player1 골드 1 120131024 233602G player1 썬더퓨리 1 120131024 233602D player1 나무방패 나무지팡 1 120131024 233602J player1 이 1 120131024 233602K player1 얼음장검 1 120131024 233602C player1 풀헬름 1 120131024 233602B player1 녹슨검 1 120131024 233602E player1 쌍검 1 120131024 233602F player1 강철검 propertyid2 데이터 종류 가방ID, 아이템ID, UI컨트롤ID, 아이템이름, 아이템 최대 수 량, 아이템 수량, 고유ID, 소유권1, 소유권2
  • 40. 전리품의 획득 36 기획 의도 상황에 따라서 달라지는 아이템의 획득 과 정을 설계한다. 복잡하고 예외사항이 많으므로 정확하고 오류없는 시스템을 목표로 한다. 사전 시스템 몬스터의 첫 타겟이 소유권 획득. monster1.dropitem으로 부터 생성되는 아이템 종류와 방법은 결정되어 있다고 가정한다.  아이템 획득 과정에서 인벤토리의 정 리 기능은 고려하지 않는다.  아이템을 획득하는 방법은 드래그앤드 롭 방법도 있지만, 그 방법은 고려하지 않는다.  
  • 41. 순서도 37 시체 우클릭 시 Call Dropitem1.ui.show 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 PC 인벤토리 메모리 소유권 확인 획득 방 법 결정 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 42. 시체를 클릭하면, • 전리품 가방이 열린다 38
  • 43. UI 열기 39 시체 우클릭 시 Call Dropitem1.ui.show 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 PC 인벤토리 메모리 소유권 확인 획득 방 법 결정 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 44. 시체 클릭 40 사전 정의  기획 의도   전리품을 UI 상 한 단계 아래에 배치하 여, 소유권을 가방 단위로 구분하고, 바 닥에 아이템들이 널브러져 혼잡해지는 것을 방지한다. 처치한 몬스터의 시체가 전리품 가방 이 되어 소유권 판정에 유리하다 monster1.dropitem으로 부터 생성되는 아이템 종류와 방법은 결정되어 있다고 가정한다. 정의 1) 시체를 마우스 우클릭 시 전리품 가방 및 아이템 데이터가 저장된 UI를 불러온다.  Call dropitem1.ui.show
  • 46. 순서도 42 시체 우클릭 시 Call Dropitem1.ui.show 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 PC 인벤토리 메모리 소유권 확인 획득 방 법 결정 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 48. 순서도 44 시체 우클릭 시 Call Dropitem1.ui.show 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 PC 인벤토리 메모리 소유권 확인 획득 방 법 결정 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 49. 아이템을 클릭하면? • 아이템 획득 프로세스가 진행된다 45
  • 50. 클릭하지 않아도, • 아이템을 획득하면 어떨까? 46
  • 51. 선택권이 없어지므로, • 인벤토리 내 원하지 않는 잡템 증가 47
  • 52. 그러므로, • 인벤토리 제약이 심한 MMORPG 류는, • 아이템을 수동획득하는 것이 유리하다 대부분의 경우에 수동/자동을 선택/전환할 수 있다 48
  • 53. 아이템 클릭 49 사전 정의 기획 의도  자동으로 획득하는 경우에 비해 원하 는 아이템만을 획득할 수 있으므로, 인 벤토리를 효율적으로 사용할 수 있다. 아이템이 없는 빈 칸을 클릭하면 아무 일도 일어나지 않는다. 아이템을 수동으로 획득한다.    자동 획득에 비해, 한 번 더 조작해야 하는 번거로움이 있다. 정의 1) 아이템 획득 프로세스를 시작한다.  소유권 확인 단계로.
  • 54. 순서도 50 시체 우클릭 시 Call Dropitem1.ui.show 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 PC 인벤토리 메모리 소유권 확인 획득 방 법 결정 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 55. 소유권 확인은 • 소유권 파트에서 다룬다 51
  • 56. 소유권 검사 결과, • 값이 Yes 이면, 52
  • 57. 첫째로, 53 시체 우클릭 시 Call Dropitem1.ui.show 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 PC 인벤토리 메모리 소유권 확인 획득 방 법 결정 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 58. 첫째로, 54 전리품 메모리 dropitem1.item 전리품 메모리가 저장된 dropitem1.item에서 데이터 인계 함수 플레이어 인스턴트 가방으 로 플레이어 인스턴트 가방 데이터를 인계한다
  • 59. 플레이어 인스턴트 가방 55 기획 의도    아이템의 획득은 복잡한 과정이므로 데이터의 손상, 변경, 오류를 막기 위해 사본 데이터를 만든다. 아이템 획득을 요청하면, 전리품 데이 터는 임시 가방으로 인계된다. 획득 검사에 따라, 플레이어 가방 메모 리에 임시 가방 데이터를 인계 하거나 임시 가방의 데이터를 폐기한다. 정의 1)  PC 인벤토리와 같지만, 메모리 상에만 존재하는 가상의 가방. PC1.Instantbag
  • 60. 데이터 인계 56 기획 의도  아이템 획득 프로세스의 중간 과정. 정의 1) Dropitem1.item의 데이터를 PC1.instantbag으로 인계한다.  PC1.instantbag = Dropitem1.item
  • 61. 둘째로, 57 시체 우클릭 시 Call Dropitem1.ui.show 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 PC 인벤토리 메모리 소유권 확인 획득 방 법 결정 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 62. 가방 검사 이유 • 왜 가방을 검사해야 할까? 58
  • 67. 오류2 63 • 중복 아이템이 합쳐지지 않음
  • 68. 그 외, 64 • 수 많은 오류들이 있다
  • 71. 빈 칸 검사 • 좌에서 우, 위에서 아래로 빈 칸을 검사한다 실제로는 UI를 검사하는 것이 아니라 메모리를 검사한다 67
  • 72. 빈 칸이 하나라도 있으면, • Blankchk_pc1_bag = True 하나도 없으면 False 68
  • 73. 빈 칸 검사 69 기획 의도  아이템을 획득하기 전 가방에 빈 공간 이 있는 지를 확인한다. 사전 정의  이 기획에서는 16칸 가방만을 다룬다. 정의 1) 플레이어 가방의 메모리 값을 순서대로 검사하여 값이 Empty가 아닌 것이 있으 면, 검사를 중단하고, Blankchk_pc1_bag = True로 한다. 없으면, False.
  • 74. 두 번째, 70 • 중복 아이템 검사
  • 75. 중복 검사 좌에서 우, 위에서 아래로 중복인 아이템을 검사한다 71
  • 76. 그런데 뭐가 중복이라는 거지? 전리품 메모리 dropitem1 데이터 인계 함수 플레이어 인스턴트 가방 인스턴트 가방에 저장된 아이템ID와 PC 가방에 있는 아이템ID를 비교 72
  • 77. 값이 같다면, 73 • Dplchk_pc1_bag = True 같은 게 하나도 없으면 False
  • 78. 라고 하면 땡, • Dplchk_pc1_bag = True 74
  • 79. 그 이유 중복이므로 첫 번째 슬롯에 합쳐져야 한다 75
  • 81. 최대 수량 초과로, • 에러 발생 77
  • 84. 최대 수량이면, False, 그리고 다음 슬롯으로 80
  • 85. 검사결과 같은 게 있으면, • Dplchk_pc1_bag = True 같은 게 하나도 없으면 False 81
  • 86. 중복 체크 82 기획 의도   아이템을 획득하기 전, 소지품에 같은 항목이 있는 지를 확인한다. 수량이 최대가 아닌 중복 아이템을 빈 칸으로 볼 것인 지, 아이템으로 볼 것인 지 를 결정하는 과정. 정의 1) 2) 3) 좌에서 우, 위에서 아래의 순서로 진행한 다. Pc1.instantbag 의 아이템ID와 PC의 가방 내 아이템ID를 비교한다. 같은 것이 있다면, 그 아이템의 수량과 최 대 수량을 비교한다. 값이 같다면, dplchk_pc1_bag = True로 한다. 검사 결 과 위를 만족하는 값이 없으면, False로 한다.
  • 87. 순서도 83 시체 우클릭 시 Call Dropitem1.ui.show 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 PC 인벤토리 메모리 소유권 확인 획득 방 법 결정 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 88. 두 가지 값 84 • Blankchk_pc1_bag • Dplchk_pc1_bag
  • 89. 두 가지 값 85 • 두 값의 의미는 무엇일까?
  • 91. 두 가지 값을 조합하여, • 모든 경우의 수를 표현할 수 있다 전리품 분배에 관련하여 87
  • 92. 네 가지 경우의 수 • Blank = True, Dplchk = True • Blank= True, Dplchk = False • Blank= False, Dplchk = True • Blank= False, Dplchk = False 88
  • 93. 네 가지 경우의 수 • 빈 칸이 있고 중복이 있다 • 빈 칸이 있고 중복이 없다 • 빈 칸이 없고 중복이 있다 • 빈 칸이 없고 중복이 없다 89
  • 94. 빈 칸이 있고 중복이 있다 • 중복을 채우고 남는게 있으면, 빈 칸을 채운다 • 채우고 남는게 없으면, 종료 90
  • 95. 빈칸 有 중복 有 91 기획 의도  전리품을 획득하는 과정에서 인벤토리 공간과 중복 아이템이 모두 있을 때, 우 선 순위 및 처리 방법을 결정한다. 정의 1) 사전 정의 아이템 획득 과정에서 인벤토리의 정 리 기능은 고려하지 않는다.  아이템을 획득하는 방법은 드래그앤드 롭 방법도 있지만, 그 방법은 고려하지 않는다.  dplchk_pc1_bag 값과 blankchk_pc1_bag 값이 모두 True 이면, pc1.TT 를 실행한다.  Call pc1.TT
  • 96. 빈 칸이 있고 중복이 없다 • 빈 칸에 채운다 92
  • 97. 빈칸 有 중복 無 93 정의 기획 의도  전리품을 획득하는 과정에서 인벤토리 공간은 있지만 중복 아이템은 없는 상 태.  예외가 아닌 가장 일반적인 상황이다. 1) dplchk_pc1_bag 값이 True 이고, blankchk_pc1_bag 값이 False 이면, pc1.TF 를 실행한다.  Call pc1.TF
  • 98. 빈 칸이 없고 중복이 있다 • 중복을 채우고 남는게 있으면, 전리품 가방을 채운다 • 채우고 남는게 없으면, 종료 94
  • 99. 빈칸 無 중복 有 95 기획 의도   전리품을 획득하는 과정에서 인벤토리 공간은 없지만 중복 아이템은 있는 상 태. 중복 아이템을 빈 공간으로 보는 경우, 인벤토리가 가득찼어도 획득할 수 있다. 정의 1) dplchk_pc1_bag 값이 False 이고, blankchk_pc1_bag 값이 True 이면, pc1.FT 를 실행한다.  Call pc1.FT
  • 100. 빈 칸이 없고 중복이 없다 • 획득 프로세스를 종료하고 • “빈 칸이 없습니다.” 출력 96
  • 101. 빈칸 無 중복 無 97 정의 기획 의도  전리품을 획득하는 과정에서 인벤토리 공간이 없고 중복 아이템도 없는 상황. 1) dplchk_pc1_bag 값이 False 이고, blankchk_pc1_bag 값이 False 이면, pc1.FF 를 실행한다.  Call pc1.FF
  • 102. 순서도 98 시체 우클릭 시 Call Dropitem1.ui.show 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 PC 인벤토리 메모리 소유권 확인 pc1_TT 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 103. 빈칸 有 중복 有 합치려면 중복 아이템의 위치를 알아야 한다 99
  • 105. 다음은, 101 Itmquantity = 1 Itmquantity = 1 두 아이템의 수량을 비교
  • 106. 다음의 식에 대입 Itmquantity = 1 Itmquantity = 1 102 Itmmaxquantity = 20 각 수량의 합이 최고 수량보다 큰 지를 확인
  • 107. 합 < 최대수량 Itmquantity = 1 103 Itmquantity = 1 작다 < Itmmaxquantity = 20
  • 108. 합 < 최대수량 Itmquantity = 1 104 Itmquantity = 1 < Itmmaxquantity = 20 첫 번째 슬롯에 합친다 합 친 후 인스턴트백의 데이터 삭제, 전리품 데이터 및 UI 삭제
  • 109. 합 = 최대수량 Itmquantity = 10 105 Itmquantity = 10 같을 때는, = Itmmaxquantity = 20
  • 110. 합 = 최대수량 Itmquantity = 10 106 Itmquantity = 10 = Itmmaxquantity = 20 첫 번째 슬롯에 합친다 합 친 후 인스턴트백의 데이터 삭제, 전리품 데이터 및 UI 삭제
  • 111. 합 > 최대수량 Itmquantity = 10 107 Itmquantity = 11 > 그럼 클 때는? Itmmaxquantity = 20
  • 112. 합 > 최대수량 Itmquantity = 10 108 Itmquantity = 11 - Itmmaxquantity = 20 합에서 최대 수량을 빼고 소지품의 데이터를 최대 수량으로 한다
  • 113. 합 > 최대수량 Itmquantity = 10 109 Itmquantity = 11 > 다시 빈칸 검사 Itmmaxquantity = 20
  • 114. 합 > 최대수량 Itmquantity = 10 110 Itmquantity = 11 > Itmmaxquantity = 20 빈 칸에 나머지를 집어 넣는다 인스턴트백의 데이터 삭제, 전리품 데이터 및 UI 삭제
  • 115. 빈칸 有 중복 有 111 정의 기획 의도  전리품을 획득하는 과정에서 인벤토리 공간과 중복 아이템이 모두 있을 때, 우 선 순위 및 처리 방법을 결정한다. 1) 2) 사전 정의 아이템 획득 과정에서 인벤토리의 정 리 기능은 고려하지 않는다.  아이템을 획득하는 방법은 드래그앤드 롭 방법도 있지만, 그 방법은 고려하지 않는다.  아이템 획득 메시지는 채팅 창에 표시 되는 것으로 가정한다.  3) pc 인벤토리를 ‘중복 검사’와 같은 방법 으로 검사하여 중복인 아이템의 슬롯 번 호, ID를 참조한다. (pc1.inventory.itemquantity) pc1.instantbag.itmquantity 와 pc1.inventory.itequantity를 합하여 그 값 은 plus로 하고, Plus pc1.inventory.itmmmaxquantity = exeed 로 한다. a. exeed <= 0 이면, pc1.inventory.itmquantity = plus로 한다. b. exeed > 0 이면, pc1.inventory.itmquantity = pc1.inventory.itmmaxquantity 로 하 고, ‘빈 칸 검사’를 수행하여 빈 슬 롯의 pc1.inventory 값에 pc1.instantbag(itmqantity = exeed) 값을 인계한다. pc1.instantbag 과 dropitem1.item 데이 터를 모두 삭제한다.
  • 116. 예외 사항 이런 경우는 어떻게 처리할까? 112
  • 117. 이 기획에서 벗어나는 경우 • 드래그앤드롭으로 획득 시 생길 수 있다 113
  • 118. 이 상태로 만든 후, Pc1_TT를 다시 한번 실행 114
  • 119. 순서도 115 시체 우클릭 시 Call Dropitem1.ui.show 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 PC 인벤토리 메모리 소유권 확인 pc1_TF 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 120. 빈칸 有 중복 無 116 빈 칸 검사
  • 121. 검사 후, 117 고민없이 빈 슬롯에 넣는다
  • 122. 빈칸 有 중복 無 118 정의 기획 의도  전리품을 획득하는 과정에서 인벤토리 공간은 있지만 중복 아이템은 없는 상 태.  예외가 아닌 가장 일반적인 상황이다. 1) 2) pc 인벤토리를 ‘중복 검사’와 같은 방법 으로 검사하여 중복인 아이템의 슬롯 번 호, ID를 참조한다. (pc1.inventory.itemquantity) pc1.inventory 값에 pc1.instantbag 값을 대입한다.
  • 123. 순서도 119 시체 우클릭 시 Call Dropitem1.ui.show 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 PC 인벤토리 메모리 소유권 확인 pc1_FT 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 124. 빈칸 無 중복 有 빈칸有중복無과정과처음은같다 120
  • 125. 중복 아이템에 채우고, 나머지는 넣을 데가 없으므로, 121
  • 127. 빈칸 無 중복 有 123 정의 1) 2) 기획 의도  전리품을 획득하는 과정에서 인벤토리 공간은 없지만 중복 아이템은 있는 상 태. 3) pc 인벤토리를 ‘중복 검사’와 같은 방법 으로 검사하여 중복인 아이템의 슬롯 번 호, ID를 참조한다. (pc1.inventory.itemquantity) pc1.instantbag.itmquantity 와 pc1.inventory.itmquantity를 합하여 그 값 은 plus로 하고, Plus pc1.inventory.itmmmaxquantity = exeed 로 한다. a. exeed <= 0 이면, pc1.inventory.itmquantity = exeed 로 한다. b. exeeds > 0 이면, pc1.inventory.itmquantity = pc1.inventory.itmmaxquantity 로 하 고, dropitem1.item.itmquantity = exeed 로 한다. pc1.instantbag의 데이터를 삭제한다.
  • 128. 순서도 124 시체 우클릭 시 Call Dropitem1.ui.show 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 PC 인벤토리 메모리 소유권 확인 pc1_FF 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 129. 빈칸 無 중복 無 125 기획 의도  전리품을 획득하는 과정에서 인벤토리 공간이 없고 중복 아이템도 없는 상황. 정의 1) 2) pc1.instantbag의 데이터를 삭제한다. “더 이상 집을 수 없습니다.” 메시지 출력.
  • 132. 순서도 128 시체 파티 생성 분배 설정 우클릭 시 Call Dropitem1.ui.show 소유권 확인1 PC 인벤토리 메모리 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 소유권 확인2 데이터 인계 함수 골드 획 득 플레이어 인스턴트 가방 데이터 인계 함수
  • 134. 골드 획득 130 정의 기획 의도  전리품 중 골드를 획득 하는 방법. 1) 2) 3) pc1의 골드 데이터는 pc1.gold에 저장한 다. Pc1.instantbag.itmID값이 골드의 ID 값이 면, Pc1.gold = pc1. gold + pc1.instantbag.gold 로 한다. Pc1.instantbag과 dropitem1.itm 의 데이 터를 삭제한다.
  • 135. 소유권의 생성 및 확인 131 기획 의도 전리품의 공정한 분배를 위해 전리품의 소 유권을 생성한다. 소유권을 생성하고 확인하는 과정을 필요 한 곳에 위치시킨다. 사전 시스템 몬스터의 첫 어그로 대상(타겟)이 몬스터 전리품의 소유권을 획득하게 된다. 파티라 면, 파티가 획득. 일부 몬스터의 가방은 소유권이 없더라도 같은 파티면 열 수 있다. 그러나 아이템획 득 소유권은 없을 수 있다.
  • 136. 최초 소유권의 생성 몬스터가 PC를 인식한 순간 생성 132
  • 137. 이 소유권을, • 어떻게 적용해야 할까? 133
  • 140. 순서도 136 시체 우클릭 시 Call Dropitem1.ui.show 소유권 확인1 PC 인벤토리 메모리 전리품 가방 UI 아이템 클릭 소유권 확인2 획득 방 법 결정 데이터 인계 함수 전리품 메모리 dropitem1 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 141. 시체를 클릭할 때 소유권이 있다면 가방이 열린다 137
  • 142. 만약, 138 다른 이가 죽인 시체를 클릭하면, 열리지 않는다
  • 143. 소유권 확인1 139 기획 의도  정의 소유권을 가방에 부여하여 묶음 단위 로 전리품의 분배가 이루어진다. 1) 사전 정의  일부 몬스터의 가방은 소유권이 없더 라도 같은 파티면 열 수 있다. 그러나 아이템획득 소유권은 없을 수 있다. 2) 몬스터의 HP가 0이 될 때, 생성되는 함 수 Dropitem1.ui.show를 실행시키려 하면, insproperty와 시도자의 ID를 검사하여 두 값이 같으면, 전리품 UI를 불러온다. 3) 같지 않으면, UI로드를 취소한다. 몬스터의 첫 어그로 대상(타겟)이 몬스 터 전리품의 소유권을 획득하게 된다. 파티라면, 파티가 획득.  몬스터의 첫 타겟이 된 PC의 ID를 insproperty에 저장해 놓는다.
  • 144. 아이템을 획득하려 할 때, 마찬가지로 소유권을 검사한다 140
  • 145. 소유권 확인2 141 정의 1) 기획 의도  예외적으로 타인이 가방을 열었을 때, 소유권한을 검사하여 소유권자가 아니 면 획득 프로세스를 중단한다. 몬스터의 첫 타겟이 된 PC의 ID를 메모 리에 저장해 놓는다. 2) 몬스터의 HP가 0이 될 때, 생성되는 전 리품의 dropitem1.item.propertyid1에 저 장해 놓은 PC의 ID를 인계한다. 3) 위에서 생성된 전리품 가방 내의 아이템 중 하나를 획득하려고 시도할 때, propertyid1과 시도자의 ID를 검사하여 두 값이 같으면, 아이템획득 프로세스를 진 행한다. 4) 같지 않으면, 프로세스를 중단하고, “획 득할 수 없습니다.”라는 메세지를 출력한 다.
  • 148. 즉, 144 파티1 소유권(몬스터1) 파티원1 파티원2 파티원3 파티 전체를 하나의 캐릭터로 취급 자유 획득이라면 소유권(몬스터 2) PC4
  • 149. 그런데, • 차례대로 획득하고 싶을 때는 어떻게 해야할까? 145
  • 151. 설정을 변경하면, 몬스터마다 획득 권한이 생성된다 147
  • 156. 만약 몬스터를 줄세우면, 몬스터1 몬스터2 몬스터3 몬스터를 처치할 때마다 몬스터ID와 처치한 수를 메모리에 기록해야한다 152 몬스터4
  • 158. 최초 파티를 생성할 때, 154 파티1 partyid = party1 파티원1 파티원2 파티원3 첫 번째, 파티ID를 생성한다 자유 획득용 파티원4
  • 159. 최초 파티를 생성할 때, 155 파티1 partyid = party1 파티원1 파티원2 파티원3 파티원4 partynmb=1 partynmb=2 partynmb=3 partynmb=4 두 번째, 파티원 넘버를 결정한다 파티 가입 순서에 따라
  • 161. 몬스터를 처치하면, Partyid=party1 partynmb=1 두 값을 부여하고 partynmb에 1을 더한다 157
  • 164. 파티의 생성 및 분배 방법 설정 기획 의도  원하는 설정에 따라 전리품 분배 방법 이 변경될 수 있는 시스템을 만든다. 사전 정의    주사위 굴림, 착용자 우선 획득 시스템 은 만들어 져 있다고 가정한다. 위의 두 시스템을 활성하면, 특정 아이 템 등급을 정하여 그 등급 이상의 아이 템은 주사위 굴림과 착용자를 고려하여 획득 방법이 결정된다. 영웅 등급 이상의 아이템이나, 위의 분 배 등급에 해당하는 아이템은 이 기획 의 내용에 해당되지 않는다. 정의 1) 2) 3) 4) 최초 파티 생성 시 partyID를 생성한다. 파티원순서 번호를 각 플레이어에게 배 정한다. Partynmb 몬스터가 죽을 때, 위의 두 값을 몬스터 의 소유권 property1, property2에 각각 부 여한다. 전리품 분배 방법을 설정한다. “자유 획 득”, “ 차례 대로 획득”. 160
  • 165. 순서도 161 시체 파티 생성 분배 설정 우클릭 시 Call Dropitem1.ui.show 소유권 확인1 PC 인벤토리 메모리 전리품 가방 UI 아이템 클릭 소유권 확인2 획득 방 법 결정 데이터 인계 함수 전리품 메모리 dropitem1 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 166. 자유 획득 162 정의 1) 2) 기획 의도  파티 내 소유권을 파티원 모두로 한다. 3) 4) 5) 6) 몬스터의 첫 타겟이 된 PC의 partyID를 insproperty에 저장해 놓는다. 몬스터의 HP가 0이 될 때, 생성되는 함 수 Dropitem1.ui.show를 실행시키려 하면, insproperty와 시도자의 partyID를 검사하 여 두 값이 같으면, 전리품 UI를 불러온다. 같지 않으면, UI로드를 취소한다. 몬스터의 HP가 0이 될 때, 생성되는 전 리품의 dropitem1.item.propertyid1에 위 의 partyID를 인계한다. 위에서 생성된 전리품 가방 내의 아이템 중 하나를 획득하려고 시도할 때, propertyid1과 시도자의 partyID를 검사하 여 두 값이 같으면, 아이템획득 프로세스 를 진행한다. 같지 않으면, 프로세스를 중단하고, “획 득할 수 없습니다.”라는 메세지를 출력한 다.
  • 167. 차례 대로 획득 기획 의도  163 5) 파티 내 소유권을 순차적으로 정한다. 정의 1) 2) 3) 4) 몬스터의 첫 타겟이 된 PC의 partyID를 insproperty에 저장해 놓 는다. 몬스터의 첫 타겟이 된 PC가 속해 있는 파티의 파티넘버, partynmb를 저장해 놓는다. 몬스터의 dropitem1.item.property1 = insproperty로 하고, property2 = insnmb 로 한다. insnmb = insnmb + 1 6) 7) 8) 9) 몬스터의 HP가 0이 될 때, 생성되는 함수 Dropitem1.ui.show를 실행시키려 하면, insproperty와 시도자의 partyid를, insnmb와 시도자의 partynmb의 일치 여 부를 확인한다.두 결과 값이 모두 참인 경 우, 전리품 UI를 불러온다. 같지 않으면, UI로드를 취소한다. 몬스터의 HP가 0이 될 때, 생성되는 전 리품의 dropitem1.item.propertyid1에 위 의 partynmb 값을 인계한다. 위에서 생성된 전리품 가방 내의 아이템 중 하나를 획득하려고 시도할 때, property1과 시도자의 partyid를, propertyid2과 시도자의 partynmb의 일치 여부를 확인한다.두 결과 값이 모두 참인 경우, 아이템 획득 프로세스를 진행한다. 같지 않으면, 프로세스를 중단하고, “획 득할 수 없습니다.”라는 메세지를 출력한 다.
  • 168. 예외 사항 164 • 분배 방법의 검사 순서
  • 169. 소유권 생성/검사 순서 파티 인가? yes yes 차례 대로 획 득 차례 획득? 165 no no 자유 획득 일반 획득
  • 170. 소유권 확인1 166 정의 기획 의도  1) 몬스터의 첫 타겟이 된 PC의 partyid 값 을 검사하여, a. 값이 empty이면, 2), 3), 4)를 진행 한다. b. 값이 empty가 아니고 차례대로획 득이면, 차례대로획득 프로세스를 진행한다. c. 값이 empty가 아니고 차례대로획 득이 아니면, 자유획득 프로세스를 진행한다. 2) 몬스터의 첫 타겟이 된 PC의 ID를 insproperty에 저장해 놓는다. 3) 몬스터의 HP가 0이 될 때, 생성되는 함 수 Dropitem1.ui.show를 실행시키려 하면, insproperty와 시도자의 ID를 검사하여 두 값이 같으면, 전리품 UI를 불러온다. 4) 같지 않으면, UI로드를 취소한다. 소유권을 가방에 부여하여 묶음 단위 로 전리품의 분배가 이루어진다. 사전 정의  몬스터의 첫 어그로 대상(타겟)이 몬스 터 전리품의 소유권을 획득하게 된다. 파티라면, 파티가 획득.  일부 몬스터의 가방은 소유권이 없더 라도 같은 파티면 열 수 있다. 그러나 아이템획득 소유권은 없을 수 있다.
  • 171. 소유권 확인2 167 기획 의도 예외적으로 타인이 가방을 열었을 때, 소유권한을 검사하여 소유권자가 아니 면 획득 프로세스를 중단한다. 2) 몬스터의 첫 타겟이 된 PC의 ID를 메모 리에 저장해 놓는다. 3) 몬스터의 HP가 0이 될 때, 생성되는 전리품의 dropitem1.item.propertyid1에 저장해 놓은 PC의 ID를 인계한다. 4)  위에서 생성된 전리품 가방 내의 아이 템 중 하나를 획득하려고 시도할 때, propertyid1과 시도자의 ID를 검사하여 두 값이 같으면, 아이템획득 프로세스를 진행한다. 5) 같지 않으면, 프로세스를 중단하고, “획 득할 수 없습니다.”라는 메세지를 출력 한다. 정의 1) 몬스터의 첫 타겟이 된 PC의 partyid 값 을 검사하여, a. 값이 empty이면, 2), 3), 4)를 진행 한다. b. 값이 empty가 아니고 차례대로획 득이면, 차례대로획득 프로세스를 진행한다. c. 값이 empty가 아니고 차례대로획 득이 아니면, 자유획득 프로세스를 진행한다.
  • 172. 예외 사항 168 • 파티 골드 분배 방법
  • 173. 1/N 169 파티1 파티원1 파티원2 파티원3 파티원4 5 Gold 5 Gold 5 Gold 5 Gold 20 Gold 파티원 수 대로 골드를 나눈다
  • 175. 두 가지 변수 생성 171 파티1 5.25 Gold R, 소수점 변수 5 Gold P, 정수 변수 5.25 Gold R = P이면, Gold = Gold + P로 한다 R = P가 아니면, 획득자는 Gold = Gold + P + 1, 파티원은 Gold = Gold + P
  • 176. 해결 172 파티1 파티원1 파티원2 파티원3 파티원4 5 + 1 Gold 5 Gold 5 Gold 5 Gold 21 Gold 획득하는 사람에게 소수점 이하를 몰아준다
  • 177. 골드 획득 173 정의 1) 기획 의도 2)  전리품 중 골드를 획득하는 방법. 3) 4) 획득자의 Partyid가 Empty라면 2)를 진 행한다. 아니라면, “파티 골드 획득”을 진 행한다. pc1의 골드 데이터는 pc1.gold에 저장한 다. Pc1.instantbag.itmID값이 골드의 ID 값이 면, Pc1.gold = pc1. gold + pc1.instantbag.gold 로 한다. Pc1.instantbag과 dropitem1.itm 의 데이 터를 삭제한다.
  • 178. 파티 골드 획득 174 정의 1) 2) 기획 의도  파티에서 골드를 분배하는 방법. 3) 4) PC1의 골드 데이터는 PC1.gold에 저장 한다. PC1.instantbag.itmID값이 골드의 ID 값 이면, (pc1.instantbag.itm.quantity / 파티 원의 수) 를 소수 변수 R, 정수 변수 P에 각각 넣는다. R=P라면, 1) 파티원의 PC.gold = PC.gold + P로 한다. 2) 아니라면, 획득자(PC1)은 PC1.gold = PC1.gold + P + 1로 하 고, 파티원은 PC.gold = PC.gold + P로 한다. Pc1.instantbag과 dropitem1.itm 의 데이 터를 삭제한다.
  • 180. 아이템 있는 채로, 전리품 가방을 닫으면 소유권이 변경된다 파티원 모두 획득 가능 176
  • 181. 순서도 177 시체 파티 생성 분배 설정 우클릭 시 Call Dropitem1.ui.show 소유권 확인1 PC 인벤토리 메모리 전리품 가방 UI 아이템 클릭 소유권 확인2 획득 방 법 결정 데이터 인계 함수 전리품 메모리 dropitem1 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 182. 순서도 178 시체 파티 생성 분배 설정 우클릭 시 Call Dropitem1.ui.show 소유권 확인1 PC 인벤토리 메모리 아이템 클릭 소유권 확인2 획득 방 법 결정 데이터 인계 함수 전리품 메모리 dropitem1 가방 닫기 전리품 가방 UI 플레이어 가방 검 사 소유권 확인3 데이터 인계 함수 플레이어 인스턴트 가방
  • 183. 소유권 포기 179 기획 의도   전리품의 획득 권한을 파티원 모두로 변경한다. 전리품은 공정하게 분배되어야 하므로, 1차 소유권자가 획득을 포기하더라도 2차 소유권자는 획득할 수 있도록 한다. 사전 시스템  닫기 버튼을 눌러 가방을 닫는 것 외에 도, 이동하면 가방이 닫힌다.  이동하여 가방이 닫힐 때에도 같은 프 로세스를 적용한다. 정의 1) 2) 파티상태(partyid = not empty)이고 차례 대로 획득(turnsecurevalue = true)일 때, 전리품 가방에 아이템이 남아있는 채로 가방을 닫으면, 해당 전리품 가방 및 아이템의 소유권 1(propertyid1)을 파티의 partyid로 한다. dropitm.itm.property1 = partyid
  • 184. 예외 사항 • 여러 플레이어의 아이템 획득 요청 180
  • 185. 플레이어1이 아이템 획득 요청 181 서버 플레이어1 플레이어2 플레이어3 플레이어4 P1이 A획득 P1이 A획득 A를 클릭 소유권 확인 결과가 참이 다 P1이 A획득 P1이 A획득 A가 획득한다
  • 186. 동시에, 182 서버 플레이어1 플레이어2 플레이어3 A를 클릭 A를 클릭 A를 클릭 소유권 확인 여러 명이 요청하는 경우 어떻게 해야 할까? 플레이어4
  • 187. 결과 183 서버 플레이어1 플레이어2 플레이어3 A를 클릭 A를 클릭 플레이어4 A를 클릭 소유권 확인 소유권 = P2 P2가 A획득 P2가 A획득 P2가 A획득 P2가 A획득 인스턴트가방 초기화 인스턴트가방 초기화 인스턴트가방 초기화 소유권있는 사람이 획득 P2가 A획득
  • 188. 그러나 이방법은, 184 서버 플레이어1 플레이어2 플레이어3 A를 클릭 A를 클릭 플레이어4 A를 클릭 소유권 확인 소유권 = P2 P2가 A획득 P2가 A획득 P2가 A획득 P2가 A획득 인스턴트가방 초기화 인스턴트가방 초기화 인스턴트가방 초기화 불필요한 정보 전달로 비효율적이다 P2가 A획득
  • 189. 삭제 185 서버 플레이어1 플레이어2 플레이어3 A를 클릭 A를 클릭 A를 클릭 소유권 확인 소유권 확인 플레이어4 소유권 확인 P2가 A획득 P2가 A획득 P2가 A획득 P2가 A획득 인스턴트가방 초기화 인스턴트가방 초기화 인스턴트가방 초기화 P2가 A획득 각 클라이언트에서 소유권이 확인된 사람만 요청 가능
  • 190. 소유권자 3명이 동시에 요청하면? 186 서버 플레이어1 플레이어2 플레이어3 A를 클릭 A를 클릭 A를 클릭 소유권 확인 소유권 확인 소유권 확인 플레이어4
  • 191. 소유권자 3명이 동시에 요청하면? 187 서버 플레이어1 플레이어2 플레이어3 A를 클릭 A를 클릭 A를 클릭 소유권 확인 소유권 확인 플레이어4 소유권 확인 파티넘버1 = P2 P2가 A획득 P2가 A획득 P2가 A획득 P2가 A획득 인스턴트가방 초기화 인스턴트가방 초기화 인스턴트가방 초기화 파티넘버 순으로 획득 P2가 A획득
  • 192. 만약, 188 서버 플레이어1 플레이어2 플레이어3 A를 클릭 A를 클릭 A를 클릭 소유권 확인 소유권 확인 플레이어4 소유권 확인 파티넘버1 = P2 P2가 A획득 P2가 A획득 P2가 A획득 P2가 A획득 가방 공간 없 음 획득 후 가방 공간이 없다면, P2가 A획득
  • 193. 에러 189 서버 플레이어1 플레이어2 플레이어3 A를 클릭 A를 클릭 A를 클릭 소유권 확인 소유권 확인 플레이어4 소유권 확인 파티넘버1 = P2 P2가 A획득 P2가 A획득 P2가 A획득 error P2가 A획득 P2가 A획득
  • 194. 그러므로, 190 서버 플레이어1 플레이어2 플레이어3 A를 클릭 A를 클릭 A를 클릭 소유권 확인 소유권 확인 소유권 확인 가방 공간 확 인 가방 공간 확 인 플레이어4 가방 공간 확 인 P3가 A획득 P3가 A획득 P3가 A획득 P3가 A획득 가방 검사 이후 요청이 가능하게 한다 인벤토리외에도 획득할 수 있는 조건인가를 검사한다 P3가 A획득
  • 195. 그러므로, 191 • 소유권 검사와 가방 검사 후 • 프로세스 진행 여부를 요청한다
  • 196. 순서도 192 시체 파티 생성 분배 설정 우클릭 시 Call Dropitem1.ui.show 전리품 가방 UI 소유권 확인1 PC 인벤토리 메모리 전리품 메모리 dropitem1 아이템 클릭 서버 소유권 확인2 데이터 인계 함수 Yes No 획득 방 법 결정 데이터 인계 함수 플레이어 가방 검 사 플레이어 인스턴트 가방 삭제
  • 197. 획득 판정 193 기획 의도  여러 플레이어가 동시에 아이템 획득 을 요청하는 경우를 처리한다 정의 1) 소유권 검사 결과와 빈칸검사 결과 아이 템을 획득할 수 있는 경우라면, 서버에 아 이템 획득을 요청한다. 2) 요청 순으로 처리하되, 처리 중에는 다른 요청을 처리하지 않는다. 3) 요청이 동시에 도착한다면, 파티의 번호 (파티 가입 순서)가 낮은 순으로 획득을 결정한다.
  • 198. 전리품 분배 시스템 기획 • 완료 194
  • 199. UI 기획 게 임 기 획 포 트 폴 리 오
  • 200. UI기획의 범위 • 전리품의 분배 프로세스 중, • 유저와 접점을 가지는 부분 196
  • 201. UI기획의 범위 197 • 그 중에서도 , • 전리품 분배와 관련된 부분만을 다룬다
  • 202. 순서도 198 몬스터1 몬스터1 드랍아이템 DB 몬스터1 HP = 0 데이터 인계 함수 시체 우클릭 시 Call ropitem1.ui.show 전리품 메모리
  • 203. 몬스터 시체 199 기획 의도 전리품 UI를 따로 생성하지 않고 몬스터의 시체를 재활용한다. 사전 시스템 몬스터가 죽으면 이름이 회색으로 바뀌면 특정 모션을 취하는 시체로 변한다.
  • 204. UI 구성 200 4 1 몬스터 시체 몬스터가 죽어 시체이자, 가방이 된다. 5 6 2 선택 커서 몬스터 시체가 선택되었음을 나타내는 강조 커 서. 1 3 파티클 전리품을 의미하는 반짝이는 파티클 생성. 2 3 4 몬스터 상세 정보 윈도우에 몬스터 이름 및 소유권한을 표시한 다. 5 몬스터 이름 윈도우에 몬스터 이름을 표시한다. 6 소유 권한 윈도우에 몬스터의 소유 권한을 표시한다.
  • 205. UI 기능 201 1 1 선택 커서 커서 안으로 마우스 우클릭하면, 전리품 가방 UI 를 생성한다.
  • 207. 순서도 203 시체 파티 생성 분배 설정 우클릭 시 Call Dropitem1.ui.show 소유권 확인1 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 소지품 가방UI PC 인벤토리 메모리 소유권 확인2 획득 방 법 결정 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 208. 전리품 가방 204 기획 의도 전리품을 UI 상 한 단계 아래에 배치하여, 소유권을 가방 단위로 구분하고, 바닥에 아 이템들이 널브러져 혼잡해지는 것을 방지 한다. 사전 시스템 전리품 가방의 생성 위치는 캐릭터를 가리 지 않는 상하좌우의 한 곳에 생성한다. 전리품의 획득은 마우스 우클릭 하거나 마 우스로 드래그하여 소지품 창에 드롭하는 방법이 있다.
  • 209. UI 구성 205 1 2 5 4 전리품 가방 전리품 들이 담겨있는 한 묶음이다. 2 가방 이름 가방의 이름. 몬스터 이름의 길이 때문에 “아 이템”으로 통일. 3 3 가방 공간 골드, 아이템 등, 구체적인 전리품이 들어가는 장소. 1 4 6 몬스터 등급 이 기획서에서는 다루지 않는다. 5 6 닫기 단추 눌러 가방을 닫는다. 아이템 슬롯 전리품 가방 UI의 하부 UI로 저장된 데이터로 부터 아이템 및 골드 UI를 불러온다. 7 7 스핀 버튼 아이템이 4개 초과일 때 생성. 보여지는 아이 템 리스트를 변경한다.
  • 210. UI 기능 206 3 아이템 1 마우스로 우클릭하면, 아이템을 획득한다. 소유권한이 없으면, 획득 프로세스를 취 소한다.  마우스 좌클릭으로 드래그해서 소지품창 으로 넣을 수 있다. 이 내용은 다루지 않는 다.  스핀 버튼 2 1 아이템이 4개 초과일 때 생성. 아래 버튼 을 누르면 출력되는 아이템 리스트를 변경. 닫기 버튼 3 전리품 가방 UI를 닫는다.  2 파티 상태로 전리품이 남겨진 채 닫으면, 소유권을 포기한다.
  • 212. 순서도 208 시체 파티 생성 분배 설정 우클릭 시 Call Dropitem1.ui.show 소유권 확인1 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 소지품 가방UI PC 인벤토리 메모리 소유권 확인2 획득 방 법 결정 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 213. 전리품 분배 설정 209 기획 의도 파티 설정을 변경한다. UI 단계 상 2단계, 3단계에 배치하여 UI 1 단계가 혼잡해지는 것을 방지한다.
  • 214. UI 구성 및 기능 210 1 2 1 캐릭터 창 이미지, 이름, 체력, 마나 UI를 포함. 마우스 우클릭하여 설정 창을 생성한다. 설정 창 전리품 분배 설정 외 게임 설정이 나열되어 있 다. 3 전리품 분배 설정 창 전리품 분배 설정을 한다. 이 기획서에서는 자 유 획득과 차례 대로 획득 만을 다룬다. 5 4 전리품 분배 설정 탭 선택하여 전리품 분배 설정 창을 생성한다. 4 5 6 선택하여 전리품 분배 설정을 자유 획득으로 한다. 3 6 2 7 자유 획득 탭 차례 대로 획득 탭 선택하여 전리품 분배 설정을 차례대로 획득 으로 한다. 7 강조 탭 현재 마우스 커서로 가리키는 탭을 강조한다.
  • 216. 순서도 212 시체 파티 생성 분배 설정 우클릭 시 Call Dropitem1.ui.show 소유권 확인1 전리품 가방 UI 전리품 메모리 dropitem1 아이템 클릭 소지품 가방UI PC 인벤토리 메모리 소유권 확인2 1 획득 방 법 결정 데이터 인계 함수 플레이어 가방 검 사 데이터 인계 함수 플레이어 인스턴트 가방
  • 217. 소지품 가방 213 기획 의도 인벤토리를 가방 단위로 생성한다. 사전 시스템 소지품 가방은 기본 가방(16 x 16)만을 다 룬다. 이 기획서에서는 전리품의 획득 방법으로 마우스 우클릭만을 고려한다.
  • 218. UI 구성 214 1 소지품 창 소지품을 담고 있는 인벤토리 공간. 2 5 4 2 가방 이름 가방의 이름. “소지품”으로 통일. 3 가방 공간 아이템 슬롯을 포함하는 범위. 아이템 슬롯의 개수를 한정한다. 기본 가방의 슬롯의 개수는 16개. 획득하는 가방의 슬롯은 2 * x 개. x 는 1 이상 의 정수.  왼쪽 위부터 오른쪽 아래 순으로, 아이템 슬롯 에 넘버링을 한다.   6 4 3 5 6 가방 아이콘 이 기획서에서는 다루지 않는다. 닫기 단추 눌러 가방을 닫는다. 아이템 슬롯 빈칸이거나 아이템을 표시한다. 소지품 가방 UI의 하부 UI로 저장된 데이터로 부터 아이템 UI를 불러온다. 7 1 7 골드 슬롯 보유하고 있는 골드의 양을 표시.
  • 219. UI 기능 215 3 1 아이템 슬롯 아이템을 사용한다. 이 기획서에서는 다루지 않는다. 1 2 골드 슬롯 골드를 획득하면 골드의 레이블을 변경한다. 그 외의 기능은 생략 3 닫기 단추 눌러 가방을 닫는다. 2
  • 221. 전리품 분배 UI 기획 • 완료 217