#사용법
#원래 기술전수는 귀찮아서 안하는 편이지만 이건 난이도에 비해 널리 쓰일 수 있기 때문에 따로 시간을 내어 여기 쓰겠습니다.
#게임을 시작할 때마다 상점의 아이템이 랜덤으로 설정되는 스크립트 기술입니다.
#먼저 상점이 있는 마을 배열의 배열을 만들어 줍시다.
$data_ports = [["리스본"], ["세빌리아"]]
#다음에는 아래의 스크립트로 각 마을의 아이템 리스트를 만들어 줍니다.
module DataManager
#--------------------------------------------------------------------------
# ● 뉴 게임 설치
#--------------------------------------------------------------------------
def self.setup_new_game
create_game_objects
$game_party.setup_starting_members
$game_map.setup($data_system.start_map_id)
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
Graphics.frame_count = 0
$data_ports.each do |s|
@goods = []
while @goods.size < 10
@item = [rand(3), 1, 0, 0]
case @item[0]
when 0; @item[1] = 1+rand($data_items.size - 1)
when 1; @item[1] = 1+rand($data_weapons.size - 1)
when 2; @item[1] = 1+rand($data_armors.size - 1)
end
unless @goods.include?(@item)
@goods.push(@item)
end
end
s[10] = @goods
end
end
end
#다음에는 다음의 스크립트를 넣어 줍니다.
class Game_Party < Game_Unit
attr_accessor :port # 항구 변수
#--------------------------------------------------------------------------
# ● 오브젝트 초기화
#--------------------------------------------------------------------------
alias thdo_initialize initialize
def initialize
thdo_initialize
@port = []
$game_ports = $data_ports.clone
end
#함대가 주둔하고 있는 항구
def port
$game_ports.each do |s|
if s[0] == $game_map.display_name #표시명이 같은 맵을 해당 마을로 간주합니다. 맵의 표시명을 앞의 배열의 마을이름으로 해주세요.
return s #맵의 표시명을 고칠 경우 위의 배열의 마을이름도 고쳐야 맵과 마을을 동일시합니다.
end
end
end
end
#그리고 이건 아이템의 순서를 가격순으로 정렬하는 스크립트입니다.
#==============================================================================
# ■ Window_ShopBuy
#------------------------------------------------------------------------------
# 상점 화면에서 구입할 수있는 상품의 목록을 표시하는 창입니다.
#==============================================================================
class Window_ShopBuy < Window_Selectable
alias thdo_make_item_list make_item_list
#--------------------------------------------------------------------------
# ● 아이템 목록 만들기
#--------------------------------------------------------------------------
def make_item_list
thdo_make_item_list
#가격에 따라 아이템을 정렬한다.
@data.sort! {|a,b| a.price - b.price} #아이템을 a부터 b까지 a의 가격이 b의 가격보다 적을 때 a를 b보다 먼저 놓는 스크립트
# @commerce = 1000 #여기서부터는 상업치에 따라 아이템이 나오는 스크립트
# while @commerce > $game_party.port[7] #가격에 따라 정렬했기 때문에 상업치가 낮으면 비싼 아이템은 등장 안함.
# @data.pop
# @commerce -= 50 #여기까지가 상업치에 따라 아이템이 나오는 스크립트
# end
end
end
#이제 세팅은 다 끝났으니 이벤트에서 스크립트로 랜덤샵을 불러옵니다.
SceneManager.call(Scene_Shop)
SceneManager.scene.prepare($game_party.port[10], false) #true, false는 매각의 가능여부입니다. false일때 매각가능입니다.
#원래는 기술전수 목적이 아니라 대항해시대 1 리메이크에서 쓰려고 만든 것이라서 이해가 좀 어려울 수 있을것입니다.
#퍼서 쓰기 좋게 설명 부분은 #를 앞에 붙였습니다.