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

Project1

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

显示ARPG用的窗口有漏洞

 关闭 [复制链接]

Lv1.梦旅人

幻想

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-12-23
帖子
1016
跳转到指定楼层
1
发表于 2008-2-18 09:41:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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




  4. #◆◇◆◇◆-----XRXS54. マップ上で簡易ウィンドウ表示 ver1.0 -----◇◆◇◆◇
  5. # by 刻宮

  6. # 「ディフォルト機能 & 仕様」
  7. #  ・$WIN_2 = true。としても、スイッチがONでかつ、アクターが存在しなければ
  8. #   ウィンドウは表示されません。この3要素が揃った時にウィンドウを表示します。
  9. #  ・逆にこの要素が一つでも欠けるとウィンドウは自動的に非表示になります。
  10. #  ・ツクール開始時はスイッチはOFFなので、ONにしないと表示されません。
  11. #------------------------------------------------------------------
  12. # カスタマイズポイント
  13. #(*存在しないスイッチを指定されるとエラーになります。)


  14. #----------------------------------------------------------------
  15. # 使用说明(66RPG提示:本脚本其实难度不是很高,建议学习RGSS略有心得
  16. #           的人尝试自己编写一个同类功能窗口)
  17. #----------------------------------------------------------------
  18.   WIN_1     = true  # 是否使用1号窗口,true为使用,false为不使用
  19.   SWITVH_1  = 26    # 当此编号开关打开的时候窗口显示。如设置为40则40号开关打开,1号窗口显示
  20.   OPACITY_1 = 144   # 1号窗口透明度
  21.   X_1       = 0     # 1号窗口X坐标
  22.   Y_1       = 384   # 1号窗口Y坐标
  23.   
  24.   $WIN_2    = true  # 是否使用2号窗口,true为使用,false为不使用
  25.   SWITVH_2  = 27   # 当此编号开关打开的时候窗口显示。如设置为41则41号开关打开,2号窗口显示
  26.   OPACITY_2 = 144   # 2号窗口透明度
  27.   X_2       = 160   # 2号窗口X坐标
  28.   Y_2       = 384   # 2号窗口Y坐标
  29.   
  30.   WIN_3     = true  # 是否使用3号窗口,true为使用,false为不使用
  31.   SWITVH_3  = 28    # 当此编号开关打开的时候窗口显示。如设置为42则42号开关打开,3号窗口显示
  32.   OPACITY_3 = 144   # 3号窗口透明度
  33.   X_3       = 320   # 3号窗口X坐标
  34.   Y_3       = 384   # 3号窗口Y坐标
  35.   
  36.   WIN_4     = true  # 是否使用4号窗口,true为使用,false为不使用
  37.   SWITVH_4  = 29    # 当此编号开关打开的时候窗口显示。如设置为43则43号开关打开,4号窗口显示
  38.   OPACITY_4 = 144   # 4号窗口透明度
  39.   X_4       = 480   # 4号窗口X坐标
  40.   Y_4       = 384   # 4号窗口Y坐标
  41.   
  42.   SET_SP    = [true,false,true,true] # 决定各个窗口是否显示SP数值,true为显示,false为不显示。
  43.   OPTION    = 30    # 决定在对话的时候是否让窗口隐藏的开关编号。
  44.                     # 比如设置为44,则当44号开关打开,则在对话的时候窗口隐藏
  45.                     # 否则窗口不隐藏。
  46.                     
  47.                     
  48. #=========================================================================
  49. # ■ Scene_Map
  50. #=========================================================================
  51. class Scene_Map
  52.   #---------------------------------------------------------------------
  53.   # ● フレーム更新
  54.   #---------------------------------------------------------------------
  55.   alias main_tokimiya main
  56.   def main
  57.     # 簡易ウィンドウ1を作成
  58.       @simple_window1 = Window_MapStatus.new(X_1,Y_1,0)
  59.       @simple_window1.opacity = OPACITY_1
  60.       @simple_window1.visible = $game_switches[SWITVH_1]
  61.       unless $game_party.actors.size > 0
  62.         @simple_window1.visible = false
  63.       end
  64.     # 簡易ウィンドウ2を作成
  65.       @simple_window2 = Window_MapStatus.new(X_2,Y_2,1)
  66.       @simple_window2.opacity = OPACITY_2
  67.       @simple_window2.visible = $game_switches[SWITVH_2]
  68.       unless $game_party.actors.size > 1
  69.         @simple_window2.visible = false
  70.       end
  71.     # 簡易ウィンドウ3を作成
  72.       @simple_window3 = Window_MapStatus.new(X_3,Y_3,2)
  73.       @simple_window3.opacity = OPACITY_3
  74.       @simple_window3.visible = $game_switches[SWITVH_3]
  75.       unless $game_party.actors.size > 2
  76.         @simple_window3.visible = false
  77.       end
  78.     # 簡易ウィンドウ4を作成
  79.       @simple_window4 = Window_MapStatus.new(X_4,Y_4,3)
  80.       @simple_window4.opacity = OPACITY_4
  81.       @simple_window4.visible = $game_switches[SWITVH_4]
  82.       unless $game_party.actors.size > 3
  83.         @simple_window4.visible = false
  84.       end
  85.    
  86.       main_tokimiya   # 旧メソッドの呼び出し
  87.    
  88.     # 簡易ウィンドウの解放
  89.       @simple_window1.dispose
  90.       @simple_window2.dispose
  91.       @simple_window3.dispose
  92.       @simple_window4.dispose
  93.   end

  94.   #---------------------------------------------------------------------
  95.   # ● フレーム更新
  96.   #---------------------------------------------------------------------
  97.   alias update_tokimiya update
  98.   def update
  99.     update_tokimiya   # 旧メソッドの呼び出し
  100.     # 以前のパラメーターと相違があれば、内容を更新する。
  101.     #
  102.     # ウィンドウ1の更新。
  103.     if WIN_1 == true and $game_party.actors.size > 0
  104.       # データの更新
  105.       actor = $game_party.actors[0]
  106.       factor_1 = @simple_window1.before_1[0] != actor.name
  107.       factor_2 = @simple_window1.before_1[1] != actor.hp
  108.       factor_3 = @simple_window1.before_1[2] != actor.sp
  109.       if factor_1 or factor_2 or factor_3
  110.         @simple_window1.before_1[0] = actor.name
  111.         @simple_window1.before_1[1] = actor.hp
  112.         @simple_window1.before_1[2] = actor.sp
  113.         @simple_window1.refresh(0)
  114.       end
  115.       # 非表示機能の実行
  116.       if @message_window.visible == true and $game_switches[OPTION] == true
  117.         @simple_window1.before_1[3] = false
  118.         @simple_window1.visible = false
  119.       elsif @simple_window1.before_1[3] != $game_switches[SWITVH_1]
  120.         @simple_window1.before_1[3] = $game_switches[SWITVH_1]
  121.         @simple_window1.visible = $game_switches[SWITVH_1]
  122.       end
  123.     end
  124.    
  125.     # ウィンドウ2の更新。
  126.     if $WIN_2 == true and $game_party.actors.size > 1
  127.       # データの更新
  128.       actor = $game_party.actors[1]
  129.       factor_1 = @simple_window2.before_2[0] != actor.name
  130.       factor_2 = @simple_window2.before_2[1] != actor.hp
  131.       factor_3 = @simple_window2.before_2[2] != actor.sp
  132.       if factor_1 or factor_2 or factor_3
  133.         @simple_window2.before_2[0] = actor.name
  134.         @simple_window2.before_2[1] = actor.hp
  135.         @simple_window2.before_2[2] = actor.sp
  136.         @simple_window2.refresh(1)
  137.         # ウィンドウを強制的に生成
  138.         @simple_window2.before_2[3] = true
  139.         @simple_window2.visible = true
  140.       end
  141.       # 非表示機能の実行
  142.       if @message_window.visible == true and $game_switches[OPTION] == true
  143.         @simple_window2.before_2[3] = false
  144.         @simple_window2.visible = false
  145.       elsif @simple_window2.before_2[3] != $game_switches[SWITVH_2]
  146.         @simple_window2.before_2[3] = $game_switches[SWITVH_2]
  147.         @simple_window2.visible = $game_switches[SWITVH_2]
  148.       end
  149.     # アクターが存在しないのにウィンドウが表示されたままの場合。
  150.     elsif @simple_window2.visible == true and @simple_window2.before_2 != nil
  151.       # ウィンドウを消去。
  152.       @simple_window2.before_2[3] = false
  153.       @simple_window2.visible = false
  154.     end
  155.    
  156.     # ウィンドウ3の更新。
  157.     if WIN_3 == true and $game_party.actors.size > 2
  158.       # データの更新
  159.       actor = $game_party.actors[2]
  160.       factor_1 = @simple_window3.before_3[0] != actor.name
  161.       factor_2 = @simple_window3.before_3[1] != actor.hp
  162.       factor_3 = @simple_window3.before_3[2] != actor.sp
  163.       if factor_1 or factor_2 or factor_3
  164.         @simple_window3.before_3[0] = actor.name
  165.         @simple_window3.before_3[1] = actor.hp
  166.         @simple_window3.before_3[2] = actor.sp
  167.         @simple_window3.refresh(2)
  168.         # ウィンドウを強制的に生成
  169.         @simple_window3.before_3[3] = true
  170.         @simple_window3.visible = true
  171.       end
  172.       # 非表示機能の実行
  173.       if @message_window.visible == true and $game_switches[OPTION] == true
  174.         @simple_window3.before_3[3] = false
  175.         @simple_window3.visible = false
  176.       elsif @simple_window3.before_3[3] != $game_switches[SWITVH_3]
  177.         @simple_window3.before_3[3] = $game_switches[SWITVH_3]
  178.         @simple_window3.visible = $game_switches[SWITVH_3]
  179.       end
  180.     # アクターが存在しないのにウィンドウが表示されたままの場合。
  181.     elsif @simple_window3.visible == true and @simple_window3.before_3 != nil
  182.       # ウィンドウを消去。
  183.       @simple_window3.before_3[3] = false
  184.       @simple_window3.visible = false
  185.     end
  186.    
  187.     # ウィンドウ4の更新。
  188.     if WIN_4 == true and $game_party.actors.size > 3
  189.       # データの更新
  190.       actor = $game_party.actors[3]
  191.       factor_1 = @simple_window4.before_4[0] != actor.name
  192.       factor_2 = @simple_window4.before_4[1] != actor.hp
  193.       factor_3 = @simple_window4.before_4[2] != actor.sp
  194.       if factor_1 or factor_2 or factor_3
  195.         @simple_window4.before_4[0] = actor.name
  196.         @simple_window4.before_4[1] = actor.hp
  197.         @simple_window4.before_4[2] = actor.sp
  198.         @simple_window4.refresh(3)
  199.         # ウィンドウを強制的に生成
  200.         @simple_window4.before_4[3] = true
  201.         @simple_window4.visible = true
  202.       end
  203.       # 非表示機能の実行
  204.       if @message_window.visible == true and $game_switches[OPTION] == true
  205.         @simple_window4.before_4[3] = false
  206.         @simple_window4.visible = false
  207.       elsif @simple_window4.before_4[3] != $game_switches[SWITVH_4]
  208.         @simple_window4.before_4[3] = $game_switches[SWITVH_4]
  209.         @simple_window4.visible = $game_switches[SWITVH_4]
  210.       end
  211.     # アクターが存在しないのにウィンドウが表示されたままの場合。
  212.     elsif @simple_window4.visible == true and @simple_window4.before_4 != nil
  213.       # ウィンドウを消去。
  214.       @simple_window4.before_4[3] = false
  215.       @simple_window4.visible = false
  216.     end
  217.   end
  218. end



  219. #=========================================================================
  220. # ■ Window_MapStatus,脚本来自www.66rpg.com,转载请注意说明
  221. #=========================================================================
  222. class Window_MapStatus < Window_Base
  223.   #--------------------------------------------------------------------------
  224.   # ○ 公開インスタンス変数
  225.   #--------------------------------------------------------------------------
  226.   attr_accessor   :before_1              # 更新前のウィンドウ1のパラメーター
  227.   attr_accessor   :before_2              # 更新前のウィンドウ2のパラメーター
  228.   attr_accessor   :before_3              # 更新前のウィンドウ3のパラメーター
  229.   attr_accessor   :before_4              # 更新前のウィンドウ4のパラメーター
  230.   #---------------------------------------------------------------------
  231.   # ● フレーム更新
  232.   #---------------------------------------------------------------------
  233.   def initialize(x,y,id)
  234.     super(x,y,160,96)
  235.     self.contents = Bitmap.new(width - 32, height - 32)
  236.     self.contents.font.size = 18
  237.     @before_1=[]
  238.     @before_2=[]
  239.     @before_3=[]
  240.     @before_4=[]
  241.      # 現段階のアクターのパラメーターと可視状態を記憶。
  242.     data
  243.     # 項目の描画。
  244.     refresh(id)
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ● 項目の描画
  248.   #--------------------------------------------------------------------------
  249.   def data
  250.     # アクター1の記憶(ただし、パーティが1名以上の場合)
  251.     if $game_party.actors.size > 0
  252.       actor = $game_party.actors[0]
  253.       @before_1 = [actor.name, actor.hp, actor.sp,true]
  254.     end
  255.     # アクター2の記憶(ただし、パーティが2名以上の場合)
  256.     if $game_party.actors.size > 1
  257.       actor = $game_party.actors[1]
  258.       @before_2 = [actor.name, actor.hp, actor.sp,true]
  259.     end
  260.     # アクター3の記憶(ただし、パーティが3名以上の場合)
  261.     if $game_party.actors.size > 2
  262.       actor = $game_party.actors[2]
  263.       @before_3 = [actor.name, actor.hp, actor.sp,true]
  264.     end
  265.     # アクター3の記憶(ただし、パーティが4名以上の場合)
  266.     if $game_party.actors.size > 3
  267.       actor = $game_party.actors[3]
  268.       @before_4 = [actor.name, actor.hp, actor.sp,true]
  269.     end
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 項目の描画
  273.   #--------------------------------------------------------------------------
  274.   def refresh(id)
  275.     # 再描画のために一旦内容を破棄する
  276.     self.contents.clear
  277.     # 対応するアクターがいなければ、何もせずに終了する。
  278.     actor = $game_party.actors[id]
  279.     if actor == nil
  280.       return
  281.     end
  282.     # 名前の描画
  283.     draw_actor_name(actor, 0, -5)
  284.     # HPの描画
  285.     if SET_SP[id]
  286.       draw_actor_hp_custom(actor, 0, 18)
  287.     else
  288.       draw_actor_hp_custom(actor, 0, 28)
  289.     end
  290.     # SPの描画
  291.     if SET_SP[id]
  292.       draw_actor_sp_custom(actor, 0, 36)
  293.     end
  294.   end
  295.   
  296.   #--------------------------------------------------------------------------
  297.   # ● HP の描画
  298.   #     actor : アクター
  299.   #     x     : 描画先 X 座標
  300.   #     y     : 描画先 Y 座標
  301.   #     width : 描画先の幅
  302.   #--------------------------------------------------------------------------
  303.   def draw_actor_hp_custom(actor, x, y, width = 144)
  304.     # 文字列 "HP" を描画
  305.     self.contents.font.color = system_color
  306.     self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
  307.     # MaxHP を描画するスペースがあるか計算
  308.     if width - 32 >= 108
  309.       hp_x = x + width - 108
  310.       flag = true
  311.     elsif width - 32 >= 48
  312.       hp_x = x + width - 48
  313.       flag = false
  314.     end
  315.     # HP を描画
  316.     self.contents.font.color = actor.hp == 0 ? knockout_color :
  317.       actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
  318.     self.contents.draw_text(hp_x - 12, y, 48, 32, actor.hp.to_s, 2)
  319.     # MaxHP を描画
  320.     if flag
  321.       self.contents.font.color = normal_color
  322.       self.contents.draw_text(hp_x + 48 - 12, y, 12, 32, "/", 1)
  323.       self.contents.draw_text(hp_x + 60 - 12, y, 48, 32, actor.maxhp.to_s)
  324.     end
  325.   end
  326.   #--------------------------------------------------------------------------
  327.   # ● SP の描画
  328.   #     actor : アクター
  329.   #     x     : 描画先 X 座標
  330.   #     y     : 描画先 Y 座標
  331.   #     width : 描画先の幅
  332.   #--------------------------------------------------------------------------
  333.   def draw_actor_sp_custom(actor, x, y, width = 144)
  334.     # 文字列 "SP" を描画
  335.     self.contents.font.color = system_color
  336.     self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
  337.     # MaxSP を描画するスペースがあるか計算
  338.     if width - 32 >= 108
  339.       sp_x = x + width - 108
  340.       flag = true
  341.     elsif width - 32 >= 48
  342.       sp_x = x + width - 48
  343.       flag = false
  344.     end
  345.     # SP を描画
  346.     self.contents.font.color = actor.sp == 0 ? knockout_color :
  347.       actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
  348.     self.contents.draw_text(sp_x - 12, y, 48, 32, actor.sp.to_s, 2)
  349.     # MaxSP を描画
  350.     if flag
  351.       self.contents.font.color = normal_color
  352.       self.contents.draw_text(sp_x + 48 - 12, y, 12, 32, "/", 1)
  353.       self.contents.draw_text(sp_x + 60 - 12, y, 48, 32, actor.maxsp.to_s)
  354.     end
  355.   end
  356. end

  357. #==============================================================================
  358. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  359. #==============================================================================
复制代码
这是显示ARPG用的窗口,但是第二个角色就是不显示SP只显示HP其他3个角色没问题。怎么加个职业显示上去,能把数字改成血条么~?




----------------版务----------------
如果问题未解决,请继续提问
如果问题已解决,请结贴
若到末贴发贴时间后一周仍未结贴
管理员会自动为你过期帖子、结贴或强行认可答案(好人卡-1)


此贴于 2008-2-20 7:49:52 被版主凌冰提醒,请楼主看到后对本贴做出回应。
[url=http://rpg.blue/upload_program/d/菜鸟飞呀飞_love_111006892.jpg]http://rpg.blue/upload_program/d/菜鸟飞呀飞_love_111006892.jpg[/url][FLY][url=http://rpg.blue/upload_program/d/菜鸟飞呀飞_yz_tb_111008420.png]http://rpg.blue/upload_program/d/菜鸟飞呀飞_yz_tb_111008420.png[/url][/FLY][url=http://rpg.blue/upload_program/d/菜鸟飞呀飞_yzs_111008459.png]http://rpg.blue/upload_program/d/菜鸟飞呀飞_yzs_111008459.png[/url]

Lv1.梦旅人

幻想

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-12-23
帖子
1016
2
 楼主| 发表于 2008-2-18 18:53:43 | 只看该作者
顶下,大家来看看
版主对此帖的评论:『36小时内不许自顶帖子。』,积分『-5』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
[url=http://rpg.blue/upload_program/d/菜鸟飞呀飞_love_111006892.jpg]http://rpg.blue/upload_program/d/菜鸟飞呀飞_love_111006892.jpg[/url][FLY][url=http://rpg.blue/upload_program/d/菜鸟飞呀飞_yz_tb_111008420.png]http://rpg.blue/upload_program/d/菜鸟飞呀飞_yz_tb_111008420.png[/url][/FLY][url=http://rpg.blue/upload_program/d/菜鸟飞呀飞_yzs_111008459.png]http://rpg.blue/upload_program/d/菜鸟飞呀飞_yzs_111008459.png[/url]
回复 支持 反对

使用道具 举报

Lv1.梦旅人

幻想

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-12-23
帖子
1016
3
 楼主| 发表于 2008-2-20 18:54:18 | 只看该作者
顶下贴{/pz}大家来看看
版主对此帖的评论:『单独看脚本没有问题,最好把工程上传或者说说你改了那里吧』,积分『-0』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
[url=http://rpg.blue/upload_program/d/菜鸟飞呀飞_love_111006892.jpg]http://rpg.blue/upload_program/d/菜鸟飞呀飞_love_111006892.jpg[/url][FLY][url=http://rpg.blue/upload_program/d/菜鸟飞呀飞_yz_tb_111008420.png]http://rpg.blue/upload_program/d/菜鸟飞呀飞_yz_tb_111008420.png[/url][/FLY][url=http://rpg.blue/upload_program/d/菜鸟飞呀飞_yzs_111008459.png]http://rpg.blue/upload_program/d/菜鸟飞呀飞_yzs_111008459.png[/url]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-2 17:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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