:DitoLand
Studio ManualAPI ReferenceVideo TutorialSample
  • DitoLand Developer
  • 📚Glossary
  • 🥳EVENT
    • 2024 메타버스 개발자 경진대회
    • 🎊[종료] 🖥 전남관광메타버스 스탬프 투어 인증 이벤트
  • Notice
    • 약관 개정(2024.06.17)
    • 약관 개정 (2024.03.04)
    • 약관 개정 (2023.08.25)
    • 약관 개정 (2022.12.14)
  • Manual
    • Studio
    • Resources
    • Studio Workflow Tips
    • NPC
    • NavMeshVolume
    • Land Teleport
    • Enterprise Account
    • Enterprise Studio Manual
    • Coroutine
    • AddTimeEvent
    • SaveUserData
    • Set Object Parameter
    • Toolbox Upload
    • Debugging (Breakpoint)
    • Gun Toy
    • Coupon / Event Key
    • Optimization
    • AI FSM
    • SpreadSheet
    • Mod Kit
    • AddReplicateValue / ConnectChangeEventFunction
    • Event Execution Order
    • WorldTree Search Filter
    • Object
    • Coordinate
    • Inworld Product
    • Management UserData & Leaderboard
    • Channel
    • World Event
    • Matchmaking
    • Collecting Game Logs
    • External Avatar
  • Coding Style
  • API Reference
    • Global
      • Variables
    • Lua
      • Built-in
      • NotSupport
    • Enums
      • AttachPoint
      • Bone
      • CharacterType
      • ChatCategoryType
      • ChatVisibleType
      • CollisionResponse
      • ControlMode
      • DivideTeamType
      • EventKeyState
      • InputMode
      • InventoryState
      • Key
      • KeyInputType
      • LuckyDrawOrderState
      • MaterialType
      • MediaStateType
      • ModeAnimStateType
      • ObjectSelectType
      • ObjectType
      • PathFollowingStatus
      • PointSpawnType
      • ProgressFillType
      • ProjectionType
      • QuickSlotState
      • ReplicateType
      • ScrollOrientationType
      • SimulatePhysicsType
      • SpawnType
      • TeamType
      • TeleportErrorType
      • TouchType
      • TransformPlayType
      • UIDisplayType
      • UIWidgetType
      • WidgetAnchorType
    • Common
      • BindEvent
      • Character
      • Collision
      • Color
      • CouponReturnData
      • DateTime
      • Environment
      • EventKeyReturnData
      • FactorPhysics
      • FiniteState
      • FiniteStateMachine
      • Game
      • GameStatisticsData
      • HitResult
      • Item
      • LandTransferData
      • Matrix
      • MouseHitResult
      • Object
      • Physics
      • ScriptPhase
      • TimeEvent
      • Track
      • Vector
      • WorldObject
    • Client
      • AnimStateBase
      • AnimStateMachine
      • AnimStateMachineSetting
      • BlendAnimationDataSetting
      • BlendAnimState
      • BlendAnimStateSetting
      • Button
      • Camera
      • CameraClient
      • Character
      • CharacterAnimationSetting
      • CharacterAppearanceSetting
      • CharacterBaseSetting
      • CharacterClient
      • CharacterSetting
      • Collider
      • Collision
      • DPad
      • Environment
      • FiniteStateMachine
      • Frame
      • FX
      • Game
      • GridBox
      • HyperLinkButton
      • Image
      • Input
      • InputGroup
      • InventoryBox
      • Item
      • ListView
      • LocalPlayer
      • Media
      • MediaView
      • NPC
      • ObjectGroup
      • ObjectNoneClient
      • PDFView
      • Physics
      • PointLight
      • ProgressBar
      • RemotePlayer
      • ScreenButton
      • ScreenUI
      • Script
      • ScrollBox
      • SequenceAnimState
      • SequenceAnimStateSetting
      • Sound
      • SpotLight
      • StaticMesh
      • SurfaceUI
      • Text
      • TextBox
      • UIScene
      • WebBrowser
      • WebForum
      • WidgetBase
      • YouTubeView
    • Server
      • Character
      • CharacterAnimationSetting
      • CharacterAppearanceSetting
      • CharacterBaseSetting
      • CharacterServer
      • CharacterSetting
      • Collider
      • Collision
      • Environment
      • FactorPhysics
      • FiniteStateMachine
      • FX
      • Game
      • Item
      • Media
      • NPC
      • Physics
      • Player
      • PointLight
      • Script
      • ScriptObjectGroup
      • ScriptObjectNoneServer
      • Sound
      • Spawner
      • SpawnPoint
      • SpawnPointGroup
      • SpotLight
      • StaticMesh
      • Team
      • UIScene
      • Widget
  • Tutorial
    • Script Tutorial
      • 스크립트 심화 강좌
        • 1. 스크립트의 종류, 호출 순서, 호출, 통신
        • 2. 동기화, 파라미터, 예외사항
        • 3. 디토랜드로 루아 활용하기
  • Sample
    • Scripting
    • Event
    • Collision & Physics
    • Transform
    • UI
    • Camera
    • Input
    • FX
    • Sound
  • Guide for Developers
    • Guide For Unity Developer
    • Guide For Roblox Developer
  • Release Note
    • Script Changes
      • 1.5.0 Map Changes
      • 1.2.0 Map Changes
      • 1.1.0 Map Changes
      • 1.0.0 Map Changes
      • 0.9.0 Map Changes
      • 0.7.0 Map Changes
      • 0.6.0 Map Changes
      • 0.5.0 Map Changes
      • 0.4.0 Map Changes
      • 0.3.0 Map Changes
      • 0.2.0 Map Changes
    • Known Issues
Powered by GitBook
On this page
  • 1) 쿠폰 생성하기
  • 2) 쿠폰 번호 배포하기
  • 3) Script에서 쿠폰 연동하기
  • 이벤트 키 사용법
  • 1) 이벤트 키 생성하기
  • 2) Script에서 이벤트 키 연동하기

Was this helpful?

  1. Manual

Coupon / Event Key

쿠폰 및 이벤트 키에 대한 메뉴얼이에요.

PreviousGun ToyNextOptimization

Last updated 11 months ago

Was this helpful?

1) 쿠폰 생성하기

1. 월드 관리 페이지의 우측 상단 리스트메뉴에서 쿠폰 설정 클릭

2. 쿠폰 설정 페이지는 아래와 같이 구성되어 있어요.

번호
항목
설명

1

등록하기 버튼

등록하기 버튼을 눌러 쿠폰을 등록할 수 있어요.

2

쿠폰 정보

등록된 쿠폰이 표시돼요.

3

쿠폰 사용 리스트

쿠폰을 사용한 플레이어 목록이 표시돼요.

2.1 등록된 쿠폰의 상태는 발급 기간에 따라 달라져요.

번호
상태
설명

1

대기

발급기간 이전일 때의 상태에요.

2

진행

발급기간 일 때의 상태에요.

3

종료

발급기간 이후일 때의 상태에요.

4

중지

관리자의 비활성 설정했을 때의 상태에요.

2.2 쿠폰 상세 페이지에서는 아래 기능들을 이용할 수 있어요.

① : 쿠폰 복제

② : (상태 별) 쿠폰 발급 기간 수정 혹은 쿠폰 사용 중지

2.3 쿠폰을 사용한 유저들을 편리하게 구분하여 확인할 수 있어요.

번호
종류
설명

1

쿠폰 종류

원하는 종류의 쿠폰 사용자들을 확인할 수 있어요.

2

검색 기준

쿠폰 사용자들의 ID, 쿠폰 중 선택하여 검색할 수 있어요.

3. 쿠폰 등록 화면은 아래와 같이 구성되어 있어요.

번호
항목
설명

1

쿠폰

쿠폰의 이름 (영문, 숫자 20자 이내로 입력해요)

2

쿠폰 타입

쿠폰을 사용했을 때 어떤 보상을 줄지 정할 수 있어요.

3

쿠폰 수량

발급할 쿠폰 번호의 수량이에요. (쿠폰 번호는 난수로 자동 생성됩니다)

4

참여 인원

쿠폰 수량이 1일 때 선택할 수 있어요. (제한이 없으면 무제한 쿠폰이며, 숫자를 입력하면 정해진 인원 수만큼 사용할 수 있어요)

5

발급(사용)기간

쿠폰을 사용할 수 있는 기간이에요. (시작 기간이 되어야 사용할 수 있으며, 종료 기간이 되면 사용할 수 없게 됩니다)

3.1 쿠폰 타입 항목에서, 쿠폰 사용 시 지급할 보상의 이름을 추가하고 선택할 수 있어요.

3.2 위에서 선택한 쿠폰 타입은 스크립트에서 보상 지급을 처리하는데 이용됩니다.

4. 쿠폰 수량과 참여 인원을 어떻게 설정하느냐에 따라 아래와 같이 활용할 수 있어요.

쿠폰 수량
참여 인원
동작
활용 예

1

제한없음

동일한 번호로 누구나 사용할 수 있는 쿠폰

오픈 기념 쿠폰

1

n명

번호 1개를 n명까지 사용할 수 있는 선착순 쿠폰

선착순 쿠폰

n개

-

각각의 번호로 사용하는 선착순 쿠폰

선착순 쿠폰

2) 쿠폰 번호 배포하기

1. 쿠폰 정보 목록에서 쿠폰 수량 글자를 클릭해요.

2. 쿠폰 리스트 팝업에서 번호를 확인할 수 있어요. CSV 다운로드 버튼을 클릭하면 엑셀로 확인하는 것도 가능해요.

3) Script에서 쿠폰 연동하기

3-1) 쿠폰 번호 입력해서 사용

플레이어가 UI 에 쿠폰 번호를 입력하면, 해당 쿠폰을 사용하도록 처리하는 스크립트 예시에요.

  1. ClientScript에서 버튼 클릭시, TextBox의 입력 내용을 서버의 UseCoupon함수로 전달하는 처리를 아래와 같이 구현해요.

    local CouponUI = Workspace.CouponUI
    
    local function InputCoupon()
        local couponID = CouponUI.Frame.TextBox:GetText() --TextBox의 입력 내용이에요.
        Game:SendEventToServer("UseCoupon", **couponID**)     --서버의 함수를 호출해요.
    end
    CouponUI.Frame.UseButton.OnUpEvent:Connect(InputCoupon) --버튼 클릭 이벤트

  2. ServerScript에서 쿠폰의 처리를 아래와 같이 구현해요.

    --2. player:UseCoupon 함수에 연결되는 함수에요.
    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
    
    --1. ClientScript의 버튼 이벤트에서 호출되는 함수에요.
    local function UseCoupon(player, coupon)
        --플레이어에게 해당 쿠폰을 사용 처리해요. 
        --(쿠폰 번호, 쿠폰 사용 처리 함수)
        player:UseCoupon(coupon, DoUseCoupon)
    end
    Game:ConnectEventFunction("UseCoupon", UseCoupon) 

3-2) 남아 있는 쿠폰 중 하나를 사용

특정 타입의 쿠폰 중 남아있는 쿠폰이 있다면, 플레이어에게 사용 처리되도록 하는스크립트 예시에요.

  • UseRemainCoupon 함수를 이용해서, 남아있는 쿠폰 중 하나를 사용하도록 할 수 있어요.

    1. 플레이어에게 쿠폰을 사용 처리할 수 있도록, ClientScript 에서 Server 함수를 호출해요.

      local function ClearGame()
          Game:SendEventToServer("UseCoupon", "ClearReward")
      end
      
      ClearGame()
    2. ServerScript에서 쿠폰의 처리를 아래와 같이 구현해요.

      --2. player:UseRemainCoupon 함수에 연결되는 함수에요. 
      -- (3-1 샘플 코드 중, DoUseCoupon 함수와 동일한 방식으로 사용할 수 있어요)
      local function DoUseCoupon(player, couponReturnData)      
          ...
      end
      
      --1. 특정 상황일 때 ClientScript 에서 호출되는 함수에요.
      local function UseCoupon(player, couponType)
          --남아 있는 쿠폰 중 하나를 플레이어에게 사용 처리해요. 
          --(남은 쿠폰을 찾을 쿠폰 타입, 남은 쿠폰 사용 처리 함수)
          player:UseRemainCoupon(couponType, DoUseCoupon)
      end
      Game:ConnectEventFunction("UseCoupon", UseCoupon)

  • GetRemainCouponCount 함수를 이용해서, 남아있는 쿠폰의 수량을 확인할 수 있어요.

    1. ClientScript 에서 Server 함수를 호출하고, Server 에서 처리된 정보를 받아와요.

      local CouponUI = Workspace.ScreenUI
      
      -- 1. ClientScript 에서 Server 함수를 호출해요.
      local function Refresh_CouponCountUI()
          Game:SendEventToServer("ConfirmRemainCouponCount", "ClearReward")
      end
      
      Refresh_CouponCountUI()
      
      -- 4. Server 에서 받은 수량 정보로, UI 를 갱신해요.
      local function DoRefresh_CouponCountUI(count)
          CouponUI.Text:SetText(count)
      end
      Game:ConnectEventFunction("DoRefresh_CouponCountUI", DoRefresh_CouponCountUI)
    2. ServerScript 에서 남아있는 쿠폰의 수량 정보와 함께 Client 함수를 호출해요.

      --3. player:GetRemainCouponCount 함수에 연결되는 함수에요.
      local function DoGetRemainCouponCount(player, count)   
          local playerID = player:GetPlayerID()
          Game:SendEventToClient(playerID , "DoRefresh_CouponCountUI", count)
      end
      
      --2. 특정 상황일 때 ClientScript 에서 호출되는 함수에요.
      local function ConfirmRemainCouponCount(player, couponType)
          --남아있는 쿠폰의 수량을 확인해요. 
          --(확인할 쿠폰 타입, 남은 쿠폰 확인 처리 함수)
          player:GetRemainCouponCount(couponType, DoGetRemainCouponCount)
      end
      Game:ConnectEventFunction("ConfirmRemainCouponCount", ConfirmRemainCouponCount)

이벤트 키 사용법

1) 이벤트 키 생성하기

1. 월드 관리 페이지의 우측 상단 리스트 메뉴에서 이벤트 키 설정 클릭해요.

2. 이벤트 키 설정 페이지는 아래와 같이 구성되어 있어요.

번호
항목
설명

1

등록하기 버튼

등록하기 버튼을 눌러 이벤트 키를 등록할 수 있어요.

2

이벤트 키 정보

등록된 이벤트 키 정보가 표시돼요.

3

이벤트 키 참여 리스트

이벤트 키 참여 유저 리스트가 표시돼요.

2.1 등록된 이벤트 키의 상태는 유효 기간에 따라 달라져요.

번호
상태
설명

1

대기

유효기간 이전일 때의 상태에요.

2

진행

유효기간 일 때의 상태에요.

3

종료

유효기간 이후일 때의 상태에요.

4

중지

관리자의 비활성 설정했을 때의 상태에요.

2.2 이벤트 키 상세 페이지에서는 아래 기능들을 이용할 수 있어요.

① : 이벤트 키 복제

② : (상태 별) 이벤트 키 유효 기간 수정, 이벤트 키 진행 중지

2.3 이벤트에 참여한 유저들을 편리하게 구분하여 확인할 수 있어요.

번호
종류
설명

1

이벤트 키 종류

원하는 종류의 이벤트 키 참여 유저들을 확인할 수 있어요.

2

검색 기준

이벤트 키 참여 유저들의 ID, 쿠폰 중 선택하여 검색할 수 있어요.

3. 이벤트 키 등록 화면은 아래와 같이 구성되어 있어요.

번호
항목
설명

1

이벤트 키

이벤트 키의 이름 (영문, 숫자 20자 이내로 입력해요)

2

참여 수

이벤트에 참여할 유저의 수에요. (제한이 없으면 모든 유저가 참여 가능하고, 숫자를 입력하면 정해진 인원 수만큼 참여할 수 있어요)

3

유효 기간

이벤트에 참여할 수 있는 기간이에요. (시작 기간이 되어야 사용할 수 있으며, 종료 기간이 되면 사용할 수 없게 됩니다)

4

설명

해당 이벤트 키에 대한 설명이에요. (생략 가능합니다)

2) Script에서 이벤트 키 연동하기

  1. ServerScript에서 이벤트 키의 처리를 아래와 같이 구현해요.

    --2. player:AddEventKey 함수에 연결되는 함수에요.
    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
    
    ---------------------------------------------------------------------
    --1. 콜라이더 충돌시 호출되는 함수에요.
    local function EnterTrigger(self, target)
       if target == nil or not target:IsCharacter() then
           return
       end
    
       local player = target:GetPlayer()
    
       --이벤트키에 플레이어를 등록 처리해요. 
       --(이벤트키 이름, 이벤트키 등록 처리 함수)
       player:AddEventKey("EventKeyName", DoEventKey)
    end
    BoxCollider.Collision.OnBeginOverlapEvent:Connect(EnterTrigger)