设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1321|回复: 0
打印 上一主题 下一主题

[已经过期] 傭兵系統的調整

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
461 小时
注册时间
2008-11-19
帖子
607
跳转到指定楼层
1
发表于 2012-4-11 03:17:10 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 eve592370698 于 2012-4-16 14:39 编辑

好不容易找到的"傭兵系統腳本"
不過我想要將雇用和解雇功能分開改為只有雇用功能和只有解雇功能的兩個獨立腳本
我有事著改出只有雇用功能的腳本...(有BUG)
但解雇的腳本一直出問題所以來向大大們求教了...
感謝!


抱歉我貼代碼框都發不出來...所以直接貼上了
  1. #=================================================
  2. #
  3. #在角色名字後打上",XXX"其中XXX為決定的價格
  4. #
  5. #呼叫範例:事件腳本中輸入
  6. #b = [3,4,5,6,7,] #數字為角色ID
  7. #$scene =\
  8. #Mercenaries::\
  9. #Scene_Mercenaries.new(b)

  10. module Mercenaries
  11.   class Window_Help < ::Window_Base
  12.     def initialize
  13.       super(0, 0, 196, 256)
  14.       self.contents = Bitmap.new(width - 32, height - 32)
  15.       self.contents.font.size = 18
  16.       @actor = nil
  17.       self.z += 10
  18.     end
  19.     def draw_actor(actor)
  20.       if @actor != actor
  21.         self.contents.clear
  22.         bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
  23.         bx = (self.width / 2) - bitmap.width / 2
  24.         by = (self.height / 2) - bitmap.height / 2
  25.         self.contents.blt(bx, by, bitmap, bitmap.rect, 196)
  26.         self.contents.draw_text(4, 4 + 0, 196, 18, "价格:" + actor.price.to_s)
  27.         self.contents.draw_text(4, 4 + 20, 196, 18, "姓名:" + actor.name)
  28.         self.contents.draw_text(4, 4 + 40, 196, 18, "职业:" + actor.class_name)
  29.         self.contents.draw_text(4, 4 + 60, 196, 18, "武器:#{$data_weapons[actor.weapon_id].name}")
  30.         self.contents.draw_text(4, 4 + 80, 196, 18, "铠甲:#{$data_armors[actor.armor3_id].name}")
  31.         self.contents.draw_text(4, 4 + 100, 196, 18, "攻击力:#{actor.atk}")
  32.         self.contents.draw_text(4, 4 + 120, 196, 18, "防御力:#{actor.pdef}")
  33.         self.contents.draw_text(4, 4 + 140, 196, 18, "魔御力:#{actor.mdef}")
  34.         self.contents.draw_text(4, 4 + 160, 196, 18, "力量:#{actor.str}")
  35.         self.contents.draw_text(4, 4 + 180, 196, 18, "灵巧:#{actor.dex}")
  36.         self.contents.draw_text(4, 4 + 200, 196, 18, "速度:#{actor.agi}")
  37.         self.contents.draw_text(4, 4 + 220, 196, 18, "魔力:#{actor.int}")
  38.         @actor = actor
  39.       end
  40.     end
  41.   end
  42.   class Window_ShopCommand < Window_Selectable
  43.     #--------------------------------------------------------------------------
  44.     # ● 初始化对像
  45.     #--------------------------------------------------------------------------
  46.     def initialize
  47.       super(80, 90 - 64, 480, 64)
  48.       self.contents = Bitmap.new(width - 32, height - 32)
  49.       @item_max = 3
  50.       @column_max = 3
  51.       @commands = ["雇佣", "解除", "取消"]
  52.       refresh
  53.       self.index = 0
  54.     end
  55.     #--------------------------------------------------------------------------
  56.     # ● 刷新
  57.     #--------------------------------------------------------------------------
  58.     def refresh
  59.       self.contents.clear
  60.       for i in 0...@item_max
  61.         draw_item(i)
  62.       end
  63.     end
  64.     #--------------------------------------------------------------------------
  65.     # ● 描绘项目
  66.     #     index : 项目编号
  67.     #--------------------------------------------------------------------------
  68.     def draw_item(index)
  69.       x = 4 + index * 160
  70.       self.contents.draw_text(x, 0, 128, 32, @commands[index])
  71.     end
  72.   end
  73.   class Window_Mercenaries < ::Window_Selectable
  74.     attr_reader   :column_max
  75.     attr_reader   :item_max
  76.     attr_reader   :mercenaries
  77.     def initialize(mercenaries)
  78.       super(80, 90, 480, 320)
  79.       @mercenaries = mercenaries
  80.       @column_max = 7
  81.       refresh
  82.       self.index = 0
  83.     end
  84.     def set_mercenaries(mercenaries)
  85.       @mercenaries = mercenaries
  86.       refresh
  87.     end
  88.     def id
  89.       return @mercenaries[self.index]
  90.     end
  91.     def refresh
  92.       if self.contents != nil
  93.         self.contents.dispose
  94.         self.contents = nil
  95.       end
  96.       @item_max = @mercenaries.size
  97.       if @item_max > 0
  98.         self.contents = Bitmap.new(width - 32, row_max * 80)
  99.         for i in 0...@item_max
  100.           draw_actor(i)
  101.         end
  102.       end
  103.     end
  104.     def draw_actor(index)
  105.       x = 4 + (index % @column_max * 64)
  106.       y = 4 + (index / @column_max * 80)
  107.       actor = $game_actors[@mercenaries[index]]
  108.       bitmap = RPG::Cache.character(actor.character_name,actor.character_hue)
  109.       rect = bitmap.rect
  110.       rect.width /= 4
  111.       rect.height /= 4
  112.       self.contents.blt(x, y, bitmap, rect)
  113.       self.contents.font.size = 12
  114.       self.contents.draw_text(x, y + 64 - 8, 64, 16, actor.name)
  115.       self.contents.font.size = 9
  116.       self.contents.draw_text(x + 4, y + 64 - 16, 64, 9, "Lv."+sprintf("%02d", actor.level))
  117.     end
  118.     #--------------------------------------------------------------------------
  119.     # ● 更新光标举行
  120.     #--------------------------------------------------------------------------
  121.     def update_cursor_rect
  122.       # 光标位置不满 0 的情况下
  123.       if @index < 0
  124.         self.cursor_rect.empty
  125.         return
  126.       end
  127.       # 获取当前的行
  128.       row = @index / @column_max
  129.       # 当前行被显示开头行前面的情况下
  130.       if row < self.top_row
  131.         # 从当前行向开头行滚动
  132.         self.top_row = row
  133.       end
  134.       # 当前行被显示末尾行之后的情况下
  135.       if row > self.top_row + (self.page_row_max - 1)
  136.         # 从当前行向末尾滚动
  137.         self.top_row = row - (self.page_row_max - 1)
  138.       end
  139.       # 计算光标的宽
  140.       cursor_width = self.width / @column_max - 32
  141.       # 计算光标坐标
  142.       x = @index % @column_max * 64
  143.       y = @index / @column_max * 80 - self.oy
  144.       # 更新国标矩形
  145.       self.cursor_rect.set(x, y, 64, 80)
  146.     end
  147.   end
  148.   class Scene_Mercenaries
  149.     def initialize(mercenaries)
  150.       @mercenaries = mercenaries
  151.       for actor in $game_party.actors
  152.         if @mercenaries.include?(actor.id)
  153.           @mercenaries.delete(actor.id)
  154.         end
  155.       end
  156.       @windows = []
  157.       @temp = @mercenaries.dup
  158.       @type = -1
  159.     end
  160.     def main_start
  161.       make_window
  162.       @spriteset = Spriteset_Map.new
  163.     end
  164.     def main_loop
  165.       while $scene == self
  166.         rm_update
  167.         input_update
  168.         update_window
  169.       end
  170.     end
  171.     def main_end
  172.       dispose_window
  173.       @spriteset.dispose
  174.     end
  175.     def main
  176.       main_start
  177.       Graphics.transition
  178.       main_loop
  179.       Graphics.freeze
  180.       main_end
  181.     end
  182.     def make_window
  183.       @window_shopcommand = Window_ShopCommand.new
  184.       @window_help = Window_Help.new
  185.       @window_mercenaries = Window_Mercenaries.new(@mercenaries)
  186.       @window_mercenaries.active = false
  187.       @window_mercenaries.index = -1
  188.       wx = (@window_mercenaries.index % @window_mercenaries.column_max * 64)
  189.       wy = (@window_mercenaries.index / @window_mercenaries.column_max * 80)
  190.       @window_help.x = wx + @window_mercenaries.x + 64
  191.       @window_help.y = wy + @window_mercenaries.y + 80
  192.       @window_gold = Window_Gold.new
  193.       @window_gold.x = 640 - @window_gold.width - 32
  194.       @window_gold.y = 480 - @window_gold.height - 32
  195.       @windows << @window_gold << @window_shopcommand << @window_mercenaries << @window_help
  196.       @window_help.visible = false
  197.     end
  198.     def update_window
  199.       @windows.each{ |window|window.update }
  200.       help_update
  201.     end
  202.     def dispose_window
  203.       @windows.each{ |window|window.dispose }
  204.     end
  205.     def help_update
  206.       if @window_mercenaries.active
  207.         @window_help.visible = true
  208.         wx = (@window_mercenaries.index % @window_mercenaries.column_max * 64)
  209.         wy = (@window_mercenaries.index / @window_mercenaries.column_max * 80)
  210.         @window_help.x = wx + @window_mercenaries.x + 64
  211.         @window_help.y = wy + @window_mercenaries.y + 80
  212.         if @window_help.x + @window_help.width > 640
  213.           @window_help.x = 640 - @window_help.width
  214.         end
  215.         if @window_help.y + @window_help.height > 480
  216.           @window_help.y = 480 - @window_help.height
  217.         end
  218.         @window_help.draw_actor($game_actors[@window_mercenaries.id])
  219.       else
  220.         @window_help.visible = false
  221.       end
  222.     end
  223.     def input_update
  224.       if Input.trigger?(Input::B)
  225.         @type = -1
  226.         @window_shopcommand.active = true
  227.         @window_mercenaries.active = false
  228.         @window_mercenaries.index = -1
  229.         return
  230.       end
  231.       if Input.trigger?(Input::C)
  232.         if @window_shopcommand.active
  233.           case @window_shopcommand.index
  234.           when 0
  235.             @window_mercenaries.set_mercenaries(@temp)
  236.             @type = 0
  237.             @window_shopcommand.active = false
  238.             @window_mercenaries.active = true
  239.             @window_mercenaries.index = 0
  240.             return
  241.           when 1
  242.             actors = []
  243.             for actor in $game_party.actors
  244.               actors << actor.id
  245.             end
  246.             @window_mercenaries.set_mercenaries(actors)
  247.             @type = 1
  248.             @window_shopcommand.active = false
  249.             @window_mercenaries.active = true
  250.             @window_mercenaries.index = 0
  251.             return
  252.           when 2
  253.             $scene = Scene_Map.new
  254.             return
  255.           end
  256.         end
  257.         case @type
  258.         when 0
  259.           if $game_party.gold >= $game_actors[@window_mercenaries.id].price
  260.             if $game_party.actors.size < 4
  261.               $game_party.lose_gold($game_actors[@window_mercenaries.id].price)
  262.               $game_party.add_actor(@window_mercenaries.id)
  263.               @window_mercenaries.mercenaries.delete(@window_mercenaries.id)
  264.               @window_mercenaries.refresh
  265.               if @window_mercenaries.index > @window_mercenaries.mercenaries.size-1
  266.                 @window_mercenaries.index = @window_mercenaries.mercenaries.size-1
  267.               end
  268.             end
  269.           end
  270.         when 1
  271.           if @window_mercenaries.id != 1
  272.             $game_party.gain_gold($game_actors[@window_mercenaries.id].price / 2)
  273.             $game_party.remove_actor(@window_mercenaries.id)
  274.             @temp << @window_mercenaries.id
  275.             @window_mercenaries.mercenaries.delete(@window_mercenaries.id)
  276.             @window_mercenaries.refresh
  277.             if @window_mercenaries.index > @window_mercenaries.mercenaries.size-1
  278.               @window_mercenaries.index = @window_mercenaries.mercenaries.size-1
  279.             end
  280.           end
  281.         end
  282.         @window_gold.refresh
  283.       end
  284.     end
  285.     def rm_update
  286.       Graphics.update
  287.       Input.update
  288.     end
  289.   end
  290. end
  291. class Game_Actor
  292.   def price
  293.     price = @name.split(/,/)[1].nil? ? 0 : @name.split(/,/)[1].to_i#在角色名字後打上",XXX"其中XXX為決定的價格
  294.     return price * self.level
  295.   end
  296.   def name
  297.     return @name.split(/,/)[0]
  298.   end
  299. end
  300. class Game_System
  301.   attr_reader   :mercenaries
  302.   alias old_initialize initialize
  303.   def initialize
  304.     old_initialize
  305.     @mercenaries = {}
  306.   end
  307. end
复制代码
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-26 11:37

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表