개인 자료란 (JE)

  서버 커뮤니티

Profile 이엘 대표칭호 없음
Profile

질문하기 스크립트

아이템 한칸씩 밀기

2021.07.02 조회 수 108 추천 수 0
이해도 1.12 
게임버전 (JE) 모드버킷 
게임버전 (BE)
스크립트 버전 중급자(필요한 애드온을 찾아서 만들 수 있어요) 
스크립트 애드온 2.2 dev37c 

아이템 구매시 해당 플레이어의 인벤 공간 부족시 저장소에 저장시키는 시스템. 64개씩 구매할 경우 정상 작동하지만 1개씩 구매하여 쌓이게 할때 어떻게 시작을 잡아야할지 잘 모르겠습니다. +  amount of  {_i} ... 이 부분도 에러가 발생하는데 어떻게 수정해야하는지도 궁금합니다.

function chipSaveCount(p: player, c: integer, i: item):
    loop {chip::%{_p}%::savegui::*}:
        set {_s} to loop-index parsed as number
        set {_am} to amount of {_i} in slot {_s} of current inventory of {_p}
        if loop-value is air:
            set {chip::%{_p}%::savegui::%loop-index%} to {_c} of {_i}
        else if loop-value is {_i}:



1개의 댓글

스크립터브혼
2021.07.02

아이템의 개수는 [Item Amount]을 사용합니다.

# 아이템 개수 받기
set {_amount} to item amount of %item%

# 아이템 개수 증가
add 5 to item amount of %item%


아이템 지급 알고리즘을 구현하는 방식을 알면 해결할 수 있을 것이라 생각됩니다.


1. 루프 한 슬롯이 공기라면 빈공간이 있는 것이죠. 이 경우엔 set을 사용하여 아이템을 추가하면 됩니다.

2. 빈공간이 아닌 경우 슬롯과 추가하려는 아이템이 다르면 빈공간이 아닙니다.

3. 마지막으로 아이템이 같은 경우입니다.


아이템이 같은 경우 조금 복잡한 로직이 필요합니다.

1. 슬롯의 개수가 아이템의 최대 스택[Maximum Stack Size]과 같거나 큰 경우라면 빈공간이 없는 것 입니다.

2. 최대 스택보다 작다면 작은 만큼 아이템을 넣을 수 있고, 남은 아이템이 생길 수 있습니다.

3. 남은 아이템이 있다면 다음 루프로 넘어가 반복적으로 위에서 구현한 코드를 실행하여 완전히 소진하면 됩니다

4. 남은 아이템이 없으면 끝입니다.


제 블로그에 포스팅 했던 [Give And Drop] 함수를 참고해보세요.

마인크래프트에 구현된 아이템 지급 알고리즘을 스크립트로 구현한 함수입니다.


* 2.2 dev버전에서는... 링크드린 코드 그대로 사용하기 어려울 것 같습니다.

링크 드린 함수는 최신버전(2.5 이상) 기준입니다..