Methods

μ†Œκ°œ

UI, μœ μ € 컨트둀, μ‚¬μš΄λ“œ λ“± ZEPμ—μ„œ 일어날 수 μžˆλŠ” μ „λ°˜μ μΈ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

ν”Œλ ˆμ΄μ–΄ 개인 화면에 UIλ₯Ό ν‘œμ‹œ, ν”Œλ ˆμ΄μ–΄λ₯Ό 이동, ν”Œλ ˆμ΄μ–΄ κ°œμΈμ—κ²Œ μ‚¬μš΄λ“œ μž¬μƒ λ“± νŽΈλ¦¬ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.

UI

이름섀λͺ…

showCenterLabel

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ§€μ •λœ μœ„μΉ˜μ— textλ₯Ό 3μ΄ˆκ°„ ν‘œμ‹œν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

showCustomLabel

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ§€μ •λœ μœ„μΉ˜μ— textλ₯Ό 3μ΄ˆκ°„ ν‘œμ‹œν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€. text 뢀뢄에 span νƒœκ·Έλ₯Ό λ„£μ–΄ ν…μŠ€νŠΈλ₯Ό κΎΈλ°€ 수 μžˆμŠ΅λ‹ˆλ‹€.

showWidget

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ§€μ •λœ μœ„μΉ˜μ— μœ„μ ―μ„ λΆˆλŸ¬μ˜€λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

showBuyAlert

ν”Œλ ˆμ΄μ–΄μ—κ²Œ ꡬ맀 μœ„μ ―μ„ ν‘œμ‹œν•˜κ³ , ꡬ맀 ν›„ λ™μž‘ν•˜λŠ” μ½œλ°±ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

hideBuyAlert

ν”Œλ ˆμ΄μ–΄μ˜ ꡬ맀 μœ„μ ―μ„ μˆ¨κΉλ‹ˆλ‹€.

sendMessage

μœ μ € κ°œμΈμ—κ²Œ μ±„νŒ… λ©”μ‹œμ§€λ₯Ό λ³΄λƒ…λ‹ˆλ‹€.

showPrompt

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μž…λ ₯창을 보여주고, ν”Œλ ˆμ΄μ–΄μ˜ 응닡에 따라 λ™μž‘ν•˜λŠ” callback ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

showConfirm

ν”Œλ ˆμ΄μ–΄μ—κ²Œ 확인창을 보여주고, ν”Œλ ˆμ΄μ–΄κ°€ OKλ₯Ό λˆŒλ €μ„ λ•Œ λ™μž‘ν•˜λŠ” μ½œλ°±ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

showAlert

ν”Œλ ˆμ΄μ–΄μ—κ²Œ 경고창을 보여주고, ν”Œλ ˆμ΄μ–΄κ°€ OKλ₯Ό λˆŒλ €μ„ λ•Œ λ™μž‘ν•˜λŠ” callback ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

showImageModal

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μž…λ ₯ν•œ 이미지 μ£Όμ†Œμ— ν•΄λ‹Ήν•˜λŠ” 이미지λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

showNoteModal

ν”Œλ ˆμ΄μ–΄μ—κ²Œ ν…μŠ€νŠΈ 창을 λ³΄μ—¬μ£ΌλŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

showWidgetResponsive

μœ„μ ―μ˜ 상/ν•˜/쒌/우 여백을 ν™”λ©΄ 크기에 λŒ€ν•œ %λΉ„μœ¨λ‘œ μ •μ˜ν•˜μ—¬ μœ„μ ―μ„ ν‘œμ‹œν•©λ‹ˆλ‹€.

openWebLink

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ›Ή URL을 μƒˆ μ°½μ΄λ‚˜ νŒμ—… 창으둜 μ—΄μ–΄ λ³΄μ—¬μ€λ‹ˆλ‹€.

showEmbed

URL을 μž„λ² λ“œ ν˜•νƒœλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.

크기와 μœ„μΉ˜λ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Data Load

이름섀λͺ…

isEmail

ν”Œλ ˆμ΄μ–΄μ˜ 이메일을 λΉ„κ΅ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

getLocationName

ν”Œλ ˆμ΄μ–΄κ°€ μ„œμžˆλŠ” 지정 μ˜μ—­μ˜ 이름을 좜λ ₯ν•©λ‹ˆλ‹€.

User Control

이름섀λͺ…

spawnAt

ν”Œλ ˆμ΄μ–΄μ˜ 캐릭터λ₯Ό μ§€μ •ν•œ μ’Œν‘œλ‘œ μ΄λ™μ‹œν‚€λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

spawnAtLocation

ν”Œλ ˆμ΄μ–΄μ˜ 캐릭터λ₯Ό 지정 μ˜μ—­μœΌλ‘œ μ΄λ™μ‹œν‚€λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

spawnAtMap

ν”Œλ ˆμ΄μ–΄λ₯Ό λ‹€λ₯Έ 슀페이슀 λ˜λŠ” 맡으둜 μ΄λ™μ‹œν‚€λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

setCameraTarget

ν”Œλ ˆμ΄μ–΄μ˜ μ‹œμ μ„ μ§€μ •λœ μ’Œν‘œλ‘œ 쀑심 μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.

setCameraTargetWithKey

ν”Œλ ˆμ΄μ–΄μ˜ μ‹œμ μ„ νŠΉμ • 였브젝트둜 쀑심 μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.

setEffectSprite

ν”Œλ ˆμ΄μ–΄μ˜ λ°°κ²½ λ˜λŠ” μ „κ²½ 이미지λ₯Ό μ„€μ • ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

playEffectSprite

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ• λ‹ˆλ©”μ΄μ…˜ 효과λ₯Ό μž…λ ₯ 횟수만큼 반볡 μž¬μƒν•˜κ³  μ‚¬λΌμ§€λŠ” 효과λ₯Ό μ μš©ν•©λ‹ˆλ‹€.

disappearObject

ν”Œλ ˆμ΄μ–΄ 개인 ν™”λ©΄ μƒμ—μ„œ key 값을 κ°€μ§€λŠ” 였브젝트λ₯Ό μ‚¬λΌμ§€κ²Œν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

Sound

이름섀λͺ…

playSound

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ‚¬μš΄λ“œ νŒŒμΌμ„ μž¬μƒν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

playSoundLink

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ‚¬μš΄λ“œ URL을 μž¬μƒν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

stopSound

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μž¬μƒμ€‘μΈ μ‚¬μš΄λ“œλ₯Ό μ€‘μ§€μ‹œν‚€λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

곡톡

이름섀λͺ…

sendUpdated

Player κ΄€λ ¨ ν•„λ“œ 값이 λ³€κ²½λ˜λ©΄ λ³€κ²½ 값을 μ μš©ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

save

Player storage 값이 λ³€κ²½λ˜λ©΄ λ³€κ²½ 값을 μ μš©ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

πŸ“š API μ„€λͺ… 및 예제

🎨 UI Methods

UI ν•¨μˆ˜ ν•œ λˆˆμ— 보기

// ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ§€μ •λœ μœ„μΉ˜μ— ν•΄λ‹Ή textλ₯Ό 3μ΄ˆκ°„ ν‘œμ‹œ
player.showCenterLabel(text: string, color: uint = 0xFFFFFF, bgColor: uint = 0x000000, offset: int = 0, time: int = 3000)

// λͺ¨λ“  ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ§€μ •λœ μœ„μΉ˜μ— ν•΄λ‹Ή textλ₯Ό 3μ΄ˆκ°„ ν‘œμ‹œ, μ»€μŠ€ν„°λ§ˆμ΄μ§• κ°€λŠ₯
player.showCustomLabel(text: string, color: number = 0xFFFFFF, bgColor: number = 0x000000, offset: number = 0, width = 100, opacity = 0.6, time: int = 3000);

// ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ§€μ •λœ align의 μœ„μΉ˜μ— ν•΄λ‹Ή htmlνŒŒμΌμ„ μœ„μ ―μœΌλ‘œ 뢈러옴
player.showWidget(fileName: string, align: string, width: number, height: number): ScriptWidget

// ν”Œλ ˆμ΄μ–΄μ—κ²Œ ꡬ맀 μœ„μ ―μ„ ν‘œμ‹œν•˜κ³ , ꡬ맀 ν›„ λ™μž‘ν•˜λŠ” μ½œλ°±ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
player.showBuyAlert(itemName: string, price: number, callback: function);

// ν”Œλ ˆμ΄μ–΄μ˜ ꡬ맀 μœ„μ ―μ„ λ‹«μŠ΅λ‹ˆλ‹€.
player.hideBuyAlert();

// ν”Œλ ˆμ΄μ–΄ κ°œμΈμ—κ²Œ μ±„νŒ… λ©”μ‹œμ§€λ₯Ό λ³΄λƒ…λ‹ˆλ‹€.
player.sendMessage(message: string, color: number = 0xFFFFFF)

// ν”Œλ ˆμ΄μ–΄μ—κ²Œ μž…λ ₯창을 보여주고, ν”Œλ ˆμ΄μ–΄μ˜ 응닡에 따라 λ™μž‘ν•˜λŠ” callback ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
player.showPrompt(text: string, function(inputText))

// ν”Œλ ˆμ΄μ–΄μ—κ²Œ 확인창을 보여주고, ν”Œλ ˆμ΄μ–΄κ°€ OKλ₯Ό λˆŒλ €μ„ λ•Œ λ™μž‘ν•˜λŠ” μ½œλ°±ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
player.showConfirm(text: string, function(result))

// ν”Œλ ˆμ΄μ–΄μ—κ²Œ 경고창을 보여주고, ν”Œλ ˆμ΄μ–΄κ°€ OKλ₯Ό λˆŒλ €μ„ λ•Œ λ™μž‘ν•˜λŠ” callback ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
player.showAlert(text: string, function())

// μœ„μ ―μ˜ 상/ν•˜/쒌/우 여백을 ν™”λ©΄ 크기에 λŒ€ν•œ % λΉ„μœ¨λ‘œ μ •μ˜ν•˜μ—¬ μœ„μ ―μ„ ν‘œμ‹œν•©λ‹ˆλ‹€.
player.showWidgetResponsive(fileName:string, marginTop:number, marginRight:number, marginBottom:number, marginLeft:number)

//ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ›Ή URL을 μƒˆ μ°½μ΄λ‚˜ νŒμ—… 창으둜 ν‘œμ‹œν•©λ‹ˆλ‹€.
player.openWebLink(url:string, popup:boolean);

// μ§€μ •λœ align의 μœ„μΉ˜μ— url μž„λ² λ“œμ°½μ„ ν‘œμ‹œν•©λ‹ˆλ‹€.
player.showEmbed(url: string, align: string, width: number, height: number, hasBackdrop: boolean = true)

showCenterLabel

player.showCenterLabel(text: string, color: uint = 0xFFFFFF, bgColor: uint = 0x000000, offset: number = 0, time: number = 3000)

ν•΄λ‹Ή ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ§€μ •λœ μœ„μΉ˜μ— textλ₯Ό 3μ΄ˆκ°„ ν‘œμ‹œν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

text

String

라벨에 좜λ ₯ν•  ν…μŠ€νŠΈ

color

Uint

좜λ ₯ν•  κΈ€μ”¨μ˜ 색을 μ§€μ •ν•©λ‹ˆλ‹€. (HexCode) 값을 μž…λ ₯ν•˜μ§€ μ•Šμ„ 경우, 흰색(0xFFFFFF)으둜 μ μš©λ©λ‹ˆλ‹€. βž‘οΈκ΅¬κΈ€ 색상 선택 도ꡬ

bgColor

Uint

λ©”μ‹œμ§€κ°€ 좜λ ₯λ˜λŠ” 라벨의 배경색을 μ§€μ •ν•©λ‹ˆλ‹€. 값을 μž…λ ₯ν•˜μ§€ μ•Šμ„ 경우, 검은색(0x000000)으둜 μ μš©λ©λ‹ˆλ‹€.

offset

number

offset 값이 클수둝 ν‘œμ‹œλ˜λŠ” μœ„μΉ˜κ°€ ν™”λ©΄ μ•„λž˜μͺ½ λ°©ν–₯으둜 κ°€κΉŒμ›Œμ§‘λ‹ˆλ‹€. 값을 μž…λ ₯ν•˜μ§€ μ•Šμ„ 경우, 0으둜 μ§€μ •λ©λ‹ˆλ‹€.

time

number

라벨 ν‘œμ‹œ μ‹œκ°„ (ms), κΈ°λ³Έ κ°’ 3000 ( 3초 )

예제

λ…Έλž€μƒ‰ 라벨을 2μ΄ˆκ°„ 좜λ ₯해보기

App.onJoinPlayer.Add(function(player){
	player.showCenterLabel(`${player.name}λ‹˜ ν™˜μ˜ν•©λ‹ˆλ‹€.`, 0x000000, 0xFFFF00, 500, 2000); // λ…Έλž€μƒ‰ λ°°κ²½, 검정색 κΈ€μ”¨λ‘œ ν‘œμ‹œν•˜κΈ°
});

showCustomLabel

player.showCustomLabel(text: string, color: number = 0xFFFFFF, bgColor: number = 0x000000, offset: number = 0, width = 100, opacity = 0.6, time: number = 3000, option: object = null);

λͺ¨λ“  ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ§€μ •λœ μœ„μΉ˜μ— textλ₯Ό 3μ΄ˆκ°„ ν‘œμ‹œν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

text 뢀뢄에 span νƒœκ·Έλ₯Ό λ„£μ–΄ ν…μŠ€νŠΈλ₯Ό κΎΈλ°€ 수 μžˆμŠ΅λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

text

String

라벨에 좜λ ₯ν•  ν…μŠ€νŠΈ ( span νƒœκ·Έ ν—ˆμš© )

color

Uint

좜λ ₯ν•  κΈ€μ”¨μ˜ 색 (HexCode) 값을 μž…λ ₯ν•˜μ§€ μ•Šμ„ 경우, 흰색(0xFFFFFF)으둜 μ μš©λ©λ‹ˆλ‹€. βž‘οΈκ΅¬κΈ€ 색상 선택 도ꡬ

bgColor

Uint

λ©”μ‹œμ§€κ°€ 좜λ ₯λ˜λŠ” 라벨의 배경색 값을 μž…λ ₯ν•˜μ§€ μ•Šμ„ 경우, 검은색(0x000000)으둜 μ μš©λ©λ‹ˆλ‹€.

offset

number

offset 값이 클수둝 ν‘œμ‹œλ˜λŠ” μœ„μΉ˜κ°€ ν™”λ©΄ μ•„λž˜μͺ½ λ°©ν–₯으둜 κ°€κΉŒμ›Œμ§‘λ‹ˆλ‹€. 값을 μž…λ ₯ν•˜μ§€ μ•Šμ„ 경우, 0으둜 μ§€μ •λ©λ‹ˆλ‹€.

width

number

라벨의 λ„ˆλΉ„λ₯Ό n%둜 μ„€μ •ν•˜λŠ” κ°’ μž…λ‹ˆλ‹€. (κΈ°λ³Έ κ°’ 100)

opacity

number

라벨의 λ°°κ²½ 투λͺ…도λ₯Ό μ„€μ •ν•˜λŠ” κ°’ μž…λ‹ˆλ‹€. (κΈ°λ³Έ κ°’ 0.6, λ²”μœ„ 0 ~ 1)

time

number

라벨 ν‘œμ‹œ μ‹œκ°„ (ms), κΈ°λ³Έ κ°’ 3000 ( 3초 )

μ˜΅μ…˜

μ΄λ¦„νƒ€μž…μ„€λͺ…

key

String

라벨에 ν‚€ 값을 ν• λ‹Ήν•˜μ—¬, μ„œλ‘œ λ‹€λ₯Έ ν‚€ 값을 가진 라벨은 λ™μ‹œμ— ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

borderRadius

String

라벨의 λͺ¨μ„œλ¦¬μ— λ‘₯κΈ€κΈ°λ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ex) borderRadius: "8px"

fontOpacity

boolean

false둜 μ„€μ •μ‹œ ν°νŠΈμ— 투λͺ…도가 μ μš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

padding

String

라벨 내뢀에 padding 값을 지정 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ex) padding: "8px"

예제

μ»€μŠ€ν…€ 라벨 예제 μ½”λ“œ νŽ˜μ΄μ§€λ₯Ό μ°Έκ³ ν•΄μ£Όμ„Έμš”

showWidget

player.showWidget(fileName: string, align: string, width: number, height: number): ScriptWidget

ν•΄λ‹Ή ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ§€μ •λœ align의 μœ„μΉ˜μ— ν•΄λ‹Ή htmlνŒŒμΌμ„ μœ„μ ―μœΌλ‘œ λΆˆλŸ¬μ˜€λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

fileName

String

뢈러올 파일의 이름

align

String

μœ„μ ―μ„ ν‘œμ‹œν•  μœ„μΉ˜ ’popup’, β€˜sidebar’, β€˜top’, β€˜topleft’, β€˜topright’, β€˜middle’, β€˜middleleft’, β€˜middleright’, β€˜bottom’, β€˜bottomleft’, β€˜bottomright’

width height

number

μœ„μ ―μ„ ν‘œμ‹œν•  μ˜μ—­μ˜ κ°€λ‘œ, μ„Έλ‘œ 크기(px)

예제

μ΄ˆμ„±ν€΄μ¦ˆ μœ„μ ― 따라해보기

let _widget = null;
// ν”Œλ ˆμ΄μ–΄κ°€ μž…μž₯ν•  λ•Œ μ‹€ν–‰
App.onJoinPlayer.Add(function (player) {
	_widget = player.showWidget("widget.html", "top", 200, 300); // ν™”λ©΄ 상단, 200x300 μ˜μ—­μ— μœ„μ ―μ„ λ³΄μ—¬μ€Œ
	_widget.sendMessage({
		timer: 15,
		answer: "ㅅㅍㅋ",
	});
});

showBuyAlert

player.showBuyAlert(itemName: string, price: number, callback: function, payToSpaceOwner: Boolean, option: object)

ν”Œλ ˆμ΄μ–΄μ—κ²Œ ꡬ맀 μœ„μ ―μ„ ν‘œμ‹œν•˜κ³ , ꡬ맀 ν›„ λ™μž‘ν•˜λŠ” μ½œλ°±ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ†Œλͺ¨λœ ZEM은 μ•± μ œμž‘μžμ—κ²Œ λŒμ•„κ°€λ©°, λ‚΄ 후원 λ‚΄μ—­ νŽ˜μ΄μ§€μ—μ„œ 내역을 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ZEM μ •μ‚° κ΄€λ ¨ λ‚΄μš©μ€ μ •μ‚°κ°€μ΄λ“œ νŽ˜μ΄μ§€μ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

itemName

String

ꡬ맀창에 ν‘œμ‹œν•  μ•„μ΄ν…œμ˜ 이름

price

number

μ•„μ΄ν…œμ˜ 가격 (ν™”νλ‹¨μœ„: ZEM)

callback

function

ꡬ맀 μ„±κ³΅μ‹œ λ™μž‘ν•  μ½œλ°±ν•¨μˆ˜

ꡬ맀 성곡 μ—¬λΆ€(success)와 ꡬ맀정보(buyAlertResult) 데이터λ₯Ό 전달 λ°›μœΌλ©°, buyAlertResultλŠ” ν™˜λΆˆ κΈ°λŠ₯에 μ‚¬μš©λ©λ‹ˆλ‹€.

payToSpaceOwner

Boolean

κΈ°λ³Έ 값은 false둜 μ„€μ •λ˜λ©° false인 경우 μ•± μ†Œμœ μžμ—κ²Œ 수읡이 μ „λ‹¬λ˜κ³ ,

true인 경우 맡 μ†Œμœ μžμ—κ²Œ 수읡이 μ „λ‹¬λ©λ‹ˆλ‹€.

option

Object

λ‹€μŒ μ˜΅μ…˜λ“€μ„ μ„€μ • ν•  수 μžˆμŠ΅λ‹ˆλ‹€. message : ꡬ맀창에 ν‘œμ‹œν•  ν…μŠ€νŠΈλ₯Ό μ„€μ • ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

timer : ꡬ맀창을 ν‘œμ‹œν•  μ‹œκ°„(ms)을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

예제

ꡬ맀정보 μ €μž₯ 및 ν™˜λΆˆ κΈ°λŠ₯ 예제

const itemName = "ITEM";

// Qλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜ - μ•„μ΄ν…œμ„ κ΅¬λ§€ν•˜κ³  player.storage에 ꡬ맀정보 μ €μž₯ν•˜κΈ°
App.addOnKeyDown(81, function (player) {
	let pStorage = JSON.parse(player.storage);
	if (!player.tag) {
		player.tag = {};
	}
	if (pStorage == null) {
		pStorage = {};
	}
	//이미 μ•„μ΄ν…œμ„ κ΅¬λ§€ν–ˆλ‹€λ©΄ λ©”μ‹œμ§€ 좜λ ₯
	if (pStorage[itemName]) {
		player.showCenterLabel(`${itemName}을 이미 κ΅¬λ§€ν–ˆμŠ΅λ‹ˆλ‹€.`);
	} else {
		player.showBuyAlert(itemName, 0, function (success, buyAlertResult) {
			if (success) {
				App.sayToAll(`[정보] ${player.name}λ‹˜μ΄ ${itemName}을 κ΅¬λ§€ν–ˆμŠ΅λ‹ˆλ‹€!`);
				pStorage[itemName] = true;
				player.tag.buyAlertResult = buyAlertResult
				player.storage = JSON.stringify(pStorage);
				player.save();
			}
		}, 
		false,// false 인 경우 μ•± μ†Œμœ μžμ—κ²Œ μˆ˜μ΅μ „λ‹¬, true이면 슀페이슀 μ†Œμœ μžμ—κ²Œ 수읡 전달
		{
			message: `${itemName} custom message`,//message에 itemName에 ν•΄λ‹Ήν•˜λŠ” textκ°€ μžˆμ„ 경우 κ°•μ‘°λ˜μ–΄ ν‘œμ‹œλ¨
			timer: 10000 // 10초 - ꡬ맀창 ν‘œμ‹œμ‹œκ°„(ms)
		}
		);
	}
});

// Wλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜ - ν™˜λΆˆ κΈ°λŠ₯
App.addOnKeyDown(87, function (player) {
	let pStorage = JSON.parse(player.storage);
	if( pStorage && player.tag.buyAlertResult )
	{	
		if( player.tag.buyAlertResult.Refund() )
		{
			App.sayToAll("===== refund success!");
			pStorage[itemName] = false;
		}
		else {
			App.sayToAll("===== refund failed");
		}
		player.tag.buyAlertResult = null;
		player.storage = JSON.stringify(pStorage);
		player.save();
	}
})

hideBuyAlert

player.hideBuyAlert()

ν”Œλ ˆμ΄μ–΄μ˜ ꡬ맀 μœ„μ ―μ„ λ‹«μŠ΅λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ—†μŒ

sendMessage

player.sendMessage(text: string, color: uint = 0xFFFFFF)

μœ μ € κ°œμΈμ—κ²Œ μ±„νŒ… λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

text

String

라벨에 좜λ ₯ν•  ν…μŠ€νŠΈ

color

Uint

좜λ ₯ν•  κΈ€μ”¨μ˜ 색을 μ§€μ •ν•©λ‹ˆλ‹€. (HexCode) 값을 μž…λ ₯ν•˜μ§€ μ•Šμ„ 경우, 흰색(0xFFFFFF)으둜 μ μš©λ©λ‹ˆλ‹€. βž‘οΈκ΅¬κΈ€ 색상 선택 도ꡬ

예제

ν”Œλ ˆμ΄μ–΄ κ°œμΈμ—κ²Œλ§Œ λ³΄μ΄λŠ” ν™˜μ˜λ©”μ‹œμ§€ 좜λ ₯ν•˜κΈ°.


App.onJoinPlayer.Add(function(player){
    player.sendMessage(`${player.name}λ‹˜ μ–΄μ„œμ˜€μ„Έμš”!\nhttps://docs-kr.zep.us/ 링크 ν΄λ¦­μ‹œ κ°€μ΄λ“œλ‘œ μ—°κ²°λ©λ‹ˆλ‹€.`,0xffffff);
});

showPrompt

player.showPrompt(title: string, function(inputText), option = {})

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μž…λ ₯창을 보여주고, ν”Œλ ˆμ΄μ–΄μ˜ 응닡에 따라 λ™μž‘ν•˜λŠ” callback ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

title

String

μž…λ ₯창의 타이틀

inputText

String

ν”Œλ ˆμ΄μ–΄κ°€ μž…λ ₯ν•œ ν…μŠ€νŠΈ

μ˜΅μ…˜

값을 μž…λ ₯ν•˜μ§€ μ•Šμ•„λ„ default 값이 μ μš©λ©λ‹ˆλ‹€.

μ΄λ¦„νƒ€μž…μ„€λͺ…

content

String

μž…λ ₯μ°½ μœ„μ— 좜λ ₯ν•  ν…μŠ€νŠΈ (Default: null)

confirmVariant

'primary' | 'alert'

confirm λ²„νŠΌμ˜ 색상 (Default: "primary") - 'primary': ν‘Έλ₯Έμƒ‰, - 'alert': 뢉은색

cancelText

String

cancel λ²„νŠΌμ˜ ν…μŠ€νŠΈ (Default: "μ·¨μ†Œ")

confirmText

String

confirm λ²„νŠΌμ˜ ν…μŠ€νŠΈ (Default: "확인")

placeholder

String

input placeholder ν…μŠ€νŠΈ (Default: null)

textType

'text' | 'password'

μž…λ ₯ νƒ€μž… (Default: "text")

- 'text': μž…λ ₯ 값을 ν…μŠ€νŠΈλ‘œ ν‘œμ‹œ - 'password': μž…λ ₯ 값을 *둜 ν‘œμ‹œ

예제

"1234"λ₯Ό μž…λ ₯ν•˜λŠ” 경우 "Correct" λ©”μ‹œμ§€ 좜λ ₯해보기

// Qν‚€λ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(KeyCodeType.q, function (player) {
    player.showPrompt("Password", function (inputText) {
            if (inputText == "1234") {
                player.showCenterLabel("Correct");
            } else {
                player.showCenterLabel("Incorrect");
            }
        },
        {
            content: 'Description', // μ„€λͺ…
            confirmVariant: 'primary', // 확인 λ²„νŠΌ 색상 'primary' | 'alert'
            cancelText: 'custom cancel', // μ·¨μ†Œ λ²„νŠΌ ν…μŠ€νŠΈ
            confirmText: 'custom confirm',// 확인 λ²„νŠΌ ν…μŠ€νŠΈ
            placeholder: 'Custom Placeholder',// μž…λ ₯칸의 placeholder
            textType: 'password' // μž…λ ₯ ν…μŠ€νŠΈμ˜ ν‘œμ‹œ ν˜•μ‹ 'text' | 'password'
        }
    );
});

showConfirm

player.showConfirm(text: string, function(result), option = {})

ν”Œλ ˆμ΄μ–΄μ—κ²Œ 확인창을 보여주고, ν”Œλ ˆμ΄μ–΄κ°€ 확인 λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ λ™μž‘ν•˜λŠ” callback ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. cancel을 λˆ„λ₯Ό κ²½μš°μ—λŠ” callback ν•¨μˆ˜κ°€ λ™μž‘ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

text

String

확인창에 좜λ ₯ν•  ν…μŠ€νŠΈ

result

Boolean

ν”Œλ ˆμ΄μ–΄κ°€ OKλ₯Ό λˆ„λ₯΄λŠ” 경우 true

μ˜΅μ…˜

값을 μž…λ ₯ν•˜μ§€ μ•Šμ•„λ„ default 값이 μ μš©λ©λ‹ˆλ‹€.

μ΄λ¦„νƒ€μž…μ„€λͺ…

content

String

content μ˜μ—­μ— 좜λ ₯ν•  ν…μŠ€νŠΈ (Default: null)

confirmVariant

'primary' | 'alert'

confirm λ²„νŠΌμ˜ 색상 (Default: 'primary') - primary: ν‘Έλ₯Έμƒ‰, - alert: 뢉은색

cancelText

String

cancel λ²„νŠΌμ˜ ν…μŠ€νŠΈ (Default: "μ·¨μ†Œ")

confirmText

String

confirm λ²„νŠΌμ˜ ν…μŠ€νŠΈ (Default: "확인")

예제

확인 λ²„νŠΌμ„ λˆ„λ₯Έ 경우 μ±„νŒ…μ°½μ— ν…μŠ€νŠΈ 좜λ ₯ν•˜κΈ°

// Q ν‚€λ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(KeyCodeType.q, function (player) {
    player.showConfirm("Confirm", function (result) {
            if (result) {
                App.sayToAll("ok");
            }
        },
        {
            content: 'Description', // μ„€λͺ…
            confirmVariant: 'alert', // 확인 λ²„νŠΌ 색상 'primary' | 'alert';
            cancelText: 'custom cancel', // μ·¨μ†Œ λ²„νŠΌ ν…μŠ€νŠΈ
            confirmText: 'custom confirm',// 확인 λ²„νŠΌ ν…μŠ€νŠΈ
        }
    );
});

showAlert

player.showAlert(text: string, function(), option = {})

ν”Œλ ˆμ΄μ–΄μ—κ²Œ 경고창을 보여주고, ν”Œλ ˆμ΄μ–΄κ°€ OKλ₯Ό λˆŒλ €μ„ λ•Œ λ™μž‘ν•˜λŠ” callback ν•¨μˆ˜λ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

text

String

경고창에 좜λ ₯ν•  ν…μŠ€νŠΈ

μ˜΅μ…˜

값을 μž…λ ₯ν•˜μ§€ μ•Šμ•„λ„ default 값이 μ μš©λ©λ‹ˆλ‹€.

μ΄λ¦„νƒ€μž…μ„€λͺ…

content

String

content μ˜μ—­μ— 좜λ ₯ν•  ν…μŠ€νŠΈ (Default: null)

confirmText

String

confirm λ²„νŠΌμ˜ ν…μŠ€νŠΈ (Default: "확인")

예제

λ²„νŠΌμ„ λˆ„λ₯Έ 경우 μ±„νŒ…μ°½μ— ν…μŠ€νŠΈ 좜λ ₯ν•˜κΈ°

// Q ν‚€λ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(81, function (player) {
    player.showAlert("Alert", function () {
            App.sayToAll("ok");
        },
        {
            content: 'Description', // μ„€λͺ…
            confirmText: 'custom confirm',// 확인 λ²„νŠΌ ν…μŠ€νŠΈ
        }
    );
});

showWidgetResponsive

player.showWidgetResponsive(fileName:string, marginTop:number, marginRight:number, marginBottom:number, marginLeft:number)

μœ„μ ―μ˜ 상/ν•˜/쒌/우 여백을 ν™”λ©΄ 크기에 λŒ€ν•œ %λΉ„μœ¨λ‘œ μ •μ˜ν•˜μ—¬ μœ„μ ―μ„ ν‘œμ‹œν•©λ‹ˆλ‹€.

ν™”λ©΄μ˜ 크기가 여백을 ν¬ν•¨ν•œ μœ„μ ― μ˜μ—­λ³΄λ‹€ μž‘μ•„μ§ˆ 경우, μœ„μ ―μ˜ 크기가 λΉ„λ‘€ν•˜μ—¬ μž‘μ•„μ§‘λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

fileName

String

뢈러올 파일의 이름

margin top/left/right/bottom

String

상/ν•˜/쒌/우 μ—¬λ°±μ˜ % κ°’

예제

ν™”λ©΄ 크기λ₯Ό μ€„μ΄λŠ” 경우 μœ„μ ―μ˜ 크기 λ³€ν™”

App.onJoinPlayer.Add(function (player) {
	player.tag = {};
});

// Q ν‚€λ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(81, function (player) {
	player.tag.widget = player.showWidgetResponsive("result.html", 15, 15, 15, 15);
	player.tag.widget.onMessage.Add(function (player, data) {
		if (data.type == "close") {
			player.tag.widget.destroy();
			player.tag.widget = null;
		}
	});
});

player.openWebLink(url:string, popup:boolean=false)

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ›Ή URL을 μƒˆ μ°½μ΄λ‚˜ νŒμ—… 창으둜 ν‘œμ‹œν•©λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

url

String

μ—°κ²°ν•  μ›Ή url μ£Όμ†Œ

popup

boolean

true 인 경우, url 창을 νŒμ—… ν˜•νƒœλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.

예제

openWebLink νŒμ—…μœΌλ‘œ μ—¬λŠ” 경우

// Q ν‚€λ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(81, function (player) {
	player.openWebLink("https://docs-kr.zep.us", true);
});

showEmbed

player.showEmbed(url: string, align: string, width: number, height: number, hasBackdrop: boolean = true)

ν•΄λ‹Ή ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ§€μ •λœ align의 μœ„μΉ˜μ— url μž„λ² λ“œ 화면을 ν‘œμ‹œν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

url

String

μ›Ή url μ£Όμ†Œ

align

String

μž„λ² λ“œλ₯Ό ν‘œμ‹œν•  μœ„μΉ˜ β€˜sidebar’, β€˜top’, β€˜topleft’, β€˜topright’, β€˜middle’, β€˜middleleft’, β€˜middleright’, β€˜bottom’, β€˜bottomleft’, β€˜bottomright’

width height

number

μž„λ² λ“œ μ˜μ—­μ˜ κ°€λ‘œ, μ„Έλ‘œ 크기(px)

hasBackdrop

boolean

true일 경우 μž„λ² λ“œμ˜ λ°”κΉ₯ 배경에 그림자λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

예제

url μž„λ² λ“œμ°½ ν‘œμ‹œν•˜κΈ°

// Qλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(81, function (player) {
	player.showEmbed("https://youtu.be/ztuTrpXJyks", "middle", 900, 600, true);
});

showImageModal

player.showImage(url: string)

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μž…λ ₯ν•œ 이미지 μ£Όμ†Œμ— ν•΄λ‹Ήν•˜λŠ” 이미지λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

url

String

ν‘œμ‹œν• μ΄λ―Έμ§€ url

예제

이미지 λͺ¨λ‹¬μ°½ ν‘œμ‹œν•˜κΈ°

// Qλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(KeyCodeType.Q, function (player) {
    player.showImageModal("https://cdn-static.zep.us/static/images/thumbnail.png");
});

showNoteModal

player.showNoteModal(text: string)

ν”Œλ ˆμ΄μ–΄μ—κ²Œ ν…μŠ€νŠΈ 창을 λ³΄μ—¬μ£ΌλŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

text

String

ν‘œμ‹œν•  ν…μŠ€νŠΈ

예제

ν…μŠ€νŠΈ μ°½ ν‘œμ‹œν•˜κΈ°

// Qλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(KeyCodeType.Q, function (player) {
    player.showNoteModal("Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatibus autem nisi soluta commodi a eius distinctio facilis est ea ullam. Dolorum a quis, impedit nisi voluptates magni architecto odit amet.");
});

πŸ’» Data Load Methods

Data Load Methods ν•¨μˆ˜ ν•œ λˆˆμ— 보기

// μ§€μ •ν•œ 이메일과 ν”Œλ ˆμ΄μ–΄μ˜ 이메일을 비ꡐ
player.isEmail(email: string): boolean

// ν”Œλ ˆμ΄μ–΄κ°€ μ„œμžˆλŠ” ꡬ역이름을 호좜
player.getLocationName(): string

isEmail

player.isEmail(email: string): boolean

ν•΄λ‹Ή ν”Œλ ˆμ΄μ–΄μ˜ 이메일이 νŒŒλΌλ―Έν„° κ°’κ³Ό κ°™λ‹€λ©΄ true, μ•„λ‹ˆλ©΄ falseλ₯Ό λ¦¬ν„΄ν•©λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

email

String

비ꡐ할 이메일 ν…μŠ€νŠΈ

예제

ν”Œλ ˆμ΄μ–΄μ˜ 이메일이 μ§€μ •ν•œ ν…μŠ€νŠΈμ™€ 같은지 비ꡐ해보기

// q ν‚€λ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
// App.addOnKeyDown
	let check = player.isEmail("supercat@supercat.co.kr");
	App.sayToAll(`이메일 일치 μ—¬λΆ€: ${check}`)
})

getLocationName

player.getLocationName : string

ν”Œλ ˆμ΄μ–΄κ°€ μ„œμžˆλŠ” 지정 μ˜μ—­μ˜ 이름을 좜λ ₯ν•©λ‹ˆλ‹€.

지정 μ˜μ—­μ€ β€˜λ§΅μ—λ””ν„° > νƒ€μΌνš¨κ³Όβ€™ μ—μ„œ μ„€μ • ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

  • μ—†μŒ

예제

캐릭터가 μ„œμžˆλŠ” νƒ€μΌμ˜ μ˜μ—­μ΄λ¦„ 좜λ ₯해보기

β†’ 지정 μ˜μ—­ 섀정이 μ•ˆλ˜μžˆλ‹€λ©΄ 곡백으둜 좜λ ₯λ©λ‹ˆλ‹€

// q ν‚€λ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
// App.addOnKeyDown
App.addOnKeyDown(81,function(player){
	App.sayToAll(`ν˜„μž¬ μ„œμžˆλŠ” ꡬ역: ${player.getLocationName()}`)
})

πŸ™β€β™‚οΈ User Control

User Control ν•¨μˆ˜ ν•œ λˆˆμ— 보기

// ν”Œλ ˆμ΄μ–΄λ₯Ό ν•΄λ‹Ή μ’Œν‘œλ‘œ μ†Œν™˜
player.spawnAt(tileX: int ,tileY: int, dir: int = 0)

// ν”Œλ ˆμ΄μ–΄λ₯Ό ν•΄λ‹Ή κ΅¬μ—­μœΌλ‘œ μ†Œν™˜
player.spawnAtLocation(name: string ,dir:int = 0)

// ν”Œλ ˆμ΄μ–΄λ₯Ό ν•΄λ‹Ή 슀페이슀 ν•΄λ‹Ή 맡으둜 μ΄λ™μ‹œν‚€κΈ°
player.spawnAtMap(spaceHashID string, mapHashID:string = null)

spawnAt

player.spawnAt(tileX: int ,tileY: int, dir: int = 0)

ν”Œλ ˆμ΄μ–΄μ˜ 캐릭터λ₯Ό tileX, tileY μ’Œν‘œλ‘œ μ§€μ •ν•œ λ°©ν–₯을 λ°”λΌλ³΄κ²Œ μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

tileX tileY

number

ν”Œλ ˆμ΄μ–΄λ₯Ό μ΄λ™μ‹œν‚¬ x, y μ’Œν‘œ κ°’

dir

number

- 캐릭터가 바라볼 λ°©ν–₯ β€’ μ™Όμͺ½ : 1 β€’ μœ„μͺ½ : 2 β€’ 였λ₯Έμͺ½ : 3 β€’ μ•„λž˜μͺ½ : 4 β€’ μ™Όμͺ½μœ„ : 5 β€’ μ™Όμͺ½μ•„λž˜ : 6 β€’ 였λ₯Έμͺ½μœ„: 7 β€’ 였λ₯Έμͺ½μ•„λž˜: 8

예제

μž…μž₯ν•˜λŠ” ν”Œλ ˆμ΄μ–΄λ₯Ό μ§€μ •ν•œ μ’Œν‘œλ‘œ μ΄λ™μ‹œν‚€κΈ°

// ν”Œλ ˆμ΄μ–΄κ°€ μž…μž₯ν•  λ•Œ μ‹€ν–‰
App.onJoinPlayer.Add(function (player) {
	player.spawnAt(5, 5, 1); // ν”Œλ ˆμ΄μ–΄λ₯Ό 5,5 μœ„μΉ˜λ‘œ μ™Όμͺ½ λ°©ν–₯을 λ°”λΌλ³΄κ²Œ μ΄λ™μ‹œν‚€κΈ°
});

spawnAtLocation

player.spawnAtLocation(name: string, dir:int = 0)

ν”Œλ ˆμ΄μ–΄μ˜ 캐릭터λ₯Ό name에 ν•΄λ‹Ήν•˜λŠ” 지정 μ˜μ—­μœΌλ‘œ μ§€μ •ν•œ λ°©ν–₯을 λ°”λΌλ³΄κ²Œ μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

name

String

ν”Œλ ˆμ΄μ–΄λ₯Ό μ΄λ™μ‹œν‚¬ 지정 μ˜μ—­μ˜ 이름

dir

number

- 캐릭터가 바라볼 λ°©ν–₯ β€’ μ™Όμͺ½ : 1 β€’ μœ„μͺ½ : 2 β€’ 였λ₯Έμͺ½ : 3 β€’ μ•„λž˜μͺ½ : 4 β€’ μ™Όμͺ½μœ„ : 5 β€’ μ™Όμͺ½μ•„λž˜ : 6 β€’ 였λ₯Έμͺ½μœ„: 7 β€’ 였λ₯Έμͺ½μ•„λž˜: 8

예제

μž…μž₯ν•˜λŠ” ν”Œλ ˆμ΄μ–΄λ₯Ό 지정 μ˜μ—­μœΌλ‘œ μ΄λ™μ‹œν‚€κΈ°

⚠️ 같은 μ΄λ¦„μ˜ 지정 μ˜μ—­μ΄ μ—¬λŸ¬ κ³³ μžˆλ‹€λ©΄ ν•΄λ‹Ή μ˜μ—­λ“€ 쀑 ν•œ 곳으둜 랜덀 μ΄λ™ν•©λ‹ˆλ‹€.

// ν”Œλ ˆμ΄μ–΄κ°€ μž…μž₯ν•  λ•Œ μ‹€ν–‰
App.onJoinPlayer.Add(function (player) {
// ν”Œλ ˆμ΄μ–΄λ₯Ό "test"λΌλŠ” μ΄λ¦„μ˜ μ§€μ •μ˜μ—­μœΌλ‘œ μ™Όμͺ½ λ°©ν–₯을 λ°”λΌλ³΄κ²Œ μ†Œν™˜ν•˜κΈ°
	player.spawnAtLocation("test", 1); 
});

spawnAtMap

player.spawnAtMap(spaceHashID string, mapHashID:string)

ν”Œλ ˆμ΄μ–΄λ₯Ό ν•΄λ‹Ή 슀페이슀 ν•΄λ‹Ή 맡으둜 μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

spaceHashID

String

이동할 슀페이슀의 spaceHashID

mapHashID

String

이동할 맡의 mapHashID

예제

μž…μž₯ν•˜λŠ” ν”Œλ ˆμ΄μ–΄λ₯Ό ZEP νŠœν† λ¦¬μ–Ό 맡으둜 μ΄λ™μ‹œν‚€κΈ° ( μŠ€νŽ˜μ΄μŠ€μ™€ 맡 μ΄ν•΄ν•˜κΈ° )

// ν”Œλ ˆμ΄μ–΄κ°€ μž…μž₯ν•  λ•Œ μ‹€ν–‰
App.onJoinPlayer.Add(function (player) {
	// ν”Œλ ˆμ΄μ–΄λ₯Ό ZEP νŠœν† λ¦¬μ–Ό 맡으둜 μ΄λ™μ‹œν‚€κΈ°
	player.spawnAtMap("65jeBA", "2YvXMJ");
});

setCameraTarget

[1] player.setCameraTarget( tileX: Number, tileY: Number, time: Number )

[2] player.setCameraTarget( key: String, time: Number )

[1] ν”Œλ ˆμ΄μ–΄μ˜ μ‹œμ μ„ μ§€μ •λœ μ’Œν‘œλ‘œ 쀑심 μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.

[2] ν”Œλ ˆμ΄μ–΄μ˜ μ‹œμ μ„ νŠΉμ • 였브젝트둜 쀑심 μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

tileX

Number

xμ’Œν‘œ

tileY

Number

yμ’Œν‘œ

key

String

였브젝트의 ν‚€ κ°’

time

Number

μ‹œμ μ΄ λͺ©ν‘œ μ§€μ κΉŒμ§€ μ΄λ™ν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„(초)

예제

[1] ν”Œλ ˆμ΄μ–΄κ°€ 보고 μžˆλŠ” ν™”λ©΄μ˜ 쀑심을 μž…λ ₯ν•œ μ’Œν‘œλ‘œ 이동 및 μ΄ˆκΈ°ν™” μ‹œν‚€κΈ°

// Qλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(KeyCodeType.Q, function (player) {
    player.setCameraTarget(0, 0, 2); // ν”Œλ ˆμ΄μ–΄μ˜ μ‹œμ μ„ [0,0] μ’Œν‘œλ‘œ 2μ΄ˆλ™μ•ˆ μ΄λ™μ‹œν‚΅λ‹ˆλ‹€.
    player.sendUpdated(); 
});

// Wλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(KeyCodeType.W, function (player) {
    player.setCameraTarget("");
    player.sendUpdated();
});

[2] ν”Œλ ˆμ΄μ–΄μ˜ μ‹œμ μ„ 였브젝트둜 이동 및 μ΄ˆκΈ°ν™” μ‹œν‚€κΈ°


let sprite = App.loadSpritesheet('blueman.png', 48, 64, {
    left: [5, 6, 7, 8, 9], // 쒌방ν–₯ 이동 이미지
    up: [15, 16, 17, 18, 19],
    down: [0, 1, 2, 3, 4],
    right: [10, 11, 12, 13, 14],
    dance: [20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],
    down_jump: [38],
    left_jump: [39],
    right_jump: [40],
    up_jump: [41],
},5);

App.onJoinPlayer.Add(function (player) {
    App.runLater(function () {
        Map.putObjectWithKey(player.tileX, player.tileY, sprite, {
            overlap: true,
            movespeed: 50,
            key: "TestBlueMan",
            useDirAnim: true
        });
        Map.moveObjectWithKey("TestBlueMan", Map.width - 1, player.tileY, false);
    }, 2);
});

// Qλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(KeyCodeType.Q, function (player) {
    player.setCameraTarget("TestBlueMan",1);
    player.sendUpdated();
});

// Wλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(KeyCodeType.W, function (player) {
    player.setCameraTarget("");
    player.sendUpdated();
});

setEffectSprite

player.setEffectSprite(resource: ScriptDynamicResource, offsetX: Number, offsetY: Number, type: Number)

ν”Œλ ˆμ΄μ–΄μ˜ λ°°κ²½ λ˜λŠ” μ „κ²½ 이미지λ₯Ό μ„€μ • ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

resource

ScriptDynamicResource

μŠ€ν¬λ¦½νŠΈμ— λ‘œλ“œν•œ 이미지 객체

offsetX

Number

px λ‹¨μœ„λ‘œ x μΆ• λ°©ν–₯의 μ˜€ν”„μ…‹μ„ μ„€μ •ν•  수 μžˆλŠ” 속성

offsetY

Number

px λ‹¨μœ„λ‘œ y μΆ• λ°©ν–₯의 μ˜€ν”„μ…‹μ„ μ„€μ •ν•  수 μžˆλŠ” 속성

type

0 | 1

μ„€μ •νƒ€μž… - 0: λ°°κ²½ μ„€μ • - 1 : μ „κ²½ μ„€μ •

μ‚¬μš© κ°€λŠ₯ν•œ μ΄νŽ™νŠΈ μ• λ‹ˆλ©”μ΄μ…˜ ν‚€ κ°’

μΊλ¦­ν„°μ˜ μ›€μ§μž„μ— 맞좰 μ• λ‹ˆλ©”μ΄μ…˜μ„ μž¬μƒν•  수 μžˆλ„λ‘ 섀정이 κ°€λŠ₯ν•©λ‹ˆλ‹€. (μ°Έκ³  λ¬Έμ„œ)

μΊλ¦­ν„°μ˜ μ›€μ§μž„μ— λŒ€μ‘ν•˜λŠ” μ• λ‹ˆλ©”μ΄μ…˜μ΄ μ •μ˜λ˜μ–΄ μžˆμ§€ μ•Šμ€ 경우 μ• λ‹ˆλ©”μ΄μ…˜μ΄ μž¬μƒλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

down_idle // μ •λ©΄μ—μ„œ λŒ€κΈ° μƒνƒœ
down // μ •λ©΄μ—μ„œ 이동 쀑
left_idle // μ™Όμͺ½ λ°©ν–₯μ—μ„œ λŒ€κΈ° μƒνƒœ
left // μ™Όμͺ½ λ°©ν–₯으둜 이동 쀑
right_idle // 였λ₯Έμͺ½ λ°©ν–₯μ—μ„œ λŒ€κΈ° μƒνƒœ
right // 였λ₯Έμͺ½ λ°©ν–₯으둜 이동 쀑
up_idle // μœ„μͺ½ λ°©ν–₯μ—μ„œ λŒ€κΈ° μƒνƒœ
up // μœ„μͺ½  λ°©ν–₯으둜 이동 쀑
dance // μΆ€μΆ”λŠ” λͺ¨μ…˜
down_jump, // μ •λ©΄μ—μ„œ μ ν”„ν•˜λŠ” λͺ¨μ…˜
left_jump, // μ™Όμͺ½ λ°©ν–₯으둜 μ ν”„ν•˜λŠ” λͺ¨μ…˜
right_jump, // 였λ₯Έμͺ½ λ°©ν–₯으둜 μ ν”„ν•˜λŠ” λͺ¨μ…˜
up_jump, // μœ„μͺ½ λ°©ν–₯으둜 μ ν”„ν•˜λŠ” λͺ¨μ…˜
down_sit, // μ •λ©΄ λ°©ν–₯으둜 μ•‰μ•„μžˆλŠ” λͺ¨μ…˜
left_sit, // μ™Όμͺ½ λ°©ν–₯μ—μ„œ μ•‰μ•„μžˆλŠ” λͺ¨μ…˜
right_sit, // 였λ₯Έμͺ½ λ°©ν–₯μ—μ„œ μ•‰μ•„μžˆλŠ” λͺ¨μ…˜
up_sit // ν›„λ©΄μ—μ„œ μ•‰μ•„μžˆλŠ” λͺ¨μ…˜
down_attack // μ •λ©΄ λ°©ν–₯ 곡격 λͺ¨μ…˜
left_attack // μ™Όμͺ½ λ°©ν–₯ 곡격 λͺ¨μ…˜
right_attack // 였λ₯Έμͺ½ λ°©ν–₯ 곡격 λͺ¨μ…˜
up_attack // μœ„μͺ½ λ°©ν–₯ 곡격 λͺ¨μ…˜

예제

ν”Œλ ˆμ΄μ–΄ 배경이미지 섀정해보기

let effect = App.loadSpritesheet(
	"effect_sprite.png",
	32,
	32,
	{
		down_idle: [0, 1, 2, 3],
		down_attack: [0, 1, 2, 3],
		down: [0, 1, 2, 3],

		left_idle: [4, 5, 6, 7],
		left_attack: [4, 5, 6, 7],
		left: [4, 5, 6, 7],

		right_idle: [8, 9, 10, 11],
		right_attack: [8, 9, 10, 11],
		right: [8, 9, 10, 11],

		up_idle: [0, 1, 2, 3],
		up_attack: [0, 1, 2, 3],
		up: [0, 1, 2, 3],

		dance: [0, 1, 2, 3],

		down_jump: [0],
		left_jump: [4],
		right_jump: [8],
		up_jump: [0],

		down_sit: [0, 1, 2, 3],
		left_sit: [4, 5, 6, 7],
		right_sit: [8, 9, 10, 11],
		up_sit: [0, 1, 2, 3],
	},
	5
);

// Qλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(KeyCodeType.Q, function (player) {
	player.setEffectSprite(effect, -32, -30, 0); // λ°°κ²½ 이미지 μ„€μ •
	player.sendUpdated();
});

// Wλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(KeyCodeType.W, function (player) {
	player.setEffectSprite(null); // λ°°κ²½ 이미지 μ‚­μ œ
	player.sendUpdated();
});

playEffectSprite

player.playEffectSprite(resource: ScriptDynamicResource, repeatNum, offsetX: Number, offsetY: Number)

ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ• λ‹ˆλ©”μ΄μ…˜ 효과λ₯Ό repeatNum 횟수만큼 반볡 μž¬μƒν•˜κ³  μ‚¬λΌμ§€λŠ” 효과λ₯Ό μ μš©ν•©λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

resource

ScriptDynamicResource

μŠ€ν¬λ¦½νŠΈμ— λ‘œλ“œν•œ 이미지 객체

repeatNum

Number

μ• λ‹ˆλ©”μ΄μ…˜ μž¬μƒμ„ λ°˜λ³΅ν•  횟수

offsetX

Number

px λ‹¨μœ„λ‘œ x μΆ• λ°©ν–₯의 μ˜€ν”„μ…‹μ„ μ„€μ •ν•  수 μžˆλŠ” 속성

offsetY

Number

px λ‹¨μœ„λ‘œ y μΆ• λ°©ν–₯의 μ˜€ν”„μ…‹μ„ μ„€μ •ν•  수 μžˆλŠ” 속성

예제

1회 μž¬μƒ ν›„ μ‚¬λΌμ§€λŠ” μ΄νŽ™νŠΈ 효과

// 단일 μ• λ‹ˆλ©”μ΄μ…˜μœΌλ‘œ μ •μ˜ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.
let effect = App.loadSpritesheet("effect_sprite.png", 32, 32, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 5);

// Qλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(KeyCodeType.Q, function (player) {
	player.playEffectSprite(effect, 1, -32, -30);
});

disappearObject

player.disappearObject(key: String)

ν”Œλ ˆμ΄μ–΄ 개인 ν™”λ©΄ μƒμ—μ„œ key 값을 κ°€μ§€λŠ” 였브젝트λ₯Ό μ‚¬λΌμ§€κ²Œν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

key

String

μ‚¬λΌμ§€κ²Œν•  였브젝트의 key κ°’

예제

μ˜€λΈŒμ νŠΈμ™€ μƒν˜Έμž‘μš© μ‹œ κ°œμΈμ—κ²Œ μ‚¬λΌμ§€κ²Œ ν•˜κΈ°

let blueman = App.loadSpritesheet("blueman.png");

App.onJoinPlayer.Add(function (player) {
	Map.putObjectWithKey(player.tileX + 1, player.tileY, blueman, {
		type: 21,
		impassable: true,
		key: "objectKey",
	});
});

App.onTriggerObject.Add(function (player, layerID, x, y, key) {
	if(key){
	    player.disappearObject(key);
	}
});

πŸ”‰ Sound Methods

Sound Methods ν•¨μˆ˜ ν•œ λˆˆμ— 보기

// ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ‚¬μš΄λ“œλ₯Ό μž¬μƒ
player.playSound(fileName: string, loop: boolean = false)

// ν”Œλ ˆμ΄μ–΄μ—κ²Œ 링크에 ν•΄λ‹Ήν•˜λŠ” μ‚¬μš΄λ“œλ₯Ό μž¬μƒ
player.playSoundLink(link: string, loop: boolean = false)

playSound

player.playSound(fileName: string, loop: boolean = false, overlap: boolean = false, key: string = "ambient", volume: number = 1)

ν•΄λ‹Ή ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ‚¬μš΄λ“œλ₯Ό μž¬μƒν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

fileName

String

뢈러올 파일의 이름

loop

boolean

true: 반볡 μž¬μƒ false: 1회 μž¬μƒ

overlap

boolean

μ‚¬μš΄λ“œ μ˜€λ²„λž©(κ²ΉμΉ¨) μž¬μƒ κ°€λŠ₯ μ—¬λΆ€

key

string

μž¬μƒν•˜λŠ” μ‚¬μš΄λ“œλ₯Ό μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” λ¬Έμžμ—΄μž…λ‹ˆλ‹€. κΈ°λ³Έ 값은 "ambient"둜 μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

volume

number

μ‚¬μš΄λ“œμ˜ λ³Όλ₯¨μ„ μ‘°μ ˆν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μˆ«μžμž…λ‹ˆλ‹€. κ°’μ˜ λ²”μœ„λŠ” 0μ—μ„œ 1κΉŒμ§€μ΄λ©°, 0은 μ†Œλ¦¬κ°€ μ—†μŒμ„ λ‚˜νƒ€λ‚΄κ³ , 1은 μ΅œλŒ€ λ³Όλ₯¨μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

예제

μž…μž₯음 섀정해보기(파일)

// ν”Œλ ˆμ΄μ–΄κ°€ μž…μž₯ν•  λ•Œ μ‹€ν–‰
App.onJoinPlayer.Add(function (player) {
	player.playSound("join.mp3",false, true, "join", 0.5);
});

player.playSoundLink(link: string, loop: boolean = false, overlap: boolean = false, key: string = "ambient", volume: number = 1)

λͺ¨λ“  ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ‚¬μš΄λ“œλ₯Ό μž¬μƒν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

πŸ’‘ μ˜¬λ°”λ₯Έ 링크λ₯Ό μž…λ ₯ν–ˆλŠ”λ° μž¬μƒμ΄ λ˜μ§€ μ•ŠλŠ” 경우

CORS 정책을 μœ„λ°˜ν•œ 경우일 κ°€λŠ₯성이 λ†’μŠ΅λ‹ˆλ‹€. CORS 정책을 맞좜 수 μ—†λŠ” κ²½μš°μ—λŠ” playSoundLink λŒ€μ‹  μŒμ•… νŒŒμΌμ„ μ—…λ‘œλ“œ ν•˜μ—¬ playSound ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ λ“œλ¦½λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

μ΄λ¦„νƒ€μž…μ„€λͺ…

link

String

μ‚¬μš΄λ“œ url

loop

boolean

true: 반볡 μž¬μƒ false: 1회 μž¬μƒ

overlap

boolean

μ‚¬μš΄λ“œ μ˜€λ²„λž©(κ²ΉμΉ¨) μž¬μƒ κ°€λŠ₯ μ—¬λΆ€

key

string

μž¬μƒν•˜λŠ” μ‚¬μš΄λ“œλ₯Ό μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” λ¬Έμžμ—΄μž…λ‹ˆλ‹€. κΈ°λ³Έ 값은 "ambient"둜 μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

volume

number

μ‚¬μš΄λ“œμ˜ λ³Όλ₯¨μ„ μ‘°μ ˆν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μˆ«μžμž…λ‹ˆλ‹€. κ°’μ˜ λ²”μœ„λŠ” 0μ—μ„œ 1κΉŒμ§€μ΄λ©°, 0은 μ†Œλ¦¬κ°€ μ—†μŒμ„ λ‚˜νƒ€λ‚΄κ³ , 1은 μ΅œλŒ€ λ³Όλ₯¨μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

예제

μž…μž₯음 섀정해보기(μ‚¬μš΄λ“œ url)

// ν”Œλ ˆμ΄μ–΄κ°€ μž…μž₯ν•  λ•Œ μ‹€ν–‰
App.onJoinPlayer.Add(function (player) {
	player.playSoundLink("https://cdn-static-stage.zep.us/static/assets/sounds/new_donation_1.wav", false, true, "join", 0.5);
});

stopSound

player.stopSound(key: string)

key에 ν•΄λ‹Ήν•˜λŠ” μ‚¬μš΄λ“œμ˜ μž¬μƒμ„ μ€‘μ§€ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

μ΄λ¦„νƒ€μž…μ„€λͺ…

key

string

μ€‘μ§€ν•˜λ €λŠ” μ‚¬μš΄λ“œμ˜ ν‚€ κ°’

예제

μž¬μƒ 쀑인 μ‚¬μš΄λ“œ 쀑지 μ‹œν‚€κΈ° μ•„λž˜ 예제 μ½”λ“œ μ‹€ν–‰ ν›„ Q, W ν‚€λ₯Ό μ—°μ†μœΌλ‘œ μž…λ ₯ν•΄λ³΄μ„Έμš”.

//Qλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(KeyCodeType.q,(player)=>{
	player.playSoundLink("https://cdn-static-stage.zep.us/static/assets/sounds/new_donation_1.wav", false, true, "donation", 0.5);
});

//Wλ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(KeyCodeType.w, (player)=>{
    player.stopSound("donation")
});

πŸ’  곡톡 Methods

곡톡 Methods ν•¨μˆ˜ ν•œ λˆˆμ— 보기

// ν”Œλ ˆμ΄μ–΄ ν•„λ“œκ°’μ„ μˆ˜μ •ν•œ ν›„ μ—…λ°μ΄νŠΈ
player.sendUpdated()

// ν”Œλ ˆμ΄μ–΄ μŠ€ν† λ¦¬μ§€κ°’μ„ μ €μž₯
player.save()

sendUpdated

player.sendUpdated()

App, Player κ΄€λ ¨ ν•„λ“œ 값이 λ³€κ²½λ˜λ©΄ λ³€κ²½ 값을 μ μš©ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

  • μ—†μŒ

save

player.save()

App, Player storage 값이 λ³€κ²½λ˜λ©΄ λ³€κ²½ 값을 μ μš©ν•˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.

νŒŒλΌλ―Έν„°

  • μ—†μŒ


Last updated