개인 자료란 (JE)

  서버 커뮤니티

Profile maxixmini 대표칭호 없음
Profile

질문하기 스크립트

특정 아이템을 n개 이상 소지 못하게 하고 싶습니다.

2020.10.21 조회 수 1157 추천 수 0


특정 아이템을 사과라고 가정했을 때 사과를 30개까지만 소유할 수 있고,

사과를 30개 소지한 상태에서 같은 아이템을 구매하거나 얻었을 때

구매하거나 얻은 것을 취소되게 하고 싶습니다.


반대로 30개 소지한 상태에서 아이템을 버리거나 판매할 때는

당연히 가능하게 하고 30개 - 판매한 수량 만큼 다시 살 수 있게 하고 싶습니다.


구매/획득 시 : 현재 사과를 30개 소유했습니다. 가질 수 있는 사과는 없습니다.

판매/버릴 시 : 현재 사과를 27개 소유했습니다. 가질 수 있는 사과는 3개 입니다.


그리고 이게 구현이 가능하다면 인챈트 된 사과도 가능할까요?


on drop of apple:


on item spawn of apple:


위의 문장은 찾았는데 나머지는 못 찾겠네요. (수량 제한 넣는 것)




2개의 댓글

스크립터브혼
2020.10.21

최대 개수 제한을 해야하는 것이니까 인벤토리에 아이템이 들어오는 모든 상황에 대해서 통제해야합니다.

땅에 떨어진 아이템을 습득 할 때[On Pick Up]도 있고,
조합대, 화로, 상자와 같이 다른 인벤토리에서 아이템을 꺼내올 때 [on inventory ~]등이 있습니다.
이것 말고도 다른 상황도 있을 수 있습니다.

본문에서 이야기하신 아이템을 구매하는 경우는
스크립트로 구현한 상점이라면 해당 상점 스크립트에서 구매하지 못하도록 막아야하구요.
플러그인으로 구현한 상점이라면 막을 방법이 없습니다.



인벤토리의 아이템을 구하는 익스프레션은 [Items In]입니다.
아이템의 갯수를 구하는 익스프레션은 [Item Amount]입니다.
> amount of %item type% in inventory of player

아이템을 획득할 때 인벤토리의 아이템 갯수를 구해 30개가 넘으면 이벤트를 캔슬하세요.

on pick up:
    event-item is apple
    amount of apple in inventory of player > 30
    cancel event

조합대 같이 인벤토리를 직접 조작하여 변경하는 상황에서
가장 쉽고 간단한 방법은 인벤토리를 닫을때[On Inventory Close] 오버된 갯수만큼 아이템을 월드에 드랍[Drop]해버리는 방법입니다.
월드에 드랍된 아이템은 앞서 구현한 [On Pick Up]이벤트에서 줍지 못하게 캔슬하기 때문에 이 방법이 가장 쉽습니다.

on inventory close:
    set {_amount} to amount of apple in inventory of player
    {_amount} > 30
    set {_drops} to {_amount} - 30 of apple
    remove {_drops} from inventory of player
    drop {_drops} at location of player

인벤토리 조작을 통제하는[On Inventory Click]이벤트로 직접 구현하려면
클릭타입[Click Type], 클릭상황에 따라 아이템을 슬롯에 놓는경우, 아이템을 커서로 들어올리는 경우, 더블클릭으로 최대스택으로 모으는 경우 등등 모든 클릭상황에 대해서 대응해야하기 때문에 상당히 까다롭고 작업량이 많습니다.

이 외 인벤토리에 아이템이 들어올 수 있는 모든 상황에 대해서 모두 구현하셔야합니다.



스크립트는 마인크래프트의 기본 시스템에 커스텀한 기능을 추가할 수 있는 플러그인입니다.
그래서 기본적으로 마인크래프트의 시스템이 아닌 것에는 기능을 추가 할 수 없습니다.
본문에서 이야기하신 상점기능은 마인크래프트의 기본 시스템이 아니기 때문에 상점 기능 자체에 기능을 추가해야합니다.

maxixmini
2020.10.21
@스크립터브혼

간단한 일이 아니었네요. 이렇게 신경 써야 할 부분이 많을 줄 몰랐습니다. 정성 들여 자세하게 적어주신 부분을 보고 생각해 보겠습니다. 감사합니다!