查看: 66|回复: 0

[转载发布] 【二次创作】人物仓库-改——追加图像、属性

[复制链接]
  • TA的每日心情
    开心
    5 天前
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月六日(秋) | 显示全部楼层 |阅读模式
    想必不少人在使用人物仓库的时候都有一个疑惑……特别是玩家,部分游戏的人名难以让人记住,在人物仓库又不显示造型、属性什么的,这要怎么分啊?
    所以这个玩野就出现了&…
    1. #==============================================================================# ■ chaochao的人物仓库ver1.02正式版# 修改了Game_Party# 功能:# 用来存放角色的仓库……# 召唤画面用$scene = Chaochao_Scene_Party.new# 其它使用说明在代码里已经备注。#------------------------------------------------------------------------------# 作者:chaochao#由逗比的菊花侠以及蛋疼的绝望二次编写#说明:半身像的图片名称为此角色的行走图名称加上_b,列如,阿尔西斯_b #另外,半身像是放在Graphics/picture 这个文件夹里的# http://zhuchao.go1.icpcn.com#==============================================================================$半身像坐标x = 500#暂时先这样了,根据你的图片大小自由调整吧$半身像坐标y = 260$行走图坐标x = 40$行走图坐标y = 112class Window_Base   def 描绘半身像(actor, x, y)    bitmap = RPG::Cache.picture(actor.character_name+"_b")    cw = bitmap.width     ch = bitmap.height     src_rect = Rect.new(0, 0, cw, ch)    self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)  end  endclass Chaochao_Window_PartyLeft < Window_Selectable  def initialize    super(0, 0, 320, 224)    self.contents = Bitmap.new(width - 32, height - 32)    self.index = 0    #@actor = actor    refresh  end  def actor    return @actors[self.index]  end  def refresh    if self.contents != nil      self.contents.dispose      self.contents = nil    end    @actors = []    for i in 0...$game_party.actors.size      @actors.push($game_party.actors[i])    end        @item_max = 4    if @item_max > 0      self.contents = Bitmap.new(width - 32, (row_max+1) * 32)      for i in 0...@item_max        draw_item(i)      end    end  end  def draw_item(index)    if @actors[index] != nil      actor = @actors[index]     # p index      text = @actors[index].name      lv = @actors[index].level.to_s + " "      if $game_party.chaochao.include?(actor.id) or $game_party.actors.size  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 * (cursor_width + 32)    y = @index / @column_max * 32 - self.oy + 32    self.cursor_rect.set(x, y, cursor_width, 32)  end  def item_max    return @item_max  end  def actor?(index)    return @actors[index] == nil ? false : true  end  def set_index(x)    @index = x  endend#------------------------------------------------------------------------------class Chaochao_Window_PartyRight < Window_Selectable  def initialize    super(320, 0, 320, 224)    self.contents = Bitmap.new(width - 32, height - 32)    self.index = -1    refresh  end  def actor    return @actors[self.index]  end  def refresh    if self.contents != nil      self.contents.dispose      self.contents = nil    end    @actors = []    for i in 0...$game_party.actors2.size      @actors.push($game_party.actors2[i])    end        @item_max = $game_party.actors2.size    if @item_max > 0      self.contents = Bitmap.new(width - 32, row_max * 32)      for i in 0...@item_max        draw_item(i)      end    elsif @item_max == 0          end  end  def draw_item(index)    actor = @actors[index]    text = @actors[index].name    lv = @actors[index].level.to_s + " "    if $game_party.chaochao2.include?(actor.id) or $game_party.actors.size >= 4        self.contents.font.color = Color.new(255, 0, 0) #不能被移动的颜色      else        self.contents.font.color = Color.new(0, 255, 0) #可以被移动的颜色      end    self.contents.draw_text(4, index * 32, 288, 32, text)    self.contents.font.color = normal_color    self.contents.font.size = 16    self.contents.draw_text(4, index * 32 + 4, 288, 32,  "Level:   ", 2)    colorx = [255.0000 - 255.0000/60 * @actors[index].level,0].max    colory = [255.0000 / 60 * @actors[index].level,255].min    self.contents.font.color = Color.new(colorx, colory, 0)    self.contents.draw_text(4, index * 32 + 4, 288, 32,  lv, 2)    self.contents.font.color = normal_color    self.contents.font.size = 22  end  def update_cursor_rect    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 * (cursor_width + 32)    y = @index / @column_max * 32 - self.oy    self.cursor_rect.set(x, y, cursor_width, 32)  end  def item_max    return @item_max  end  def actor?(index)    return @actors[index] == nil ? false : true  end  def set_index(x)    @index = x  endend#------------------------------------------------------------------------------class Chaochao_Window_PartyData < Window_Base    def initialize    super(0, 224, 640, 256)    self.contents = Bitmap.new(width - 32, height - 32)    @actor = nil  end    def set_actor(actor)    self.contents.clear    draw_actor_name(actor, 4, 0)    #更新的地方    描绘半身像(actor, $半身像坐标x, $半身像坐标y)    draw_actor_graphic(actor, $行走图坐标x, $行走图坐标y)    draw_actor_state(actor, 140, 0)    draw_actor_hp(actor, 284, 0)    draw_actor_sp(actor, 460, 0)    @actor = actor    draw_actor_class(@actor, 20, 32)    b = 20    draw_actor_parameter(@actor, 70, 60, 0)    draw_actor_parameter(@actor, 70, 60+b, 1)    draw_actor_parameter(@actor, 70, 60+b+b, 2)    draw_actor_parameter(@actor, 70, 60+b+b+b, 3)    draw_actor_parameter(@actor, 70, 60+b+b+b+b, 4)    draw_actor_parameter(@actor, 70, 60+b+b+b+b+b, 5)    draw_actor_parameter(@actor, 70, 60+b+b+b+b+b+b, 6)    self.contents.font.color = system_color    self.contents.draw_text(280, 48, 80, 32, "EXP")    self.contents.draw_text(280, 80, 80, 32, "NEXT")    self.contents.font.color = normal_color    self.contents.draw_text(280+40, 48, 84, 32, @actor.exp_s, 2)    self.contents.draw_text(280+40, 80, 84, 32, @actor.next_rest_exp_s, 2)    self.visible = true  end  def clear    self.contents.clear  endend#------------------------------------------------------------------------------class Game_Party  attr_reader   :actors2  attr_reader   :chaochao#不能从队伍向备用角色移动的角色ID  attr_reader   :chaochao2#不能从备用角色向队伍移动的角色ID  def initialize    @actors = []    @gold = 0    @steps = 0    @items = {}    @weapons = {}    @armors = {}    @actors2 = []    @chaochao = []    @chaochao2 = []  end  def add_actor(actor_id,type=1)#type为1是向队伍中添加,为2则相反。    case type    when 1      if $game_actors[actor_id] != nil        actor = $game_actors[actor_id]        #如果队伍没有满和队伍中没有此角色        if @actors.size < 4 and not @actors.include?(actor) and not @actors2.include?(actor)          @actors.push(actor)          $game_player.refresh        end      end    when 2      if $game_actors[actor_id] != nil        actor = $game_actors[actor_id]        #如果角色不在队伍中和不在备用角色队伍中的情况下        #向备用角色中添加角色        if not @actors.include?(actor) and not @actors2.include?(actor)          @actors2.push(actor)          $game_player.refresh        end      end    end  end    def huanren(index,type=1)#type为1是从备用角色向队伍中移动,为2则相反。    actor = $game_actors[index]    case type    when 1      if @actors.size < 4 and @actors2.include?(actor) and not @chaochao2.include?(index) and not @actors.include?(actor)        @actors.push(actor)        @actors2.delete(actor)        $game_system.se_play($data_system.decision_se)        $game_player.refresh      end    when 2      if @actors.include?(actor) and not @chaochao.include?(index) and not @actors2.include?(actor)        @actors2.push(actor)        @actors.delete(actor)        $game_system.se_play($data_system.decision_se)        $game_player.refresh      end    end  end    #type1,1是操作队伍中的角色能否向备用队伍移动,2则相反。  #type2,1是添加不能移动的,2是删除不能移动的。  def yidong(actor_id,type1,type2=1)    case type2    when 1      case type1      when 1        @chaochao.push(actor_id)      when 2        @chaochao2.push(actor_id)      end    when 2      case type1      when 1        @chaochao.delete(actor_id)      when 2        @chaochao2.delete(actor_id)      end    end  end    #type,1从队伍中离开,2从备用角色中离开,3从队伍和备用角色中离开。  def remove_actor(actor_id,type=1)    actor = $game_actors[actor_id]    case type    when 1      @actors.delete(actor)      $game_player.refresh    when 2      @actors2.delete(actor)      $game_player.refresh    when 3      @actors.delete(actor)      @actors2.delete(actor)      $game_player.refresh    end  end def XXX(param)   for i in [email protected]           if(param == i and param != 0)                   @actors2[i].hp = @actors2[i].maxhp       @actors2[i].sp = @actors2[i].maxsp       @actors2[i].states_clear                   break           end     if(param == 0)                    @actors2[i].hp = @actors2[i].maxhp       @actors2[i].sp = @actors2[i].maxsp       @actors2[i].states_clear           end  end  end  def refresh    new_actors = []    new_actors2 = []    for i in [email protected]      if $data_actors[@actors[i].id] != nil        new_actors.push($game_actors[@actors[i].id])      end    end    @actors = new_actors    for i in [email protected]      if $data_actors[@actors2[i].id] != nil        new_actors2.push($game_actors[@actors2[i].id])      end    end    @actors2 = new_actors2  endend#------------------------------------------------------------------------------class Chaochao_Scene_Party  def main    @left_temp_command = 0    @right_temp_command = 0    @temp = 0    @left_window = Chaochao_Window_PartyLeft.new    @left_window.active = true    @right_window = Chaochao_Window_PartyRight.new    @right_window.active = false    @data_window = Chaochao_Window_PartyData.new    update_data    Graphics.transition    loop do      Graphics.update      Input.update      update      if $scene != self        break      end    end    Graphics.freeze    @left_window.dispose    @right_window.dispose    @data_window.dispose  end    def update    @left_window.update    @right_window.update    @data_window.update    update_command    update_data  end    def update_command    if Input.trigger?(Input::B)      $game_system.se_play($data_system.cancel_se)      #画面切换      $scene = Scene_Map.new      return    end    if @left_window.active      update_left      return    end    if @right_window.active      update_right      return    end  end    def update_left    if Input.trigger?(Input::RIGHT)      if @right_window.item_max > 0        @left_temp_command = @left_window.index        @left_window.set_index(-1)        $game_system.se_play($data_system.cursor_se)        @left_window.active = false        @right_window.active = true        @left_window.refresh        @right_window.refresh        @right_window.set_index(@right_temp_command)        return      else        $game_system.se_play($data_system.buzzer_se)        return      end    end    if Input.trigger?(Input::C)      if @left_window.active and @left_window.actor?(@left_window.index) and $game_party.actors.size > 1 and not $game_party.chaochao.include?($game_party.actors[@left_window.index].id)        $game_party.huanren($game_party.actors[@left_window.index].id,2)#type为1是从备用角色向队伍中移动,为2则相反。        @left_window.refresh        @right_window.refresh      else        $game_system.se_play($data_system.buzzer_se)      end    end    return  end    def update_right    if Input.trigger?(Input::LEFT)      if @left_window.item_max > 0        @right_temp_command = @right_window.index        @right_window.set_index(-1)        $game_system.se_play($data_system.cursor_se)        @left_window.active = true        @right_window.active = false        @left_window.refresh        @right_window.refresh        @left_window.set_index(@left_temp_command)        return      else        $game_system.se_play($data_system.buzzer_se)        return      end    end    if Input.trigger?(Input::C)      if $game_party.actors.size >= 4        $game_system.se_play($data_system.buzzer_se)        return      end      if @right_window.active and @right_window.actor?(@right_window.index) and not $game_party.chaochao2.include?($game_party.actors2[@right_window.index].id)        $game_party.huanren($game_party.actors2[@right_window.index].id,1)#type为1是从备用角色向队伍中移动,为2则相反。        if $game_party.actors2.size == 0          @right_temp_command = @right_window.index          @right_window.set_index(-1)          $game_system.se_play($data_system.cursor_se)          @left_window.active = true          @right_window.active = false          @left_window.refresh          @right_window.refresh          @left_window.set_index(@left_temp_command)        end        if @right_window.index > 0          @right_window.set_index(@right_window.index-1)        end        @left_window.refresh        @right_window.refresh      else        $game_system.se_play($data_system.buzzer_se)      end    end    return  end    def update_data    if @left_window.active      if $game_party.actors[@left_window.index] != nil        @data_window.set_actor($game_party.actors[@left_window.index])      else        @data_window.clear      end      return    end    if @right_window.active      if $game_party.actors2[@right_window.index] != nil        @data_window.set_actor($game_party.actors2[@right_window.index])      else        @data_window.clear      end      return    end  endend   复制代码
    复制代码
                 本帖来自P1论坛作者菊花侠小赵,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=384923  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-15 04:19 , Processed in 0.047138 second(s), 41 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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