# Player

## Player

게임에 참여한 플레이어 객체에요. 이 기능들은 서버에서만 사용 가능해요.

### **함수**

<br>

| **Character GetCharacter()** |
| ---------------------------- |

플레이어의 캐릭터를 얻을 수 있어요.

\-- 샘플 --

```lua
local character = player:GetCharacter() --플레이어의 캐릭터를 반환해요.
```

<br>

| **number GetPlayerID()** |
| ------------------------ |

플레이어의 아이디를 얻을 수 있어요.

\-- 샘플 --

```lua
print(player:GetPlayerID()) --플레이어의 플레이어 아이디를 숫자로 반환해요.
```

<br>

| **string GetPlayerNickName()** |
| ------------------------------ |

플레이어의 닉네임을 얻을 수 있어요.

\-- 샘플 --

```lua
print(player:GetPlayerNickName()) --플레이어의 플레이어 닉네임을 문자로 반환해요.
```

<br>

| **string GetTeamName()** |
| ------------------------ |

플레이어가 속해있는 팀 이름을 얻을 수 있어요.

\-- 샘플 --

```lua
print(player.Name .. " Team : " .. player:GetTeamName()) --팀 이름을 반환해요.
```

<br>

| **void KillCharacter()** |
| ------------------------ |

플레이어 캐릭터를 죽게 하는 함수에요.

\-- 샘플 --

```lua
player:KillCharacter() --플레이어의 캐릭터를 죽여요.
```

<br>

| **void RespawnCharacter()** |
| --------------------------- |

플레이어 캐릭터를 리스폰 시키는 함수에요.

\-- 샘플 --

```lua
player:RespawnCharacter() --플레이어의 캐릭터를 리스폰해요.
```

<br>

| **void SetCheckPoint(SpawnPoint SpawnPointObject)** |
| --------------------------------------------------- |

플레이어의 체크 포인트를 설정할 수 있어요 (설정할 스폰 포인트 오브젝트)

<br>

| **void SetCheckPoint(Object TargetObject)** |
| ------------------------------------------- |

플레이어의 체크 포인트를 설정할 수 있어요 (설정할 월드 오브젝트)

\-- 샘플 --

```lua
local NewCheckPoint = Workspace.Cube
player:SetCheckPoint(NewCheckPoint)
```

<br>

| **SpawnPoint GetCheckPoint()** |
| ------------------------------ |

플레이어의 체크 포인트를 가져올 수 있어요.

\-- 샘플 --

```lua
local playerCheckPoint = player:GetCheckPoint()
print(playerCheckPoint)
```

<br>

| **void RemoveCheckPoint()** |
| --------------------------- |

설정해놓은 체크 포인트를 지워요.

\-- 샘플 --

```lua
player:RemoveCheckPoint()
```

<br>

| **void SetFreeCamMode(bool bFreeCam)** |
| -------------------------------------- |

플레이어의 프리캠 모드 사용여부를 설정할 수 있어요. (프리캠 사용 여부)

\-- 샘플 --

```lua
player:SetFreeCamMode(true)
```

<br>

| **bool GetFreeCamMode()** |
| ------------------------- |

해당 플레이어가 프리캠 모드 상태인지 가져올 수 있어요.

\-- 샘플 --

```lua
player:SetFreeCamMode(true)
local freeCamMode = player:GetFreeCamMode()
print(freeCamMode) -- true
```

<br>

| **void RequestFreeCam(number WaitTime)** |
| ---------------------------------------- |

지정된 시간이 지난 후에 플레이어의 프리캠 모드를 요청해요. (대기 시간)

\-- 샘플 --

```lua
player:RequestFreeCam(3) --3초후 프리캠이 시작돼요.
```

<br>

| **bool GiveItem(Item ObjectItem)** |
| ---------------------------------- |

플레이어에게 아이템을 줄 수 있어요. (줄 아이템) return 성공, 실패

\-- 샘플 --

```lua
local item = Script.Parent

wait(2)
player:GiveItem(item) --플레이어에게 아이템을 지급해요.
```

<br>

| **bool GiveItem(Item ObjectItem, number Count)** |
| ------------------------------------------------ |

플레이어에게 아이템을 줄 수 있어요. (줄 아이템, 개수) return 성공, 실패

\-- 샘플 --

```lua
local item = Script.Parent
local count = 3

wait(2)
bool isSuccess = player:GiveItem(item, count) --플레이어에게 아이템을 3개 지급해요.
```

<br>

| **number GetInventorySize()** |
| ----------------------------- |

플레이어의 인벤토리 사이즈를 얻을 수 있어요.

\-- 샘플 --

```lua
print(player:GetInventorySize()) --플레이어의 인벤토리 사이즈를 숫자로 반환해요.
```

<br>

| **void DeleteItem(number index)** |
| --------------------------------- |

해당 플레이어의 인벤토리 칸에 해당 아이템을 삭제해요. (삭제하려는 칸)

\-- 샘플 --

```lua
player:DeleteItem(1)
```

<br>

| **void DeleteItem(number index, number count)** |
| ----------------------------------------------- |

해당 플레이어의 인벤토리 칸에 해당 아이템을 갯수만큼 삭제해요. (삭제하려는 칸, 삭제갯수)

\-- 샘플 --

```lua
player:DeleteItem(1, 3)
```

<br>

| **void DeleteItem(Item TargetItem)** |
| ------------------------------------ |

해당 플레이어의 인벤토리에서 해당하는 아이템을 삭제해요. (삭제하려는 아이템)

\-- 샘플 --

```lua
player:DeleteItem(item)
```

<br>

| **void DeleteItem(Item TargetItem, number count)** |
| -------------------------------------------------- |

해당 플레이어의 인벤토리에서 해당하는 아이템을 갯수만큼 삭제해요. (삭제하려는 아이템, 삭제갯수)

\-- 샘플 --

```lua
player:DeleteItem(item, 3)
```

<br>

| **void ClearItem()** |
| -------------------- |

플레이어의 아이템을 모두 제거해요.

\-- 샘플 --

```lua
player:ClearItem()
```

<br>

| **bool EquipInventoryItem(number InventoryIndex)** |
| -------------------------------------------------- |

플레이어 캐릭터에 아이템을 장착시킬 수 있어요. (장착 할 인벤토리 칸)

\-- 샘플 --

```lua
local item = Script.Parent
local collider = Item.BoxCollider

local function GetItem(self, character)
    if not character:IsCharacter() then
        return
    end

    local player = character:GetPlayer()
    bool isSuccess = player:GiveItem(item) --플레이어에게 아이템을 지급해요.

    if isSuccess then
        local InvenItemList = Player:GetInventoryItemList()

        --플레이어 인벤토리에서 이름으로 아이템을 찾아요.
        for slotIndex, slotItem in pairs(InvenItemList) do
            if slotItem.Name == item.Name then
                --플레이어 캐릭터에 아이템을 장착시켜요.
                player:EquipInventoryItem(slotIndex)
                return
            end
        end
    end
end
collider.Collision.OnBeginOverlapEvent:Connect(GetItem)
```

<br>

| **void SwapInventoryItem(number InventoryIndex, number InventoryIndex\_Other)** |
| ------------------------------------------------------------------------------- |

인벤토리 안의 두 아이템 위치를 서로 바꿔요.

<br>

| **void SetItemQuickSlot(number QuickSlotId, number InventoryIndex)** |
| -------------------------------------------------------------------- |

아이템을 퀵슬롯에 등록해요.

<br>

| **void ReleaseItemQuickSlot(number QuickSlotId)** |
| ------------------------------------------------- |

아이템을 퀵슬롯에서 해제해요.

<br>

| **void ClearQuickSlot()** |
| ------------------------- |

퀵슬롯에 등록된 모든 아이템 해제해요.

<br>

| **void SwapItemQuickSlot(number QuickSlotId\_A, number QuickSlotId\_B)** |
| ------------------------------------------------------------------------ |

퀵슬롯에 등록된 두 아이템을 서로 바꿔요.

<br>

| **void UseItemQuickSlot(number QuickSlotId)** |
| --------------------------------------------- |

퀵슬롯에 등록된 아이템을 사용해요.

<br>

| **Item GetItemQuickSlot(number QuickSlotId)** |
| --------------------------------------------- |

퀵슬롯에 등록된 아이템을 얻어요.

<br>

| **void SetEnableCollisionBetweenCharacters(bool Enable)** |
| --------------------------------------------------------- |

플레이어간의 충돌 여부를 설정할 수 있어요. (충돌 여부)

\-- 샘플 --

```lua
player:SetEnableCollisionBetweenCharacters(false) --특정 플레이어가 다른 캐릭터와 충돌되지 않게 설정해요.
```

<br>

| **void SetUserCollisionTypeResponse(string UserCollisionType, CollisionResponse Response)** |
| ------------------------------------------------------------------------------------------- |

유저가 충돌 시 발생 타입을 설정할 수 있어요. (충돌 타입 이름 설정, [Enum.CollisionResponse.타입](https://ditoland-utplus.gitbook.io/ditoland/api-reference/enums/collisionresponse) )

\-- 샘플 --

```lua
Game:AddUserCollisionType("CollisionTag1") --게임에 유저 충돌 타입(CollisionTag1)을 추가해요.

local cube1 = Workspace.Cube1
local cube2 = Workspace.Cube2

cube1.Collision:SetCollisionType("CollisionTag1") --객체A에 충돌 타입(CollisionTag1)을 설정해요.

cube2.Collision:SetUserCollisionTypeResponse("CollisionTag1", Enum.CollisionResponse.Overlap) --또 다른 객체B에 충돌 타입(CollisionTag1)별 충돌 반응을 설정해요.
```

<br>

| **bool HaveInventorySaveData()** |
| -------------------------------- |

저장소에 인번토리에 대한 데이터가 저장되어 있는지 확인할 수 있어요.

\-- 샘플 --

```lua
print(player:HaveInventorySaveData()) --저장소에 인번토리에 대한 데이터가 저장되어 있으면 true를 반환해요.
```

<br>

| **HitResult LineTrace(Vector Start, Vector Dir, number Distance)** |
| ------------------------------------------------------------------ |

(deprecated) 설정된 시작 지점에서 원하는 방향으로 지정된 거리 만큼 충돌이 있는지 체크할 수 있어요. (시작 지점 Vector, 방향 Vector, 거리 값)\
사용하는 player는 체크에서 제외됩니다.

<br>

| **HitResult LineTrace(Vector Start, Vector Dir, number Distance, string UserCollisionTypeName)** |
| ------------------------------------------------------------------------------------------------ |

(deprecated) 설정된 시작 지점에서 원하는 방향으로 지정된 거리 만큼 유저가 추가한 충돌 타입과의 충돌이 있는지 체크할 수 있어요. (시작 지점 Vector, 방향 Vector, 거리 값, 원하는 유저 충돌 타입 이름)\
사용하는 player는 체크에서 제외됩니다.

<br>

| **HitResult LineTraceList(Vector Dir, number Distance)** |
| -------------------------------------------------------- |

설정된 시작 지점에서 원하는 방향으로 지정된 거리 만큼 충돌이 있는지 체크할 수 있어요. (시작 지점 Vector, 방향 Vector, 거리 값)\
사용하는 player는 체크에서 제외됩니다.

<br>

| **HitResult LineTraceList(Vector Dir, number Distance, string UserCollisionTypeName)** |
| -------------------------------------------------------------------------------------- |

설정된 시작 지점에서 원하는 방향으로 지정된 거리 만큼 유저가 추가한 충돌 타입과의 충돌이 있는지 체크할 수 있어요. (시작 지점 Vector, 방향 Vector, 거리 값, 원하는 유저 충돌 타입 이름)\
사용하는 player는 체크에서 제외됩니다.

\-- 샘플 --

```lua
local startPos = Workspace.Cube.Transform.Location
local dir = Vector.new(1, 0, 0)
local distance = 1000

local target = player:LineTrace(startPos, dir, distance) --시작 위치에서 지정 방향의 거리에 충돌체가 있으면 충돌 정보를 반환해요.

print(target.HitObject.Name) --충돌한 오브젝트에요.
print(target.HitLocation) --충돌한 오브젝트의 위치에요.
```

<br>

| **ItemObject GetInventoryItem(number InventoryIndex)** |
| ------------------------------------------------------ |

지정된 칸의 인벤토리 아이템을 얻을 수 있어요. (인벤토리 칸)

\-- 샘플 --

```lua
if player:GetInventoryItem(1) ~= nil then
    print(player:GetInventoryItem(1).Name) --지정된 칸의 인벤토리 아이템을 반환해요.
end
```

<br>

| **Table GetInventoryItemList()** |
| -------------------------------- |

인벤토리 안의 모든 아이템을 얻어요. 결과값은 슬롯 인덱스와 해당 슬롯의 아이템을 쌍으로 하는 테이블이에요.

\-- 샘플 --

```lua
local InvenItemList = Player:GetInventoryItemList()

for slotIndex, slotItem in pairs(InvenItemList) do
		print(slotIndex .. " " .. slotItem.Name)
end
```

<br>

| **Item GetEquipItem(string EquipSlot)** |
| --------------------------------------- |

플레이어 캐릭터가 착용중인 아이템을 얻을 수 있어요. (장착 중인 아이템 슬롯)

\-- 샘플 --

```lua
if player:GetEquipItem("EquipSlot_1") ~= nil then
    print(player:GetEquipItem("EquipSlot_1").Name) --플레이어 캐릭터가 착용중인 아이템을 반환해요.
end
```

<br>

| **void AddSaveValue(string ValueName, Vector Data, ReplicateType Type, number Time)** |
| ------------------------------------------------------------------------------------- |

해당 유저의 저장되는 벡터를 추가해요. (Value 이름, Vector 데이터, [Enum.ReplicateType.타입](https://ditoland-utplus.gitbook.io/ditoland/api-reference/enums/replicatetype) , 동기화 시간)

<br>

| **void AddSaveValue(string ValueName, number Data, ReplicateType Type, number Time)** |
| ------------------------------------------------------------------------------------- |

해당 유저의 저장되는 실수를 추가해요. (Value 이름, number 데이터, [Enum.ReplicateType.타입](https://ditoland-utplus.gitbook.io/ditoland/api-reference/enums/replicatetype) , 동기화 시간)

<br>

| **void AddSaveValue(string ValueName, bool Data, ReplicateType Type, number Time)** |
| ----------------------------------------------------------------------------------- |

해당 유저의 저장되는 bool을 추가해요. (Value 이름, bool 데이터, [Enum.ReplicateType.타입](https://ditoland-utplus.gitbook.io/ditoland/api-reference/enums/replicatetype) , 동기화 시간)

<br>

| **void AddSaveValue(string ValueName, string Data, ReplicateType Type, number Time)** |
| ------------------------------------------------------------------------------------- |

해당 유저의 저장되는 문자열을 추가해요. (Value 이름, string 데이터, [Enum.ReplicateType.타입](https://ditoland-utplus.gitbook.io/ditoland/api-reference/enums/replicatetype) , 동기화 시간)

<br>

| **void AddSaveValue(string ValueName, Color Data, ReplicateType Type, number Time)** |
| ------------------------------------------------------------------------------------ |

해당 유저의 저장되는 컬러를 추가해요. (Value 이름, Color 데이터, [Enum.ReplicateType.타입](https://ditoland-utplus.gitbook.io/ditoland/api-reference/enums/replicatetype) , 동기화 시간)

<br>

| **void AddLandTransferData(string ValueName, Vector Value)** |
| ------------------------------------------------------------ |

<br>

| **void AddLandTransferData(string ValueName, Double Value)** |
| ------------------------------------------------------------ |

<br>

| **void AddLandTransferData(string ValueName, Bool Value)** |
| ---------------------------------------------------------- |

<br>

| **void AddLandTransferData(string ValueName, string Value)** |
| ------------------------------------------------------------ |

<br>

| **void AddLandTransferData(string ValueName, Color Value)** |
| ----------------------------------------------------------- |

랜드 이동시 다른 랜드로 전달할 데이터를 추가할 수 있어요.\
보통 AddTeleportStartEvent와 같이 사용해요

\-- 샘플 --

```lua
local LandOrder1 = 1
local function StartTeleport_Land1(player)
    --텔레포트할 랜드에서 사용할 데이터를 저장해요.
	player:AddLandTransferData("LevelData1", 124)
	player:AddLandTransferData("PartyName", "DeathParty")
end
Game:AddTeleportStartEvent(LandOrder1, StartTeleport_Land1) --플레이어가 특정 랜드로 텔레포트 이동을 시작할때 호출되는 함수를 연결해요.

local LandOrder2 = 3
local function StartTeleport_Land2(player)
    --텔레포트할 랜드에서 사용할 데이터를 저장해요.
	player:AddLandTransferData("LevelData2", 555)
	player:AddLandTransferData("PartyName", "FriendParty")
end
Game:AddTeleportStartEvent(LandOrder2, StartTeleport_Land2) --플레이어가 특정 랜드로 텔레포트 이동을 시작할때 호출되는 함수를 연결해요.
```

<br>

| **Vector GetLandTransferData(Vector ValueName)** |
| ------------------------------------------------ |

<br>

| **Double GetLandTransferData(Double ValueName)** |
| ------------------------------------------------ |

<br>

| **Bool GetLandTransferData(Bool ValueName)** |
| -------------------------------------------- |

<br>

| **string GetLandTransferData(string ValueName)** |
| ------------------------------------------------ |

<br>

| **Color GetLandTransferData(Color ValueName)** |
| ---------------------------------------------- |

이전 랜드에서 설정한 데이터를 가져올 수 있어요.

\-- 샘플 --

```lua
player:GetLandTransferData("LevelData")	--이전 랜드에서 설정한 값을 가져와요.
player:GetLandTransferData("PartyName")	--이전 랜드에서 설정한 값을 가져와요.
```

<br>

| **void SetUsingCharacterSetting(CharacterSetting CharacterSettingObject)** |
| -------------------------------------------------------------------------- |

(deprecated) 해당 플레이어의 캐릭터 세팅을 설정해요. (설정할 캐릭터 세팅)

<br>

| **void SetUsingCharacterSetting(CharacterSetting CharacterSettingObject, bool bUseMyBody)** |
| ------------------------------------------------------------------------------------------- |

(deprecated) 해당 플레이어의 캐릭터 세팅을 설정해요. (설정할 캐릭터 세팅, 캐릭터 체형을 자신의 캐릭터 체형으로 사용할지 여부)

<br>

| **void ChangeCharacterSetting(CharacterSetting CharacterSettingObject)** |
| ------------------------------------------------------------------------ |

해당 플레이어의 캐릭터 세팅을 설정해요. (설정할 캐릭터 세팅)\
Game:SetUsingCharacterSetting 과 달리 즉시 반영돼요.

\-- 샘플 --

```lua
local NewCharacterSetting = Workspace.NewCharacterSetting
player:ChangeCharacterSetting(NewCharacterSetting) --해당 플레이어의 캐릭터가 바로 변경돼요
```

<br>

| **void ChangeCharacterSetting(CharacterSetting CharacterSettingObject, bool bUseMyBody)** |
| ----------------------------------------------------------------------------------------- |

해당 플레이어의 캐릭터 세팅을 설정해요. (설정할 캐릭터 세팅, 캐릭터 체형을 자신의 캐릭터 체형으로 사용할지 여부)\
Game:SetUsingCharacterSetting 과 달리 즉시 반영돼요.

\-- 샘플 --

```lua
local NewCharacterSetting = Workspace.NewCharacterSetting
player:ChangeCharacterSetting(NewCharacterSetting, false) --해당 플레이어의 캐릭터가 바로 변경돼요
```

<br>

| **CharacterSetting GetUsingCharacterSetting()** |
| ----------------------------------------------- |

(deprecated) 해당 플레이어의 사용중인 캐릭터 세팅을 가져올 수 있어요.

<br>

| **void ChangeCharacterBaseSetting(CharacterBaseSetting BaseSettingObject)** |
| --------------------------------------------------------------------------- |

해당 플레이어의 캐릭터 세팅을 설정해요. (설정할 캐릭터 세팅)

\-- 샘플 --

```lua
local BaseSettingObject = Toybox.FPSCharacterSetting.BaseSettingObject
player:ChangeCharacterBaseSetting(BaseSettingObject) --해당 플레이어의 캐릭터가 바로 변경돼요
```

<br>

| **void ChangeCharacterAppearanceSetting(CharacterAppearanceSetting AppearanceSettingObject)** |
| --------------------------------------------------------------------------------------------- |

해당 플레이어의 캐릭터 세팅을 설정해요. (설정할 캐릭터 세팅)

\-- 샘플 --

```lua
local AppearanceSetting = Toybox.FPSCharacterSetting.AppearanceSetting
player:ChangeCharacterAppearanceSetting(AppearanceSetting) --해당 플레이어의 캐릭터가 바로 변경돼요
```

<br>

| **void ChangeCharacterAnimationSetting(CharacterAnimationSetting AnimationSettingObject)** |
| ------------------------------------------------------------------------------------------ |

해당 플레이어의 캐릭터 세팅을 설정해요. (설정할 캐릭터 세팅)

\-- 샘플 --

```lua
local AnimationSetting = Toybox.FPSCharacterSetting.AnimationSetting
player:ChangeCharacterAnimationSetting(AnimationSetting) --해당 플레이어의 캐릭터가 바로 변경돼요
```

<br>

| **void StoreCurrentCharacterSetting()** |
| --------------------------------------- |

해당 플레이어의 현재 캐릭터 세팅을 저장해요.

<br>

| **void RestorePreviousCharacterSetting()** |
| ------------------------------------------ |

StoreCurrentCharacterSetting 함수로 저장했던 세팅으로 되돌아 갑니다.

<br>

| **void StoreCurrentCharacterBaseSetting()** |
| ------------------------------------------- |

해당 플레이어의 현재 캐릭터 Base 세팅을 저장해요.

<br>

| **void RestorePreviousCharacterBaseSetting()** |
| ---------------------------------------------- |

StoreCurrentCharacterBaseSetting 함수로 저장했던 세팅으로 되돌아 갑니다.

<br>

| **void StoreCurrentCharacterAppearanceSetting()** |
| ------------------------------------------------- |

해당 플레이어의 현재 캐릭터 Appearance 세팅을 저장해요.

<br>

| **void RestorePreviousCharacterAppearanceSetting()** |
| ---------------------------------------------------- |

StoreCurrentCharacterAppearanceSetting 함수로 저장했던 세팅으로 되돌아 갑니다.

<br>

| **void StoreCurrentCharacterAnimationSetting()** |
| ------------------------------------------------ |

해당 플레이어의 현재 캐릭터Animation 세팅을 저장해요.

<br>

| **void RestorePreviousCharacterAnimationSetting()** |
| --------------------------------------------------- |

StoreCurrentCharacterAnimationSetting 함수로 저장했던 세팅으로 되돌아 갑니다.

<br>

| **EventKeyReturnData AddEventKey(string EventName, function Function)** |
| ----------------------------------------------------------------------- |

해당 플레이어를 해당하는 이름의 이벤트에 등록시켜요. (이벤트 이름, 이벤트 등록 후 반환값을 받을 함수)

\-- 샘플 --

```lua
local function DoEventKey(player, eventKeyReturnData)
    wait(1)

    local state = eventKeyReturnData.State --이벤트키의 상태
    local maxCount = eventKeyReturnData.MaxCount --이벤트키의 최대 인원
    local useCount = eventKeyReturnData.UseCount --이벤트키의 참여자 수
    local result = eventKeyReturnData.Result --이벤트키 등록 결과

	--이벤트키 상태 및 등록 수
	if state == Enum.EventKeyState.Wait then
		print("이벤트키 상태 : 대기")
	elseif state == Enum.EventKeyState.Doing then
		print("이벤트키 상태 : 진행")
	elseif state == Enum.EventKeyState.Stop then
		print("이벤트키 상태 : 중지")
	elseif state == Enum.EventKeyState.End then
		print("이벤트키 상태 : 종료")
	end
	print("이벤트키 등록 수 : ", useCount, " / ", maxCount)

    --이벤트키 등록 결과가 Success이면
    if result == Enum.EventKeyResult.Success then
        print("이벤트키를 등록했습니다!")

    --이벤트키 사용 결과가 Exist이면
    elseif result == Enum.EventKeyResult.Exist then
        print("이미 등록한 이벤트키입니다!")

    --이외에는
    else
        print("유효하지 않은 이벤트키입니다!")
    end
end

--이벤트키에 플레이어를 등록 처리해요.
--(이벤트키 이름, 이벤트키 등록 처리 함수)
player:AddEventKey("EventKeyName", DoEventKey)
```

<br>

| **CouponReturnData UseCoupon(string CouponType, function Function)** |
| -------------------------------------------------------------------- |

해당 플레이어에게 해당하는 쿠폰을 사용해요. (쿠폰 타입이름, 이벤트 등록 후 반환값을 받을 함수)

\-- 샘플 --

```lua
local function DoUseCoupon(player, couponReturnData)
	local state = couponReturnData.State --쿠폰의 상태
    local couponType = couponReturnData.CouponType --쿠폰의 보상 종류
    local result = couponReturnData.Result --쿠폰 사용 결과

    --쿠폰 상태 및 보상
    if state == Enum.CouponState.Wait then
        print("쿠폰 상태 : 대기")
    elseif state == Enum.CouponState.Doing then
        print("쿠폰 상태 : 진행")
    elseif state == Enum.CouponState.Stop then
        print("쿠폰 상태 : 중지")
    elseif state == Enum.CouponState.End then
        print("쿠폰 상태 : 종료")
    end
    print("쿠폰 보상 타입 : ", couponType)

    --쿠폰 사용 결과가 Success이면
    if result == Enum.CouponResult.Success then
        print("쿠폰을 사용했습니다!")

        if couponType == "Gold" then
            player.Gold = player.Gold + 1000
        end

    --쿠폰 사용 결과가 Exist이면
    elseif result == Enum.CouponResult.Exist then
        print("이미 사용한 쿠폰입니다!")

    --이외에는
    else
        print("유효하지 않은 쿠폰입니다!")
    end
end

--플레이어에게 해당 쿠폰을 사용 처리해요.
--(쿠폰 번호, 쿠폰 사용 처리 함수)
player:UseCoupon("CouponNumber", DoUseCoupon)
```

<br>

| **void UseRemainCoupon(string CouponType, function Function)** |
| -------------------------------------------------------------- |

해당 플레이어에게 미사용 쿠폰을 사용해요. (쿠폰 타입이름, 이벤트 등록 후 반환값을 받을 함수)\
연결된 함수로 player, CouponData 가 전달되요.

\-- 샘플 --

```lua
local function DoUseRemainCoupon(player, couponReturnData)
    local state = couponReturnData.State --쿠폰의 상태
    local couponType = couponReturnData.CouponType --쿠폰의 보상 종류
    local result = couponReturnData.Result --쿠폰 사용 결과

    --쿠폰 상태 및 보상
    if state == Enum.CouponState.Wait then
        print("쿠폰 상태 : 대기")
    elseif state == Enum.CouponState.Doing then
        print("쿠폰 상태 : 진행")
    elseif state == Enum.CouponState.Stop then
        print("쿠폰 상태 : 중지")
    elseif state == Enum.CouponState.End then
        print("쿠폰 상태 : 종료")
    end
    print("쿠폰 보상 타입 : ", couponType)

    --쿠폰 사용 결과가 Success이면
    if result == Enum.CouponResult.Success then
        print("쿠폰을 사용했습니다!")

        if couponType == "Gold" then
            player.Gold = player.Gold + 1000
        end

    --쿠폰 사용 결과가 Exist이면
    elseif result == Enum.CouponResult.Exist then
        print("이미 사용한 쿠폰입니다!")

    --이외에는
    else
        print("유효하지 않은 쿠폰입니다!")
    end
end

-- 남은 쿠폰 사용
player:UseRemainCoupon(couponName, DoUseRemainCoupon)
```

<br>

| **void DoGetRemainCouponCount(string CouponType, function Function)** |
| --------------------------------------------------------------------- |

해당 플레이어의 사용 가능한 쿠폰 수량을 얻어올 수 있어요.\
연결된 함수로 player, number count 가 전달되요

\-- 샘플 --

```lua
local function DoGetRemainCouponCount(player, count)
    print("Remain Coupon Count : ", count)
end

-- 쿠폰 남은 수량 확인
player:GetRemainCouponCount(couponName, DoGetRemainCouponCount)
```

\ <br>

## **사용 가능한 부모 오브젝트 기능들**

### **속성**

| **이름**                                                                                | **설명**               |
| ------------------------------------------------------------------------------------- | -------------------- |
| [**Parent**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object) | **부모 객체를 얻을 수 있어요.** |
| [**Name**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)   | **객체의 이름입니다.**       |

### **이벤트**

| **이름** | **설명** |
| ------ | ------ |

### **함수**

| **이름**                                                                                                    | **설명**                                                                                                                                                                                         |
| --------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [**ConnectChangeEventFunction**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object) | **추가된 값이 변경 될 때 호출되는 이벤트에요. (Value 이름, 연결 함수)**                                                                                                                                                |
| [**GetChild**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                   | **이름으로 자식 객체를 얻을 수 있어요. (찾고싶은 자식 객체 이름)**                                                                                                                                                      |
| [**GetChildList**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)               | **자식 객체의 리스트를 얻을 수 있어요.**                                                                                                                                                                      |
| [**IsCharacter**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                | **캐릭터인지 확인할 수 있어요.**                                                                                                                                                                           |
| [**IsStaticMesh**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)               | **스테틱 메시인지 확인할 수 있어요.**                                                                                                                                                                        |
| [**IsFX**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                       | **FX인지 확인할 수 있어요.**                                                                                                                                                                            |
| [**IsSound**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                    | **Sound인지 확인할 수 있어요.**                                                                                                                                                                         |
| [**IsPointLight**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)               | **포인트 라이트인지 확인할 수 있어요.**                                                                                                                                                                       |
| [**IsSpotLight**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                | **스포트 라이트인지 확인할 수 있어요.**                                                                                                                                                                       |
| [**IsSurfaceUI**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                | **서피스 UI인지 확인할 수 있어요.**                                                                                                                                                                        |
| [**IsScreenUI**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                 | **스크린 UI인지 확인할 수 있어요.**                                                                                                                                                                        |
| [**IsTouchUI**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                  | **터치 UI인지 확인할 수 있어요.**                                                                                                                                                                         |
| [**IsItem**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                     | **아이템인지 확인할 수 있어요.**                                                                                                                                                                           |
| [**IsNPC**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                      | **NPC인지 확인할 수 있어요.**                                                                                                                                                                           |
| [**IsScript**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                   | **스트립트인지 확인할 수 있어요.**                                                                                                                                                                          |
| [**IsCollider**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                 | **Collider인지 확인할 수 있어요.**                                                                                                                                                                      |
| [**IsWidget**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                   | **Widget인지 확인할 수 있어요.**                                                                                                                                                                        |
| [**IsCamera**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                   | **Camera인지 확인할 수 있어요.**                                                                                                                                                                        |
| [**IsValid**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)                    | **해당 오브젝트가 유효한지 확인 할 수있어요.**                                                                                                                                                                   |
| [**IsValidValue**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)               | **해당 오브젝트의 값이 유효한지 확인할 수 있어요.**                                                                                                                                                                |
| [**AddReplicateValue**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)          | **해당 객체에 서버, 클라이언트 간 동기화가 가능한 벡터를 추가해요. (추가할 Value 이름, Vector 데이터,** [**Enum.ReplicateType.타입**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/enums/replicatetype) **, 동기화 시간)**  |
| [**AddReplicateValue**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)          | **해당 객체에 서버, 클라이언트 간 동기화가 가능한 실수를 추가해요. (추가할 Value 이름, number 데이터,** [**Enum.ReplicateType.타입**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/enums/replicatetype) **, 동기화 시간)**  |
| [**AddReplicateValue**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)          | **해당 객체에 서버, 클라이언트 간 동기화가 가능한 bool를 추가해요. (추가할 Value 이름, bool 데이터,** [**Enum.ReplicateType.타입**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/enums/replicatetype) **, 동기화 시간)**  |
| [**AddReplicateValue**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)          | **해당 객체에 서버, 클라이언트 간 동기화가 가능한 문자열을 추가해요. (추가할 Value 이름, string 데이터,** [**Enum.ReplicateType.타입**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/enums/replicatetype) **, 동기화 시간)** |
| [**AddReplicateValue**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/object)          | **해당 객체에 서버, 클라이언트 간 동기화가 가능한 컬러를 추가해요. (추가할 Value 이름, Color 데이터,** [**Enum.ReplicateType.타입**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/enums/replicatetype) **, 동기화 시간)**   |
| [**AddTimeEvent**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/timeevent)            | **일정 시간뒤에 연결 함수가 호출되는 이벤트를 추가해요. (추가할 이벤트 이름, 시간, 연결 함수)**                                                                                                                                     |
| [**DeleteTimeEvent**](https://ditoland-utplus.gitbook.io/ditoland/api-reference/common/timeevent)         | **등록된 시간 이벤트를 삭제해요. (삭제할 이벤트 이름)**                                                                                                                                                             |
