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

Project1

 找回密码
 注册会员
搜索

问个怪物图鉴的问题

查看数: 1668 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2009-12-23 15:29

正文摘要:

#============================================================================== # 本脚本来自www.66RPG.com,使用和转载请保留此信息 #======================================================================= ...

回复

夏季冰川 发表于 2009-12-26 10:07:17
谢谢,我自己调好了.
原因是数据库的问题,不允许有空位,谢谢前辈了.
后知后觉 发表于 2009-12-23 17:35:18
本帖最后由 后知后觉 于 2009-12-23 17:46 编辑

你发的这脚本看着好头痛= =
我挖了个以前工程里的怪物图鉴
先放张图= =...那战斗图是放大的.真的要用的话再改= =

.
还有就是不管是我下面帖的脚本还是你上面帖的脚本
在脚本的开头都有一大堆东西要设置...检查下你是否都设置好了
因为我下面帖的脚本在我没有设置的时候也报告错误..稍微设置了一下就不报告错误了
报告错误的原因是因为你的游戏里的属性一共只有15个
而脚本的for循环却循环到了16
这样就产生了nil值.对nil调用不属于它的函数然后报告错误
.
  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. #不然显示会很奇怪
  17. #由于雷达图的设计问题,只支持8项属性
  18. #默认种族特效处理属性中编号9到编号16,

  19. #如果你做了修改请自行改动380行左右的for i in 9..16这一句代码
  20. #显示各种信息位于630行左右,想不显示的话只要删除相应语句
  21. CHARA_INFO=[]#怪物的介绍,对应怪物id,空格为换行,
  22. #★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  23. #同时也会自动换行,没有写介绍的怪物会自动显示“无详细信息”
  24. CHARA_INFO[1] = "怪物介绍1"
  25. CHARA_INFO[2] = "怪物介绍2"
  26. CHARA_INFO[3] = "生活在潮湿的沼泽地区的变异生物,性情凶暴,经常会袭击各种路过的生物"
  27. #没有信息测试,4号怪物
  28. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  29. #=============
  30. #雷达图相关处理部分
  31. #=============
  32. class Bitmap
  33. def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color)
  34. distance = (start_x - end_x).abs + (start_y - end_y).abs
  35. if end_color == start_color
  36. for i in 1..distance
  37. x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
  38. y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
  39. if width == 1
  40. self.set_pixel(x, y, start_color)
  41. else
  42. self.fill_rect(x, y, width, width, start_color)
  43. end
  44. end
  45. else
  46. for i in 1..distance
  47. x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
  48. y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
  49. r = start_color.red * (distance-i)/distance + end_color.red * i/distance
  50. g = start_color.green * (distance-i)/distance + end_color.green * i/distance
  51. b = start_color.blue * (distance-i)/distance + end_color.blue * i/distance
  52. a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance
  53. if width == 1
  54. self.set_pixel(x, y, Color.new(r, g, b, a))
  55. else
  56. self.fill_rect(x, y, width, width, Color.new(r, g, b, a))
  57. end
  58. end
  59. end
  60. end
  61. end
  62. #=============
  63. # Graphic_Def_Elem
  64. #=============
  65. class Window_Base
  66. FONT_SIZE = 18
  67. WORD_ELEMENT_GUARD = "属性有效度"
  68. NUMBER_OF_ELEMENTS = 4
  69. ELEMENT_ORDER = [1,3,2,4,8,5,7,6]
  70. GRAPH_SCALINE_COLOR = Color.new(255, 255, 255, 128)
  71. GRAPH_SCALINE_COLOR_SHADOW = Color.new( 0, 0, 0, 192)
  72. GRAPH_LINE_COLOR = Color.new(255, 255, 64, 255)
  73. GRAPH_LINE_COLOR_MINUS = Color.new( 64, 255, 255, 255)
  74. GRAPH_LINE_COLOR_PLUS = Color.new(255, 64, 64, 255)
  75. end

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

  105. class Game_Party
  106. #==============================================
  107. #--------------------------------------------------------------------------
  108.   # ● 公開インスタンス変数
  109.   #--------------------------------------------------------------------------
  110.   attr_reader   :actors                   # アクター
  111.   attr_reader   :gold                     # ゴールド
  112.   attr_reader   :steps                    # 歩数
  113.   attr_accessor :mission                  # 任务★★★★★★★★★★★★★
  114.   attr_accessor   :pr                  # 当前章节数★★★★★★★★★★★★★
  115.   attr_reader   :prname
  116.   attr_accessor :enemy_info               # 出会った敵情報(図鑑用)

  117.   def initialize
  118.     @actors = []
  119.     @gold = 0
  120.     @steps = 0
  121.     @items = {}
  122.     @weapons = {}
  123.     @armors = {}
  124.   end

  125. alias book_info_initialize initialize
  126. def initialize
  127.    book_info_initialize
  128.    @enemy_info = {}
  129. end

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

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

  298. else
  299. @pre_x = @now_x
  300. @pre_y = @now_y
  301. @pre_ex = @now_ex
  302. @pre_ey = @now_ey
  303. @color1 = @color2
  304. end
  305. if loop_i == NUMBER_OF_ELEMENTS
  306. eo = ELEMENT_ORDER[0]
  307. else
  308. eo = ELEMENT_ORDER[loop_i]
  309. end
  310. er = actor.element_rate(eo)
  311. estr = $data_system.elements[eo]
  312. @color2 = er < 0 ? GRAPH_LINE_COLOR_MINUS : er > 100 ? GRAPH_LINE_COLOR_PLUS : GRAPH_LINE_COLOR
  313. if er <0
  314.   then xsh=true
  315. else xsh=false
  316. end
  317. er = er.abs
  318. th = Math::PI * (0.5 - 2.0 * loop_i / NUMBER_OF_ELEMENTS)
  319. @now_x = cx + (radius * Math.cos(th)).floor
  320. @now_y = cy - (radius * Math.sin(th)).floor
  321. @now_wx = cx + ((radius+FONT_SIZE*2/2) * Math.cos(th)).floor - FONT_SIZE
  322. @now_wy = cy - ((radius+FONT_SIZE*1/2) * Math.sin(th)).floor - FONT_SIZE/2
  323. @now_vx = cx + ((radius+FONT_SIZE*6/2) * Math.cos(th)).floor - FONT_SIZE
  324. @now_vy = cy - ((radius+FONT_SIZE*3/2) * Math.sin(th)).floor - FONT_SIZE/2
  325. @now_ex = cx + (er*radius/100 * Math.cos(th)).floor
  326. @now_ey = cy - (er*radius/100 * Math.sin(th)).floor
  327. if loop_i == 0
  328. @pre_x = @now_x
  329. @pre_y = @now_y
  330. @pre_ex = @now_ex
  331. @pre_ey = @now_ey
  332. @color1 = @color2
  333. else

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

  392. end
  393. #--------------------------------------------------------------------------
  394. # ● エネミーの獲得EXPの描画
  395. #     enemy : エネミー
  396. #     x     : 描画先 X 座標
  397. #     y     : 描画先 Y 座標
  398. #--------------------------------------------------------------------------
  399. def draw_enemy_exp(enemy, x, y)
  400.    self.contents.font.color = system_color
  401.    self.contents.draw_text(x, y, 120, 32, "EXP")
  402.    self.contents.font.color = normal_color
  403.    self.contents.draw_text(x + 120, y, 36, 32, enemy.exp.to_s, 2)
  404. end
  405. #--------------------------------------------------------------------------
  406. # ● エネミーの獲得GOLDの描画
  407. #     enemy : エネミー
  408. #     x     : 描画先 X 座標
  409. #     y     : 描画先 Y 座標
  410. #--------------------------------------------------------------------------
  411. def draw_enemy_gold(enemy, x, y)
  412.    self.contents.font.color = system_color
  413.    self.contents.draw_text(x, y, 120, 32, "掉落金钱")
  414.    self.contents.font.color = normal_color
  415.    self.contents.draw_text(x + 120, y, 36, 32, enemy.gold.to_s, 2)
  416. end
  417. end

  418. class Game_Enemy_Book < Game_Enemy
  419. #--------------------------------------------------------------------------
  420. # ● オブジェクト初期化
  421. #--------------------------------------------------------------------------
  422. def initialize(enemy_id)
  423.    super(2, 1)#ダミー
  424.    @enemy_id = enemy_id
  425.    enemy = $data_enemies[@enemy_id]
  426.    @battler_name = enemy.battler_name
  427.    @battler_hue = enemy.battler_hue
  428.    @hp = maxhp
  429.    @sp = maxsp
  430. end
  431. end

  432. class Data_MonsterBook
  433. attr_reader :id_data
  434. #--------------------------------------------------------------------------
  435. # ● オブジェクト初期化
  436. #--------------------------------------------------------------------------
  437. def initialize
  438.    @id_data = enemy_book_id_set
  439. end
  440. #--------------------------------------------------------------------------
  441. # ● 図鑑用登録無視属性取得
  442. #--------------------------------------------------------------------------
  443. def no_add_element
  444.    no_add = 0
  445.    # 登録無視の属性IDを取得
  446.    for i in 1...$data_system.elements.size
  447.      if $data_system.elements[i] =~ /不加入图鉴/
  448.        no_add = i
  449.        break
  450.      end
  451.    end
  452.    return no_add
  453. end
  454. #--------------------------------------------------------------------------
  455. # ● 図鑑用敵ID設定
  456. #--------------------------------------------------------------------------
  457. def enemy_book_id_set
  458.    data = [0]
  459.    no_add = no_add_element
  460.    # 登録無視の属性IDを取得
  461.    for i in 1...$data_enemies.size
  462.      enemy = $data_enemies[i]
  463.      next if enemy.name == ""
  464.      if enemy.element_ranks[no_add] == 1
  465.        next
  466.      end
  467.      data.push(enemy.id)
  468.    end
  469.    return data
  470. end
  471. end


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


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


  644. class Scene_MonsterBook
  645. include Enemy_Book_Config
  646. #--------------------------------------------------------------------------
  647. # ● メイン処理
  648. #--------------------------------------------------------------------------
  649. def main
  650.    $game_temp.enemy_book_data = Data_MonsterBook.new
  651.    # ウィンドウを作成
  652.    @title_window = Window_Base.new(0, 0, 640, 64)
  653.    @title_window.contents = Bitmap.new(640 - 32, 64 - 32)
  654.    @title_window.contents.draw_text(4, 0, 320, 32, "魔物图鉴", 0)
  655.    if SHOW_COMPLETE_TYPE != 0
  656.      case SHOW_COMPLETE_TYPE
  657.      when 1
  658.        e_now = $game_party.enemy_book_now
  659.        e_max = $game_party.enemy_book_max
  660.        text = e_now.to_s + "/" + e_max.to_s
  661.      when 2
  662.        comp = $game_party.enemy_book_complete_percentage
  663.        text = comp.to_s + "%"
  664.      when 3
  665.        e_now = $game_party.enemy_book_now
  666.        e_max = $game_party.enemy_book_max
  667.        comp = $game_party.enemy_book_complete_percentage
  668.        text = e_now.to_s + "/" + e_max.to_s + " " + comp.to_s + "%"
  669.      end
  670.     $game_variables[31] = e_now
  671.     $game_variables[32] = e_max
  672.      if text != nil
  673.        @title_window.contents.draw_text(320, 0, 288, 32,  text, 2)
  674.      end
  675.    end
  676.    @main_window = Window_MonsterBook.new
  677.    @main_window.active = true
  678.    # インフォウィンドウを作成 (不可視・非アクティブに設定)
  679.    @info_window = Window_MonsterBook_Info.new
  680.    @info_window.z = 110
  681.    @info_window.visible = false
  682.    @info_window.active = false
  683.    @visible_index = 0
  684.    # トランジション実行
  685.    Graphics.transition
  686.    # メインループ
  687.    loop do
  688.      # ゲーム画面を更新
  689.      Graphics.update
  690.      # 入力情報を更新
  691.      Input.update
  692.      # フレーム更新
  693.      update
  694.      # 画面が切り替わったらループを中断
  695.      if $scene != self
  696.        break
  697.      end
  698.    end
  699.    # トランジション準備
  700.    Graphics.freeze
  701.    # ウィンドウを解放
  702.    @main_window.dispose
  703.    @info_window.dispose
  704.    @title_window.dispose
  705. end
  706. #--------------------------------------------------------------------------
  707. # ● フレーム更新
  708. #--------------------------------------------------------------------------
  709. def update
  710.    # ウィンドウを更新
  711.    @main_window.update
  712.    @info_window.update
  713. #   gra.update
  714.    if @info_window.active
  715.      update_info
  716.      return
  717.    end
  718.    # メインウィンドウがアクティブの場合: update_target を呼ぶ
  719.    if @main_window.active
  720.      update_main
  721.      return
  722.    end
  723. end
  724. #--------------------------------------------------------------------------
  725. # ● フレーム更新 (メインウィンドウがアクティブの場合)
  726. #--------------------------------------------------------------------------
  727. def update_main
  728.    # B ボタンが押された場合
  729.    if Input.trigger?(Input::B)
  730.      # キャンセル SE を演奏
  731.      $game_system.se_play($data_system.cancel_se)
  732.      if $game_switches[14] == true
  733.        $scene = Scene_Map.new
  734.        $game_switches[14] = false
  735.      else
  736.        $scene = Scene_Menu.new(2)
  737.      end
  738.      return
  739.    end
  740.    # C ボタンが押された場合
  741.    if Input.trigger?(Input::C)
  742.      if @main_window.item == nil or @main_window.show?(@main_window.item) == false
  743.        # ブザー SE を演奏
  744.        $game_system.se_play($data_system.buzzer_se)
  745.        return
  746.      end
  747.      # 決定 SE を演奏
  748.      $game_system.se_play($data_system.decision_se)
  749.      @main_window.active = false
  750.      @info_window.active = true
  751.      @info_window.visible = true
  752.      @visible_index = @main_window.index
  753.      @info_window.refresh(@main_window.item)
  754.      return
  755.    end
  756. end
  757.   
  758.   def update_info
  759.     if Input.trigger?(Input::B)
  760.       $game_system.se_play($data_system.cancel_se)
  761.       @main_window.active = true
  762.       @info_window.active = false
  763.       @info_window.visible = false
  764.       @info_window.cl
  765.       return
  766.     end
  767.     if Input.trigger?(Input::C)
  768.       return
  769.     end
  770.     if Input.trigger?(Input::L)
  771.       $game_system.se_play($data_system.decision_se)
  772.       loop_end = false
  773.       while loop_end == false
  774.         if @visible_index != 0
  775.           @visible_index -= 1
  776.         else
  777.           @visible_index = @main_window.data.size - 1
  778.         end
  779.         loop_end = true if @main_window.show?(@main_window.data[@visible_index])
  780.       end
  781.       id = @main_window.data[@visible_index]
  782.       @info_window.cl
  783.       @info_window.refresh(id)
  784.       return
  785.     end
  786.     if Input.trigger?(Input::R)
  787.       $game_system.se_play($data_system.decision_se)
  788.       loop_end = false
  789.       while loop_end == false
  790.         if @visible_index != @main_window.data.size - 1
  791.           @visible_index += 1
  792.         else
  793.           @visible_index = 0
  794.         end
  795.         loop_end = true if @main_window.show?(@main_window.data[@visible_index])
  796.       end
  797.       id = @main_window.data[@visible_index]
  798.       @info_window.cl
  799.       @info_window.refresh(id)
  800.       return
  801.     end
  802.   end
  803. end

  804. class Sprite_Enemy_Graphic< Sprite
  805.   attr_accessor :enemy
  806.   def initialize(viewport,enemy)
  807.     super(viewport)
  808.     if @enemy != enemy
  809.       self.bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue)
  810.       cw = self.bitmap.width
  811.       ch = self.bitmap.height
  812.     if cw>ch
  813.      self.zoom_x=200.0/cw
  814.      self.zoom_y=200.0/cw
  815.    else
  816.      self.zoom_x=200.0/ch
  817.      self.zoom_y=200.0/ch     
  818.    end
  819.      self.x=10
  820.      self.y=110
  821.       @enemy=enemy
  822.     end
  823.   end
  824.   
  825.   def dispose
  826.     if self.bitmap != nil
  827.       self.bitmap.dispose
  828.     end
  829.     super
  830.   end
  831.   
  832.   def refresh(enemy)
  833.   end
  834. end
  835. class Scene_Battle
  836.   alias start_phase5_old start_phase5
  837.   def start_phase5
  838.     start_phase5_old
  839.     # 怪物图鉴
  840.     for enemy in $game_troop.enemies
  841.       unless enemy.hidden
  842.         $game_party.add_enemy_info(enemy.id, 0)
  843.       end
  844.     end
  845.   end
  846. end

  847. #==================================================================
  848. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  849. #==================================================================









复制代码
夏季烧烤 发表于 2009-12-23 16:16:01
提示: 作者被禁止或删除 内容自动屏蔽
后知后觉 发表于 2009-12-23 15:42:45
就这个脚本仿佛不好找根源
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-12-25 09:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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