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

Project1

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

[已经解决] 如何获得状态时执行公用事件

[复制链接]

Lv2.观梦者

梦石
0
星屑
288
在线时间
2 小时
注册时间
2014-1-27
帖子
2
跳转到指定楼层
1
发表于 2014-11-8 12:20:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 路过的喵 于 2014-11-8 12:24 编辑

ACE,在某个状态持续时想执行指定的公用事件,好像得需要脚本才行吧
或者状态持续时某个开关开启的也行,考虑到这样公用事件需要并行处理的因素
求大神求解{:2_270:}

P.S.新人一只{:2_248:}

Lv3.寻梦者

闇吼者の災悪眷族
不気味存在締造者

梦石
0
星屑
1366
在线时间
2881 小时
注册时间
2014-7-29
帖子
6491
2
发表于 2014-11-8 12:26:02 | 只看该作者
在什么场合下?

战斗还是地图?

思路应该是执行公共事件,检测角色是否有相应的状态,如果有则执行你需要的效果。

状态持续时进行公共事件是不太合理的,因为会这个事件会在短时间内被执行尽可能多次。
你可以考虑状态附加时打开开关来执行公共事件,状态消去时关闭公共事件的开关。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

开拓者

3
发表于 2014-11-8 12:33:04 | 只看该作者
如果是战斗的时候的被动技能那样的效果可以参考我的一个小东西···

  1.   #--------------------------------------------------------------------------
  2.   # ★ 应用关键一击
  3.   #--------------------------------------------------------------------------
  4.   def apply_critical(damage)
  5.     damage = damage * $crp * 0.01 if $damage_type==0
  6.     damage = damage * $crm * 0.01 if $damage_type==1
  7.    
  8.     $cria=true#角色备注被暴击特性
  9.     $cric=true#职业备注被暴击特性
  10.     $criew=true#武器备注被暴击特性
  11.     $criea=true#防具备注被暴击特性
  12.     $cris=true#技能备注被暴击特性
  13.     $crit=true#状态备注被暴击特性
  14.    
  15.     $bcria=true#角色备注被暴击特性
  16.     $bcric=true#职业备注被暴击特性
  17.     $bcriew=true#武器备注被暴击特性
  18.     $bcriea=true#防具备注被暴击特性
  19.     $bcris=true#技能备注被暴击特性
  20.     $bcrit=true#状态备注被暴击特性
  21.    
  22.     damage=damage.to_i
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 应用离散度
  26.   #--------------------------------------------------------------------------
  27.   def apply_variance(damage, variance, user)
  28.     #amp = [damage.abs * variance / 100, 0].max.to_i# 获取最大的偏差值
  29.     #var = rand(amp + 1) + rand(amp + 1) - amp# 获取实际的偏差值
  30.    
  31.     var=rands(-variance,variance)#计算基础离散度
  32.     var+=rands(minp,maxp) if $damage_type==0#物理最大最小伤害
  33.     var+=rands(minm,maxm) if $damage_type==1#魔法最大最小伤害
  34.     damage * var / 100 if damage >= 0# 计算最终的伤害值
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 应用防御修正
  38.   #--------------------------------------------------------------------------
  39.   def apply_guard(damage)
  40.     damage / (damage > 0 && guard? ? 2 * grd : 1)
  41.   end
  42.   
  43.   #--------------------------------------------------------------------------
  44.   # ● 处理伤害
  45.   #    调用前需要设置好
  46.   #    @result.hp_damage   @result.mp_damage
  47.   #    @result.hp_drain    @result.mp_drain
  48.   #--------------------------------------------------------------------------
  49.   def execute_damage(user)
  50.     on_damage(@result.hp_damage) if @result.hp_damage > 0
  51.     self.hp -= @result.hp_damage
  52.     self.mp -= @result.mp_damage
  53.    
  54.     if $damage_type==0
  55.       $vam=(@result.hp_damage * user.vamp * 0.01 + user.vatp).to_i
  56.       $reb=(@result.hp_damage * self.rebp * 0.01 + self.retp).to_i
  57.       $suc=(@result.hp_damage * user.sucp * 0.01 + user.sutp).to_i
  58.       $fee=(@result.hp_damage * self.feep * 0.01 + self.fetp).to_i
  59.     elsif $damage_type==1
  60.       $vam=(@result.hp_damage * user.vamm * 0.01 + user.vatm).to_i
  61.       $reb=(@result.hp_damage * self.rebm * 0.01 + self.retm).to_i
  62.       $suc=(@result.hp_damage * user.sucm * 0.01 + user.sutm).to_i
  63.       $fee=(@result.hp_damage * self.feem * 0.01 + self.fetm).to_i
  64.     end
  65.     $reb=user.mp if $reb>user.mp#如果HP不足以应付反弹效果
  66.     $fee=user.mp if $fee>user.mp#如果MP不足以应付反馈效果
  67.     user.hp += $vam
  68.     user.hp -= $reb
  69.     user.mp += $suc
  70.     user.mp -= $fee
  71.    
  72.     $data_actors = load_data("Data/Actors.rvdata2")
  73.     $data_enemies = load_data("Data/Enemies.rvdata2")
  74.     $data_classes = load_data("Data/Classes.rvdata2")
  75.     $data_weapons = load_data("Data/Weapons.rvdata2")
  76.     $data_armors = load_data("Data/Armors.rvdata2")
  77.     $data_states = load_data("Data/States.rvdata2")
  78.     $data_skills = load_data("Data/Skills.rvdata2")
  79.    
  80.     if user.actor?
  81.       $self=$data_enemies
  82.       $user=$data_actors
  83.       $uisa=true
  84.     else
  85.       $self=$data_actors
  86.       $user=$data_enemies
  87.       $uisa=false
  88.     end
  89.     if @result.critical
  90.       
  91.     crii(user)#使用者正在用的技能暴击效果
  92.    
  93.     cria(user)#使用者暴击额外效果
  94.     cric(user) if $uisa==true#使用者是角色判定职业带来额外效果
  95.     crie(user) if $uisa==true#使用者是角色判定装备带来额外效果
  96.     #cris(user) if $uisa==true#使用者是角色被动技能带来额外效果
  97.     crit(user)#使用者状态带来效果
  98.    
  99.     bcria(user)#被击者受暴击效果
  100.     bcric(user) if $uisa!=true#被击者是角色判定职业带来额外效果
  101.     bcrie(user) if $uisa!=true#使用者是角色判定装备带来额外效果
  102.     #bcris(user) if $uisa!=true#被击者是角色被动技能带来额外效果
  103.     bcrit(user)#被击者状态带来效果
  104.     end
  105.    
  106.     user.hp += @result.hp_drain
  107.     user.mp += @result.mp_drain
  108.   end
复制代码
这是game_battler里面我自己做的一个东西,可能对你有帮助

#encoding:utf-8
#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
#  使用者状态带来额外效果
#==============================================================================
  1. class Game_Battler < Game_BattlerBase
  2.   def crit(user)
  3.     $crit=[]
  4.     for i in 0...user.states.size
  5.       $crit[i]=user.states[i].id
  6.     end
  7.     if $crit!=[]
  8.       for $i in 0...$crit.size
  9.         critt(user)
  10.       end
  11.     end
  12.   end
  13.   def critt(user)
  14.     $critt=$data_states[$crit[$i]].CRI
  15.     if $critt!=nil
  16.       case $critt
  17.       when 7
  18.       end
  19.       $critt=0
  20.     end
  21.   end
  22. end
复制代码

点评

我的是暴击才发动的效果···好吧如果楼主要的效果是一直都有那你发的那个就够了···  发表于 2014-11-8 13:10
战斗的时候的被动状态 http://rm.66rpg.com/thread-373242-1-1.html  发表于 2014-11-8 12:45
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10074
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

4
发表于 2014-11-8 13:21:08 | 只看该作者
仅在地图上判定
  1. class Scene_Map < Scene_Base
  2.   alias vip20141108_update update
  3.   def update
  4.     vip20141108_update
  5.     $game_switches[公共事件的开关] = true if
  6.     $game_party.members.any? {|a| a.state?(状态A的ID) } && !$game_switches[公共事件的开关]
  7.     $game_switches[公共事件的开关] = false if
  8.     $game_party.members.all? {|a| !a.state?(状态A的ID) } && $game_switches[公共事件的开关]
  9.   end
  10. end
复制代码
未测试
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

5
发表于 2014-11-8 13:27:47 | 只看该作者
VIPArcher 发表于 2014-11-8 13:21
仅在地图上判定未测试

其实可以这样:https://rpg.blue/thread-371714-1-1.html

在设置区域设置如下:
switch(开关ID) { $game_party.members.any? {|a| a.state? 状态ID } }

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 忘记了这个神奇的东西

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
288
在线时间
2 小时
注册时间
2014-1-27
帖子
2
6
 楼主| 发表于 2014-11-8 13:47:15 | 只看该作者
taroxd 发表于 2014-11-8 13:27
其实可以这样:https://rpg.blue/thread-371714-1-1.html

在设置区域设置如下:

脚本小白看不太懂,不过能监控开关应该就够了。
3Q~
能和状态关联就可以设置很多地图效果了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 05:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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