# 개인적으로 사용중인 스크립트입니다.
# 스크립트 사용자를 대상으로 공개 배포합니다. [중급이상 권장]
# 응용은 각자 알아서 하시고 추가 질문은 안받겠습니다.
# 스크립트 내용의 수정/추가 등은 능력껏 하시고 그에따른 책임은 각자 알아서...@_@
# Tag System
# BaseItem을 포함하는 클래스에 적용
# [액터, 직업, 스킬, 아이템, 무기, 방어구, 적 케릭터, 상태]
#
# 적용되는 클래스의 메모 부분에 <TAG:A,B,C> 의 형식으로 태그를 지정해줌
# get_list_tag(list, key) 를 사용해서 list 중 key를 태그로 포함하는 목록 취득가능
#==============================================================================
# ■ HG_TAG_SYSTEM
#------------------------------------------------------------------------------
# TAG System 모듈(HG_TAG_SYSTEM)과 그 내부 클래스(Tag) 정의
#==============================================================================
module HG_TAG_SYSTEM
class Tag
#--------------------------------------------------------------------------
# ● 초기화
#--------------------------------------------------------------------------
def initialize
@data = []
end
#--------------------------------------------------------------------------
# ● key 를 태그로 갖고 있는지 확인
#--------------------------------------------------------------------------
def check(key)
@data.include?(key)
end
#--------------------------------------------------------------------------
# ● key 를 태그로 추가 (중복방지)
#--------------------------------------------------------------------------
def add(key)
@data.push(key) unless check(key)
end
#--------------------------------------------------------------------------
# ● key 를 태그에서 제거
#--------------------------------------------------------------------------
def del(key)
@data.delete(key)
end
end
end
#==============================================================================
# ■ RPG::BaseItem
#------------------------------------------------------------------------------
# RPG::BaseItem 의 내용 수정
#==============================================================================
class RPG::BaseItem
alias tag_system_initialize initialize
#--------------------------------------------------------------------------
# ● 초기화 정의 수정/추가
#--------------------------------------------------------------------------
def initialize
tag_system_initialize
initialize_tag
end
#--------------------------------------------------------------------------
# ● 태그 내용 초기화
#--------------------------------------------------------------------------
def initialize_tag
@tag = HG_TAG_SYSTEM::Tag.new
@note.each_line {|line|
if line =~ /<TAG:(.*)>/
$1.split(/,/).each {|i| @tag.add(i) }
end
}
end
#--------------------------------------------------------------------------
# ● 태그 리스트 취득
#--------------------------------------------------------------------------
def tag
initialize_tag unless @tag
@tag
end
end
#==============================================================================
# ■ get_list_tag(list, key)
# 스크립트 부분에 사용
#------------------------------------------------------------------------------
# list 중에서 key 를 태그로 갖는 아이템의 목록을 얻는다.
#==============================================================================
def get_list_tag(list, key)
list.select {|item| item.tag.check(key) rescue next }
end
# presented by 허걱