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

Project1

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

[已经过期] 怎么做套装效果呢

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
14 小时
注册时间
2011-4-1
帖子
13
跳转到指定楼层
1
发表于 2012-12-5 13:32:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
现在做出来只能一层效果,第二层(就是2件套-3件套)无效
还有就是脱下装备的时候效果不消失。。。。
==================================
我是用 条件分歧 XX 为 yy装备中
条件分歧 XX 为 yy装备中
更改状态 yy + zz
除此以外的场合
更改状态 yy - zz
除此以外的状态
==================================
这是我做的2件套,3件套的话不管插入在哪个地方都没用,而且脱了装备不会解除状态
求大神知道,咿呀哒

Lv1.梦旅人

梦石
0
星屑
50
在线时间
14 小时
注册时间
2011-4-1
帖子
13
2
 楼主| 发表于 2012-12-5 13:32:26 | 只看该作者
还试了一种方法
===================================
条件分歧 xx 为 yy 装备中
变量操作 0001 +=1
除此以外的场合
中断事件处理
分歧结束
=================
条件分歧 0001 == 2
更改状态 xx + ww ||或者是 增减能力值 MaxHp + 100
除此以外的场合

===================================
但也是同样的问题。。。。求大神知道~~~卖萌,打滚~~~~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
14 小时
注册时间
2011-4-1
帖子
13
3
 楼主| 发表于 2012-12-5 13:33:08 | 只看该作者
如果代码的指导,能不能注释谢多一点点呢,谢谢啊啊啊啊
回复 支持 反对

使用道具 举报

Lv4.逐梦者

水月·镜花

梦石
10
星屑
403
在线时间
1181 小时
注册时间
2005-10-22
帖子
1183

开拓者

4
发表于 2012-12-5 17:19:12 | 只看该作者
套裝效果用腳本比較好。
首先給套裝裝備附加一個自動狀態“XX套裝”
同時在狀態庫將真正的套裝效果做成狀態
然後打開腳本編輯器,找到Game_Actor類的def update_auto_state(old_armor, new_armor)方法
增加判斷擁有同種自動狀態的裝備數量,根據不同數量做出調整。

先把這個統計方法加進Game_Actor:

# 統計全身套裝件數
# state_id :XX套裝自動屬性
def eq_set_sum(state_id)
  weapon = $data_weapons[@weapon_id]
  armor1 = $data_armors[@armor1_id]
  armor2 = $data_armors[@armor2_id]
  armor3 = $data_armors[@armor3_id]
  armor4 = $data_armors[@armor4_id]
  e1 = weapon != nil ? (weapon.state_id == state_id ? 1 : 0) : 0
  e2 = armor1 != nil ? (armor1.state_id == state_id ? 1 : 0) : 0
  e3 = armor2 != nil ? (armor2.state_id == state_id ? 1 : 0) : 0
  e4 = armor3 != nil ? (armor3.state_id == state_id ? 1 : 0) : 0
  e5 = armor4 != nil ? (armor4.state_id == state_id ? 1 : 0) : 0
  return e1+e2+e3+e4+e5
end

判定和去除套裝效果:
if old_armor.state_id == n # n為“XX套裝”自動屬性的序號
  # 統計全身套裝件數
  set_num = eq_set_num(old_armor.state_id)
   # 根據自定的多層套裝效果做計算
  case set_num
   when 2
      # 去除兩件效果
  when 4
      # 去除四件效果
  end
end

添加套裝效果方法同上。照著默認腳本套用add_state和remove_state就行了

点评

套路一樣,還是在Game_Actor的自動狀態這裡做判定,符合條件則調用習得技能,不符合條件調用遺忘技能  发表于 2012-12-5 20:54
如果想要套装带技能呢?比如三件套的话,一件、二件是不能有技能的,三件后应该就附带 上技能了,请教下  发表于 2012-12-5 20:52
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
14 小时
注册时间
2011-4-1
帖子
13
5
 楼主| 发表于 2012-12-6 21:52:50 | 只看该作者
电子最终龙 发表于 2012-12-5 17:19
套裝效果用腳本比較好。
首先給套裝裝備附加一個自動狀態“XX套裝”
同時在狀態庫將真正的套裝效果做成狀態 ...

@电子最终龙    这个,小弟没写过脚本希望指点一二,有点不懂,求解答
------------------------------------------------------------------
def eq_set_sum(state_id)           #这里的state_id是不是要改成设置的装备上的自动状态的id?
----------------------------------------
@armor1_id                               #这个是指1号位防具的id吗?前面的@是什么意思啊?
----------------------------------------
e1 = weapon != nil ? (weapon.state_id == state_id ? 1 : 0) : 0
                                                  #这句中,括号里是不是意思是  “如果武器的自带状态为设定的状态返回 1 否则 0 ? ”
                             #外面是啥意思?   “武器为空返回括号里的值,否则0?”是检测是否装备有装备吗?
----------------------------------------
set_num = eq_set_num(old_armor.state_id)
                                                  #括号里面加了 'old_‘ 是什么意思啊? 前面不是设定的 ‘armor1.state_id’ 吗?
                             #而且这里的话如果套装包括武器,是不是不会计算啊
----------------------------------------
case set_num
   when 2
      # 去除兩件效果
                             #这里的‘add_state和remove_state’是不是就是加在注释的地方呢?
                             #而且就是说when 2/4 写添加状态 ; 然后在写一个when 0/1 去除2件状态 , when 3 去除4
                                                      件状态  

--------------------------------------------------
{:2_264:} 不好意思,貌似问题有点多。。。。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

水月·镜花

梦石
10
星屑
403
在线时间
1181 小时
注册时间
2005-10-22
帖子
1183

开拓者

6
发表于 2012-12-6 22:35:39 | 只看该作者
1. def是定義方法的語句,這段的方法是提供給下面的判定調用的,無須理會
2. @是局部變量的標籤,帶@的變量在同個類中持續有效。
  armor1 - armor4分別代表不同部位的裝備編號,具體在原版腳本的Game_Actor頂部有說明
3. 整個語句的效果是“如果武器不為空且帶有自動狀態state_id則返回1,否則返回0.”。對了,我忘了武器沒有自動狀態,這句需要刪除
4. 我給出的第二段代碼需要插入到update_auto_state這個方法中,old_armor和new_armor是原版腳本給定的參數,供方法內部使用,指代替換的新舊裝備
  RM默認數據庫不能設定武器自動狀態,所以如果需要把武器也作為套裝部份,就需要在裝備說明部份添加特殊字符並且對應修改統計方法。
5. 第二段代碼只是判定身上原有裝備的套裝效果,效果是當脫下old_armor時計算套裝數,假設你的套裝2件同4件時有效,而身上穿著4件,則脫去一件裝備只有CASE 4會執行,這是需要在註釋位置添加去除4件效果的remove_state,如果本來穿著3件,則沒有語句被執行。
  你還需要照著代碼再寫一段判定新裝備是否有套裝效果的代碼,原理同上。

点评

@是实例变量不是局部变量- -b  发表于 2012-12-11 21:47
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
14 小时
注册时间
2011-4-1
帖子
13
7
 楼主| 发表于 2012-12-11 21:32:48 | 只看该作者
本帖最后由 rty0511 于 2012-12-11 21:43 编辑

@电子最终龙
电子最终龙 发表于 2012-12-6 22:35
1. def是定義方法的語句,這段的方法是提供給下面的判定調用的,無須理會
2. @是局部變量的標籤,帶@的變量 ...


我把这部分放在了刷新自动状态
==========================================
  # 刷新自动状态
    update_auto_state(nil, $data_armors[@armor1_id])
    update_auto_state(nil, $data_armors[@armor2_id])
    update_auto_state(nil, $data_armors[@armor3_id])
    update_auto_state(nil, $data_armors[@armor4_id])
  end
===========================================
的后面
然后运行的时候提示
=========================
脚本‘Game__Actor’的102行 发生了NameError。
undefined local variable or method 'old_armor' for Game_Actor:Class
=========================
是不是说old_game这个变量要先声明?
我自己改了下,写进去的是这样
=========================
def eq_set_sum(state_id)
    armor1 = $data_armors[@armor1_id]
    armor2 = $data_armors[@armor2_id]
    armor3 = $data_armors[@armor3_id]
    armor4 = $data_armors[@armor4_id]
    e2 = armor1 != nil ? (armor1.state_id == 23 ? 1 : 0) : 0
    e3 = armor2 != nil ? (armor2.state_id == 23 ? 1 : 0) : 0
    e4 = armor3 != nil ? (armor3.state_id == 23 ? 1 : 0) : 0
    e5 = armor4 != nil ? (armor4.state_id == 23 ? 1 : 0) : 0
    return e2+e3+e4+e5
  end
    #判定和去除套裝效果:
def old_armor(state_id)
   if old_armor.state_id == 23 # n為“XX套裝”自動屬性的序號
    # 統計全身套裝件數
    set_num = eq_set_num(old_armor.state_id)
    # 根據自定的多層套裝效果做計算
    case set_num
     when 2
      # 去除兩件效果
      add_state(20)
     when 3
      # 去除三件效果
      add_state(21)
     end
   end
end
=========================
但这样进去穿上一件装备显示有自动状态,但穿两件还是只有自动状态。。。
是不是    when 2
      # 去除兩件效果
      add_state(20)
这里要写明是那个角色?怎么写捏?   
回复 支持 反对

使用道具 举报

Lv4.逐梦者

水月·镜花

梦石
10
星屑
403
在线时间
1181 小时
注册时间
2005-10-22
帖子
1183

开拓者

8
发表于 2012-12-12 11:17:50 | 只看该作者
插入位置錯了所以報錯,這裡不是太必要另外定義方法做套裝狀態變化,直接改寫update_auto_state方法就行了

#--------------------------------------------------------------------------
  # ● 更新自动状态
  #     old_armor : 卸下防具
  #     new_armor : 装备防具
  #--------------------------------------------------------------------------
  def update_auto_state(old_armor, new_armor)
    # 强制解除卸下防具的自动状态
    if old_armor != nil and old_armor.auto_state_id != 0
      remove_state(old_armor.auto_state_id, true)
    end
      # ——>在這個位置插入判定舊裝備套裝數量和去除套裝效果<——
    # 强制附加装备防具的自动状态
    if new_armor != nil and new_armor.auto_state_id != 0
      add_state(new_armor.auto_state_id, true)
    end
      #——>在這裡插入判定新裝備并添加套裝效果<——
  end

回复 支持 反对

使用道具 举报

Lv4.逐梦者

水月·镜花

梦石
10
星屑
403
在线时间
1181 小时
注册时间
2005-10-22
帖子
1183

开拓者

9
发表于 2012-12-12 11:17:58 | 只看该作者
本帖最后由 电子最终龙 于 2012-12-12 13:19 编辑

插入位置錯了所以報錯,這裡不是太必要另外定義方法做套裝狀態變化,直接改寫update_auto_state方法就行了
  1. #--------------------------------------------------------------------------
  2.   # ● 更新自动状态
  3.   #     old_armor : 卸下防具
  4.   #     new_armor : 装备防具
  5.   #--------------------------------------------------------------------------
  6.   [color=Red]def update_auto_state(old_armor, new_armor)[/color] #找到這個方法
  7.     # 强制解除卸下防具的自动状态
  8.     if old_armor != nil and old_armor.auto_state_id != 0
  9.       remove_state(old_armor.auto_state_id, true)
  10.     end
  11.       [color=Red]# ——>在這個位置插入判定舊裝備套裝數量和去除套裝效果<——[/color]
  12.     # 强制附加装备防具的自动状态
  13.     if new_armor != nil and new_armor.auto_state_id != 0
  14.       add_state(new_armor.auto_state_id, true)
  15.     end
  16.       [color=Red]#——>在這裡插入判定新裝備并添加套裝效果<——[/color]
  17.   end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
14 小时
注册时间
2011-4-1
帖子
13
10
 楼主| 发表于 2012-12-12 19:32:53 | 只看该作者
电子最终龙 发表于 2012-12-12 11:17
插入位置錯了所以報錯,這裡不是太必要另外定義方法做套裝狀態變化,直接改寫update_auto_state方法就行了 ...

  #--------------------------------------------------------------------------
  # ● 更新自动状态
  #     old_armor : 卸下防具
  #     new_armor : 装备防具  def state?(state_id)
  #--------------------------------------------------------------------------
   def update_auto_state(old_armor, new_armor)  #找到這個方法
   def state                       # 强制解除卸下防具的自动状态
    if old_armor != nil and old_armor.auto_state_id != 0           
      remove_state(old_armor.auto_state_id, true)                          
    end                                                                 
  #在這個位置插入判定舊裝備套裝數量和去除套裝效果<——
      if old_armor.state_id == 21               # n為“XX套裝”自動屬性的序號
  # 統計全身套裝件數
       set_num = eq_set_num(old_armor.state_id)                     
  # 根據自定的多層套裝效果做計算
        case set_num                                                   
         when 2                                 # 去除兩件效果
         remove_state(25)                                                
         when 4                                 # 去除四件效果
         remove_state(26)                                                        
        end                                                                  
       end                                                               
  # 强制附加装备防具的自动状态
    if new_armor != nil and new_armor.auto_state_id != 0
      add_state(new_armor.auto_state_id, true)
    end
  #在這裡插入判定新裝備并添加套裝效果
    def add_state(state_id, force = false)
    if new_armor.state_id == 21                 # n為“XX套裝”自動屬性的序號
       set_num = eq_set_num(new_armor.state_id) # 統計全身套裝件數
        case set_num                            # 根據自定的多層套裝效果做計算
         when 2                                 # 附加兩件效果
            add_state( 25)
         when 4                                 # 附加四件效果
            add_state( 26)   
        end
       end
     end
     end
   end
   end
==========================
防具自带状态是21号,套装是25,26,完全没有效果呀。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-16 11:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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