#============================================================================== # ▽ ゲットアイテムウィンドウ - Plm_Getim ver1.0 #------------------------------------------------------------------------------ #  アイテムの入手をピクチャみたいに流れるように表示します。 #============================================================================== =begin イベントコマンド getim(id,kind,num) id : アイテムID (お金の時は金額) kind : アイテムの種類 0:アイテム 1:武器 2:防具 -1:お金 num : 個数 指定しなかった場合 1個 例=> getim(1,2) #防具ID1を入手 getim(3) #アイテムID3を入手 getim(4,0,5) #アイテムID4を5個入手 getim(67,-1) #67G入手 ()を使わずに半角スペースを入れてgetim 1,2と指定することも可能 メモ欄に<レア>またはと書くとそのアイテムをレアアイテム扱いに レア度をつける場合...で段階毎に色変えできるよ =end module PLM_GETIM #-------------------------------------------------------------------------- # ● かすたまいづぽいんと #-------------------------------------------------------------------------- WIDS = 0 #ウィンドウ幅 0:最小 272:半分 544:フル POS1 = [-2, 0] #表示位置始点[X,Y] 0:X左Y上寄せ -1:中央 -2:X右Y下寄せ POS2 = [-2,-2] #表示位置終点[X,Y] 任意の数値も可(中心点基準) MOVF = 100 #移動にかかるフレーム数 WAIT = 120 #移動後ウェイトフレーム数 60:1秒 OPA1 = 0 #不透明度の初期値 0〜255 OPA2 = 255 #不透明度の最終値 0〜255 FADE = [0,-2] #フェードアウト時のウィンドウの動き x,y マイナス可能 SPC = 42 #表示位置間隔 0:重なる 48:ぴったり接する FSIZ = 20 #文字の大きさ 24:デフォルト 16〜推奨 MSG = "を入手!" #後に続く言葉 MLT = "×" #複数個の場合数字の前につく文字 SE = ["Item3", 80, 100] #アイテム入手時のSEファイル名,音量,ピッチ IEM = Color.new(0 ,255, 127) #大事なものの強調色 ISE = ["Skill3" ,90, 75] #大事なもの入手時のSEファイル名,音量,ピッチ GIC = 16 #お金のアイコンを参照するアイテムID GSE = ["Coin", 80, 100] #お金入手時のSEファイル名,音量,ピッチ RARE = 5 #レア度の段階数 COL1 = Color.new(200 ,127, 127) #レア度最低の強調色 COL2 = Color.new(255 ,255, 127) #レア度最大または<レア>指定時の強調色 RSE = ["Up3", 90, 80] #レア入手時のSEファイル名,音量,ピッチ #-------------------------------------------------------------------------- # ● おまけ系 #-------------------------------------------------------------------------- WIDW = true #ウィンドウ表示 true:表示 false:非表示 WLIM = true #ゲーム画面枠内に収めるか? IMPT = true #大事なものの判定をするか? SERE = true #SEの連続再生をするか? true:する false:表示終了までしない end class Game_Interpreter def getim(id=0,kind=0,num=1) SceneManager.scene.getim(id,kind,num) end end #============================================================================== # ■ Scene_Map #------------------------------------------------------------------------------ #  マップ画面の処理を行うクラスです。 #============================================================================== class Scene_Map < Scene_Base include PLM_GETIM def getim(id=0,kind=0,num=1) return if id == 0 return if num < 1 if kind == -1 se = GSE k = $data_items[GIC] $game_party.gain_gold(id*num) s = (id*num).to_s + $data_system.currency_unit + MSG else se = SE case kind when 0; k = $data_items[id] if k.itype_id == 2 && IMPT c = "em" se = ISE end when 1; k = $data_weapons[id] when 2; k = $data_armors[id] else ; return end $game_party.gain_item(k, num) s = num > 1 ? MLT + num.to_s : "" s = k.name + s + MSG k.note.gsub(/\<レア|Rare\>/){if c != "em"; c = "rare"; se = RSE; end} k.note.gsub(/\/){c = $1.to_i} end if SERE || @a == nil Audio.se_play("Audio/SE/#{se[0]}", se[1], se[2]) if se[0] != "" end @a ||= [] @a.push Window_Get_Item.new(s,k,@a.size,c) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias update_s update def update update_s if @a != nil for i in 0...@a.size @a[i].update @a[i] = nil if @a[i].disposed? end @a.compact! @a = nil if @a.empty? end end end #============================================================================== # ■ Window_Get_Item #------------------------------------------------------------------------------ #  ゲットアイテムするクラスです。 #============================================================================== class Window_Get_Item < Window_Base include PLM_GETIM def initialize(s,k,as,c) rect = Bitmap.new(1,1) rect.font.size = FSIZ rect = rect.text_size(s) ss = rect.width + 48 wh = [rect.height,20].max + 24 ww = [WIDS,ss].max wx = POS1[0] - ww/2 wx = [544-ww, 272-ww/2][POS1[0]+2] if POS1[0] < 0 && -3 < POS1[0] wy = POS1[1] - wh/2 wy = [416-wh, 208-wh/2][POS1[1]+2] if POS1[1] < 0 && -3 < POS1[1] if WLIM wx = [0,[wx,544-ww].min].max wy = [0,[wy,416-wh].min].max end super(wx, wy, ww, wh) self.draw_icon(k.icon_index, (ww-ss)/2, (wh-48)/2) if k != nil self.contents.font.size = FSIZ if c == "em" self.contents.font.color = IEM elsif c == "rare" self.contents.font.color = COL2 elsif c == nil else r = COL1.red + (COL2.red - COL1.red) / RARE * c g = COL1.green + (COL2.green - COL1.green) / RARE * c b = COL1.blue + (COL2.blue - COL1.blue) / RARE * c self.contents.font.color = Color.new(r,g,b) end self.draw_text((ww-ss)/2+24, 0, ss, wh-24, s) self.opacity = WIDW ? OPA1 : 0 self.contents_opacity = OPA1 @s_dis = 0 @wait = WAIT @fx = POS2[0] - ww/2 #到達点 @fx = [544-ww, 272-ww/2][POS2[0]+2] if POS2[0] < 0 && -3 < POS2[0] @fy = POS2[1] - wh/2 @fy = [416-wh, 208-wh/2][POS2[1]+2] if POS2[1] < 0 && -3 < POS2[1] if WLIM @fx = [0,[@fx,544-ww].min].max @fy = [0,[@fy,416-wh].min].max end @mf = [MOVF,1].max @dx = (@fx - wx) / @mf #差 @dy = (@fy - wy) / @mf @dx = (@fx - wx) < 0 ? -1 : 1 if @dx == 0 && @fx != wx @dy = (@fy - wy) < 0 ? -1 : 1 if @dy == 0 && @fy != wy spc = SPC * as #間隔 @fx += @dx < 0 ? spc : spc * -1 if @dx.abs > 0 @fy += @dy < 0 ? spc : spc * -1 if @dy.abs > 0 @mx,@my = 1,1 @mx = -1 if @dx < 0 @my = -1 if @dy < 0 @c = 0 end def update return if self.disposed? if @s_dis == 0 self.x = (@fx - self.x) * @mx <= 0 ? @fx : self.x + @dx self.y = (@fy - self.y) * @my <= 0 ? @fy : self.y + @dy opa = (OPA2 - OPA1) * 100 / @mf / 100.00 self.opacity = WIDW ? [0,[self.opacity+opa,255].min].max : 0 self.contents_opacity = [0,[self.contents_opacity+opa,255].min].max @c += 1 @s_dis = 1 if (@fx - self.x) == 0 && (@fy - self.y) == 0 && self.contents_opacity == OPA2 elsif @s_dis == 1 @wait -= 1 if @wait <= 0 @s_dis = 2 end elsif @s_dis == 2 self.x += FADE[0] self.y += FADE[1] self.opacity -= 20 self.contents_opacity -= 20 if self.contents_opacity <= 0 self.dispose end end end end