查看: 2822|回复: 10

[已经过期] 偷盗系统怎么做+新手小福利哦

[复制链接]
梦石
0
星屑
50
在线时间
25 小时
注册时间
2014-5-1
回帖
5
发表于 2016-9-18 09:05:23 | 显示全部楼层 |阅读模式

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

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

×
求大神帮忙啊
我做的游戏卡这个脚本好久了
都快弃坑了
这个偷盗脚本要求如下
1.偷盗的东西和掉落的东西是不一样的
2.有很多怪的掉落是不同的(种类也不同)
3.怪被打一下后就不掉东西了而且下一轮偷东西的人将受到所有敌人的攻击
4.我有用菜鸟横版战斗
5.RPGXP的,不要给人家VX的哦
6.实在不行教我做公共的也行
7.现在献上我半年份的小膝盖


为了表示我不是一个单纯的伸手党,我发一些新手用的到的小脚本。所有脚本大神们救济一下宝宝吧。


(新)显示NPC名和图标.rar

215.88 KB, 下载次数: 63

对话框和跟随.rar

384.15 KB, 下载次数: 58

移动光源.rar

352.85 KB, 下载次数: 74

装备扩展.zip

206.44 KB, 下载次数: 63

镜面水面效果.rar

192.21 KB, 下载次数: 67

评分

参与人数 1星屑 +5 收起 理由
Vortur + 5 说实在的,经验真的很浮云

查看全部评分

梦石
0
星屑
1788
在线时间
1313 小时
注册时间
2012-8-4
回帖
724
发表于 2016-9-18 09:34:52 | 显示全部楼层
本帖最后由 夜狠简单 于 2016-9-22 19:34 编辑

有趣的功能,不少游戏里面都有这个偷盗的功能。
不过你要的偷盗系统 介绍太少了。如果有详细的设计流程(也就是这个系统的具体介绍 它的开启条件、偷盗能力会不会升级之类的)那么写起来就方便添加功能。
要求不高的话,公共事件就可以做。连接一个技能来弄。


按1l要求弄的,基本能满足大部分条件

行窃系统[pre lang="ruby"]#==============================================================================
#●行窃系统 by Rk 16921
#------------------------------------------------------------------------------
=begin
————注释开始
1.偷盗的东西需要在★★★开始设置★★★—★★★结束设置★★★里面设置
#------------------------------------------------------------------------------
2.怪被打一下后,或者偷过一次(即使没成功)不掉东西了
#------------------------------------------------------------------------------
3.下一轮偷东西的人将受到所有敌人的攻击(包括技能)
#------------------------------------------------------------------------------
这几个参数每次读档后就会恢复默认值,
$game_temp.steal_continue=true 被群殴后(true会,false不会)被所有人警惕
begin
$game_temp.steal_continue=false
end
使用类似于$game_switches[1] = false这样的事件脚本,游戏会卡死
由于是RGSS1的著名BUG之一,如果脚本的最后一句返回false或者nil,游戏会卡死。
解决办法很简单在后面填一行注释或者加 begin 内容 end
特殊敌人临时改变就在战斗事件页里修改就好。
$game_temp.steal_mass_wait=x  #被围攻的回合数在偷东西之后的第x回合数
$game_temp.steal[敌人id]=[[物品],[武器]],[防具],[金钱]]改变敌人的被窃数据
————注释结束
=end
#==============================================================================
#设置能使用这个技能的角色id。大写字母开头好像就是全局变量的意思
   Power_919                =[1,8] #表示1号角色和8号角色可以使用行窃技能
#用120号变量记录结果
   Steal_variablse_919      =120
#关闭默认的结果提示窗口开关:120号开关打开时 即不用默认的结果提示窗口
   Steal_help_switches_919  =120
#行窃的特技ID有81,如果还有其他技能可以这样些[81,55,66].
   Steal_skill_id_919       =[81]
#行窃成功播放的SE
   Steal_success_919        ="Audio/SE/056-Right02"
#行窃失败播放的SE
   Steal_fail_919           ="Audio/SE/057-Wrong01"
#游戏测试时输出角色各个等级对敌人的基础窃取成功率,ctrl+f搜索 Lvi级是对敌人名称n
if $DEBUG
   $data_actors        = load_data("Data/Actors.rxdata")
   $data_enemies       = load_data("Data/Enemies.rxdata")
   Power_919.each{|index| file =
   File.open("#{$data_actors[index].name}窃取率.txt","w")
   (1...$data_enemies.size).each{|n|
   file.write("【#{$data_enemies[n].name}】"+"\n")
   $data_actors[index].initial_level.upto($data_actors[index].final_level){|i|
   prob=Integer($data_actors[index].parameters[3,i]*20/$data_enemies[n].dex)
   file.write("Lv#{i}时对#{$data_enemies[n].name}窃取成功率:#{prob}"+"\n")}}}
   #行窃成功率=取行窃者灵巧×20÷行窃目标灵巧
end
#==============================================================================
# ■ Game_Temp
#------------------------------------------------------------------------------
# 在没有存档的情况下,处理临时数据的类。这个类的实例请参考
# $game_temp 。
#==============================================================================
class Game_Temp
attr_accessor :steal                      #能被行窃敌人的数据
attr_accessor :steal_index                #行窃目标与行窃者
attr_accessor :steal_switches             #行窃进行开关
attr_accessor :mass_brawl                 #群殴对象
attr_accessor :steal_found                #行窃被发现的开关
attr_accessor :steal_continue             #被群殴后(true会,false不会)被所有敌人警惕
attr_accessor :harvest                    #收获
attr_accessor :steal_mass_wait            #被围攻的回合数在偷东西之后的第几回合数
  alias initialize16918 initialize
  def initialize
    initialize16918
    @mass_brawl={}
    @harvest=[]
    @steal_index=[]
    @steal_switches=false
    @steal_continue=false
    @steal_mass_wait=1    #为0时就是偷东西的回合被群殴,小于0不会被群殴
    @steal_found={}
    @steal||={}
=begin
————注释开始
添加敌人数据,和敌人掉落的物件,没有限制游戏里敌人能被偷次数。
每次战斗开始敌人都有可能被偷。

写法1:       [[[物品id],数量],[[武器id],数量],[[防具id],数量],[金钱]]


默认数量为1,金钱不能偷就不填,最好直接写成[].可以小于0
写法2:      [[物品id],[武器id]],[防具id],[金钱]]

    #一定几率偷到1~3号物品中其中一样,最多能偷到2个
    @steal[敌人id]=[[[1,2,3],2],[],[],[]]
    #一定几率偷到4,5号武器,最多能偷到5个;1,2防具,最多能偷到3个
    @steal[敌人id]=[[],[[4,5],rand(5)+1],[[1,2],rand(3)+1],[]]
    @steal[敌人id]=[[],[],[],[rand(1000)+1]]#随机掉落1-1000个金币
————注释结束
=end

    #★★★★★★★★★★★开始设置★★★★★★★★★★
    #一定几率偷到1~4号物品、武器、防具,物品最多能偷1个,
    #武器每次可以偷2个,防具每次最多可以偷3个,能偷到金钱16
    @steal[1]=[[[1,2,3,4],1],[[1,2,3,4],2],[[1,2,3,4],rand(3)+1],[16]]
    #一定几率偷到5,6,7,8号物品、武器、13~16防具1个,金钱1~23个
    @steal[2]=[[5,6,7,8],[5,6,7,8],[13,14,15,16],[rand(23)+1]]
    @steal[3]=[[],[],[],[rand(1000)-500]]
    #★★★★★★★★★★★结束设置★★★★★★★★★★
   
  end
end

#==============================================================================
# ■ Scene_Battle (分割定义 4)
#------------------------------------------------------------------------------
# 处理战斗画面的类。
#==============================================================================
class Scene_Battle
  # 初始化战斗用的各种暂时数据
  alias main16918 main
  def main
    $game_temp.steal_found={}#初始化被发现的行窃者
    $game_temp.mass_brawl={}#初始化群欧对象
    main16918
  end
  #回合结束处理
  alias start_phase416918 start_phase4
  def start_phase4
    @mass_brawl919||=0;@mass_brawl919+=1;@play919||=0
    #在群殴回合被群殴后清除被群殴的行窃者
    $game_temp.mass_brawl.each {|key, value|
    @key_920=key;@value_920=value
    value.each{|i|$game_temp.mass_brawl[@key_920].delete(i)if @mass_brawl919>i}
    $game_temp.mass_brawl.delete(key) if value.empty? }
    start_phase416918
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 2 : 开始行动)
  #--------------------------------------------------------------------------
  alias update_phase4_step216918 update_phase4_step2
  def update_phase4_step2
      @play919=(@active_battler.is_a?(Game_Enemy)||@play919>0)?1:0
      update_phase4_step216918
  end
  #--------------------------------------------------------------------------
  # ● 生成基本行动结果
  #--------------------------------------------------------------------------
  alias make_basic_action_result16918 make_basic_action_result
  def make_basic_action_result
     @vice_919=0
     $game_temp.mass_brawl.each_value {|value|
     @vice_919+=1 if value.include?(@mass_brawl919)}
  if $game_temp.mass_brawl.empty? or @vice_919==0
    make_basic_action_result16918
  else
    # 攻击的情况下
    if @active_battler.current_action.basic == 0
      # 设置攻击 ID
      @animation1_id = @active_battler.animation1_id
      @animation2_id = @active_battler.animation2_id
      # 行动方的战斗者是敌人的情况下
      if @active_battler.is_a?(Game_Enemy)
        if @active_battler.restriction == 3
          target = $game_troop.random_target_enemy
        elsif @active_battler.restriction == 2
          @index_919=0
          $game_temp.mass_brawl.each{|key,value|
          @index_919+=1 if value.include?(@mass_brawl919)}
          index = $game_temp.mass_brawl.keys[rand(@index_919)]
          target = $game_party.smooth_target_actor(index)  #目标取行窃者
        else
          @index_919=0
          $game_temp.mass_brawl.each{|key,value|
          @index_919+=1 if value.include?(@mass_brawl919)}
          index = $game_temp.mass_brawl.keys[rand(@index_919)]
          target = $game_party.smooth_target_actor(index)  #目标取行窃者
        end
      end
      # 行动方的战斗者是角色的情况下
      if @active_battler.is_a?(Game_Actor)
        if @active_battler.restriction == 3
          target = $game_party.random_target_actor
        elsif @active_battler.restriction == 2
          target = $game_troop.random_target_enemy
        else
          index = @active_battler.current_action.target_index
          target = $game_troop.smooth_target_enemy(index)
        end
      end
      # 设置对像方的战斗者序列
      @target_battlers = [target]
      # 应用通常攻击效果
      for target in @target_battlers
        target.attack_effect(@active_battler)
      end
      return
    end
    # 防御的情况下
    if @active_battler.current_action.basic == 1
      # 帮助窗口显示"防御"
      @help_window.set_text($data_system.words.guard, 1)
      return
    end
    # 逃跑的情况下
    if @active_battler.is_a?(Game_Enemy) and
       @active_battler.current_action.basic == 2
      #  帮助窗口显示"逃跑"
      @help_window.set_text("逃跑", 1)
      # 逃跑
      @active_battler.escape
      return
    end
    # 什么也不做的情况下
    if @active_battler.current_action.basic == 3
      # 清除强制行动对像的战斗者
      $game_temp.forcing_battler = nil
      # 移至步骤 1
      @phase4_step = 1
      return
    end
   end
  end
  #--------------------------------------------------------------------------
  # ● 生成特技行动结果
  #--------------------------------------------------------------------------
  alias make_skill_action_result16918 make_skill_action_result
  def make_skill_action_result
    #如果不是使用行窃技能的话,就不用去计算了,减少运算量
    if Steal_skill_id_919.include?($data_skills[
    @active_battler.current_action.skill_id].id)
    steal_index=@active_battler.current_action.target_index
    #记录行窃目标与行窃者
    steal=[$game_troop.smooth_target_enemy(steal_index).id,@active_battler.id,
    steal_index,@active_battler.index,@mass_brawl919+$game_temp.steal_mass_wait]
    0.upto(steal.size-1){|i|$game_temp.steal_index=steal}
    #群殴后被敌人警惕
    $game_temp.steal_found[steal_index]=(@play919==1 &&
    $game_temp.steal_continue ==true||
    $game_temp.steal_found[steal_index]==true) ?  true  :  false
    #判断窃取结果
    $game_variables[Steal_variablse_919]=Steal.new.resul($game_temp.steal_index)
    $game_temp.steal_switches=true
    make_skill_action_result16918
    else
    $game_temp.steal_switches=false
    make_skill_action_result16918
    end
  end
  #--------------------------------------------------------------------------
  # ● 设置物品或特技对像方的战斗者
  #     scope : 特技或者是物品的范围
  #--------------------------------------------------------------------------
  alias set_target_battlers16918 set_target_battlers
  def set_target_battlers(scope)
     @vice_919=0
     $game_temp.mass_brawl.each_value {|value|
     @vice_919+=1 if value.include?(@mass_brawl919)}
    if $game_temp.mass_brawl.empty? or @vice_919==0
       set_target_battlers16918(scope)
    else
       set_target_battlers16918(scope)
    #行动方的战斗者是敌人的情况下
     if @active_battler.is_a?(Game_Enemy)
      # 效果范围分支
      case scope
      when 1  # 敌单体
        #目标取行窃者
        @index_919=0
        $game_temp.mass_brawl.each{|key,value|
        @index_919+=1 if value.include?(@mass_brawl919)}
        @target_battlers_vive=@target_battlers.clone
        #记录删掉的位置,记录位置,记录跳过的数,记录全体攻击位置,
        @target_vive0=[];@target_vive1=0;@target_vive2=0;@target_vive3=[]
        for actor in $game_party.actors
          if actor.exist?
            @target_vive3<<(actor)
          end
        end
        @target_battlers_vive.each{|i|@target_vive2=@target_vive1+
        @target_vive3.size if @target_battlers_vive[@target_vive1,
        @target_vive3.size]==@target_vive3;@target_vive1+=1
        @target_vive0<<(@target_vive1-1) if @target_vive2<@target_vive1 &&
        !i.is_a?(Game_Enemy)}
        @target_vive0.each{|i|@target_battlers=
        $game_party.smooth_target_actor(
        $game_temp.mass_brawl.keys[rand(@index_919)])}
      end
     end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面 (主回合步骤 5 : 显示伤害)
  #--------------------------------------------------------------------------
  alias update_phase4_step516918 update_phase4_step5
  def update_phase4_step5
   if @active_battler.is_a?(Game_Actor)
    for target in @target_battlers
      if target.damage != nil
       $game_temp.steal_found[target.index]=true
      end
    end
   end
    update_phase4_step516918
    #当Steal_help_switches_919号开关为OFF 并且 $game_temp.steal_switches=true时
    if (!$game_switches[Steal_help_switches_919] && $game_temp.steal_switches)
       Steal_help_switches($game_variables[Steal_variablse_919])
    end
  end
  #--------------------------------------------------------------------------
  # ● 行窃帮助窗口
  #--------------------------------------------------------------------------
  def Steal_help_switches(resul)
    #失败的情况下播放失败SE,成功的情况播放成功SE,如果需要每种情况音效不一样,在下面的when里面加
    resul<=5 ?Audio.se_play(Steal_fail_919):Audio.se_play(Steal_success_919)
    #播放SE:Audio.se_play("文件名",音量,节奏速度)
    case resul
    when 1#使用者是不能掌握该技能的角色
         @help_window.set_text("无法掌握该技能", 1)
    when 2#被行窃目标高度警惕
         @help_window.set_text("目标处于高度警惕状态", 1)
    when 3#行窃目标无数据
         @help_window.set_text("什么都没有发现", 1)
    when 4#行窃有数据但设置内容全为空
         @help_window.set_text("什么都没有发现", 1)
    when 5#被行窃目标发现
         @help_window.set_text("被目标识破意图了", 1)
    when 6#窃取物是物品
         n=$data_items[$game_temp.harvest[0]].name
         m=$game_temp.harvest[1]
         @help_window.set_text("获得物品 #{n} : #{m}", 1)
    when 7#窃取物是武器
         n=$data_weapons[$game_temp.harvest[0]].name
         m=$game_temp.harvest[1]
         @help_window.set_text("获得武器 #{n} : #{m}", 1)
    when 8#窃取物是防具
         n=$data_armors[$game_temp.harvest[0]].name
         m=$game_temp.harvest[1]
         @help_window.set_text("获得防具 #{n} : #{m}", 1)
    when 9#窃取物是金钱
         n=$game_temp.harvest[1];m=$data_system.words.gold
         n<0 ?@help_window.set_text("失去#{n} #{m}",1):
         @help_window.set_text("获得#{n} #{m}",1)
    end
    #等待40帧
    40.times{Graphics.update;@help_window.update}
    $game_temp.steal_switches=false#本次行窃完成,这句不要删
  end
end
#==============================================================================
# ■ Scene_Steal
#------------------------------------------------------------------------------
# 处理行窃系统判断的类。RK
#==============================================================================  
class Steal
  def resul(steal_index)#返回行窃结果
   #当技能使用者没有行使权时返回false,即行窃失败,但不受到群殴
   return 1 unless Power_919.include?(steal_index[1])
   #当行窃者被发现,本次战斗再也偷不到东西,但会受到群殴
   if $game_temp.steal_found[steal_index[2]]==true
      $game_temp.mass_brawl[steal_index[3]]||=[]
      $game_temp.mass_brawl[steal_index[3]]<<steal_index[4]
      return 2
    else#当行窃者没有被惊动时的情况
      #下面开始判断能被行窃敌人数据是否存在
      if $game_temp.steal.include?(steal_index[0])
         @empty=[]#取不能被窃取的项目
         @n=0
         $game_temp.steal[steal_index[0]].each{|i|
         $game_temp.steal[steal_index[0]][@n][1]||=1 unless i.empty?
         @empty<<@n if i.empty? or i[1]<=0 or (@n==3 && i[0]==0)
         @n+=1}
         if @empty.size<4
           #行窃成功率判定,行窃成功率=取行窃者灵巧×20÷行窃目标灵巧
           treasure_prob=Integer($game_actors[steal_index[1]].dex*20/
           $data_enemies[steal_index[0]].dex)
          #判断是否被发现
          if rand(100) < treasure_prob
           #在能被窃取的项目中随机选一项
           begin
           @index=rand(4)
           end until !@empty.include?(@index)
           case @index
           when 0 #偷到物品,并记录下回合将被围攻的角色
             $game_temp.harvest[0]=$game_temp.steal[steal_index[0]][0][0][rand(
             $game_temp.steal[steal_index[0]][0][0].size)]
             $game_temp.harvest[1]=$game_temp.steal[steal_index[0]][0][1]
             $game_party.gain_item($game_temp.harvest[0],
             $game_temp.harvest[1])
             $game_temp.mass_brawl[steal_index[3]]||=[]
             $game_temp.mass_brawl[steal_index[3]]<<steal_index[4]
             return 6
           when 1 #偷到武器,并记录下回合将被围攻的角色
             $game_temp.harvest[0]=$game_temp.steal[steal_index[0]][1][0][rand(
             $game_temp.steal[steal_index[0]][1][0].size)]
             $game_temp.harvest[1]=$game_temp.steal[steal_index[0]][1][1]
             $game_party.gain_weapon($game_temp.harvest[0],
             $game_temp.harvest[1])
             $game_temp.mass_brawl[steal_index[3]]||=[]
             $game_temp.mass_brawl[steal_index[3]]<<steal_index[4]
             return 7
           when 2 #偷到防具,并记录下回合将被围攻的角色
             $game_temp.harvest[0]=$game_temp.steal[steal_index[0]][2][0][rand(
             $game_temp.steal[steal_index[0]][2][0].size)]
             $game_temp.harvest[1]=$game_temp.steal[steal_index[0]][2][1]
             $game_party.gain_armor($game_temp.harvest[0],
             $game_temp.harvest[1])
             $game_temp.mass_brawl[steal_index[3]]||=[]
             $game_temp.mass_brawl[steal_index[3]]<<steal_index[4]
             return 8
           when 3 #偷到金钱,并记录下回合将被围攻的角色
             $game_temp.harvest[1]=$game_temp.steal[steal_index[0]][3][0]
             $game_party.gain_gold($game_temp.harvest[1])
             $game_temp.mass_brawl[steal_index[3]]||=[]
             $game_temp.mass_brawl[steal_index[3]]<<steal_index[4]
             return 9
           end
         else#行窃被发现,记录下回合将被围攻角色
         $game_temp.mass_brawl[steal_index[3]]||=[]
         $game_temp.mass_brawl[steal_index[3]]<<steal_index[4]
         return 5  
         end
        else#能被行窃敌人数据存在但设置内容全为空时,记录被围攻角色
         $game_temp.mass_brawl[steal_index[3]]||=[]
         $game_temp.mass_brawl[steal_index[3]]<<steal_index[4]#不被围攻就注释掉该行
         return 4
        end
      else
        #能被行窃敌人数据不存在,记录被围攻的角色。
        $game_temp.mass_brawl[steal_index[3]]||=[]
        $game_temp.mass_brawl[steal_index[3]]<<steal_index[4]#不被围攻就注释掉该行
        return 3
      end
   end
  end
end
[/pre]


做的很痛苦,因为我用的菜鸟横版战斗系统,敌人有时候出来打人的动作会带着其他敌人。我以为是我写的这个弄的,然后删了一些地方,又写上去了。
不过自由度有所提高,但是获取行动顺序有点固定死了。
def make_basic_action_result
if $game_temp.mass_brawl.empty? or @vice_919==0
    make_basic_action_result16918
  else
.....内容
end
end
里面的【...内容】使用的是默认的系统,如果自己游戏里面有改了这部分,就自己改下【...内容】.

然后举个例子 如果默认下回合被敌人攻击
主角在第一回合进行偷东西,然后第二回合主角被群殴,第二回合继续偷东西,那么主角第三回合被群殴。第三回合不偷了,就不被群殴了。

不过这个 不适合 RTAB 即时制全动画战斗系统(这些系统下,主角被偷东西被围攻不能这样记录。),回合制可以用

偷盗.rar

561.85 KB, 下载次数: 77

点评

兼容性不高,不同的战斗系统,需要视情况做修改。  发表于 2016-9-22 14:05
已更新菜鸟横版战斗的,周末回来试下吧  发表于 2016-9-20 18:46
默认战斗系统下可有用,bug可能会有。如果菜鸟横板不能用,请点评提醒我改  发表于 2016-9-18 22:05

评分

参与人数 1星屑 +300 收起 理由
hys111111 + 300 塞糖

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
25 小时
注册时间
2014-5-1
回帖
5
 楼主| 发表于 2016-9-18 09:40:51 | 显示全部楼层
夜狠简单 发表于 2016-9-18 09:34
有趣的功能,不少游戏里面都有这个偷盗的功能。
不过你要的偷盗系统 介绍太少了。如果有详细的设计流程(也 ...

这个技能呢,我设定只有猪脚通过学习会的,

开启条件,好像是没有呢

技能不会升级,整个游戏只有猪脚会这个技能。

需要这个技能来连接后续的任务,

后续的怪有超过100个这样的设定,所以最好还是有脚本啦~当然没办法的话,公共我也认了呢
回复

使用道具 举报

梦石
0
星屑
1788
在线时间
1313 小时
注册时间
2012-8-4
回帖
724
发表于 2016-9-18 09:48:08 | 显示全部楼层
玉蝶儿 发表于 2016-9-18 09:40
这个技能呢,我设定只有猪脚通过学习会的,

开启条件,好像是没有呢

不用升级的话,偷盗物品成功率想怎么取?公共事件做的话也是在事件页里加一些脚本来完成
回复

使用道具 举报

梦石
0
星屑
50
在线时间
25 小时
注册时间
2014-5-1
回帖
5
 楼主| 发表于 2016-9-18 10:04:46 | 显示全部楼层
本帖最后由 玉蝶儿 于 2016-9-18 10:06 编辑
夜狠简单 发表于 2016-9-18 09:48
不用升级的话,偷盗物品成功率想怎么取?公共事件做的话也是在事件页里加一些脚本来完成 ...


和灵巧连接,灵巧越高,成功率越高

点评

回来了,马上就弄,不知道今晚能不能写出来。有空的话把菜鸟横版战斗脚本贴一份上来。怕写得和战斗系统不兼容  发表于 2016-9-18 16:55
嗯,没电了。如果没人弄,下午活动结束后回家给你弄  发表于 2016-9-18 10:14
回复

使用道具 举报

梦石
0
星屑
462
在线时间
871 小时
注册时间
2014-5-5
回帖
914
发表于 2016-9-18 12:57:23 | 显示全部楼层
按你的要求,我找了两个脚本给你
1,先增加怪物掉宝的数量,所以用了4格掉宝脚本
4格掉宝脚本#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================

# ============================================================================
# 四格掉宝设定 by SailCat
#          fix by snstar2006
# ============================================================================
# 脚本使用说明:
# 1.复制后插入到Main前面
# 2.数据库设定额外掉宝的概率,在敌人名称那里
#   格式: 敌人名称,宝物1,宝物2,宝物3,宝物4
#   宝物写法: (I|W|A)n 分别对应: n号道具,n号武器,n号防具 I W A必须大写
#   例: Cockatrice,A5,I5,W3
#       Fishman,I2,I3
#   三栏中任一栏留空不写时,取前一格的设定,全都不写时,就没有宝物。
# 3.186行是四格概率比设定,在那里填上4个数字就可以更改概率了,该行内容:
#         rarity = [178, 51, 15, 12]
# ============================================================================
# 修改部分:
# 1. 掉的宝物设置在敌人名称之後,设置4个
# 2. 默认的宝物栏用来当作偷窃用的「携带物」,不会掉落。
#--------------------------------------------------------------------------
# □ RPG::Enemy
#--------------------------------------------------------------------------
module RPG
class Enemy
   def name
     name = @name.split(/,/)[0]
     return name != nil ? name : ""
   end
   def treasure1
     treasure = @name.split(/,/)[1]
     return treasure.to_s
   end
   def treasure2
     treasure = @name.split(/,/)[2]
     return treasure.to_s
   end
   def treasure3
     treasure = @name.split(/,/)[3]
     return treasure.to_s
   end
   def treasure4
     treasure = @name.split(/,/)[4]
     return treasure.to_s
   end
end
end

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的
# 内部使用。
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● 获取物品 ID1
#--------------------------------------------------------------------------
def item1_id
   if $data_enemies[@enemy_id].treasure1 == ""
     return item_id
   elsif $data_enemies[@enemy_id].treasure1[0,1] != "I"
     return 0
   else
     return $data_enemies[@enemy_id].treasure1[/[0-9]+/].to_i
   end
end
#--------------------------------------------------------------------------
# ● 获取武器 ID1
#--------------------------------------------------------------------------
def weapon1_id
   if $data_enemies[@enemy_id].treasure1 == ""
     return weapon_id
   elsif $data_enemies[@enemy_id].treasure1[0,1] != "W"
     return 0
   else
     return $data_enemies[@enemy_id].treasure1[/[0-9]+/].to_i
   end
end
#--------------------------------------------------------------------------
# ● 获取防具 ID1
#--------------------------------------------------------------------------
def armor1_id
   if $data_enemies[@enemy_id].treasure1 == ""
     return armor_id
   elsif $data_enemies[@enemy_id].treasure1[0,1] != "A"
     return 0
   else
     return $data_enemies[@enemy_id].treasure1[/[0-9]+/].to_i
   end
end
#--------------------------------------------------------------------------
# ● 获取物品 ID2
#--------------------------------------------------------------------------
def item2_id
   if $data_enemies[@enemy_id].treasure2 == ""
     return item_id
   elsif $data_enemies[@enemy_id].treasure2[0,1] != "I"
     return 0
   else
     return $data_enemies[@enemy_id].treasure2[/[0-9]+/].to_i
   end
end
#--------------------------------------------------------------------------
# ● 获取武器 ID2
#--------------------------------------------------------------------------
def weapon2_id
   if $data_enemies[@enemy_id].treasure2 == ""
     return weapon_id
   elsif $data_enemies[@enemy_id].treasure2[0,1] != "W"
     return 0
   else
     return $data_enemies[@enemy_id].treasure2[/[0-9]+/].to_i
   end
end
#--------------------------------------------------------------------------
# ● 获取防具 ID2
#--------------------------------------------------------------------------
def armor2_id
   if $data_enemies[@enemy_id].treasure2 == ""
     return armor_id
   elsif $data_enemies[@enemy_id].treasure2[0,1] != "A"
     return 0
   else
     return $data_enemies[@enemy_id].treasure2[/[0-9]+/].to_i
   end
end
#--------------------------------------------------------------------------
# ● 获取物品 ID3
#--------------------------------------------------------------------------
def item3_id
   if $data_enemies[@enemy_id].treasure3 == ""
     return item2_id
   elsif $data_enemies[@enemy_id].treasure3[0,1] != "I"
     return 0
   else
     return $data_enemies[@enemy_id].treasure3[/[0-9]+/].to_i
   end
end
#--------------------------------------------------------------------------
# ● 获取武器 ID3
#--------------------------------------------------------------------------
def weapon3_id
   if $data_enemies[@enemy_id].treasure3 == ""
     return weapon2_id
   elsif $data_enemies[@enemy_id].treasure3[0,1] != "W"
     return 0
   else
     return $data_enemies[@enemy_id].treasure3[/[0-9]+/].to_i
   end
end
#--------------------------------------------------------------------------
# ● 获取防具 ID3
#--------------------------------------------------------------------------
def armor3_id
   if $data_enemies[@enemy_id].treasure3 == ""
     return armor2_id
   elsif $data_enemies[@enemy_id].treasure3[0,1] != "A"
     return 0
   else
     return $data_enemies[@enemy_id].treasure3[/[0-9]+/].to_i
   end
end
#--------------------------------------------------------------------------
# ● 获取物品 ID4
#--------------------------------------------------------------------------
def item4_id
   if $data_enemies[@enemy_id].treasure4 == ""
     return item3_id
   elsif $data_enemies[@enemy_id].treasure4[0,1] != "I"
     return 0
   else
     return $data_enemies[@enemy_id].treasure4[/[0-9]+/].to_i
   end
end
#--------------------------------------------------------------------------
# ● 获取武器 ID4
#--------------------------------------------------------------------------
def weapon4_id
   if $data_enemies[@enemy_id].treasure4 == ""
     return weapon3_id
   elsif $data_enemies[@enemy_id].treasure4[0,1] != "W"
     return 0
   else
     return $data_enemies[@enemy_id].treasure4[/[0-9]+/].to_i
   end
end
#--------------------------------------------------------------------------
# ● 获取防具 ID4
#--------------------------------------------------------------------------
def armor4_id
   if $data_enemies[@enemy_id].treasure4 == ""
     return armor3_id
   elsif $data_enemies[@enemy_id].treasure4[0,1] != "A"
     return 0
   else
     return $data_enemies[@enemy_id].treasure4[/[0-9]+/].to_i
   end
end
end

#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  处理战斗画面的类。
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● 开始结束战斗回合
#--------------------------------------------------------------------------
def start_phase5
   # 转移到回合 5
   @phase = 5
   # 演奏战斗结束 ME
   $game_system.me_play($game_system.battle_end_me)
   # 还原为战斗开始前的 BGM
   $game_system.bgm_play($game_temp.map_bgm)
   # 初始化 EXP、金钱、宝物
   exp = 0
   gold = 0
   treasures = []
   # 循环
   for enemy in $game_troop.enemies
     # 敌人不是隐藏状态的情况下
     unless enemy.hidden
       # 获得 EXP、增加金钱
       exp += enemy.exp
       gold += enemy.gold
       # 出现宝物判定
       if rand(100) < enemy.treasure_prob
         rarity = [178, 51, 15, 12]
         case rand(rarity[0] + rarity[1] + rarity[2]+ rarity[3])
         when 0..rarity[0] - 1
           if enemy.item1_id > 0
            treasures.push($data_items[enemy.item1_id])
           end
           if enemy.weapon1_id > 0
            treasures.push($data_weapons[enemy.weapon1_id])
           end
           if enemy.armor1_id > 0
             treasures.push($data_armors[enemy.armor1_id])
           end
         when rarity[0]..rarity[0] + rarity[1] - 1
           if enemy.item2_id > 0
             treasures.push($data_items[enemy.item2_id])
           end
           if enemy.weapon2_id > 0
            treasures.push($data_weapons[enemy.weapon2_id])
           end
           if enemy.armor2_id > 0
             treasures.push($data_armors[enemy.armor2_id])
           end
         when rarity[0] + rarity[1]..rarity[0] + rarity[1] + rarity[2] - 1
           if enemy.item3_id > 0
             treasures.push($data_items[enemy.item3_id])
           end
           if enemy.weapon3_id > 0
            treasures.push($data_weapons[enemy.weapon3_id])
           end
           if enemy.armor3_id > 0
             treasures.push($data_armors[enemy.armor3_id])
           end
         else
           if enemy.item4_id > 0
             treasures.push($data_items[enemy.item4_id])
           end
           if enemy.weapon4_id > 0
            treasures.push($data_weapons[enemy.weapon4_id])
           end
           if enemy.armor4_id > 0
             treasures.push($data_armors[enemy.armor4_id])
           end
         end
       end
     end
   end
   # 限制宝物数为 8 个
   treasures = treasures[0..7]
   # 获得 EXP
   for i in 0...$game_party.actors.size
     actor = $game_party.actors
     if actor.cant_get_exp? == false
       last_level = actor.level
       actor.exp += exp
       if actor.level > last_level
         @status_window.level_up(i)
       end
     end
   end
   # 获得金钱
   $game_party.gain_gold(gold)
   # 获得宝物
   for item in treasures
     case item
     when RPG::Item
       $game_party.gain_item(item.id, 1)
     when RPG::Weapon
       $game_party.gain_weapon(item.id, 1)
     when RPG::Armor
       $game_party.gain_armor(item.id, 1)
     end
   end
   # 生成战斗结果窗口
   @result_window = Window_BattleResult.new(exp, gold, treasures)
   # 设置等待计数
   @phase5_wait_count = 100
end
end


#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================



然后配合偷盗脚本
偷盗脚本#==============================================================================
#  简易偷盗系统 By 绿发的Eclair
#------------------------------------------------------------------------------
#  在数据库中设定一个叫“偷盗”的属性,让想要做偷盗效果的技能附带这个属性
#  就可以了*^_^*
#  
#  $偷盗属性名 :       数据库中偷盗属性的名字
#  $偷盗几率修正:      偷盗成功率修正
#  $不可偷盗敌人:      在这个数组中的敌人不能被偷盗,用于一些掉落唯一物品的敌人。
#  数组中两个元素间要用英文半角逗号隔开~~~
#  $偷盗失败损失P比例:偷盗失败时角色HP的减少量和最大HP的比例,为0就是不减少。
#==============================================================================
#==============================================================================
#  简易偷盗系统加強 By snstar2006
#------------------------------------------------------------------------------
#  加强部分
#  1. 偷盗後物品就会归零。
#  2. 四格掉宝设置的宝物无法偷盗。
#  3. 用探查技能可以看见能够偷得到的宝物。
#  4. 增加偷取金钱的功能。
#  5. 金钱只能偷取一次,偷窃後便无法在战斗结束时获得。
#  6. $偷盗金钱的机率:偷取时所得到的是物品还是金钱的机率。
#  7. 不想被偷的掉落物就用四格掉宝来掉落。
#     数据库设置的掉落物不会掉落。
#  8. 增加了修改敌人掉落物品时的方法,调用$game_enemy.item_id、.weapon_id、
#     .armor_id 和 .gold 时要注意。
#  这是考虑到像仙剑的
#==============================================================================

$偷盗属性名 = "偷盜"
$偷盗几率修正 = 0.5
$不可偷盗敌人 = [2]
$偷盗失败损失HP比例 = 0.01
$偷盗金钱的机率 = 50      # 百分比
class Game_Party
  attr_accessor :items
  attr_accessor :weapons
  attr_accessor :armors
end
class Scene_Battle
  attr_accessor :help_window
  #改名法重定义特技效果
  alias update_phase4_step5_Eclairsteal :update_phase4_step5
  def update_phase4_step5
    if @active_battler.current_action.kind == 1 and $data_skills[@active_battler.current_action.skill_id].element_set.include?($data_system.elements.index($偷盗属性名)) and @active_battler.is_a?(Game_Actor)
      for target in @target_battlers
        next if target.is_a?(Game_Actor)
        target.damage = "" if target.damage == "Miss"
        if (target.item_id == 0 and target.weapon_id == 0 and
          target.armor_id == 0 and target.gold == 0) or ($不可偷盗敌人.include?(target.id))
          #帮助窗口显示"没有可偷盗的物品",对齐方式为中间对齐
          @help_window.set_text("没有可偷盗的物品",1)
          for i in 0...20
            Graphics.update
            @help_window.update
            @spriteset.update
          end
          #直接结束
          next
        end
        final = (@active_battler.dex.to_f + @active_battler.agi.to_f) / (target.dex.to_f + target.agi.to_f)
        final *= target.treasure_prob
        final *= $偷盗几率修正
        final = final.round
        
        if rand(100) < final
          if (rand(100) < $偷盗金钱的机率)
            if target.item_id != 0
              $game_party.gain_item(target.item_id,1)
              text = "偷得:" + $data_items[target.item_id].name
              target.item_id = 0
            end
            if target.weapon_id != 0
              $game_party.gain_weapon(target.weapon_id,1)
              text = "偷得:" + $data_weapons[target.weapon_id].name
              target.weapon_id = 0
            end
            if target.armor_id != 0
              $game_party.gain_armor(target.armor_id,1)
              text = "偷得:" + $data_armors[target.armor_id].name
              target.armor_id = 0
            end
          else
            if target.gold != 0
              $game_party.gain_gold(target.gold)
              text = "偷得:" + target.gold.to_s + " " +$data_system.words.gold
              target.gold = 0
            end
          end
          @help_window.set_text(text,1)
          for i in 0...20
            Graphics.update
            @help_window.update
            @spriteset.update
          end
        else  
          @help_window.set_text("偷盗失败",1)
          @active_battler.hp -= (@active_battler.maxhp * $偷盗失败损失HP比例).round
          for i in 0...20
            Graphics.update
            @help_window.update
            @spriteset.update
          end
        end
      end
    end
    update_phase4_step5_Eclairsteal
  end
end
class Game_Enemy < Game_Battler
  def item_id=(id)
    $data_enemies[@enemy_id].item_id = id
  end
  def weapon_id=(id)
    $data_enemies[@enemy_id].weapon_id = id
  end
  def armor_id=(id)
    $data_enemies[@enemy_id].armor_id = id
  end
  def gold=(g)
    $data_enemies[@enemy_id].gold = g
  end
end
#==============================================================================
# 简易偷盗系统 By 绿发的Eclair
#==============================================================================


4格掉宝设置的物品无法偷到,所以想要被偷盗的物品就用数据库默认的掉宝
这样实现你掉落和偷盗的物品是不一样的要求
至于你说的被敌人群殴,你找下  嘲讽 脚本吧
(以上为本人思路,并未亲测,XP删了转入MV,所以无法测试)

评分

参与人数 1星屑 +300 收起 理由
hys111111 + 300 塞糖

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部