Project1
标题:
同一状态效果叠加
[打印本页]
作者:
企鹅达达
时间:
2010-12-20 10:49
标题:
同一状态效果叠加
能否设置一些状态例如“攻击加强”之类的可以叠加使用。例如“蓄力”,第一回合攻击力150,第二回合200,第三回合500……之类的
作者:
shua1125
时间:
2010-12-20 11:23
我做过一个类似的,用的是公共事件,设置一个变量,使用蓄力功能时,变量+人物攻击力的50%,另一个“蓄力次数”的变量+1,当蓄力次数达到6时,不能再蓄力。
另一个技能是专门释放蓄力的,当此技能发动时,给予敌人伤害为此变量,很劲爆的一个技能……
作者:
企鹅达达
时间:
2010-12-20 12:00
回复
shua1125
的帖子
事件的确可以做到,除非是涉及到整个系统的东西,否则如果可以我都会尽量避免使用公用事件,因为涉及的变量、开关会很多。另外,蓄力的脚本貌似我有,用不着用事件……
p.s. 我很想知道你这个蓄力在战斗结束后次数会不会清零的?
作者:
shua1125
时间:
2010-12-20 12:43
本帖最后由 shua1125 于 2010-12-20 12:47 编辑
回复
企鹅达达
的帖子
我改了一下,使用蓄力技能时同时附加一个蓄力状态,0几率解除,战斗结束后解除,并开启某开关,使某并行公共事件执行:当人物处于蓄力状态时(空白),此外的情况,把那两个变量清零,关闭此开关。
使用释放蓄力的技能时也是清零,关闭此开关。
(我等是纯事件流啊……能用事件就用事件……)
(合成脚本被我舍弃后,我自己又在用纯事件做一个合成系统,真费变量啊,于是考虑是不是用简单脚本定义个变量……)
作者:
企鹅达达
时间:
2010-12-20 22:43
回复
shua1125
的帖子
使用了2个技能、1个状态、1个开关、3个公用事件、2个变量……
很浪费啊。纯不纯事件无所谓啦,如若脚本方便何不用脚本呢?
作者:
shua1125
时间:
2010-12-20 22:49
回复
企鹅达达
的帖子
问题就是不会怎么会用脚本啊……
脚本固然好,但是我看不懂更写不明白……
叫我情何以堪……
实在是事件做不到,必须需要脚本的时候,我才会用脚本……
作者:
企鹅达达
时间:
2010-12-20 23:00
回复
shua1125
的帖子
啊,我错了,因为角色一共有4个,估计你蓄力也要有4组变量记录吧?如果是只有一个主角用还好……要不你还是研究一下这个脚本好了……
# Tension
# 「テンションシステム」
module TENSION
ELEMENT_ID = 10 # テンションが 0 でない場合に付加される攻撃属性(ID)
MESSAGE_FORMAT = "%sのテンションが %s になった!"
TENSON_DOWN = "%sのテンションがもとにもどった!"
OVER_TENSION = "%sはスーパーハイテンションになった!"
end
#____________________________________________________________________________
class RPG::UsableItem < RPG::BaseItem
def tension_up?
return self.note.include?("<tension_up>")
end
#--------------------------------------------------------------------------
def tension_clear?
return self.note.include?("<tension_clear>")
end
#--------------------------------------------------------------------------
def tension_down?
return true if self.note.include?("<tension_down>")
return true if self.tension_clear?
return false
end
end
#____________________________________________________________________________
class Game_Battler
attr_accessor :tension
attr_reader :super_high_tension
alias tension_system_initialize initialize
def initialize
tension_system_initialize
@tension = 0
end
#--------------------------------------------------------------------------
alias tension_system_claer_action_results clear_action_results
def claer_action_results
tension_system_claer_action_results
@super_high_tension = false
end
#--------------------------------------------------------------------------
def tension_value
case @tension
when 0; return 0
when 1; return 5
when 2; return 20
when 3; return 50
when 4; return 100
end
end
#--------------------------------------------------------------------------
alias tension_system_make_attack_damage_value make_attack_damage_value
def make_attack_damage_value(attacker)
tension_system_make_attack_damage_value(attacker)
make_tension_damage_effect(attacker)
end
#--------------------------------------------------------------------------
alias tension_system_make_obj_damage_value make_obj_damage_value
def make_obj_damage_value(user, obj)
tension_system_make_obj_damage_value(user, obj)
make_tension_damage_effect(user, obj)
end
#--------------------------------------------------------------------------
def make_tension_damage_effect(user, obj = nil)
return if obj != nil and (obj.tension_up? or obj.tension_down?)
case user.tension
when 1; damage_rate = 170
when 2; damage_rate = 300
when 3; damage_rate = 500
when 4; damage_rate = 750
else ; return
end
@hp_damage = @hp_damage * damage_rate / 100
@mp_damage = @mp_damage * damage_rate / 100
end
#--------------------------------------------------------------------------
alias tension_system_skill_effect skill_effect
def skill_effect(user, skill)
original_element_set = nil
if user.tension > 0
original_element_set = skill.element_set.clone
skill.element_set += [TENSION::ELEMENT_ID]
end
tension_system_skill_effect(user, skill)
skill.element_set = original_element_set if original_element_set != nil
tension_up_effect(user, skill) if skill.tension_up?
tension_down_effect(user, skill) if skill.tension_down?
end
#--------------------------------------------------------------------------
alias tension_system_item_effect item_effect
def item_effect(user, item)
original_element_set = nil
if user.tension > 0
original_element_set = item.element_set.clone
skill.element_set += [TENSION::ELEMENT_ID]
end
tension_system_item_effect(user, item)
item.element_set = original_element_set if original_element_set != nil
tension_up_effect(user, item) if item.tension_up?
tension_down_effect(user, item) if item.tension_down?
end
#--------------------------------------------------------------------------
def tension_up_effect(user, obj)
unless @tension < 4
@missed = true
return
end
@tension += 1; @missed = false
@super_high_tension = true if @tension == 4
end
#--------------------------------------------------------------------------
def tension_down_effect(user, obj)
if @tension == 0
@missed = true
return
end
obj.tension_clear? ? @tension = 0 : @tension -= 1
@missed = false
end
end
class Game_Actor < Game_Battler
alias tension_system_element_set element_set
def element_set
return tension_system_element_set + [TENSION::ELEMENT_ID] if @tension != 0
return tension_system_element_set
end
end
class Game_Enemy < Game_Battler
def element_set
return super + [TENSION::ELEMENT_ID] if @tension != 0
return super
end
end
class Scene_Battle < Scene_Base
alias tension_system_battle_end battle_end
def battle_end(result)
$game_party.members.each{|member| member.tension = 0 }
tension_system_battle_end(result)
end
#--------------------------------------------------------------------------
alias tension_system_execute_action_attack execute_action_attack
def execute_action_attack
last_tension = @active_battler.tension
tension_system_execute_action_attack
if last_tension != 0
@active_battler.tension = 0
@message_window.clear
text = sprintf(TENSION::TENSON_DOWN, @active_battler.name)
@message_window.add_instant_text(text); wait(30)
end
end
#--------------------------------------------------------------------------
alias tension_system_execute_action_skill execute_action_skill
def execute_action_skill
last_tension = @active_battler.tension
tension_system_execute_action_skill
if last_tension != 0
return if @active_battler.action.skill.base_damage == 0
@active_battler.tension = 0
@message_window.clear
text = sprintf(TENSION::TENSON_DOWN, @active_battler.name)
@message_window.add_instant_text(text); wait(30)
end
end
#--------------------------------------------------------------------------
alias tension_system_execute_action_item execute_action_item
def execute_action_item
last_tension = @active_battler.tension
tension_system_execute_action_item
if last_tension != 0
return if @active_battler.action.item.base_damage != 0
@active_battler.tension = 0
@message_window.clear
text = sprintf(TENSION::TENSON_DOWN, @active_battler.name)
@message_window.add_instant_text(text); wait(30)
end
end
#--------------------------------------------------------------------------
alias tension_system_display_action_effects display_action_effects
def display_action_effects(target, obj = nil)
tension_system_display_action_effects(target, obj)
display_tension_changes(target, obj)
end
#--------------------------------------------------------------------------
alias tension_system_display_hp_damage display_hp_damage
def display_hp_damage(target, obj = nil)
return if target.hp_damage == 0 and
obj != nil and (obj.tension_up? or obj.tension_down?)
tension_system_display_hp_damage(target, obj)
end
#--------------------------------------------------------------------------
alias tension_system_display_failure display_failure
def display_failure(target, obj)
return if obj != nil and (obj.tension_up? or obj.tension_down?)
tension_system_display_failure(target, obj)
end
#--------------------------------------------------------------------------
def display_tension_changes(target, obj)
return if obj == nil
return unless (obj.tension_up? or obj.tension_down?)
@message_window.clear
if target.super_high_tension
format = TENSION::OVER_TENSION
text = sprintf(format, target.name)
elsif target.tension == 0
format = TENSION::TENSON_DOWN
text = sprintf(format, target.name)
else
format = TENSION::MESSAGE_FORMAT
text = sprintf(format, target.name, target.tension_value)
end
@message_window.add_instant_text(text); wait(30)
end
end
复制代码
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1