赞 | 673 |
VIP | 62 |
好人卡 | 144 |
积分 | 335 |
经验 | 110435 |
最后登录 | 2024-11-1 |
在线时间 | 5108 小时 |
Lv5.捕梦者
- 梦石
- 0
- 星屑
- 33496
- 在线时间
- 5108 小时
- 注册时间
- 2012-11-19
- 帖子
- 4878
|
这儿有个佣兵系统的脚本,LZ可参照下。- #=================================================
- #
- #在角色名字後打上",XXX"其中XXX為決定的價格
- #
- #呼叫範例:事件腳本中輸入
- #b = [3,4,5,6,7,] #數字為角色ID
- #$scene =\
- #Mercenaries::\
- #Scene_Mercenaries.new(b)
- module Mercenaries
- class Window_Help < ::Window_Base
- def initialize
- super(0, 0, 196, 256)
- self.contents = Bitmap.new(width - 32, height - 32)
- self.contents.font.size = 18
- [url=home.php?mod=space&uid=95897]@actor[/url] = nil
- self.z += 10
- end
- def draw_actor(actor)
- if @actor != actor
- self.contents.clear
- bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
- bx = (self.width / 2) - bitmap.width / 2
- by = (self.height / 2) - bitmap.height / 2
- self.contents.blt(bx, by, bitmap, bitmap.rect, 196)
- self.contents.draw_text(4, 4 + 0, 196, 18, "价格:" + actor.price.to_s)
- self.contents.draw_text(4, 4 + 20, 196, 18, "姓名:" + actor.name)
- self.contents.draw_text(4, 4 + 40, 196, 18, "职业:" + actor.class_name)
- self.contents.draw_text(4, 4 + 60, 196, 18, "武器:#{$data_weapons[actor.weapon_id].name}")
- self.contents.draw_text(4, 4 + 80, 196, 18, "铠甲:#{$data_armors[actor.armor3_id].name}")
- self.contents.draw_text(4, 4 + 100, 196, 18, "攻击力:#{actor.atk}")
- self.contents.draw_text(4, 4 + 120, 196, 18, "防御力:#{actor.pdef}")
- self.contents.draw_text(4, 4 + 140, 196, 18, "魔御力:#{actor.mdef}")
- self.contents.draw_text(4, 4 + 160, 196, 18, "力量:#{actor.str}")
- self.contents.draw_text(4, 4 + 180, 196, 18, "灵巧:#{actor.dex}")
- self.contents.draw_text(4, 4 + 200, 196, 18, "速度:#{actor.agi}")
- self.contents.draw_text(4, 4 + 220, 196, 18, "魔力:#{actor.int}")
- @actor = actor
- end
- end
- end
- class Window_ShopCommand < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(80, 90 - 64, 480, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- @item_max = 3
- @column_max = 3
- @commands = ["雇佣", "解除", "取消"]
- refresh
- self.index = 0
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- for i in 0...@item_max
- draw_item(i)
- end
- end
- #--------------------------------------------------------------------------
- # ● 描绘项目
- # index : 项目编号
- #--------------------------------------------------------------------------
- def draw_item(index)
- x = 4 + index * 160
- self.contents.draw_text(x, 0, 128, 32, @commands[index])
- end
- end
- class Window_Mercenaries < ::Window_Selectable
- attr_reader :column_max
- attr_reader :item_max
- attr_reader :mercenaries
- def initialize(mercenaries)
- super(80, 90, 480, 320)
- @mercenaries = mercenaries
- @column_max = 7
- refresh
- self.index = 0
- end
- def set_mercenaries(mercenaries)
- @mercenaries = mercenaries
- refresh
- end
- def id
- return @mercenaries[self.index]
- end
- def refresh
- if self.contents != nil
- self.contents.dispose
- self.contents = nil
- end
- @item_max = @mercenaries.size
- if @item_max > 0
- self.contents = Bitmap.new(width - 32, row_max * 80)
- for i in 0...@item_max
- draw_actor(i)
- end
- end
- end
- def draw_actor(index)
- x = 4 + (index % @column_max * 64)
- y = 4 + (index / @column_max * 80)
- actor = $game_actors[@mercenaries[index]]
- bitmap = RPG::Cache.character(actor.character_name,actor.character_hue)
- rect = bitmap.rect
- rect.width /= 4
- rect.height /= 4
- self.contents.blt(x, y, bitmap, rect)
- self.contents.font.size = 12
- self.contents.draw_text(x, y + 64 - 8, 64, 16, actor.name)
- self.contents.font.size = 9
- self.contents.draw_text(x + 4, y + 64 - 16, 64, 9, "Lv."+sprintf("%02d", actor.level))
- end
- #--------------------------------------------------------------------------
- # ● 更新光标举行
- #--------------------------------------------------------------------------
- def update_cursor_rect
- # 光标位置不满 0 的情况下
- if @index < 0
- self.cursor_rect.empty
- return
- end
- # 获取当前的行
- row = @index / @column_max
- # 当前行被显示开头行前面的情况下
- if row < self.top_row
- # 从当前行向开头行滚动
- self.top_row = row
- end
- # 当前行被显示末尾行之后的情况下
- if row > self.top_row + (self.page_row_max - 1)
- # 从当前行向末尾滚动
- self.top_row = row - (self.page_row_max - 1)
- end
- # 计算光标的宽
- cursor_width = self.width / @column_max - 32
- # 计算光标坐标
- x = @index % @column_max * 64
- y = @index / @column_max * 80 - self.oy
- # 更新国标矩形
- self.cursor_rect.set(x, y, 64, 80)
- end
- end
- class Scene_Mercenaries
- def initialize(mercenaries)
- @mercenaries = mercenaries
- for actor in $game_party.actors
- if @mercenaries.include?(actor.id)
- @mercenaries.delete(actor.id)
- end
- end
- @windows = []
- [url=home.php?mod=space&uid=263426]@temp[/url] = @mercenaries.dup
- @type = -1
- end
- def main_start
- make_window
- @spriteset = Spriteset_Map.new
- end
- def main_loop
- while $scene == self
- rm_update
- input_update
- update_window
- end
- end
- def main_end
- dispose_window
- @spriteset.dispose
- end
- def main
- main_start
- Graphics.transition
- main_loop
- Graphics.freeze
- main_end
- end
- def make_window
- @window_shopcommand = Window_ShopCommand.new
- @window_help = Window_Help.new
- @window_mercenaries = Window_Mercenaries.new(@mercenaries)
- @window_mercenaries.active = false
- @window_mercenaries.index = -1
- wx = (@window_mercenaries.index % @window_mercenaries.column_max * 64)
- wy = (@window_mercenaries.index / @window_mercenaries.column_max * 80)
- @window_help.x = wx + @window_mercenaries.x + 64
- @window_help.y = wy + @window_mercenaries.y + 80
- @window_gold = Window_Gold.new
- @window_gold.x = 640 - @window_gold.width - 32
- @window_gold.y = 480 - @window_gold.height - 32
- @windows << @window_gold << @window_shopcommand << @window_mercenaries << @window_help
- @window_help.visible = false
- end
- def update_window
- @windows.each{ |window|window.update }
- help_update
- end
- def dispose_window
- @windows.each{ |window|window.dispose }
- end
- def help_update
- if @window_mercenaries.active
- @window_help.visible = true
- wx = (@window_mercenaries.index % @window_mercenaries.column_max * 64)
- wy = (@window_mercenaries.index / @window_mercenaries.column_max * 80)
- @window_help.x = wx + @window_mercenaries.x + 64
- @window_help.y = wy + @window_mercenaries.y + 80
- if @window_help.x + @window_help.width > 640
- @window_help.x = 640 - @window_help.width
- end
- if @window_help.y + @window_help.height > 480
- @window_help.y = 480 - @window_help.height
- end
- @window_help.draw_actor($game_actors[@window_mercenaries.id])
- else
- @window_help.visible = false
- end
- end
- def input_update
- if Input.trigger?(Input::B)
- @type = -1
- @window_shopcommand.active = true
- @window_mercenaries.active = false
- @window_mercenaries.index = -1
- return
- end
- if Input.trigger?(Input::C)
- if @window_shopcommand.active
- case @window_shopcommand.index
- when 0
- @window_mercenaries.set_mercenaries(@temp)
- @type = 0
- @window_shopcommand.active = false
- @window_mercenaries.active = true
- @window_mercenaries.index = 0
- return
- when 1
- actors = []
- for actor in $game_party.actors
- actors << actor.id
- end
- @window_mercenaries.set_mercenaries(actors)
- @type = 1
- @window_shopcommand.active = false
- @window_mercenaries.active = true
- @window_mercenaries.index = 0
- return
- when 2
- $scene = Scene_Map.new
- return
- end
- end
- case @type
- when 0
- if $game_party.gold >= $game_actors[@window_mercenaries.id].price
- if $game_party.actors.size < 4
- $game_party.lose_gold($game_actors[@window_mercenaries.id].price)
- $game_party.add_actor(@window_mercenaries.id)
- @window_mercenaries.mercenaries.delete(@window_mercenaries.id)
- @window_mercenaries.refresh
- if @window_mercenaries.index > @window_mercenaries.mercenaries.size-1
- @window_mercenaries.index = @window_mercenaries.mercenaries.size-1
- end
- end
- end
- when 1
- if @window_mercenaries.id != 1
- $game_party.gain_gold($game_actors[@window_mercenaries.id].price / 2)
- $game_party.remove_actor(@window_mercenaries.id)
- @temp << @window_mercenaries.id
- @window_mercenaries.mercenaries.delete(@window_mercenaries.id)
- @window_mercenaries.refresh
- if @window_mercenaries.index > @window_mercenaries.mercenaries.size-1
- @window_mercenaries.index = @window_mercenaries.mercenaries.size-1
- end
- end
- end
- @window_gold.refresh
- end
- end
- def rm_update
- Graphics.update
- Input.update
- end
- end
- end
- class Game_Actor
- def price
- price = @name.split(/,/)[1].nil? ? 0 : @name.split(/,/)[1].to_i#在角色名字後打上",XXX"其中XXX為決定的價格
- return price * self.level
- end
- def name
- return @name.split(/,/)[0]
- end
- end
- class Game_System
- attr_reader :mercenaries
- alias old_initialize initialize
- def initialize
- old_initialize
- @mercenaries = {}
- end
- end
复制代码 |
评分
-
查看全部评分
|