Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save entrypointkr/fdc3efdf9f85a0378051963896a37926 to your computer and use it in GitHub Desktop.
Save entrypointkr/fdc3efdf9f85a0378051963896a37926 to your computer and use it in GitHub Desktop.
/* _take_item() 예제:
# if (_take_item(player(), 아이템)) {
# msg('아이템 1개를 뺐었습니다.')
# } else {
# msg('아이템 1개가 부족합니다.')
# }
# if (_take_item(player(), 아이템, 100)) {
# msg('아이템 100 개를 뺐었습니다.')
# } else {
# msg('아이템 100 개가 부족합니다.')
# }
*/
proc _take_item(@player, @takeItem, @takeCount = 0) {
if (@takeCount < 1) {
@takeCount = @takeItem['qty']
}
@inv = pinv(@player)
foreach (@key : @item in @inv) {
if (@item) {
if (_equals_item(@item, @takeItem)) {
if (@item['qty'] - @takeCount > 0) {
@item['qty'] -= @takeCount
@inv[@key] = @item
@takeCount = 0
break()
} else {
@takeCount -= @item['qty']
@inv[@key] = null
}
}
}
}
if (@takeCount <= 0) {
set_pinv(@player, @inv)
return(true)
} else {
return(false)
}
}
/*
# _has_item() 예제:
# if (_has_item(player(), 아이템)) {
# msg('아이템을 1개 이상 보유중입니다.')
# } else {
# msg('아이템 1개가 없습니다.')
# }
# if (_has_item(player(), 아이템, 100)) {
# msg('아이템을 .')
# } else {
# msg('아이템 100 개가 부족합니다.')
# }
*/
proc _has_item(@player, @hasItem, @hasCount = 0) {
if (@hasCount < 1) {
@hasCount = @hasItem['qty']
}
@has = 0;
foreach (@item in pinv(@player)) {
if (@item) {
if (_equals_item(@item, @hasItem)) {
@has += @item['qty']
}
}
}
return(@has >= @hasCount)
}
/*
# _equals_item() 예제:
# if (_equals_item(아이템1, 아이템2)) {
# msg('아이템1과 아이템2는 같은 아이템입니다')
# } else {
# msg('아이템1과 아이템2가 다른 아이템입니다')
# }
*/
proc _equals_item(@a, @b) {
if (@a['type'] == @b['type'] && @a['data'] == @b['data']) {
@aHasMeta = array_index_exists(@a, 'meta') && @a['meta']
@bHasMeta = array_index_exists(@b, 'meta') && @b['meta']
if (@aHasMeta == @bHasMeta) {
if (!@aHasMeta && !@bHasMeta || (@a['meta'] == @b['meta'])) {
return(true)
}
}
}
return(false)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment