상점 - 아이템 최대개수 이상 구매시 최대개수에 맞게 안나오는 오류
2025. 1. 13. 17:49ㆍ카테고리 없음
상점을 만들었을때 구매버튼을 누르면 한개는 최대개수만큼 만들어지는데 남은 개수가 최대개수를 넘어가면 최대개수만큼 나오지 않고 그냥 전체가 나오는 오류가 있었다.
코드
public void DeleteDuplicates(int id, int itemId) //소비, 기타아이템이 중복검사
{
if (CheckItemType(DataManager.Instance.Item.GetItemData(FindItemId(id).itemId).itemType))
{
for (int i = 0; i < _items.Count; i++)
{
if (id != _items[i].id && itemId == _items[i].itemId && _items[i].count < DataManager.Instance.Item.GetItemData(_items[i].itemId).max)
{
if (FindItemId(id) == null)
{
return;
}
_items[i].count += FindItemId(id).count;
if (_items[i].count > DataManager.Instance.Item.GetItemData(itemId).max)
{
int itemCount = _items[i].count - DataManager.Instance.Item.GetItemData(_items[i].itemId).max;
_items[i].count = DataManager.Instance.Item.GetItemData(_items[i].itemId).max;
ItemInstance item = AddItem(itemId, itemCount);
//DeleteDuplicates(item.id, item.itemId); //이것만 열면 아이템이 추가가 안됨....
}
DeleteItem(id, DataManager.Instance.Item.GetItemData(itemId).itemType);
SaveItemData();
}
}
}
PotionCheck();
}
위 코드를 보면 위 최대 개수를 넘엇면 아이템을 다시 AddItem을 통해서 아이템을 추가하는데 이때 DeleteDuplicates함수를 호출하면 무한으로 함수가 실행이되서 아이템이 무한정 생성이 된다. 그래서 이거를 해결하기 위해서 코드를 수정했다.
수정된 코드
public void DeleteDuplicates(int id, int itemId) //소비, 기타아이템이 중복검사
{
if (CheckItemType(DataManager.Instance.Item.GetItemData(FindItemId(id).itemId).itemType))
{
for (int i = 0; i < _items.Count; i++)
{
if (id != _items[i].id && itemId == _items[i].itemId && _items[i].count < DataManager.Instance.Item.GetItemData(_items[i].itemId).max)
{
if (FindItemId(id) == null)
{
return;
}
_items[i].count += FindItemId(id).count;
int itemCount = _items[i].count;
if (itemCount > DataManager.Instance.Item.GetItemData(itemId).max)
{
_items[i].count = DataManager.Instance.Item.GetItemData(_items[i].itemId).max;
itemCount -= DataManager.Instance.Item.GetItemData(_items[i].itemId).max;
while (itemCount > DataManager.Instance.Item.GetItemData(_items[i].itemId).max)
{
AddItem(itemId, DataManager.Instance.Item.GetItemData(_items[i].itemId).max);
itemCount -= DataManager.Instance.Item.GetItemData(_items[i].itemId).max;
}
AddItem(itemId, itemCount);
}
DeleteItem(id, DataManager.Instance.Item.GetItemData(itemId).itemType);
SaveItemData();
}
}
}
PotionCheck();
}
while을 사용해서 아이템 개수만큼 계속 만들어주는 로직을 추가해서 구현했다.