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

Project1

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

[已经解决] 请问如何附加状态就执行公共事件

[复制链接]

Lv1.梦旅人

梦石
0
星屑
170
在线时间
45 小时
注册时间
2013-8-9
帖子
13
跳转到指定楼层
1
发表于 2018-2-21 01:17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10星屑
比如队友附加某个状态就执行一个公共事件,状态解除就不执行

Lv5.捕梦者

梦石
0
星屑
32055
在线时间
5082 小时
注册时间
2012-11-19
帖子
4877

开拓者

2
发表于 2018-2-21 01:17:20 | 只看该作者
本帖最后由 芯☆淡茹水 于 2018-2-26 19:01 编辑
  1. #==============================================================================
  2. class Game_Actor < Game_Battler
  3.   BGM_DATA = {5=>"BGM1",6=>"BGM2",7=>"BGM3",8=>"BGM4"}  #状态ID => BGM名
  4.   #--------------------------------------------------------------------------
  5.   def add_new_state(state_id)
  6.     super
  7.     BGM_DATA[state_id] && Audio.bgm_play("Audio/BGM/" + BGM_DATA[state_id], 100, 100)
  8.   end
  9.   #--------------------------------------------------------------------------
  10.   def remove_state(state_id)
  11.     state?(state_id) && BGM_DATA[state_id] && BattleManager.play_battle_bgm
  12.     super
  13.   end
  14. end
  15. #==============================================================================
复制代码
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2487
在线时间
214 小时
注册时间
2017-9-27
帖子
613
3
发表于 2018-2-21 01:53:27 | 只看该作者
笨方法:
游戏开始开一个开关,然后公共事件里一个事件通过此开关触发,并行处理。
1.此事件内用条件分歧判断每一个角色的每种状态,如果是则xxx。
2.想要只执行一次,就是在分歧下打开另外一个开关,在此分歧前再次分歧,如果已打开触发开关则不进行分歧(避免无限判断),触发则每一个开关控制着每一个角色的每一个状态所触发的公共事件,公共事件内进行xxx然后关掉这个触发开关,并打开总控制事件里的已触发开关,每回合开始时关闭所有已触发开关。
建议你用第二种,不知道什么指令能禁得起你不停并行处理。
当然,如果有触子给你脚本那是最好的,就可以不用这种既麻烦又不一定成功的手动事件判断了。

点评

为了避免出现误导问题,请先看我的方法是否有可行的可能性,如果不可行请告诉在下,避免出现误导问题,我秉持着一种“我认为可行”的态度。  发表于 2018-2-21 01:55
浅尝辄止,宜乎众矣。
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1345
在线时间
378 小时
注册时间
2015-6-16
帖子
571
4
发表于 2018-2-21 15:24:55 | 只看该作者
Game_Battler里面有个类叫做add_state(state_id)
然后你在@result.added_states.push(state_id).uniq!这一行上面输入$game_temp.reserve_common_event(X) 执行第X号公共事件
然后这个类就变成了下面
  def add_state(state_id)
    if state_addable?(state_id)
      add_new_state(state_id) unless state?(state_id)
      reset_state_counts(state_id)

$game_temp.reserve_common_event(1) #执行一号公共事件
      @result.added_states.push(state_id).uniq!
    end
  end
P1不太上了,有问题加个Q1286124843,不管是脚本还是游戏问题都可以来找我
回复

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
32055
在线时间
5082 小时
注册时间
2012-11-19
帖子
4877

开拓者

5
发表于 2018-2-21 15:46:59 | 只看该作者
本帖最后由 芯☆淡茹水 于 2018-2-21 15:58 编辑

楼上的角色和敌人都会起效果,如果只有角色有效的话,可以这样:

  1. #==============================================================================
  2. class Game_Actor < Game_Battler
  3.   STATE_ID = 5   #状态ID
  4.   CE_ID = 1      #公共事件ID
  5.   #--------------------------------------------------------------------------
  6.   def add_new_state(state_id)
  7.     super
  8.     state_id == STATE_ID && $game_temp.reserve_common_event(CE_ID)
  9.   end
  10. end
  11. #==============================================================================
复制代码


第一次附加状态有效;如果有该状态再附加的话,就无效。

话说,你把公共事件放在附加这个状态的技能里,效果不是差不多么?!

点评

大大,你忘了可以if self.actor?  发表于 2018-2-25 10:34
不能一概而论,可能还要涉及状态免疫还有战场状态这些问题  发表于 2018-2-22 01:09
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
170
在线时间
45 小时
注册时间
2013-8-9
帖子
13
6
 楼主| 发表于 2018-2-23 23:09:36 | 只看该作者
刹那铃音 发表于 2018-2-21 01:53
笨方法:
游戏开始开一个开关,然后公共事件里一个事件通过此开关触发,并行处理。
1.此事件内用条件分歧判 ...

谢谢,这方法我试过,但是战斗中好像判断不了
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
170
在线时间
45 小时
注册时间
2013-8-9
帖子
13
7
 楼主| 发表于 2018-2-23 23:11:17 | 只看该作者
300英雄 发表于 2018-2-21 15:24
Game_Battler里面有个类叫做add_state(state_id)
然后你在@result.added_states.push(state_id).uniq!这一 ...

谢谢,我没有表达清楚,像战斗中附加这状态就换BGM,状态解除就换回原来的,做得到这样吗
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
170
在线时间
45 小时
注册时间
2013-8-9
帖子
13
8
 楼主| 发表于 2018-2-23 23:13:15 | 只看该作者
芯☆淡茹水 发表于 2018-2-21 15:46
楼上的角色和敌人都会起效果,如果只有角色有效的话,可以这样:

谢谢,能做到战斗中附加状态后更换BGM,解除后换回原来的这样吗

点评

BGM也可以用变量记录吗?  发表于 2018-2-24 02:53
那需要1個變量來記錄正常情況下的bgm  发表于 2018-2-24 01:29
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

9
发表于 2018-2-24 03:30:05 | 只看该作者
zjc543463949 发表于 2018-2-23 23:13
谢谢,能做到战斗中附加状态后更换BGM,解除后换回原来的这样吗 ...

如果你不要求記錄中斷時候的位置,只記錄音樂文件的名字是很簡單的,在附加狀態的方法裏加一個id判斷,如果id==x就切換bgm並且記錄被切換掉的bgm的文件名字
不過你的遊戲有戰鬥,那就要用2個變量,1個用來記錄地圖上的音樂文件名字,1個用來記錄戰鬥中音樂文件名字

具體流程就象這樣

從地圖進入戰鬥時
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 切换战斗画面前的处理
  3.   #--------------------------------------------------------------------------
  4.   def pre_battle_scene
  5.     Graphics.update
  6.     Graphics.freeze
  7.     @spriteset.dispose_characters
  8.     BattleManager.save_bgm_and_bgs#保存進入戰鬥前的bgm和bgs
  9.     BattleManager.play_battle_bgm
  10.     Sound.play_battle_start
  11.   end


從戰鬥中離開時
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 胜利时的处理
  3.   #--------------------------------------------------------------------------
  4.   def self.process_victory
  5.     play_battle_end_me
  6.     replay_bgm_and_bgs#恢復進入戰鬥前的bgm和bgs
  7.     $game_message.add(sprintf(Vocab::Victory, $game_party.name))
  8.     display_exp
  9.     gain_gold
  10.     gain_drop_items
  11.     gain_exp
  12.     SceneManager.return
  13.     battle_end(0)
  14.     return true
  15.   end
  16.   #--------------------------------------------------------------------------
  17.   # ● 撤退时的处理
  18.   #--------------------------------------------------------------------------
  19.   def self.process_escape
  20.     $game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
  21.     success = @preemptive ? true : (rand < @escape_ratio)
  22.     Sound.play_escape
  23.     if success
  24.       process_abort
  25.     else
  26.       @escape_ratio += 0.1
  27.       $game_message.add('\.' + Vocab::EscapeFailure)
  28.       $game_party.clear_actions
  29.     end
  30.     wait_for_message
  31.     return success
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● 中止时的处理
  35.   #--------------------------------------------------------------------------
  36.   def self.process_abort
  37.     replay_bgm_and_bgs
  38.     SceneManager.return
  39.     battle_end(1)
  40.     return true
  41.   end


按照進入戰鬥前保存bgm,改變bgm,離開戰鬥讀取bgm的思路
附加指定狀態前保存bgm,改變bgm,移除指定狀態讀取bgm
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
32055
在线时间
5082 小时
注册时间
2012-11-19
帖子
4877

开拓者

10
发表于 2018-2-25 08:58:34 | 只看该作者
本帖最后由 芯☆淡茹水 于 2018-2-25 09:03 编辑

附加的时候直接播放特定的音乐,解除时再播放战斗BGM就行了,都不带记忆的。

  1. #==============================================================================
  2. class Game_Actor < Game_Battler
  3.   STATE_ID = 5             #状态ID
  4.   BGM_NAME = "Field1"      #BGM名。
  5.   #--------------------------------------------------------------------------
  6.   def add_new_state(state_id)
  7.     super
  8.     state_id == STATE_ID && Audio.bgm_play("Audio/BGM/" + BGM_NAME, 100, 100)
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   def remove_state(state_id)
  12.     state?(state_id) && state_id == STATE_ID && BattleManager.play_battle_bgm
  13.     super
  14.   end
  15. end
  16. #==============================================================================
复制代码


如果队伍不断的附加和解除这个状态,BGM播放可能就有些混乱,那就需要改战斗场景了。
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-13 13:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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