Project1

标题: 如何制作效果扩散状态? [打印本页]

作者: 吸血鬼王族    时间: 2009-8-28 01:59
标题: 战斗中如何使状态延续?
本帖最后由 「旅」 于 2009-8-28 07:44 编辑

我想设计一个“状态延续”的技能,使用后现有的状态延续久一点,
比如我有了能力加强的状态,我想它延续久一点,便使用一招技能,使得这种状态延续多几个回合。
又比如敌人有了中毒的状态,我便使用这招技能,使得这种状态延续多几个回合。
该怎么设置?
[line]1[/line]
提问请勿使用【售价】功能,那样会使别人需要付积分才能帮你。
已修改。认可请到:http://rpg.blue/viewthread.php?tid=130319    by 「旅」

作者: 吸血鬼王族    时间: 2009-8-28 03:21
标题: 如何制作效果扩散状态?
本帖最后由 「旅」 于 2009-8-28 07:44 编辑

我想制作个效果扩散的状态,有了这状态后的角色,无论使用什么技能都变为全场效果,包括敌我双方。
例如,角色原本技能为单体攻击,但有了这个状态后施放技能变成了全场无差别攻击。
该怎么设置?
[line]1[/line]
提问请勿使用【售价】功能,那样会使别人需要付积分才能帮你。
已修改。认可请到:http://rpg.blue/viewthread.php?tid=130319    by 「旅」

作者: 赤点    时间: 2009-8-28 03:25
你无聊啊
问问题还售价啊
作者: enter9009    时间: 2009-8-28 07:42
..................................
作者: 吸血鬼王族    时间: 2009-8-28 14:19
很久没发过贴了,我还以为是支付那么多去求人回答。
不过奇怪啊,我昨晚连发几贴都失败,论坛到底怎么了?
作者: 吸血鬼王族    时间: 2009-8-28 16:08
没人知道吗?
对了版主,为什么版规里写着不能一贴多问,而你却把我两个问题拼在一起了?
作者: 吸血鬼王族    时间: 2009-8-29 11:51
沉得真快,谁来帮帮忙啊~~~~~
作者: 「旅」    时间: 2009-8-29 13:37
本帖最后由 「旅」 于 2009-8-29 13:41 编辑
  1. class Game_Battler
  2.   alias lv12_initialize initialize
  3.   def initialize
  4.     @states_plus_turn = {}
  5.     lv12_initialize
  6.   end
  7.   alias lv12_skill_effect skill_effect
  8.   def skill_effect(user, skill)
  9.     @jionglansan = true
  10.     lv12_skill_effect(user, skill)
  11.     @jionglansan = false
  12.   end
  13.   alias lv12_add_state add_state
  14.   def add_state(state_id, force = false)
  15.     if @jionglansan
  16.       i = state_id
  17.       @states_plus_turn[i] = -$data_states[i].hold_turn if @states_plus_turn[i] == nil
  18.       @states_plus_turn[i] = $data_states[i].hold_turn + @states_plus_turn[i]
  19.     end
  20.     b = @states_turn.clone
  21.     c = {}
  22.     for i in @states_turn.keys
  23.       if states_plus_turn(i) != 0
  24.         c[i] = true
  25.       end
  26.     end
  27.     a = lv12_add_state(state_id,force)
  28.     for i in @states_plus_turn.keys
  29.       @states_turn[i] = b[i] if c[i] == true
  30.     end
  31.     return a
  32.   end
  33.   alias lv12_states_minus states_minus
  34.   def states_minus(minus_state_set)
  35.     for i in minus_state_set
  36.       @states_plus_turn[i] = nil
  37.     end
  38.     return lv12_states_minus(minus_state_set)
  39.   end
  40.   def state_full?(state_id)
  41.     unless self.state?(state_id)
  42.       return false
  43.     end
  44.     if @states_turn[state_id] == -1
  45.       return true
  46.     end
  47.     return @states_turn[state_id] + states_plus_turn(state_id) == $data_states[state_id].hold_turn
  48.   end
  49.   def states_plus_turn(id)
  50.     @states_plus_turn[id] = 0 if @states_plus_turn[id] == nil or @states_plus_turn[id] < 0
  51.     if @states_plus_turn[id] == nil
  52.     return 0
  53.     else
  54.     return @states_plus_turn[id]
  55.     end
  56.   end
  57.   def remove_states_auto
  58.     for i in @states_turn.keys.clone
  59.       if @states_turn[i]+states_plus_turn(i) > 0
  60.         if states_plus_turn(i) > 0
  61.           @states_plus_turn[i] = states_plus_turn(i) - 1
  62.           return
  63.         end
  64.         @states_turn[i] -= 1
  65.       elsif rand(100) < $data_states[i].auto_release_prob
  66.         remove_state(i)
  67.       end
  68.     end
  69.   end
  70. end
复制代码
状态延续的,终于折腾出来了……

那个抱歉,以为是同个问题所以合并了,我去试试有没办法解决第二个问题吧……
作者: 吸血鬼王族    时间: 2009-8-29 17:39
8楼的代码该怎么使用?
作者: 「旅」    时间: 2009-8-29 22:24
直接用就可以了~如果需要特定的技能才可以延长状态的话,我再改~
作者: 吸血鬼王族    时间: 2009-8-29 23:23
不太懂,我是说“状态延续”是一招技能,使用了这招技能,现在角色的状态会延续几个回合这样。
比如说敌人“虚弱”了,按常理来说,过4个回合自动解除,而当他过了3个回合后,本该下一回合解除的,而我对他施放“状态延续”,他的“虚弱”状态要过多几个回合才能解除。
而以上脚本要放到哪里?
作者: 「旅」    时间: 2009-8-30 00:04
  1. class Game_Battler
  2.   TURN_PLUS = [3,5]  #——添加的范围,如果不随机,则将输入两个相同的数字。
  3.   PLUS_SKILL = [1,2] #——状态延续的技能编号
  4.   alias lv12_initialize initialize
  5.   def initialize
  6.     @states_plus_turn = {}
  7.     lv12_initialize
  8.   end
  9.   alias lv12_skill_effect skill_effect
  10.   def skill_effect(user, skill)
  11.     @jionglansan = true if PLUS_SKILL.include?(skill.id)
  12.     lv12_skill_effect(user, skill)
  13.     @jionglansan = false
  14.   end
  15.   alias lv12_add_state add_state
  16.   def add_state(state_id, force = false)
  17.     if @jionglansan
  18.       i = state_id
  19.       @states_plus_turn[i] = -$data_states[i].hold_turn if @states_plus_turn[i]== nil
  20.       @states_plus_turn[i] =  (rand(TURN_PLUS[1]-TURN_PLUS[0])+TURN_PLUS[0]) + @states_plus_turn[i]
  21.     end
  22.     b = @states_turn.clone
  23.     c = {}
  24.     for i in @states_turn.keys
  25.       if states_plus_turn(i) != 0
  26.         c[i] = true
  27.       end
  28.     end
  29.     a = lv12_add_state(state_id,force)
  30.     for i in @states_plus_turn.keys
  31.       @states_turn[i] = b[i] if c[i] == true
  32.     end
  33.     return a
  34.   end
  35.   alias lv12_states_minus states_minus
  36.   def states_minus(minus_state_set)
  37.     for i in minus_state_set
  38.       @states_plus_turn[i] = nil
  39.     end
  40.     return lv12_states_minus(minus_state_set)
  41.   end
  42.   def state_full?(state_id)
  43.     unless self.state?(state_id)
  44.       return false
  45.     end
  46.     if @states_turn[state_id] == -1
  47.       return true
  48.     end
  49.     return @states_turn[state_id] + states_plus_turn(state_id) == $data_states[state_id].hold_turn
  50.   end
  51.   def states_plus_turn(id)
  52.     @states_plus_turn[id] = 0 if @states_plus_turn[id] == nil or @states_plus_turn[id] < 0
  53.     if @states_plus_turn[id] == nil
  54.     return 0
  55.     else
  56.     return @states_plus_turn[id]
  57.     end
  58.   end
  59.   def remove_states_auto
  60.     for i in @states_turn.keys.clone
  61.       if @states_turn[i]+states_plus_turn(i) > 0
  62.         if states_plus_turn(i) > 0
  63.           @states_plus_turn[i] = states_plus_turn(i) - 1
  64.           return
  65.         end
  66.         @states_turn[i] -= 1
  67.       elsif rand(100) < $data_states[i].auto_release_prob
  68.         remove_state(i)
  69.       end
  70.     end
  71.   end
  72. end
复制代码
这个脚本直接插到Main前就可以了~这个是更新的,符合要求了~
作者: 吸血鬼王族    时间: 2009-8-30 01:49
不行啊。这个MS只能使某个技能附加的状态延续多几个回合而已。
是我不懂的用这个脚本,还是说我还没说清楚。
我的意思是:想制造一招“状态延续”的技能。
目的是,我先制造一招“中毒”的技能,能使别人中毒,但是这招使别人中毒只能维持一个回合就消失效果了。
但是,我可以先将别人中毒,然后再给他放一招“状态延续”,这时,他中毒就可以维持多几个回合。
“中毒”的效果是使敌人附加中毒的状态,而“状态延续”是使得他现在的状态一直维持几个回合。两招是分开的,“状态延续”并不能附加任何状态。
作者: 「旅」    时间: 2009-8-30 14:29
本帖最后由 「旅」 于 2009-8-30 14:47 编辑
  1. class Game_Battler
  2.   TURN_PLUS = {1=>[1,5]}#——①:技能编号、②③:提高随机数范围。
  3.   alias lv12_initialize initialize
  4.   def initialize
  5.     @states_plus_turn = {}
  6.     lv12_initialize
  7.   end
  8.   alias lv12_skill_effect skill_effect
  9.   def skill_effect(user, skill)
  10.     if TURN_PLUS.keys.include?(skill.id)
  11.     for i in @states
  12.       z = TURN_PLUS[skill.id]
  13.       @states_plus_turn =  (rand(z[1]-z[0])+z[0]) + @states_plus_turn
  14.     end
  15.     end
  16.     lv12_skill_effect(user, skill)
  17.   end
  18.   alias lv12_add_state add_state
  19.   def add_state(state_id, force = false)
  20.     b = @states_turn.clone
  21.     c = {}
  22.     for i in @states_turn.keys
  23.       if states_plus_turn(i) != 0
  24.         c = true
  25.       end
  26.     end
  27.     a = lv12_add_state(state_id,force)
  28.     for i in @states_plus_turn.keys
  29.       @states_turn = b if c == true
  30.     end
  31.     return a
  32.   end
  33.   alias lv12_states_minus states_minus
  34.   def states_minus(minus_state_set)
  35.     for i in minus_state_set
  36.       @states_plus_turn = nil
  37.     end
  38.     return lv12_states_minus(minus_state_set)
  39.   end
  40.   def state_full?(state_id)
  41.     unless self.state?(state_id)
  42.       return false
  43.     end
  44.     if @states_turn[state_id] == -1
  45.       return true
  46.     end
  47.     return @states_turn[state_id] + states_plus_turn(state_id) == $data_states[state_id].hold_turn
  48.   end
  49.   def states_plus_turn(id)
  50.     @states_plus_turn[id] = 0 if @states_plus_turn[id] == nil or @states_plus_turn[id] < 0
  51.     if @states_plus_turn[id] == nil
  52.     return 0
  53.     else
  54.     return @states_plus_turn[id]
  55.     end
  56.   end
  57.   def remove_states_auto
  58.     for i in @states_turn.keys.clone
  59.       if @states_turn+states_plus_turn(i) > 0
  60.         if states_plus_turn(i) > 0
  61.           @states_plus_turn = states_plus_turn(i) - 1
  62.           return
  63.         end
  64.         @states_turn -= 1
  65.       elsif rand(100) < $data_states.auto_release_prob
  66.         remove_state(i)
  67.       end
  68.     end
  69.   end
  70. end
复制代码
12楼的那个写的太匆忙所以有点错误……这次应该可以了~~~
作者: 「旅」    时间: 2009-8-30 17:02
  1. class Scene_Battle
  2.   All_全体攻击状态 = [1,2,3]
  3.   All_是否连自己也打 = true #正确——true、错误——false
  4.   def make_basic_action_result
  5.     if @active_battler.current_action.basic == 0
  6.       @animation1_id = @active_battler.animation1_id
  7.       @animation2_id = @active_battler.animation2_id
  8.       if @active_battler.is_a?(Game_Enemy)
  9.         if @active_battler.restriction == 3
  10.           target = $game_troop.random_target_enemy
  11.         elsif @active_battler.restriction == 2
  12.           target = $game_party.random_target_actor
  13.         else
  14.           index = @active_battler.current_action.target_index
  15.           target = $game_party.smooth_target_actor(index)
  16.         end
  17.       end
  18.       if @active_battler.is_a?(Game_Actor)
  19.         if @active_battler.restriction == 3
  20.           target = $game_party.random_target_actor
  21.         elsif @active_battler.restriction == 2
  22.           target = $game_troop.random_target_enemy
  23.         else
  24.           index = @active_battler.current_action.target_index
  25.           target = $game_troop.smooth_target_enemy(index)
  26.         end
  27.       end
  28.       @target_battlers = [target]
  29.       push_all
  30.       for target in @target_battlers
  31.         target.attack_effect(@active_battler)
  32.       end
  33.       return
  34.     end
  35.     if @active_battler.current_action.basic == 1
  36.       @help_window.set_text($data_system.words.guard, 1)
  37.       return
  38.     end
  39.     if @active_battler.is_a?(Game_Enemy) and
  40.        @active_battler.current_action.basic == 2
  41.       @help_window.set_text("逃跑", 1)
  42.       @active_battler.escape
  43.       return
  44.     end
  45.     if @active_battler.current_action.basic == 3
  46.       $game_temp.forcing_battler = nil
  47.       @phase4_step = 1
  48.       return
  49.     end
  50.   end
  51.   def make_skill_action_result
  52.     @skill = $data_skills[@active_battler.current_action.skill_id]
  53.     unless @active_battler.current_action.forcing
  54.       unless @active_battler.skill_can_use?(@skill.id)
  55.         $game_temp.forcing_battler = nil
  56.         @phase4_step = 1
  57.         return
  58.       end
  59.     end
  60.     @active_battler.sp -= @skill.sp_cost
  61.     @status_window.refresh
  62.     @animation1_id = @skill.animation1_id
  63.     @animation2_id = @skill.animation2_id
  64.     @common_event_id = @skill.common_event_id
  65.     set_target_battlers(@skill.scope)
  66.     push_all
  67.     for target in @target_battlers
  68.       target.skill_effect(@active_battler, @skill)
  69.     end
  70.   end
  71.   def push_all
  72.     for i in All_全体攻击状态
  73.       if @active_battler.states.include?(i)
  74.         a = true
  75.         break
  76.       end
  77.     end
  78.     if a
  79.       @target_battlers = []
  80.       for i in $game_party.actors
  81.         if i.exist? and (All_是否连自己也打 or i.id != @active_battler.id)
  82.           @target_battlers.push(i)
  83.         end
  84.       end
  85.       for i in $game_troop.enemies
  86.         if i.exist?
  87.           @target_battlers.push(i)
  88.         end
  89.       end
  90.     end
  91.   end
  92. end
复制代码
二楼的问题也解决了~~~II姐姐抱歉我抢了~~
作者: 吸血鬼王族    时间: 2009-8-30 18:05
效果扩散和状态延续一样,也是一个招式来的。

状态延续的脚本,一附加状态就出错了。
作者: 九夜神尊    时间: 2009-8-30 18:21
实际上写脚本的也不要太迷信LZ说的,记得有一次
别人帮我写一个判断
我说如果A成立,那就执行A
B成立,那就执行B
他问那AB都成立呢?我说AB都执行
都不成立能?我说都不执行。
然后他写出来了4个条件判断……
作者: ONEWateR    时间: 2009-8-30 18:27
旅~ 辛苦了~ 捏捏~
作者: 奶油Da蛋糕    时间: 2009-8-30 18:47
这两条脚本值得发到主站上。


作者: 吸血鬼王族    时间: 2009-8-31 14:03
楼上为何隐藏内容?说要积分80才可浏览
作者: 「旅」    时间: 2009-9-4 20:29
  1. class Game_Battler
  2.   TURN_PLUS = {1=>[5,5]}#——①:技能编号、②③:提高随机数范围。
  3.   alias lv12_initialize initialize
  4.   def initialize
  5.     @states_plus_turn = {}
  6.     lv12_initialize
  7.   end
  8.   alias lv12_skill_effect skill_effect
  9.   def skill_effect(user, skill)
  10.     if TURN_PLUS.keys.include?(skill.id)
  11.     for i in @states
  12.       z = TURN_PLUS[skill.id]
  13.       @states_plus_turn[i] =  (rand(z[1]-z[0])+z[0]) + @states_plus_turn[i]
  14.     end
  15.     end
  16.     lv12_skill_effect(user, skill)
  17.   end
  18.   alias lv12_add_state add_state
  19.   def add_state(state_id, force = false)
  20.     b = @states_turn.clone
  21.     c = {}
  22.     for i in @states_turn.keys
  23.       if states_plus_turn(i) != 0
  24.         c[i] = true
  25.       end
  26.     end
  27.     a = lv12_add_state(state_id,force)
  28.     for i in @states_plus_turn.keys
  29.       @states_turn[i] = b[i] if c[i] == true
  30.     end
  31.     return a
  32.   end
  33.   alias lv12_states_minus states_minus
  34.   def states_minus(minus_state_set)
  35.     for i in minus_state_set
  36.       @states_plus_turn[i] = nil
  37.     end
  38.     return lv12_states_minus(minus_state_set)
  39.   end
  40.   def state_full?(state_id)
  41.     unless self.state?(state_id)
  42.       return false
  43.     end
  44.     if @states_turn[state_id] == -1
  45.       return true
  46.     end
  47.     return @states_turn[state_id] + states_plus_turn(state_id) == $data_states[state_id].hold_turn
  48.   end
  49.   def states_plus_turn(id)
  50.     @states_plus_turn[id] = 0 if @states_plus_turn[id] == nil or @states_plus_turn[id] < 0
  51.     if @states_plus_turn[id] == nil
  52.     return 0
  53.     else
  54.     return @states_plus_turn[id]
  55.     end
  56.   end
  57.   def remove_states_auto
  58.     for i in @states_turn.keys.clone
  59.       if @states_turn[i]+states_plus_turn(i) > 0
  60.         if states_plus_turn(i) > 0
  61.           @states_plus_turn[i] = states_plus_turn(i) - 1
  62.           return
  63.         end
  64.         @states_turn[i] -= 1
  65.       elsif rand(100) < $data_states[i].auto_release_prob
  66.         remove_state(i)
  67.       end
  68.     end
  69.   end
  70. end
复制代码
状态延续没问题,是因为被论坛吞掉了一些字符……所以出错了……><

效果扩散貌似没问题啊……技能攻击都可以打全部的人……
作者: 吸血鬼王族    时间: 2009-9-5 18:41
状态延续.rar (186.72 KB, 下载次数: 35)
这个工程,战斗测试中如果先用状态延续,再用昏睡的话就出错。
作者: 「旅」    时间: 2009-9-5 19:46
只要把25行的
  1. @states_plus_turn[i] =  (rand(z[1]-z[0])+z[0]) + @states_plus_turn[i]
复制代码
改为
  1. @states_plus_turn[i] =  (rand(z[1]-z[0])+z[0]) + states_plus_turn(i)
复制代码
就可以了~~~
作者: 吸血鬼王族    时间: 2009-9-5 23:56
本帖最后由 吸血鬼王族 于 2009-9-6 00:03 编辑

真辛苦你了。非常感激。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1