Project1

标题: 如何给这个小地图脚本加个开关 [打印本页]

作者: y967    时间: 2015-12-28 11:00
标题: 如何给这个小地图脚本加个开关
本帖最后由 myownroc 于 2015-12-29 18:59 编辑
  1. #==============================================================================
  2. class Midmap
  3. #==============================================================================

  4.   #显示坐标
  5.   MX = 5     #显示在地图X坐标
  6.   MY = 5     #显示在地图Y坐标

  7.   #显示窗口的大小
  8.   GX = 32     #窗口中最多显示GX格
  9.   GY = 24     #窗口中最多显示GY格

  10.   #缩略点的大小
  11.   DX = 5      #每格大小

  12.   #原点
  13.   OO = 0      #0左上(小地图对齐在视区的左上) 1右上

  14.   #缩略图的颜色(分别是<红,黄,蓝,透明度>),不需要某种把透明度调0即可
  15.   COLOR_A = Color.new(105,139,34,30)        #底色
  16.   COLOR_B = Color.new(128,128,128,192)    #可通行色
  17.   COLOR_C = Color.new(255,255,255,192)  #描边色

  18.   #事件点的颜色,更多请在95行照着插入
  19.   #默认隐藏事件:1.含有"EV"的事件名和没有行走图 2.含有"EV"的事件名和没有执行内容
  20.   EVENT_P = Color.new(255,128,128)                #主角颜色
  21.   EVENT_Z = Color.new(255,255,0)                  #不含"EV"的其他颜色
  22.   EVENT_A = ["DIREN",Color.new(255,0,0)]          #事件名"Enemy", 颜色
  23.   EVENT_B = ["partner",Color.new(0,255,0)]  #事件名"Trans", 颜色
  24.   EVENT_C = ["CsNotShadow",Color.new(255,255,255)]            #自定义事件名 , 颜色

  25. #==============================================================================

  26.   def initialize
  27.     @pic = []
  28.     star
  29.   end
  30.   def star
  31.     width = $game_map.width
  32.     height = $game_map.height
  33.     @viewport = Viewport.new(MX,MY,GX*DX+1,GY*DX+1)
  34.     for i in 0..2
  35.       @pic[i] = Sprite.new(@viewport)
  36.       @pic[i].bitmap = Bitmap.new(width*DX+1,height*DX+1)
  37.       @pic[i].x = (GX - width)*DX if OO == 1
  38.       @pic[i].z = 50#0000
  39.     end
  40.     @pic[0].bitmap.fill_rect(0,0,width*DX+1,height*DX+1, COLOR_A)
  41.     @pic[0].z -= 1
  42.     @pic[2].z += 1
  43.     @map = $game_map
  44.     for x in 0...width
  45.       for y in 0...height
  46.         next unless @map.pass?(x,y,0)
  47.         @pic[1].bitmap.fill_rect(x*DX+1,y*DX+1,DX-1,DX-1, COLOR_B)
  48.         if @map.pass?(x,y,2) and @map.pass?(x,y+1,8)
  49.           @pic[1].bitmap.fill_rect(x*DX+1,y*DX+DX,DX-1,1, COLOR_B)
  50.         else
  51.           @pic[1].bitmap.fill_rect(x*DX,y*DX+DX,DX+1,1, COLOR_C)
  52.         end
  53.         if @map.pass?(x,y,6) and @map.pass?(x+1,y,4)
  54.           @pic[1].bitmap.fill_rect(x*DX+DX,y*DX+1,1,DX-1, COLOR_B)
  55.         else
  56.           @pic[1].bitmap.fill_rect(x*DX+DX,y*DX,1,DX+1, COLOR_C)
  57.         end
  58.         unless @map.pass?(x,y-1,0)
  59.           @pic[1].bitmap.fill_rect(x*DX,y*DX,DX+1,1, COLOR_C)
  60.         end
  61.         unless @map.pass?(x-1,y,0)
  62.           @pic[1].bitmap.fill_rect(x*DX,y*DX,1,DX+1, COLOR_C)
  63.         end
  64.         next unless @map.pass?(x,y,6)
  65.         next unless @map.pass?(x,y,2)
  66.         next unless @map.pass?(x+1,y,4)
  67.         next unless @map.pass?(x+1,y,2)
  68.         next unless @map.pass?(x,y+1,8)
  69.         next unless @map.pass?(x,y+1,6)
  70.         next unless @map.pass?(x+1,y+1,8)
  71.         next unless @map.pass?(x+1,y+1,4)
  72.         @pic[1].bitmap.fill_rect(x*DX+DX,y*DX+DX,1,1, COLOR_B)
  73.       end
  74.     end
  75.     update
  76.   end
  77.   def update

  78.     @pic[2].bitmap.clear
  79.     for i in @map.events.keys
  80.    #  if i >=200
  81.      #    if  @map.events[i].jiazai == 0
  82.       #   $game_variables[80] += 1
  83.       #   end
  84.     #   end
  85.   #     $game_variables[81] = @map.events.keys


  86.       next if/\E\V/ === @map.events[i].event.name #@map.events[i].list.size <= 1 and
  87.               #/\E\V/ === @map.events[i].event.name
  88.       next if @map.events[i].character_name == "" and
  89.               /\E\V/ === @map.events[i].event.name
  90.       color = EVENT_Z
  91.       color = EVENT_A[1] if @map.events[i].event.name.include?(EVENT_A[0])
  92.       color = EVENT_B[1] if @map.events[i].event.name == EVENT_B[0]
  93.       color = EVENT_C[1] if @map.events[i].event.name == EVENT_C[0]
  94.       x = @map.events[i].x
  95.       y = @map.events[i].y
  96.       @pic[2].bitmap.fill_rect(x*DX+1,y*DX+1,DX-1,DX-1, color)
  97.     end
  98.     x = $game_player.x
  99.     y = $game_player.y
  100.     @pic[2].bitmap.fill_rect(x*DX+1,y*DX+1,DX-1,DX-1, EVENT_P)
  101.     if @map.width > GX
  102.       x = GX/2 if x < GX/2
  103.       x = @map.width - GX/2 if @map.width - x < GX/2
  104.       @pic[1].x = (GX/2 - x)*DX
  105.       @pic[2].x = (GX/2 - x)*DX
  106.     end
  107.     if @map.height > GY
  108.       y = GY/2 if y < GY/2
  109.       y = @map.height - GY/2 if @map.height - y < GY/2
  110.       @pic[1].y = (GY/2 - y)*DX
  111.       @pic[2].y = (GY/2 - y)*DX
  112.     end
  113.   end
  114. end

  115. #==============================================================================
  116. # ● 默认脚本的更改
  117. #==============================================================================
  118. class Game_Map
  119.   def pass?(x, y, d)
  120.     for i in [2, 1, 0]
  121.       tile_id = data[x, y, i]
  122.       return false if tile_id == nil
  123.       return false if @passages[tile_id] & ((1 << (d / 2 - 1)) & 0x0f) != 0
  124.       return false if @passages[tile_id] & 0x0f == 0x0f
  125.       return true  if @priorities[tile_id] == 0
  126.     end
  127.   end
  128. end

  129. class Game_Event < Game_Character
  130.   attr_reader   :event
  131. end

  132. #添加显示与刷新
  133. class Scene_Map
  134.   def main
  135.    # $game_screen.weather(rand(9), 5, 0)
  136.     @spriteset = Spriteset_Map.new
  137.     @message_window = Window_Message.new
  138.     @midmap = Midmap.new           #★★★
  139.     Graphics.transition
  140.   #  @message_window.z = 555
  141.   $get_all_task
  142.     loop do
  143.       Graphics.update
  144.       Input.update
  145.       update
  146.       if $scene != self
  147.         break
  148.       end
  149.     end
  150.     Graphics.freeze
  151.     @spriteset.dispose
  152.     @message_window.dispose
  153.     if $scene.is_a?(Scene_Title)
  154.       Graphics.transition
  155.       Graphics.freeze
  156.     end
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 刷新画面
  160.   #--------------------------------------------------------------------------
  161.   def update
  162.     loop do
  163.       $game_map.update
  164.       $game_system.map_interpreter.update
  165.       $game_player.update
  166.       $game_system.update
  167.       $game_screen.update
  168.       unless $game_temp.player_transferring
  169.         break
  170.       end
  171.       transfer_player
  172.       if $game_temp.transition_processing
  173.         break
  174.       end
  175.     end
  176.     @spriteset.update
  177.     @message_window.update
  178.     @midmap.update                                                      #★★★
  179.     if $game_temp.gameover
  180.       $scene = Scene_Gameover.new
  181.       return
  182.     end
  183.     if $game_temp.to_title
  184.       $scene = Scene_Title.new
  185.       return
  186.     end
  187.     if $game_temp.transition_processing
  188.       $game_temp.transition_processing = false
  189.       if $game_temp.transition_name == ""
  190. #        Graphics.transition(20)
  191.       else
  192.         Graphics.transition(40, "Graphics/Transitions/" +
  193.           $game_temp.transition_name)
  194.       end
  195.     end
  196.     if $game_temp.message_window_showing
  197.       return
  198.     end
  199.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  200.       unless $game_system.map_interpreter.running? or
  201.              $game_system.encounter_disabled
  202.         n = rand($game_map.encounter_list.size)
  203.         troop_id = $game_map.encounter_list[n]
  204.         if $data_troops[troop_id] != nil
  205.           $game_temp.battle_calling = true
  206.           $game_temp.battle_troop_id = troop_id
  207.           $game_temp.battle_can_escape = true
  208.           $game_temp.battle_can_lose = false
  209.           $game_temp.battle_proc = nil
  210.         end
  211.       end
  212.     end
  213.        if Input.trigger?(Input::B)
  214.      # unless $game_system.map_interpreter.running? or
  215.     #         $game_system.menu_disabled
  216.     unless  $game_system.map_interpreter.running? or
  217.            @move_route_forcing or $game_temp.message_window_showing
  218.         $game_temp.menu_calling = true
  219.         $game_temp.menu_beep = true
  220.       end
  221.     end
  222.     if $DEBUG and Input.press?(Input::F9)
  223.       $game_temp.debug_calling = true
  224.     end
  225.     unless $game_player.moving?
  226.       if $game_temp.battle_calling
  227.         call_battle
  228.       elsif $game_temp.shop_calling
  229.         call_shop
  230.       elsif $game_temp.name_calling
  231.         call_name
  232.       elsif $game_temp.menu_calling
  233.         call_menu
  234.       elsif $game_temp.save_calling
  235.         call_save
  236.       elsif $game_temp.debug_calling
  237.         call_debug
  238.       end
  239.     end
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ● 主角的场所移动
  243.   #--------------------------------------------------------------------------
  244.   def transfer_player
  245.     $game_temp.player_transferring = false
  246.     if $game_map.map_id != $game_temp.player_new_map_id
  247.       $game_map.setup($game_temp.player_new_map_id)
  248.     end
  249.     $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
  250.     case $game_temp.player_new_direction
  251.     when 2
  252.       $game_player.turn_down
  253.     when 4
  254.       $game_player.turn_left
  255.     when 6
  256.       $game_player.turn_right
  257.     when 8
  258.       $game_player.turn_up
  259.     end
  260.     $game_player.straighten
  261.     $game_map.update
  262.     @spriteset.dispose
  263.     @spriteset = Spriteset_Map.new
  264.         $game_variables[50] = 0
  265.         $game_variables[43] = 0
  266.      #   $game_screen.start_tone_change(Tone.new(-50,-50,0,255),20)
  267.     @midmap.star                                                        #★★★
  268.     if $game_temp.transition_processing
  269.       $game_temp.transition_processing = false
  270.   #    Graphics.transition(20)
  271.         Graphics.transition#(20, "Graphics/Transitions/" +"010-Random02.png")
  272.     end
  273.     $game_map.autoplay
  274.     Graphics.frame_reset
  275.     Input.update
  276.   end
  277. end
复制代码

作者: cinderelmini    时间: 2015-12-28 16:10
发脚本用代码框比较好……
加了个开关判定,在脚本开头设置开关ID。






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