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

Project1

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

[已经解决] 怪物图鉴完成率刷新的问题

[复制链接]

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
跳转到指定楼层
1
发表于 2012-4-8 13:59:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 幻耶 于 2012-4-8 14:00 编辑

怪物图鉴脚本,里面的comp是图鉴的完成率,我加了一句 $comp = comp (脚本191行),希望在地图上可以用判断变量 $comp 来判断完成率,但是如果图鉴的怪物有了增加,$comp 这个变量不会刷新,必须用 $scene = Scene_MonsterBook.new 进入一次图鉴再退出,$comp 才会刷新。请教如何才能不用进入图鉴界面也可以刷新$comp 变量
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. #——————————————————————————————————————
  5. #魔物图鉴+介绍
  6. #
  7. #战斗终了时自动添加敌人进入图鉴(class Scene_Battle start_phase5 追加。目前与各种战斗系统没有发现冲突)
  8. #不想加入图鉴的怪物设置其“不加入图鉴”属性有效度为A即可
  9. #图鉴完成度的表示功能追加
  10. #SHOW_COMPLETE_TYPE 的数值可以设定
  11. #当为1,显示现有个数/总数,当为2,显示完成百分比,当为3,全显示。
  12. #使用方法:$scene = Scene_MonsterBook.new
  13. #数据库中属性里面那些种族特效的位置,建议把默认的“对 不死”之类改成“不死”,不然显示会很奇怪
  14. #由于雷达图的设计问题,只支持8项属性
  15. #默认种族特效处理属性中编号9到编号16,如果你做了修改请自行改动380行左右的for i in 9..16这一句代码
  16. #显示各种信息位于630行左右,想不显示的话只要删除相应语句
  17. CHARA_INFO=[]#怪物的介绍,对应怪物id,空格为换行,同时也会自动换行,没有写介绍的怪物会自动显示“无详细信息”
  18. CHARA_INFO[1] = "徘徊在荒凉地带的亡灵"
  19. CHARA_INFO[2] = "经变异而巨大化了的爬行动物"
  20. CHARA_INFO[3] = "生活在潮湿的沼泽地区的变异生物,性情凶暴,经常会袭击各种路过的生物"
  21. #没有信息测试,4号怪物
  22. #=============
  23. #雷达图相关处理部分
  24. #=============
  25. class Bitmap
  26. def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color)
  27. distance = (start_x - end_x).abs + (start_y - end_y).abs
  28. if end_color == start_color
  29. for i in 1..distance
  30. x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
  31. y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
  32. if width == 1
  33. self.set_pixel(x, y, start_color)
  34. else
  35. self.fill_rect(x, y, width, width, start_color)
  36. end
  37. end
  38. else
  39. for i in 1..distance
  40. x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
  41. y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
  42. r = start_color.red * (distance-i)/distance + end_color.red * i/distance
  43. g = start_color.green * (distance-i)/distance + end_color.green * i/distance
  44. b = start_color.blue * (distance-i)/distance + end_color.blue * i/distance
  45. a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance
  46. if width == 1
  47. self.set_pixel(x, y, Color.new(r, g, b, a))
  48. else
  49. self.fill_rect(x, y, width, width, Color.new(r, g, b, a))
  50. end
  51. end
  52. end
  53. end
  54. end
  55. #=============
  56. # Graphic_Def_Elem
  57. #=============
  58. class Window_Base
  59. FONT_SIZE = 18
  60. WORD_ELEMENT_GUARD = "属性有效度"
  61. NUMBER_OF_ELEMENTS = 8
  62. ELEMENT_ORDER = [1,3,8,5,2,4,7,6]
  63. GRAPH_SCALINE_COLOR = Color.new(255, 255, 255, 128)
  64. GRAPH_SCALINE_COLOR_SHADOW = Color.new( 0, 0, 0, 192)
  65. GRAPH_LINE_COLOR = Color.new(255, 255, 64, 255)
  66. GRAPH_LINE_COLOR_MINUS = Color.new( 64, 255, 255, 255)
  67. GRAPH_LINE_COLOR_PLUS = Color.new(255, 64, 64, 255)
  68. end

  69. #——————————————————————————————————————
  70. module Enemy_Book_Config
  71. DROP_ITEM_NEED_ANALYZE = true #显示物品
  72. EVA_NAME = "回避修正"              #回避修正的名称(因为数据库中没有定义)
  73. SHOW_COMPLETE_TYPE = 3         #图鉴完成率表示方法
  74. end
  75. class Data_MonsterBook
  76. #--------------------------------------------------------------------------
  77. # ● 图鉴用ID設定
  78. #--------------------------------------------------------------------------
  79. def enemy_book_id_set
  80.    data = [0]
  81.    data[1] = 2
  82.    data[2] = 1
  83.    data[3] = 15
  84.    data[4] = 25
  85.    data[5] = 18
  86.    data[6] = 30
  87.    return data
  88. end
  89. end
  90. class Game_Temp
  91. attr_accessor :enemy_book_data
  92. alias temp_enemy_book_data_initialize initialize
  93. def initialize
  94.    temp_enemy_book_data_initialize
  95.    @enemy_book_data = Data_MonsterBook.new
  96. end
  97. end

  98. class Game_Party
  99. #==============================================
  100. #--------------------------------------------------------------------------
  101.   # ● 公開インスタンス変数
  102.   #--------------------------------------------------------------------------
  103.   attr_reader   :actors                   # アクター
  104.   attr_reader   :gold                     # ゴールド
  105.   attr_reader   :steps                    # 歩数
  106.   
  107.   #--------------------------------------------------------------------------
  108.   # ● オブジェクト初期化
  109.   #--------------------------------------------------------------------------
  110.   def initialize
  111.     # アクターの配列を作成
  112.     @actors = []
  113.     # ゴールドと歩数を初期化
  114.     @gold = 0
  115.     @steps = 0
  116.     # アイテム、武器、防具の所持数ハッシュを作成
  117.     @items = {}
  118.     @weapons = {}
  119.     @armors = {}
  120.   end
  121. #==============================================
  122. attr_accessor :enemy_info               # 出会った敵情報(図鑑用)

  123. #--------------------------------------------------------------------------
  124. # ● オブジェクト初期化
  125. #--------------------------------------------------------------------------
  126. alias book_info_initialize initialize
  127. def initialize
  128.    book_info_initialize
  129.    @enemy_info = {}
  130. end

  131. #--------------------------------------------------------------------------
  132. # ● エネミー情報の追加(図鑑用)
  133. #     type : 通常遭遇かアナライズか 0:通常 1:アナライズ -1:情報削除
  134. #     0:無遭遇 1:遭遇済 2:アナライズ済
  135. #--------------------------------------------------------------------------
  136. def add_enemy_info(enemy_id, type = 0)
  137.    case type
  138.    when 0
  139.      if @enemy_info[enemy_id] == 2
  140.        return false
  141.      end
  142.      @enemy_info[enemy_id] = 1
  143.      
  144.   #这里修改了添加打死一定数量的怪物就打开开关   
  145.   nowConut = enemy_book_now  
  146.   $game_switches[49] = (nowConut >= 5)
  147.   $game_switches[50] = (nowConut >= 6)
  148.      
  149.      
  150.    when 1
  151.      @enemy_info[enemy_id] = 2
  152.    when -1
  153.      @enemy_info[enemy_id] = 0
  154.    end
  155. end
  156. #--------------------------------------------------------------------------
  157. # ● 魔物図鑑の最大登録数を取得
  158. #--------------------------------------------------------------------------
  159. def enemy_book_max
  160.    return $game_temp.enemy_book_data.id_data.size - 1
  161. end
  162. #--------------------------------------------------------------------------
  163. # ● 魔物図鑑の現在登録数を取得
  164. #--------------------------------------------------------------------------
  165. def enemy_book_now
  166.    now_enemy_info = @enemy_info.keys
  167.    # 登録無視の属性IDを取得
  168.    no_add = $game_temp.enemy_book_data.no_add_element
  169.    new_enemy_info = []
  170.    for i in now_enemy_info
  171.      enemy = $data_enemies[i]
  172.      next if enemy.name == ""
  173.      if enemy.element_ranks[no_add] == 1
  174.        next
  175.      end
  176.      new_enemy_info.push(enemy.id)
  177.    end
  178.    return new_enemy_info.size
  179. end
  180. #--------------------------------------------------------------------------
  181. # ● 魔物図鑑の完成率を取得
  182. #--------------------------------------------------------------------------
  183. def enemy_book_complete_percentage
  184.    e_max = enemy_book_max.to_f
  185.    e_now = enemy_book_now.to_f
  186.    comp = (e_now / e_max * 100).to_i
  187.    $comp = comp
  188.    return comp.truncate
  189. end
  190. end
  191.   
  192. class Interpreter
  193. def enemy_book_max
  194.    return $game_party.enemy_book_max
  195. end
  196. def enemy_book_now
  197.    return $game_party.enemy_book_now
  198. end
  199. def enemy_book_comp
  200.    return $game_party.enemy_book_complete_percentage
  201. end
  202. end

  203. class Scene_Battle
  204. alias add_enemy_info_start_phase5 start_phase5
  205. def start_phase5
  206.    for enemy in $game_troop.enemies
  207.      # エネミーが隠れ状態でない場合
  208.      unless enemy.hidden
  209.        # 敵遭遇情報追加 XXOO 这里修改了去除战胜敌人后添加图鉴
  210.        #$game_party.add_enemy_info(enemy.id, 0)
  211.      end
  212.    end
  213.    add_enemy_info_start_phase5
  214. end
  215. end

  216. class Window_Base < Window
  217. #--------------------------------------------------------------------------
  218. # ● エネミーの戦闘後獲得アイテムの描画
  219. #--------------------------------------------------------------------------
  220. def draw_enemy_drop_item(enemy, x, y)
  221.    self.contents.font.color = normal_color
  222.    treasures = []
  223.    if enemy.item_id > 0
  224.      treasures.push($data_items[enemy.item_id])
  225.    end
  226.    if enemy.weapon_id > 0
  227.      treasures.push($data_weapons[enemy.weapon_id])
  228.    end
  229.    if enemy.armor_id > 0
  230.      treasures.push($data_armors[enemy.armor_id])
  231.    end
  232.    # 現状ではとりあえず1つのみ描画
  233.    if treasures.size > 0
  234.      item = treasures[0]
  235.      bitmap = RPG::Cache.icon(item.icon_name)
  236.      opacity = 255
  237.      self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  238.      name = treasures[0].name
  239.    else
  240.      self.contents.font.color = disabled_color
  241.      name = "无"
  242.    end
  243.    self.contents.draw_text(x+28, y, 212, 32, name)
  244. end
  245. #--------------------------------------------------------------------------
  246. # ● エネミーの図鑑IDの描画
  247. #--------------------------------------------------------------------------
  248. def draw_enemy_book_id(enemy, x, y)
  249.    self.contents.font.color = normal_color
  250.    id = $game_temp.enemy_book_data.id_data.index(enemy.id)
  251.    self.contents.draw_text(x, y, 32, 32, id.to_s)
  252. end
  253. #--------------------------------------------------------------------------
  254. # ● 敌人简介描绘
  255. #--------------------------------------------------------------------------
  256. def draw_enemy_other(enemy, x, y)
  257.    if CHARA_INFO[enemy.id]==nil
  258.     CHARA_INFO[enemy.id] = "没有相关资料"
  259.   end
  260.    self.contents.font.size=16
  261.    x+=self.contents.text_size("").width
  262.    info = CHARA_INFO[enemy.id]
  263.    s=info.scan(/./)
  264.     #一行显示21个字
  265.     for i in s
  266.       sss = self.contents.text_size(i)
  267.       
  268.       if  i==" "
  269.         y+=16
  270.         x=0
  271.       elsif (x+sss.width)>(width - 32-260)
  272.         y+=16
  273.         x=0
  274.         self.contents.draw_text(x, y, sss.width, sss.height, i)
  275.         x+=sss.width
  276.       else
  277.       self.contents.draw_text(x, y, sss.width, sss.height, i)
  278.       x+=sss.width
  279.       end
  280.     end
  281.   end
  282.    #--------------------------------------------------------------------------
  283. # ● 敌人特技描绘
  284. #--------------------------------------------------------------------------
  285. def draw_enemy_action(enemy, x, y)
  286.    self.contents.font.size=16
  287.    yy=y
  288.    self.contents.font.color = system_color
  289.    self.contents.draw_text(x, yy, 80, 18,"行动列表")
  290.    self.contents.font.color = normal_color
  291.    for action in enemy.actions
  292.      yy+=18
  293.      if action.kind==0
  294.        case action.basic
  295.         when 0
  296.           ac="普通攻击"
  297.         when 1
  298.           ac="防御"
  299.         when 2
  300.           ac="逃跑"
  301.         when 3
  302.           ac="无"
  303.         end
  304.      self.contents.draw_text(x, yy, 160, 18, ac )
  305.      end
  306.      if action.kind==1
  307.      self.contents.draw_text(x, yy, 160, 18, $data_skills[action.skill_id].name )
  308.      end
  309.    end
  310. end
  311. #雷达图描绘
  312.   #=======================================================================================
  313.   def draw_actor_element_radar_graph(actor, x, y)
  314.     radius = 56
  315. cx = x + radius + FONT_SIZE + 48
  316. cy = y + radius + FONT_SIZE + 32
  317. self.contents.font.color = system_color
  318. self.contents.draw_text(x, y, 104, 32, WORD_ELEMENT_GUARD)
  319. for loop_i in 0..NUMBER_OF_ELEMENTS
  320. if loop_i == 0

  321. else
  322. @pre_x = @now_x
  323. @pre_y = @now_y
  324. @pre_ex = @now_ex
  325. @pre_ey = @now_ey
  326. @color1 = @color2
  327. end
  328. if loop_i == NUMBER_OF_ELEMENTS
  329. eo = ELEMENT_ORDER[0]
  330. else
  331. eo = ELEMENT_ORDER[loop_i]
  332. end
  333. er = actor.element_rate(eo)
  334. estr = $data_system.elements[eo]
  335. @color2 = er < 0 ? GRAPH_LINE_COLOR_MINUS : er > 100 ? GRAPH_LINE_COLOR_PLUS : GRAPH_LINE_COLOR
  336. if er <0
  337.   then xsh=true
  338. else xsh=false
  339. end
  340. er = er.abs
  341. th = Math::PI * (0.5 - 2.0 * loop_i / NUMBER_OF_ELEMENTS)
  342. @now_x = cx + (radius * Math.cos(th)).floor
  343. @now_y = cy - (radius * Math.sin(th)).floor
  344. @now_wx = cx + ((radius+FONT_SIZE*2/2) * Math.cos(th)).floor - FONT_SIZE
  345. @now_wy = cy - ((radius+FONT_SIZE*1/2) * Math.sin(th)).floor - FONT_SIZE/2
  346. @now_vx = cx + ((radius+FONT_SIZE*6/2) * Math.cos(th)).floor - FONT_SIZE
  347. @now_vy = cy - ((radius+FONT_SIZE*3/2) * Math.sin(th)).floor - FONT_SIZE/2
  348. @now_ex = cx + (er*radius/100 * Math.cos(th)).floor
  349. @now_ey = cy - (er*radius/100 * Math.sin(th)).floor
  350. if loop_i == 0
  351. @pre_x = @now_x
  352. @pre_y = @now_y
  353. @pre_ex = @now_ex
  354. @pre_ey = @now_ey
  355. @color1 = @color2
  356. else

  357. end
  358. next if loop_i == 0
  359. self.contents.draw_line(cx+1,cy+1, @now_x+1,@now_y+1, GRAPH_SCALINE_COLOR_SHADOW)
  360. self.contents.draw_line(@pre_x+1,@pre_y+1, @now_x+1,@now_y+1, GRAPH_SCALINE_COLOR_SHADOW)
  361. self.contents.draw_line(cx,cy, @now_x,@now_y, GRAPH_SCALINE_COLOR)
  362. self.contents.draw_line(@pre_x,@pre_y, @now_x,@now_y, GRAPH_SCALINE_COLOR)
  363. self.contents.draw_line(@pre_ex,@pre_ey, @now_ex,@now_ey, @color1, 2, @color2)
  364. self.contents.font.size = FONT_SIZE
  365. if xsh == true
  366.   then self.contents.font.color = Color.new(100,255,128,128)
  367.   sdd="-"
  368. else self.contents.font.color = system_color
  369.   sdd=""
  370. end
  371. self.contents.draw_text(@now_wx,@now_wy, FONT_SIZE*2, FONT_SIZE, estr, 1)
  372. self.contents.font.color = Color.new(255,255,255,128)
  373. self.contents.draw_text(@now_vx,@now_vy, FONT_SIZE*2, FONT_SIZE, sdd+er.to_s + "%", 2)
  374. end
  375. end
  376. #_----------------------------------------------
  377. def draw_race(enemy,x,y)
  378.       text="无"
  379.       text2="无"
  380.       for i in 9..16
  381.         if enemy.element_rate(i) == 200
  382.         text = $data_system.elements[i]
  383.         end
  384.         if enemy.element_rate(i) == 150
  385.         text2 =$data_system.elements[i]
  386.         end
  387.       end
  388.       self.contents.font.color = system_color
  389.       self.contents.draw_text(x, y, 80, 32,"主要种族")
  390.       self.contents.font.color = normal_color
  391.       self.contents.draw_text(x+80, y, 76, 32,text,2)
  392.       self.contents.font.color = system_color
  393.       self.contents.draw_text(x+160, y, 80, 32,"次要种族")
  394.       self.contents.font.color = normal_color
  395.       self.contents.draw_text(x+80+160, y, 76, 32,text2,2)
  396. end
  397.   
  398. #--------------------------------------------------------------------------
  399. # ● エネミーの名前の描画
  400. #     enemy : エネミー
  401. #     x     : 描画先 X 座標
  402. #     y     : 描画先 Y 座標
  403. #--------------------------------------------------------------------------
  404. def draw_enemy_name(enemy, x, y)
  405.    self.contents.font.color = normal_color
  406.    self.contents.draw_text(x, y, 152, 32, enemy.name)
  407. end
  408. #--------------------------------------------------------------------------
  409. # ● エネミーグラフィックの描画(アナライズ)
  410. #     enemy : エネミー
  411. #     x     : 描画先 X 座標
  412. #     y     : 描画先 Y 座標
  413. #--------------------------------------------------------------------------
  414. def draw_enemy_graphic(enemy, x, y, opacity = 255)

  415. end
  416. #--------------------------------------------------------------------------
  417. # ● エネミーの獲得EXPの描画
  418. #     enemy : エネミー
  419. #     x     : 描画先 X 座標
  420. #     y     : 描画先 Y 座標
  421. #--------------------------------------------------------------------------
  422. def draw_enemy_exp(enemy, x, y)
  423.    self.contents.font.color = system_color
  424.    self.contents.draw_text(x, y, 120, 32, "EXP")
  425.    self.contents.font.color = normal_color
  426.    self.contents.draw_text(x + 120, y, 36, 32, enemy.exp.to_s, 2)
  427. end
  428. #--------------------------------------------------------------------------
  429. # ● エネミーの獲得GOLDの描画
  430. #     enemy : エネミー
  431. #     x     : 描画先 X 座標
  432. #     y     : 描画先 Y 座標
  433. #--------------------------------------------------------------------------
  434. def draw_enemy_gold(enemy, x, y)
  435.    self.contents.font.color = system_color
  436.    self.contents.draw_text(x, y, 120, 32, "掉落金钱")
  437.    self.contents.font.color = normal_color
  438.    self.contents.draw_text(x + 120, y, 36, 32, enemy.gold.to_s, 2)
  439. end
  440. end

  441. class Game_Enemy_Book < Game_Enemy
  442. #--------------------------------------------------------------------------
  443. # ● オブジェクト初期化
  444. #--------------------------------------------------------------------------
  445. def initialize(enemy_id)
  446.    super(2, 1)#ダミー
  447.    @enemy_id = enemy_id
  448.    enemy = $data_enemies[@enemy_id]
  449.    @battler_name = enemy.battler_name
  450.    @battler_hue = enemy.battler_hue
  451.    @hp = maxhp
  452.    @sp = maxsp
  453. end
  454. end

  455. class Data_MonsterBook
  456. attr_reader :id_data
  457. #--------------------------------------------------------------------------
  458. # ● オブジェクト初期化
  459. #--------------------------------------------------------------------------
  460. def initialize
  461.    @id_data = enemy_book_id_set
  462. end
  463. #--------------------------------------------------------------------------
  464. # ● 図鑑用登録無視属性取得
  465. #--------------------------------------------------------------------------
  466. def no_add_element
  467.    no_add = 0  # XXOO
  468.    # 登録無視の属性IDを取得
  469.    for i in 1...$data_system.elements.size
  470.      if $data_system.elements[i] =~ /不加入图鉴/
  471.        no_add = i
  472.        break
  473.      end
  474.    end
  475.    return no_add
  476. end
  477. #--------------------------------------------------------------------------
  478. # ● 図鑑用敵ID設定
  479. #--------------------------------------------------------------------------
  480. def enemy_book_id_set
  481.    data = [0]
  482.    no_add = no_add_element
  483.    # 登録無視の属性IDを取得
  484.    for i in 1...$data_enemies.size
  485.      enemy = $data_enemies[i]
  486.      next if enemy.name == ""
  487.      if enemy.element_ranks[no_add] == 1
  488.        next
  489.      end
  490.      data.push(enemy.id)
  491.    end
  492.    return data
  493. end
  494. end


  495. class Window_MonsterBook < Window_Selectable
  496. attr_reader   :data
  497. #--------------------------------------------------------------------------
  498. # ● オブジェクト初期化
  499. #--------------------------------------------------------------------------
  500. def initialize(index=0)
  501.    super(0, 64, 640, 416)
  502.    @column_max = 2
  503.    @book_data = $game_temp.enemy_book_data
  504.    @data = @book_data.id_data.dup
  505.    @data.shift
  506.    #@data.sort!
  507.    @item_max = @data.size
  508.    self.index = 0
  509.    refresh if @item_max > 0
  510. end
  511. #--------------------------------------------------------------------------
  512. # ● 遭遇データを取得
  513. #--------------------------------------------------------------------------
  514. def data_set
  515.    data = $game_party.enemy_info.keys
  516.    data.sort!
  517.    newdata = []
  518.    for i in data
  519.      next if $game_party.enemy_info[i] == 0
  520.      # 図鑑登録無視を考慮
  521.      if book_id(i) != nil
  522.        newdata.push(i)
  523.      end
  524.    end
  525.    return newdata
  526. end
  527. #--------------------------------------------------------------------------
  528. # ● 表示許可取得
  529. #--------------------------------------------------------------------------
  530. def show?(id)
  531.    if $game_party.enemy_info[id] == 0 or $game_party.enemy_info[id] == nil
  532.      return false
  533.    else
  534.      return true
  535.    end
  536. end
  537. #--------------------------------------------------------------------------
  538. # ● 図鑑用ID取得
  539. #--------------------------------------------------------------------------
  540. def book_id(id)
  541.    return @book_data.index(id)
  542. end
  543. #--------------------------------------------------------------------------
  544. # ● エネミー取得
  545. #--------------------------------------------------------------------------
  546. def item
  547.    return @data[self.index]
  548. end
  549. #--------------------------------------------------------------------------
  550. # ● リフレッシュ
  551. #--------------------------------------------------------------------------
  552. def refresh
  553.    if self.contents != nil
  554.      self.contents.dispose
  555.      self.contents = nil
  556.    end
  557.    self.contents = Bitmap.new(width - 32, row_max * 32)
  558.    #項目数が 0 でなければビットマップを作成し、全項目を描画
  559.    if @item_max > 0
  560.      for i in 0...@item_max
  561.       draw_item(i)
  562.      end
  563.    end
  564. end
  565. #--------------------------------------------------------------------------
  566. # ● 項目の描画
  567. #     index : 項目番号
  568. #--------------------------------------------------------------------------
  569. def draw_item(index)
  570.    enemy = $data_enemies[@data[index]]
  571.    return if enemy == nil
  572.    x = 4 + index % 2 * (288 + 32)
  573.    y = index / 2 * 32
  574.    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  575.    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  576.    self.contents.font.color = normal_color
  577.    draw_enemy_book_id(enemy, x, y)
  578.    if show?(enemy.id)
  579.      self.contents.draw_text(x + 28+16, y, 212, 32, enemy.name, 0)
  580.    else
  581.      self.contents.draw_text(x + 28+16, y, 212, 32, "-----", 0)
  582.      return
  583.    end
  584.    if analyze?(@data[index])
  585.      self.contents.font.color = text_color(3)
  586.      self.contents.draw_text(x + 256, y, 24, 32, "済", 2)
  587.    end
  588. end
  589. #--------------------------------------------------------------------------
  590. # ● アナライズ済かどうか
  591. #--------------------------------------------------------------------------
  592. def analyze?(enemy_id)
  593.    if $game_party.enemy_info[enemy_id] == 2
  594.      return true
  595.    else
  596.      return false
  597.    end
  598. end
  599. end


  600. class Window_MonsterBook_Info < Window_Base
  601. include Enemy_Book_Config
  602. #--------------------------------------------------------------------------
  603. # ● オブジェクト初期化
  604. #--------------------------------------------------------------------------
  605. def initialize
  606.    super(0, 0+64, 640, 480-64)
  607.    self.back_opacity=255
  608.    self.contents = Bitmap.new(width - 32, height - 32)
  609.    
  610. end
  611. #--------------------------------------------------------------------------
  612. # ● リフレッシュ
  613. #--------------------------------------------------------------------------
  614. def refresh(enemy_id)
  615.    self.contents.clear
  616.    self.contents.font.size = 22
  617.    enemy = Game_Enemy_Book.new(enemy_id)
  618.    @gra = Sprite_Enemy_Graphic.new(nil,enemy)
  619.    @gra.z = 120      #怪物图片
  620.    draw_enemy_book_id(enemy, 4, 0)    #各种详细信息
  621.    draw_enemy_name(enemy, 48, 0)
  622.    draw_actor_hp(enemy, 288, 0)
  623.    draw_actor_sp(enemy, 288+160, 0)
  624.    self.contents.font.size=18
  625.    draw_actor_parameter(enemy, 288    ,  25, 0)
  626.    self.contents.font.color = system_color
  627.    self.contents.draw_text(288+160, 25, 120, 32, EVA_NAME)
  628.    self.contents.font.color = normal_color
  629.    self.contents.draw_text(288+160 + 120, 25, 36, 32, enemy.eva.to_s, 2)
  630.    draw_actor_parameter(enemy, 288    ,  50, 3)
  631.    draw_actor_parameter(enemy, 288+160,  50, 4)
  632.    draw_actor_parameter(enemy, 288    ,  75, 5)
  633.    draw_actor_parameter(enemy, 288+160,  75, 6)
  634.    draw_actor_parameter(enemy, 288    , 100, 1)
  635.    draw_actor_parameter(enemy, 288+160, 100, 2)
  636.    draw_enemy_exp(enemy, 288, 125)
  637.    draw_enemy_gold(enemy, 288+160, 125)
  638.    draw_race(enemy, 288, 150)
  639.    #--------------------------------------------------------------------
  640.    draw_enemy_other(enemy, 0, 280)  #简介文字
  641.    draw_enemy_action(enemy,200, 30)  #显示敌人行动
  642.    draw_actor_element_radar_graph(enemy, 360, 180)#雷达图
  643.    #--------------------------------------------------------------------
  644.    if DROP_ITEM_NEED_ANALYZE==true  #掉落物品
  645.      self.contents.font.color = system_color
  646.         self.contents.font.size=16
  647.      self.contents.draw_text(0, 235, 96, 32, "掉落物品")
  648.      draw_enemy_drop_item(enemy, 128, 235)
  649.      self.contents.font.color = normal_color
  650.         self.contents.font.size=18
  651.       end      
  652.     end
  653. def cl
  654.        @gra.dispose
  655. end
  656. #--------------------------------------------------------------------------
  657. # ● アナライズ済かどうか
  658. #--------------------------------------------------------------------------
  659. def analyze?(enemy_id)
  660.    if $game_party.enemy_info[enemy_id] == 2
  661.      return true
  662.    else
  663.      return false
  664.    end
  665. end
  666. end


  667. class Scene_MonsterBook
  668. include Enemy_Book_Config
  669. #--------------------------------------------------------------------------
  670. # ● メイン処理
  671. #--------------------------------------------------------------------------
  672. def main
  673.    $game_temp.enemy_book_data = Data_MonsterBook.new
  674.    # ウィンドウを作成
  675.    @title_window = Window_Base.new(0, 0, 640, 64)
  676.    @title_window.contents = Bitmap.new(640 - 32, 64 - 32)
  677.    @title_window.contents.draw_text(4, 0, 320, 32, "怪兽图鉴", 0)
  678.    if SHOW_COMPLETE_TYPE != 0
  679.      case SHOW_COMPLETE_TYPE
  680.      when 1
  681.        e_now = $game_party.enemy_book_now
  682.        e_max = $game_party.enemy_book_max
  683.        text = e_now.to_s + "/" + e_max.to_s
  684.      when 2
  685.        comp = $game_party.enemy_book_complete_percentage
  686.        text = comp.to_s + "%"
  687.      when 3
  688.        e_now = $game_party.enemy_book_now
  689.        e_max = $game_party.enemy_book_max
  690.        comp = $game_party.enemy_book_complete_percentage
  691.        text = e_now.to_s + "/" + e_max.to_s + " " + comp.to_s + "%"
  692.      end
  693.      if text != nil
  694.        @title_window.contents.draw_text(320, 0, 288, 32,  text, 2)
  695.      end
  696.    end
  697.    @main_window = Window_MonsterBook.new
  698.    @main_window.active = true
  699.    # インフォウィンドウを作成 (不可視・非アクティブに設定)
  700.    @info_window = Window_MonsterBook_Info.new
  701.    @info_window.z = 110
  702.    @info_window.visible = false
  703.    @info_window.active = false
  704.    @visible_index = 0
  705.    # トランジション実行
  706.    Graphics.transition
  707.    # メインループ
  708.    loop do
  709.      # ゲーム画面を更新
  710.      Graphics.update
  711.      # 入力情報を更新
  712.      Input.update
  713.      # フレーム更新
  714.      update
  715.      # 画面が切り替わったらループを中断
  716.      if $scene != self
  717.        break
  718.      end
  719.    end
  720.    # トランジション準備
  721.    Graphics.freeze
  722.    # ウィンドウを解放
  723.    @main_window.dispose
  724.    @info_window.dispose
  725.    @title_window.dispose
  726. end
  727. #--------------------------------------------------------------------------
  728. # ● フレーム更新
  729. #--------------------------------------------------------------------------
  730. def update
  731.    # ウィンドウを更新
  732.    @main_window.update
  733.    @info_window.update
  734. #   gra.update
  735.    if @info_window.active
  736.      update_info
  737.      return
  738.    end
  739.    # メインウィンドウがアクティブの場合: update_target を呼ぶ
  740.    if @main_window.active
  741.      update_main
  742.      return
  743.    end
  744. end
  745. #--------------------------------------------------------------------------
  746. # ● フレーム更新 (メインウィンドウがアクティブの場合)
  747. #--------------------------------------------------------------------------
  748. def update_main
  749.    # B ボタンが押された場合
  750.    if Input.trigger?(Input::B)
  751.      # キャンセル SE を演奏
  752.      $game_system.se_play($data_system.cancel_se)
  753.      $scene = Scene_Menu.new(7)
  754.      return
  755.    end
  756.    # C ボタンが押された場合
  757.    if Input.trigger?(Input::C)
  758.      if @main_window.item == nil or @main_window.show?(@main_window.item) == false
  759.        # ブザー SE を演奏
  760.        $game_system.se_play($data_system.buzzer_se)
  761.        return
  762.      end
  763.      # 決定 SE を演奏
  764.      $game_system.se_play($data_system.decision_se)
  765.      @main_window.active = false
  766.      @info_window.active = true
  767.      @info_window.visible = true
  768.      @visible_index = @main_window.index
  769.      @info_window.refresh(@main_window.item)
  770.      return
  771.    end
  772. end
  773. #--------------------------------------------------------------------------
  774. # ● フレーム更新 (インフォウィンドウがアクティブの場合)
  775. #--------------------------------------------------------------------------
  776. def update_info
  777.    # B ボタンが押された場合
  778.    if Input.trigger?(Input::B)
  779.      # キャンセル SE を演奏
  780.      $game_system.se_play($data_system.cancel_se)
  781.      @main_window.active = true
  782.      @info_window.active = false
  783.      @info_window.visible = false
  784.      @info_window.cl
  785.      return
  786.    end
  787.    # C ボタンが押された場合
  788.    if Input.trigger?(Input::C)
  789.      # 決定 SE を演奏
  790.      #$game_system.se_play($data_system.decision_se)
  791.      return
  792.    end
  793.    if Input.trigger?(Input::L)
  794.      # 決定 SE を演奏
  795.      $game_system.se_play($data_system.decision_se)
  796.      loop_end = false
  797.      while loop_end == false
  798.        if @visible_index != 0
  799.          @visible_index -= 1
  800.        else
  801.          @visible_index = @main_window.data.size - 1
  802.        end
  803.        loop_end = true if @main_window.show?(@main_window.data[@visible_index])
  804.      end
  805.      @info_window.cl
  806.      id = @main_window.data[@visible_index]
  807.      @info_window.refresh(id)
  808.      return
  809.    end
  810.    if Input.trigger?(Input::R)
  811.      # 決定 SE を演奏
  812.      $game_system.se_play($data_system.decision_se)
  813.      loop_end = false
  814.      while loop_end == false
  815.        if @visible_index != @main_window.data.size - 1
  816.          @visible_index += 1
  817.        else
  818.          @visible_index = 0
  819.        end
  820.        loop_end = true if @main_window.show?(@main_window.data[@visible_index])
  821.      end
  822.      @info_window.cl
  823.      id = @main_window.data[@visible_index]
  824.      @info_window.refresh(id)
  825.      return
  826.    end
  827. end
  828. end
  829. #==============================================================================
  830. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  831. #==============================================================================
  832. class Sprite_Enemy_Graphic< Sprite
  833.   attr_accessor :enemy
  834.   #--------------------------------------------------------------------------
  835.   # ● オブジェクト初期化
  836.   #--------------------------------------------------------------------------
  837.   def initialize(viewport,enemy)
  838.     super(viewport)
  839.     if @enemy != enemy
  840.       self.bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue)
  841.       cw = self.bitmap.width
  842.       ch = self.bitmap.height
  843.     if cw>ch
  844.       self.zoom_x=150.0/cw
  845.       self.zoom_y=150.0/cw
  846.     else
  847.       self.zoom_x=150.0/ch
  848.       self.zoom_y=150.0/ch     
  849.     end
  850.       self.x=10
  851.       self.y=110
  852.       @enemy=enemy
  853.     end
  854.   end
  855.   #--------------------------------------------------------------------------
  856.   # ● 解放
  857.   #--------------------------------------------------------------------------
  858.   def dispose
  859.     if self.bitmap != nil
  860.       self.bitmap.dispose
  861.     end
  862.     super
  863.   end
  864.   #--------------------------------------------------------------------------
  865.   # ● フレーム更新
  866.   #--------------------------------------------------------------------------
  867.   def refresh(enemy)
  868.   end
  869. end
复制代码
囡囚囨囚囨図囨囧

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
2
发表于 2012-4-8 16:16:15 | 只看该作者
在打怪完毕之后执行次$game_party.enemy_book_complete_percentage试试

http://rpg.blue/thread-175056-1-2.html
PVZ型塔防物一个
http://rpg.blue/thread-155199-1-2.html
RMXP技术讨论区手动认可帖,得到答案请认可
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-27 04:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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