Project1

标题: 章节选择 (Ver 1.03)(2/3更新) [打印本页]

作者: 哇哈哈哇哈哈    时间: 2014-8-26 10:55
标题: 章节选择 (Ver 1.03)(2/3更新)
本帖最后由 哇哈哈哇哈哈 于 2015-2-3 19:49 编辑

[box=DarkRed]写在前面[/box]
这是我第一次发脚本,由于RGSS3懂得不是太多,如有错误请指出(=゚ω゚)=
这脚本略作死,主要是做一些章节选择、故事回忆录、快速传送之类的东西吧。(得看你的脑洞了ヾ(´ω゚`))
先发张图预览效果,目前经测试,并没有什么问题。
不要被表面迷惑了,这是一开始的界面

[attach]272302[/attach]
本脚本含有微量卖萌成分ヾ(´ε`ヾ)
由于脚本使用难度不是太高,所以就不发范例工程了。(并没有什么太多技术含量,对于脚本大触们来说这个脚本太过小儿科= =)
冲突率目测很低,因为和大多数RGSS3脚本的写法不太相同。
至于RGSS和RGSS2的版本,看心情吧(・ω・)
2/3 很久就改了,今天发布
  1. #==============================================================================
  2. # ■             【VX Ace】章节选择  - By 哇哈哈哇哈哈(Ver 1.03)
  3. #------------------------------------------------------------------------------
  4. #                           简介:通过章节进行传送。
  5. #                           适用范围:大部分游戏。
  6. #-------------------------------------------------------------------------------
  7. #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  8. #  ※ 基本信息(Basic Information):
  9. #   * 适用:RPGVXAce(RGSS3)
  10. #   * 难度:★★★
  11. #   * 版本:1.03
  12. #   * 编写日期:2014/8/25
  13. #   * 上手度:中等
  14. #   * 兼容性:中等
  15. #+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  16. #------------------------------------------------------------------------------
  17. #                  ※    使用方法、注意事项及更新内容     ※
  18. #------------------------------------------------------------------------------
  19. # ● 使用方法:
  20. #    放入脚本Main之上,为了减少冲突请将脚本尽量往下放置。
  21. #    地图中使用该脚本:local
  22. #    如果章节需要条件开启,请将Value_C所设置的变量序号设置到相应的数值。
  23. #    例如:开启第二章,将3号变量赋值为2。
  24. #    如有疑问请在脚本发布贴内说明。
  25. #    请将章节开启后输入事件脚本saver
  26. #------------------------------------------------------------------------------
  27. #  ● 注意事项:
  28. #   1、请查看该脚本是否用于RMVA上。
  29. #   2、由于脚本未经多次测试,兼容性未知。
  30. #   3、如有BUG请及时反馈。
  31. #------------------------------------------------------------------------------
  32. #  ● 版本更新:
  33. #    * 1.03   12.15
  34. #    1、新增加章节补充说明,提高脚本实用性和灵活性;
  35. #    2、改善多处细节,即使不使用基础脚本也可以运行。
  36. #    * 1.02   11.30
  37. #    1、再次修改脚本,取消大部分全局变量;
  38. #    2、增强脚本兼容性。
  39. #    3、加强细节修正。
  40. #    * 1.01   9.20
  41. #    1、简化语句,修改项位置修改至更容易修改的地方;
  42. #    2、更改章节更新的脚本及位置,使操作更简单。
  43. #    * 1.00   8.26
  44. #    初版发布,脚本制作完成。
  45. #==============================================================================
  46. $wahaha_script = {} if $wahaha_script.nil?
  47. $wahaha_script["local_choose"] = 1.03
  48. module Wahaha
  49.   # 支持此脚本运行的变量序号。
  50.   Value_C = 3
  51.   
  52.   # 章节设置。
  53.   # 其格式为[名称,地图序号,X坐标,Y坐标]。
  54.   Name1 = ["Fleid",1,15,12,"World"]
  55.   Name2 = ["Darkspace",2,10,"Castle"]
  56.   Name3 = ["MagicCastle",3,21,16,"Plain"]
  57.   Name4 = ["Memory",4,13,15,"Crystal"]
  58.   Name5 = ["Final",5,17,11,"Demoncastle"]
  59.   
  60.   # 位于界面右旁的说明。
  61.   Story = ("今天我们所讲的就有这些,你需\n要进行不断的传送才可以成为兄\n贵!!!")
  62.   
  63.   # 在标题画面中是否自动开启章节选择,如果不需要请改为false.
  64.   NewStart = true
  65.   
  66.   # 进入章节选择的背景界面,需要放入游戏根目录/Graphics/Title1文件夹里。
  67.   # 你可以自定义设置。
  68.   Background = "Plain"

  69.   # 第一章是否默认开启?如果不是请改为false.
  70.   Normal_One = true
  71. end
  72. #==============================================================================
  73. # ■                           Script
  74. #------------------------------------------------------------------------------
  75. #     ※ 注意:除注释区内制定修改的脚本以外请勿随意更改,否则会发生脚本错误。
  76. #==============================================================================
  77. #==============================================================================
  78. # ■ Scene_Title
  79. #------------------------------------------------------------------------------
  80. #  标题画面
  81. #==============================================================================
  82. class Scene_Title < Scene_Base
  83.   #--------------------------------------------------------------------------
  84.   # ● 开始处理
  85.   #--------------------------------------------------------------------------
  86.   alias wahaha_orginial_20141031 start
  87.   def start
  88.    wahaha_orginial_20141031
  89.    Wahaha_Save.newdoc_save unless FileTest.exist?("System/Saver_Wahaha.rvdata2")
  90.    Wahaha_Save.newdoc_load if FileTest.exist?("System/Saver_Wahaha.rvdata2")
  91.   end
  92. end
  93. #==============================================================================
  94. # ■ Game_Interpreter
  95. #------------------------------------------------------------------------------
  96. #  事件指令的解释器。
  97. #   本类在 Game_Map、Game_Troop、Game_Event 类的内部使用。
  98. #==============================================================================
  99. class Game_Interpreter
  100.   def saver
  101.     Wahaha_Save.newdoc_save
  102.   end
  103.   def local
  104.     SceneManager.call(Scene_Localer)
  105.   end
  106. end
  107. #==============================================================================
  108. # ■ WahahaSave
  109. #------------------------------------------------------------------------------
  110. #  变量储存的设置。
  111. #==============================================================================
  112. module Wahaha_Save
  113.   #=============================================================================
  114.   # * 将游戏变量储存到一个文件内。
  115.   #=============================================================================
  116.   def self.newdoc_save
  117.     file = File.open("System/Saver_Wahaha.rvdata2","wb")
  118.     Marshal.dump($game_variables, file)
  119.     file.close
  120.   end
  121.   def self.newdoc_load
  122.     file = File.open("System/Saver_Wahaha.rvdata2","rb")
  123.     $game_variables = Marshal.load(file)
  124.     file.close
  125.   end
  126. end
  127. module Check_Locals
  128.   def self.filexist?(kao)
  129.     $game_variables[Wahaha::Value_C] >= kao
  130.   end
  131. end
  132. #==============================================================================
  133. # ■ Scene_Title
  134. #------------------------------------------------------------------------------
  135. #  标题画面。
  136. #==============================================================================
  137. class Scene_Title < Scene_Base
  138.   alias a start
  139.   def start
  140.     a
  141.     Wahaha_Save.newdoc_load
  142.   end
  143.   alias old_command_new_game command_new_game
  144.   def command_new_game
  145.     if Wahaha::NewStart
  146.     close_command_window
  147.     SceneManager.call(Scene_Localer)
  148.     else
  149.     old_command_new_game
  150.     end
  151.   end
  152. end
  153. #==============================================================================
  154. # ■ Window_Localer
  155. #------------------------------------------------------------------------------
  156. #  传送画面的窗口。
  157. #==============================================================================
  158. class Window_Localer < Window_Command
  159.   include Wahaha
  160.   def initialize
  161.     super(0, 0)
  162.     update_placement
  163.     select_symbol(:one) if checker1
  164.     select_symbol(:two) if checker2
  165.     select_symbol(:thr) if checker3
  166.     select_symbol(:fou) if checker4
  167.     select_symbol(:fiv) if checker5
  168.     self.openness = 0
  169.     open
  170.   end
  171.   def window_width
  172.     return 160
  173.   end
  174.   def update_placement
  175.     self.x = 0
  176.     self.y = 50
  177.   end
  178.   def make_command_list
  179.     add_command(Name1[0], :one,checker1)
  180.     add_command(Name2[0], :two,checker2)
  181.     add_command(Name3[0], :thr,checker3)
  182.     add_command(Name4[0], :fou,checker4)
  183.     add_command(Name5[0], :fiv,checker5)
  184.   end
  185.   def checker1
  186.     Check_Locals.filexist?(1)
  187.   end
  188.   def checker2
  189.     Check_Locals.filexist?(2)
  190.   end
  191.   def checker3
  192.     Check_Locals.filexist?(3)
  193.   end
  194.   def checker4
  195.     Check_Locals.filexist?(4)
  196.   end
  197.   def checker5
  198.     Check_Locals.filexist?(5)
  199.   end
  200. end
  201. class Window_Localersyst <Window_Selectable
  202.   def initialize
  203.     super(0, 0, Graphics.width, 50)
  204.     draw_text_ex(4, 1, "★-☆-★-☆-★-☆章节选择★-☆-★-☆-★-☆")
  205.     activate
  206.   end
  207. end
  208. class Window_Localertext < Window_Selectable
  209.   def initialize
  210.     super(160, 50, Graphics.width - 160, Graphics.height - 50)
  211.     draw_text_ex(4, 0, Wahaha::Story)
  212.     activate
  213.   end
  214. end
  215. #==============================================================================
  216. # ■ Scene_Localer
  217. #------------------------------------------------------------------------------
  218. #  传送画面。
  219. #==============================================================================
  220. class Scene_Localer < Scene_Base
  221.   include Wahaha
  222.   def start
  223.     super
  224.     Graphics.freeze
  225.     onesa
  226.     create_command_window
  227.     create_command_window2
  228.     new_background
  229.   end
  230.   def transition_speed
  231.     return 20
  232.   end
  233.   def terminate
  234.     super
  235.     SceneManager.snapshot_for_background
  236.   end
  237.   def onesa
  238.   $game_variables[Value_C] = 1 if Normal_One && $game_variables[Value_C] == 0
  239.   end
  240.   def new_background
  241.     @background_sprite = Sprite.new
  242.     @background_sprite.bitmap = Cache.title1(Background)
  243.     @background_sprite.color.set(16, 16, 16, 128)
  244.   end
  245.   def create_command_window
  246.     @command_window = Window_Localer.new
  247.     @command_window.set_handler(:one, method(:one1))
  248.     @command_window.set_handler(:two, method(:two2))
  249.     @command_window.set_handler(:thr, method(:thr3))
  250.     @command_window.set_handler(:fou, method(:fou4))
  251.     @command_window.set_handler(:fiv, method(:fiv5))
  252.     @command_window.set_handler(:cancel,    method(:return_scene))
  253.   end
  254.   def create_command_window2
  255.     @story_window = Window_Localertext.new
  256.     @story_window.set_handler(:cancel, method(:return_scene))
  257.     @story2_window = Window_Localersyst.new
  258.     @story2_window.set_handler(:cancel, method(:return_scene))
  259.   end
  260.   def close_command_window
  261.     @command_window.close
  262.     update until @command_window.close?
  263.   end
  264.   def same
  265.     close_command_window
  266.     DataManager.setup_new_game
  267.     fadeout_all
  268.   end
  269.   def one1
  270.     same
  271.     $game_map.setup(Name1[1])
  272.     $game_player.moveto(Name1[2],Name1[3])
  273.     $game_map.autoplay
  274.     SceneManager.goto(Scene_Map)
  275.   end
  276.   def two2
  277.     same
  278.     $game_map.setup(Name2[1])
  279.     $game_player.moveto(Name2[2],Name2[3])
  280.     $game_map.autoplay
  281.     SceneManager.goto(Scene_Map)
  282.   end
  283.   def thr3
  284.     same
  285.     $game_map.setup(Name3[1])
  286.     $game_player.moveto(Name3[2],Name3[3])
  287.     $game_map.autoplay
  288.     SceneManager.goto(Scene_Map)
  289.   end
  290.   def fou4
  291.     same
  292.     $game_map.setup(Name4[1])
  293.     $game_player.moveto(Name4[2],Name4[3])
  294.     $game_map.autoplay
  295.     SceneManager.goto(Scene_Map)
  296.   end
  297.   def fiv5
  298.     same
  299.     $game_map.setup(Name5[1])
  300.     $game_player.moveto(Name5[2],Name5[3])
  301.     $game_map.autoplay
  302.     SceneManager.goto(Scene_Map)
  303.   end
  304. end
  305. #==============================================================================
  306. # ■                           脚本结束
  307. #------------------------------------------------------------------------------
  308. #  ※                    The End of Scripts                 2014/8/26 10:04
  309. #==============================================================================
复制代码

4.png (282.77 KB, 下载次数: 24)

4.png

作者: qq408447335    时间: 2014-8-26 11:20
脚本不错 但是用不上
作者: 怪蜀黍    时间: 2014-8-26 12:00
汝的脚本怎么没有层次的喵?看起来很费劲喵~
作者: taroxd    时间: 2014-8-26 12:46
本帖最后由 taroxd 于 2014-8-26 12:47 编辑

首先,这脚本风格简直看不下去

另外,看了几眼就看出个bug。不在文件里写一点东西作为验证吗?不然我只要自己新建一个文件就能解锁了。

还不如使用喵呜喵5的全局变量脚本来判断章节。
作者: 喵呜喵5    时间: 2014-8-26 13:32
Dir.glob("dierzhang.wahaha").empty?
File.open("dierzhang.wahaha","w+"){|io|}
……………………

感觉自己好像回到了当年那个使用通关密码来开启游戏章节的FC时代…………

以及这个代码的缩进,虽然挺整齐的,看着真心难受…………
作者: 怪蜀黍    时间: 2014-8-26 14:41
其实汝的脚本长度可以大幅缩短,def one ~ def nin 内容完全相同,可以引入参数x,y,m把他们合并喵~顺便吐槽three为什么缩写成thi?
作者: taroxd    时间: 2014-8-26 15:35
本帖最后由 taroxd 于 2014-8-26 15:47 编辑
怪蜀黍 发表于 2014-8-26 14:41
其实汝的脚本长度可以大幅缩短,def one ~ def nin 内容完全相同,可以引入参数x,y,m把他们合并喵~顺便吐槽 ...


其实这些东西拿元编程生成代码比较合适。
这样的好处是新增章节时只要修改常量即可,完全不用修改下面的代码。
作者: 寒冷魔王    时间: 2014-8-26 17:38
本帖最后由 寒冷魔王 于 2014-8-26 17:41 编辑

脚本中的事件,有点麻烦。建议多合一。

RUBY 代码复制
  1. @command_window.set_handler(:one, method(:one))
  2. @command_window.set_handler(:two, method(:two))
  3. @command_window.set_handler(:thi, method(:thi))
  4. @command_window.set_handler(:fou, method(:fou))
  5. @command_window.set_handler(:fiv, method(:fiv))
  6. @command_window.set_handler(:six, method(:six))
  7. @command_window.set_handler(:sev, method(:sev))
  8. @command_window.set_handler(:eig, method(:eig))
  9. @command_window.set_handler(:nin, method(:nin))


就不能设成一行吗?用个数组。
而且只有九章像我这种喜欢N多章节的貌似还要一个一个地去加上。所以说像是事件做的那种感觉。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1