Project1

标题: 怎么用金钱来抵挡伤害的武器 [打印本页]

作者: wabbyzw    时间: 2012-2-4 17:01
标题: 怎么用金钱来抵挡伤害的武器
就是说某一个盾,当角色佩戴的时候,受到一定伤害时,把其中一部分伤害用金钱来抵消。
比如说收到1000伤害,当金钱盾佩戴时,玩家损失200金钱,然后只有800的伤害。
配上怎么用最好,谢谢!dsu_plus_rewardpost_czw
作者: 328526553    时间: 2012-2-5 21:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: wabbyzw    时间: 2012-2-5 22:30
怎么解决,我新手哈……
作者: 月之唤    时间: 2012-2-6 13:09
本帖最后由 月之唤 于 2012-2-6 13:15 编辑

用事件,我看看能不能做出来。
作者: wabbyzw    时间: 2012-2-7 20:42
那快点了哈~
作者: 怪蜀黍    时间: 2012-2-7 20:49
制作这效果方法是很容易,但是很烦琐。因为伤害是来自多方面的,有来自攻击,来自魔法,来自毒,来自强制伤害等等。所以和这些相关的脚本或事件都得改。
作者: a364774426    时间: 2012-2-7 21:35
这玩意儿的确相当麻烦,不能直接用公共事件。如果不是很必要的话,LZ放弃吧
作者: wabbyzw    时间: 2012-2-11 05:49
他不用能抵挡异常状态,只是普通攻击才可以抵挡,大侠们都不行吗?不行我就放弃了……
作者: qq547923696QQ    时间: 2012-2-13 07:19
果断放弃吧
作者: 杂兵天下    时间: 2012-2-13 10:56
本帖最后由 杂兵天下 于 2012-2-13 11:20 编辑

让我来接手这个问题吧
话说你有没有用LunaticDamage
有没有听说过LunaticDamage?
这个金钱盾是抵挡普通攻击、魔法攻击还是特技攻击?���
RUBY 代码复制
  1. class Game_Actor
  2.   def attack_effect(attacker)
  3.     clear_action_results
  4.     unless attack_effective?(attacker)
  5.       @skipped = true
  6.       return
  7.     end
  8.     if rand(100) >= calc_hit(attacker)            # 计算命中率
  9.       @missed = true
  10.       return
  11.     end
  12.     if rand(100) < calc_eva(attacker)             # 计算闪躲率
  13.       @evaded = true
  14.       return
  15.     end
  16.     make_attack_damage_value(attacker)            # 计算伤害
  17.     if $data_armors[@armor1_id].name=="金钱盾"
  18.       calc_me = @hp_damage/5.0
  19.       calc_me = calc_me.to_i
  20.       $game_party.gain_gold(-calc_me)
  21.       if $game_party.gold >= calc_me
  22.         @hp_damage -= calc_me
  23.       else
  24.         @hp_damage -= $game_party.gold
  25.       end
  26.     end
  27.     execute_damage(attacker)                      # 伤害效果
  28.     if @hp_damage == 0                            # 判断是否有物理伤害
  29.       return                                    
  30.     end
  31.     apply_state_changes(attacker)                 # 增减状态
  32.   end
  33. end

这是抵挡普通攻击的金钱盾。把代码插入脚本编辑器Main上面就可以
作者: wabbyzw    时间: 2012-2-14 19:17
本帖最后由 wabbyzw 于 2012-2-14 19:18 编辑
杂兵天下 发表于 2012-2-13 10:56
让我来接手这个问题吧
话说你有没有用LunaticDamage
有没有听说过LunaticDamage?


钱不够则不能发动,然后治疗有金钱盾的人也不会加钱,还是麻烦您把能抵挡中毒、出血、眩晕、石化这四种状态做出来。
中毒就是每回合掉血,7回合后自动回复。
出血就是每回合掉血,攻击力减少,6回合后自动回复。
眩晕就是不能攻击,5回合后自动回复。
石化就是不能攻击,加倍掉血,不能获得EXP,3回合后自动回复。
麻烦啦~
如果做出来就认可,做不出来也认可,谢谢啦~
作者: 杂兵天下    时间: 2012-2-14 19:42
  1. class Game_Actor
  2.   def execute_damage(user)
  3.     if @hp_damage > 0
  4.       remove_states_shock
  5.       calc_me = @hp_damage/5.0
  6.       calc_me = calc_me.to_i
  7.       if $data_armors[@armor1_id].name=="金钱盾" && $game_party.gold >= calc_me
  8.         @hp_damage -= calc_me
  9.         $game_party.gain_gold(-calc_me)
  10.       end
  11.     end
  12.     self.hp -= @hp_damage
  13.     self.mp -= @mp_damage
  14.     if @absorbed
  15.       user.hp += @hp_damage
  16.       user.mp += @mp_damage
  17.     end
  18.   end#用金钱盾抵御非状态伤害。
  19.   def slip_damage_effect
  20.     if slip_damage? and @hp > 0
  21.       @hp_damage = apply_variance(maxhp / 10, 10)
  22.       @hp_damage = @hp - 1 if @hp_damage >= @hp
  23.       if $data_armors[@armor1_id].name=="金钱盾"
  24.         calc_me = @hp_damage/5.0
  25.         calc_me = calc_me.to_i
  26.         if $game_party.gold >= calc_me && @hp_damage>0
  27.           @hp_damage -= calc_me
  28.           $game_party.gain_gold(-calc_me)
  29.         end
  30.       end
  31.       self.hp -= @hp_damage
  32.     end
  33.   end#用金钱盾抵御流血、中毒状态伤害。
  34.   def apply_state_changes(obj)
  35.     plus = obj.plus_state_set
  36.     minus = obj.minus_state_set
  37.     for i in plus
  38.       next if state_resist?(i)
  39.       next if dead?
  40.       next if i == 1 and @immortal
  41.       if state?(i)
  42.         @remained_states.push(i)
  43.         next
  44.       end
  45.       if rand(100) < state_probability(i)
  46.         @querenaddstate=true
  47.         if $data_armors[@armor1_id].name=="金钱盾"
  48.           calc_me = 10000000#大额度的金钱,不要改动。
  49.           calc_me = 100 if i==8#此处假设8是眩晕状态的ID,需要消耗100钱抵挡
  50.           calc_me = 50 if i==9#此处假设9是石化状态的ID,需要消耗50钱抵挡
  51.           unless($game_party.gold<calc_me)
  52.             $game_party.gain_gold(-calc_me)
  53.             @querenaddstate=false
  54.           end
  55.         end
  56.         if @querenaddstate
  57.           add_state(i)
  58.           @added_states.push(i)
  59.         end
  60.       end
  61.     end
  62.     for i in minus
  63.       next unless state?(i)
  64.       remove_state(i)
  65.       @removed_states.push(i)
  66.     end
  67.     for i in @added_states & @removed_states
  68.       @added_states.delete(i)
  69.       @removed_states.delete(i)
  70.     end
  71.   end
  72. end
复制代码

作者: iisnow    时间: 2012-2-25 12:13
杂兵天下 发表于 2012-2-13 10:56
让我来接手这个问题吧
话说你有没有用LunaticDamage
有没有听说过LunaticDamage?

首先脚本大致完成了功能,但是又几个小问题;
1.先扣除钱还是HP伤害,顺序反了吧
  20-25行应该改为
  1. if $game_party.gold >= calc_me
  2.         @hp_damage -= calc_me
  3.       else
  4.         @hp_damage -= $game_party.gold
  5.       end
  6. $game_party.gain_gold(-calc_me)
复制代码
2.然后是判据,如果角色不带上防具,脚本时会报错的:
  所以17行改为:
  1. if $data_armors[@armor1_id] == X #X就是金钱盾的id
  2. #或者
  3. if $data_armors[@armor1_id] && $data_armors[@armor1_id].name=="金钱盾"
复制代码





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