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

Project1

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

[有事请教] @team_groups = []

[复制链接]

Lv4.逐梦者

梦石
0
星屑
6326
在线时间
1108 小时
注册时间
2015-8-15
帖子
659
跳转到指定楼层
1
发表于 2023-5-16 08:47:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 金芒芒 于 2023-5-16 09:17 编辑

如何让我方组队@team_groups = []   变成5个小组
让[final_x = nil , final_y = nil  ] 分成5个小组的最终坐标
下面脚本748 开始手动



RUBY 代码复制
  1. class Scene_Map
  2.  
  3.   #--------------------------------------------------------
  4.   # EFS系统 主初始化函数:
  5.   #--------------------------------------------------------
  6.   #定义EFS系统主初始化(攻击者,防御者,模式=2)
  7.   def efs_main_initialize(attacker,defender,mode = 2)
  8.     #把进攻者和防守者根据是那队分配 进攻者
  9.     #团队组=攻击者。参与者团队?攻击者。队员:防守队员。成员
  10.     @team_groups = attacker.player_team ? attacker.member :  defender.member
  11.     #敌军组 =攻击者。玩家_团队?攻击者。队员:防守队员。成员
  12.     @enermy_groups = attacker.player_team ? defender.member : attacker.member
  13.     #团队组=攻击者。玩家_团队?攻击者。队员:
  14.     @team_army = attacker.player_team ? attacker :  defender
  15.     #敌军组 =攻击者。玩家_团队?防守队员。成员
  16.     @enermy_army = attacker.player_team ? defender : attacker
  17.  
  18.     @team_display_area = [] #团队显示区域=[]
  19.  
  20.     #清空地图切换状态
  21.     #@地图已更换 = 不真实的
  22.     @map_changed = false   
  23.     #进入EFS的开关打开了
  24.     #游戏临时演员。在efs中=真
  25.     $game_temp.inefs = true   
  26.     #获得出生范围s
  27.     #案例模式
  28.     case mode
  29.     #
  30.     when 1..2
  31.       get_spawn_areas  #获得出生区域  
  32.       spawn_groups #出生组   
  33.     when 3
  34.       get_spawn_areas_terr_tag #获取出生区域领域标签
  35.       spawn_groups_ambush  #出生群_伏击
  36.     when 4
  37.  
  38.     when 5
  39.  
  40.     end
  41.  
  42.  
  43.     #设置初始内容
  44.     set_initial
  45.  
  46.  
  47.     @efs_all_dead = false #@efs全部失效=错误
  48.  
  49.     @efs_victory = false  # @efs胜利=错误
  50.     @efs_escape = false # @efs逃跑=错误
  51.  
  52.  
  53.  
  54.     #
  55.     #@current_leader.kds if @current_leader1 != nil
  56.     #命令全体人
  57.     #@定位器 = 0
  58.     @lisenter = 0
  59.     #@组定位器=[1,2,3,4,5]
  60.     @group_lisenter = [1,2,3,4,5]
  61.  
  62.  
  63.     #战前补充
  64.     attacker.refill#攻击者补充
  65.     defender.refill#防守者补充
  66.     #还原队伍移动方式设置
  67.     reset_group_movement#重置组移动
  68.     @group_think_counter = 0 #@组思维计数器=0
  69.     @group_think_period = 50 #@组思考周期 = 50
  70.  
  71.     #根据战斗模式调整相关######调整基准启用模式
  72.     adjust_base_on_mode
  73.  
  74.   end
  75.   #--------------------------------------------------------
  76.   # 检查是否是玩家控制
  77.   #--------------------------------------------------------  
  78.   def check_player_controll#定义检查_图层_控制
  79.     #@团队S。每个做|组|
  80.     @team_groups.each do|group|
  81.       #组战士每个都做|f|
  82.       group.fighter.each do|f|
  83.        #如果f是a,则返回true?(EFS_Hero)而不是f.死了?
  84.        return true if f.is_a?(EFS_Hero) and not f.dead?
  85.       end
  86.     end  
  87.     return false#返回假
  88.   end
  89.  
  90.   #--------------------------------------------------------
  91.   # 设置队伍
  92.   #--------------------------------------------------------  
  93.   def set_initial                 # 初始定义设置
  94.     for groups in @team_groups    # 对于@团队组中的组
  95.       for f in groups.fighter     # 对于分组中的f。战士
  96.         f.setTeam(1)              # f.设置团队(1)
  97.       end
  98.     end  
  99.     for groups in @enermy_groups  # 对于@敌军组中的组
  100.       for e in groups.fighter     # 对于分组中的e。战士
  101.         e.setTeam(2)              # e.设置团队(2)
  102.       end  
  103.     end  
  104.   end  
  105.   #--------------------------------------------------------
  106.   # 重置移动类型
  107.   #--------------------------------------------------------  
  108.   def reset_group_movement       # 定义重置组移动
  109.     for groups in @team_groups   # 对于@团队组中的组
  110.       groups.group_move_type = 0 # 组。组移动类型=0
  111.     end  
  112.     for groups in @enermy_groups # 对于@敌军组中的组
  113.       groups.group_move_type = 0 # 组。组移动类型=0
  114.     end
  115.   end
  116.   #--------------------------------------------------------
  117.   # 放置队长
  118.   #--------------------------------------------------------
  119.   def deploy_captains#定义放置队长
  120.  
  121.  
  122.   end  
  123.  
  124.   #--------------------------------------------------------
  125.   # 设置初始阵形
  126.   #--------------------------------------------------------  
  127.   def group_them_up#定义将它们分组
  128.  
  129.     return if @efs_mode != 2#返回如果@efs模式!=2.
  130.     #团队编队=EFS军队编队。new(@团队军队,1)
  131.     team_formation =  EFS_Army_Formation.new(@team_army,1)
  132.     #敌军编队=EFS军队编队。new(@敌军军队,1)
  133.     enermy_formation = EFS_Army_Formation.new(@enermy_army,1)
  134.     #x大小,y大小 = 团队组建。计算组建_ a(@目标d)
  135.     x_size , y_size = team_formation.calculate_formation_a(@target_d)
  136.     #x_极限=(@o0[0]-@o1[0])。绝对值
  137.     x_limit = (@o0[0] - @o1[0] ).abs
  138.     #y_极限=(@o0[0]-@o1[0])。绝对值
  139.     y_limit = (@o0[1] - @o1[1] ).abs
  140.  
  141.  
  142.     if x_size <= x_limit and y_size <= y_limit
  143.     team_formation.start(@target_x,@target_y,@target_d)
  144.  
  145.     for groups in @team_groups
  146.     next unless groups.aviliable?
  147.       for f in groups.fighter
  148.         f.moveto(f.goal_x,f.goal_y)
  149.       end
  150.     end
  151.  
  152.      Notification.post("阵形布置完毕!")
  153.     else
  154.  
  155.      Notification.post("由于地形原因,阵形无法施展开!")
  156.      manually_group_them_up
  157.  
  158.  
  159.  
  160.     end  
  161.  
  162.  
  163.  
  164.     x_size , y_size = enermy_formation.calculate_formation_a(@e_target_d)
  165.  
  166.     if x_size <= x_limit and y_size <= y_limit
  167.       enermy_formation.start(@e_target_x,@e_target_y,@e_target_d)
  168.  
  169.     for groups in @enermy_groups
  170.     next unless groups.aviliable?
  171.     groups.set_up_rect(groups.captain.direction)
  172.       for f in groups.fighter
  173.         f.moveto(f.goal_x,f.goal_y)
  174.       end
  175.     end
  176.  
  177.     end  #if
  178.  
  179.     for groups in @team_groups
  180.     next unless groups.aviliable?
  181.     groups.set_move_type(1)
  182.     end
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.   end
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.    #=======================================================
  197.   # EFS 战斗模式
  198.   # 1 : 混战 (阵形不可用,默认全军冲锋,默认出生点)
  199.   # 2 : 正常阵形状 (正常有阵形,默认推进,默认出生点)
  200.   # 3 : 伏击战 (守军士气大跌,被夹击包围,伏击出生点)
  201.   # 4 : 攻城战  (守军站在墙上指定位置,攻方默认出生点,守军城墙点)
  202.   # 5 : 巷战    (有居民助战和乱窜,攻方默认出生点,守方分队出生点)
  203.   # 6 : 扫荡战  (抽取部分攻方打守方(每队5人内),混战,默认出生点)
  204.   #--------------------------------------------------------
  205.   # 根据模式调整
  206.   #--------------------------------------------------------  
  207.   def adjust_base_on_mode
  208.     case @efs_mode
  209.     when 1
  210.         @team_groups.each do|groups|
  211.         groups.set_move_type(3)
  212.         end
  213.         @enermy_groups.each do|groups|
  214.         groups.set_move_type(3)
  215.         end
  216.     when 2
  217.         @team_groups.each do|groups|
  218.         groups.set_move_type(1)
  219.         end
  220.         @enermy_groups.each do|groups|
  221.         groups.set_move_type(1)
  222.         end      
  223.     when 3
  224.         @team_groups.each do|groups|
  225.         groups.set_move_type(3)
  226.         end
  227.         @enermy_groups.each do|groups|
  228.         groups.set_move_type(3)
  229.         end
  230.     when 4
  231.         @attacker.member.each do|groups|
  232.         groups.set_move_type(3)
  233.         end
  234.         @defender.member.each do|groups|
  235.         groups.set_move_type(1)
  236.         end      
  237.     else   
  238.     end
  239.   end
  240.  
  241.   #--------------------------------------------------------
  242.   # 就当作切换地图的函数:
  243.   #--------------------------------------------------------  
  244.  
  245.   def engage(my_id,e_id)
  246.     $game_map.map_id  #????
  247.     load_or_map_data #记录旧的地图信息
  248.  
  249.      #读取一个地图信息
  250.     get_new_map_info   
  251.  
  252.     change_map   #开始切换地图
  253.   end  
  254.  
  255.   #--------------------------------------------------------
  256.   # 获得出生点位置
  257.   #--------------------------------------------------------  
  258.   def get_spawn_areas
  259.     #=====临时标记
  260.     b = $game_map.mpname.split(";")
  261.     o0 = [b[1].split(",")[0].to_i,b[1].split(",")[1].to_i]
  262.     o1 = [b[2].split(",")[0].to_i,b[2].split(",")[1].to_i]   
  263.     e0 = [b[3].split(",")[0].to_i,b[3].split(",")[1].to_i]
  264.     e1 = [b[4].split(",")[0].to_i,b[4].split(",")[1].to_i]
  265.  
  266.  
  267.     @team_spawn_height =  (o0[0]-o1[0]).abs
  268.     @team_spawn_width = (o0[1]-o1[1]).abs
  269.  
  270.  
  271.     @o0 = o0
  272.     @o1 = o1
  273.     @e0 = e0
  274.     @e1 = e1
  275.  
  276.  
  277.     @efs_enermy_spawn = []
  278.     @efs_team_spawn = []
  279.  
  280.     if @attacker.player_team#######
  281.       for x in o0[0]..o1[0]
  282.         for y in o0[1]..o1[1]
  283.           @efs_team_spawn.push([x,y]) if $game_map._passable?(x,y,0)
  284.  
  285.           end  
  286.       end  
  287.        make_map_move(@efs_team_spawn)
  288.       for x in e0[0]..e1[0]
  289.         for y in e0[1]..e1[1]
  290.           @efs_enermy_spawn.push([x,y]) if $game_map._passable?(x,y,0)
  291.         end  
  292.       end   
  293.     else ##########
  294.       for x in o0[0]..o1[0]
  295.         for y in o0[1]..o1[1]
  296.          @efs_enermy_spawn.push([x,y]) if $game_map._passable?(x,y,0)
  297.         end  
  298.      end  
  299.        make_map_move(@efs_enermy_spawn)
  300.       for x in e0[0]..e1[0]
  301.         for y in e0[1]..e1[1]
  302.            @efs_team_spawn.push([x,y]) if $game_map._passable?(x,y,0)
  303.        end  
  304.       end   
  305.     end  #########
  306.  
  307.         #==========
  308.  
  309.  
  310.  
  311.  
  312.     #make_map_move(@efs_enermy_spawn)
  313.     #make_map_move(@efs_team_spawn)
  314.  
  315.   end
  316.  
  317.  
  318.  
  319.   def check_formation_size_with_map_spawn_size(d)
  320.     calculate_formation_a(d)
  321.   end
  322.  
  323.   #--------------------------------------------------------
  324.   # 获得出生点位置(地形标记)
  325.   # 15 埋伏模式 防守方出生点
  326.   # 14 埋伏模式 攻击方出生点 正
  327.   # 13 埋伏模式 攻击方出生点 侧 1
  328.   # 12 埋伏模式 攻击方出生点 侧 2
  329.   # 11
  330.   # 10
  331.   #--------------------------------------------------------  
  332.   def get_spawn_areas_terr_tag
  333.     @efs_ambush_defender_spawn = []
  334.     @efs_ambush_attacker_spawn_0 = []
  335.     @efs_ambush_attacker_spawn_1 = []
  336.     @efs_ambush_attacker_spawn_2 = []
  337.  
  338.     for x in 0..$game_map.width-1
  339.       for y in 0..$game_map.height-1
  340.         case $game_map.terrain_tag(x,y)
  341.         when 15
  342.           @efs_ambush_defender_spawn.push ([x,y])
  343.         when 14
  344.           @efs_ambush_attacker_spawn_0.push ([x,y])
  345.         when 13
  346.           @efs_ambush_attacker_spawn_1.push ([x,y])
  347.         when 12
  348.           @efs_ambush_attacker_spawn_2.push ([x,y])
  349.         end
  350.       end
  351.     end  
  352.  
  353.  
  354.   end
  355.   #--------------------------------------------------------
  356.   # EFS系统:出生小队 (MODE: 伏击模式)
  357.   #--------------------------------------------------------
  358.   def spawn_groups_ambush
  359.     @current_leader = nil
  360.     #获得空地
  361.  
  362.  
  363.     attacker_groups = @attacker.member
  364.     defender_groups = @defender.member
  365.  
  366.  
  367.     space = @efs_ambush_defender_spawn.clone
  368.     #p space[0],space[1],space[2]
  369.  
  370.     #领导check
  371.     for i in 0.. @team_groups.size-1
  372.       for j in 0.. @team_groups[i].fighter.size-1
  373.         @current_leader = @team_groups[i].fighter[j] if @team_groups[i].fighter[j].is_a?(EFS_Hero) and not @team_groups[i].fighter[j].dead?
  374.       end #for j in 0.. @team_groups[i].fighter.size-1
  375.     end  #for i in 0.. @team_groups.size-
  376.  
  377.    for i in 0.. defender_groups.size-1
  378.     for j in 0.. defender_groups[i].fighter.size-1
  379.       if space.size == 0
  380.         print "无法散开队伍进行战斗"
  381.       else
  382.         a = space[0]
  383.         next if defender_groups[i].fighter[j].dead?
  384.         #生成战斗者
  385.         conjure_efs(a[0],a[1],"DEF","theplayer",2,defender_groups[i].fighter[j])
  386.         defender_groups[i].fighter[j].setImoprtantData(@current_leader,i+1)
  387.         defender_groups[i].fighter[j].set_goal_xy(a[0],a[1])
  388.  
  389.  
  390.         #删除空地
  391.         space.delete([a[0],a[1]])
  392.       end #if
  393.      end #for j in 0.. @team_groups[i].fighter.size-1
  394.    end  #for i in 0.. @team_groups.size-1
  395.    ###########
  396.    numbers = 0
  397.    for i in 0.. @enermy_groups.size-1
  398.     for j in 0.. @enermy_groups[i].fighter.size-1
  399.        numbers+=1
  400.     end
  401.    end
  402.    one_third_cut =  numbers/3
  403.  
  404.  
  405.    space0 = @efs_ambush_attacker_spawn_0
  406.    space1 = @efs_ambush_attacker_spawn_1
  407.    space2 = @efs_ambush_attacker_spawn_2
  408.  
  409.  
  410.    counter_for_num = 0
  411.    for i in 0.. attacker_groups.size-1
  412.     for j in 0.. attacker_groups[i].fighter.size-1
  413.       #make_map_move(space)
  414.       if space.size == 0
  415.         print "无法散开队伍进行战斗"
  416.       else
  417.         if counter_for_num < one_third_cut
  418.           a = space0[0]
  419.         elsif counter_for_num < one_third_cut*2
  420.           a = space1[0]
  421.         else
  422.           a = space2[0]
  423.         end  
  424.  
  425.  
  426.         #counter2 += 1
  427.         next if attacker_groups[i].fighter[j].dead?
  428.         conjure_efs(a[0],a[1],"ATK","player",8,attacker_groups[i].fighter[j])
  429.         attacker_groups[i].fighter[j].setImoprtantData(@current_leader,i+1)
  430.         attacker_groups[i].fighter[j].set_goal_xy(a[0],a[1])
  431.         #删除空地
  432.         if counter_for_num < one_third_cut
  433.           space0.delete([a[0],a[1]])
  434.         elsif counter_for_num < one_third_cut*2
  435.           space1.delete([a[0],a[1]])
  436.         else
  437.           space2.delete([a[0],a[1]])
  438.         end  
  439.  
  440.  
  441.       end #if
  442.       counter_for_num+=1
  443.      end #for j in 0.. @team_groups[i].fighter.size-1
  444.    end  #for i in 0.. @team_groups.size-1
  445.  
  446.     # 重置
  447.     @spriteset.dispose
  448.     @spriteset = Spriteset_Map.new
  449.  
  450.   end  
  451.  
  452.  
  453.  
  454.   #--------------------------------------------------------
  455.   # 获得新地图信息
  456.   #--------------------------------------------------------
  457.   def get_new_map_info
  458.     #load_data("Data/MapInfos.rxdata")[7].name
  459.     list = []
  460.     final_list = []
  461.     #添加所有备选地图
  462.     #p @defender.event.terrain_tag
  463.  
  464.     Map_Info::TERRAIN_MAP[@defender.event.terrain_tag].each do|i|
  465.      # p "bang",$game_map.map_id,i
  466.       b = load_data("Data/MapInfos.rxdata")[i].name.split(";")
  467.       avilible_mode = b[5].split(",")
  468.       if Map_Info::SUB_MAPS[$game_map.map_id].include?(i) and avilible_mode.include?(@efs_mode.to_s)
  469.       list.push i
  470.       end
  471.     end
  472.     #根据地图大小筛选地图
  473.     def_num =  @defender.get_alive_num
  474.     atk_num =  @attacker.get_alive_num
  475.     #p list
  476.     list.each do|i|
  477.     b = load_data("Data/MapInfos.rxdata")[i].name.split(";")
  478.     o0 = [b[1].split(",")[0].to_i,b[1].split(",")[1].to_i]
  479.     o1 = [b[2].split(",")[0].to_i,b[2].split(",")[1].to_i]   
  480.     e0 = [b[3].split(",")[0].to_i,b[3].split(",")[1].to_i]
  481.     e1 = [b[4].split(",")[0].to_i,b[4].split(",")[1].to_i]
  482.     atk_size = (o1[0]-o0[0])*(o1[1]-o0[1])
  483.     #               x       *      y
  484.     def_size = (e1[0]-e0[0])*(e1[1]-e0[1])
  485.     #p atk_size,def_size
  486.     final_list.push i if atk_num <= atk_size and def_num <= def_size
  487.  
  488.     end
  489.     #最终抽取
  490.     new_map = final_list[rand(final_list.size)]
  491.  
  492.     if new_map == nil or load_data("Data/MapInfos.rxdata")[new_map] == nil
  493.     p " 无可用地图"
  494.     p "DEF NUM, ATK NUM: ", def_num , atk_num
  495.  
  496.  
  497.  
  498.     $scene = nil
  499.     end
  500.  
  501.     #计算各种坐标
  502.     b = load_data("Data/MapInfos.rxdata")[new_map].name.split(";")
  503.     o0 = [b[1].split(",")[0].to_i,b[1].split(",")[1].to_i]
  504.     o1 = [b[2].split(",")[0].to_i,b[2].split(",")[1].to_i]   
  505.     e0 = [b[3].split(",")[0].to_i,b[3].split(",")[1].to_i]
  506.     e1 = [b[4].split(",")[0].to_i,b[4].split(",")[1].to_i]
  507.     if @attacker.player_team
  508.     @target_x = (o0[0]+o1[0])/2
  509.     @target_y = (o0[1]+o1[1])/2
  510.     @e_target_x = (e0[0]+e1[0])/2
  511.     @e_target_y = (e0[1]+e1[1])/2
  512.     else
  513.     @e_target_x = (o0[0]+o1[0])/2
  514.     @e_target_y = (o0[1]+o1[1])/2
  515.     @target_x = (e0[0]+e1[0])/2
  516.     @target_y = (e0[1]+e1[1])/2
  517.     end
  518.     #目标地图
  519.     @target_map_id = new_map
  520.     #计算方向
  521.  
  522.  
  523.     @target_d = get_d_toward(@target_x,@target_y,@e_target_x,@e_target_y)
  524.     @e_target_d = get_d_toward(@e_target_x,@e_target_y,@target_x,@target_y)
  525.  
  526.    # p @attacker.player_team,@target_d,@e_target_d
  527.  
  528.   end
  529.   #Helper method--------------------------------------
  530.   def get_d_toward(x,y,xx,yy)
  531.     sx = x - xx
  532.     sy = y - yy
  533.     if sx.abs > sy.abs
  534.       return sx > 0 ? 4 : 6
  535.     else
  536.       return sy > 0 ? 8 : 2
  537.     end     
  538.   end
  539.   #--------------------------------------------------------
  540.   # EFS系统:出生小队
  541.   #--------------------------------------------------------
  542.   def spawn_groups
  543.     @current_leader = nil
  544.     #获得空地
  545.  
  546.     space = @efs_team_spawn.clone
  547.     #p space[0],space[1],space[2]
  548.  
  549.     for i in 0.. @team_groups.size-1
  550.       for j in 0.. @team_groups[i].fighter.size-1
  551.         @current_leader = @team_groups[i].fighter[j] if @team_groups[i].fighter[j].is_a?(EFS_Hero) and not @team_groups[i].fighter[j].dead?
  552.       end #for j in 0.. @team_groups[i].fighter.size-1
  553.     end  #for i in 0.. @team_groups.size-
  554.    counter = 0
  555.    for i in 0.. @team_groups.size-1
  556.     for j in 0.. @team_groups[i].fighter.size-1
  557.       #make_map_move(space)
  558.       if space.size == 0
  559.         print "无法散开队伍进行战斗"
  560.       else
  561.         #p counter
  562.         a = space[counter]
  563.         #counter += 1
  564.  
  565.         next if @team_groups[i].fighter[j].dead?
  566.         #生成战斗者
  567.         conjure_efs(a[0],a[1],"MY","theplayer",2,@team_groups[i].fighter[j])
  568.         @team_groups[i].fighter[j].setImoprtantData(@current_leader,i+1)
  569.         @team_groups[i].fighter[j].set_goal_xy(a[0],a[1])
  570.        # p 1
  571.  
  572.         #删除空地
  573.         space.delete([a[0],a[1]])
  574.       end #if
  575.      end #for j in 0.. @team_groups[i].fighter.size-1
  576.    end  #for i in 0.. @team_groups.size-1
  577.    ###########
  578.    space = @efs_enermy_spawn
  579.    counter2 = 0
  580.    for i in 0.. @enermy_groups.size-1
  581.     for j in 0.. @enermy_groups[i].fighter.size-1
  582.       #make_map_move(space)
  583.       if space.size == 0
  584.         print "无法散开队伍进行战斗"
  585.       else
  586.         a = space[counter2]
  587.         #counter2 += 1
  588.         next if @enermy_groups[i].fighter[j].dead?
  589.         conjure_efs(a[0],a[1],"EN","player",8,@enermy_groups[i].fighter[j])
  590.         @enermy_groups[i].fighter[j].setImoprtantData(@current_leader,i+1)
  591.         @enermy_groups[i].fighter[j].set_goal_xy(a[0],a[1])
  592.         #删除空地
  593.         space.delete([a[0],a[1]])
  594.  
  595.       end #if
  596.      end #for j in 0.. @team_groups[i].fighter.size-1
  597.    end  #for i in 0.. @team_groups.size-1
  598.  
  599.     # 重置
  600.     @spriteset.dispose
  601.     @spriteset = Spriteset_Map.new
  602.  
  603.   end  
  604.  
  605.  
  606.   #--------------------------------------------------------------------------
  607.   # ● 切换地图
  608.   #--------------------------------------------------------------------------  
  609.   def change_map
  610.     # 场所移动中、信息显示中、过渡处理中的情况下
  611.     if $game_temp.player_transferring or
  612.        $game_temp.message_window_showing or
  613.        $game_temp.transition_processing
  614.       # 结束
  615.       return false
  616.     end
  617.     $game_temp.player_transferring = true
  618.       # 设置主角的移动目标
  619.       $game_temp.player_new_map_id = @target_map_id
  620.       $game_temp.player_new_x = @target_x
  621.       $game_temp.player_new_y = @target_y
  622.       $game_temp.player_new_direction = @target_d
  623.       # 准备过渡
  624.       Graphics.freeze
  625.       # 设置过渡处理中标志
  626.       $game_temp.transition_processing = true
  627.       $game_temp.transition_name = ""
  628.     return false
  629.   #--------------------------------------------------------------------------   
  630.    end  
  631.  
  632.  
  633.  
  634.   #--------------------------------------------------------------------------
  635.   # ● 战斗结束返回地图
  636.   #--------------------------------------------------------------------------      
  637.   def back_to_map
  638.       # 设置主角的移动目标
  639.       $game_temp.player_new_map_id = @or_map_id
  640.       $game_temp.player_new_x = @or_x
  641.       $game_temp.player_new_y = @or_y
  642.       $game_temp.player_new_direction = @or_d
  643.       # 准备过渡
  644.       Graphics.freeze
  645.       # 设置过渡处理中标志
  646.       $game_temp.transition_processing = true
  647.       $game_temp.transition_name = ""
  648.       transfer_player
  649.   end   
  650.  
  651.  
  652.   def load_or_map_data
  653.     @or_map_id = $game_map.map_id
  654.     @or_x =  $game_player.x
  655.     @or_y =  $game_player.y
  656.     @or_d =  $game_player.direction
  657.   end  
  658.  
  659.  
  660.   #--------------------------------------------------------------------------
  661.   # ● 生成
  662.   #--------------------------------------------------------------------------  
  663.   def conjure_efs(x,y,name,character_name,d,e)
  664.     e.name = name
  665.     e.character_name = character_name
  666.     e.direction = d
  667.     e.moveto(x,y)
  668.     e.refresh
  669.     $game_map.fighters[$game_map.fighters.size+1] = e
  670.     e.setSpawn(x,y)
  671.  
  672.  
  673.  
  674.  
  675.   end
  676. =begin
  677.   #--------------------------------------------------------
  678.   # 设置初始阵形
  679.   #--------------------------------------------------------  
  680.   def group_them_up
  681.     
  682. #    p @target_d
  683.     return if @efs_mode != 2
  684.     #calculate_formation_a(d)
  685.     #@target_x
  686.     
  687.     
  688.     team_formation =  EFS_Army_Formation.new(@team_army,1)
  689.     enermy_formation = EFS_Army_Formation.new(@enermy_army,1)
  690.  
  691.     x_size , y_size = team_formation.calculate_formation_a(@target_d)
  692.     x_limit = (@o0[0] - @o1[0] ).abs
  693.     y_limit = (@o0[1] - @o1[1] ).abs
  694.     
  695.     
  696.     if x_size <= x_limit and y_size <= y_limit
  697.     team_formation.start(@target_x,@target_y,@target_d)
  698.     
  699.     for groups in @team_groups
  700.     next unless groups.aviliable?
  701.     #groups.set_up_rect(groups.captain.direction)
  702.       for f in groups.fighter
  703.         f.moveto(f.goal_x,f.goal_y)
  704.       end
  705.     end
  706.     
  707.      Notification.post("阵形布置完毕!")
  708.     else
  709.     
  710.      Notification.post("由于地形原因,阵形无法施展开!")
  711.     
  712.     
  713.     
  714.     
  715.     end  
  716.  
  717.  
  718.     
  719.     x_size , y_size = enermy_formation.calculate_formation_a(@e_target_d)
  720.     
  721.     if x_size <= x_limit and y_size <= y_limit
  722.       enermy_formation.start(@e_target_x,@e_target_y,@e_target_d)
  723.  
  724.     for groups in @enermy_groups
  725.     next unless groups.aviliable?
  726.     groups.set_up_rect(groups.captain.direction)
  727.       for f in groups.fighter
  728.         f.moveto(f.goal_x,f.goal_y)
  729.       end
  730.     end
  731.     
  732.     end  #if
  733.     
  734.     for groups in @team_groups
  735.     next unless groups.aviliable?
  736.     groups.set_move_type(1)
  737.     end
  738.     
  739.     
  740.     
  741.     
  742.     
  743.     
  744.   end
  745. =end
  746.  
  747.  
  748.   def manually_group_them_up#手动定义组主题
  749.     #各种刷新
  750.     Graphics.update
  751.     Input.update
  752.     @spriteset.update
  753.     #改变画面颜色
  754.     $game_screen.start_tone_change(Tone.new(@efs_tone_R,@efs_tone_G,@efs_tone_B), 20)
  755.     #等待一会儿   
  756.  
  757.     wait_a_moment(true)
  758.  
  759.     #开启消息
  760.     Notification.show
  761.  
  762.     for groups in @team_groups
  763.     next unless groups.aviliable?
  764.     groups.calculate_rect_size(@target_d)
  765.       if @target_d == 4 or @target_d == 6
  766.         if groups.get_length > @team_spawn_height or groups.get_height > @team_spawn_width
  767.           Notification.post(groups.name+"队伍过于庞大无法手动布阵!")
  768.           next
  769.         end
  770.       else
  771.         if groups.get_length > @team_spawn_width or groups.get_height > @team_spawn_height
  772.           Notification.post(groups.name+"队伍过于庞大无法手动布阵!")
  773.           next
  774.         end  
  775.       end  
  776.  
  777.       #通知。邮递                      组。名称
  778.       Notification.post("正在手动部署"+groups.name+",请选择一个一个部署地点。")
  779.       #让用户为派生(组)选择目标
  780.       let_user_choose_a_goal_for_spawn(groups)
  781.       flush_map_makers #平面地图绘制器
  782.     end
  783.    # 取消使地图移动(@团队显示区域)
  784.     cancel_make_map_move(@team_display_area)
  785.    # 取消使地图移动( @efs团队生成)
  786.     cancel_make_map_move(@efs_team_spawn)
  787.     flush_map_makers #平面地图绘制器
  788.  
  789.  
  790.  
  791.   end
  792.   #定义让用户为出生(组)选择一个目标
  793.   def let_user_choose_a_goal_for_spawn(group)
  794.     # 演奏确定 SE
  795.     $game_system.se_play($data_system.decision_se)
  796.     #临时存储=$游戏玩家。字符名称
  797.     temp_storage = $game_player.character_name
  798.     #最终x=无[1,2,3,4,5]
  799.     final_x = nil
  800.   #  final_x = [11,14,17,20,20]
  801.     #最终y=无[1,2,3,4,5]
  802.   #  final_y = [20,23,20,17,29]
  803.     final_y = nil
  804.     #cp=组.队长
  805.     cp = group.captain
  806.     x = cp.x
  807.  
  808.     y = cp.y
  809.    # cp.转向战斗者(cp.找到最近的敌人)
  810.     cp.turn_toward_fighter(cp.find_closest_enermy)
  811.      #$游戏玩家。字符名称=cp.字符名称
  812.      $game_player.character_name = cp.character_name
  813.      #游戏玩家。移动(X,Y)
  814.      $game_player.moveto(x,y)
  815.      #$游戏玩家。透明=错误
  816.      $game_player.transparent = false
  817.      #游戏玩家方向= cp.方向
  818.      $game_player.direction = cp.direction
  819.  
  820.       loop do #循环 do
  821.        pl = $game_player#游戏玩家
  822.       # @efs最后一个实数x=pl.实数x
  823.        @efs_last_real_x = pl.real_x
  824.       # @efs最后一个实数y=pl.实数y
  825.        @efs_last_real_y = pl.real_y
  826.        #游戏系统更新
  827.        $game_system.update
  828.  
  829.        #游戏_屏幕更新
  830.        $game_screen.update
  831.        @spriteset.update#精灵集更新
  832.        Input.update #输入更新
  833.       # _更新生成(组)的命令和输入
  834.        _update_comand_input_for_spawn(group)
  835.        Graphics.update#图形更新
  836.  
  837.         if Input.trigger?(Input::C)#如果输入触发器?(输入::C)
  838.           if if_user_can_deploy(group)#if-if用户可以部署(组)
  839.           # 演奏确定 SE
  840.           $game_system.se_play($data_system.decision_se)
  841.            #最终x=游戏玩家.x
  842.            final_x = $game_player.x
  843.            ##最终y=游戏玩家.y
  844.            final_y = $game_player.y
  845.             break
  846.           else  
  847.             $game_system.se_play($data_system.buzzer_se)
  848.  
  849.  
  850.           end #user can
  851.         end #if
  852.         if Input.trigger?(Input::B)
  853.             # 演奏取消 SE
  854.             $game_system.se_play($data_system.cancel_se)
  855.           #spawn_groups
  856.           #break
  857.         end
  858.       end #loop
  859.       #游戏玩家。透明度=真如果@玩家控制  
  860.       $game_player.transparent = true if @player_controll
  861.       #$游戏玩家。字符名称=临时存储
  862.       $game_player.character_name = temp_storage
  863.       return final_x, final_y
  864.  
  865.     end #def
  866.  
  867.   #--------------------------------------------------------
  868.   # EFS系统 主初始化函数:
  869.   #--------------------------------------------------------  
  870.   def _update_comand_input_for_spawn(group)
  871.   #-<方向键>------------   
  872.       if Input.repeat?(Input::UP)
  873.         #p $game_screen.tone.red
  874.         if @efs_team_spawn.include?([$game_player.x,$game_player.y-1])
  875.         $game_system.se_play($data_system.cursor_se)
  876.         cancel_make_map_move(@team_display_area)
  877.           $game_player.moveto($game_player.x,$game_player.y-1)
  878.           display_move_able_groups(group)
  879.         else  
  880.         $game_system.se_play($data_system.buzzer_se)
  881.         end  
  882.         return
  883.       end
  884.       if Input.repeat?(Input::DOWN)
  885.         if @efs_team_spawn.include?([$game_player.x,$game_player.y+1])  
  886.         $game_system.se_play($data_system.cursor_se)
  887.         cancel_make_map_move(@team_display_area)
  888.         $game_player.moveto($game_player.x,$game_player.y+1)  
  889.         display_move_able_groups(group)
  890.         else  
  891.        $game_system.se_play($data_system.buzzer_se)
  892.        end  
  893.       return
  894.       end
  895.       if Input.repeat?(Input::RIGHT)  
  896.        if @efs_team_spawn.include?([$game_player.x+1,$game_player.y])  
  897.         $game_system.se_play($data_system.cursor_se)
  898.         cancel_make_map_move(@team_display_area)
  899.           $game_player.moveto($game_player.x+1,$game_player.y)  
  900.          display_move_able_groups(group)
  901.        else  
  902.        $game_system.se_play($data_system.buzzer_se)
  903.        end  
  904.         return
  905.       end
  906.       if Input.repeat?(Input::LEFT)
  907.         if @efs_team_spawn.include?([$game_player.x-1,$game_player.y])  
  908.         $game_system.se_play($data_system.cursor_se)
  909.         cancel_make_map_move(@team_display_area)
  910.           $game_player.moveto($game_player.x-1,$game_player.y)  
  911.          display_move_able_groups(group)
  912.         else  
  913.         $game_system.se_play($data_system.buzzer_se)
  914.         end  
  915.        return
  916.       end  
  917.   end
  918.  
  919.  
  920.  
  921.   def display_move_able_groups(group)
  922.     cp = group.captain
  923.     cp.set_goal_xy($game_player.x,$game_player.y)
  924.     group.set_up_rect(group.captain.direction,1,true,false)
  925.     @team_display_area = group.display_grid_of_indiv
  926.     make_map_move(@team_display_area)
  927.       for f in group.fighter
  928.         f.moveto(f.goal_x,f.goal_y)
  929.         make_map_team_display(f)
  930.       end
  931.  
  932.  
  933.  
  934.   end
  935.  
  936.   def if_user_can_deploy(group)
  937.       for f in group.fighter
  938.         next if f.dead?
  939.         x,y = f.x,f.y
  940.          if not $game_map.passable?(x,y,10,f) or not @efs_team_spawn.include?([x,y])
  941.           return false
  942.         end
  943.       end
  944.     return true
  945.  
  946.  
  947.   end  
  948.  
  949.   def make_map_team_display(f)
  950.     x,y = f.x,f.y
  951.     if $game_map.passable?(x,y,10,f) and  @efs_team_spawn.include?([x,y])
  952.     @spriteset.flash_data[x, y] = 0xfe2af2
  953.     else
  954.       @spriteset.flash_data[x, y] = 0xf84
  955.     end  
  956.       #@efs_team_spawn
  957.       #0xf84
  958.   end
  959.  
  960.   def flush_map_makers
  961.     for x in 0..$game_map.width-1
  962.       for y in 0..$game_map.height-1
  963.          @spriteset.flash_data[x, y] = 0
  964.       end  
  965.     end  
  966.  
  967.   end
  968.  
  969.  
  970. end
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-5-6 07:14

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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