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

Project1

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

真实商店+物品仓库(1个问题)

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
58 小时
注册时间
2007-8-10
帖子
284
跳转到指定楼层
1
发表于 2008-10-29 06:44:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
请问我用了随机装备脚本 真实商店+物品仓库无论是买的还是从仓库里取出来的装备
属性都会被从新随机掉
如何实现存进去是白的取出来还是白的
(白的是指数据库里原始属性没有经过随机处理的装备)

  1. #==============================================================================
  2. # 本脚本来自www.66rpg.com,转载和使用请保留此信息
  3. # 脚本名:真实商店,脚本作者:柳柳
  4. #==============================================================================
  5. #
  6. # 功能:
  7. #
  8. # 买进卖出的物品在商店有所体现,卖出后会在商店可买物品中出现,物品有数量限制
  9. # 商店可进货出货————总之就是模拟真实商店。
  10. #  
  11. # 这个脚本和原装商店并不冲突,两个商店可以并存。
  12. #
  13. # 使用方法:
  14. #
  15. # 1、在下面被井号框起来的中间部分,设置初期物品。格式如下:
  16. #    @goods[商店编号] = [ [种类,ID,可卖数量] ,  [种类,ID,可卖数量]......]
  17. #    其中种类,0为道具,1为武器,2为防具;ID是数据库编号
  18. #
  19. # 2、调用:$scene = Scene_Shop_Va.new(商店编号)  
  20. #    比如你可以直接测试$scene = Scene_Shop_Va.new(1),已经设置好了。
  21. #
  22. # 3、商店出货:$game_system.shop_change(商店编号,种类,ID,数量)
  23. #    如果是进货,把数量设置为负数即可
  24. # 装备栏中卸下的武器不进行随机处理
  25. #



  26. class WWWindow_ShopCommand < Window_Selectable
  27.   
  28.   #--------------------------------------------------------------------------
  29.   # ● 初始化对像
  30.   #--------------------------------------------------------------------------
  31.   def initialize
  32.     super(0, 0, 480, 64)
  33.     self.contents = Bitmap.new(width - 32, height - 32)
  34.     @item_max = 3
  35.     @column_max = 3
  36.     @commands = ["买进", "卖出", "算了"]
  37.     refresh
  38.     self.index = 0
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 刷新
  42.   #--------------------------------------------------------------------------
  43.   def refresh
  44.     self.contents.clear
  45.     for i in 0...@item_max
  46.       draw_item(i)
  47.     end
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 描绘项目
  51.   #     index : 项目编号
  52.   #--------------------------------------------------------------------------
  53.   def draw_item(index)
  54.     x = 4 + index * 160
  55.     self.contents.draw_text(x, 0, 128, 32, @commands[index])
  56.   end
  57. end
  58. class W2Window_ShopCommand < Window_Selectable
  59.   #--------------------------------------------------------------------------
  60.   # ● 初始化对像
  61.   #--------------------------------------------------------------------------
  62.   def initialize
  63.     super(0, 0, 480, 125)
  64.     self.contents = Bitmap.new(width - 32, height - 32)
  65.     @item_max = 3
  66.     @column_max = 3
  67.     @commands = ["取出物品", "存入物品", "算了"]
  68.     refresh
  69.     self.index = 0
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 刷新
  73.   #--------------------------------------------------------------------------
  74.   def refresh
  75.     self.contents.clear
  76.     for i in 0...@item_max
  77.       draw_item(i)
  78.     end
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 描绘项目
  82.   #     index : 项目编号
  83.   #--------------------------------------------------------------------------
  84.   def draw_item(index)
  85.     x = 4 + index * 160
  86.     self.contents.draw_text(x, 0, 128, 32, @commands[index])
  87.   end
  88. end

  89. class Game_System

  90.   
  91. #--------------  
  92.   attr_accessor :goods   
  93.   alias vaule_shop_66RPG_initialize initialize
  94.   def initialize
  95.     vaule_shop_66RPG_initialize
  96.     @goods = []
  97.   ###########################################################################
  98.     # 初期的时候的商店物品,编号顺序:种类,ID,可卖数量
  99.     @goods[0] = [[-1,-1,-1]]
  100.     @goods[1] = [[0,1,30],[0,2,30],[1,1,10],[1,2,10],[1,3,10]]
  101.   ###########################################################################
  102.   end
  103.   def shop_change(shop,kind,id,delnumber)
  104.     dl = delnumber
  105.     for dt in $game_system.goods[shop]
  106.       if (dt[0]==kind) and (dt[1]==id)
  107.         dt[2] -= dl
  108.         dt[2] = [dt[2],99].min
  109.         if dt[2] == 0
  110.           $game_system.goods[shop].delete(dt)
  111.         end
  112.         return
  113.       end
  114.     end
  115.     $game_system.goods[shop].push([kind,id,-delnumber])
  116.   end
  117. end

  118. class Scene_Shop_Va
  119.   
  120.   def initialize(shop_number)
  121.     # 当前商店编号
  122.     @shop_now = shop_number
  123.     # 0号商店为物品仓库
  124.     $itembankflag = @shop_now > 0 ? 0 : 1
  125.   end   
  126.   #--------------------------------------------------------------------------
  127.   # ● 主处理
  128.   #--------------------------------------------------------------------------
  129.   def main
  130.     # 生成帮助窗口
  131. #    @help_window = Window_Help.new
  132.     # 生成指令窗口
  133.     if $itembankflag == 0 #是不是物品仓库?
  134.       @command_window = WWWindow_ShopCommand.new
  135.     else
  136.       @command_window = W2Window_ShopCommand.new
  137.     end  
  138.     # 生成金钱窗口
  139.     @gold_window = Window_Gold.new
  140.     @gold_window.x = 480
  141.     @gold_window.y = 0
  142.     # 生成时间窗口
  143.     @dummy_window = Window_Base.new(0, 64, 640, 420)
  144.     # 生成购买窗口
  145.     @buy_window = Window_ShopBuy_Va.new($game_system.goods[@shop_now])
  146.     @buy_window.active = false
  147.     @buy_window.visible = false
  148. #   @buy_window.help_window = @help_window
  149.     # 生成卖出窗口
  150.     @sell_window = Window_ShopSell.new
  151.     @sell_window.active = false
  152.     @sell_window.visible = false
  153.   #  @sell_window.help_window = @help_window
  154.     # 生成数量输入窗口
  155.     @number_window = Window_ShopNumber.new
  156.     @number_window.active = false
  157.     @number_window.visible = false
  158.     # 生成状态窗口
  159.     @status_window = Window_ShopStatus.new
  160.     @status_window.visible = false
  161.     # 执行过渡
  162.     Graphics.transition
  163.     # 主循环
  164.     loop do
  165.       # 刷新游戏画面
  166.       Graphics.update
  167.       # 刷新输入信息
  168.       Input.update
  169.       # 刷新画面
  170.       update
  171.       # 如果画面切换的话就中断循环
  172.       if $scene != self
  173.         break
  174.       end
  175.     end
  176.     # 准备过渡
  177.     Graphics.freeze
  178.     # 释放窗口
  179. #   @help_window.dispose
  180.     @command_window.dispose
  181.     @gold_window.dispose
  182.     @dummy_window.dispose
  183.     @buy_window.dispose
  184.     @sell_window.dispose
  185.     @number_window.dispose
  186.     @status_window.dispose
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 刷新画面
  190.   #--------------------------------------------------------------------------
  191.   def update
  192.     # 刷新窗口
  193. #   @help_window.update
  194.     @command_window.update
  195.     @gold_window.update
  196.     @dummy_window.update
  197.     @buy_window.update
  198.     @sell_window.update
  199.     @number_window.update
  200.     @status_window.update
  201.     # 指令窗口激活的情况下: 调用 update_command
  202.     if @command_window.active
  203.       update_command
  204.       return
  205.     end
  206.     # 购买窗口激活的情况下: 调用 update_buy
  207.     if @buy_window.active
  208.       update_buy
  209.       return
  210.     end
  211.     # 卖出窗口激活的情况下: 调用 update_sell
  212.     if @sell_window.active
  213.       update_sell
  214.       return
  215.     end
  216.     # 个数输入窗口激活的情况下: 调用 update_number
  217.     if @number_window.active
  218.       update_number
  219.       return
  220.     end
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # ● 刷新画面 (指令窗口激活的情况下)
  224.   #--------------------------------------------------------------------------
  225.   def update_command
  226.     # 按下 B 键的情况下
  227.     if Input.trigger?(Input::B)
  228.       # 演奏取消 SE
  229.       $game_system.se_play($data_system.cancel_se)
  230.       # 切换到地图画面
  231.       $scene = Scene_Map.new
  232.       return
  233.     end
  234.     # 按下 C 键的情况下
  235.     if Input.trigger?(Input::C)
  236.       # 命令窗口光标位置分支
  237.       case @command_window.index
  238.       when 0  # 购买
  239.         # 演奏确定 SE
  240.         $game_system.se_play($data_system.decision_se)
  241.         # 窗口状态转向购买模式
  242.         @command_window.active = false
  243.         @dummy_window.visible = false
  244.         @buy_window.active = true
  245.         @buy_window.visible = true
  246.         @buy_window.refresh
  247.         @status_window.visible = true
  248.       when 1  # 卖出
  249.         # 演奏确定 SE
  250.         $game_system.se_play($data_system.decision_se)
  251.         # 窗口状态转向卖出模式
  252.         @command_window.active = false
  253.         @dummy_window.visible = false
  254.         @sell_window.active = true
  255.         @sell_window.visible = true
  256.         @sell_window.refresh
  257.       when 2  # 取消
  258.         # 演奏确定 SE
  259.         $game_system.se_play($data_system.decision_se)
  260.         # 切换到地图画面
  261.         $scene = Scene_Map.new
  262.       end
  263.       return
  264.     end
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ● 刷新画面 (购买窗口激活的情况下)
  268.   #--------------------------------------------------------------------------
  269.   def update_buy
  270.     # 设置状态窗口的物品
  271.     @status_window.item = @buy_window.item
  272.     # 按下 B 键的情况下
  273.     if Input.trigger?(Input::B)
  274.       # 演奏取消 SE
  275.       $game_system.se_play($data_system.cancel_se)
  276.       # 窗口状态转向初期模式
  277.       @command_window.active = true
  278.       @dummy_window.visible = true
  279.       @buy_window.active = false
  280.       @buy_window.visible = false
  281.       @status_window.visible = false
  282.       @status_window.item = nil
  283.       # 删除帮助文本
  284.    #   @help_window.set_text("")
  285.       return
  286.     end
  287.     # 按下 C 键的情况下
  288.     if Input.trigger?(Input::C)
  289.       # 获取物品
  290.       @item = @buy_window.item
  291.       
  292. # 如果是物品仓库就不对金钱做出处理=============================================      
  293.       ppprice = $itembankflag == 0 ? @item.price : 0
  294.       # 物品无效的情况下、或者价格在所持金以上的情况下
  295.       if @item == nil or ppprice > $game_party.gold
  296.         # 演奏冻结 SE
  297.         $game_system.se_play($data_system.buzzer_se)
  298.         return
  299.       end
  300.       # 获取物品所持数
  301.       case @item
  302.       when RPG::Item
  303.       
  304.         number = $game_party.item_number(@item.id)
  305.       when RPG::Weapon
  306.         number = $game_party.weapon_number(@item.id)
  307.       when RPG::Armor
  308.         number = $game_party.armor_number(@item.id)
  309.       end
  310.       # 如果已经拥有了 99 个情况下
  311.       if number == 99
  312.         # 演奏冻结 SE
  313.         $game_system.se_play($data_system.buzzer_se)
  314.         return
  315.       end
  316.       # 演奏确定 SE
  317.       $game_system.se_play($data_system.decision_se)
  318.       # 计算可以最多购买的数量
  319.       max = ppprice == 0 ? 99 : $game_party.gold / @item.price
  320. # =============================================================================      
  321.       
  322.       max = [[max, 99 - number].min,@buy_window.item_number].min
  323.       # 窗口状态转向数值输入模式
  324.       @buy_window.active = false
  325.       @buy_window.visible = false
  326.       @number_window.set(@item, max, ppprice)
  327.       @number_window.active = true
  328.       @number_window.visible = true
  329.     end
  330.   end
  331.   #--------------------------------------------------------------------------
  332.   # ● 画面更新 (卖出窗口激活的情况下)
  333.   #--------------------------------------------------------------------------
  334.   def update_sell
  335.     # 按下 B 键的情况下
  336.     if Input.trigger?(Input::B)
  337.       # 演奏取消 SE
  338.       $game_system.se_play($data_system.cancel_se)
  339.       # 窗口状态转向初期模式
  340.       @command_window.active = true
  341.       @dummy_window.visible = true
  342.       @sell_window.active = false
  343.       @sell_window.visible = false
  344.       @status_window.item = nil
  345.       # 删除帮助文本
  346. #     @help_window.set_text("")
  347.       return
  348.     end
  349.     # 按下 C 键的情况下
  350.     if Input.trigger?(Input::C)
  351.       # 获取物品
  352.       @item = @sell_window.item
  353.       # 设置状态窗口的物品
  354.       @status_window.item = @item
  355.       # 物品无效的情况下、或者价格为 0 (不能卖出) 的情况下
  356.       if @item == nil or @item.price == 0
  357.         # 演奏冻结 SE
  358.         $game_system.se_play($data_system.buzzer_se)
  359.         return
  360.       end
  361.       # 演奏确定 SE
  362.       $game_system.se_play($data_system.decision_se)
  363.       # 获取物品的所持数
  364.       case @item
  365.       when RPG::Item
  366.         number = $game_party.item_number(@item.id)
  367.       when RPG::Weapon
  368.         number = $game_party.weapon_number(@item.id)
  369.       when RPG::Armor
  370.         number = $game_party.armor_number(@item.id)
  371.       end
  372.       # 最大卖出个数 = 物品的所持数
  373.       max = number
  374.       # 窗口状态转向个数输入模式
  375.       @sell_window.active = false
  376.       @sell_window.visible = false
  377.       @number_window.set(@item, max, @item.price)
  378.       @number_window.active = true
  379.       @number_window.visible = true
  380.       @status_window.visible = true
  381.     end
  382.   end
  383.   #--------------------------------------------------------------------------
  384.   # ● 刷新画面 (个数输入窗口激活的情况下)
  385.   #--------------------------------------------------------------------------
  386.   def update_number
  387.     # 按下 B 键的情况下
  388.     if Input.trigger?(Input::B)
  389.       # 演奏取消 SE
  390.       $game_system.se_play($data_system.cancel_se)
  391.       # 设置个数输入窗口为不活动·非可视状态
  392.       @number_window.active = false
  393.       @number_window.visible = false
  394.       # 命令窗口光标位置分支
  395.       case @command_window.index
  396.       when 0  # 购买
  397.         # 窗口状态转向购买模式
  398.         @buy_window.active = true
  399.         @buy_window.visible = true
  400.       when 1  # 卖出
  401.         # 窗口状态转向卖出模式
  402.         @sell_window.active = true
  403.         @sell_window.visible = true
  404.         @status_window.visible = false
  405.       end
  406.       return
  407.     end
  408.     # 按下 C 键的情况下
  409.     if Input.trigger?(Input::C)
  410.       # 演奏商店 SE
  411.       $game_system.se_play($data_system.shop_se)
  412.       # 设置个数输入窗口为不活动·非可视状态
  413.       @number_window.active = false
  414.       @number_window.visible = false
  415.       # 命令窗口光标位置分支
  416.       case @command_window.index
  417.       when 0  # 购买
  418.         # 购买处理
  419.         temp = 0
  420. #        if $超重不能买 > 0
  421. #          @number_window.active = true
  422. #          @number_window.visible = true
  423. #          return
  424. #        end  
  425. # 如果是物品仓库就不对金钱做出处理=============================================        
  426.         if $itembankflag == 0
  427.           $game_party.lose_gold(@number_window.number * @item.price)
  428.         end  
  429. # =============================================================================        
  430.         
  431.         case @item
  432.         when RPG::Item
  433.           $game_party.gain_item(@item.id, @number_window.number)
  434.         when RPG::Weapon
  435.           $game_party.gain_weapon(@item.id, @number_window.number)
  436.           temp = 1
  437.         when RPG::Armor
  438.           $game_party.gain_armor(@item.id, @number_window.number)
  439.           temp = 2
  440.         end
  441.         goods_del(temp,@item.id,@number_window.number)
  442.         # 刷新各窗口
  443.         @buy_window = Window_ShopBuy_Va.new($game_system.goods[@shop_now])
  444.         @gold_window.refresh
  445.         @buy_window.refresh
  446.         @status_window.refresh
  447.         # 窗口状态转向购买模式
  448.         @buy_window.active = true
  449.         @buy_window.visible = true
  450.       when 1  # 卖出
  451.         # 卖出处理
  452.         
  453. # 如果是物品仓库就不对金钱做出处理=============================================        
  454.         if $itembankflag == 0
  455.          $game_party.gain_gold(@number_window.number * (@item.price / 2))
  456.         end  
  457. # =============================================================================        
  458.         
  459.         temp = 0
  460.         case @item
  461.         when RPG::Item
  462.           $game_party.lose_item(@item.id, @number_window.number)
  463.         when RPG::Weapon
  464.           $game_party.lose_weapon(@item.id, @number_window.number)
  465.           temp = 1
  466.         when RPG::Armor
  467.           $game_party.lose_armor(@item.id, @number_window.number)
  468.           temp = 2
  469.         end
  470.         # 刷新各窗口
  471.         goods_del(temp,@item.id,-@number_window.number)
  472.         @buy_window = Window_ShopBuy_Va.new($game_system.goods[@shop_now])
  473.         @buy_window.active = false
  474.         @buy_window.visible = false
  475.    #     @buy_window.help_window = @help_window
  476.         @gold_window.refresh
  477.         @sell_window.refresh
  478.         @status_window.refresh
  479.         # 窗口状态转向卖出模式
  480.         @sell_window.active = true
  481.         @sell_window.visible = true
  482.         @status_window.visible = false
  483.       end
  484.       return
  485.     end
  486.   end
  487.   # 删除可出售商品内容
  488.   def goods_del(kind,id,delnumber)
  489.     dl = delnumber
  490.     for dt in $game_system.goods[@shop_now]
  491.       if (dt[0]==kind) and (dt[1]==id)
  492.         dt[2] -= dl
  493.         dt[2] = [dt[2],99].min
  494.         if dt[2] == 0
  495.           $game_system.goods[@shop_now].delete(dt)
  496.         end
  497.         return
  498.       end
  499.     end
  500.     $game_system.goods[@shop_now].push([kind,id,-delnumber])
  501.   end
  502. end
  503. #==============================================================================
  504. # ■ Window_ShopBuy_Va
  505. #------------------------------------------------------------------------------
  506. #  商店画面、浏览显示可以购买的商品的窗口。
  507. #==============================================================================

  508. class Window_ShopBuy_Va < Window_Selectable
  509.   attr_accessor :shop_goods
  510.   #--------------------------------------------------------------------------
  511.   # ● 初始化对像
  512.   #     shop_goods : 商品
  513.   #--------------------------------------------------------------------------
  514.   def initialize(shop_goods)
  515.    super(0, 63, 368, 418)
  516.    @shop_goods = shop_goods
  517.    refresh
  518.    self.index = 0
  519. end
  520.   #--------------------------------------------------------------------------
  521.   # ● 获取物品
  522.   #--------------------------------------------------------------------------
  523.   def item
  524.     return @data[self.index]
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ● 获取物品
  528.   #--------------------------------------------------------------------------
  529.   def item_number
  530.     return @data_number[self.index]
  531.   end
  532.   #--------------------------------------------------------------------------
  533.   # ● 刷新
  534.   #--------------------------------------------------------------------------
  535.   def refresh
  536.     if self.contents != nil
  537.       self.contents.dispose
  538.       self.contents = nil
  539.     end
  540.     @data = []
  541.     @data_number = []
  542.     for goods_item in @shop_goods
  543.       case goods_item[0]
  544.       when 0
  545.         item = $data_items[goods_item[1]]
  546.       when 1
  547.         item = $data_weapons[goods_item[1]]
  548.       when 2
  549.         item = $data_armors[goods_item[1]]
  550.       end
  551.       if (item != nil) and (goods_item[2] != 0)
  552.         @data.push(item)
  553.         @data_number.push(goods_item[2])
  554.       else
  555.         @data.delete(item)
  556.       end
  557.     end
  558.     # 如果项目数不是 0 就生成位图、描绘全部项目
  559.     @item_max = @data.size
  560.     if @item_max > 0
  561.       self.contents = Bitmap.new(width - 32, row_max * 32)
  562.       for i in 0...@item_max
  563.         draw_item(i)
  564.       end
  565.     end
  566.   end
  567.   #--------------------------------------------------------------------------
  568.   # ● 描绘羡慕
  569.   #     index : 项目编号
  570.   #--------------------------------------------------------------------------
  571.   def draw_item(index)
  572.     item = @data[index]
  573.     # 获取物品所持数
  574.     case item
  575.     when RPG::Item
  576.       number = $game_party.item_number(item.id)
  577.     when RPG::Weapon
  578.       number = $game_party.weapon_number(item.id)
  579.     when RPG::Armor
  580.       number = $game_party.armor_number(item.id)
  581.     end
  582.     # 价格在所持金以下、并且所持数不是 99 的情况下为普通文字颜色
  583.     # 除此之外的情况设置为无效文字色
  584.     if item.price <= $game_party.gold and number < 99
  585.       self.contents.font.color = normal_color
  586.     else
  587.       self.contents.font.color = disabled_color
  588.     end
  589.     x = 4
  590.     y = index * 32
  591.     rect = Rect.new(x, y, self.width - 32, 32)
  592.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  593.     bitmap = RPG::Cache.icon(item.icon_name)
  594.     opacity = self.contents.font.color == normal_color ? 255 : 128
  595.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  596.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  597.     self.contents.draw_text(x + 240, y, 88, 32, "剩  ", 2)
  598.     self.contents.draw_text(x + 240, y, 88, 32, @data_number[index].to_s, 2)
  599.     if $itembankflag == 0  
  600.       self.contents.draw_text(x + 180, y, 88, 32, item.price.to_s, 2)
  601.     end  
  602.   end
  603.   #--------------------------------------------------------------------------
  604.   # ● 刷新帮助文本
  605.   #--------------------------------------------------------------------------
  606.   def update_help
  607. #    @help_window.set_text(self.item == nil ? "" : self.item.description)
  608.   end
  609. end

  610. #==============================================================================
  611. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  612. #==============================================================================
复制代码

版务信息:本贴由楼主自主结贴~

Lv1.梦旅人

梦石
0
星屑
50
在线时间
58 小时
注册时间
2007-8-10
帖子
284
2
 楼主| 发表于 2008-10-29 06:49:22 | 只看该作者
随机脚本是这样的
  1. # 重點:quality
  2. class Game_Party
  3.   def gain_weapon(weapon_id, n)
  4.     setting = Radom_Creation.new
  5.     identified_control = setting.identified_control
  6.     if weapon_id > 0
  7. #--------------
  8. # 装备栏中卸下的武器不进行随机处理
  9.          
  10.       if $scene.is_a?(Scene_Equip)or      
  11.         get_weapon(weapon_id, n)
  12.         return
  13. # -------------
  14. # 或者「真の窗口風格·に·Step2」
  15. #
  16.       elsif $scene.is_a?(Deatwo_Smith_Shop2)
  17.         get_weapon(weapon_id, n)
  18.         return
  19. #--------------
  20. # 商店购买 則原版複製
  21. #
  22.       elsif $scene.is_a?(Scene_Shop)
  23.         gain_weapon_f_shop(weapon_id, n)
  24.         return
  25. #--------------  
  26. # 此外 皆隨機生成
  27. #
  28.       else
  29.         # 鑒定系統開啓
  30.         if identified_control == 1 and $data_weapons[weapon_id].identified == true and rand(50)<40
  31.           #-生成沒有鉴定的武器
  32.           unidentify_weapon(weapon_id, n)
  33.         else
  34.           for j in 1..n
  35.             # 取得設定
  36.             t = setting.t
  37.             l_t =setting.l_t
  38.             best_quality = setting.best_quality
  39.             level_set = setting.level_set
  40.             worst_level_set = setting.worst_level_set
  41.             #------------------
  42.             a = rand(1000)
  43.             b = 1000 - t - l_t # 上下分岐
  44.             b2 = 1000 - t # 上中分岐
  45.             if a > b # 成功
  46.               if a > b2 # 中品
  47.                 s = 1
  48.               else # 上品
  49.                 s = 2
  50.               end
  51.             else #下品
  52.               s = 0
  53.             end
  54.             b = (best_quality * 1/3).round
  55.             case s
  56.             when 0
  57.               vid = 0
  58.               new_holes = rand(2)+3
  59.             when 1
  60.               vid = (best_quality * 1/3).round
  61.               new_holes = rand(3)+2
  62.             when 2
  63.               vid = (best_quality * 2/3).round
  64.               new_holes = rand(5)
  65.             end
  66.             
  67.             weapon = $data_weapons[weapon_id]
  68.             new_name = weapon.name.split(/(未鑑定)/)[0]
  69.             new_des = weapon.description
  70.             new_price = weapon.price            
  71.             new_atk = weapon.atk
  72.             new_mdef = weapon.mdef            
  73.             new_str = weapon.str_plus
  74.             new_dex = weapon.dex_plus
  75.             new_agi = weapon.agi_plus
  76.             new_int = weapon.int_plus
  77.             new_element = weapon.element_set.clone
  78.             new_state = weapon.plus_state_set.clone
  79.             new_duration = weapon.max_duration
  80.             
  81.             # 取得quality總量
  82.             xio = rand(b)+vid
  83. =begin
  84.             #--再折損值
  85.             if worst_level_set!=nil
  86.               if worst_level_set[1]!=nil
  87.                 xio -= rand(worst_level_set[1])
  88.               end
  89.             end
  90. =end
  91.             # 初始化quality
  92.             quality = 0
  93.             # 如果設定增加屬性以及狀態:
  94.             if setting.element_set.size > 0 and setting.state_set.size > 0
  95.               kind = rand(3)
  96.             # 否則
  97.             else
  98.               kind = rand(2)
  99.             end
  100.             for i in 1..10
  101.               if xio < 2
  102.                 break
  103.               end
  104.               case kind
  105.               when 0
  106.                 # 附加一攻兩防
  107.                 a_a = rand(xio/3).round
  108.                 a_p = rand(xio/3).round
  109.                 a_m = rand(xio/3).round
  110.                 new_atk += a_a * setting.f_atk
  111.                 new_pdef += a_p * setting.f_pdef
  112.                 new_mdef  += a_m * setting.f_mdef
  113.                 xio -= (a_a + a_p + a_m)
  114.                 quality += (a_a + a_p + a_m)
  115.                 # 附加四參數
  116.               when 1
  117.                 a_s = rand(xio/4).round
  118.                 a_d = rand(xio/4).round
  119.                 a_g = rand(xio/4).round
  120.                 a_i = rand(xio/4).round
  121.                 new_str += a_s
  122.                 new_dex += a_d
  123.                 new_agi += a_g
  124.                 new_int += a_i
  125.                 xio -= (a_s + a_d + a_g +a_i)
  126.                 quality +=(a_s + a_d + a_g +a_i)
  127.                 # 附加屬性以及狀態
  128.               when 2
  129. #錯誤報告-------
  130. p "未曾設定element_set於隨機武器·基本定義" if setting.element_set.size < 1
  131. p "未曾設定state_set於隨機武器·基本定義" if setting.state_set.size < 1
  132. p "請修改「隨機武器·核心」" unless setting.element_set.size > 0 and setting.state_set.size > 0
  133. #---------------
  134.                 dio = rand(xio/2).round
  135.                 cost = setting.cost
  136.                 if xio >= cost
  137.                   sc_kind = rand(2)
  138.                   case sc_kind
  139.                   when 0
  140.                     n_el = setting.element_set[rand(setting.element_set.size)]
  141.                     new_element = new_element|[n_el]
  142.                     quality += cost
  143.                     xio -= cost
  144.                   when 1
  145.                     n_st = setting.state_set[rand(setting.state_set.size)]
  146.                     new_state = new_state|[n_st]
  147.                     quality += cost
  148.                     xio -= cost
  149.                   end
  150.                 end
  151.               end
  152.             end
  153.             #---------
  154.             # p quality
  155.             if new_element.include?(8)
  156.               new_name = "终极"+ new_name
  157.             elsif new_element.include?(8)
  158.               new_name = "天极"+ new_name
  159.             end
  160.             q = best_quality
  161.             new_color = 0
  162.             if level_set !=nil
  163.               for i in level_set
  164.                 if i[0] != nil
  165.                   q -= i[0]
  166.                   # p q
  167.                   if quality > q
  168.                     if i [1]!= nil
  169.                       new_color = i[1]
  170.                     end
  171.                     if i[2]!=nil
  172.                       new_name = i[2] + new_name
  173.                     end
  174.                     if i[3]!=nil
  175.                       new_name = new_name + i[3]
  176.                     end
  177.                     break
  178.                   end
  179.                 end
  180.               end
  181.             end
  182.             if quality < 0
  183.               if worst_level_set!=nil
  184.                 new_color = worst_level_set[0]
  185.                 if worst_level_set[2]!=nil
  186.                   new_name = new_name + worst_level_set[2]
  187.                 end
  188.                 if worst_level_set[3]!=nil
  189.                   new_name = new_name + worst_level_set[3]
  190.                 end
  191.               end
  192.             end
  193.             new_duration = quality*setting.f_duration
  194.           #------------------
  195.          
  196.             if $data_weapons[weapon_id].identified == true
  197.               # 母本數據複製
  198.               new_weapon = $data_weapons[weapon_id].clone
  199.               # 産生新Id
  200.               need = 0
  201.               for need in 1...$data_weapons.size
  202.                 if $data_weapons[need].needed == false
  203.                   break
  204.                 end
  205.               end
  206.               if need = 0
  207.                 new_weapon.id = $data_weapons.size
  208.               else
  209.                 new_weapon.id = need
  210.               end
  211.               # 更新數據
  212.               new_weapon.name = new_name
  213.               new_weapon.description = new_des
  214.               new_weapon.atk = new_atk
  215.               new_weapon.pdef = new_pdef
  216.               new_weapon.mdef = new_mdef
  217.               new_weapon.price = new_price
  218.               new_weapon.str_plus = new_str
  219.               new_weapon.dex_plus = new_dex
  220.               new_weapon.agi_plus = new_agi
  221.               new_weapon.int_plus = new_int
  222.               new_weapon.color = new_color
  223.               new_weapon.quality = quality
  224.               new_weapon.holes = new_holes
  225.               new_weapon.element_set = new_element
  226.               new_weapon.plus_state_set = new_state
  227.               new_weapon.max_duration = new_duration
  228.               new_weapon.current_duration = new_duration
  229.               new_weapon.needed = true
  230.               # 添加入數據库
  231.               $data_weapons.push(new_weapon)
  232.               # 职业可裝備武器數組更新
  233.               renew_weapon_f_classes(weapon_id, new_weapon.id)
  234.               # 增加武器
  235.               get_weapon(new_weapon.id, 1)
  236.             else
  237.               # 更新數據
  238.               weapon.name = new_name
  239.               weapon.description = new_des
  240.               weapon.atk = new_atk
  241.               weapon.pdef = new_pdef
  242.               weapon.mdef = new_mdef
  243.               weapon.price = new_price
  244.               weapon.str_plus = new_str
  245.               weapon.dex_plus = new_dex
  246.               weapon.agi_plus = new_agi
  247.               weapon.int_plus = new_int
  248.               weapon.color = new_color
  249.               weapon.quality = quality
  250.               weapon.holes = new_holes
  251.               weapon.element_set = new_element
  252.               weapon.plus_state_set = new_state
  253.               weapon.max_duration = new_duration
  254.               weapon.current_duration = new_duration
  255.               weapon.needed = true
  256.               # 取消未鑒定標志
  257.               weapon.identified = true
  258.               # 增加武器
  259.               get_weapon(weapon.id, 1)
  260.             end
  261.           end
  262.         end
  263.       end
  264.     end
  265.   end
  266. #--------------  
  267. # 生成沒有鉴定的武器
  268. #
  269.   def unidentify_weapon(weapon_id, n)
  270.     weapon = $data_weapons[weapon_id].clone
  271.     for j in 1..n
  272.       weapon.id = $data_weapons.size
  273.       weapon.name +="(未鑑定)"
  274.       weapon.identified =false
  275.       weapon.needed = true
  276.       $data_weapons.push(weapon)
  277.       # 职业可装备武器数组更新~
  278.       renew_weapon_f_classes(weapon_id, weapon.id)
  279.       # 增加武器
  280.       get_weapon(weapon.id, 1)
  281.     end
  282.   end
  283. #--------------  
  284. # 职业可装备武器组更新
  285. #
  286.   def renew_weapon_f_classes(weapon_id, new_weapon_id)
  287.     for i in 1...$data_classes.size
  288.       if $data_classes[i].weapon_set.include?(weapon_id)
  289.         $data_classes[i].weapon_set.push(new_weapon_id)
  290.       end
  291.     end
  292.   end
  293. #--------------  
  294. # 增加武器
  295. #
  296.   def get_weapon(weapon_id, n)
  297.     @weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, 99].min
  298.   end
  299. #--------------  
  300. # 失去武器
  301. #
  302.   def lose_weapon(weapon_id, n)   
  303.     if weapon_id > 0
  304.       @weapons[weapon_id] = [[weapon_number(weapon_id) - n, 0].max, 99].min
  305.       $data_weapons[weapon_id].needed == false
  306.     end
  307.   end
  308. end
复制代码

随机系统商店用
  1. class Game_Party
  2. #--------------   
  3. # 更新數據库
  4. #
  5.   def data_saving(kind)
  6.     return
  7. =begin
  8.     case kind
  9.     when 0
  10.       # 更新武器數據库
  11.       save_data($data_weapons, "Data/Weapons.rxdata")
  12.       save_data($data_classes, "Data/Classes.rxdata")
  13.       $data_weapons = load_data("Data/Weapons.rxdata")
  14.       $data_classes = load_data("Data/Classes.rxdata")
  15.     when 1
  16.       # 更新防具數據库
  17.       save_data($data_armors, "Data/Armors.rxdata")
  18.       save_data($data_classes, "Data/Classes.rxdata")
  19.       $data_armors = load_data("Data/Armors.rxdata")
  20.       $data_classes = load_data("Data/Classes.rxdata")
  21.     end
  22. =end
  23.   end
  24. #--------------   
  25. # 商店購買武器 則原版本複製
  26. #
  27.   def gain_weapon_f_shop(weapon_id, n)
  28.     if weapon_id > 0
  29.       # 商店购买
  30.       if $scene.is_a?(Scene_Shop)
  31.         weapon = $data_weapons[weapon_id].clone
  32.         for j in 1..n
  33.           weapon.id = $data_weapons.size
  34.           weapon.needed = true
  35.           $data_weapons.push(weapon)
  36.           # 职业可装备武器数组更新~
  37.           for i in 1...$data_classes.size
  38.             if $data_classes[i].weapon_set.include?(weapon_id)
  39.               $data_classes[i].weapon_set.push(weapon.id)
  40.             end
  41.           end
  42.           @weapons[weapon.id] = [[weapon_number(weapon.id) + 1, 0].max, 99].min
  43.         end
  44.       end
  45.     end
  46.   end
  47. #--------------   
  48. # 商店購買裝備 則原版本複製
  49. #
  50.   def gain_armor_f_shop(armor_id, n)
  51.     if armor_id > 0
  52.       # 商店购买
  53.       if $scene.is_a?(Scene_Shop)
  54.         armor = $data_armors[armor_id].clone
  55.         for j in 1..n
  56.           armor.id = $data_armors.size
  57.           armor.needed = true
  58.           $data_armors.push(armor)
  59.           # 职业可装备裝備数组更新~
  60.           for i in 1...$data_classes.size
  61.             if $data_classes[i].armor_set.include?(armor_id)
  62.               $data_classes[i].armor_set.push(armor.id)
  63.             end
  64.           end
  65.           @armors[armor.id] = [[armor_number(armor.id) + 1, 0].max, 99].min
  66.         end
  67.       end
  68.     end
  69.   end
  70. end

复制代码
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

lov Peii 4ever

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-10-28
帖子
423
3
发表于 2008-10-29 06:52:14 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
58 小时
注册时间
2007-8-10
帖子
284
4
 楼主| 发表于 2008-10-30 02:58:20 | 只看该作者
谢谢啊 好人
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-22 13:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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