Project1

标题: 能不能用状态增减技能? [打印本页]

作者: killuer    时间: 2008-5-19 20:28
标题: 能不能用状态增减技能?
    用状态增加技能是没问题的,但如果我想让人暂时习得某个技能,战斗后或者使用该技能后忘却技能又怎么做呢?
   
    本意是做一个类似蓄力的系统,有其他方法也请赐教。 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 禾西    时间: 2008-5-19 20:47
module State_Skill
  #--------------------------------------------------------------------------
  # ● 參考數組取得
  #--------------------------------------------------------------------------
  
  Data = []
  $data_skills      ||= load_data("Data/Skills.rxdata")
  $data_states      ||= load_data("Data/States.rxdata")
  # 查找「基本同名」的「狀態」與「技能」
  for i in 1...$data_states.size
    next unless $data_states.name =~ /^skill(\D*)/
    for i2 in 1...$data_skills.size
      Data.push [i,i2] if ($data_skills[i2].name == $1)
    end
  end
end

#----------------------------------------------------------------------------
# ● 召喚原方法
#----------------------------------------------------------------------------
class Game_Battler
  alias oxox_add_state    add_state
  alias oxox_remove_state remove_state
  #--------------------------------------------------------------------------
  # ● 附加状态
  #     state_id : 状态 ID
  #     force    : 强制附加标志 (处理自动状态时使用)
  #--------------------------------------------------------------------------
  def add_state(state_id, force = false)
    oxox_add_state(state_id, force)
    State_Skill::Data.each{|i|
    if i[0] == state_id
      if i[1] != 0
        learn_skill(i[1])
      end
    end}
  end

  #--------------------------------------------------------------------------
  # ● ステートの解除
  #     state_id : ステート ID
  #     force    : 強制解除フラグ (オートステートの処理で使用)
  #--------------------------------------------------------------------------
  def remove_state(state_id, force = false)
    oxox_remove_state(state_id, force)
    State_Skill::Data.each{|i|
    if i[0] == state_id
      if i[1] != 0
        forget_skill(i[1])
      end
    end}
  end
end

我在想是不是有需要發布一下這個腳本?==a
不止一次有人問起了。
狀態名字請設置爲

skill技能名字

不然Data表自己寫也行
格式爲:
Data = [[狀態ID, 技能ID]] [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~ [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: killuer    时间: 2008-5-19 21:00
转个头整个论坛都灰了……哀悼下……

那个脚本看的不是很懂,是不是某个状态下会获得同名技能?

如果是的话,我还用了个cp制战斗的脚本,中了状态之后没有习得新技能,是有冲突?

如果不是的话,能不能说一下用法?
作者: 禾西    时间: 2008-5-19 21:15
1.可能你沒有設置好名字
例子:

光       <---技能名字
skill光  <---狀態名字

2.放置的位置不是在main之前而有腳本修改了add_state 或者 remove_state。
作者: killuer    时间: 2008-5-19 21:24
原来状态名要+skill,现在这样还有个小问题,就是我希望可以出现这个状态后把引发这个状态的技能去掉,例如用“召唤光”得到“skill光”状态之后可不可以让原来的“召唤光”技能消失,在状态变回普通的时候再出现?
作者: 禾西    时间: 2008-5-19 21:48
那就這樣吧:
module State_Skill
#--------------------------------------------------------------------------
# ● 參考數組取得
#--------------------------------------------------------------------------

Data = {}
$data_skills      ||= load_data("Data/Skills.rxdata")
$data_states      ||= load_data("Data/States.rxdata")
# 查找「基本同名」的「狀態」與「技能」
for i in 1...$data_states.size
   next unless $data_states.name =~ /^skill(\D*)from(\D*)/
     Data=[nil,nil]
   for i2 in 1...$data_skills.size
     Data[0] = i2 if ($data_skills[i2].name == $1)
     Data[1] = i2 if ($data_skills[i2].name == $2)
   end
end
end

#----------------------------------------------------------------------------
# ● 召喚原方法
#----------------------------------------------------------------------------
class Game_Battler
alias oxox_add_state    add_state
alias oxox_remove_state remove_state
#--------------------------------------------------------------------------
# ● 附加状态
#     state_id : 状态 ID
#     force    : 强制附加标志 (处理自动状态时使用)
#--------------------------------------------------------------------------
def add_state(state_id, force = false)
   oxox_add_state(state_id, force)
   State_Skill::Data.each{|i,s|
   if i == state_id
     learn_skill(s[0])  if s[0] != nil
     forget_skill(s[1]) if s[1] != nil
   end}
end

#--------------------------------------------------------------------------
# ● ステートの解除
#     state_id : ステート ID
#     force    : 強制解除フラグ (オートステートの処理で使用)
#--------------------------------------------------------------------------
def remove_state(state_id, force = false)
   oxox_remove_state(state_id, force)
   State_Skill::Data.each{|i,s|
   if i == state_id
     forget_skill(s[0]) if s[0] != nil
     learn_skill(s[1])  if s[1] != nil
   end}
end
end

用法修改了一點

光                 <--- 技能名字
skill光from召喚光  <--- 狀態名字(一定要寫skill  from  的格式,如果其中一個爲空,請隨便塞個字上去)

沒有測試,有問題就回帖吧
作者: killuer    时间: 2008-5-20 00:26
打开直接报错。
第11行发生NoMethodError。

这行:  next unless $data_states.name =~ /^skill(\D*)from(\D*)/

undefined method 'name'for#<Array:0x10bc2f0>
作者: 禾西    时间: 2008-5-20 00:32
漏了個
   next unless $data_states.name =~ /^skill(\D*)from(\D*)/
最先的腳本也是一樣
作者: killuer    时间: 2008-5-20 00:49
不报错了,但是又学不到技能了……

这次名字没改错了……

最初的问题已经解决了,结掉吧……




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