Project1

标题: 如何使某些技能在处于特殊状态下才可使用(解决一半..) [打印本页]

作者: Innelysion    时间: 2008-4-5 06:40
标题: 如何使某些技能在处于特殊状态下才可使用(解决一半..)
RT,也就是平时某些技能显示灰色无法使用,而角色获得某个状态时才可用,请问如何设置这种效果?


自己解决了一半...

搜索贴时搜到了  "让某变量的值小于一定量时某特技无法使用"的方法
  def skill_can_use?(skill_id)
    if $game_variables[变量ID] < 变量值 and skill_id == 技能ID
        return false
      else
        skill_id == 技能ID
        return true
      end

只要在施放某状态的技能上附加一个操作变量的公共事件,但新问题是如何再状态消失的回合将变量改回原来的状态……
作者: 水迭澜    时间: 2008-4-5 06:51
在Game_Battler的def skill_can_use里边改……好象是吧= =
在里边加句
if self.state?(状态ID) and skill.id == 你设置的技能ID
return true
end
作者: 剑魂    时间: 2008-4-5 06:52
提示: 作者被禁止或删除 内容自动屏蔽
作者: 剑魂    时间: 2008-4-5 06:55
提示: 作者被禁止或删除 内容自动屏蔽
作者: 剑魂    时间: 2008-4-5 06:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: Innelysion    时间: 2008-4-5 07:11
首先感谢楼上两位的回答…

to:水迭澜

以下引用水迭澜于2008-4-4 22:51:32的发言:
<br><script language="javascript">
<!--
strCont="在Game_Battler的def skill_can_use里边改……好象是吧= =\r\n在里边加句\r\nif self.state?(状态ID) and skill.id == 你设置的技能ID\r\nreturn true\r\nend";
document.write(ubb.spbShowTopic(strCont,1));
//-->
</script>在Game_Battler的def skill_can_use里边改……好象是吧= =<br>
在里边加句<br>
<font color="#000099">if</font> self.state?(状态ID) and skill.id == 你设置的技能ID<br>
<font color="#000099">return</font> true<br>
<font color="#000099">end</font>

<br><br><font color="red"></font><font color="red">[本贴由作者于 2008-4-4 22:52:32 最后编辑]</font>


这个脚本不行 无状态时技能可以用,加了状态后反而出错退出了……

to.剑魂
我想是平时直接显示灰色不能使用… 公共事件那里会先使用再判断,而且公共事件过多会拖慢整个游戏 而我做的游戏有大批技能是需要这种状态的
作者: 長江7號    时间: 2008-4-5 07:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: Innelysion    时间: 2008-4-5 07:21
回楼上七仔XD

    if self.state.include?(state_id == 003) and skill.id == 003
      return true
    end



    if self.state.include?(003) and skill.id == 003
      return true
    end

均提示
....发生了NoMethodError
undefined method'state' for #<Game_Actor:0x3e24bc0>
作者: 精灵使者    时间: 2008-4-5 07:24
你可以使用脚本
$data_skills[id].occasion = 0..3
0-平时 1-战斗 2-菜单 3-使用不能
来进行技能的使用判定……
具体参考运行时候修改数据库-技能篇
默认可以设为不可使用,需要的时候在改
作者: Innelysion    时间: 2008-4-5 07:32
请问下楼上具体怎样设置 和在游戏中怎样设置触发的脚本语句,我是语言盲orz 多谢先……
作者: Innelysion    时间: 2008-4-5 07:54
to.长江七号

加了个s后不报错了…… 但技能仍然在未附加状态时可以正常使用
而且同样是加了状态后使用却报错orz


我想大概是缺少规定不在此状态下时无法使用的语句吧……
能否将语句设定成
先判定是某ID的技能
然后再判定身上是否有某ID的状态
是return true
否return false
……
这样
作者: Innelysion    时间: 2008-4-5 08:21
自己解决了一半...

搜索贴时搜到了  "让某变量的值小于一定量时某特技无法使用"的方法
  def skill_can_use?(skill_id)
    if $game_variables[变量ID] < 变量值 and skill_id == 技能ID
        return false
      else
        skill_id == 技能ID
        return true
      end

只要在施放某状态的技能上附加一个操作变量的公共事件,但新问题是如何再状态消失的回合将变量改回原来的状态……
作者: 水迭澜    时间: 2008-4-5 09:21
以下引用Innelysion于2008-4-4 23:11:24的发言:

我那个方法,状态ID和技能ID需要改成数字....
等我找找看原脚本OTZ

找到了,这样

class Game_Battler
  def skill_can_use?(skill_id)
    # SP 不足的情况下不能使用
    if $data_skills[skill_id].sp_cost > self.sp
      return false
    end
    # 战斗不能的情况下不能使用
    if dead?
      return false
    end
    # 沉默状态的情况下、物理特技以外的特技不能使用
    if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
      return false
    end

# ==========================================================
    if !self.state?(状态ID) and skill_id == 你设置的技能ID
      return false
    end
#  注意把状态ID和技能ID改成数字
# ==========================================================
    # 获取可以使用的时机
    occasion = $data_skills[skill_id].occasion
    # 战斗中的情况下
    if $game_temp.in_battle
      # [平时] 或者是 [战斗中] 可以使用
      return (occasion == 0 or occasion == 1)
    # 不是战斗中的情况下
    else
      # [平时] 或者是 [菜单中] 可以使用
      return (occasion == 0 or occasion == 2)
    end
  end


插入原脚本前边,或者你参考着替换Game_battler3相同部分
抱歉,我刚犯了脑残的错误…… [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 娜可露露    时间: 2008-4-5 10:41
一个状态限制多个技能。
class Game_Battler
def skill_can_use?(skill_id)
   # SP 不足的情况下不能使用
   if $data_skills[skill_id].sp_cost > self.sp
     return false
   end
   # 战斗不能的情况下不能使用
   if dead?
     return false
   end
   # 沉默状态的情况下、物理特技以外的特技不能使用
   if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
     return false
   end

# ==========================================================
   if !self.state?(状态ID) and [13,14,15].include?(skill_id)
     return false
   end
#  注意把状态ID和技能ID改成数字 假设13,14,15三个特技限制一个在一个状态中,记得半角逗号分割。
# ==========================================================
   # 获取可以使用的时机
   occasion = $data_skills[skill_id].occasion
   # 战斗中的情况下
   if $game_temp.in_battle
     # [平时] 或者是 [战斗中] 可以使用
     return (occasion == 0 or occasion == 1)
   # 不是战斗中的情况下
   else
     # [平时] 或者是 [菜单中] 可以使用
     return (occasion == 0 or occasion == 2)
   end
end
[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 長江7號    时间: 2008-4-5 16:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: doranikofu    时间: 2008-4-5 17:07
如果LZ要在状态回合数到的时候操作变量的话就这样
Game_Battler 2
  1.   #--------------------------------------------------------------------------
  2.   # ● 状态自然解除 (回合改变时调用)
  3.   #--------------------------------------------------------------------------
  4.   def remove_states_auto
  5.     for i in @states_turn.keys.clone
  6.       if @states_turn[i] > 0
  7.         @states_turn[i] -= 1
  8.       elsif rand(100) < $data_states[i].auto_release_prob
  9.         remove_state(i)
  10.            $game_variables[XXX] = XXX  ######回合数到的时候要操作的变量   
  11.       end
  12.     end
  13.   end
复制代码
[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: Innelysion    时间: 2008-4-5 18:14
非常感谢楼上各位的解答…… 问题已经解决了 但不知道给谁分好orz
都给吧,谢谢大家了!
作者: 精灵使者    时间: 2008-4-5 21:26
能不能用这个方法呢?
参考这里http://rpg.blue/web/htm/news240.htm




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