Project1
标题: 傭兵系統的調整 [打印本页]
作者: sai90306 时间: 2012-4-11 03:17
标题: 傭兵系統的調整
本帖最后由 eve592370698 于 2012-4-16 14:39 编辑
好不容易找到的"傭兵系統腳本"
不過我想要將雇用和解雇功能分開改為只有雇用功能和只有解雇功能的兩個獨立腳本
我有事著改出只有雇用功能的腳本...(有BUG)
但解雇的腳本一直出問題所以來向大大們求教了...
感謝!
抱歉我貼代碼框都發不出來...所以直接貼上了- #=================================================
- #
- #在角色名字後打上",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
- @actor = 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 = []
- @temp = @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
复制代码