질문이 들어와서 해당 좌표의 아이템을 읽어오는 함수가 없어서
꼼수를 이용해서 해당 좌표의 아이템을 읽어오는 법을 알려드리겠습니다.
직접 좌표의 아이템이 뭔지 알아올 수가 없으므로
먼저 자신의 아이템 슬롯에 넣고 그 아이템의 아이디를 체크한 후, 여부를 판단한 다음
가져와도 될 아이템이면 슬롯에 넣은 상태로 그대로 두고
가져오지 않아야 될 아이템이면 다시 원래 좌표에 아이템을 띄우는 방법을 이용하면 됩니다.
해당 좌표의 아이템 획득 -> 가져도 될 아이템인지 판단 -> (가능) 그대로 둠
-> (불가능) 원래 좌표에 아이템 다시 뿌려줌
대충 설명해봤는데 이해가 되셨는지 모르겠네요
하지만 이 방법에는 주의하셔야 될 점과 제한이 있다는 점입니다.
먼저, 주의할 점은 getitem 함수를 이용해서 해당 좌표의 아이템을 슬롯으로 획득하는 과정에서
아이템 슬롯이 전부 꽉 차있을 경우를 체크해 줘야 하는데요
이에는 두가지의 방법이 있습니다.
1)
절대로 사람들이 얻을 수 없고, 가져서는 안될 아이템을 하나 만들어서
그 해당 아이템을 아이템창에 추가-> 있는지 확인 -> 삭제
를 거쳐서 아이템의 슬롯이 비어있는지 확인하는 방법입니다.
set @possible, 0;
additem @mysd, name2itemid("절대안돼"), 1;
if(pc_amountitem(@mysd, name2itemid("절대안돼")) == 1)
{
delitem @mysd, name2itemid("절대안돼"), 1;
set @possible, 1;
}
이런식으로 @possible이라는 변수 여부에 따라서 아이템 슬롯이 꽉 차 있는지의 여부를 판단할 수 있습니다.
2)
2번 방법에 대해서는 다음 강의에서 자세히 설명하도록 하겠습니다.
(get_equipitem의 boundary overrun을 이용한 방법인데
CR이라는 구동기가 개발진행중이면 권장을 드리지 않는데, 정체중이라 쓰셔도 될 듯 해서 강의하겠습니다.)
그리고 제한된 점은 해당 좌표의 아이템을 이미 가지고 있을 경우에는 체크가 어렵다는 점입니다.
위의 2번 방법으로 대안을 마련할 수 있겠지만, 일단은 1번밖에 안알려 드렸으므로 이러한 제한이 생깁니다.
다시 말하면, 좌표에 떨어져서 판단하고자 하는 아이템을 이미 가지고 있을 경우에는 사용이 불가능하다는 점인데요
이는 pc_amountitem이라는 함수가 개수가 아닌 아이템의 개수를 인지하지 못하기 때문입니다.