ZEP Guidebook (KR)
Search
βŒƒK

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
ν”Œλ ˆμ΄μ–΄μ˜ λ°°κ²½ λ˜λŠ” μ „κ²½ 이미지λ₯Ό μ„€μ • ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Sound

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

곡톡

이름
μ„€λͺ…
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);
λͺ¨λ“  ν”Œλ ˆμ΄μ–΄μ—κ²Œ μ§€μ •λœ μœ„μΉ˜μ— 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초 )
예제
HTML νƒœκ·Έλ₯Ό λ„£μ–΄ 라벨 꾸며보기
// xλ₯Ό λˆŒλ €μ„λ•Œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
App.addOnKeyDown(88, function (player) {
// x λ₯Ό 넣을 흰색 λ°•μŠ€ μŠ€νƒ€μΌ
let style =
"display: inline-block; text-align: center; width:1.2em; height:1.2em; line-height: 1.2em; color: black; background-color: white; font-size: 1.2em; border-radius:3px";
player.showCustomLabel(
`<span style="${style}">X</span> λ²„νŠΌμ„ 눌러 예제λ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€`,
0xffffff, // 흰색글씨
0, // 검은색 λ°°κ²½
300, // μ˜€ν”„μ…‹ 300
20, // λ„ˆλΉ„ 20%
1, // 투λͺ…도 1 -> 뢈투λͺ…
5000 // ν‘œμ‹œ μ‹œκ°„ 5000 -> 5μ΄ˆκ°„ ν‘œμ‹œ
);
});

​

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)
예제
μ΄ˆμ„±ν€΄μ¦ˆ μœ„μ ― 따라해보기
예제_showWidget(player).zip
1KB
Binary
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();
}
})
κ΅¬λ§€μœ„μ ― μ˜ˆμ‹œ
timer와 message μ˜΅μ…˜μ„ μ„€μ •ν•œ 경우
​

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)
confrimVariant
'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
μž…λ ₯μ°½ μœ„μ— 좜λ ₯ν•  ν…μŠ€νŠΈ (Default: null)
confrimVariant
'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
μž…λ ₯μ°½ μœ„μ— 좜λ ₯ν•  ν…μŠ€νŠΈ (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
상/ν•˜/쒌/우 μ—¬λ°±μ˜ % κ°’
예제
ν™”λ©΄ 크기λ₯Ό μ€„μ΄λŠ” 경우 μœ„μ ―μ˜ 크기 λ³€ν™”
showWidgetResponsive.zip
16KB
Binary
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);
});
νŒμ—…μœΌλ‘œ url 창을 ν‘œμ‹œ
​

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("[email protected]");
App.sayToAll(`이메일 일치 μ—¬λΆ€: ${check}`)
})
​

getLocationName

player.getLocationName : string
ν”Œλ ˆμ΄μ–΄κ°€ μ„œμžˆλŠ” μ§€μ • μ˜μ—­μ˜ 이름을 좜λ ₯ν•©λ‹ˆλ‹€.
μ§€μ • μ˜μ—­μ€ β€˜λ§΅μ—λ””ν„° > νƒ€μΌνš¨κ³Όβ€™ μ—μ„œ μ„€μ • ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
νŒŒλΌλ―Έν„°
  • μ—†μŒ
예제
캐릭터가 μ„œμžˆλŠ” νƒ€μΌμ˜ μ˜μ—­μ΄λ¦„ 좜λ ₯해보기
β†’ μ§€μ • μ˜μ—­ 섀정이 μ•ˆλ˜μžˆλ‹€λ©΄ 곡백으둜 좜λ ₯λ©λ‹ˆλ‹€
// q ν‚€λ₯Ό λˆ„λ₯΄λ©΄ λ™μž‘ν•˜λŠ” ν•¨μˆ˜
// App.addOnKeyDown
App.addOnKeyDown(81,function(player){
App.sayToAll