Project1

标题: 能否利用脚本制作生存解谜类游戏菜单和系统 [打印本页]

作者: KaiRus    时间: 2014-11-2 00:41
标题: 能否利用脚本制作生存解谜类游戏菜单和系统
RT,最近在下想要用尘封已久的rmvx制作一个现实风格的冒险解谜类游戏
开头剧情啦,开始画面啦,剧本神马的都已经弄得差不多了
突然想到一个问题
就是像这样的游戏如果纯是用事件之类的制作密码、道具解锁之类的有点简单
最近玩了几款解密游戏,发现背包限制系统和道具组合系统非常不错,能够大大的增加谜题难度和游戏的多样性
那么问题就来了。。。。。
现在站里搜索到的合成系统多数是以rpg游戏里的打造或炼成这样感觉的系统脚本为多,达不到预期的效果啊
好比拥有“小恢复剂”2个,能够合成一个“中恢复剂”,合成菜单全都是固定的显示在一边,一点就直接合成了,这样合成感觉一点没有解谜性吗。。。如果有些需要动点脑子考虑用什么道具合成的状况就和毫无意义了
所以现在想要的结果就是,可以再游戏菜单中增加一个“合成/分解”的选项
然后可以对手中的道具进行操作,选择2种道具进行合成(手电(空)+电池=手电),或将1件道具分解成多个道具(?盒子=包装盒+宝石)这样的效果
具体范例可以想象为早期的生化危机,或是同为vx的游戏黑暗研究所
身为一名复出新手,这样的脚本真心有点难搞定,望哪位大大可以帮忙看一下,或者有相同研究方向的人也可以联系我,大家一起探讨下
感激不尽!
作者: 永燃的狂炎    时间: 2014-11-2 00:56
Q.能否利用脚本制作生存解谜类游戏菜单和系统
A.能。

版主可以结帖了。
作者: KaiRus    时间: 2014-11-2 00:59
  1. ==============================================================================
  2. # ■ Survival Engine's Scene_Menu
  3. #------------------------------------------------------------------------------
  4. #  サバイバルホラー風のメニュースクリプトです
  5. #==============================================================================

  6. class Scene_Menu < Scene_Base  
  7.    
  8.   ###################################################################
  9.   
  10.   CMENU_S1 = "档案"
  11.   CMENU_S2 = "使用"
  12.   CMENU_S3 = "装备"
  13.   CMENU_S4 = "合成"
  14.   CMENU_S5 = "排列/丢弃"
  15.   CMENU_S6 = "状态"

  16.   CMENU_S8 = "保存"
  17.   CMENU_S9 = "退出"
  18.   
  19.   CMENU_COM1 = "浏览目前为止登记的档案"
  20.   CMENU_COM2 = "使用背包里的物品"
  21.   CMENU_COM3 = "装备背包里的物品"
  22.   CMENU_COM4 = "组合背包里的物品"
  23.   CMENU_COM5 = "对背包的物品进行排列/丢弃"
  24.   CMENU_COM6 = "确认目前所引发的症状"
  25.   
  26.   CMENU_COM8 = "保存进度"
  27.   CMENU_COM9 = "结束游戏"
  28.   ###################################################################
  29.   #--------------------------------------------------------------------------
  30.   # ● 初期化処理
  31.   #--------------------------------------------------------------------------
  32.   def initialize(dind = 0, aflg = false)
  33.     @animflg = aflg
  34.     @defind = dind
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 初期openness処理
  38.   #--------------------------------------------------------------------------
  39.   def get_openness
  40.     if ( @animflg == false )
  41.       return 0
  42.     else
  43.       return 255
  44.     end
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 開始処理
  48.   #--------------------------------------------------------------------------
  49.   def start
  50.     create_menu_background
  51.     @info_window = Window_Help.new()
  52.     @info_window.openness = get_openness
  53.     @info_window.open
  54.     create_mainmenu_window
  55.     @mainmenu_window.openness = get_openness
  56.     @mainmenu_window.open
  57.     create_itemmenu_window
  58.     @itemmenu_window.openness = get_openness
  59.     @itemmenu_window.open
  60.     @menumode = 0
  61.     @getval_message_window = -1
  62.     @selecting_message_window = false
  63.     create_status_window
  64.    
  65.     @window_oppoint = [0, -3, -6, -9, -12, -15, -18]
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 終了処理
  69.   #--------------------------------------------------------------------------
  70.   def terminate
  71.     dispose_menu_background
  72.     @mainmenu_window.dispose
  73.     @itemmenu_window.dispose
  74.     @info_window.dispose
  75.     dispose_status_window
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 背景作成
  79.   #--------------------------------------------------------------------------
  80.   def create_menu_background
  81.     super
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● メインメニューウィンドウ作成
  85.   #--------------------------------------------------------------------------
  86.   def create_mainmenu_window
  87.     @mainmenucolumn = [0, 0]
  88.     @mainmenucolumn_description = [CMENU_COM1, CMENU_COM2, CMENU_COM3, CMENU_COM4, CMENU_COM5, CMENU_COM6, CMENU_COM8, CMENU_COM9]
  89.     @mainmenu_window = Window_Command.new(140, [CMENU_S1, CMENU_S2, CMENU_S3, CMENU_S4, CMENU_S5, CMENU_S6, CMENU_S8, CMENU_S9], 1, 0, 32, 1)
  90.     @mainmenu_window.height = 416 - @info_window.height - 132
  91.     @mainmenu_window.x =  0
  92.     @mainmenu_window.y =  @info_window.height
  93.     @mainmenu_window.index = @defind
  94.     if $game_system.save_disabled             # セーブ禁止の場合
  95.       @mainmenu_window.draw_item(6, false)     # セーブを無効化
  96.     end
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● アイテムウィンドウ作成
  100.   #--------------------------------------------------------------------------
  101.   def create_itemmenu_window
  102.     itemmenucolumn_name = [0, 0]
  103.     for i in 0..$se_gs.get_item_capacity - 1
  104.       itemmenucolumn_name[i] = $se_gs.get_item(i, "name")
  105.     end
  106.     @itemmenu_window = Window_Command.new(544 - @mainmenu_window.width, itemmenucolumn_name, 2, 0, 32)
  107.     @itemmenu_window.x = @mainmenu_window.width
  108.     @itemmenu_window.y = @info_window.height
  109.     @itemmenu_window.index = -1
  110.     @itemmenu_window.height = @mainmenu_window.height
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● アイテムウィンドウ再絵画
  114.   #--------------------------------------------------------------------------
  115.   def redraw_itemmenu_window
  116.     tempindex = @itemmenu_window.index
  117.     itemmenucolumn_name = [0, 0]
  118.     for i in 0..$se_gs.get_item_capacity - 1
  119.       itemmenucolumn_name[i] = $se_gs.get_item(i, "name")
  120.     end
  121.     @itemmenu_window.redraw(itemmenucolumn_name)
  122.     disabling_unselectable_item
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● ステータスウィンドウ作成
  126.   #--------------------------------------------------------------------------
  127.   def create_status_window
  128.     @hp_window = Window_Base.new(544 - 132 - 99, 416 - 132, 132, 132)
  129.     @hp_window.openness = get_openness
  130.     @hp_window.open
  131.     @stamina_window = Window_Base.new(544 - 132 - 132 - 99, 416 - 132, 132, 132)
  132.     @stamina_window.openness = get_openness
  133.     @stamina_window.open
  134.     @profile_window = Window_Base.new(0, 416 - 132, 544 - 132 - 132 - 99, 132)
  135.     @profile_window.openness = get_openness
  136.     @profile_window.open
  137.     @status_window = Window_Command.new(99, $se_gs.get_visible_state_list("name"), 1, 0, 32, 1)
  138.     @status_window.x = 544 - 99
  139.     @status_window.y = @itemmenu_window.y + @itemmenu_window.height
  140.     @status_window.height = 416 - @info_window.height - @itemmenu_window.height
  141.     @status_window.openness = get_openness
  142.     @status_window.open
  143.     @status_window.index = -1
  144.    
  145.     redraw_status_window
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● ステータスウィンドウ開放
  149.   #--------------------------------------------------------------------------
  150.   def dispose_status_window
  151.     @hp_window.dispose
  152.     @stamina_window.dispose
  153.     @profile_window.dispose
  154.     @status_window.dispose
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● ステータスウィンドウ再絵画
  158.   #--------------------------------------------------------------------------
  159.   def redraw_status_window
  160.     @hp_window.contents.clear
  161.     hpper = $se_gs.get_state_hp * 100 / $se_gs.get_state_hpmax
  162.     if 80 < hpper
  163.       hpbmp = Cache.picture("life_fine")
  164.     elsif 60 < hpper
  165.       hpbmp = Cache.picture("life_good")
  166.     elsif 40 < hpper
  167.       hpbmp = Cache.picture("life_passable")
  168.     elsif 20 < hpper
  169.       hpbmp = Cache.picture("life_bad")
  170.     else
  171.       hpbmp = Cache.picture("life_danger")
  172.     end
  173.     rect = Rect.new(0, 0, hpbmp.width, hpbmp.height )
  174.     @hp_window.contents.blt(0, 0, hpbmp, rect)
  175.     @hp_window.contents.draw_text(0, 0, 100, 24 , "LIFE")
  176.     if $game_switches[1] == true
  177.       @hp_window.contents.draw_text(0, 100 - 24, 100, 24, sprintf("%d/%d", $se_gs.get_state_hp, $se_gs.get_state_hpmax), 2)
  178.     end
  179.    
  180.     @stamina_window.contents.clear
  181.     staminaper = $se_gs.get_state_stamina * 100 / $se_gs.get_state_staminamax
  182.     if 80 < staminaper
  183.       staminabmp = Cache.picture("stamina_fine")
  184.     elsif 60 < staminaper
  185.       staminabmp = Cache.picture("stamina_good")
  186.     elsif 40 < staminaper
  187.       staminabmp = Cache.picture("stamina_passable")
  188.     elsif 20 < staminaper
  189.       staminabmp = Cache.picture("stamina_bad")
  190.     else
  191.       staminabmp = Cache.picture("stamina_danger")
  192.     end
  193.     rect = Rect.new(0, 0, staminabmp.width, staminabmp.height )
  194.     @stamina_window.contents.blt(0, 0, staminabmp, rect)
  195.     @stamina_window.contents.draw_text(0, 0, 100, 24 , "STAMINA")
  196.     if $game_switches[1] == true
  197.       @stamina_window.contents.draw_text(0, 100 - 24, 100, 24, sprintf("%d/%d", $se_gs.get_state_stamina, $se_gs.get_state_staminamax), 2)
  198.     end
  199.    
  200.     @profile_window.contents.clear
  201.     @profile_window.contents.draw_text(0, 0, @profile_window.width - 32, 24, "P.N:" + $game_actors[1].name, 0)
  202.     @profile_window.contents.draw_text(0, 24, 200, 24, "第" + $se_gs.get_time_day.to_s + "天", 0)
  203.     @profile_window.contents.draw_text(0, 48, 200, 24, $se_gs.get_time_hou.to_s + ":" + $se_gs.get_time_min.to_s + ":" + $se_gs.get_time_sec.to_s, 0)
  204.    
  205.     equipname = $se_gs.get_equip.name
  206.    
  207.     @profile_window.contents.draw_text(0, @profile_window.height - 32 - 24, @profile_window.width - 32, 24, "EQ[" + equipname + "]", 0)
  208.    
  209.     @status_window.contents.clear
  210.     @status_window.redraw($se_gs.get_visible_state_list("name"))
  211.     @status_window.index = -1
  212.   end

  213.   #--------------------------------------------------------------------------
  214.   # ● 更新処理
  215.   #--------------------------------------------------------------------------
  216.   def update
  217.     super
  218.     returnflg = false
  219.     if ( @mainmenu_window.opening? )
  220.       if ( @window_oppoint[0] >= 0 )
  221.         @mainmenu_window.update
  222.       else
  223.         @window_oppoint[0] += 1
  224.       end
  225.       returnflg = true
  226.     end
  227.     if ( @itemmenu_window.opening? )
  228.       if ( @window_oppoint[1] >= 0 )
  229.         @itemmenu_window.update
  230.       else
  231.         @window_oppoint[1] += 1
  232.       end
  233.       returnflg = true
  234.     end
  235.     if ( @info_window.opening? )
  236.       if ( @window_oppoint[2] >= 0 )
  237.         @info_window.update
  238.       else
  239.         @window_oppoint[2] += 1
  240.       end
  241.       returnflg = true
  242.     end
  243.     if ( @hp_window.opening? )
  244.       if ( @window_oppoint[3] >= 0 )
  245.         @hp_window.update
  246.       else
  247.         @window_oppoint[3] += 1
  248.       end
  249.       returnflg = true
  250.     end
  251.     if ( @stamina_window.opening? )
  252.       if ( @window_oppoint[4] >= 0 )
  253.         @stamina_window.update
  254.       else
  255.         @window_oppoint[4] += 1
  256.       end
  257.       returnflg = true
  258.     end
  259.     if ( @profile_window.opening? )
  260.       if ( @window_oppoint[5] >= 0 )
  261.         @profile_window.update
  262.       else
  263.         @window_oppoint[5] += 1
  264.       end
  265.       returnflg = true
  266.     end
  267.     if ( @status_window.opening? )
  268.       if ( @window_oppoint[6] >= 0 )
  269.         @status_window.update
  270.       else
  271.         @window_oppoint[6] += 1
  272.       end
  273.       returnflg = true
  274.     end
  275.    
  276.     if ( returnflg == true )
  277.       return
  278.     end
  279.    
  280.    
  281.     if ( @selecting_message_window == true )
  282.       @message_window.update
  283.       @getval_message_window = @message_window.get_retval
  284.       if ( @getval_message_window != -1 )
  285.         dispose_message_window
  286.       end
  287.     else
  288.       case @menumode
  289.       when 0 #メインメニュー選択状態の場合
  290.         @mainmenu_window.update
  291.         update_mainmenu_selection
  292.       when 1, 2, 3, 4  #アイテムメニュー選択状態の場合
  293.         update_item_selection
  294.       when 5
  295.         @status_window.update
  296.         update_state_selection
  297.       end
  298.     end
  299.   end
  300.   #--------------------------------------------------------------------------
  301.   # ● メニュー選択処理
  302.   #--------------------------------------------------------------------------
  303.   def update_mainmenu_selection
  304.     #ヘルプウィンドウを更新する
  305.     @info_window.set_text(@mainmenucolumn_description[@mainmenu_window.index])
  306.     #決定、キャンセルの処理
  307.     if Input.trigger?(Input::B)
  308.       Sound.play_cancel
  309.       $scene = Scene_Map.new
  310.     elsif Input.trigger?(Input::C)
  311.       Sound.play_decision
  312.       case @mainmenu_window.index
  313.       when 0      # RESUME
  314.         $scene = Scene_Menu_Files.new
  315.       when 1,2,3,4  # USE,EQUIP,COMBINE,SORT/DISPOSE
  316.         start_item_selection
  317.       when 5
  318.         start_state_selection
  319. #~       when 6      # OPTION
  320. #~         start_option
  321.       when 6      # SAVE
  322.         if ( $game_system.save_disabled ) #セーブ禁止の場合
  323.           Sound.play_buzzer
  324.         else
  325.           $scene = Scene_File.new(true, false, false)
  326.         end
  327.       when 7      # QUIT
  328.         $scene = Scene_End.new
  329.       end
  330.     end
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● アイテム選択開始処理
  334.   #--------------------------------------------------------------------------
  335.   def start_item_selection
  336.     @menumode = @mainmenu_window.index
  337.     @itemmenu_window.index = 0
  338.     @mainmenu_window.index = -1
  339.     case @menumode
  340.     when 1, 2 #USE,EQUIP
  341.       #Nothing
  342.     when 3, 4 #COMBINE,SORT/DISPOSE
  343.       create_seconditemmenu_window
  344.     end
  345.     @itemselect_phase = 0
  346.     disabling_unselectable_item
  347.   end
  348.   #--------------------------------------------------------------------------
  349.   # ● 選択不可能のアイテム名を半透明化させる
  350.   #--------------------------------------------------------------------------
  351.   def disabling_unselectable_item
  352.     @itemmenucolumn_selectable = [0, 0]
  353.     for i in 0..$se_gs.get_item_capacity - 1
  354.       disablefragg = false
  355.       #アイテム選択を開始した時のメインメニューのインデックスで半透明化を判断
  356.       case @menumode
  357.       when 1 #USE
  358.         if /<使用可能>/ === $se_gs.get_item(i, "note")
  359.           disablefragg = false
  360.         else
  361.           disablefragg = true
  362.         end
  363.       when 2 #EQUIP
  364.         if /<装備可能>/ === $se_gs.get_item(i, "note") or ( $se_gs.get_equip.id != 0 and $se_gs.get_item(i, "id" ) == 0 )
  365.           disablefragg = false
  366.         else
  367.           disablefragg = true
  368.         end
  369.       when 3 #COMBINE
  370.         if ( $se_gs.get_item(i, "id") == 0 )
  371.           disablefragg = true
  372.         else
  373.           disablefragg = false
  374.         end
  375.       when 4 #SORT/DISPOSE
  376.         disablefragg = false
  377.       end
  378.       #絵画&フラグ設定
  379.       if ( disablefragg == true )
  380.         @itemmenu_window.draw_item(i, false)
  381.         @itemmenucolumn_selectable[i] = false
  382.       else
  383.         @itemmenucolumn_selectable[i] = true
  384.       end
  385.     end
  386.   end
  387.   #--------------------------------------------------------------------------
  388.   # ● 全アイテムの透明を解除する
  389.   #--------------------------------------------------------------------------
  390.   def enabling_all_items
  391.     for i in 0..$se_gs.get_item_capacity - 1
  392.       @itemmenu_window.draw_item(i, true)
  393.     end
  394.   end
  395.   #--------------------------------------------------------------------------
  396.   # ● アイテム更新処理
  397.   #--------------------------------------------------------------------------
  398.   def update_item_selection
  399.     if ( @getval_message_window != -1 )
  400.       process_item_action
  401.       @getval_message_window = -1
  402.       @itemselect_phase = 0
  403.       return
  404.     end
  405.    
  406.     if ( @itemselect_phase == 1 )
  407.       @seconditemmenu_window.update
  408.     else
  409.       @itemmenu_window.update
  410.     end

  411.     #ヘルプウィンドウを更新する
  412.     if ( @itemselect_phase == 0 )
  413.       @info_window.set_text($se_gs.get_item(@itemmenu_window.index, "description"))
  414.     elsif ( @itemselect_phase == 1 )
  415.       @info_window.set_text($se_gs.get_item(@seconditemmenu_window.index, "description"))
  416.     end

  417.       
  418.     #決定、キャンセルの処理
  419.     if Input.trigger?(Input::B) #キャンセルの場合
  420.       Sound.play_cancel
  421.       if ( @itemselect_phase == 0 ) #第一アイテム選択時
  422.         start_mainmenu_selection
  423.       elsif ( @itemselect_phase == 1 ) #第二アイテム選択時
  424.         @itemmenu_window.index = @seconditemmenu_window.index
  425.         @seconditemmenu_window.index = -1
  426.         @itemmenu_window.active = true
  427.         @itemselect_phase = 0
  428.       end
  429.     elsif Input.trigger?(Input::C) #決定の場合
  430.       Sound.play_decision
  431.       case @menumode
  432.       when 1, 2 #USE,EQUIPの場合
  433.         process_item_select
  434.       when 3, 4 #CONBINE,SORT/DISPOSEの場合
  435.         if ( @itemselect_phase == 0 )
  436.           if ( @itemmenucolumn_selectable[@itemmenu_window.index] == true )
  437.             @itemmenu_window.active = false
  438.             @seconditemmenu_window.index = @itemmenu_window.index
  439.             @itemselect_phase = 1
  440.           else
  441.             Sound.play_buzzer
  442.           end
  443.         elsif ( @itemselect_phase == 1 )
  444.           if ( @itemmenucolumn_selectable[@seconditemmenu_window.index] == true )
  445.             process_item_select
  446.             @itemmenu_window.index = @seconditemmenu_window.index
  447.             @seconditemmenu_window.index = -1
  448.             @itemmenu_window.active = true
  449.             @itemselect_phase = 0
  450.           else
  451.             Sound.play_buzzer
  452.           end
  453.         end
  454.       end
  455.     end
  456.    
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # ● アイテム選択終了処理
  460.   #--------------------------------------------------------------------------
  461.   def start_mainmenu_selection
  462.     @mainmenu_window.index = @menumode
  463.     @menumode = 0
  464.     @itemmenu_window.index = -1
  465.     case @menumode
  466.     when 1, 2 #USE,EQUIP
  467.       #Nothing
  468.     when 3, 4 #COMBINE,SORT/DISPOSE
  469.       @seconditemmenu_window.dispose
  470.     end
  471.     enabling_all_items
  472.   end
  473.   #--------------------------------------------------------------------------
  474.   # ● 第二アイテム選択用のウィンドウを作成
  475.   #--------------------------------------------------------------------------
  476.   def create_seconditemmenu_window
  477.     menucolumn_name = [0, 0]
  478.     for i in 0..$se_gs.get_item_capacity - 1
  479.       menucolumn_name[i] = ""
  480.     end
  481.     @seconditemmenu_window = Window_Command.new(@itemmenu_window.width, menucolumn_name, 2, 0, 32)
  482.     @seconditemmenu_window.x = @mainmenu_window.width
  483.     @seconditemmenu_window.y = @info_window.height
  484.     @seconditemmenu_window.opacity = 0
  485.     @seconditemmenu_window.index = -1
  486.   end
  487.   #--------------------------------------------------------------------------
  488.   # ● アイテム選択完了時の処理を実行
  489.   #--------------------------------------------------------------------------
  490.   def process_item_select
  491.     #選択不能アイテムを選択した時に処理を終了する
  492.     returnflg = false
  493.     case @menumode
  494.     when 1, 2 #USE,EQUIP
  495.       if ( @itemmenucolumn_selectable[@itemmenu_window.index] == false )
  496.         returnflg = true
  497.       end
  498.     when 3, 4 #COMBINE,SORT/DISPOSE
  499.       if ( @itemselect_phase == 0 )
  500.         if ( @itemmenucolumn_selectable[@itemmenu_window.index] == false )
  501.           returnflg = true
  502.         end
  503.       elsif ( @itemselect_phase == 1 )
  504.         if ( @itemmenucolumn_selectable[@seconditemmenu_window.index] == false )
  505.           returnflg = true
  506.         end
  507.       end
  508.     end
  509.     if ( returnflg == true )
  510.       Sound.play_buzzer
  511.       return
  512.     end
  513.    
  514.     #ここから
  515.     case @menumode
  516.     when 1 #USE
  517.       @getval_message_window = 1
  518.     when 2 #EQUIP
  519.       $se_gs.set_equip_equiping(@itemmenu_window.index)
  520.       $se_gs.gd_equip_activate = false
  521.       Audio.se_play("Audio/SE/Equip", 80, 100)
  522.       redraw_status_window
  523.       redraw_itemmenu_window
  524.     when 3 #COMBINE
  525.       #同じアイテムを選択したらエラー
  526.       if ( @itemmenu_window.index == @seconditemmenu_window.index )
  527.         Sound.play_buzzer
  528.         create_message_window("选择了相同的物品", "okonly")
  529.       else
  530.         #合成できるかどうかの判定
  531.         combineflg = false
  532.         combinedid = 0
  533.         dcombinedid = 0
  534.         
  535.         
  536.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  537.         if /<合成1 (\d+),(\d+)>/ =~ nt
  538.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  539.             combineflg = true
  540.             combinedid = $2.to_i
  541.           end
  542.         end
  543.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  544.         if /<合成1 (\d+),(\d+)>/ =~ nt
  545.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  546.             combineflg = true
  547.             combinedid = $2.to_i
  548.           end
  549.         end
  550.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  551.         if /<合成2 (\d+),(\d+)>/ =~ nt
  552.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  553.             combineflg = true
  554.             combinedid = $2.to_i
  555.           end
  556.         end
  557.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  558.         if /<合成2 (\d+),(\d+)>/ =~ nt
  559.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  560.             combineflg = true
  561.             combinedid = $2.to_i
  562.           end
  563.         end
  564.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  565.         if /<合成3 (\d+),(\d+)>/ =~ nt
  566.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  567.             combineflg = true
  568.             combinedid = $2.to_i
  569.           end
  570.         end
  571.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  572.         if /<合成3 (\d+),(\d+)>/ =~ nt
  573.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  574.             combineflg = true
  575.             combinedid = $2.to_i
  576.           end
  577.         end
  578.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  579.         if /<合成4 (\d+),(\d+)>/ =~ nt
  580.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  581.             combineflg = true
  582.             combinedid = $2.to_i
  583.           end
  584.         end
  585.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  586.         if /<合成4 (\d+),(\d+)>/ =~ nt
  587.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  588.             combineflg = true
  589.             combinedid = $2.to_i
  590.           end
  591.         end
  592.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  593.         if /<合成5 (\d+),(\d+)>/ =~ nt
  594.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  595.             combineflg = true
  596.             combinedid = $2.to_i
  597.           end
  598.         end
  599.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  600.         if /<合成5 (\d+),(\d+)>/ =~ nt
  601.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  602.             combineflg = true
  603.             combinedid = $2.to_i
  604.           end
  605.         end
  606.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  607.         if /<合成6 (\d+),(\d+)>/ =~ nt
  608.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  609.             combineflg = true
  610.             combinedid = $2.to_i
  611.           end
  612.         end
  613.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  614.         if /<合成6 (\d+),(\d+)>/ =~ nt
  615.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  616.             combineflg = true
  617.             combinedid = $2.to_i
  618.           end
  619.         end
  620.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  621.         if /<合成7 (\d+),(\d+)>/ =~ nt
  622.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  623.             combineflg = true
  624.             combinedid = $2.to_i
  625.           end
  626.         end
  627.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  628.         if /<合成7 (\d+),(\d+)>/ =~ nt
  629.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  630.             combineflg = true
  631.             combinedid = $2.to_i
  632.           end
  633.         end
  634.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  635.         if /<合成8 (\d+),(\d+)>/ =~ nt
  636.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  637.             combineflg = true
  638.             combinedid = $2.to_i
  639.           end
  640.         end
  641.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  642.         if /<合成8 (\d+),(\d+)>/ =~ nt
  643.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  644.             combineflg = true
  645.             combinedid = $2.to_i
  646.           end
  647.         end
  648.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  649.         if /<合成9 (\d+),(\d+)>/ =~ nt
  650.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  651.             combineflg = true
  652.             combinedid = $2.to_i
  653.           end
  654.         end
  655.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  656.         if /<合成9 (\d+),(\d+)>/ =~ nt
  657.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  658.             combineflg = true
  659.             combinedid = $2.to_i
  660.           end
  661.         end
  662.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  663.         if /<合成10 (\d+),(\d+)>/ =~ nt
  664.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  665.             combineflg = true
  666.             combinedid = $2.to_i
  667.           end
  668.         end
  669.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  670.         if /<合成10 (\d+),(\d+)>/ =~ nt
  671.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  672.             combineflg = true
  673.             combinedid = $2.to_i
  674.           end
  675.         end
  676.         
  677.         
  678.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  679.         if /<合成1 (\d+),(\d+)and(\d+)>/ =~ nt
  680.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  681.             combineflg = "double"
  682.             combinedid = $2.to_i
  683.             dcombinedid = $3.to_i
  684.           end
  685.         end
  686.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  687.         if /<合成1 (\d+),(\d+)and(\d+)>/ =~ nt
  688.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  689.             combineflg = "double"
  690.             combinedid = $2.to_i
  691.             dcombinedid = $3.to_i
  692.           end
  693.         end
  694.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  695.         if /<合成2 (\d+),(\d+)and(\d+)>/ =~ nt
  696.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  697.             combineflg = "double"
  698.             combinedid = $2.to_i
  699.             dcombinedid = $3.to_i
  700.           end
  701.         end
  702.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  703.         if /<合成2 (\d+),(\d+)and(\d+)>/ =~ nt
  704.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  705.             combineflg = "double"
  706.             combinedid = $2.to_i
  707.             dcombinedid = $3.to_i
  708.           end
  709.         end
  710.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  711.         if /<合成3 (\d+),(\d+)and(\d+)>/ =~ nt
  712.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  713.             combineflg = "double"
  714.             combinedid = $2.to_i
  715.             dcombinedid = $3.to_i
  716.           end
  717.         end
  718.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  719.         if /<合成3 (\d+),(\d+)and(\d+)>/ =~ nt
  720.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  721.             combineflg = "double"
  722.             combinedid = $2.to_i
  723.             dcombinedid = $3.to_i
  724.           end
  725.         end
  726.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  727.         if /<合成4 (\d+),(\d+)and(\d+)>/ =~ nt
  728.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  729.             combineflg = "double"
  730.             combinedid = $2.to_i
  731.             dcombinedid = $3.to_i
  732.           end
  733.         end
  734.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  735.         if /<合成4 (\d+),(\d+)and(\d+)>/ =~ nt
  736.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  737.             combineflg = "double"
  738.             combinedid = $2.to_i
  739.             dcombinedid = $3.to_i
  740.           end
  741.         end
  742.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  743.         if /<合成5 (\d+),(\d+)and(\d+)>/ =~ nt
  744.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  745.             combineflg = "double"
  746.             combinedid = $2.to_i
  747.             dcombinedid = $3.to_i
  748.           end
  749.         end
  750.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  751.         if /<合成5 (\d+),(\d+)and(\d+)>/ =~ nt
  752.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  753.             combineflg = "double"
  754.             combinedid = $2.to_i
  755.             dcombinedid = $3.to_i
  756.           end
  757.         end
  758.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  759.         if /<合成6 (\d+),(\d+)and(\d+)>/ =~ nt
  760.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  761.             combineflg = "double"
  762.             combinedid = $2.to_i
  763.             dcombinedid = $3.to_i
  764.           end
  765.         end
  766.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  767.         if /<合成6 (\d+),(\d+)and(\d+)>/ =~ nt
  768.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  769.             combineflg = "double"
  770.             combinedid = $2.to_i
  771.             dcombinedid = $3.to_i
  772.           end
  773.         end
  774.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  775.         if /<合成7 (\d+),(\d+)and(\d+)>/ =~ nt
  776.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  777.             combineflg = "double"
  778.             combinedid = $2.to_i
  779.             dcombinedid = $3.to_i
  780.           end
  781.         end
  782.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  783.         if /<合成7 (\d+),(\d+)and(\d+)>/ =~ nt
  784.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  785.             combineflg = "double"
  786.             combinedid = $2.to_i
  787.             dcombinedid = $3.to_i
  788.           end
  789.         end
  790.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  791.         if /<合成8 (\d+),(\d+)and(\d+)>/ =~ nt
  792.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  793.             combineflg = "double"
  794.             combinedid = $2.to_i
  795.             dcombinedid = $3.to_i
  796.           end
  797.         end
  798.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  799.         if /<合成8 (\d+),(\d+)and(\d+)>/ =~ nt
  800.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  801.             combineflg = "double"
  802.             combinedid = $2.to_i
  803.             dcombinedid = $3.to_i
  804.           end
  805.         end
  806.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  807.         if /<合成9 (\d+),(\d+)and(\d+)>/ =~ nt
  808.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  809.             combineflg = "double"
  810.             combinedid = $2.to_i
  811.             dcombinedid = $3.to_i
  812.           end
  813.         end
  814.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  815.         if /<合成9 (\d+),(\d+)and(\d+)>/ =~ nt
  816.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  817.             combineflg = "double"
  818.             combinedid = $2.to_i
  819.             dcombinedid = $3.to_i
  820.           end
  821.         end
  822.         nt = $se_gs.get_item(@itemmenu_window.index, "note")
  823.         if /<合成10 (\d+),(\d+)and(\d+)>/ =~ nt
  824.           if ( $se_gs.get_item(@seconditemmenu_window.index, "id") == $1.to_i )
  825.             combineflg = "double"
  826.             combinedid = $2.to_i
  827.             dcombinedid = $3.to_i
  828.           end
  829.         end
  830.         nt = $se_gs.get_item(@seconditemmenu_window.index, "note")
  831.         if /<合成10 (\d+),(\d+)and(\d+)>/ =~ nt
  832.           if ( $se_gs.get_item(@itemmenu_window.index, "id") == $1.to_i )
  833.             combineflg = "double"
  834.             combinedid = $2.to_i
  835.             dcombinedid = $3.to_i
  836.           end
  837.         end

  838.         
  839.         
  840.         
  841.         if ( combineflg == "double" )
  842.           Sound.play_use_skill
  843.           $se_gs.set_item(@seconditemmenu_window.index, combinedid)
  844.           $se_gs.set_item(@itemmenu_window.index, dcombinedid)
  845.           create_message_window("[" + $data_items[combinedid].name + "]、[" + $data_items[dcombinedid].name + "]が完成しました", "okonly")
  846.         elsif ( combineflg == true )
  847.           Sound.play_use_skill
  848.           $se_gs.set_item(@seconditemmenu_window.index, combinedid)
  849.           $se_gs.set_item(@itemmenu_window.index, 0)
  850.           create_message_window("[" + $data_items[combinedid].name + "]已合成完毕", "okonly")
  851.         else
  852.           Sound.play_buzzer
  853.           create_message_window("无法进行组合", "okonly")
  854.         end
  855.         
  856.         
  857.       end
  858.     when 4 #SORT/DISPOSE
  859.       #同じアイテムを二度選択したら捨てるコマンド、それ以外なら並べ替え
  860.       if ( @itemmenu_window.index == @seconditemmenu_window.index )
  861.         if ( $se_gs.get_item(@itemmenu_window.index, "id") == 0 )
  862.           #処理なし
  863.         else
  864.           if /<破棄許可/ === $se_gs.get_item(@itemmenu_window.index, "note")
  865.             /<破棄許可 (\d+)>/ =~ $se_gs.get_item(@itemmenu_window.index, "note")
  866.             getval = $1
  867.             getval = getval.to_i
  868.             if ( $game_switches[getval] == true )
  869.               create_message_window("[" + $se_gs.get_item(@itemmenu_window.index, "name") + "]将被丢弃,可以吗?", "okcancel")
  870.             else
  871.               Sound.play_buzzer
  872.               create_message_window("现阶段作为重要的物品而无法丢弃", "okonly")
  873.             end
  874.           else
  875.             create_message_window("[" + $se_gs.get_item(@itemmenu_window.index, "name") + "]将被丢弃,可以吗?", "okcancel")
  876.           end
  877.         end
  878.       else
  879.         $se_gs.change_item(@itemmenu_window.index, @seconditemmenu_window.index )
  880.         redraw_itemmenu_window
  881.       end
  882.     end
  883.   end
  884.   #--------------------------------------------------------------------------
  885.   # ● 実際にアイテムへのアクションを実行する処理
  886.   #--------------------------------------------------------------------------
  887.   def process_item_action
  888.     case @menumode
  889.     when 1 #USE
  890.       if ( @getval_message_window == 1 )#OKを選択した場合
  891.         nt = $se_gs.get_item( @itemmenu_window.index, "note" )
  892.         appedret = $se_gs.application_note(nt, "mustlive")
  893.         if ( $se_gs.get_item(@itemmenu_window.index, "all").delete_one == true )
  894.           if /<使用変化 (\d+)>/ =~ nt
  895.             nxtget = $1.to_i
  896.           else
  897.             nxtget = 0
  898.           end
  899.           $se_gs.set_item( @itemmenu_window.index, nxtget )
  900.         end
  901.         Sound.play_use_item
  902.         redraw_itemmenu_window
  903.         redraw_status_window
  904.         if ( appedret == "menuend" )
  905.           $scene = Scene_Map.new
  906.         end
  907.       end
  908.     when 2 #EQUIP
  909.       #アイテムを装備する処理(ここでは必要ない)
  910.     when 3 #COMBINE
  911.       #アイテムを合成する処理
  912.       #合成等の処理はここではおこなわれない。ここではウィンドウ更新のみ
  913.       redraw_itemmenu_window
  914.     when 4 #SORT/DISPOSE
  915.       #アイテムを破棄する処理
  916.       #入れ替えの場合(異なる二つのアイテムを選択した場合)はこの処理は実行されない
  917.       if ( @getval_message_window == 1 ) #OKを選択した場合
  918.         
  919.         nt = $se_gs.get_item( @itemmenu_window.index, "note" )
  920.         nxtget = 0
  921.         if /<破棄時使用変化連動>/ =~ nt
  922.           if /<使用変化 (\d+)>/ =~ nt
  923.             nxtget = $1.to_i
  924.           end
  925.         end
  926.         $se_gs.set_item( @itemmenu_window.index, nxtget )
  927.         Audio.se_play("Audio/SE/Key", 80, 50)
  928.         redraw_itemmenu_window
  929.       end
  930.     end
  931.    
  932.   end
  933.   #--------------------------------------------------------------------------
  934.   # ● 簡易メッセージウィンドウを作成する
  935.   #--------------------------------------------------------------------------
  936.   def create_message_window(message, type)
  937.     @message_window = Window_Msg.new(message, type)
  938.     @selecting_message_window = true
  939.   end
  940.   #--------------------------------------------------------------------------
  941.   # ● 簡易メッセージウィンドウを削除する
  942.   #--------------------------------------------------------------------------
  943.   def dispose_message_window
  944.     @message_window.dispose
  945.     @selecting_message_window = false
  946.   end
  947.   #--------------------------------------------------------------------------
  948.   # ● ステート選択関連全般
  949.   #--------------------------------------------------------------------------
  950.   def start_state_selection
  951.     @status_window.index = 0
  952.     @mainmenu_window.index = -1
  953.     @menumode = 5
  954.     @status_window_stateidlist = $se_gs.get_visible_state_list("id")
  955.   end
  956.   def update_state_selection
  957.     stat = $se_gs.search_state_name(@status_window.commands[@status_window.index])
  958.     ser = $se_gs.gd_state[stat].get_seriousery
  959.     case ser
  960.     when 0
  961.       com = ""
  962.     when 1
  963.       com = "<軽>"
  964.     when 2
  965.       com = "<中>"
  966.     when 3
  967.       com = "<重>"
  968.     else
  969.       com = ""
  970.     end
  971.     if ( $se_gs.gd_state[stat].get_serious_exist == false )
  972.       com = ""
  973.     end
  974.     if $game_switches[1] == true
  975.       i = $se_gs.search_state(@status_window_stateidlist[@status_window.index])
  976.       ev = $se_gs.gd_state[i].get_eval
  977.       @info_window.set_text(com + "[" + ev.to_s + "]" + $se_gs.gd_state[stat].get_name + $data_states[@status_window_stateidlist[@status_window.index]].message1)
  978.     else
  979.       @info_window.set_text(com + $data_states[@status_window_stateidlist[@status_window.index]].message1)
  980.     end
  981.     if Input.trigger?(Input::B) #キャンセルの場合
  982.       Sound.play_cancel
  983.       end_state_selection
  984.       return
  985.     end
  986.   end
  987.   def end_state_selection
  988.     @status_window.index = -1
  989.     @mainmenu_window.index = 5
  990.     @menumode = 0
  991.   end
  992.   #--------------------------------------------------------------------------
  993.   # ● オプション開始処理
  994.   #--------------------------------------------------------------------------
  995.   def start_option

  996.   end
  997.   



  998. end
复制代码
对了,这个是很久之前忘了从哪保存的一个黑暗研究所版本的菜单脚本
但是使用起来会报错
wrong number of arguments(6 for 5)
哪位研究脚本的大大帮忙改一下这个也可以

作者: 上贺茂润    时间: 2014-11-23 08:56
新建窗口需要先视窗定位然后New窗口定义
你可以参考主菜单的生成过程 照搬的捏一个
作者: chd114    时间: 2014-11-23 09:43
现在站里搜索到的合成系统多数是以rpg游戏里的打造或炼成这样感觉的系统脚本为多,达不到预期的效果啊
好比拥有“小恢复剂”2个,能够合成一个“中恢复剂”,合成菜单全都是固定的显示在一边,一点就直接合成了,这样合成感觉一点没有解谜性吗。。。如果有些需要动点脑子考虑用什么道具合成的状况就和毫无意义了
所以现在想要的结果就是,可以再游戏菜单中增加一个“合成/分解”的选项
然后可以对手中的道具进行操作,选择2种道具进行合成(手电(空)+电池=手电),或将1件道具分解成多个道具(?盒子=包装盒+宝石)这样的效果
具体范例可以想象为早期的生化危机,或是同为vx的游戏黑暗研究所

你是希望合成的时候不知道会合出什么东西?然后这个合成系统可以拆分合成的东西?
作者: 结城照美    时间: 2014-11-23 23:20
我记得va可以做到
作者: KaiRus    时间: 2014-11-27 09:58
5说的意思对了,但现在就是弄不出来,我知道怎么创建出这样的菜单但是在道具选择的时候就会出错,因为选择完第1件道具再选另一件之后的处理不知道怎么做
作者: KaiRus    时间: 2014-11-29 22:09
本帖最后由 KaiRus 于 2014-11-29 22:12 编辑

如图,这是站里的一个生化游戏的范例工程------可惜是xp,不通用
就是这样的合成过程,多么亲切的效果
就是在处理执行出现第二个选框并判断能否合成的时候出错T0T

另外,黑暗研究所的虽然是vx,但是那个菜单脚本太过复杂,牵扯其他类脚本太多,没法单独使用
不过效果真的是没话说啊........

以上,另外有什么其他的方法也敬请不吝赐教

0W@1$AQ9U6[TSG)E2T%K (226.01 KB, 下载次数: 23)

0W@1$AQ9U6[TSG)E2T%K

(W_MR~1S`P7CX{2XNS3GVR6.jpg (35.44 KB, 下载次数: 19)

(W_MR~1S`P7CX{2XNS3GVR6.jpg

Q9C_@YG@DJBPP$CR5JNS86B.jpg (109.82 KB, 下载次数: 23)

Q9C_@YG@DJBPP$CR5JNS86B.jpg





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