Project1

标题: features_set是一个只读吗? [打印本页]

作者: chd114    时间: 2015-3-14 13:53
标题: features_set是一个只读吗?

  1.   def skill_type_cover_add(stype_id)
  2.     features_set(FEATURE_STYPE_COVER).push(stype_id)
  3.   end
  4.   def cover_skill_types
  5.     features_set(FEATURE_STYPE_COVER)
  6.   end
复制代码
参考add和seal改了一段之后没找到修改办法然后用了push,依然无效···
作者: taroxd    时间: 2015-3-14 14:10
features_set 是一个方法

# --- 防止追问专用分割线 --- #
作者: tan12345    时间: 2015-3-14 16:47
是那个想通过features_set来控制添加、删除技能类型?
作者: howhow1314    时间: 2015-3-14 18:11
本帖最后由 howhow1314 于 2015-3-14 19:52 编辑

$game_actors[1].class.features.push(RPG::BaseItem::Feature.new(41,x))
大概是這樣。。電腦不在
作者: chd114    时间: 2015-3-14 19:21
howhow1314 发表于 2015-3-14 01:11
$game_actors[1].class.features.push(RPG::Baseitem::Feature.new(41,x))
大概是這樣。。電腦不在 ...

能push但是不能delete···
作者: howhow1314    时间: 2015-3-14 20:11
本帖最后由 howhow1314 于 2015-3-14 20:13 编辑
chd114 发表于 2015-3-14 19:21
能push但是不能delete···


你delete(RPG::BaseItem::Feature.new(41,x))當然沒用...   #話說好像要Item才行,剛打錯item了
RPG::BaseItem::Feature.new(41,x)是個新的Feature,不是原有的某個參數一模一樣的Feature..
除非你
  1. a = RPG::BaseItem::Feature.new(41,x)
  2. $game_actors[1].class.features.push(a)
复制代码
這樣可以
  1. $game_actors[1].class.features.delete(a)
复制代码
...............
如果你要delete的話其中一個方法是找出$game_actors[1].class.features裡code=41,data_id=x的Feature來delete..
RUBY 代码复制
  1. $game_actors[1].class.features.each do |i|
  2.   if i.code  == 41 and i.data_id == x then
  3.     a.delete(i)
  4.   end
  5. end

這樣...(不是很熟遍歷的函數..不知道有沒有更簡單的寫法...記得見過有個帶花括號的忘了是怎樣的{:2_276:} )
作者: chd114    时间: 2015-3-14 20:31
howhow1314 发表于 2015-3-14 03:11
你delete(RPG::BaseItem::Feature.new(41,x))當然沒用...   #話說好像要Item才行,剛打錯item了
RPG::Base ...

不是在原来那个里面添加吗···那就是说不管数据库怎么设置的,一定要用脚本push过才能被删掉?
作者: howhow1314    时间: 2015-3-14 20:50
本帖最后由 howhow1314 于 2015-3-14 20:51 编辑
chd114 发表于 2015-3-14 20:31
不是在原来那个里面添加吗···那就是说不管数据库怎么设置的,一定要用脚本push过才能被删掉? ...


RUBY 代码复制
  1. $game_actors[1].class.features.each do |i|
  2.   $game_actors[1].class.features.each.delete(i) if  i.code  == 41 and i.data_id == x
  3. end

這樣不用push過才能delete
作者: taroxd    时间: 2015-3-14 20:56
howhow1314 发表于 2015-3-14 20:50
$game_actors[1].class.features.each do |i|
  $game_actors[1].class.features.each.delete(i) if  i.c ...


用 each 迭代时不要对数组做出修改。更好的做法是 delete_if。

RUBY 代码复制
  1. $game_actors[1].class.features.delete_if do |i|
  2.   i.code == 41 && i.data_id == x
  3. end


但是,这个更好只是针对数组操作而言。实际上你还是不应该去操作数据库!!!再说一遍,这样会出问题的!
作者: chd114    时间: 2015-3-14 22:12
howhow1314 发表于 2015-3-14 03:50
$game_actors[1].class.features.each do |i|
  $game_actors[1].class.features.each.delete(i) if  i.c ...

唔···那VA里面自带的features_set(FEATURE_STYPE_ADD)是在什么时候改变的呢···表示全局搜索没有找到···
作者: howhow1314    时间: 2015-3-14 22:21
如果用我的方法需要另建職業數據庫...(我能想到的)最簡單的方式大概是以下這樣...
RUBY 代码复制
  1. class Game_Actors
  2.   attr_accessor :classes
  3.   def initialize
  4.     @data = []
  5.     @classes = $data_classes.dup   
  6.   end
  7. end
  8.  
  9. class Game_Actor < Game_Battler
  10.   def class
  11.     $game_actors.classes[@class_id]
  12.   end  
  13. end

作者: chd114    时间: 2015-3-14 23:04
howhow1314 发表于 2015-3-14 05:21
如果用我的方法需要另建職業數據庫...(我能想到的)最簡單的方式大概是以下這樣...
class Game_Actors
  att ...

听起来有点动的太多手脚了···https://rpg.blue/thread-375706-1-1.html如果只是优化一下这样的功能呢?(原来的脚本是禁用技能类型就直接删除那个类型,但这样一来的话被沉默也会删掉了···)
作者: howhow1314    时间: 2015-3-15 00:46
本帖最后由 howhow1314 于 2015-3-15 00:51 编辑

呃..有點看不懂你的問題,你不是要增減features嗎?反正只要加了11樓的腳本後,
就可以直接
RUBY 代码复制
  1. $game_actors[1].class.features.delete_if do |i|
  2.   i.code == 41 && i.data_id == x
  3. end
刪除啟用技能類型
RUBY 代码复制
  1. $game_actors[1].class.features.push(RPG::BaseItem::Feature.new(41,x))
增加啟用技能類型
..當然其他的features也可以
作者: chd114    时间: 2015-3-15 08:51
howhow1314 发表于 2015-3-14 07:46
呃..有點看不懂你的問題,你不是要增減features嗎?反正只要加了11樓的腳本後,
就可以直接
$game_actors[1].c ...

我那个网址里面是把禁用的当成删除的···但是这样一来角色中了沉默也会删掉这个技能类型有点不合理···所以我想试试直接增删···
作者: howhow1314    时间: 2015-3-15 12:48
本帖最后由 howhow1314 于 2015-3-15 12:50 编辑
chd114 发表于 2015-3-15 08:51
我那个网址里面是把禁用的当成删除的···但是这样一来角色中了沉默也会删掉这个技能类型有点不合理·· ...


因為我在做的遊戲也有修改啟用技能的需要...於是找到這方法(記得是從taroxd翻譯的f1幫助文檔中找出來的..那些RPG::XXX的貌似都要在幫助文檔中查看)
不過我的遊戲本來就有另建數據庫的特別需要,所以就能直接操作數據庫(另建的數據庫)
而那數據庫就更複雜了,不是直接把原先的數據庫整個dup....
至於11樓的腳本則是直接把$data_classes dup過來(而且還只要放在game_actors裡,所以說手續應該還滿簡單的..除非有潔癖吧QQ
作者: chd114    时间: 2015-3-22 15:43
howhow1314 发表于 2015-3-14 19:48
因為我在做的遊戲也有修改啟用技能的需要...於是找到這方法(記得是從taroxd翻譯的f1幫助文檔中找出來的.. ...

@VIPArcher 认可答案···(虽然没有用到但是还是感谢了)




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