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

Project1

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

[已经过期] 如何在事件直接設置更換領隊

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
跳转到指定楼层
1
发表于 2016-3-23 04:26:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我看的資料是這篇  [轉載] 領隊系統
還有這篇   领队脚本+固定队伍完整版(2009-03-18)

我想做的事情是
我的隊伍成員可能有 A,B,F
假定我現在使用的領隊是A,但經過事件後,直接讓地圖上的領隊變成B

參考資料看完我想應該是跟$game_party.leader有關,但我不知道具體要怎麼使用
直接在事件指令調用腳本寫 $game_party.leader = $game_party.actors[@actors.index(actor_id)] 嗎?
後面的 $game_party.actors[@actors.index(actor_id)] 是我瞎猜的,想說直接指定給他目前在隊伍中的XXX的index

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

2
发表于 2016-3-23 08:24:58 | 只看该作者
若要在场景中强行更换领队,请用脚本:$game_party.leader = 序号

在这里应该为在当前队伍中角色索引,0表示第一个人,1表示第二个人,以此类推。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
3
 楼主| 发表于 2016-3-24 01:41:38 | 只看该作者
RyanBern 发表于 2016-3-23 08:24
在这里应该为在当前队伍中角色索引,0表示第一个人,1表示第二个人,以此类推。 ...

我必須要將整個腳本引入專案中嗎?
我原來的意思是直接使用 $game_party.leader = 序號
不過看來leader是腳本新加入的一定要有

因為這是針對vx然而我是使用xp,有一行錯挑一個我也只能勉強錯誤訊息說哪裡有誤去看哪行
勉強改了幾個最後變我原來使用的腳本有問題...
不過也因此看見了新的出路,然而使用後沒有效果(但也沒有跑錯誤訊息)

覺得可以成為新出路的方法依舊是直接事件指令用腳本換:
  1.     # 讀取帶頭角色
  2.     actor = $game_party.actors[序號]
  3.     if actor == nil
  4.       return
  5.     end
复制代码
但這並沒有效果


上面的想法出自我原來使用的腳本 86-90行
  1. #==============================================================================
  2. # ■ Game_Character
  3. #==============================================================================
  4. class Game_Character
  5.   attr_accessor :damage_pop            # 損傷標誌
  6.   attr_accessor :damage                # 損傷值
  7.   attr_accessor :sp_damage             # SP損傷值  
  8.   attr_accessor :critical              # 會心一擊標誌
  9.   attr_accessor :delay_count           # delay_count
  10.   attr_accessor :actor_count           # actor_count  
  11.   #--------------------------------------------------------------------------
  12.   # ● 初始化
  13.   #--------------------------------------------------------------------------
  14.   alias arpgdamage initialize
  15.   def initialize
  16.     @damage_pop = false
  17.     @damage = nil
  18.     @sp_damage = nil
  19.     @critical = false
  20.     @delay_count = 0
  21.     @actor_count = 0
  22.     arpgdamage
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 更新畫面
  26.   #--------------------------------------------------------------------------
  27.   def update
  28.     # 跳躍中、移動中、停止中的分歧
  29.     if jumping?
  30.       update_jump
  31.     elsif moving?
  32.       update_move
  33.     else
  34.       update_stop
  35.     end
  36.     # 動畫計算數值超過最大值的情況下
  37.     # ※最大值等於基本值減去移動速度 * 1 的值
  38.     if @anime_count > 18 - @move_speed * 2
  39.       # 停止動畫為 OFF 並且在停止中的情況下
  40.       if not @step_anime and @stop_count > 0
  41.         # 還原為原來的圖形
  42.         @pattern = @original_pattern
  43.       # 停止動畫為 ON 並且在移動中的情況下
  44.       else
  45.         # 更新圖形
  46.         @pattern = (@pattern + 1) % 4
  47.       end
  48.       # 清除動畫計算數值
  49.       @anime_count = 0
  50.     end
  51.     if @delay_count > 0
  52.       @delay_count -= 1
  53.     end
  54.     if @actor_count > 0
  55.       @actor_count -= 1
  56.     end   
  57.     # 等待中的情況下
  58.     if @wait_count > 0
  59.       # 減少等待計算數值
  60.       @wait_count -= 1
  61.       return
  62.     end
  63.     # 強制移動路線的場合
  64.     if @move_route_forcing
  65.       # 自定義移動
  66.       move_type_custom
  67.       return
  68.     end
  69.     # 事件執行待機中並且為鎖定狀態的情況下
  70.     if @starting or lock?
  71.       # 不做規則移動
  72.       return
  73.     end
  74.     # 如果停止計算數值超過了一定的值(由移動頻率算出)
  75.     if @stop_count > (40 - @move_frequency * 2) * (6 - @move_frequency)
  76.       # 移動類型分歧
  77.       case @move_type
  78.       when 1  # 隨機
  79.         move_type_random
  80.       when 2  # 接近
  81.         move_type_toward_player
  82.       when 3  # 自定義
  83.         move_type_custom
  84.       end
  85.     end
  86.     # 讀取帶頭角色
  87.     actor = $game_party.actors[0]
  88.     if actor == nil
  89.       return
  90.     end
  91.     # 角色沒死時
  92.     unless actor.dead?
  93.       # 執行ARPG我方事件
  94.       arpg_actor_start  
  95.       # ARPG敵事件死亡或不存在參數清除
  96.       if self.is_a?(Game_Event)
  97.         unless self.arpg_enemy?
  98.           @delay_count = 0 if @delay_count != 0
  99.           @actor_count = 0 if @actor_count != 0
  100.           @attack_mode = [false,0] if @attack_mode != [false,0]        
  101.         end
  102.         # 執行ARPG敵人事件
  103.         arpg_event_start
  104.       end
  105.     # 角色死亡時gameover
  106.     else
  107.       $game_temp.gameover = true
  108.     end
  109.   end
  110.   #-------------------------------------------------------------------
  111.   # ● 執行ARPG我方事件
  112.   #---------------------------------------------------------------------
  113.   def arpg_actor_start
  114.     # 寫入角色
  115.     actor = $game_party.actors[0]
  116.     # 進行角色的狀態自然解除
  117.     if self.is_a?(Game_Player)
  118.       if Graphics.frame_count % 20 == 0
  119.         actor.remove_states_auto
  120.       end
  121.     end
  122.     # 事件執行中與角色不存在就強制返回
  123.     if $game_system.map_interpreter.running? or actor == nil  
  124.       return
  125.     end
  126.     # 角色延遲計數>0強制返回
  127.     if @actor_count > 0
  128.       return
  129.     end   
  130.     # 角色無法行動時
  131.     if actor.restriction == 4
  132.       return
  133.     end
  134.     # 角色混亂時
  135.     if actor.restriction == 2 or actor.restriction == 3  
  136.       # 目標是我方時
  137.       if self.is_a?(Game_Player)
  138.         # 我方普攻我方
  139.         actor.arpg_attack_effect(actor,self)
  140.       end
  141.       return
  142.     end
  143.     # 參數初始
  144.     sx = $game_player.x
  145.     sy = $game_player.y
  146.     skill_id = 0
  147.     item_id = 0
  148.     type = actor.attack_type
  149.     range = actor.attack_range
  150.     push_check = false
  151.     start_check = false
  152.     # 按C鍵時(普攻)
  153.     if Input.press?(Input::C)
  154.       push_check = true
  155.     end
  156.     # 開關2開啟時
  157.     if $game_switches[2]
  158.       # 按1鍵時(技能1=變數1的值)與還沒按鈕時
  159.       if Kboard.press?($R_Key_1) && ! push_check
  160.         if actor.arpg_skill_can_use?($game_variables[1])
  161.           skill_id = $game_variables[1]
  162.           push_check = true
  163.         end
  164.       end
  165.       # 按2鍵時(技能2=變數2的值)與還沒按鈕時
  166.       if Kboard.press?($R_Key_2) && ! push_check
  167.         if actor.arpg_skill_can_use?($game_variables[2])
  168.           skill_id = $game_variables[2]
  169.           push_check = true
  170.         end
  171.       end
  172.       # 按3鍵時(技能3=變數3的值)與還沒按鈕時
  173.       if Kboard.press?($R_Key_3) && ! push_check
  174.         if actor.arpg_skill_can_use?($game_variables[3])
  175.           skill_id = $game_variables[3]
  176.           push_check = true
  177.         end
  178.       end     
  179.       # 按4鍵時(技能4=變數4的值)與還沒按鈕時
  180.       if Kboard.press?($R_Key_4) && ! push_check
  181.         if actor.arpg_skill_can_use?($game_variables[4])
  182.           skill_id = $game_variables[4]
  183.           push_check = true
  184.         end
  185.       end           
  186.     end
  187.     # 使用技能的情況
  188.     if skill_id != 0
  189.       # 寫入技能對象
  190.       scope = $data_skills[skill_id].scope
  191.       # 技能是對我方
  192.       if scope >= 3
  193.         # 目標是我方時
  194.         if self.is_a?(Game_Player)        
  195.           # 對我方使用技能
  196.           actor.arpg_skill_effect(actor,$data_skills[skill_id],self)
  197.         end
  198.         return
  199.       end
  200.       type = $data_skills[skill_id].type
  201.       range = $data_skills[skill_id].range
  202.     end
  203.     # 開關3開啟與目標是我方時
  204.     if $game_switches[3] && self.is_a?(Game_Player)
  205.       # 按Q鍵時(道具1=變數5的值)與還沒按鈕時
  206.       if Kboard.press?($R_Key_Q) && ! push_check
  207.         if $game_party.arpg_item_can_use?($game_variables[5])
  208.           item_id = $game_variables[5]
  209.           push_check = true
  210.         end
  211.       end           
  212.       # 按W鍵時(道具2=變數6的值)與還沒按鈕時
  213.       if Kboard.press?($R_Key_W) && ! push_check
  214.         if $game_party.arpg_item_can_use?($game_variables[6])
  215.           item_id = $game_variables[6]
  216.           push_check = true
  217.         end
  218.       end           
  219.       # 按E鍵時(道具3=變數7的值)與還沒按鈕時
  220.       if Kboard.press?($R_Key_E) && ! push_check
  221.         if $game_party.arpg_item_can_use?($game_variables[7])
  222.           item_id = $game_variables[7]
  223.           push_check = true
  224.         end
  225.       end           
  226.       # 按R鍵時(道具4=變數8的值)與還沒按鈕時
  227.       if Kboard.press?($R_Key_R) && ! push_check
  228.         if $game_party.arpg_item_can_use?($game_variables[8])
  229.           item_id = $game_variables[8]
  230.           push_check = true
  231.         end
  232.       end   
  233.       # 能使用道具的情況
  234.       if $game_party.arpg_item_can_use?(item_id)
  235.         # 我方使用道具
  236.         actor.arpg_item_effect($data_items[item_id])
  237.         return
  238.       end
  239.     end
  240.     # 目標是我方與不是敵人就強制返回
  241.     if self.is_a?(Game_Player) or ! self.arpg_enemy?
  242.       return
  243.     end
  244.     # 定義敵人
  245.     enemy = self.enemy   
  246.     # 按下按鈕時
  247.     if push_check
  248.       # 直線判斷
  249.       if type == 0
  250.         for i in 0..range
  251.           case $game_player.direction
  252.           when 2 # 向下
  253.             if @x == sx && @y == sy + i
  254.               if self.list != nil
  255.                 start_check = true
  256.                 break
  257.               end
  258.             end
  259.           when 4 # 向左
  260.             if @x == sx - i && @y == sy
  261.               if self.list != nil
  262.                 start_check = true
  263.                 break
  264.               end
  265.             end
  266.           when 6 # 向右
  267.             if @x == sx + i && @y == sy
  268.               if self.list != nil
  269.                 start_check = true
  270.                 break
  271.               end
  272.             end
  273.           when 8 # 向上
  274.             if @x == sx && @y == sy - i
  275.               if self.list != nil
  276.                 start_check = true
  277.                 break
  278.               end
  279.             end
  280.           end
  281.         end
  282.       end
  283.       # 矩形判斷
  284.       if type == 1
  285.         # 製作矩陣資料
  286.         data = []
  287.         w = range
  288.         h = range*2
  289.         for i in 0..h
  290.           for j in 0..h
  291.             data.push([(sx-w)+i,(sy-w)+j])
  292.           end
  293.         end
  294.         # 敵人座標在矩陣資料內時
  295.         if data.include?([@x,@y])
  296.           if self.list != nil
  297.             start_check = true
  298.           end
  299.         end
  300.       end
  301.       # 功擊成立時
  302.       if start_check
  303.         # 普攻時
  304.         if skill_id == 0
  305.           # 執行普攻敵方
  306.           enemy.arpg_attack_effect(actor,self)
  307.         # 技能時  
  308.         else
  309.           # 執行技能攻擊敵方
  310.           enemy.arpg_skill_effect(actor,$data_skills[skill_id],self)
  311.         end        
  312.       end
  313.     end
  314.   end  
  315.   #-------------------------------------------------------------------
  316.   # ● 執行ARPG敵人事件
  317.   #---------------------------------------------------------------------
  318.   def arpg_event_start
  319.     # 事件執行中的情況下
  320.     if $game_system.map_interpreter.running?
  321.       return
  322.     end   
  323.     # 不是敵人就強制返回
  324.     unless self.arpg_enemy?
  325.       return
  326.     end
  327.     # 定義敵人
  328.     enemy = self.enemy
  329.     # 進行敵人的狀態自然解除
  330.     if Graphics.frame_count % 20 == 0
  331.       enemy.remove_states_auto
  332.     end        
  333.     # 延遲計數>0強制返回
  334.     if @delay_count > 0
  335.       return
  336.     end   
  337.     # 寫入角色
  338.     actor = $game_party.actors[0]
  339.     # 敵人或角色不存在強制返回
  340.     if enemy == nil or actor == nil
  341.       return
  342.     end
  343.     # 敵人無法行動時強制返回
  344.     if enemy.restriction == 4
  345.       return
  346.     end
  347.     # 敵人移動模式選擇
  348.     p_range = $game_variables[ENEMYRANGE]
  349.     p1_range = (@x-$game_player.x).abs+(@y-$game_player.y).abs
  350.     @move_type = @page.move_type
  351.     # 如果停止計算數值超過了一定的值(由移動頻率算出)
  352.     if @stop_count > (40 - 6 * 2) * (6 - 6)
  353.       # 判斷主角在偵查範圍內
  354.       if p1_range <= p_range
  355.         # 向主角移動
  356.         move_toward_player
  357.         @move_type = 0
  358.       end
  359.     end
  360.     # 生成敵人行動
  361.     enemy.make_action(enemy.turn)
  362.     enemy.turn += 1   
  363.     # 初始化參數
  364.     range = 1
  365.     sx = $game_player.x
  366.     sy = $game_player.y
  367.     skill_id = 0
  368.     type = enemy.attack_type
  369.     range = enemy.attack_range
  370.     scope = 1
  371.     start_check = false
  372.     # 檢查敵人行動條件
  373.     case enemy.current_action.kind
  374.     when 1 # 技能
  375.       skill_id = enemy.current_action.skill_id
  376.       # 不能使用技能的情況就將skill_id設為0
  377.       unless enemy.arpg_skill_can_use?(skill_id)
  378.         skill_id = 0
  379.       end      
  380.     end
  381.     # 使用技能的情況
  382.     if skill_id != 0
  383.       # 寫入技能對象
  384.       scope = $data_skills[skill_id].scope
  385.       # 技能是攻擊型
  386.       if scope < 3
  387.         # 敵方沒有混亂時
  388.         if enemy.restriction != 2 && enemy.restriction != 3        
  389.           type = $data_skills[skill_id].type
  390.           range = $data_skills[skill_id].range
  391.         # 敵方混亂時  
  392.         else
  393.           # 敵人對自己使用技能
  394.           enemy.arpg_skill_effect(enemy,$data_skills[skill_id],self)
  395.           return
  396.         end
  397.       # 技能是回復輔助型
  398.       else
  399.         ko = false
  400.         # 讀取技能附加狀態
  401.         p_atates = $data_skills[skill_id].plus_state_set
  402.         # 檢查敵人是否已擁有附加狀態?
  403.         for i in p_atates
  404.           unless enemy.states.include?(i)
  405.             ko = true
  406.             break
  407.           end
  408.         end
  409.         # 敵人沒有技能要附加的狀態
  410.         if ko
  411.           # 敵人對自己使用技能
  412.           enemy.arpg_skill_effect(enemy,$data_skills[skill_id],self)
  413.           return
  414.         # 敵人狀態已附加  
  415.         else
  416.           # 敵人有少血
  417.           if enemy.hp < enemy.maxhp
  418.             # 敵人對自己使用技能
  419.             enemy.arpg_skill_effect(enemy,$data_skills[skill_id],self)
  420.           end
  421.           return
  422.         end
  423.       end      
  424.     end
  425.     # 直線判斷
  426.     if type == 0
  427.       for i in 0..range
  428.         case @direction
  429.         when 2 # 向下
  430.           if sx == @x && sy == @y + i
  431.             if self.list != nil
  432.               start_check = true
  433.               break
  434.             end
  435.           end
  436.         when 4 # 向左
  437.           if sx == @x - i && sy == @y
  438.             if self.list != nil
  439.               start_check = true
  440.               break
  441.             end
  442.           end
  443.         when 6 # 向右
  444.           if sx == @x + i && sy == @y         
  445.             if self.list != nil
  446.               start_check = true
  447.               break
  448.             end
  449.           end
  450.         when 8 # 向上
  451.           if sx == @x && sy == @y - i
  452.             if self.list != nil
  453.               start_check = true
  454.               break
  455.             end
  456.           end
  457.         end
  458.       end
  459.     end
  460.     # 矩形判斷
  461.     if type == 1
  462.       # 製作矩陣資料
  463.       data = []
  464.       w = range
  465.       h = range*2
  466.       for i in 0..h
  467.         for j in 0..h
  468.           data.push([(@x-w)+i,(@y-w)+j])
  469.         end
  470.       end
  471.       # 我方座標在矩陣資料內時
  472.       if data.include?([sx,sy])
  473.         if self.list != nil
  474.           start_check = true
  475.         end
  476.       end
  477.     end
  478.     # 確認行動時
  479.     if start_check
  480.       # 普攻時
  481.       if skill_id == 0
  482.         # 執行普攻我方
  483.         actor.arpg_attack_effect(enemy,self)
  484.       # 技能時  
  485.       else
  486.         # 執行技能攻擊我方
  487.         actor.arpg_skill_effect(enemy,$data_skills[skill_id],self)
  488.       end
  489.     end
  490.   end
  491. #--------------------------------------------------------------------------
  492. # ● ARPG敵人的判斷
  493. #--------------------------------------------------------------------------  
  494.   def arpg_enemy?
  495.     if self.is_a?(Game_Event)
  496.       if self.enemy != nil
  497.         if self.enemy.hp > 0
  498.           return true
  499.         end
  500.       end
  501.     end
  502.     return false
  503.   end
  504. end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
4
 楼主| 发表于 2016-3-24 02:26:17 | 只看该作者
剛剛忽然發現了簡單的方法....我鑽進腳本的牛角尖了
可以直接使用事件指令第3頁的"主角圖形變更",將現在使用的主角圖形直接改掉

而我之前鑽腳本的牛角尖又是因為...涉及了一開始選角問題,我想說為了要改圖形我要讓船入隊
然後直接切換使用角色就不會有不知道改回去時要用哪個主角的問題了(恩,我原本使用"移動路線的設定"裡"變更人物特徵圖",所以會有問題)
但現在我只需要....兩個角色圖形都變更,在同時一起變回來,那不管哪個選哪隻角色就都沒有關係了

然而我覺得之前發現的無效新出路也很有道理
雖然目前問題解決了,但還是想問問我那個想法為何不行
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

5
发表于 2016-3-24 08:31:38 | 只看该作者
燕征 发表于 2016-3-24 02:26
剛剛忽然發現了簡單的方法....我鑽進腳本的牛角尖了
可以直接使用事件指令第3頁的"主角圖形變更",將現在使 ...

第一,事件脚本并不是这样用的。按照你给出脚本的意思,你只需要输入
RUBY 代码复制
  1. $game_party.leader = 序号

即可,当然,序号表示的是当前队伍的顺序,如果想指定固定ID的成员,就需要这样。
RUBY 代码复制
  1. $game_party.leader = $game_party.actors.index($game_actors[角色ID])

这样做的前提条件就是,成为领队的角色必须在队伍中。

因此,要想把主角领队变成船的话,必须让所谓的“船”入队,然后把它设置成领队,这样感觉很不自然。

另外,更改主角图形的做法虽然简便,但是如果不在状态显示和存档界面上处理,那么船的行走图就会出现,感觉怪怪的。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
158 小时
注册时间
2016-1-7
帖子
129
6
 楼主| 发表于 2016-3-24 09:04:29 | 只看该作者
因為
  1. $game_party.leader = 序号
复制代码
需要引入的腳本修改掉出錯的地方後(我猜可能是vx才有的東西,我是代換成XP同等的東西...然而不知道有沒有代換錯的地方)
最後會run到原來使用的腳本那邊說有錯,所以才想換成第二個方法
但現在方法二的使用方法是錯誤的囉?

為何讓船入隊後設成領隊會不自然?
更改主角圖形的那邊覺得怪怪的我倒是覺得還好,如果顯示都變成船了,我會認為因為現在操縱的東西是船,然而本身代表的還是主角(指名字),所以顯示成船是沒有關係的

点评

那要寫成什麼樣的東西才可以直接調用@@?我對比了第一個可以調用的方法的腳本,沒有看出來為何那個方法能我想的就不能  发表于 2016-3-25 00:30
这句脚本不能单独用啊。  发表于 2016-3-24 11:40
那 actor = $game_party.actors[序號]不能用嗎?  发表于 2016-3-24 10:37
可以,你不介意就好。只是我个人的看法而已。  发表于 2016-3-24 09:13
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 07:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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