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

Project1

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

關於掉落多種物品腳本的問題!!

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-9-5
帖子
265
跳转到指定楼层
1
发表于 2009-3-28 00:45:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv1.梦旅人

梦石
0
星屑
50
在线时间
256 小时
注册时间
2008-8-1
帖子
532
2
发表于 2009-4-2 02:06:51 | 只看该作者
LZ用的那个脚本说说来,或者贴出来
《神雕侠侣后传》预告系统:完全鼠标操作。战斗:全动画CP制战斗。系统:100%,已完成。素材:人物60%,地图20%剧情:20%。CG动画:100%。http://rpg.blue/forumTopicR ... 2%2D23+21%3A42%3A05
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-9-5
帖子
265
3
 楼主| 发表于 2009-4-2 22:25:40 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
4
发表于 2009-4-8 13:01:55 | 只看该作者
就拿 [178, 51, 15, 12] 來說吧,sailcat 是這樣算的:
生成一個0~256(不包括256)的隨機數,如果數的範圍在——
0~178(不包括178):
得到默認掉落物品;
178~(178+51)
=178~229(不包括229):
得到敵人名稱第一個逗號之後的物品;
(178+51)~(178+51+15)
=229~244(不包括244):
得到敵人名稱第二個逗號之後的物品:
其余情況下——
244~256(不包括256):
得到敵人名稱第三個逗號之後的物品
所以在敵人名稱那裏越靠後掉落的概率就越小~
因為這裏是 case 語句,所以一次只能得到一個物品

其實每個 case 中的那些 if 其實 if..elsif.. 效率最高,if 三次會 100% 機率判斷三次,而數據庫中只能選擇一種類型的物品(這個很奇怪,腳本中用的是數組來保存寶物,結果用戶卻只能選擇一種),逗號之間也只可能有一種,如果是物品的話只需要判斷一次,武器只需要判斷兩次,除非是防具才需要判斷三次……跑題了跑題了 >.>

回到主題,如果想一次掉落多種物品,可以這樣:
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
        # 直接指定四格掉落物品的概率,0 不掉,1 總是掉
        prob = [1, 0.5, 0.3, 0.2]

        # 出现宝物判定
        if rand < prob[0]
          if enemy.item_id > 0
            treasures.push($data_items[enemy.item_id])
          elsif enemy.weapon_id > 0
            treasures.push($data_weapons[enemy.weapon_id])
          elsif enemy.armor_id > 0
            treasures.push($data_armors[enemy.armor_id])
          end
        end
        if rand < prob[1]
          if enemy.item2_id > 0
            treasures.push($data_items[enemy.item2_id])
          elsif enemy.weapon2_id > 0
            treasures.push($data_weapons[enemy.weapon2_id])
          elsif enemy.armor2_id > 0
            treasures.push($data_armors[enemy.armor2_id])
          end
        end
        if rand < prob[2]
          if enemy.item3_id > 0
            treasures.push($data_items[enemy.item3_id])
          elsif enemy.weapon3_id > 0
            treasures.push($data_weapons[enemy.weapon3_id])
          elsif enemy.armor3_id > 0
            treasures.push($data_armors[enemy.armor3_id])
          end
        end
        if rand < prob[3]
          if enemy.item4_id > 0
            treasures.push($data_items[enemy.item4_id])
          elsif enemy.weapon4_id > 0
            treasures.push($data_weapons[enemy.weapon4_id])
          elsif enemy.armor4_id > 0
            treasures.push($data_armors[enemy.armor4_id])
          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

版主对此帖的认可:『解答非常认真,辛苦了』,积分『+100』。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-9-5
帖子
265
5
 楼主| 发表于 2009-4-9 08:28:55 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
6
发表于 2009-4-9 13:55:02 | 只看该作者
概率是用在 0~1 范圍中的實數來表示的,包括 0 和 1~
所以——
1 = 100% 機率
0.5 = 50%
0.3 = 30%
0.2 = 20%
0.05 = 5%
0.25 = 25%
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-9-5
帖子
265
7
 楼主| 发表于 2009-4-9 14:24:09 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
8
发表于 2009-4-9 15:03:46 | 只看该作者
是的,照著 treasure4、armor4_id 那些添加 tresure5、armor5_id 等,下面 if rand < prob[3] 那里也添加上 if rand < prob[4],以此類推~

其實這個腳本一開始就可以寫成掉落格數可變,那樣就方便多了,將逗號分開后的字符串保存起來,判斷長度,然后傳遞一個數 n 給 item_id 那些方法,僅僅獲取該敵人的第 n 個掉落寶物,這樣才有靈活性~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-16 13:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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