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

Project1

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

能不能用状态增减技能?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2008-4-25
帖子
27
跳转到指定楼层
1
发表于 2008-5-19 20:28:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
    用状态增加技能是没问题的,但如果我想让人暂时习得某个技能,战斗后或者使用该技能后忘却技能又怎么做呢?
   
    本意是做一个类似蓄力的系统,有其他方法也请赐教。
版务信息:本贴由楼主自主结贴~

Lv3.寻梦者

酱油的

梦石
0
星屑
1265
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

2
发表于 2008-5-19 20:47:00 | 只看该作者
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]]
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2008-4-25
帖子
27
3
 楼主| 发表于 2008-5-19 21:00:57 | 只看该作者
转个头整个论坛都灰了……哀悼下……

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

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

如果不是的话,能不能说一下用法?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1265
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

4
发表于 2008-5-19 21:15:15 | 只看该作者
1.可能你沒有設置好名字
例子:

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

2.放置的位置不是在main之前而有腳本修改了add_state 或者 remove_state。
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2008-4-25
帖子
27
5
 楼主| 发表于 2008-5-19 21:24:35 | 只看该作者
原来状态名要+skill,现在这样还有个小问题,就是我希望可以出现这个状态后把引发这个状态的技能去掉,例如用“召唤光”得到“skill光”状态之后可不可以让原来的“召唤光”技能消失,在状态变回普通的时候再出现?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1265
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

6
发表于 2008-5-19 21:48:25 | 只看该作者
那就這樣吧:
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  的格式,如果其中一個爲空,請隨便塞個字上去)

沒有測試,有問題就回帖吧
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2008-4-25
帖子
27
7
 楼主| 发表于 2008-5-20 00:26:23 | 只看该作者
打开直接报错。
第11行发生NoMethodError。

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

undefined method 'name'for#<Array:0x10bc2f0>
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1265
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

8
发表于 2008-5-20 00:32:16 | 只看该作者
漏了個
   next unless $data_states.name =~ /^skill(\D*)from(\D*)/
最先的腳本也是一樣
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
18 小时
注册时间
2008-4-25
帖子
27
9
 楼主| 发表于 2008-5-20 00:49:51 | 只看该作者
不报错了,但是又学不到技能了……

这次名字没改错了……

最初的问题已经解决了,结掉吧……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-7-31 04:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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