나쁜학생
대표칭호 없음
이해도 | 1.16 |
---|---|
게임버전 (JE) | 페이퍼 |
스크립트 애드온 | 2.2 |
gui에서 아이템 교환 상점을 만들려고 해서 아이템 종류, 아이템 갯수에 이름도 인식하는 if 구문은 어떻게 적어야 하나요?
이전에
if player has 1 coal named "석탄":
@구문~~
else:
@구문~~
이렇게 작성하고 나서 적용해보니
오류는 없다고 뜨는 데 인벤토리에 석탄이라는 아이템 자체를 인식하지 못 하더라고요;;
해결할 방법이 없을 까요?
DDang_
2021.07.04아이템 이름, 로어 전부 적어야함 zz 차라리 변수에 저장하고 그걸 쓰는게 더 나음
스크립터브혼
2021.07.04스크립트에서 Item 타입과 ItemType 타입은 서로 다른 타입입니다.
패턴에서 요구하는 타입이 Item인 경우와 ItemType인 경우를 잘 보시고 사용해야해요.
[Item 타입과 ItemType 타입의 차이]를 먼저 숙지하세요.
%itemtype% named %text%와 같이 익스프레션을 사용한 아이템은 Item 타입이 됩니다.
Item은 명확한 비교를 하기 때문에 모든 메타데이터(이름, 로어, 개수, 어트리뷰트... 등)이 완전히 일치해야 '같다'를 반환합니다.
ItemType은 느슨한 비교를 하기 때문에 일부만 같아도 '같다'를 반환하죠.
작성하신 코드에서는 익스프레션을 사용했기 때문에 다른 메타데이터가 다르면 '다르다'를 반환하게 됩니다.
가장 베스트인 방법은 플레이어가 얻게 될 아이템을 전역변수로 고정해 놓는 방법입니다.
이렇게 되면 플레이어가 가지고 있는 Item과 완전 일치하기 때문에 '같다'를 얻을 수 있습니다.
다른 방법으로는 각각의 메타데이터를 직접 비교하는 것입니다.
함수를 통해 여러 조건 중 하나라도 만족하지 못하면 false 모두 만족하는 경우 true를 반환하도록 하여
해당 함수가 true인 경우에만 동작하게 하면 됩니다.
여러 데이터 중 지정된 일부 메타데이터만 비교를 하기 때문에 비교적 느슨한 비교가 됩니다.