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

Project1

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

[已经过期] 设计好了10个战斗点 只能出9个战斗不知道原因

[复制链接]

Lv4.逐梦者

梦石
0
星屑
7777
在线时间
1340 小时
注册时间
2015-8-15
帖子
752
跳转到指定楼层
1
发表于 2017-4-3 14:37:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
RUBY 代码复制
  1. #==============================================================================
  2. # ■ EFS
  3. #------------------------------------------------------------------------------
  4. #  群战系统的游戏主操控类
  5. #   全新版本
  6. #   作者 Raider Soap 肥皂君~
  7. #
  8. #==============================================================================
  9. class EFS
  10.  
  11.   #--------------------------------------------------------------------------
  12.   # ● 初始化数据
  13.   #--------------------------------------------------------------------------
  14.   def initialize(party1,party2)
  15.     $Team_Fighter = []
  16.     $Enermy_Fighter = []
  17.     $Num_Team = 1    # player
  18.     $Team_Fighter.push $game_player
  19.     $Num_Enermy = 0
  20.     #死亡计数
  21.     $Team_Death_counter = 0
  22.     $Enermy_Death_counter = 0
  23.  
  24.     $game_player.self_battler = $game_player # 正太君改
  25.     $game_player.hp = $game_party.actors[0].hp  # 正太君改
  26.     $game_player.maxhp = $game_party.actors[0].maxhp # 正太君改
  27.     $game_player.mp = $game_party.actors[0].sp # 正太君改
  28.     $game_player.maxmp = $game_party.actors[0].maxsp # 正太君改
  29.     $game_player.skilled_level = 3
  30.     $game_player.action_mode = 0
  31.     $game_player.armor = 30
  32.     $game_player.ap = 60
  33.     $game_player.ap_range = 5
  34.     $game_player.atk_se = "swordbasic_"
  35.     $game_player.atk_se_num = 11
  36.     $game_player.heavy = false
  37.     $game_player.name = "theplayer"
  38.     $game_player.atk_fr = 30
  39.     $game_player.is_cav = false
  40.     $game_player.shd = false
  41.  
  42.     #双方队伍
  43.     @team_party = party1
  44.     @enermy_party = party2
  45.  
  46.     #团队
  47.     $team_group = []
  48.     $enermy_group = []
  49.     $team_group[0] = []
  50.     for i in 1..10
  51.       $team_group[i] = []
  52.       $enermy_group[i] = []
  53.     end
  54.     $lisenter = 0
  55.     #坚守的行数量
  56.     @guarding_line_num = 1
  57.  
  58.     #出生点
  59.     @group_spawn = []
  60.     for i in 1..10#  5改为10个
  61.       @group_spawn[i] = []
  62.     end
  63.     @group_spawn_e = []
  64.     for i in 1..10 #  5改为10个
  65.       @group_spawn_e[i] = []
  66.     end
  67.  
  68.     @counter = 0
  69.     @counter_for_wait = 0
  70.     @counter_for_push = 0
  71.  
  72.     @c = false
  73.  
  74.     @spell_used = []
  75.     #一定要把所有技能在这里过一遍
  76.     #一定要把所有技能在这里过一遍
  77.     #一定要把所有技能在这里过一遍
  78.    # for i in 1..X
  79.     @spell_used[1] = Skill_data::TIME[1] # i
  80.    #end
  81.   end
  82.  
  83.   #--------------------------------------------------------------------------
  84.   # ● 显示图标
  85.   #--------------------------------------------------------------------------  
  86.   def show_icon
  87.     if $selected_item == 0
  88.       item_id = 33
  89.     else
  90.       item_id =  Item_data::ID[$selected_item]  
  91.     end  
  92.     if $selected_spell == 0
  93.       spell_id = 0
  94.     else
  95.        spell_id =  $selected_spell
  96.     end  
  97.     item = $data_items[item_id]
  98.     spell_icon = Skill_data::ICON[spell_id]
  99.  
  100.     # 设置变量
  101.     $game_variables[2] = $game_party.item_number(item_id) #物品数量
  102.     $game_variables[3] = @spell_used[$selected_spell]
  103.  
  104.     # 显示图
  105.     $game_screen.pictures[5].show(item.icon_name,1,494,444, 100, 100, 255, 0)
  106.     $game_screen.pictures[2].show(spell_icon,1,532,444, 100, 100, 255, 0)   if not $selected_spell == 0
  107.     $game_screen.pictures[8].show("shd01",1,609,444, 100, 100, 255, 0)
  108.     weapons = $data_weapons[$game_party.actors[0].weapon_id]
  109.     $game_screen.pictures[9].show(weapons.icon_name,1,571,444, 100, 100, 255, 0)
  110.  
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 寻找小队坐标点
  114.   #--------------------------------------------------------------------------
  115.   def group_spawn_points
  116.     #循环全部事件
  117.      for event in $game_map.events.values
  118.        Graphics.update
  119.        if event.name[0,3] == "##T"
  120.           group = event.name[3,1].to_i
  121.           @group_spawn[group].push event.x
  122.           @group_spawn[group].push event.y
  123.           @group_spawn[group].push event.name[4,1].to_i
  124.           #[event.x,event.y,event.name[4,1].to_i]
  125.        elsif event.name[0,3] == "##E"
  126.           group = event.name[3,1].to_i
  127.           @group_spawn_e[group].push event.x
  128.           @group_spawn_e[group].push event.y
  129.           # name[4,1]的值为 1 代表横着 2 代表竖着
  130.           @group_spawn_e[group].push event.name[4,1].to_i      
  131.        end  
  132.      end
  133.   end   
  134.   #--------------------------------------------------------------------------
  135.   # ● 创建士兵
  136.   #--------------------------------------------------------------------------
  137.   def spawn_fighters
  138.     Drop_Item.pre_load
  139.     for group_id in 1..10
  140.        num_people = @team_party.number(group_id)
  141.        next if @team_party.number(group_id) == 0
  142.        num = even?(num_people) ? num_people/2 : (num_people-1)/2
  143.        for i in [email]0..@team_party.number[/email](group_id) - 1
  144.        x = @group_spawn[group_id][0]  
  145.        y = @group_spawn[group_id][1]
  146.        new_x = @group_spawn[group_id][2] == 1 ? x - num + i : x
  147.        new_y = @group_spawn[group_id][2] == 2 ? y - num + i : y
  148.        Drop_Item.make_events_EFS(new_x,new_y)
  149.        Graphics.update
  150.         for event in $game_map.events.values
  151.           if event.x == new_x and event.y == new_y and not event.name[0,2] == "##"
  152.             team_fighter = @team_party.group[group_id][i]
  153.             @team_party.group[group_id][i].set_event(event)
  154.             $Team_Fighter.push(team_fighter)
  155.             $team_group[0].push team_fighter
  156.             $team_group[team_fighter.group_id].push team_fighter         
  157.             event.self_battler = team_fighter
  158.  
  159.           end  
  160.         end
  161.        end
  162.      end
  163.      Drop_Item.refresh_map
  164.   end
  165.   def spawn_fighters_e
  166.       Drop_Item.pre_load
  167.     for group_id in 1..10
  168.        num_people = @enermy_party.number(group_id)
  169.        num = even?(num_people) ? num_people/2 : (num_people-1)/2
  170.        for i in [email]0..@enermy_party.number[/email](group_id)-1
  171.        x = @group_spawn_e[group_id][0]  
  172.        y = @group_spawn_e[group_id][1]
  173.        new_x = @group_spawn_e[group_id][2] == 1 ? x - num + i : x
  174.        new_y = @group_spawn_e[group_id][2] == 2 ? y - num + i : y
  175.        Drop_Item.make_events_EFS(new_x,new_y)
  176.        Graphics.update
  177.        for event in $game_map.events.values
  178.          if event.x == new_x and event.y == new_y and not event.name[0,2] == "##"
  179.             team_fighter = @enermy_party.group[group_id][i]
  180.             @enermy_party.group[group_id][i].set_event(event)
  181.             $Enermy_Fighter.push(team_fighter)
  182.             $enermy_group[team_fighter.group_id].push team_fighter  
  183.             event.self_battler = team_fighter
  184.           end  
  185.        end
  186.        end
  187.      end
  188.      Drop_Item.refresh_map
  189.   end   
  190.   def even?(value)
  191.   value & 1 == 0
  192.   end  
  193.   #--------------------------------------------------------------------------
  194.   # ● 分组设定
  195.   #--------------------------------------------------------------------------
  196.   def groups_setting
  197.     for fighters in $Team_Fighter
  198.       $team_group[fighters.group_id].push fighters if fighters != $game_player
  199.       $team_group[0].push fighters if fighters != $game_player
  200.     end
  201.     for fighters in $Enermy_Fighter
  202.       $enermy_group[fighters.group_id].push fighters
  203.     end
  204.   end  
  205.  
  206.   #--------------------------------------------------------------------------
  207.   # ● 下达初始指令
  208.   #--------------------------------------------------------------------------
  209.   def command(team,group,command_id)
  210.     #TEAM = 1 代表 玩家的队伍 2 代表 敌人的队伍
  211.       if team = 1
  212.         for f in $team_group[group]
  213.          f.command_action = command_id
  214.         end
  215.       else
  216.         for e in $enermy_group[group]
  217.          e.command_action = command_id
  218.         end
  219.       end  
  220.   end   
  221.  
  222.   #--------------------------------------------------------------------------
  223.   # ● 士兵基础设置 # 正太君改
  224.   #--------------------------------------------------------------------------
  225.   def set_fighters
  226.     #循环全部事件
  227.      for event in $game_map.events.values
  228.        if event.name[0,2] == "#T"
  229.          team_fighter = EFS_Team.new(event,event.name[3,3].to_i)
  230.          $Team_Fighter.push(team_fighter)
  231.          event.self_battler = team_fighter
  232.        elsif event.name[0,2] == "#E"
  233.          enermy_fighter = EFS_Enermy.new(event,event.name[3,3].to_i)
  234.          $Enermy_Fighter.push(enermy_fighter)
  235.          event.self_battler = enermy_fighter
  236.        end  
  237.      end  
  238.  
  239.    end
  240.  
  241.  
  242.    def update_player_data
  243.     $game_player.hp = $game_party.actors[0].hp  # 正太君改
  244.     $game_player.mp = $game_party.actors[0].sp # 正太君改
  245.     $game_party.actors[0].hp = $game_party.actors[0].hp.round
  246.     $game_party.actors[0].sp = $game_party.actors[0].sp.round
  247.     $game_player.update_die if $game_player.dead?
  248.     # 冷却
  249.     $item_cd -= 1 if $item_cd > 0
  250.     $spell_cd -= 1 if $spell_cd > 0
  251.     $item_opacity = 255 if $item_cd <= 0 else  $item_opacity = 140
  252.  
  253.     if $selected_item == 0
  254.       item_id = 33
  255.     else
  256.       item_id =  Item_data::ID[$selected_item]  
  257.     end  
  258.     if $selected_spell == 0
  259.       spell_id = 0
  260.     else
  261.        spell_id =  $selected_spell
  262.     end  
  263.     item = $data_items[item_id]
  264.     # 设置变量
  265.     $game_variables[2] = $game_party.item_number(item_id)
  266.     $game_variables[3] = @spell_used[$selected_spell]
  267.     # 显示图
  268.     $game_screen.pictures[2].move(0,0,532,444, 100, 100, 255, 0)   if not $selected_spell == 0
  269.     $game_screen.pictures[8].move(0,0,609,444, 100, 100, 255, 0)
  270.     $game_screen.pictures[5].move(0,0,450,432, 100, 100,$item_opacity, 0)
  271.     weapons = $data_weapons[$game_party.actors[0].weapon_id]
  272.     $game_screen.pictures[9].move(0,0,573,433, 100, 100,255, 0)
  273.  
  274.     show_icon
  275.  
  276.     # 是否是加速状态的更新
  277.     $game_player.accelarting = $game_player.move_speed == 4 ? true : false
  278.  
  279.     end  
  280.  
  281.  
  282.  
  283.   #--------------------------------------------------------------------------
  284.   # ● 主处理  ●  ●  ●  ●  ●  ●  ●  ●  ●  ●  ●  ●  ●  ●  ●  ●  
  285.   #--------------------------------------------------------------------------
  286.   def main
  287.     return if $BattleOn == false
  288.     #判断是否胜利
  289.     if check_winning
  290.       after_battle
  291.       return
  292.     end  
  293.     $game_player.update_die if $game_player.dead?
  294.     #######UPDATE#########
  295.       update_player_data
  296.     ######################
  297.     $game_player.attack if $game_player.attack? and not $game_player.dead?  
  298.  
  299.     #如果敌人是推进策略
  300.     for i in 1..10
  301.       group_check_cor(i)
  302.     end  
  303.     if @enermy_party.strategy == 2
  304.         e_push if push_wait
  305.     end
  306.  
  307.     #判断输入
  308.     if (Kboard.keyboard($R_Key_SPACE)) and not $game_player.dead?
  309.          $game_player.attack if use_sp(90)
  310.      elsif Kboard.keyboard($R_Key_1) and not $game_player.dead?
  311.        Notification.post("第1队!听我的命令!")
  312.       $lisenter = 1 #group 1
  313.     elsif Kboard.keyboard($R_Key_2) and not $game_player.dead?
  314.       $lisenter = 2 #group 2
  315.          Notification.post("第2队!听我的命令!")
  316.     elsif Kboard.keyboard($R_Key_3) and not $game_player.dead?
  317.       $lisenter = 3 #group 3
  318.          Notification.post("第3队!听我的命令!")
  319.     elsif Kboard.keyboard($R_Key_4) and not $game_player.dead?
  320.       $lisenter = 4 #group 4
  321.          Notification.post("第4队!听我的命令!")
  322.     elsif Kboard.keyboard($R_Key_5) and not $game_player.dead?
  323.       $lisenter = 5 #group 5
  324.          Notification.post("第5队!听我的命令!")
  325.        elsif Kboard.keyboard($R_Key_0) and not $game_player.dead?
  326.       $lisenter = 6 #group 5
  327.          Notification.post("第6队!听我的命令!")
  328.     elsif Kboard.keyboard($R_Key_0) and not $game_player.dead?
  329.       $lisenter = 7 #group 5
  330.          Notification.post("第7队!听我的命令!")
  331.     elsif Kboard.keyboard($R_Key_0) and not $game_player.dead?      
  332.       $lisenter = 8 #group 5
  333.          Notification.post("第8队!听我的命令!")
  334.     elsif Kboard.keyboard($R_Key_0) and not $game_player.dead?      
  335.       $lisenter = 9 #group 5
  336.          Notification.post("第9队!听我的命令!")
  337.     elsif Kboard.keyboard($R_Key_0) and not $game_player.dead?      
  338.       $lisenter = 10 #group 5
  339.          Notification.post("第10队!听我的命令!")
  340.     elsif Kboard.keyboard($R_Key_0) and not $game_player.dead?      
  341.  
  342.      $lisenter = 0 #group All
  343.      Notification.post("所有人!听我的命令!")
  344.    elsif Kboard.keyboard($R_Key_Q) and not $game_player.dead?
  345.        Notification.post("坚守这里!")
  346.        blocked = false
  347.        for f in $Team_Fighter
  348.          next if f.is_a?(Game_Player)
  349.          blocked = true if f.check_guard_position($game_player.x,$game_player.y,$game_player.direction)
  350.        end  
  351.        unless blocked
  352.           for e in $team_group[$lisenter]
  353.            e.command_action = 1 #def
  354.            e.set_guard_cor($game_player.x,$game_player.y,$game_player.direction,@guarding_line_num) if not @set
  355.           end  
  356.       @set = true
  357.       else
  358.         $game_system.se_play($data_system.buzzer_se)
  359.       end
  360.     elsif Kboard.keyboard($R_Key_W) and not $game_player.dead?
  361.       Notification.post("跟我来!")
  362.       for e in $team_group[$lisenter]
  363.          e.command_action = 2 #onme
  364.       end  
  365.     elsif Kboard.keyboard($R_Key_E) and not $game_player.dead?
  366.         Notification.post("冲锋")
  367.       for e in $team_group[$lisenter]
  368.          e.command_action = 3 #atk
  369.        end
  370.     elsif Kboard.keyboard($R_Key_A) and not $game_player.dead?
  371.        $game_player.character_name = "theplayer-jump"
  372.        if $game_player.accelarting
  373.          $game_player.animation_id = 117
  374.          $game_player.jump_forward(2) if use_sp(75)
  375.        else
  376.         $game_player.animation_id = 117
  377.         $game_player.jump_forward(1) if use_sp(50)
  378.        end   
  379.     elsif Kboard.keyboard($R_Key_S) and not $game_player.dead?
  380.         use_item
  381.     elsif Kboard.keyboard($R_Key_D) and not $game_player.dead?
  382.         use_spell   
  383.     end   
  384.  
  385.       #是否按键加速
  386.     if Kboard.keyb($R_Key_LSHIFT) and not $game_player.dead? and  not $game_player.attack?
  387.           $game_player.character_name = "theplayer-swd-run" if not $game_player.jumping?
  388.           $game_player.move_speed = use_sp(4) ? 4 : 3
  389.     elsif Kboard.keyb($R_Key_Z) and not $game_player.dead? and  not $game_player.attack?
  390.           $game_player.character_name = "theplayer-shd" if not $game_player.jumping?
  391.           $game_player.heavy = true
  392.           $game_player.move_speed = 2
  393.           $game_player.shd = true     
  394.     else
  395.        if not $game_player.attack?
  396.          $game_player.shd = false
  397.          $game_player.heavy = false
  398.          $game_player.character_name = "theplayer" if not $game_player.jumping?
  399.          $game_party.actors[0].sp += 4
  400.          $game_party.actors[0].sp = $game_party.actors[0].maxsp if $game_party.actors[0].sp >= $game_party.actors[0].maxsp
  401.        end  
  402.          $game_player.move_speed = 3
  403.     end            
  404.  
  405.     if Kboard.keyboard($R_Key_SEP)
  406.       if @guarding_line_num != 1
  407.       @guarding_line_num -= 1
  408.       else
  409.       @guarding_line_num = 3
  410.       end  
  411.     Notification.post("排成"+@guarding_line_num.to_s+"行!")
  412.     elsif Kboard.keyboard($R_Key_DOTT)
  413.       if @guarding_line_num != 3
  414.       @guarding_line_num += 1
  415.       else
  416.       @guarding_line_num = 1
  417.       end  
  418.      Notification.post("排成"+@guarding_line_num.to_s+"行!")
  419.     end  
  420.  
  421.    if Kboard.keyboard($R_Key_ALT)
  422.     @c = @c ? false : true
  423.     $game_switches[5] = @c
  424.     $game_switches[6] = @c
  425.    end  
  426.  
  427.     #所有士兵的main
  428.     for i in 1..$Team_Fighter.size-1
  429.      $Team_Fighter[i].main
  430.     end
  431.     for e in $Enermy_Fighter
  432.       e.main
  433.     end
  434.     @set = false
  435.  
  436.   end
  437.   #--------------------------------------------------------------------------
  438.   # ● 判断玩家的体力是否足够维持&&可以的话就扣掉相应的
  439.   #--------------------------------------------------------------------------  
  440.   def use_sp(sp)
  441.     if $game_party.actors[0].sp < sp
  442.         $game_system.se_play($data_system.buzzer_se)
  443.         return false
  444.     else
  445.         $game_party.actors[0].sp -= sp if ! $game_player.attack?
  446.         return true
  447.     end
  448.   end
  449.   #--------------------------------------------------------------------------
  450.   # ● 敌人策略分析器
  451.   #--------------------------------------------------------------------------  
  452.   def enermy_strategy
  453.     case @enermy_party.strategy
  454.     when 1
  455.       for e in $Enermy_Fighter
  456.         e.get_group_spawn(@group_spawn_e,@group_spawn)
  457.         e.command_action = 1
  458.       end
  459.     when 2
  460.       for e in $Enermy_Fighter
  461.         e.get_group_spawn(@group_spawn_e,@group_spawn)
  462.         e.command_action = 1
  463.       end
  464.     when 3  
  465.       for e in $Enermy_Fighter
  466.         e.command_action = 3
  467.       end
  468.     end
  469.   end
  470.   #--------------------------------------------------------------------------
  471.   # ● 设置初始坚守坐标
  472.   #--------------------------------------------------------------------------
  473.   def set_defualt_guard_cor
  474.       for e in $Team_Fighter
  475.         next if e.is_a?(Game_Player)
  476.         e.get_group_spawn(@group_spawn_e,@group_spawn)
  477.         e.command_action = 1
  478.       end
  479.   end
  480.   #--------------------------------------------------------------------------
  481.   # ● 是否进入警戒距离
  482.   #--------------------------------------------------------------------------   
  483.     def group_check_cor(group_id)
  484.       d_list = []
  485.       e_x,e_y = enermy_avg_cor(group_id)
  486.       for i in 1..10
  487.         t_x,t_y = team_avg_cor(i)
  488.         d = (t_x - e_x).abs + (t_y - e_y).abs
  489.         d_list.push d
  490.       end  
  491.       if d_list.min < 10
  492.         for e in $enermy_group[group_id]
  493.             e.command_action = 3
  494.         end  
  495.       end  
  496.   end
  497.   #--------------------------------------------------------------------------
  498.   # ● 小队的平均坐标
  499.   #--------------------------------------------------------------------------   
  500.   def team_avg_cor(group_id)
  501.     return 0,0 if $team_group[group_id] == nil or $team_group[group_id].size == 0
  502.     sum_x,sum_y = 0,0
  503.     for f in $team_group[group_id]
  504.       sum_x += f.event.x
  505.       sum_y += f.event.y
  506.     end  
  507.     sum_x /= $team_group[group_id].size
  508.     sum_y /= $team_group[group_id].size
  509.     return sum_x,sum_y
  510.   end
  511.   def enermy_avg_cor(group_id)
  512.     return 0,0 if $enermy_group[group_id] == nil or $enermy_group[group_id].size == 0
  513.     sum_x,sum_y = 0,0
  514.     for f in $enermy_group[group_id]
  515.       sum_x += f.event.x
  516.       sum_y += f.event.y
  517.     end  
  518.     sum_x /= $enermy_group[group_id].size
  519.     sum_y /= $enermy_group[group_id].size
  520.     return sum_x,sum_y
  521.   end
  522.  
  523.   def team_avg_cor_all
  524.     sum_x,sum_y = 0,0
  525.     for f in $Team_Fighter
  526.       sum_x += f.event.x
  527.       sum_y += f.event.y
  528.     end  
  529.     sum_x /= $Team_Fighter.size
  530.     sum_y /= $Team_Fighter.size
  531.     return sum_x,sum_y
  532.   end  
  533.   def enermy_avg_cor_all
  534.     sum_x,sum_y = 0,0
  535.     for f in $Enermy_Fighter
  536.       sum_x += f.event.x
  537.       sum_y += f.event.y
  538.     end  
  539.     sum_x /= $Enermy_Fighter.size
  540.     sum_y /= $Enermy_Fighter.size
  541.     return sum_x,sum_y
  542.   end   
  543.   #--------------------------------------------------------------------------
  544.   # ● 使用物品
  545.   #--------------------------------------------------------------------------
  546.   def use_item
  547.     if $selected_item == 0
  548.       item_id = 33
  549.     else
  550.       item_id =  Item_data::ID[$selected_item]  
  551.     end  
  552.     item = $data_items[item_id]
  553.     # 如果物品用完的情况下
  554.       if $game_party.item_number(item_id) == 0
  555.         # 演奏冻结 SE
  556.         $game_system.se_play($data_system.buzzer_se)
  557.         return
  558.       end
  559.     # 如果交战中
  560.       if $game_player.attack?
  561.         # 演奏冻结 SE
  562.         $game_system.se_play($data_system.buzzer_se)
  563.         return
  564.       end      
  565.     #冷却时间
  566.     if $item_cd > 0
  567.         # 演奏冻结 SE
  568.         $game_system.se_play($data_system.buzzer_se)
  569.         return
  570.     end   
  571.  
  572.      target = $game_party.actors[0]
  573.      used = target.item_effect(item)
  574.  
  575.     # 使用物品的情况下
  576.       if used
  577.         # 演奏物品使用时的 SE
  578.         $game_system.se_play(item.menu_se)
  579.         # 设定冷却时间
  580.         $item_cd = Item_data::COLD_DOWN[$selected_item]
  581.         ###设置变灰###
  582.         $item_opacity = 140
  583.         # 动画
  584.         $game_player.animation_id = item.animation2_id
  585.         # 消耗品的情况下
  586.         if item.consumable
  587.           # 使用的物品数减 1
  588.           $game_party.lose_item(item.id, 1)
  589.         end
  590.         # 全灭的情况下
  591.         if $game_party.all_dead?
  592.           $scene = Scene_Gameover.new
  593.           return
  594.         end
  595.         # 公共事件 ID 有效的情况下
  596.         if item.common_event_id > 0
  597.           # 预约调用公共事件
  598.           $game_temp.common_event_id = item.common_event_id
  599.           return
  600.         end
  601.       end
  602.       # 无法使用物品的情况下
  603.       unless used
  604.         # 演奏冻结 SE
  605.         $game_system.se_play($data_system.buzzer_se)
  606.       end
  607.       return
  608.     end  
  609.   #--------------------------------------------------------------------------
  610.   # ● 使用技能
  611.   #--------------------------------------------------------------------------   
  612.   def use_spell
  613.     return if $selected_spell == 0
  614.     # 如果技能使用次数用完
  615.     if @spell_used[$selected_spell] <= 0
  616.         # 演奏冻结 SE
  617.         $game_system.se_play($data_system.buzzer_se)
  618.         return
  619.     end
  620.     # 如果交战中
  621.     if $game_player.attack?
  622.         # 演奏冻结 SE
  623.         $game_system.se_play($data_system.buzzer_se)
  624.         return
  625.     end      
  626.     #冷却时间
  627.     if $spell_cd > 0
  628.         # 演奏冻结 SE
  629.         $game_system.se_play($data_system.buzzer_se)
  630.         return
  631.     end   
  632.  
  633.     @spell_used[$selected_spell] -= 1
  634.     $spell_cd = Skill_data::CD[$selected_spell]
  635.     name = Skill_data::NAME[$selected_spell]
  636.     code = Skill_data::CODE[$selected_spell]
  637.     Notification.post("发动了技能"+name+"!")
  638.     EFS_Spell.use_spell(code)
  639.  
  640.   end
  641.   #--------------------------------------------------------------------------
  642.   # ● 判断胜利
  643.   #--------------------------------------------------------------------------
  644.   def check_winning
  645.         counter = 0
  646.       for enermy in $Enermy_Fighter
  647.         if enermy.dead?
  648.          counter+=1
  649.         end  
  650.       end  
  651.       return counter >= $Enermy_Fighter.size
  652.   end
  653.   #--------------------------------------------------------------------------
  654.   # ● 战后处理
  655.   #--------------------------------------------------------------------------
  656.   def after_battle
  657.     if Kboard.keyboard($R_Key_TAB)
  658.       reset
  659.       $scene.spriteset.clear_point_arrow
  660.       $scene.spriteset.clear_arrow
  661.       $game_temp.common_event_id = 2
  662.       $game_player.move_speed = 4
  663.       $BattleOn = false
  664.       $game_switches[20] = false
  665.       $game_temp.common_event_id = 21
  666.       Notification.clear
  667.       $game = nil
  668.       back_to_map  
  669.       $game_party.actors[0].sp = $game_party.actors[0].maxsp
  670.       $player_party.full_ammo
  671.       return
  672.     end      
  673.     $game_party.actors[0].sp += 5
  674.     $game_party.actors[0].sp = $game_party.actors[0].maxsp if $game_party.actors[0].sp >= $game_party.actors[0].maxsp
  675.     for e in $Enermy_Fighter        
  676.       e.event.update_die
  677.     end
  678.     for i in 1..$Team_Fighter.size-1
  679.      $Team_Fighter[i].event.update_die if $Team_Fighter[i].dead?
  680.      next if $Team_Fighter[i].dead?
  681.      $Team_Fighter[i].event.attack_action = false
  682.      $Team_Fighter[i].action_mode = 1
  683.      $Team_Fighter[i].event.character_name = $Team_Fighter[i].name
  684.     end
  685.       $game_player.attack_action = false
  686.       $game_player.action_mode = 1
  687.       $game_player.attack_over
  688.       $game_player.move_speed =3
  689.     $game_party.actors[0].hp = $game_party.actors[0].hp.round
  690.     $game_party.actors[0].sp = $game_party.actors[0].sp.round
  691.       for e in $Team_Fighter
  692.         next if e.is_a?(Game_Player)
  693.         e.remove_all_state
  694.       end  
  695.     end
  696.   #--------------------------------------------------------------------------
  697.   # ● 战斗结束的士兵处理
  698.   #--------------------------------------------------------------------------  
  699.   def reset
  700.     for f in $Team_Fighter
  701.       next if f.is_a?(Game_Player)
  702.       $player_party.delete(f) if f.dead? and not f.wounded
  703.     end
  704.   end  
  705.   #--------------------------------------------------------------------------
  706.   # ● 战斗结束返回地图
  707.   #--------------------------------------------------------------------------      
  708.   def back_to_map
  709.     # 场所移动中、信息显示中、过渡处理中的情况下
  710.     if $game_temp.player_transferring or
  711.        $game_temp.message_window_showing or
  712.        $game_temp.transition_processing
  713.       # 结束
  714.       return false
  715.     end
  716.     $game_temp.player_transferring = true
  717.       # 设置主角的移动目标
  718.       $game_temp.player_new_map_id = @or_map_id
  719.       $game_temp.player_new_x = @or_x
  720.       $game_temp.player_new_y = @or_y
  721.       $game_temp.player_new_direction = @or_d
  722.       # 准备过渡
  723.       Graphics.freeze
  724.       # 设置过渡处理中标志
  725.       $game_temp.transition_processing = true
  726.       $game_temp.transition_name = ""
  727.     return false
  728.  
  729.   end  
  730.   def load_or_map_data
  731.     @or_map_id = $game_map.map_id
  732.     @or_x =  $game_player.x
  733.     @or_y =  $game_player.y
  734.     @or_d =  $game_player.direction
  735.   end  
  736.   #--------------------------------------------------------------------------
  737.   #--------------------------------------------------------------------------
  738.   #--------------------------------------------------------------------------
  739.   #--------------------------------------------------------------------------
  740.   #--------------------------------------------------------------------------
  741.   # ● 接近目标的方向 (面向目标)
  742.   #--------------------------------------------------------------------------
  743.   def get_guard_direction
  744.     sx = @group_spawn_e[1][0] - @group_spawn[1][0]
  745.     sy = @group_spawn_e[1][1] - @group_spawn[1][1]
  746.     abs_sx= (sx).abs  
  747.     abs_sy = (sy).abs
  748.     if abs_sx == 0 and abs_sy == 0
  749.       return
  750.     end
  751.     if sx.abs > sy.abs
  752.       return sx > 0 ? 4 : 6
  753.     else
  754.       return sy > 0 ? 8 : 2
  755.     end
  756.   end  
  757.  
  758.   def e_push
  759.     case get_guard_direction
  760.     when 2
  761.       for i in 1..5
  762.       @group_spawn_e[i][1] += 4
  763.       end
  764.     when 4
  765.       for i in 1..5
  766.       @group_spawn_e[i][0] -= 4
  767.       end
  768.     when 6
  769.       for i in 1..5
  770.       @group_spawn_e[i][0] += 4
  771.       end
  772.     when 8
  773.       for i in 1..5
  774.       @group_spawn_e[i][1] -= 4
  775.       end
  776.     end  
  777.     for e in $Enermy_Fighter
  778.       e.get_group_spawn(@group_spawn_e,@group_spawn)
  779.     end  
  780.   end
  781.   #--------------------------------------------------------------------------
  782.   # ● Code等待
  783.   #--------------------------------------------------------------------------
  784.   def push_wait
  785.       if @counter_for_push < 135
  786.         @counter_for_push += 1
  787.         return false
  788.       else
  789.         @counter_for_push = 0
  790.         return true
  791.       end
  792.   end     
  793.   #--------------------------------------------------------------------------
  794.   # ● Code等待
  795.   #--------------------------------------------------------------------------
  796.   def code_wait(s)
  797.     #不需要解释,自己写的太渣了
  798.     if @counter_for_wait < s
  799.       @counter_for_wait += 1
  800.       return false
  801.     else
  802.       @counter_for_wait = 0
  803.       return true
  804.     end
  805.   end     
  806.  
  807.  
  808.  
  809.  
  810. end

群战.jpg (240.79 KB, 下载次数: 16)

群战.jpg

群战2.jpg (39.32 KB, 下载次数: 12)

群战2.jpg

Lv4.逐梦者

梦石
0
星屑
7777
在线时间
1340 小时
注册时间
2015-8-15
帖子
752
2
 楼主| 发表于 2017-4-3 14:40:06 | 只看该作者
  1. #==============================================================================
  2. # ■ Game_Character (分割定义 1)
  3. #------------------------------------------------------------------------------
  4. #  处理角色的类。本类作为 Game_Player 类与 Game_Event
  5. # 类的超级类使用。
  6. #==============================================================================

  7. class Game_Character
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_reader   :id                       # ID
  12.   attr_reader   :x                        # 地图 X 坐标 (理论坐标)
  13.   attr_reader   :y                        # 地图 Y 坐标 (理论坐标)
  14.   attr_reader   :real_x                   # 地图 X 坐标 (实际坐标 * 128)
  15.   attr_reader   :real_y                   # 地图 Y 坐标 (实际坐标 * 128)
  16.   attr_reader   :tile_id                  # 元件 ID  (0 为无效)
  17.   attr_accessor :character_name           # 角色 文件名
  18.   attr_reader   :character_hue            # 角色 色相
  19.   attr_accessor :opacity                  # 不透明度
  20.   attr_reader   :blend_type               # 合成方式
  21.   attr_reader   :direction                # 朝向
  22.   attr_reader   :pattern                  # 图案
  23.   attr_reader   :move_route_forcing       # 移动路线强制标志
  24.   attr_accessor :through                  # 穿透
  25.   attr_accessor :animation_id             # 动画 ID
  26.   attr_accessor :transparent              # 透明状态
  27.   attr_accessor :walk_anime               # 移动时动画
  28.   attr_accessor :step_anime               # 停止时动画
  29.   attr_accessor :anime_count
  30.   attr_accessor :pattern
  31.   attr_accessor :direction_fix
  32.   attr_accessor :attack_action
  33.   attr_accessor :anime_count
  34.   attr_accessor :atk_fr
  35.   attr_accessor :move_speed
  36.   #--------------------------------------------------------------------------
  37.   # ● 初始化对像
  38.   #--------------------------------------------------------------------------
  39.   def initialize
  40.     @id = 0
  41.     @x = 0
  42.     @y = 0
  43.     @real_x = 0
  44.     @real_y = 0
  45.     @tile_id = 0
  46.     @character_name = ""
  47.     @character_hue = 0
  48.     @opacity = 255
  49.     @blend_type = 0
  50.     @direction = 2
  51.     @pattern = 0
  52.     @move_route_forcing = false
  53.     @through = false
  54.     @animation_id = 0
  55.     @transparent = false
  56.     @original_direction = 2
  57.     @original_pattern = 0
  58.     @move_type = 0
  59.     @move_speed = 4
  60.     @move_frequency = 6
  61.     @move_route = nil
  62.     @move_route_index = 0
  63.     @original_move_route = nil
  64.     @original_move_route_index = 0
  65.     @walk_anime = true
  66.     @step_anime = false
  67.     @direction_fix = false
  68.     @always_on_top = false
  69.     @anime_count = 0
  70.     @stop_count = 0
  71.     @jump_count = 0
  72.     @jump_peak = 0
  73.     @wait_count = 0
  74.     @locked = false
  75.     @prelock_direction = 0
  76.     @attack_action = false
  77.     @counter = 0
  78.     @counter_for_animation = 0
  79.     @counter_for_die_animation = 0
  80.     @switchA = false
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 移动中判定
  84.   #--------------------------------------------------------------------------
  85.   def moving?
  86.     # 如果在移动中理论坐标与实际坐标不同
  87.     return (@real_x != @x * 128 or @real_y != @y * 128)
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 跳跃中判定
  91.   #--------------------------------------------------------------------------
  92.   def jumping?
  93.     # 如果跳跃中跳跃点数比 0 大
  94.     return @jump_count > 0
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 矫正姿势
  98.   #--------------------------------------------------------------------------
  99.   def straighten
  100.     # 移动时动画以及停止动画为 ON 的情况下
  101.     if @walk_anime or @step_anime
  102.       # 设置图形为 0
  103.       @pattern = 0
  104.     end
  105.     # 清除动画计数
  106.     @anime_count = 0
  107.     # 清除被锁定的向前朝向
  108.     @prelock_direction = 0
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 强制移动路线
  112.   #     move_route : 新的移动路线
  113.   #--------------------------------------------------------------------------
  114.   def force_move_route(move_route)
  115.     # 保存原来的移动路线
  116.     if @original_move_route == nil
  117.       @original_move_route = @move_route
  118.       @original_move_route_index = @move_route_index
  119.     end
  120.     # 更改移动路线
  121.     @move_route = move_route
  122.     @move_route_index = 0
  123.     # 设置强制移动路线标志
  124.     @move_route_forcing = true
  125.     # 清除被锁定的向前朝向
  126.     @prelock_direction = 0
  127.     # 清除等待计数
  128.     @wait_count = 0
  129.     # 自定义移动
  130.     move_type_custom
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 可以通行判定
  134.   #     x : X 坐标
  135.   #     y : Y 坐标
  136.   #     d : 方向 (0,2,4,6,8)  ※ 0 = 全方向不能通行的情况判定 (跳跃用)
  137.   #--------------------------------------------------------------------------
  138.   def passable?(x, y, d)
  139.     # 求得新的坐标
  140.     new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
  141.     new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
  142.     # 坐标在地图以外的情况
  143.     unless $game_map.valid?(new_x, new_y)
  144.       # 不能通行
  145.       return false
  146.     end
  147.     # 穿透是 ON 的情况下
  148.     if @through
  149.       # 可以通行
  150.       return true
  151.     end
  152.     # 移动者的元件无法来到指定方向的情况下
  153.     unless $game_map.passable?(x, y, d, self)
  154.       # 通行不可
  155.       return false
  156.     end
  157.     # 从指定方向不能进入到移动处的元件的情况下
  158.     unless $game_map.passable?(new_x, new_y, 10 - d)
  159.       # 不能通行
  160.       return false
  161.     end
  162.     # 循环全部事件
  163.     for event in $game_map.events.values
  164.       # 事件坐标于移动目标坐标一致的情况下
  165.       if event.x == new_x and event.y == new_y
  166.         # 穿透为 ON
  167.         unless event.through
  168.           # 自己就是事件的情况下
  169.           if self != $game_player
  170.             # 不能通行
  171.             return false
  172.           end
  173.           # 自己是主角、对方的图形是角色的情况下
  174.           if event.character_name != ""
  175.             # 不能通行
  176.             return false
  177.           end
  178.         end
  179.       end
  180.     end
  181.     # 主角的坐标与移动目标坐标一致的情况下
  182.     if $game_player.x == new_x and $game_player.y == new_y
  183.       # 穿透为 ON
  184.       unless $game_player.through
  185.         # 自己的图形是角色的情况下
  186.         if @character_name != ""
  187.           # 不能通行
  188.           return false
  189.         end
  190.       end
  191.     end
  192.     # 可以通行
  193.     return true
  194.   end
  195.   
  196.   #--------------------------------------------------------------------------
  197.   # ● 可以通行判定 (无视事件版)
  198.   #--------------------------------------------------------------------------
  199.   def passable_no_event?(x, y, d)
  200.     # 求得新的坐标
  201.     new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
  202.     new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
  203.     # 坐标在地图以外的情况
  204.     unless $game_map.valid?(new_x, new_y)
  205.       # 不能通行
  206.       return false
  207.     end
  208.     # 穿透是 ON 的情况下
  209.     if @through
  210.       # 可以通行
  211.       return true
  212.     end
  213.     # 移动者的元件无法来到指定方向的情况下
  214.     unless $game_map.passable?(x, y, d, self)
  215.       # 通行不可
  216.       return false
  217.     end
  218.     # 从指定方向不能进入到移动处的元件的情况下
  219.     unless $game_map.passable?(new_x, new_y, 10 - d)
  220.       # 不能通行
  221.       return false
  222.     end
  223.     # 循环全部事件
  224.     for event in $game_map.events.values
  225.       # 事件坐标于移动目标坐标一致的情况下
  226.       if event.x == new_x and event.y == new_y
  227.         # 穿透为 ON
  228.         unless event.through
  229.           # 自己就是事件的情况下
  230.           if self != $game_player
  231.             # 能通行
  232.             return  true
  233.           end
  234.           # 自己是主角、对方的图形是角色的情况下
  235.           if event.character_name != ""
  236.             # 能通行
  237.             return false
  238.           end
  239.         end
  240.       end
  241.     end
  242.     # 主角的坐标与移动目标坐标一致的情况下
  243.     if $game_player.x == new_x and $game_player.y == new_y
  244.       # 穿透为 ON
  245.       unless $game_player.through
  246.         # 自己的图形是角色的情况下
  247.         if @character_name != ""
  248.           # 不能通行
  249.           return false
  250.         end
  251.       end
  252.     end
  253.     # 可以通行
  254.     return true
  255.   end
  256.   
  257.   #--------------------------------------------------------------------------
  258.   # ● 锁定
  259.   #--------------------------------------------------------------------------
  260.   def lock
  261.     # 如果已经被锁定的情况下
  262.     if @locked
  263.       # 过程结束
  264.       return
  265.     end
  266.     # 保存锁定前的朝向
  267.     @prelock_direction = @direction
  268.     # 保存主角的朝向
  269.     turn_toward_player
  270.     # 设置锁定中标志
  271.     @locked = true
  272.   end
  273.   #--------------------------------------------------------------------------
  274.   # ● 锁定中判定
  275.   #--------------------------------------------------------------------------
  276.   def lock?
  277.     return @locked
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ● 解除锁定
  281.   #--------------------------------------------------------------------------
  282.   def unlock
  283.     # 没有锁定的情况下
  284.     unless @locked
  285.       # 过程结束
  286.       return
  287.     end
  288.     # 清除锁定中标志
  289.     @locked = false
  290.     # 没有固定朝向的情况下
  291.     unless @direction_fix
  292.       # 如果保存了锁定前的方向
  293.       if @prelock_direction != 0
  294.         # 还原为锁定前的方向
  295.         @direction = @prelock_direction
  296.       end
  297.     end
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● 移动到指定位置
  301.   #     x : X 坐标
  302.   #     y : Y 坐标
  303.   #--------------------------------------------------------------------------
  304.   def moveto(x, y)
  305.     @x = x % $game_map.width
  306.     @y = y % $game_map.height
  307.     @real_x = @x * 128
  308.     @real_y = @y * 128
  309.     @prelock_direction = 0
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● 获取画面 X 坐标
  313.   #--------------------------------------------------------------------------
  314.   def screen_x
  315.     # 通过实际坐标和地图的显示位置来求得画面坐标
  316.     return (@real_x - $game_map.display_x + 3) / 4 + 16
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● 获取画面 Y 坐标
  320.   #--------------------------------------------------------------------------
  321.   def screen_y
  322.     # 通过实际坐标和地图的显示位置来求得画面坐标
  323.     y = (@real_y - $game_map.display_y + 3) / 4 + 32
  324.     # 取跳跃计数小的 Y 坐标
  325.     if @jump_count >= @jump_peak
  326.       n = @jump_count - @jump_peak
  327.     else
  328.       n = @jump_peak - @jump_count
  329.     end
  330.     return y - (@jump_peak * @jump_peak - n * n) / 2
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● 获取画面 Z 坐标
  334.   #     height : 角色的高度
  335.   #--------------------------------------------------------------------------
  336.   def screen_z(height = 0)
  337.     # 在最前显示的标志为 ON 的情况下
  338.     if @always_on_top
  339.       # 无条件设置为 999
  340.       return 999
  341.     end
  342.     # 通过实际坐标和地图的显示位置来求得画面坐标
  343.     z = (@real_y - $game_map.display_y + 3) / 4 + 32
  344.     # 元件的情况下
  345.     if @tile_id > 0
  346.       # 元件的优先不足 * 32
  347.       return z + $game_map.priorities[@tile_id] * 32
  348.     # 角色的场合
  349.     else
  350.       # 如果高度超过 32 就判定为满足 31
  351.       return z + ((height > 32) ? 31 : 0)
  352.     end
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● 取得繁茂
  356.   #--------------------------------------------------------------------------
  357.   def bush_depth
  358.     # 是元件、并且在最前显示为 ON 的情况下
  359.     if @tile_id > 0 or @always_on_top
  360.       return 0
  361.     end
  362.     # 在跳跃以外的状态时繁茂处元件的属性为 12,除此之外为 0
  363.     if @jump_count == 0 and $game_map.bush?(@x, @y)
  364.       return 12
  365.     else
  366.       return 0
  367.     end
  368.   end
  369.   #--------------------------------------------------------------------------
  370.   # ● 取得地形标记
  371.   #--------------------------------------------------------------------------
  372.   def terrain_tag
  373.     return $game_map.terrain_tag(@x, @y)
  374.   end
  375. end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 05:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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