사이트 로그인
2017.01.03 14:06
바람박스에서 퍼왔습니다~
어떤 아이템이 몇개 있는지의 아이템을 체크하는 사용자 정의 함수
어떤 아이템이 몇개있는지는 호박을 10개 가져오라는 퀘스트를 만들때 꽤 유용하다
아이템 체크를 하려면 필요한건 아이템의 이름과 아이템의 개수이다.
만약 사용자 정의 함수로 사용을 하게 된다면 callfunc "ItemCK", "도토리", 3; 이 한줄로 도토리가 3개가 있는지 확인이 될것이다.
다만 이걸 사용후 delitem 으로 아이템을 삭제하고말고는 개발자의 몫이다.
우선 기본구성을 하겠다
func ItemCK {
set @sd, mysd();
set @Item$, getarg(0);
set @Count, getarg(1);
}
보통 이런 방식을 생각하는데 나는 조금 다르다.
이 함수는 매우 유용하기 때문에 굳이 자신만의 체크로 만들 이유가 없다는거다.
만약 파티원 단위로 이동을 하게 될 경우. sd값을 자신만 체크해서는 이동을 시킬 수 없는거랑 같은 개념이다.
그래서 나는 이렇게 구성한다.
func ItemCK {
set @target_sd, getarg(0);
set @Item$, getarg(1);
set @Count, getarg(2);
}
이렇게 할경우
callfunc "ItemCK", @sd, "도토리", 1;
callfunc "ItemCK", @target_sd, "도토리", 1;
callfunc "ItemCK", @party_sd, "도토리", 1;
이런식으로 사용이 가능해진다.
그럼 이제 핵심 스크립트를 작성하겠다.
set @Check, pc_amountitem(@target_sd, name2itemid(@Item$)); // 아이템의 개수를 불러오는 함수
if(@Check < @Count)
{
set @Count, @Count - @Check;
dialog 1, 0, 0, "" + @Item$ + " 이(가) " + @Count + "개 부족합니다.";
end;
}
이런식으로 작성을해 부족하면 스크립트를 강제로 종료시킨다.
이렇게 했을 경우 최종적인 결과는
func ItemCK {
set @target_sd, getarg(0);
set @Item$, getarg(1);
set @Count, getarg(2);
set @Check, pc_amountitem(@target_sd, name2itemid(@Item$));
if(@Check < @Count)
{
set @Count, @Count - @Check;
dialog 1, 0, 0, "" + @Item$ + " 이(가) " + @Count + "개 부족합니다.";
end;
}
return;
}
이게 완성이 된다. 나는 이걸 응용해서 이렇게 작성해 보았다.
list2(@list, 1, 0, "칠교칠선 을 선택하셨습니다. 이 칠교칠선 품격을 높이려면\n 금전이 300만전 필요합니다.", "지금 만들겠습니다.", "다음에 만들겠습니다.");
if(@list == 1)
{
if(get_money(@sd) < 3000000)
{
set @money, 3000000 - get_money(@sd);
dialog 1, 0, 0, "금전이 " + @money + "전 부족합니다.";
end;
}
callfunc "ItemCK", @sd, "적화접선", 1;
set_money @sd, get_money(@sd) - 3000000;
additem @sd, name2itemid("품격있는적화접선"), 1;
dialog 1, 0, 0, "품격있는적화접선을 만들어 드렸습니다!";
}
end;