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 编辑
class Game_Battler
alias lv12_initialize initialize
def initialize
@states_plus_turn = {}
lv12_initialize
end
alias lv12_skill_effect skill_effect
def skill_effect(user, skill)
@jionglansan = true
lv12_skill_effect(user, skill)
@jionglansan = false
end
alias lv12_add_state add_state
def add_state(state_id, force = false)
if @jionglansan
i = state_id
@states_plus_turn[i] = -$data_states[i].hold_turn if @states_plus_turn[i] == nil
@states_plus_turn[i] = $data_states[i].hold_turn + @states_plus_turn[i]
end
b = @states_turn.clone
c = {}
for i in @states_turn.keys
if states_plus_turn(i) != 0
c[i] = true
end
end
a = lv12_add_state(state_id,force)
for i in @states_plus_turn.keys
@states_turn[i] = b[i] if c[i] == true
end
return a
end
alias lv12_states_minus states_minus
def states_minus(minus_state_set)
for i in minus_state_set
@states_plus_turn[i] = nil
end
return lv12_states_minus(minus_state_set)
end
def state_full?(state_id)
unless self.state?(state_id)
return false
end
if @states_turn[state_id] == -1
return true
end
return @states_turn[state_id] + states_plus_turn(state_id) == $data_states[state_id].hold_turn
end
def states_plus_turn(id)
@states_plus_turn[id] = 0 if @states_plus_turn[id] == nil or @states_plus_turn[id] < 0
if @states_plus_turn[id] == nil
return 0
else
return @states_plus_turn[id]
end
end
def remove_states_auto
for i in @states_turn.keys.clone
if @states_turn[i]+states_plus_turn(i) > 0
if states_plus_turn(i) > 0
@states_plus_turn[i] = states_plus_turn(i) - 1
return
end
@states_turn[i] -= 1
elsif rand(100) < $data_states[i].auto_release_prob
remove_state(i)
end
end
end
end
复制代码
状态延续的,终于折腾出来了……
那个抱歉,以为是同个问题所以合并了,我去试试有没办法解决第二个问题吧……
作者:
吸血鬼王族
时间:
2009-8-29 17:39
8楼的代码该怎么使用?
作者:
「旅」
时间:
2009-8-29 22:24
直接用就可以了~如果需要特定的技能才可以延长状态的话,我再改~
作者:
吸血鬼王族
时间:
2009-8-29 23:23
不太懂,我是说“状态延续”是一招技能,使用了这招技能,现在角色的状态会延续几个回合这样。
比如说敌人“虚弱”了,按常理来说,过4个回合自动解除,而当他过了3个回合后,本该下一回合解除的,而我对他施放“状态延续”,他的“虚弱”状态要过多几个回合才能解除。
而以上脚本要放到哪里?
作者:
「旅」
时间:
2009-8-30 00:04
class Game_Battler
TURN_PLUS = [3,5] #——添加的范围,如果不随机,则将输入两个相同的数字。
PLUS_SKILL = [1,2] #——状态延续的技能编号
alias lv12_initialize initialize
def initialize
@states_plus_turn = {}
lv12_initialize
end
alias lv12_skill_effect skill_effect
def skill_effect(user, skill)
@jionglansan = true if PLUS_SKILL.include?(skill.id)
lv12_skill_effect(user, skill)
@jionglansan = false
end
alias lv12_add_state add_state
def add_state(state_id, force = false)
if @jionglansan
i = state_id
@states_plus_turn[i] = -$data_states[i].hold_turn if @states_plus_turn[i]== nil
@states_plus_turn[i] = (rand(TURN_PLUS[1]-TURN_PLUS[0])+TURN_PLUS[0]) + @states_plus_turn[i]
end
b = @states_turn.clone
c = {}
for i in @states_turn.keys
if states_plus_turn(i) != 0
c[i] = true
end
end
a = lv12_add_state(state_id,force)
for i in @states_plus_turn.keys
@states_turn[i] = b[i] if c[i] == true
end
return a
end
alias lv12_states_minus states_minus
def states_minus(minus_state_set)
for i in minus_state_set
@states_plus_turn[i] = nil
end
return lv12_states_minus(minus_state_set)
end
def state_full?(state_id)
unless self.state?(state_id)
return false
end
if @states_turn[state_id] == -1
return true
end
return @states_turn[state_id] + states_plus_turn(state_id) == $data_states[state_id].hold_turn
end
def states_plus_turn(id)
@states_plus_turn[id] = 0 if @states_plus_turn[id] == nil or @states_plus_turn[id] < 0
if @states_plus_turn[id] == nil
return 0
else
return @states_plus_turn[id]
end
end
def remove_states_auto
for i in @states_turn.keys.clone
if @states_turn[i]+states_plus_turn(i) > 0
if states_plus_turn(i) > 0
@states_plus_turn[i] = states_plus_turn(i) - 1
return
end
@states_turn[i] -= 1
elsif rand(100) < $data_states[i].auto_release_prob
remove_state(i)
end
end
end
end
复制代码
这个脚本直接插到Main前就可以了~这个是更新的,符合要求了~
作者:
吸血鬼王族
时间:
2009-8-30 01:49
不行啊。这个MS只能使某个技能附加的状态延续多几个回合而已。
是我不懂的用这个脚本,还是说我还没说清楚。
我的意思是:想制造一招“状态延续”的技能。
目的是,我先制造一招“中毒”的技能,能使别人中毒,但是这招使别人中毒只能维持一个回合就消失效果了。
但是,我可以先将别人中毒,然后再给他放一招“状态延续”,这时,他中毒就可以维持多几个回合。
“中毒”的效果是使敌人附加中毒的状态,而“状态延续”是使得他现在的状态一直维持几个回合。两招是分开的,“状态延续”并不能附加任何状态。
作者:
「旅」
时间:
2009-8-30 14:29
本帖最后由 「旅」 于 2009-8-30 14:47 编辑
class Game_Battler
TURN_PLUS = {1=>[1,5]}#——①:技能编号、②③:提高随机数范围。
alias lv12_initialize initialize
def initialize
@states_plus_turn = {}
lv12_initialize
end
alias lv12_skill_effect skill_effect
def skill_effect(user, skill)
if TURN_PLUS.keys.include?(skill.id)
for i in @states
z = TURN_PLUS[skill.id]
@states_plus_turn = (rand(z[1]-z[0])+z[0]) + @states_plus_turn
end
end
lv12_skill_effect(user, skill)
end
alias lv12_add_state add_state
def add_state(state_id, force = false)
b = @states_turn.clone
c = {}
for i in @states_turn.keys
if states_plus_turn(i) != 0
c = true
end
end
a = lv12_add_state(state_id,force)
for i in @states_plus_turn.keys
@states_turn = b if c == true
end
return a
end
alias lv12_states_minus states_minus
def states_minus(minus_state_set)
for i in minus_state_set
@states_plus_turn = nil
end
return lv12_states_minus(minus_state_set)
end
def state_full?(state_id)
unless self.state?(state_id)
return false
end
if @states_turn[state_id] == -1
return true
end
return @states_turn[state_id] + states_plus_turn(state_id) == $data_states[state_id].hold_turn
end
def states_plus_turn(id)
@states_plus_turn[id] = 0 if @states_plus_turn[id] == nil or @states_plus_turn[id] < 0
if @states_plus_turn[id] == nil
return 0
else
return @states_plus_turn[id]
end
end
def remove_states_auto
for i in @states_turn.keys.clone
if @states_turn+states_plus_turn(i) > 0
if states_plus_turn(i) > 0
@states_plus_turn = states_plus_turn(i) - 1
return
end
@states_turn -= 1
elsif rand(100) < $data_states.auto_release_prob
remove_state(i)
end
end
end
end
复制代码
12楼的那个写的太匆忙所以有点错误……这次应该可以了~~~
作者:
「旅」
时间:
2009-8-30 17:02
class Scene_Battle
All_全体攻击状态 = [1,2,3]
All_是否连自己也打 = true #正确——true、错误——false
def make_basic_action_result
if @active_battler.current_action.basic == 0
@animation1_id = @active_battler.animation1_id
@animation2_id = @active_battler.animation2_id
if @active_battler.is_a?(Game_Enemy)
if @active_battler.restriction == 3
target = $game_troop.random_target_enemy
elsif @active_battler.restriction == 2
target = $game_party.random_target_actor
else
index = @active_battler.current_action.target_index
target = $game_party.smooth_target_actor(index)
end
end
if @active_battler.is_a?(Game_Actor)
if @active_battler.restriction == 3
target = $game_party.random_target_actor
elsif @active_battler.restriction == 2
target = $game_troop.random_target_enemy
else
index = @active_battler.current_action.target_index
target = $game_troop.smooth_target_enemy(index)
end
end
@target_battlers = [target]
push_all
for target in @target_battlers
target.attack_effect(@active_battler)
end
return
end
if @active_battler.current_action.basic == 1
@help_window.set_text($data_system.words.guard, 1)
return
end
if @active_battler.is_a?(Game_Enemy) and
@active_battler.current_action.basic == 2
@help_window.set_text("逃跑", 1)
@active_battler.escape
return
end
if @active_battler.current_action.basic == 3
$game_temp.forcing_battler = nil
@phase4_step = 1
return
end
end
def make_skill_action_result
@skill = $data_skills[@active_battler.current_action.skill_id]
unless @active_battler.current_action.forcing
unless @active_battler.skill_can_use?(@skill.id)
$game_temp.forcing_battler = nil
@phase4_step = 1
return
end
end
@active_battler.sp -= @skill.sp_cost
@status_window.refresh
@animation1_id = @skill.animation1_id
@animation2_id = @skill.animation2_id
@common_event_id = @skill.common_event_id
set_target_battlers(@skill.scope)
push_all
for target in @target_battlers
target.skill_effect(@active_battler, @skill)
end
end
def push_all
for i in All_全体攻击状态
if @active_battler.states.include?(i)
a = true
break
end
end
if a
@target_battlers = []
for i in $game_party.actors
if i.exist? and (All_是否连自己也打 or i.id != @active_battler.id)
@target_battlers.push(i)
end
end
for i in $game_troop.enemies
if i.exist?
@target_battlers.push(i)
end
end
end
end
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
class Game_Battler
TURN_PLUS = {1=>[5,5]}#——①:技能编号、②③:提高随机数范围。
alias lv12_initialize initialize
def initialize
@states_plus_turn = {}
lv12_initialize
end
alias lv12_skill_effect skill_effect
def skill_effect(user, skill)
if TURN_PLUS.keys.include?(skill.id)
for i in @states
z = TURN_PLUS[skill.id]
@states_plus_turn[i] = (rand(z[1]-z[0])+z[0]) + @states_plus_turn[i]
end
end
lv12_skill_effect(user, skill)
end
alias lv12_add_state add_state
def add_state(state_id, force = false)
b = @states_turn.clone
c = {}
for i in @states_turn.keys
if states_plus_turn(i) != 0
c[i] = true
end
end
a = lv12_add_state(state_id,force)
for i in @states_plus_turn.keys
@states_turn[i] = b[i] if c[i] == true
end
return a
end
alias lv12_states_minus states_minus
def states_minus(minus_state_set)
for i in minus_state_set
@states_plus_turn[i] = nil
end
return lv12_states_minus(minus_state_set)
end
def state_full?(state_id)
unless self.state?(state_id)
return false
end
if @states_turn[state_id] == -1
return true
end
return @states_turn[state_id] + states_plus_turn(state_id) == $data_states[state_id].hold_turn
end
def states_plus_turn(id)
@states_plus_turn[id] = 0 if @states_plus_turn[id] == nil or @states_plus_turn[id] < 0
if @states_plus_turn[id] == nil
return 0
else
return @states_plus_turn[id]
end
end
def remove_states_auto
for i in @states_turn.keys.clone
if @states_turn[i]+states_plus_turn(i) > 0
if states_plus_turn(i) > 0
@states_plus_turn[i] = states_plus_turn(i) - 1
return
end
@states_turn[i] -= 1
elsif rand(100) < $data_states[i].auto_release_prob
remove_state(i)
end
end
end
end
复制代码
状态延续没问题,是因为被论坛吞掉了一些字符……所以出错了……><
效果扩散貌似没问题啊……技能攻击都可以打全部的人……
作者:
吸血鬼王族
时间:
2009-9-5 18:41
状态延续.rar
(186.72 KB, 下载次数: 35)
2009-9-5 18:41 上传
点击文件名下载附件
这个工程,战斗测试中如果先用状态延续,再用昏睡的话就出错。
作者:
「旅」
时间:
2009-9-5 19:46
只要把25行的
@states_plus_turn[i] = (rand(z[1]-z[0])+z[0]) + @states_plus_turn[i]
复制代码
改为
@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