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
ํ๋ ์ด์ด์ ์์ ์ ์ ํ ์ขํ๋ ์ค๋ธ์ ํธ๋ก ์ด๋์ํต๋๋ค.
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
ํด๋น ํ๋ ์ด์ด์๊ฒ ์ง์ ๋ ์์น์ 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
๋ชจ๋ ํ๋ ์ด์ด์๊ฒ ์ง์ ๋ ์์น์ 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
ํด๋น ํ๋ ์ด์ด์๊ฒ ์ง์ ๋ 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
ํ๋ ์ด์ด์๊ฒ ๊ตฌ๋งค ์์ ฏ์ ํ์ํ๊ณ , ๊ตฌ๋งค ํ ๋์ํ๋ ์ฝ๋ฐฑํจ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์๋ชจ๋ 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
ํ๋ ์ด์ด์ ๊ตฌ๋งค ์์ ฏ์ ๋ซ์ต๋๋ค.
ํ๋ผ๋ฏธํฐ
์์
sendMessage
์ ์ ๊ฐ์ธ์๊ฒ ์ฑํ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ํจ์์ ๋๋ค.
ํ๋ผ๋ฏธํฐ
text
String
๋ผ๋ฒจ์ ์ถ๋ ฅํ ํ ์คํธ
color
Uint
์ถ๋ ฅํ ๊ธ์จ์ ์์ ์ง์ ํฉ๋๋ค. (HexCode) ๊ฐ์ ์ ๋ ฅํ์ง ์์ ๊ฒฝ์ฐ, ํฐ์(0xFFFFFF)์ผ๋ก ์ ์ฉ๋ฉ๋๋ค. โก๏ธ๊ตฌ๊ธ ์์ ์ ํ ๋๊ตฌ
์์
ํ๋ ์ด์ด ๊ฐ์ธ์๊ฒ๋ง ๋ณด์ด๋ ํ์๋ฉ์์ง ์ถ๋ ฅํ๊ธฐ.

App.onJoinPlayer.Add(function(player){
player.sendMessage(`${player.name}๋ ์ด์์ค์ธ์!\nhttps://docs-kr.zep.us/ ๋งํฌ ํด๋ฆญ์ ๊ฐ์ด๋๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.`,0xffffff);
});
showPrompt
ํ๋ ์ด์ด์๊ฒ ์ ๋ ฅ์ฐฝ์ ๋ณด์ฌ์ฃผ๊ณ , ํ๋ ์ด์ด์ ์๋ต์ ๋ฐ๋ผ ๋์ํ๋ 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
ํ๋ ์ด์ด์๊ฒ ํ์ธ์ฐฝ์ ๋ณด์ฌ์ฃผ๊ณ , ํ๋ ์ด์ด๊ฐ ํ์ธ ๋ฒํผ์ ๋๋ ์ ๋ ๋์ํ๋ 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
ํ๋ ์ด์ด์๊ฒ ๊ฒฝ๊ณ ์ฐฝ์ ๋ณด์ฌ์ฃผ๊ณ , ํ๋ ์ด์ด๊ฐ 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
์์ ฏ์ ์/ํ/์ข/์ฐ ์ฌ๋ฐฑ์ ํ๋ฉด ํฌ๊ธฐ์ ๋ํ %๋น์จ๋ก ์ ์ํ์ฌ ์์ ฏ์ ํ์ํฉ๋๋ค.
ํ๋ฉด์ ํฌ๊ธฐ๊ฐ ์ฌ๋ฐฑ์ ํฌํจํ ์์ ฏ ์์ญ๋ณด๋ค ์์์ง ๊ฒฝ์ฐ, ์์ ฏ์ ํฌ๊ธฐ๊ฐ ๋น๋กํ์ฌ ์์์ง๋๋ค.
ํ๋ผ๋ฏธํฐ
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;
}
});
});openWebLink
ํ๋ ์ด์ด์๊ฒ ์น URL์ ์ ์ฐฝ์ด๋ ํ์ ์ฐฝ์ผ๋ก ํ์ํฉ๋๋ค.
ํ๋ผ๋ฏธํฐ
url
String
์ฐ๊ฒฐํ ์น url ์ฃผ์
popup
boolean
true ์ธ ๊ฒฝ์ฐ, url ์ฐฝ์ ํ์ ํํ๋ก ํ์ํฉ๋๋ค.
์์
openWebLink ํ์ ์ผ๋ก ์ฌ๋ ๊ฒฝ์ฐ
// Q ํค๋ฅผ ๋๋ฅด๋ฉด ๋์ํ๋ ํจ์
App.addOnKeyDown(81, function (player) {
player.openWebLink("https://docs-kr.zep.us", true);
});
showEmbed
ํด๋น ํ๋ ์ด์ด์๊ฒ ์ง์ ๋ 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
ํ๋ ์ด์ด์๊ฒ ์ ๋ ฅํ ์ด๋ฏธ์ง ์ฃผ์์ ํด๋นํ๋ ์ด๋ฏธ์ง๋ฅผ ํ์ํฉ๋๋ค.
ํ๋ผ๋ฏธํฐ
url
String
ํ์ํ ์ด๋ฏธ์ง url
์์
์ด๋ฏธ์ง ๋ชจ๋ฌ์ฐฝ ํ์ํ๊ธฐ

// Q๋ฅผ ๋๋ฅด๋ฉด ๋์ํ๋ ํจ์
App.addOnKeyDown(KeyCodeType.Q, function (player) {
player.showImageModal("https://cdn-static.zep.us/static/images/thumbnail.png");
});showNoteModal
ํ๋ ์ด์ด์๊ฒ ํ ์คํธ ์ฐฝ์ ๋ณด์ฌ์ฃผ๋ ํจ์์ ๋๋ค.
ํ๋ผ๋ฏธํฐ
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(): stringisEmail
ํด๋น ํ๋ ์ด์ด์ ์ด๋ฉ์ผ์ด ํ๋ผ๋ฏธํฐ ๊ฐ๊ณผ ๊ฐ๋ค๋ฉด true, ์๋๋ฉด false๋ฅผ ๋ฆฌํดํฉ๋๋ค.
ํ๋ผ๋ฏธํฐ
String
๋น๊ตํ ์ด๋ฉ์ผ ํ ์คํธ
์์
ํ๋ ์ด์ด์ ์ด๋ฉ์ผ์ด ์ง์ ํ ํ ์คํธ์ ๊ฐ์์ง ๋น๊ตํด๋ณด๊ธฐ
// q ํค๋ฅผ ๋๋ฅด๋ฉด ๋์ํ๋ ํจ์
// App.addOnKeyDown
let check = player.isEmail("[email protected]");
App.sayToAll(`์ด๋ฉ์ผ ์ผ์น ์ฌ๋ถ: ${check}`)
})getLocationName
ํ๋ ์ด์ด๊ฐ ์์๋ ์ง์ ์์ญ์ ์ด๋ฆ์ ์ถ๋ ฅํฉ๋๋ค.
์ง์ ์์ญ์ โ๋งต์๋ํฐ > ํ์ผํจ๊ณผโ ์์ ์ค์ ํ ์ ์์ต๋๋ค.
ํ๋ผ๋ฏธํฐ
์์
์์
์บ๋ฆญํฐ๊ฐ ์์๋ ํ์ผ์ ์์ญ์ด๋ฆ ์ถ๋ ฅํด๋ณด๊ธฐ
โ ์ง์ ์์ญ ์ค์ ์ด ์๋์๋ค๋ฉด ๊ณต๋ฐฑ์ผ๋ก ์ถ๋ ฅ๋ฉ๋๋ค
// 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
ํ๋ ์ด์ด์ ์บ๋ฆญํฐ๋ฅผ 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
ํ๋ ์ด์ด์ ์บ๋ฆญํฐ๋ฅผ name์ ํด๋นํ๋ ์ง์ ์์ญ์ผ๋ก ์ง์ ํ ๋ฐฉํฅ์ ๋ฐ๋ผ๋ณด๊ฒ ์ด๋์ํต๋๋ค.
ํ๋ผ๋ฏธํฐ
name
String
ํ๋ ์ด์ด๋ฅผ ์ด๋์ํฌ ์ง์ ์์ญ์ ์ด๋ฆ
dir
number
- ์บ๋ฆญํฐ๊ฐ ๋ฐ๋ผ๋ณผ ๋ฐฉํฅ โข ์ผ์ชฝ : 1 โข ์์ชฝ : 2 โข ์ค๋ฅธ์ชฝ : 3 โข ์๋์ชฝ : 4 โข ์ผ์ชฝ์ : 5 โข ์ผ์ชฝ์๋ : 6 โข ์ค๋ฅธ์ชฝ์: 7 โข ์ค๋ฅธ์ชฝ์๋: 8
์์
์ ์ฅํ๋ ํ๋ ์ด์ด๋ฅผ ์ง์ ์์ญ์ผ๋ก ์ด๋์ํค๊ธฐ
โ ๏ธ ๊ฐ์ ์ด๋ฆ์ ์ง์ ์์ญ์ด ์ฌ๋ฌ ๊ณณ ์๋ค๋ฉด ํด๋น ์์ญ๋ค ์ค ํ ๊ณณ์ผ๋ก ๋๋ค ์ด๋ํฉ๋๋ค.
// ํ๋ ์ด์ด๊ฐ ์
์ฅํ ๋ ์คํ
App.onJoinPlayer.Add(function (player) {
// ํ๋ ์ด์ด๋ฅผ "test"๋ผ๋ ์ด๋ฆ์ ์ง์ ์์ญ์ผ๋ก ์ผ์ชฝ ๋ฐฉํฅ์ ๋ฐ๋ผ๋ณด๊ฒ ์ํํ๊ธฐ
player.spawnAtLocation("test", 1);
});spawnAtMap
ํ๋ ์ด์ด๋ฅผ ํด๋น ์คํ์ด์ค ํด๋น ๋งต์ผ๋ก ์ด๋์ํต๋๋ค.
ํ๋ผ๋ฏธํฐ
spaceHashID
String
์ด๋ํ ์คํ์ด์ค์ spaceHashID
mapHashID
String
์ด๋ํ ๋งต์ mapHashID
์์
์ ์ฅํ๋ ํ๋ ์ด์ด๋ฅผ ZEP ํํ ๋ฆฌ์ผ ๋งต์ผ๋ก ์ด๋์ํค๊ธฐ ( ์คํ์ด์ค์ ๋งต ์ดํดํ๊ธฐ )
// ํ๋ ์ด์ด๊ฐ ์
์ฅํ ๋ ์คํ
App.onJoinPlayer.Add(function (player) {
// ํ๋ ์ด์ด๋ฅผ ZEP ํํ ๋ฆฌ์ผ ๋งต์ผ๋ก ์ด๋์ํค๊ธฐ
player.spawnAtMap("65jeBA", "2YvXMJ");
});setCameraTarget
[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
ํ๋ ์ด์ด์ ๋ฐฐ๊ฒฝ ๋๋ ์ ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
ํ๋ผ๋ฏธํฐ
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
ํ๋ ์ด์ด์๊ฒ ์ ๋๋ฉ์ด์
ํจ๊ณผ๋ฅผ 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
ํ๋ ์ด์ด ๊ฐ์ธ ํ๋ฉด ์์์ 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);
}
});
putIndividualObject
์ง์ ํ ์ขํ์ ํ๋ ์ด์ด์๊ฒ๋ง ๋ณด์ด๋ ์ค๋ธ์ ํธ๋ฅผ ์ค์นํ๋ ํจ์์ ๋๋ค. ( ๊ธฐ์ค ์ขํ: Left Top )
dynamicResource ํ๋ผ๋ฏธํฐ์ null ์
๋ ฅ์ ํด๋น ์ขํ์ ์ค๋ธ์ ํธ๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค.
๊ด๋ จ ๋ฌธ์: ์ค๋ธ์ ํธ npcProperty
ํ๋ผ๋ฏธํฐ
x, y
Number
์ค๋ธ์ ํธ๋ฅผ ๋์ x, y ์ขํ
dynamicResource
ScriptDynamicResource
App.loadSpritesheet ํจ์๋ก ๋ก๋ํ ์ด๋ฏธ์ง
์ต์ (option)
๊ฐ์ ์ ๋ ฅํ์ง ์์๋ Default ๊ฐ์ด ์ ์ฉ๋ฉ๋๋ค
key
String
์ค๋ธ์ ํธ์ ํค ๊ฐ (Default: null)
moveSpeed
Number
์ค๋ธ์ ํธ์ ์ด๋์๋
(Default: 80)
useDirAnim
Boolean
๋ฐฉํฅ์ ์ธ์งํด์ ์ ๋๋ฉ์ด์ ์ ์ฌ์ํ๋ ์ต์ (Default: false)
impassable
Boolean
์ค๋ธ์ ํธ ํต๊ณผ๋ถ๊ฐ ์ต์ (Default: false)
offsetX
Number
์ค๋ธ์ ํธ ์ด๋ฏธ์ง์ ๋ฐฐ์น ๊ธฐ์ค์ ์ X์ขํ (Default: 0)
offsetY
Number
์ค๋ธ์ ํธ ์ด๋ฏธ์ง์ ๋ฐฐ์น ๊ธฐ์ค์ ์ Y์ขํ (Default: 0)
topObject
Boolean
true ๋ก ์ค์ ํ๋ฉด ์ค๋ธ์ ํธ๊ฐ ์๋จ์ค๋ธ์ ํธ๋ก ์ค์น๋ฉ๋๋ค. (Default: false)
์์
ํค ๊ฐ์ ๊ฐ์ง ๋ธ๋ฃจ๋งจ ์ค๋ธ์ ํธ ์์ฑํด๋ณด๊ธฐ
let blueman = App.loadSpritesheet("blueman.png");
// q ํค๋ฅผ ๋๋ฅด๋ฉด ๋์ํ๋ ํจ์
App.addOnKeyDown(81, function (player) {
player.putIndividualObject(18, 6, blueman, {
type:21, // zep-script ์ํธ์์ฉ ์ค๋ธ์ ํธ
overlap: true, // ์ถฉ๋ ์ด๋ฒคํธ ๊ฐ์ง
movespeed: 100, // ์ด๋์๋, ๊ธฐ๋ณธ๊ฐ: 80
key: "TestBlueMan", // ํค ๊ฐ
impassalbe:true, // ํต๊ณผ ๋ถ๊ฐ ์ค๋ธ์ ํธ ์ค์
useDirAnim: true, // ๋ฐฉํฅ์ ์ธ์งํด์ ์ ๋๋ฉ์ด์
์ ์ฌ์ํ๋ ์ต์
offsetX: -8, // ์ค๋ธ์ ํธ ์ด๋ฏธ์ง์ ๋ฐฐ์น ๊ธฐ์ค์ ์ X์ขํ๋ฅผ ์กฐ์
offsetY: -32,// ์ค๋ธ์ ํธ ์ด๋ฏธ์ง์ ๋ฐฐ์น ๊ธฐ์ค์ ์ Y์ขํ๋ฅผ ์กฐ์
});
});
// w ํค๋ฅผ ๋๋ฅด๋ฉด ๋์ํ๋ ํจ์
App.addOnKeyDown(87, function (player) {
// ์ค๋ธ์ ํธ ์ญ์
player.putIndividualObject(18, 6, null, {
key: "TestBlueMan", // ํค ๊ฐ
});
});๐ Sound Methods
Sound Methods ํจ์ ํ ๋์ ๋ณด๊ธฐ
// ํ๋ ์ด์ด์๊ฒ ์ฌ์ด๋๋ฅผ ์ฌ์
player.playSound(fileName: string, loop: boolean = false)
// ํ๋ ์ด์ด์๊ฒ ๋งํฌ์ ํด๋นํ๋ ์ฌ์ด๋๋ฅผ ์ฌ์
player.playSoundLink(link: string, loop: boolean = false)playSound
ํด๋น ํ๋ ์ด์ด์๊ฒ ์ฌ์ด๋๋ฅผ ์ฌ์ํ๋ ํจ์์ ๋๋ค.
ํ๋ผ๋ฏธํฐ
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);
});playSoundLink
๋ชจ๋ ํ๋ ์ด์ด์๊ฒ ์ฌ์ด๋๋ฅผ ์ฌ์ํ๋ ํจ์์ ๋๋ค.
๐ก ์ฌ๋ฐ๋ฅธ ๋งํฌ๋ฅผ ์ ๋ ฅํ๋๋ฐ ์ฌ์์ด ๋์ง ์๋ ๊ฒฝ์ฐ
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
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
App, Player ๊ด๋ จ ํ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ณ๊ฒฝ ๊ฐ์ ์ ์ฉํ๋ ํจ์์ ๋๋ค.
ํ๋ผ๋ฏธํฐ
์์
save
App, Player storage ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ณ๊ฒฝ ๊ฐ์ ์ ์ฉํ๋ ํจ์์ ๋๋ค.
ํ๋ผ๋ฏธํฐ
์์
Last updated
Was this helpful?