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

Project1

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

[已经解决] [咸鱼有事请教]替补队员(未出战角色)无法获取经验值的问题

[复制链接]

Lv3.寻梦者

梦石
1
星屑
472
在线时间
120 小时
注册时间
2016-3-6
帖子
83
跳转到指定楼层
1
发表于 2016-8-7 18:26:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x

如上,无论我怎么点选这个选项,未出战的替补队员都无法获得经验.


之前我从论坛下了个成员仓库的脚本(PMCC超级仓库),平时替补队员未出战时是存放在成员仓库里.会不会与这个有关?


脚本链接:https://rpg.blue/thread-332492-1-1.html

脚本:
  1. #————————————————————————————————————————
  2. # ●PMSYS By.Clov
  3. #   *口袋怪兽系列系统
  4. #   Ver:1.0 Date:2011.5.29 项目原型
  5. #   Ver:1.1 Date:2013.8.19 生成部分
  6. #   Ver:1.2 Date:2013.9.15 仓库部分
  7. #   Ver:1.2.1 Date:2013.9.18 仓库部分更新
  8. #   Ver:1.2.2 Date:2013.9.28 仓库部分纠错
  9. #   Ver:1.2.3 Date:2013.9.30 仓库位图优化
  10. #   *声明:
  11. #   -1.本系列脚本版权归原作者所有
  12. #   -2.编写的初衷是无偿共享给爱好者
  13. #   -3.如是用于免费作品只需要注明 不需要任何虚拟或实际利益
  14. #   -4.如用于商业 请先询问作者获得版权
  15. #   -5.若发现BUG或改善意见 可以提出或纠正
  16. #   *Email:[email protected]
  17. #————————————————————————————————————————
  18. module PMSYS
  19.   #————————————————————————————————————————
  20.   #●仓库类设置
  21.   #————————————————————————————————————————
  22.   PMCC_ALL = 100                  #仓库的容量(默认)
  23.   PMCC_MAX = 4                   #队伍最多人数(nil为无限)
  24.   PMCC_MIN = 1                   #队伍最少人数(nil为无限)
  25.   PMCC_DEF = nil                 #队伍固定这个数(nil为不设)
  26.   PMCC_NOPM = [99]                #不能存放的角色(默认)
  27.   #————————————————————————————————————————
  28.   #●窗口类设置
  29.   #————————————————————————————————————————
  30.   PMCCWIN_FACE = true            #true使用头像作背景false使用中渐变做背景
  31.   PMCCWIN_C = false              #true使用总成长率false使用总能力值
  32.   PMCCWIN_PBHPMP = 100           #总能力值HP MP的占比
  33.   PMCCWIN_PCNAME = "总能力值"    #成长率或能力值的标题
  34.   PMCCWIN_CR_NAME = Color.new(255,255,255,255) #普通名字描绘色
  35.   PMCCWIN_CR_SNAME = Color.new(255,50,50,255)  #禁止存/取名字描绘色
  36.   PMCCWIN_CR_XD = Color.new(0,160,230,128)     #雄性背景色
  37.   PMCCWIN_CR_CD = Color.new(230,60,100,128)    #雌性背景色
  38.   PMCCWIN_CR_XN = Color.new(255,255,255,128)   #无性别性背景色
  39.   PMCCWIN_CR_BACK = Color.new(180,230,255,88)  #默认背景色
  40.   PMCCWIN_CR_LBACK = Color.new(255,100,255,88) #收藏背景色
  41.   PMCCWIN_CR_CIB = Color.new(255,255,255,100)  #标题项背景颜色
  42.   PMCCWIN_CR_CII = Color.new(255,100,100,160)  #标题项标志颜色
  43.   PMCCWIN_CR_CCP = Color.new(255,100,100,160)  #成员项背景颜色
  44.   PMCCWIN_CR_CCL = Color.new(200,200,100,160)  #成长率/能力值背景色
  45. end
  46. #————————————————————————————————————————
  47. # ●Game_Party By.Clov
  48. #   *存取角色(宠物)
  49. #   *Ver:1.0 Date:2013.9.12
  50. #   使用:$game_party.pmxx
  51. #   -$game_party.pmcc_actor             读取仓库全部角色
  52. #   -$game_party.pmcc_pcts(pi,ci)       队伍/仓库项目ID替换
  53. #   -$game_party.pmcc_idts(pi,ci)       队伍/仓库角色ID替换
  54. #   -$game_party.pmcc_add(id)           直接添加ID号角色入仓库
  55. #   -$game_party.pmcc_ove(id)           直接删除仓库里ID号角色
  56. #   -$game_party.pmcc_no(id=nil)        添加ID号角色禁存/取(不设参数可读)
  57. #   -$game_party.pmcc_ok(id)            删除被禁存/取ID号角色
  58. #   -$game_party.pmcc_like(id=nil)      添加/删除收藏的ID号角色(不设参数可读)
  59. #   -$game_party.pmcc_max(num=nil)      限制队伍最大人数(不设参数可读)
  60. #   -$game_party.pmcc_min(num=nil)      限制队伍最小人数(不设参数可读)
  61. #   -$game_party.pmcc_def(num=nil)      直接指定队伍固定数(不设参数可读)
  62. #   -$game_party.pmcc_all(num=nil,del=true/false)
  63. #    -更改仓库最大格数(不设参数可读)
  64. #    -del:true 整理全部角色到容量内,删除多出容量的角色
  65. #    -del:false 不整理,只限制容量,不删除多出容量的角色
  66. #   *Ver:1.1 Date:2013.9.18
  67. #   -更新批量操作
  68. #   -$game_party.pmcc_allove            清空仓库全部角色
  69. #   -$game_party.pmcc_arrove(arractor)  批量删除仓库角色(参数为数组)
  70. #   -$game_party.pmcc_arradd(arractor)  批量添加仓库角色(参数为数组)
  71. #   -$game_party.arr_add_actor(arractor)批量添加队伍角色(参数为数组)
  72. #   -$game_party.arr_remove_actor(arractor)批量删除队伍角色(参数为数组)
  73. #————————————————————————————————————————
  74. class Game_Party < Game_Unit
  75.   #———————————————————————————————————————
  76.   #初始化仓库
  77.   #———————————————————————————————————————
  78.   alias :pmcc_initialize :initialize
  79.   def initialize
  80.     pmcc_initialize
  81.     @pmcc = Array.new(pmcc_all)
  82.   end
  83.   #———————————————————————————————————————
  84.   #角色入队
  85.   #———————————————————————————————————————
  86.   alias :pmcc_add_actor :add_actor
  87.   def add_actor(actor_id)
  88.     pmcc_add_actor(actor_id)
  89.     @pmcc.delete(actor_id)
  90.   end
  91.   #———————————————————————————————————————
  92.   #角色离队
  93.   #———————————————————————————————————————
  94.   alias :pmcc_remove_actor :remove_actor
  95.   def remove_actor(actor_id)
  96.     pmcc_remove_actor(actor_id)
  97.     @pmcc.delete(actor_id)
  98.   end
  99.   #———————————————————————————————————————
  100.   #存入、拿出角色(项目型)
  101.   #pi:队伍的项目ID ci:仓库的项目ID
  102.   #———————————————————————————————————————
  103.   def pmcc_pcts(pi,ci)
  104.     #取得目前仓库位置角色ID
  105.     cact = @pmcc[ci]
  106.     #放置新角色ID到该仓库位置
  107.     @pmcc[ci] = @actors[pi]
  108.     #该仓库位置有角色的情况下加入到队伍位置
  109.     #没有角色的话直接从队伍删除
  110.     cact ? @actors[pi] = cact : @actors.delete_at(pi)
  111.     #刷新队伍、及地图
  112.     $game_player.refresh
  113.     $game_map.need_refresh = true
  114.   end
  115.   #———————————————————————————————————————
  116.   #存入、拿出角色(指定型)
  117.   #pa:队伍的角色ID ca:仓库的角色ID
  118.   #———————————————————————————————————————
  119.   def pmcc_idts(pa, ca)
  120.     #查看队伍窗口是否存在角色
  121.     pa = @actors.include?(pa) ? pa : nil
  122.     ca = @pmcc.include?(ca) ? ca : nil
  123.     #全部存在的情况下执行替换
  124.     if pa && ca
  125.       pi = @actors.index(pa)
  126.       ci = @pmcc.index(ca)
  127.       pmcc_pcts(pi,ci)
  128.     end
  129.   end
  130.   #———————————————————————————————————————
  131.   #直接存入仓库
  132.   #———————————————————————————————————————
  133.   def pmcc_add(id)
  134.     #仓库是否有空位
  135.     index = @pmcc.index(nil)
  136.     if [email protected]?(id) && index
  137.       #存入仓库
  138.       @pmcc[index] = id
  139.       #在队伍的话离队
  140.       @actors.delete(id)
  141.       #刷新队伍、及地图
  142.       $game_player.refresh
  143.       $game_map.need_refresh = true
  144.     end
  145.   end
  146.   #———————————————————————————————————————
  147.   #直接从仓库删除
  148.   #———————————————————————————————————————
  149.   def pmcc_ove(id)
  150.    index = @pmcc.index(id)
  151.    @pmcc[index] = nil
  152.   end
  153.   #———————————————————————————————————————
  154.   #不能存放的角色(队伍仓库通用)
  155.   #———————————————————————————————————————
  156.   def pmcc_no(id=nil)
  157.     @pmcc_no ||= PMSYS::PMCC_NOPM
  158.     @pmcc_no << id if id && !@pmcc_no.include?(id);@pmcc_no
  159.   end
  160.   #———————————————————————————————————————
  161.   #解除不可存放的角色(队伍仓库通用)
  162.   #———————————————————————————————————————
  163.   def pmcc_ok(id)
  164.     @pmcc_no.delete(id)
  165.   end
  166.   #———————————————————————————————————————
  167.   #仓库的角色
  168.   #———————————————————————————————————————
  169.   def pmcc_actor
  170.     @pmcc.collect {|id| id ? $game_actors[id] : id }
  171.   end
  172.   #———————————————————————————————————————
  173.   #收藏的角色
  174.   #———————————————————————————————————————
  175.   def pmcc_like(id=nil)
  176.     @pmcc_like ||= []
  177.     @pmcc_like.include?(id) ? @pmcc_like.delete(id) : @pmcc_like.push(id) if id
  178.     @pmcc_like
  179.   end
  180.   #———————————————————————————————————————
  181.   #队伍的最大人数
  182.   #———————————————————————————————————————
  183.   def pmcc_max(num=nil)
  184.     @pmcc_max ||= PMSYS::PMCC_MAX
  185.     @pmcc_max = num if num ; @pmcc_max
  186.   end
  187.   #———————————————————————————————————————
  188.   #队伍的最少人数
  189.   #———————————————————————————————————————
  190.   def pmcc_min(num=nil)
  191.     @pmcc_min ||= PMSYS::PMCC_MIN
  192.     @pmcc_min = num if num ; @pmcc_min
  193.   end
  194.   #———————————————————————————————————————
  195.   #队伍的指定人数
  196.   #———————————————————————————————————————
  197.   def pmcc_def(num=nil)
  198.     @pmcc_def ||= PMSYS::PMCC_DEF
  199.     @pmcc_def = num if num ; @pmcc_def
  200.   end
  201.   #———————————————————————————————————————
  202.   #仓库的容量 del:false:限制容量 true:真实容量
  203.   #———————————————————————————————————————
  204.   def pmcc_all(num=nil,del=false)
  205.     @pmcc_all ||= PMSYS::PMCC_ALL
  206.     if num
  207.       #获得当前、新的容量
  208.       now = @pmcc_all
  209.       new = @pmcc_all = num
  210.       c = new - now
  211.       #被扩大仓库情况
  212.       if now < new ; @pmcc += Array.new(c)
  213.       #被缩小仓库情况(del为开启时)角色全部前移容量外的删除
  214.       elsif now > new && del
  215.       @pmcc_all = num
  216.       pmcc = @pmcc.compact
  217.       c = [new - pmcc.size, 0].max
  218.       @pmcc = pmcc[0,new] + Array.new(c) ; end
  219.     end ; @pmcc_all
  220.   end
  221.   #———————————————————————————————————————
  222.   #清空仓库(V1.1)
  223.   #———————————————————————————————————————
  224.   def pmcc_allove
  225.     @pmcc = Array.new(pmcc_all)
  226.   end
  227.   #———————————————————————————————————————
  228.   #批量删除库存(V1.1)
  229.   #———————————————————————————————————————
  230.   def pmcc_arrove(arractor)
  231.     arractor.each {|id| pmcc_ove(id) }
  232.   end
  233.   #———————————————————————————————————————
  234.   #批量添加入库(V1.1)
  235.   #———————————————————————————————————————
  236.   def pmcc_arradd(arractor)
  237.     arractor.each {|id|
  238.     #仓库是否有空位
  239.     index = @pmcc.index(nil)
  240.     if [email protected]?(id) && index
  241.       #存入仓库
  242.       @pmcc[index] = id
  243.       #在队伍的话离队
  244.       @actors.delete(id)
  245.     end }
  246.     #刷新队伍、及地图
  247.     $game_player.refresh
  248.     $game_map.need_refresh = true
  249.   end
  250.   #———————————————————————————————————————
  251.   #批量加入队伍(V1.1)
  252.   #———————————————————————————————————————
  253.   def arr_add_actor(arractor)
  254.     arractor.each {|id| unless @actors.include?(id)
  255.     @actors.push(id) ; @pmcc.delete(id) ; end }
  256.     #刷新队伍、及地图
  257.     $game_player.refresh
  258.     $game_map.need_refresh = true
  259.   end
  260.   #———————————————————————————————————————
  261.   #批量离开队伍(V1.1)
  262.   #———————————————————————————————————————
  263.   def arr_remove_actor(arractor)
  264.     arractor.each {|id| @actors.delete(id) }
  265.     #刷新队伍、及地图
  266.     $game_player.refresh
  267.     $game_map.need_refresh = true
  268.   end
  269. end
  270. #————————————————————————————————————————
  271. # ●Window_PMCC By.Clov
  272. #   *宠物仓库窗口
  273. #   *Ver:1.0 Date:2013.9.9
  274. #   *使用:Window_PMCC.new(x, y, w, h, l, type, viewport)
  275. #   *实例方法:
  276. #   -self.one=true/false         更改本窗口行走图选择/全部动态
  277. #   -self.dy_type=:W/:H/:WH      更改本窗口行走图动态类型
  278. #   -self.actives=true/false     窗口是否可活动(行走图动态开关)
  279. #   -self.sproxoy                各精灵跟踪本窗口原点
  280. #   -self.new_bit_rect           执行排序 可乱序
  281. #   *Ver:1.1 Date:2013.9.18
  282. #   -增加状态窗口定义
  283. #   *Ver:1.2 Date:2013.9.28
  284. #   -修正预留数据的错误
  285. #   *Ver:1.3 Date:2013.9.30
  286. #   -优化内容位图尺寸
  287. #————————————————————————————————————————
  288. class Window_PMCC < Window_Selectable
  289.   #———————————————————————————————————————
  290.   #初始化对象
  291.   #———————————————————————————————————————
  292.   def initialize(x, y, w, h, l, type, viewport)
  293.     #列数及类型
  294.     @l = l ; @type = type
  295.     #使用父类
  296.     super(x, y, w, h)
  297.     #选项位置
  298.     self.index = -1
  299.     #显示端口
  300.     self.viewport = viewport
  301.     #预留空位(窗口)
  302.     self.padding_bottom = dnh
  303.     #生成动态行走图(z提高)
  304.     [url=home.php?mod=space&uid=911532]@dych[/url] = Dynamic_Character.new(x, y, self.z, viewport)
  305.     #记录隐蔽行走图的标准选项
  306.     @dychtfi = 0
  307.     #生成信息精灵
  308.     @info = Sprite.new(viewport)
  309.     #生成位图,宽、高继承预留空位
  310.     @info.bitmap = Bitmap.new(contents_width, dnh)
  311.     #信息坐标(边距同步)
  312.     @info.x = x+standard_padding
  313.     @info.y = page_row_max*(item_height+hk)+standard_padding
  314.     #信息高于本窗口
  315.     @info.z = self.z
  316.     #生成成长率信息精灵
  317.     @info_ccl = Sprite.new(viewport)
  318.     @info_ccl.bitmap = Bitmap.new(contents_width, dnh)
  319.     @info_ccl.x = @info.x ; @info_ccl.y = @info.y ; @info_ccl.z = @info.z
  320.     #生成成员信息精灵
  321.     @info_pc = Sprite.new(viewport)
  322.     @info_pc.bitmap = Bitmap.new(contents_width, dnh)
  323.     @info_pc.x = @info.x ; @info_pc.y = @info.y ; @info_pc.z = @info.z
  324.     #生成背景精灵
  325.     @back = Sprite.new(viewport)
  326.     #生成位图,宽、高继承本窗口绘制内容
  327.     @back.bitmap = Bitmap.new(contents_width, contents_height)
  328.     #背景坐标(边距同步)
  329.     @back.x , @back.y = x+standard_padding, y+standard_padding
  330.     #背景高于本窗口
  331.     @back.z = self.z
  332.     #记录当前窗口选项
  333.     @sindex = 0
  334.     #绘制信息>内容
  335.     info ; refresh
  336.   end
  337.   #———————————————————————————————————————
  338.   #获取数据
  339.   #———————————————————————————————————————
  340.   def data
  341.     case @type ; when :L ; ldata ; when :R ; rdata ; end
  342.   end
  343.   #———————————————————————————————————————
  344.   #预留数据
  345.   #———————————————————————————————————————
  346.   def data2(data2=nil)
  347.     @data2 = data2 ? data2 : @data2 ; @data2
  348.   end
  349.   #———————————————————————————————————————
  350.   #基本数据
  351.   #———————————————————————————————————————
  352.   def ldata ; $game_party.members ; end
  353.   def rdata ; $game_party.pmcc_actor ; end
  354.   #———————————————————————————————————————
  355.   #获得、设置当前角色数据(V1.1)
  356.   #———————————————————————————————————————
  357.   def index_actor ; @index_actor ; end
  358.   def index_actor=(actor) ; @index_actor = actor ; end
  359.   #———————————————————————————————————————
  360.   #动态行走图选择项动态
  361.   #———————————————————————————————————————
  362.   def one=(tf) ; @dych.one=@dy_one=tf ; end
  363.   #———————————————————————————————————————
  364.   #动态行走图显示类型更改
  365.   #———————————————————————————————————————
  366.   def dy_type=(type) ; @dych.type=@dy_type=type ; end
  367.   #———————————————————————————————————————
  368.   #获取项目数
  369.   #———————————————————————————————————————
  370.   def item_max
  371.     case @type
  372.     when :L ; ldata.size + 1
  373.     when :R ; $game_party.pmcc_all ; end
  374.   end
  375.   #———————————————————————————————————————
  376.   #获取列数
  377.   #———————————————————————————————————————
  378.   def col_max ; @l ; end
  379.   #———————————————————————————————————————
  380.   #宽高间隔
  381.   #———————————————————————————————————————
  382.   def wk ; return 2 ; end
  383.   def hk ; return 2 ; end
  384.   #———————————————————————————————————————
  385.   #获取行高
  386.   #———————————————————————————————————————
  387.   def line_height ; return 24 ; end
  388.   #———————————————————————————————————————
  389.   #获取项目宽度、高度
  390.   #———————————————————————————————————————
  391.   def item_width ; return 96 ; end
  392.   def item_height ; return 96 ; end
  393.   #———————————————————————————————————————
  394.   #获取标准边距
  395.   #———————————————————————————————————————
  396.   def standard_padding ; return 12 ; end
  397.   #———————————————————————————————————————
  398.   #下端空白内容高度
  399.   #———————————————————————————————————————
  400.   def dnh ; return 110 ; end
  401.   #———————————————————————————————————————
  402.   #计算窗口内容的高度
  403.   #———————————————————————————————————————
  404.   def contents_height
  405.     [super - super % item_height, all_row_max * (item_height + hk)].max
  406.   end
  407.   #———————————————————————————————————————
  408.   # ● 获取队伍、仓库全部行数
  409.   #———————————————————————————————————————
  410.   def all_row_max
  411.     case @type
  412.     when :L ; all_item_max = ldata.size + rdata.compact.size
  413.     when :R ; all_item_max = rdata.size ; end
  414.     [(all_item_max + col_max - 1) / col_max, 1].max
  415.   end
  416.   #———————————————————————————————————————
  417.   #获取顶行位置
  418.   #———————————————————————————————————————
  419.   def top_row
  420.     oy / (item_height + hk)
  421.   end
  422.   #———————————————————————————————————————
  423.   #设置顶行位置
  424.   #———————————————————————————————————————
  425.   def top_row=(row)
  426.     #窗口原点坐标更新
  427.     row = 0 if row < 0
  428.     row = row_max - 1 if row > row_max - 1
  429.     self.oy = row * (item_height + hk)
  430.     #必要精灵原点更新
  431.     sproxoy
  432.     #预留空位更新
  433.     bachno
  434.   end
  435.   #———————————————————————————————————————
  436.   #更新必要精灵原点(背景、行走图)
  437.   #———————————————————————————————————————
  438.   def sproxoy
  439.     @dych.oy = @back.oy = self.oy
  440.   end
  441.   #———————————————————————————————————————
  442.   #自定义“下端边距”隐蔽超出项目的精灵
  443.   #———————————————————————————————————————
  444.   def bachno
  445.     #预留空位高(下端:矩形更新)
  446.     h = top_row * (item_height + hk)+(self.height-padding-dnh)
  447.     @back.src_rect.height  = h
  448.     #预留空位高(行走图隐蔽)
  449.     dychtfi = page_item_max+top_row*col_max    #计算隐蔽行走图的标准选项
  450.     col_max.times {|i|@dych.visible(@dychtfi+i, true)}
  451.     @dychtfi = dychtfi
  452.     col_max.times {|i|@dych.visible(@dychtfi+i, false)}
  453.   end
  454.   #———————————————————————————————————————
  455.   #获取项目的绘制矩形
  456.   #———————————————————————————————————————
  457.   def item_rect(index)
  458.     rect = Rect.new
  459.     rect.width = item_width
  460.     rect.height = item_height
  461.     rect.x = index % col_max * (item_width + wk)
  462.     rect.y = index / col_max * (item_height + hk)
  463.     rect
  464.   end
  465.   #———————————————————————————————————————
  466.   #更新光标
  467.   #———————————————————————————————————————
  468.   def update_cursor
  469.     super
  470.     #更新当前角色
  471.     update_actor
  472.     #更新动态行走图光标
  473.     @dych.index = self.index if @dy_one && @dych
  474.     #更新成长率信息
  475.     info_ccl if @info_ccl
  476.   end
  477.   #———————————————————————————————————————
  478.   #更新当前角色(V1.1)
  479.   #———————————————————————————————————————
  480.   def update_actor
  481.     #当前项目角色
  482.     new_actor = data[self.index]
  483.     #更新角色,没有的情况清除指令
  484.     @index_actor = new_actor ? new_actor : :clear
  485.   end
  486.   #———————————————————————————————————————
  487.   #绘制内容
  488.   #———————————————————————————————————————
  489.   def refresh
  490.     #清除全体
  491.     contents.clear
  492.     @dych.clear
  493.     @back.bitmap.clear
  494.     #开始绘制
  495.     item_max.times {|index|
  496.     draw_item(index)}
  497.     #更新内容
  498.     data_refresh
  499.   end
  500.   #———————————————————————————————————————
  501.   #更新内容
  502.   #———————————————————————————————————————
  503.   def data_refresh
  504.     #更新当前角色
  505.     update_actor
  506.     #信息描绘
  507.     info_ccl
  508.     info_pc
  509.     #预留空位(背景与行走图)
  510.     bachno
  511.     #必要精灵原点更新
  512.     sproxoy
  513.   end
  514.   #———————————————————————————————————————
  515.   #更新背景
  516.   #———————————————————————————————————————
  517.   def back_refresh
  518.     #清除背景
  519.     @back.bitmap.clear
  520.     #开始绘制
  521.     item_max.times {|index|
  522.     #项目数据
  523.     actor = data[index]
  524.     #项目矩形
  525.     rect = item_rect(index)
  526.     #项目坐标
  527.     x = rect.x + 1 ; y = rect.y + 1
  528.     #描绘背景
  529.     back(x, y, index, actor)}
  530.   end
  531.   #———————————————————————————————————————
  532.   #绘制项目(替换时更新)
  533.   #———————————————————————————————————————
  534.   def draw_item(index)
  535.     #项目数据
  536.     actor = data[index]
  537.     #项目矩形
  538.     rect = item_rect(index)
  539.     #项目坐标
  540.     x = rect.x + 1 ; y = rect.y + 1
  541.     #描绘背景
  542.     back(x, y, index, actor)
  543.     #角色不存在则返回
  544.     return unless actor
  545.     #行走图
  546.     @dych.draw_character(x+60, y+75, actor, index)
  547.     #头像
  548.     draw_face(actor, rect.x + 1, rect.y + 1) if PMSYS::PMCCWIN_FACE
  549.     #描绘基本色
  550.     contents.font.color = PMSYS::PMCCWIN_CR_NAME
  551.     #性别、等级背景
  552.     lh = (line_height) * 3 - 2 #Y坐标增量
  553.     c = Color.new(255,255,255,48)
  554.     contents.fill_rect(x,y+lh,item_width-1,line_height,c)
  555.     #性别
  556.     xb = $game_pmsc[:pmxb][actor.id] if $game_pmsc
  557.     case xb
  558.     when "雄性" ; xb = "♂" ; c=PMSYS::PMCCWIN_CR_XD
  559.     when "雌性" ; xb = "♀" ; c=PMSYS::PMCCWIN_CR_CD
  560.     when nil    ; c=PMSYS::PMCCWIN_CR_XN ; end
  561.     contents.draw_text(x, y+lh, item_width, line_height, xb) if xb
  562.     #等级
  563.     contents.draw_text(x+28, y+lh, item_width, line_height, "Lv:#{actor.level}")
  564.     #名字背景
  565.     lh = (line_height) * 0
  566.     contents.back_w(x,y+lh,item_width,line_height,0.25,c)
  567.     #是否可存取角色
  568.     pmcc_no = $game_party.pmcc_no.include?(actor.id)
  569.     contents.font.color = PMSYS::PMCCWIN_CR_SNAME  if pmcc_no
  570.     #名字
  571.     contents.draw_text(x, y+lh, item_width, line_height, actor.name, 1)
  572.   end
  573.   #———————————————————————————————————————
  574.   #绘制角色肖像图
  575.   #———————————————————————————————————————
  576.   def draw_face(actor, x, y)
  577.     #图像名 没有的话返回
  578.     face_name = actor.face_name
  579.     #没有图像
  580.     return unless face_name
  581.     #索引种类
  582.     face_index = actor.face_index
  583.     #传送位图
  584.     bitmap = Cache.face(face_name)
  585.     zx = face_index % 4 * 96
  586.     zy = face_index / 4 * 96
  587.     cw = ch = 94
  588.     rect = Rect.new(zx, zy, cw, ch)
  589.     contents.blt(x, y, bitmap, rect)
  590.     bitmap.dispose
  591.   end
  592.   #———————————————————————————————————————
  593.   #绘制背景
  594.   #———————————————————————————————————————
  595.   def back(x, y, index, actor)
  596.     #存在角色的情况下
  597.     if actor
  598.       actor_like = $game_party.pmcc_like.include?(actor.id)
  599.       #显示头像的话不绘制背景(空位、收藏除外)
  600.       if PMSYS::PMCCWIN_FACE && !actor_like
  601.         return
  602.       end
  603.       #不显示头像或有收藏的情况下(选择默认、收藏背景)
  604.       if actor_like
  605.         #收藏背景颜色
  606.         c = PMSYS::PMCCWIN_CR_LBACK
  607.       else
  608.         #默认背景颜色
  609.         c = PMSYS::PMCCWIN_CR_BACK
  610.       end
  611.     else
  612.       #默认背景颜色
  613.       c = PMSYS::PMCCWIN_CR_BACK
  614.     end
  615.     #描绘背景
  616.     @back.bitmap.back_h(x,y,item_width-1,item_height-1,0.5,c)
  617.     #描绘编号
  618.     @back.bitmap.draw_text(x, y, item_width, item_height, index+1, 1)
  619.   end
  620.   #———————————————————————————————————————
  621.   #绘制收藏背景(更新用)
  622.   #———————————————————————————————————————
  623.   def back_like(index)
  624.     #项目数据
  625.     actor = data[index]
  626.     #项目矩形
  627.     rect = item_rect(index)
  628.     #项目坐标
  629.     x = rect.x + 1 ; y = rect.y + 1
  630.     #消除背景
  631.     @back.bitmap.clear_rect(rect)
  632.     #描绘背景
  633.     back(x, y, index, actor)
  634.   end
  635.   #———————————————————————————————————————
  636.   #绘制信息标题
  637.   #———————————————————————————————————————
  638.   def info
  639.     #清除旧信息
  640.     @info.bitmap.clear
  641.     #基本坐标、边距
  642.     x = 0 ; y = 5
  643.     sp = standard_padding/2
  644.     #标题项背景颜色
  645.     cib = PMSYS::PMCCWIN_CR_CIB
  646.     #标题项标志颜色
  647.     cii = PMSYS::PMCCWIN_CR_CII
  648.     #成员项背景颜色
  649.     ccp = PMSYS::PMCCWIN_CR_CCP
  650.     #更改字体大小
  651.     @info.bitmap.font.size = 20
  652.     #---------------------------------------------------------------------------
  653.     #显示类型
  654.     case @type
  655.     #显示宽度为队伍窗口
  656.     when :L ; w = contents_width - sp
  657.     #显示宽度为仓库窗口
  658.     when :R ; w = contents_width - item_width - sp
  659.     #---------------------------------------------------------------------------
  660.     #描绘队伍成员标题项背景
  661.     x2 = x+w ; y2 = y
  662.     @info.bitmap.fill_rect(x2+3,y2,item_width,line_height,cib)
  663.     #描绘标志
  664.     @info.bitmap.fill_rect(x2+4,y2+1,5,line_height-2,cii)
  665.     #描绘说明
  666.     @info.bitmap.draw_text(x2+12,y2+1,item_width,line_height,"队伍成员")
  667.     #描绘队伍成员项背景
  668.     @info.bitmap.back_w(x2+3,line_height+y2+2,item_width,line_height-2,0.5,ccp)
  669.     #---------------------------------------------------------------------------
  670.     #描绘仓库成员标题项背景
  671.     x2 = x+w ; y2 = line_height*2
  672.     @info.bitmap.fill_rect(x2+3,y2+7,item_width,line_height,cib)
  673.     #描绘标志
  674.     @info.bitmap.fill_rect(x2+4,y2+8,5,line_height-2,cii)
  675.     #描绘说明
  676.     @info.bitmap.draw_text(x2+12,y2+8,item_width,line_height,"仓库成员")
  677.     #描绘仓库成员项背景
  678.     @info.bitmap.back_w(x2+3,line_height+y2+9,item_width,line_height-2,0.5,ccp)
  679.     #---------------------------------------------------------------------------
  680.     end #仓库右侧信息描绘结束
  681.     #---------------------------------------------------------------------------
  682.     #描绘成长率标题项背景
  683.     @info.bitmap.fill_rect(x,y,w,line_height,cib)
  684.     #描绘标志
  685.     @info.bitmap.fill_rect(x+1,y+1,5,line_height-2,ccp)
  686.     #描绘说明
  687.     @info.bitmap.draw_text(x+10,y+1,w,line_height,PMSYS::PMCCWIN_PCNAME)
  688.     #---------------------------------------------------------------------------
  689.     #设置成长率字体
  690.     #---------------------------------------------------------------------------
  691.     #更改字体
  692.     @info_ccl.bitmap.font.name = "黑体"
  693.     #更改字体大小
  694.     @info_ccl.bitmap.font.size = 76
  695.     #更改字体透明度
  696.     @info_ccl.bitmap.font.color.alpha = 180
  697.     #---------------------------------------------------------------------------
  698.     #设置背景编号字体
  699.     #---------------------------------------------------------------------------
  700.     #更改字体大小
  701.     @back.bitmap.font.size = 72
  702.     #更改字体透明度
  703.     @back.bitmap.font.color.alpha = 12
  704.   end
  705.   #———————————————————————————————————————
  706.   #绘制成员数量信息(更新用)
  707.   #———————————————————————————————————————
  708.   def info_pc
  709.     @info_pc.bitmap.clear
  710.     x = 194; y = line_height
  711.     #队伍成员数量
  712.     pall = ldata.size
  713.     #描绘队伍成员数量
  714.     @info_pc.bitmap.draw_text(x+4,y+6,item_width,line_height,pall,1)
  715.     #仓库成员数量
  716.     call = rdata.compact.size
  717.     #描绘仓库成员数量
  718.     @info_pc.bitmap.draw_text(x+4,y*3+8,item_width,line_height,call,1)
  719.   end
  720.   #———————————————————————————————————————
  721.   #绘制成长率&总能力值信息(更新用)
  722.   #———————————————————————————————————————
  723.   def info_ccl
  724.     @info_ccl.bitmap.clear
  725.     #取得当前选项
  726.     index = self.index
  727.     #项目不再窗口内或当前选项没有角色时返回
  728.     return if index < 0 || !data[index]
  729.     #取得角色
  730.     actor = data[index]
  731.     #取得角色总成长率
  732.     allc = PMSYS::PMCCWIN_C ? $game_pmsc.allc(actor.id) : param_base(actor)
  733.     #绘制坐标
  734.     x = 0 ; y = line_height-1
  735.     #描绘的宽、高
  736.     w, h = 114, 76
  737.     #背景颜色
  738.     ccl = PMSYS::PMCCWIN_CR_CCL
  739.     #描绘背景
  740.     @info_ccl.bitmap.back_h(x,y+6,194,h-6,0.5,ccl)
  741.     #描绘总成长率
  742.     @info_ccl.bitmap.draw_text(x, y, w*2, h, allc)
  743.   end
  744.   #———————————————————————————————————————
  745.   #重定义激活方法
  746.   #———————————————————————————————————————
  747.   def actives=(tf)
  748.     #是否关闭未激活窗口的动态行走图
  749.     @dych.type = tf ? @dy_type : nil
  750.     #记录和使用该窗口位置
  751.     if tf ; self.index = @sindex
  752.     else ; @sindex = [self.index,0].max ; end
  753.     #窗口是否激活
  754.     self.active = tf
  755.   end
  756.   #———————————————————————————————————————
  757.   #获取总能力值(基础)
  758.   #———————————————————————————————————————
  759.   def param_base(actor)
  760.     all_param_base = 0
  761.     8.times {|i| f = i > 1 ? 1 : PMSYS::PMCCWIN_PBHPMP
  762.     all_param_base += actor.param_base(i)/f}
  763.     all_param_base
  764.   end
  765.   #———————————————————————————————————————
  766.   #位图剪切排序法
  767.   #———————————————————————————————————————
  768.   def new_bit_rect
  769.     #获得新的数据
  770.     new_d = data
  771.     #获得旧的数据
  772.     now_d = data2
  773.     #获得当前位图
  774.     bit = contents
  775.     #以旧的数据长度循环
  776.     new_d.each_index {|index|
  777.     #当前循环项对应的新数据
  778.     new_d_i = new_d[index]
  779.     #查找新的数据在旧的数据里的位置(旧项目、继承矩形用)
  780.     new_now_index = now_d.index(new_d_i)
  781.     #新旧位置相同时不重绘,进入下个循环项
  782.     next unless new_now_index && index != new_now_index
  783.     #新位置的矩形
  784.     new_rect = item_rect(index)
  785.     #旧位置的矩形
  786.     now_rect = item_rect(new_now_index)
  787.     #清除新项目上的矩形
  788.     contents.clear_rect(new_rect)
  789.     #绘制旧项目上的矩形
  790.     contents.blt(new_rect.x, new_rect.y ,bit,now_rect)
  791.     #清除旧项目上的矩形
  792.     contents.clear_rect(now_rect)}
  793.   end
  794.   #———————————————————————————————————————
  795.   #消除项目
  796.   #———————————————————————————————————————
  797.   def clear_item(index)
  798.     #要消除的项目矩形
  799.     rect = item_rect(index)
  800.     #本窗口消除
  801.     contents.clear_rect(rect)
  802.     #背景消除
  803.     @back.bitmap.clear_rect(rect)
  804.     #队伍窗口的情况查看是否要排序
  805.     if @type == :L
  806.       #项目数量没有变化时不执行排序
  807.       return if data.size == data2.size
  808.       #释放行走图精灵(队伍)
  809.       @dych.dispose_index(index)
  810.       #显示隐蔽的行走图
  811.       @dych.visible(@dychtfi-1, true)
  812.       #行走图排序开始
  813.       @dych.new_spr_xy
  814.       #位图排序开始
  815.       new_bit_rect
  816.       #背景排序开始
  817.       back_refresh
  818.     elsif @type == :R
  819.       #预留数据不存在的情况下
  820.       return unless data2[index]
  821.       #释放行走图精灵(仓库)
  822.       @dych.dispose_index(index,true)
  823.     end
  824.   end
  825.   #———————————————————————————————————————
  826.   #重绘项目
  827.   #———————————————————————————————————————
  828.   def redraw_item(index)
  829.     #消除项目
  830.     clear_item(index)
  831.     #绘制项目
  832.     draw_item(index)
  833.   end
  834.   #———————————————————————————————————————
  835.   #排序绘制
  836.   #———————————————————————————————————————
  837.   def new_refresh
  838.     #重绘项目
  839.     redraw_item(self.index)
  840.     #更新内容
  841.     data_refresh
  842.   end
  843.   #———————————————————————————————————————
  844.   #按下确定键时的处理
  845.   #———————————————————————————————————————
  846.   def a_c
  847.     #refresh    #常规绘制(*预留)
  848.     new_refresh #排序绘制
  849.   end
  850.   #———————————————————————————————————————
  851.   #按下CTRL键时的处理
  852.   #———————————————————————————————————————
  853.   def a_ctrl
  854.     #获取当前选项
  855.     index = self.index
  856.     #对应角色数据
  857.     actor = data[index]
  858.     #角色不存在则反回
  859.     return unless actor
  860.     #收藏、取消收藏角色
  861.     $game_party.pmcc_like(actor.id)
  862.     #更新收藏背景
  863.     back_like(index)
  864.   end
  865.   #———————————————————————————————————————
  866.   #全部刷新
  867.   #———————————————————————————————————————
  868.   def update
  869.     super
  870.     @dych.update
  871.     #各种精灵(*预留)
  872.     #@info.update @info_ccl.update @info_pc.update @back.update
  873.   end
  874.   #———————————————————————————————————————
  875.   #全部释放
  876.   #———————————————————————————————————————
  877.   def dispose
  878.     super
  879.     @dych.dispose
  880.     @info.bitmap.dispose ; @info.dispose
  881.     @info_ccl.bitmap.dispose ; @info_ccl.dispose
  882.     @info_pc.bitmap.dispose ; @info_pc.dispose
  883.     @back.bitmap.dispose ; @back.dispose
  884.   end
  885. end
  886. #————————————————————————————————————————
  887. # ●Window_PMCC_Status By.Clov
  888. #   *宠物仓库的状态窗口
  889. #   *Ver:1.0 Date:2013.9.18
  890. #————————————————————————————————————————
  891. class Window_PMCC_Status < Window_Base
  892.   #———————————————————————————————————————
  893.   # ● 初始化对象
  894.   #———————————————————————————————————————
  895.   def initialize(x, y, viewport)
  896.     super(x, y, Graphics.width, 110)
  897.     #显示端口
  898.     self.viewport = viewport
  899.   end
  900.   #———————————————————————————————————————
  901.   #刷新角色
  902.   #———————————————————————————————————————
  903.   def actor=(actor)
  904.     #相同角色的话返回不描绘
  905.     return if @actor == actor
  906.     #切换角色的话进行描绘
  907.     @actor = actor ; refresh
  908.   end
  909.   #———————————————————————————————————————
  910.   #刷新
  911.   #———————————————————————————————————————
  912.   def refresh
  913.     #清除窗口
  914.     contents.clear
  915.     #清除指令的话 清除完毕返回
  916.     return if @actor == :clear
  917.     #进行状态窗口描绘
  918.     contents.font.size = 21
  919.     draw_parameters(1,1)
  920.     draw_equipments(250,0)
  921.     contents.font.size = Font.default_size
  922.   end
  923.   #———————————————————————————————————————
  924.   #绘制能力值
  925.   #———————————————————————————————————————
  926.   def draw_parameters(x, y)
  927.     #绘制能力值背景
  928.     contents.back_w(0,0,245,86,0.2,Color.new(255,255,255,96))
  929.     8.times {|i|
  930.     #能力值的显示位置
  931.     x2 = i/4*130 ; y2 = i%4
  932.     #描绘能力值
  933.     change_color(system_color)
  934.     draw_text(x+x2, y + 21 * y2, 86, line_height, Vocab::param(i))
  935.     change_color(normal_color)
  936.     draw_text(x+x2+80, y + 21 * y2, 64, line_height, @actor.param(i))}
  937.   end
  938.   #———————————————————————————————————————
  939.   #绘制装备
  940.   #———————————————————————————————————————
  941.   def draw_equipments(x, y)
  942.     @actor.equips.each_with_index do |item, i|
  943.       #武器的显示位置
  944.       if i == 0 ; x2 = 0 ; y2 = 0
  945.       #装备的显示位置
  946.       else ; x2 = (i-1)/2*130 ; y2 = (i-1)%2+1 ; end
  947.       #描绘武器装备
  948.       draw_item_name(item, x+x2, y + 30 * y2)
  949.     end
  950.   end
  951. end
  952. #————————————————————————————————————————
  953. # ●Scene_PMCC By.Clov
  954. #  *仓库界面
  955. #  *Ver:1.0 Date:2013.9.14
  956. #  *使用:SceneManager.call(Scene_PMCC)
  957. #  -ENTER:    确认/返回
  958. #  -ESC:      返回
  959. #  -L/R:      换页
  960. #  -CTRL:     添加收藏/取消收藏
  961. #  *Ver:1.1 Date:2013.9.18
  962. #  -增加状态窗口显示
  963. #  -ALT:     显示/隐蔽状态窗口
  964. #————————————————————————————————————————
  965. class Scene_PMCC
  966.   #———————————————————————————————————————
  967.   #数据内容
  968.   #———————————————————————————————————————
  969.   def data
  970.     #生成端口
  971.     @viewport = Viewport.new
  972.     @viewport.z = 200
  973.     #生成队伍窗口
  974.     @pmck_window_l = Window_PMCC.new(0,0,224,416,2,:L,@viewport)
  975.     @pmck_window_l.one = false
  976.     @pmck_window_l.dy_type = :W
  977.     @pmck_window_l.actives = !false
  978.     #生成仓库窗口
  979.     @pmck_window_r = Window_PMCC.new(224,0,320,416,3,:R,@viewport)
  980.     @pmck_window_r.one = true
  981.     @pmck_window_r.dy_type = :WH
  982.     @pmck_window_r.actives = false
  983.     #生成状态窗口(V1.1)
  984.     @pmck_window_sta = Window_PMCC_Status.new(0, 306,@viewport)
  985.     @pmck_window_sta.z = @pmck_window_r.z + 1
  986.     @pmck_window_sta.visible = false
  987.     #生成结束窗口
  988.     @pmck_window_end = Window_Base.new(22,160,500,96)
  989.     @pmck_window_end.viewport = @viewport
  990.     @pmck_window_end.z = @pmck_window_r.z + 1
  991.     @pmck_window_end.visible = false
  992.     #生成背景
  993.     create_background
  994.     #仓库确认计数(循环替换状态计数,操作流畅度提高用)
  995.     @ok2 = 0
  996.   end
  997.   #———————————————————————————————————————
  998.   #主循环
  999.   #———————————————————————————————————————
  1000.   def main
  1001.     #准备数据
  1002.     data
  1003.     #执行过渡
  1004.     Graphics.transition
  1005.     #进行更新
  1006.     update until SceneManager.scene != self
  1007.     #准备过渡
  1008.     Graphics.freeze
  1009.     #释放全部
  1010.     dispose
  1011.   end
  1012.   #———————————————————————————————————————
  1013.   #主更新
  1014.   #———————————————————————————————————————
  1015.   def update
  1016.     #画面、输入更新
  1017.     Graphics.update
  1018.     Input.update
  1019.     #按键更新
  1020.     updata_c
  1021.     updata_b
  1022.     updata_ctrl
  1023.     updata_alt
  1024.     #窗口更新
  1025.     @pmck_window_l.update
  1026.     @pmck_window_r.update
  1027.     @pmck_window_sta.update
  1028.     @pmck_window_end.update
  1029.     #状态内容更新
  1030.     updata_sta
  1031.   end
  1032.   #———————————————————————————————————————
  1033.   #状态内容更新(V1.1)
  1034.   #———————————————————————————————————————
  1035.   def updata_sta
  1036.     if @pmck_window_sta.visible
  1037.       if @pmck_window_l.active ; if @pmck_window_l.index_actor
  1038.       @pmck_window_sta.actor = @pmck_window_l.index_actor
  1039.       @pmck_window_l.index_actor = nil ; end ; end
  1040.       if @pmck_window_r.active ; if @pmck_window_r.index_actor
  1041.       @pmck_window_sta.actor = @pmck_window_r.index_actor
  1042.       @pmck_window_r.index_actor = nil ; end ; end
  1043.     end
  1044.   end
  1045.   #———————————————————————————————————————
  1046.   #结束窗口的描绘
  1047.   #———————————————————————————————————————
  1048.   def end_txt(txt)
  1049.     @pmck_window_end.contents.clear
  1050.     @pmck_window_end.contents.draw_text(0,4,500,24,txt,1)
  1051.     @pmck_window_end.contents.draw_text(0,36,500,24,"[ESC] [ENTER]",1)
  1052.   end
  1053.   #———————————————————————————————————————
  1054.   #是否可以退出仓库
  1055.   #———————————————————————————————————————
  1056.   def end_ok?
  1057.     pmcc_max = $game_party.pmcc_max
  1058.     pmcc_min = $game_party.pmcc_min
  1059.     pmcc_def = $game_party.pmcc_def
  1060.     pas = $game_party.members.size
  1061.     maxb = pmcc_max <=> pas # 1 ok 0
  1062.     minb = pmcc_min <=> pas #-1 ok 0
  1063.     defb = pmcc_def <=> pas # 0 ok 0
  1064.     tf = true
  1065.     tf = false if maxb == -1  or minb == 1
  1066.     tf = false if (maxb && minb) && (maxb == -1 && minb == 1)
  1067.     tf = false if defb && defb != 0
  1068.     tf = true if defb && defb == 0
  1069.     unless tf
  1070.       Sound.play_buzzer
  1071.       if defb ; txt = "队伍人数必须等于#{pmcc_def}名"
  1072.       else ;
  1073.       pmcc_min = pmcc_min ? "最少#{pmcc_min}名" : ""
  1074.       pmcc_max = pmcc_max ? "最多#{pmcc_max}名" : ""
  1075.       txt = "队伍人数必须#{pmcc_min}#{pmcc_max}" ; end
  1076.       end_txt(txt+"(目前#{pas}名)")
  1077.     end ; tf
  1078.   end
  1079.   #———————————————————————————————————————
  1080.   #是否可以替换角色
  1081.   #———————————————————————————————————————
  1082.   def pcts_ok?(t,i)
  1083.     #获得禁止角色
  1084.     pmcc_no = $game_party.pmcc_no
  1085.     case t
  1086.     when :L ; id = $game_party.members[i].id if $game_party.members[i]
  1087.     when :R ; id = $game_party.pmcc_actor[i].id if $game_party.pmcc_actor[i] ; end
  1088.     tf = !pmcc_no.include?(id)
  1089.     #禁止的情况下演奏声效并返回禁止/不禁止状态
  1090.     Sound.play_buzzer unless tf ; tf
  1091.   end
  1092.   #———————————————————————————————————————
  1093.   #生成背景 VA
  1094.   #———————————————————————————————————————
  1095.   def create_background
  1096.     @background_sprite = Sprite.new
  1097.     @background_sprite.bitmap = SceneManager.background_bitmap
  1098.     @background_sprite.color.set(16, 16, 16, 128)
  1099.   end
  1100.   #———————————————————————————————————————
  1101.   #替换队伍、仓库成员
  1102.   #———————————————————————————————————————
  1103.   def pcts
  1104.     #演奏声效
  1105.     Sound.play_reflection
  1106.     #队伍、仓库当前选择项
  1107.     pi = @pmck_window_l.index
  1108.     ci = @pmck_window_r.index
  1109.     #预留数据
  1110.     @pmck_window_l.data2($game_party.members)
  1111.     @pmck_window_r.data2($game_party.pmcc_actor)
  1112.     #更换成员执行
  1113.     $game_party.pmcc_pcts(pi,ci)
  1114.     #更新绘制
  1115.     @pmck_window_l.a_c
  1116.     @pmck_window_r.a_c
  1117.   end
  1118.   #———————————————————————————————————————
  1119.   #进入队伍窗口
  1120.   #———————————————————————————————————————
  1121.   def pwin
  1122.     @pmck_window_r.actives = false
  1123.     @pmck_window_l.actives = true
  1124.     @pmck_window_end.visible = false
  1125.   end
  1126.   #———————————————————————————————————————
  1127.   #进入仓库窗口
  1128.   #———————————————————————————————————————
  1129.   def cwin
  1130.     @pmck_window_r.actives = true
  1131.     @pmck_window_l.actives = false
  1132.     @pmck_window_end.visible = false
  1133.   end
  1134.   #———————————————————————————————————————
  1135.   #进入结束窗口
  1136.   #———————————————————————————————————————
  1137.   def ewin
  1138.     @pmck_window_r.actives = false
  1139.     @pmck_window_l.actives = false
  1140.     @pmck_window_end.visible = true
  1141.   end
  1142.   #———————————————————————————————————————
  1143.   #按下确定键
  1144.   #———————————————————————————————————————
  1145.   def updata_c
  1146.     #按下确定键的情况下
  1147.     if Input.trigger?(:C)
  1148.       #结束窗口的情况下
  1149.      if @pmck_window_end.visible
  1150.        #返回队伍窗口
  1151.        pwin ; return
  1152.      end
  1153.       #队伍窗口的情况下
  1154.      if @pmck_window_l.active && pcts_ok?(:L, @pmck_window_l.index)
  1155.        case @ok2
  1156.        #替换成员、仓库确认计数1(进入循环替换状态)
  1157.        when 2 ; pcts ; @ok2 = 1 ; cwin
  1158.        #进入仓库窗口
  1159.        when 0 ; cwin ; end
  1160.      #仓库窗口的情况下
  1161.      elsif @pmck_window_r.active && pcts_ok?(:R, @pmck_window_r.index)
  1162.        #仓库确认计数+1
  1163.        @ok2 += 1
  1164.        case @ok2
  1165.        #替换成员(转入循环替换状态前)
  1166.        when 1 ; pcts
  1167.        #进入队伍窗口
  1168.        when 2 ; pwin ; end
  1169.      end
  1170.    end
  1171.   end
  1172.   #———————————————————————————————————————
  1173.   #按下返回键
  1174.   #———————————————————————————————————————
  1175.   def updata_b
  1176.     #按下返回键的情况下
  1177.    if Input.trigger?(:B)
  1178.      #结束窗口的情况下
  1179.      if @pmck_window_end.visible
  1180.        #返回队伍窗口
  1181.        pwin ; return
  1182.      end
  1183.      #队伍窗口的情况下
  1184.      if @pmck_window_l.active
  1185.        #不可以退出仓库的情况下
  1186.        unless end_ok?
  1187.          #进入结束窗口
  1188.          ewin ; return
  1189.        end
  1190.        case @ok2
  1191.        #循环替换状态的话返回仓库窗口
  1192.        when 2 ; @ok2 = 1; cwin ; return ; end
  1193.        #返回上个界面
  1194.        SceneManager.return
  1195.      #仓库窗口的情况下
  1196.      elsif @pmck_window_r.active
  1197.        #仓库确认计数重置
  1198.        @ok2 = 0
  1199.        #返回队伍窗口
  1200.        pwin
  1201.      end
  1202.     end
  1203.   end
  1204.   #———————————————————————————————————————
  1205.   #按下CTRL键
  1206.   #———————————————————————————————————————
  1207.   def updata_ctrl
  1208.     #按下返回键的情况下
  1209.    if Input.trigger?(:CTRL)
  1210.      #队伍窗口的情况下
  1211.      if @pmck_window_l.active
  1212.        @pmck_window_l.a_ctrl
  1213.      #仓库窗口的情况下
  1214.      elsif @pmck_window_r.active
  1215.        @pmck_window_r.a_ctrl
  1216.      end
  1217.     end
  1218.   end
  1219.   #———————————————————————————————————————
  1220.   #按下ALT键(V1.1)
  1221.   #———————————————————————————————————————
  1222.   def updata_alt
  1223.     #按下返回键的情况下
  1224.    if Input.trigger?(:ALT)
  1225.      @pmck_window_sta.visible = !@pmck_window_sta.visible
  1226.     end
  1227.   end
  1228.   #———————————————————————————————————————
  1229.   #全部释放
  1230.   #———————————————————————————————————————
  1231.   def dispose
  1232.     #端口释放
  1233.     @viewport.dispose
  1234.     #窗口释放
  1235.     @pmck_window_l.dispose
  1236.     @pmck_window_r.dispose
  1237.     @pmck_window_sta.dispose
  1238.     @pmck_window_end.dispose
  1239.     #背景释放
  1240.     @background_sprite.dispose
  1241.   end
  1242. end
  1243. #————————————————————————————————————————
  1244. # ●Dynamic_Character By.Clov
  1245. #   *多类型动态行走图
  1246. #   *Ver:1.0 Date:2013.9.7
  1247. #   *使用:Dynamic_Character.new
  1248. #   *必须:update dispose
  1249. #   -draw_character(x, y, actor, index)主描绘
  1250. #   -@type                  动态类型 :W行走动态 :H转向动态 :WH行走转并行动态
  1251. #   -@one                   是否独立选择角色动态
  1252. #   -@speed                 每个动作的更新周期
  1253. #   -@wa                    行走动作表
  1254. #   -@ha                    转向动作表
  1255. #   *实例方法:
  1256. #   -self.one=true/false    更改选择/全部动态
  1257. #   -self.type=:W/:H/:WH    更改动态类型
  1258. #   -self.index=index       选择动态必须传递值
  1259. #   -self.new_spr_xy        执行排序 可乱序
  1260. #   -self.clear             建立新位图必要
  1261. #————————————————————————————————————————
  1262. class Dynamic_Character
  1263.   #———————————————————————————————————————
  1264.   #初始化数据
  1265.   #———————————————————————————————————————
  1266.   def initialize(x, y, z, viewport)
  1267.     #基本坐标
  1268.     @x = x ; @y = y ; @z = z
  1269.     #显示端口
  1270.     @viewport = viewport
  1271.     #生成精灵
  1272.     @sprs = []
  1273.     #实际精灵
  1274.     @sprs_true = []
  1275.     #记录矩形坐标
  1276.     @xa = [] ; @ya = []
  1277.     #记录精灵坐标
  1278.     @sx = [] ; @sy = []
  1279.     #是否使用动态行走图
  1280.     @type = :W
  1281.     #是否选中角色才动态
  1282.     @one = true
  1283.     #当前选项
  1284.     @index = 0
  1285.     #初始显示坐标
  1286.     #cx:0>右脚 1>并脚 2>左脚
  1287.     #cy:0>正面 1>左面 2>右面 3>背面
  1288.     @cx = 1 ; @cy = 0
  1289.     #行走图坐标数据(动作数据,循环以下动作显示)
  1290.     @wa = [0,1,1,2] ; @ha = [0,1,3,2]
  1291.     #动作更新速度(帧)
  1292.     @speed = 25
  1293.     #速度计时器
  1294.     @dcs = 0
  1295.     #数据计时器
  1296.     @dcx = 0
  1297.     @dcy = 0
  1298.   end
  1299.   #———————————————————————————————————————
  1300.   #绘制行走图
  1301.   #———————————————————————————————————————
  1302.   def draw_character(x, y, actor, index)
  1303.     #实际坐标
  1304.     x = x + @x ; y = y + @y
  1305.     #图像名 没有的话返回
  1306.     character_name = actor.character_name
  1307.     #没有图像
  1308.     return unless character_name
  1309.     #生成独立精灵
  1310.     @sprs[index] ||= Sprite.new(@viewport)
  1311.     #取得位图
  1312.     bitmap = bit("Graphics/Characters/"+character_name)
  1313.     @sprs[index].bitmap = bitmap
  1314.     #标准行走图宽高
  1315.     cw = bitmap.width / 12
  1316.     ch = bitmap.height / 8
  1317.     #索引角色种类
  1318.     n = actor.character_index
  1319.     #角色种类x,y @wi:显示第几横 @hi:显示第几列
  1320.     zx = (n%4*3)*cw
  1321.     zy = (n/4*4)*ch
  1322.     #更新精灵坐标
  1323.     @sprs[index].x = @sx[index] = x - cw / 2
  1324.     @sprs[index].y = @sy[index] = y - ch
  1325.     @sprs[index].z = @z
  1326.     #记录矩形坐标
  1327.     @xa[index] = zx ; @ya[index] = zy
  1328.     #显示坐标
  1329.     zx = zx+@cx*cw ; zy = zy+@cy*ch
  1330.     #位图矩形
  1331.     src_rect = Rect.new(zx, zy, cw, ch)
  1332.     @sprs[index].src_rect = src_rect
  1333.     #实际存在的精灵
  1334.     @sprs_true = @sprs.compact
  1335.   end
  1336.   #———————————————————————————————————————
  1337.   #位图资源
  1338.   #———————————————————————————————————————
  1339.   def bit(f)
  1340.     @bit ||= {}
  1341.     unless @bit[f] && !@bit[f].disposed?
  1342.     @bit[f] = Bitmap.new(f) ; end ; @bit[f]
  1343.   end
  1344.   #———————————————————————————————————————
  1345.   #选中角色动态开关设置
  1346.   #———————————————————————————————————————
  1347.   def one=(tf)
  1348.     @one = tf
  1349.   end
  1350.   #———————————————————————————————————————
  1351.   #选项更新(选中角色动态必须传递选项位置)
  1352.   #———————————————————————————————————————
  1353.   def index=(index)
  1354.     #指定的动态角色项
  1355.     @index = index
  1356.     #姿势矫正
  1357.     mrc
  1358.   end
  1359.   #———————————————————————————————————————
  1360.   #姿势矫正
  1361.   #———————————————————————————————————————
  1362.   def mrc(cx=1, cy=0)
  1363.     #更改显示坐标
  1364.     @cx = cx ; @cy = cy
  1365.     #更新位图
  1366.     update_src
  1367.   end
  1368.   #———————————————————————————————————————
  1369.   #更改显示类型
  1370.   #———————————————————————————————————————
  1371.   def type=(t, cx=1, cy=0)
  1372.     #更改显示类型
  1373.     @type = t
  1374.     #静态类型的话强制更新到设定坐标
  1375.     mrc(cx, cy) unless @type
  1376.   end
  1377.   #———————————————————————————————————————
  1378.   #精灵是否可见
  1379.   #———————————————————————————————————————
  1380.   def visible(index, tf)
  1381.     #获取精灵
  1382.     spr = @sprs[index]
  1383.     #没有精灵
  1384.     return unless spr
  1385.     spr.visible = tf
  1386.   end
  1387.   #———————————————————————————————————————
  1388.   #精灵继位排序法
  1389.   #———————————————————————————————————————
  1390.   def new_spr_xy
  1391.     @sprs_true.each_index {|i|
  1392.     #获取精灵
  1393.     spr = @sprs_true[i]
  1394.     #开始排位
  1395.     spr.x = @sx[i]
  1396.     spr.y = @sy[i]}
  1397.   end
  1398.   #———————————————————————————————————————
  1399.   #精灵原点坐标(列数情况(t>开头列 h>项目高 oy>ox)
  1400.   #———————————————————————————————————————
  1401.   def oy=(y)
  1402.     @sprs_true.each {|spr| spr.oy = y}
  1403.   end
  1404.   def ox=(x)
  1405.     @sprs_true.each {|spr| spr.ox = x}
  1406.   end
  1407.   def oy2(top, h)
  1408.     @sprs_true.each {|spr| spr.oy = top*h}
  1409.   end
  1410.   def ox2(top, w)
  1411.     @sprs_true.each {|spr| spr.ox = top*w}
  1412.   end
  1413.   #———————————————————————————————————————
  1414.   #主更新
  1415.   #———————————————————————————————————————
  1416.   def update
  1417.     #数据更新
  1418.     update_data
  1419.     #精灵更新(*预留)
  1420.     #@sprs_true.each {|spr| spr.update}
  1421.   end
  1422.   #———————————————————————————————————————
  1423.   #更新位图矩形(全体)
  1424.   #———————————————————————————————————————
  1425.   def update_src
  1426.     @sprs.each_index {|i|
  1427.     #获取精灵
  1428.     spr = @sprs[i]
  1429.     #没有精灵
  1430.     next unless spr
  1431.     #获取矩形
  1432.     src = spr.src_rect
  1433.     #更新矩形x,y
  1434.     spr.src_rect.x = @xa[i]+src.width*@cx
  1435.     spr.src_rect.y = @ya[i]+src.height*@cy }
  1436.   end
  1437.   #———————————————————————————————————————
  1438.   #更新位图矩形(指定)
  1439.   #———————————————————————————————————————
  1440.   def update_src2(i)
  1441.     #获取精灵
  1442.     spr = @sprs[i]
  1443.     #没有精灵
  1444.     return unless spr
  1445.     #获取矩形
  1446.     src = spr.src_rect
  1447.     #更新矩形x,y
  1448.     spr.src_rect.x = @xa[i]+src.width*@cx
  1449.     spr.src_rect.y = @ya[i]+src.height*@cy
  1450.   end
  1451.   #———————————————————————————————————————
  1452.   #计时器及显示坐标更新
  1453.   #———————————————————————————————————————
  1454.   def update_data
  1455.     if @type
  1456.       @dcs += 1
  1457.       if @dcs == @speed
  1458.         case @type
  1459.         when :W
  1460.           @dcx += 1
  1461.           @dcx = @dcx < @wa.size ? @dcx : 0
  1462.           @cx = @wa[@dcx]
  1463.         when :H
  1464.           @dcy += 1
  1465.           @dcy = @dcy < @ha.size ? @dcy : 0
  1466.           @cy = @ha[@dcy]
  1467.         when :WH
  1468.           @dcx += 1 ; @dcy += 1
  1469.           @dcx = @dcx < @wa.size ? @dcx : 0
  1470.           @dcy = @dcy < @ha.size ? @dcy : 0
  1471.           @cx = @wa[@dcx] ; @cy = @ha[@dcy]
  1472.         end
  1473.         @one ? update_src2(@index) : update_src
  1474.         @dcs = 0
  1475.       end
  1476.     end
  1477.   end
  1478.   #———————————————————————————————————————
  1479.   #指定释放
  1480.   #———————————————————————————————————————
  1481.   def dispose_index(index,index_nil=false)
  1482.     #获取精灵
  1483.     spr = @sprs[index]
  1484.     #没有精灵
  1485.     return unless spr
  1486.     #释放精灵
  1487.     spr.dispose
  1488.     #是否占位(占位处理)
  1489.     if index_nil ; @sprs[index] = nil
  1490.     @sprs_true = @sprs.compact ; return ; end
  1491.     #删除精灵数据
  1492.     @sprs.delete_at(index)
  1493.     @xa.delete_at(index)
  1494.     @ya.delete_at(index)
  1495.     #实际存在的精灵
  1496.     @sprs_true = @sprs.compact
  1497.   end
  1498.   #———————————————————————————————————————
  1499.   #清除位图
  1500.   #———————————————————————————————————————
  1501.   def clear
  1502.     @sprs_true.each {|spr| spr.bitmap.dispose}
  1503.   end
  1504.   #———————————————————————————————————————
  1505.   #全部释放
  1506.   #———————————————————————————————————————
  1507.   def dispose
  1508.     @sprs_true.each {|spr| spr.bitmap.dispose ; spr.dispose}
  1509.   end
  1510. end
  1511. #————————————————————————————————————————
  1512. # ●位图的追加绘制方法 By.Clov
  1513. #  *渐透明描绘以及RGSS1用gradient_fill_rect
  1514. #————————————————————————————————————————
  1515. class Bitmap
  1516.   #———————————————————————————————————————
  1517.   # ● 渐透明描绘(宽)
  1518.   #———————————————————————————————————————
  1519.   def back_w(x,y,w,h,bl=0.3,c=Color.new(0,200,230,128))
  1520.     r = c.red ; g = c.green ; b = c.blue ; o = c.alpha
  1521.     l = (w*bl).round
  1522.     all = [l,w-l*2,l]
  1523.     all.each_index {|i| ; w2 = all[i]
  1524.     case i
  1525.     when 0 ; x2 = 0 ; o1 = 0 ; o2 = o
  1526.     when 1 ; x2 = all[0] ; o1 = o2 = o
  1527.     when 2 ; x2 = all[0] + all[1] ; o1 = o ; o2 = 0 ; end
  1528.     c1 = Color.new(r,g,b,o1) ; c2 = Color.new(r,g,b,o2)
  1529.     gradient_fill_rect(x+x2, y, w2, h, c1, c2) if w2 > 0 }
  1530.   end
  1531.   #———————————————————————————————————————
  1532.   # ● 渐透明描绘(高)
  1533.   #———————————————————————————————————————
  1534.   def back_h(x,y,w,h,bl=0.3,c=Color.new(0,200,230,128))
  1535.     r = c.red ; g = c.green ; b = c.blue ; o = c.alpha
  1536.     l = (h*bl).round
  1537.     all = [l,h-l*2,l]
  1538.     all.each_index {|i| ; h2 = all[i]
  1539.     case i
  1540.     when 0 ; y2 = 0 ; o1 = 0 ; o2 = o
  1541.     when 1 ; y2 = all[0] ; o1 = o2 = o
  1542.     when 2 ; y2 = all[0] + all[1] ; o1 = o ; o2 = 0 ; end
  1543.     c1 = Color.new(r,g,b,o1) ; c2 = Color.new(r,g,b,o2)
  1544.     gradient_fill_rect(x, y+y2, w, h2, c1, c2, true) if h2 > 0 }
  1545.   end
  1546.   #———————————————————————————————————————
  1547.   # ●GFR>RGSS3>gradient_fill_rect
  1548.   #———————————————————————————————————————
  1549.   def gfr(x, y, width, height, color1, color2, vertical = false)
  1550.     r1 = color1.red;g1 = color1.green;b1 = color1.blue;o1 = color1.alpha
  1551.     r2 = color2.red;g2 = color2.green;b2 = color2.blue;o2 = color2.alpha
  1552.     case vertical
  1553.     when false
  1554.       w = (width-1).to_f;plus_r = (r2-r1)/w;plus_g = (g2-g1)/w
  1555.       plus_b = (b2-b1)/w;plus_o = (o2-o1)/w;width.times {|k|
  1556.       fill_rect(x+k, y, 1, height, Color.new(r1,g1,b1,o1))
  1557.       r1+=plus_r;g1+=plus_g;b1+=plus_b;o1+=plus_o}
  1558.     when true
  1559.       h = (height-1).to_f;plus_r = (r2-r1)/h;plus_g = (g2-g1)/h
  1560.       plus_b = (b2-b1)/h;plus_o = (o2-o1)/h;height.times {|i|
  1561.       fill_rect(x, y+i, width, 1, Color.new(r1,g1,b1,o1))
  1562.       r1+=plus_r;g1+=plus_g;b1+=plus_b;o1+=plus_o}
  1563.     end
  1564.   end
  1565. end
复制代码

因为我只要仓库,不需要其他功能,所以我只用了上面这个脚本而已.

跪求大触们帮忙分析下是什么情况= =
R
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

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

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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