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

Project1

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

[已经解决] 求一个通用的怪物图鉴脚本系统

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2011-10-21
帖子
31
跳转到指定楼层
1
发表于 2012-2-6 16:09:03 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
想为游戏做一个怪物图鉴系统,可是从别的游戏截取下来的图鉴系统使用上有些问题。
于是想求个现成的,先谢谢啦。

Lv1.梦旅人

虱子

梦石
0
星屑
121
在线时间
1782 小时
注册时间
2010-6-19
帖子
3597
2
发表于 2012-2-6 16:22:36 | 只看该作者
能发下你找到的那个图鉴脚本吗?

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

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
3
发表于 2012-2-6 16:24:58 | 只看该作者
囡囚囨囚囨図囨囧
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2011-10-21
帖子
31
4
 楼主| 发表于 2012-2-6 16:39:54 | 只看该作者
回楼上的两位,我用的图鉴脚本就是3楼发的那个。
问题在于,每次测试的时候,总是出现问题。
一个怪都没有打的时候调用图鉴,显示
打了怪,答应之后出现。

我是用物品+公共事件来调出图鉴的


‘‘

这论坛的图片显示真不会用,老是出问题...
第一张图是不打怪调用图鉴的结果;第二张图是打赢怪后出现的结果;第三张图是我公共事件中的脚本。

怎么解决?


──岁月孤殇于2012-2-6 16:42补充以上内容’’


‘‘

脚本如下,和二楼发的那个相比,只有一些顺序不同而已。
  1. #================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #===================================================================
  4. #——————————————————————————————————————
  5. #魔物图鉴+介绍
  6. #
  7. #战斗终了时自动添加敌人进入图鉴(class Scene_Battle start_phase5 追加。

  8. #目前与各种战斗系统没有发现冲突)
  9. #不想加入图鉴的怪物设置其“不加入图鉴”属性有效度为A即可
  10. #图鉴完成度的表示功能追加
  11. #SHOW_COMPLETE_TYPE 的数值可以设定
  12. #当为1,显示现有个数/总数,当为2,显示完成百分比,当为3,全显示。
  13. #使用方法:$scene = Scene_MonsterBook.new
  14. #数据库中属性里面那些种族特效的位置,建议把默认的“对 不死”之类改成“不死”,

  15. #不然显示会很奇怪
  16. #由于雷达图的设计问题,只支持8项属性
  17. #默认种族特效处理属性中编号9到编号16,

  18. #如果你做了修改请自行改动380行左右的for i in 9..16这一句代码
  19. #显示各种信息位于630行左右,想不显示的话只要删除相应语句
  20. CHARA_INFO=[]#怪物的介绍,对应怪物id,空格为换行,

  21. #同时也会自动换行,没有写介绍的怪物会自动显示“无详细信息”

  22. #没有信息测试,4号怪物
  23. #=============
  24. #雷达图相关处理部分
  25. #=============
  26. class Bitmap
  27. def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color)
  28. distance = (start_x - end_x).abs + (start_y - end_y).abs
  29. if end_color == start_color
  30. for i in 1..distance
  31. x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
  32. y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
  33. if width == 1
  34. self.set_pixel(x, y, start_color)
  35. else
  36. self.fill_rect(x, y, width, width, start_color)
  37. end
  38. end
  39. else
  40. for i in 1..distance
  41. x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
  42. y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
  43. r = start_color.red * (distance-i)/distance + end_color.red * i/distance
  44. g = start_color.green * (distance-i)/distance + end_color.green * i/distance
  45. b = start_color.blue * (distance-i)/distance + end_color.blue * i/distance
  46. a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance
  47. if width == 1
  48. self.set_pixel(x, y, Color.new(r, g, b, a))
  49. else
  50. self.fill_rect(x, y, width, width, Color.new(r, g, b, a))
  51. end
  52. end
  53. end
  54. end
  55. end
  56. #=============
  57. # Graphic_Def_Elem
  58. #=============
  59. class Window_Base
  60. FONT_SIZE = 18
  61. WORD_ELEMENT_GUARD = "属性有效度"
  62. NUMBER_OF_ELEMENTS = 8
  63. ELEMENT_ORDER = [1,3,8,5,2,4,7,6]
  64. GRAPH_SCALINE_COLOR = Color.new(255, 255, 255, 128)
  65. GRAPH_SCALINE_COLOR_SHADOW = Color.new( 0, 0, 0, 192)
  66. GRAPH_LINE_COLOR = Color.new(255, 255, 64, 255)
  67. GRAPH_LINE_COLOR_MINUS = Color.new( 64, 255, 255, 255)
  68. GRAPH_LINE_COLOR_PLUS = Color.new(255, 64, 64, 255)
  69. end

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

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

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

  134. #--------------------------------------------------------------------------
  135. # ● エネミー情報の追加(図鑑用)
  136. #     type : 通常遭遇かアナライズか 0:通常 1:アナライズ -1:情報削除
  137. #     0:無遭遇 1:遭遇済 2:アナライズ済
  138. #--------------------------------------------------------------------------
  139. def add_enemy_info(enemy_id, type = 0)
  140.    case type
  141.    when 0
  142.      if @enemy_info[enemy_id] == 2
  143.        return false
  144.      end
  145.      @enemy_info[enemy_id] = 1
  146.    when 1
  147.      @enemy_info[enemy_id] = 2
  148.    when -1
  149.      @enemy_info[enemy_id] = 0
  150.    end
  151. end
  152. #--------------------------------------------------------------------------
  153. # ● 魔物図鑑の最大登録数を取得
  154. #--------------------------------------------------------------------------
  155. def enemy_book_max
  156.    return $game_temp.enemy_book_data.id_data.size - 1
  157. end
  158. #--------------------------------------------------------------------------
  159. # ● 魔物図鑑の現在登録数を取得
  160. #--------------------------------------------------------------------------
  161. def enemy_book_now
  162.    now_enemy_info = @enemy_info.keys
  163.    # 登録無視の属性IDを取得
  164.    no_add = $game_temp.enemy_book_data.no_add_element
  165.    new_enemy_info = []
  166.    for i in now_enemy_info
  167.      enemy = $data_enemies[i]
  168.      next if enemy.name == ""
  169.      if enemy.element_ranks[no_add] == 1
  170.        next
  171.      end
  172.      new_enemy_info.push(enemy.id)
  173.    end
  174.    return new_enemy_info.size
  175. end
  176. #--------------------------------------------------------------------------
  177. # ● 魔物図鑑の完成率を取得
  178. #--------------------------------------------------------------------------
  179. def enemy_book_complete_percentage
  180.    e_max = enemy_book_max.to_f
  181.    e_now = enemy_book_now.to_f
  182.    comp = e_now / e_max * 100
  183.    return comp.truncate
  184. end
  185. end

  186. class Interpreter
  187. def enemy_book_max
  188.    return $game_party.enemy_book_max
  189. end
  190. def enemy_book_now
  191.    return $game_party.enemy_book_now
  192. end
  193. def enemy_book_comp
  194.    return $game_party.enemy_book_complete_percentage
  195. end
  196. end

  197. class Scene_Battle
  198. alias add_enemy_info_start_phase5 start_phase5
  199. def start_phase5
  200.    for enemy in $game_troop.enemies
  201.      # エネミーが隠れ状態でない場合
  202.      unless enemy.hidden
  203.        # 敵遭遇情報追加
  204.        $game_party.add_enemy_info(enemy.id, 0)
  205.      end
  206.    end
  207.    add_enemy_info_start_phase5
  208. end
  209. end

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

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

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

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

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

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


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


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


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


──岁月孤殇于2012-2-6 16:45补充以上内容’’

360截图20120206163745156.jpg (6.46 KB, 下载次数: 3)

360截图20120206163745156.jpg

360截图20120206163924875.jpg (6.88 KB, 下载次数: 6)

360截图20120206163924875.jpg

点评

试试用新存档测试  发表于 2012-2-6 17:47
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
270 小时
注册时间
2010-2-4
帖子
1305
5
发表于 2012-2-6 18:37:06 | 只看该作者
在你那个公共事件上面插一句脚本事件$game_party.enemy_info = {} if $game_party.enemy_info.nil?
好歹当年也当过大魔王过,orz
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2011-10-21
帖子
31
6
 楼主| 发表于 2012-2-6 20:34:01 | 只看该作者
Wind2010 发表于 2012-2-6 16:22
能发下你找到的那个图鉴脚本吗?

为什么从新开始后就正常了啊?

点评

- -b存档前$game_party的enemy_info哈希表未建立...  发表于 2012-2-6 20:42
$game_party.enemy_info是图鉴脚本中新建的变量,在旧存档中没有定义  发表于 2012-2-6 20:40
回复

使用道具 举报

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

本版积分规则

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

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

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

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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